OASIS Darwin Information Typing Architecture (DITA) TC

 View Only
Expand all | Collapse all

Scenario for cross-deliverable referencing

  • 1.  Scenario for cross-deliverable referencing

    Posted 09-06-2011 14:21
    This was my todo from last week's mtg - sorry I'm leaving it to the wire. This describes a solution that can be implemented today - I still think there more work to be done, including: -  a general solution for key scoping (but not deliverable-based scoping since the boundaries of deliverables are mutable, as I'm trying to show here). - a standardized approach for cross-deliverable referencing - if we want to encourage this approach, for example, or propose an alternative - but we should be providing some guidance to vendors on how to implement so that the solution is cross-vendor compatible scenario: - we need to produce PDFs for each chapter of a book, as well as a single big PDF that contains all chapters - the chapters contain cross-references to content in other chapters, which needs to be resolved as a cross-deliverable link in the single-chapter PDFs but as a local link in the single big PDF case - each chapter is represented by a separate map - each topicref in the map has a uniquely addressable key (using whatever general scoping mechanism we choose to implement) - the book as a whole is represented by a master map that pulls in the others solution for individual chapter case: - for each chapter, execute a partial PDF build, which does not transform the content but does preprocess the map to turn each topicref href into a form appropriate for the deliverable being produced (ie, including the filename of the PDF being produced, with appropriate anchor syntax)         this results in a deliverable-specific set of key mappings - for each chapter, create a master map that includes the chapter being built and then resource-only inclusions of the deliverable-specific maps for all other chapters - for each chapter's master map, execute a full PDF build         this results in a chapter-level PDF with all links to other chapter resolved correctly solution for whole book case: - build normally Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25


  • 2.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 14:58
    Unless I'm misunderstanding, this doesn't address my scenario at all. Given two root maps Map A and Map B, each to be produced as a separate standalone PDF, the question is: How does an author of Map A define a key that references a key defined in Map B's key space? E.g., I define key "key-x-in-map-B" and then author a reference to that key from some topic used in Map A, e.g.: <xref keyref="key-x-in-map-B">X in B</xref>. To process this, the processor has to know what a reference to a specific key name becomes in the rendered output so that the rendition contains a working link from the PDF for Map A to the PDF for Map B. There's lots of ways to implement this, but the most obvious is to have some deterministic processor that always produces the same result for a given key name/key space pair so that the processor of Map A can blindly generate references in Map A's PDF to the eventual corresponding anchors in Map B's PDF. This might require a run-time parameter that specifies the delivery location of the two PDFs so that if relative URLs are to be constructed, they can be constructed reliably. But the essential bit here is having the key definition *as authored* be an unambiguous reference to a key in the scope of Map B's key space. I don't see that we have a way to do that in DITA 1.2. Note that the only thing I'm concerned with is the markup in the content as authored--given an unambiguous address, the processing implementation is an exercise in engineering and is uninteresting. If there is no unambiguous address then there is no generalized processing that will work except by accident or unenforceable convention. In particular, it *cannot be correct* to author the key definition in this scenario where the URL is to the resource *as rendered*. It must be to the resource *as authored*. That is a fundamental requirement because without that, you cannot have generic content to which any processing may be applied with consistent and predictable results. As an author I want to say "I am linking to this *content* thing in this other publication" and I want links to that thing to work correctly in all possible renditions. "Work correctly" is rendition dependent, but the author's intent and their markup is rendition independent. Cheers, E. On 9/6/11 9:19 AM, "Michael Priestley" <mpriestl@ca.ibm.com> wrote: > > This was my todo from last week's mtg - sorry I'm leaving it to the wire. > > This describes a solution that can be implemented today - I still think there > more work to be done, including: > > - a general solution for key scoping (but not deliverable-based scoping since > the boundaries of deliverables are mutable, as I'm trying to show here). > - a standardized approach for cross-deliverable referencing - if we want to > encourage this approach, for example, or propose an alternative - but we > should be providing some guidance to vendors on how to implement so that the > solution is cross-vendor compatible > > scenario: > - we need to produce PDFs for each chapter of a book, as well as a single big > PDF that contains all chapters > - the chapters contain cross-references to content in other chapters, which > needs to be resolved as a cross-deliverable link in the single-chapter PDFs > but as a local link in the single big PDF case > - each chapter is represented by a separate map > - each topicref in the map has a uniquely addressable key (using whatever > general scoping mechanism we choose to implement) > - the book as a whole is represented by a master map that pulls in the others > > solution for individual chapter case: > - for each chapter, execute a partial PDF build, which does not transform the > content but does preprocess the map to turn each topicref href into a form > appropriate for the deliverable being produced (ie, including the filename of > the PDF being produced, with appropriate anchor syntax) > this results in a deliverable-specific set of key mappings > - for each chapter, create a master map that includes the chapter being built > and then resource-only inclusions of the deliverable-specific maps for all > other chapters > - for each chapter's master map, execute a full PDF build > this results in a chapter-level PDF with all links to other chapter > resolved correctly > > solution for whole book case: > - build normally > > Michael Priestley, Senior Technical Staff Member (STSM) > Lead IBM DITA Architect > mpriestl@ca.ibm.com > http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > -- Eliot Kimber Senior Solutions Architect "Bringing Strategy, Content, and Technology Together" Main: 512.554.9368 www.reallysi.com www.rsuitecms.com


  • 3.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 15:21
    Hi Eliot, I believed your scenario was covered in my case of multiple chapters being produced as separate PDFs. In that scenario, the author of Map A does not define a key that references a key defined in map B - they simply include map B's definition of map B's keys, after it has gone through processing to produce a deliverable-specific version of that key definition. I believe my scenario shows how cross-deliverable referencing could work without using map-specific addressing. I believe map-specific addressing is problematic because it doesn't actually tell us what the deliverable-specific address will be. You assume some automated process that will allow automatic association - but I believe that is too large an assumption to make. If I am addressing content from a deliverable produced by another team, we would all have to agree on that automatic processing rule - which requires upfront coordination even greater than that required to ensure unique keys. The only time we can know what a deliverable's addressing scheme will be (ie what the hrefs should resolve to) is when the deliverable is built. That's why I have a deliverable-specific map being built as part of the deliverable build, which can then be incorporated into the keyspace for other deliverables to enable cross-deliverable links for a given set of deliverables. Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25 From: Eliot Kimber <ekimber@reallysi.com> To: Michael Priestley/Toronto/IBM@IBMCA, dita <dita@lists.oasis-open.org> Date: 09/06/2011 11:01 AM Subject: Re: [dita] Scenario for cross-deliverable referencing Unless I'm misunderstanding, this doesn't address my scenario at all. Given two root maps Map A and Map B, each to be produced as a separate standalone PDF, the question is: How does an author of Map A define a key that references a key defined in Map B's key space? E.g., I define key "key-x-in-map-B" and then author a reference to that key from some topic used in Map A, e.g.: <xref keyref="key-x-in-map-B">X in B</xref>. To process this, the processor has to know what a reference to a specific key name becomes in the rendered output so that the rendition contains a working link from the PDF for Map A to the PDF for Map B. There's lots of ways to implement this, but the most obvious is to have some deterministic processor that always produces the same result for a given key name/key space pair so that the processor of Map A can blindly generate references in Map A's PDF to the eventual corresponding anchors in Map B's PDF. This might require a run-time parameter that specifies the delivery location of the two PDFs so that if relative URLs are to be constructed, they can be constructed reliably. But the essential bit here is having the key definition *as authored* be an unambiguous reference to a key in the scope of Map B's key space. I don't see that we have a way to do that in DITA 1.2. Note that the only thing I'm concerned with is the markup in the content as authored--given an unambiguous address, the processing implementation is an exercise in engineering and is uninteresting. If there is no unambiguous address then there is no generalized processing that will work except by accident or unenforceable convention. In particular, it *cannot be correct* to author the key definition in this scenario where the URL is to the resource *as rendered*. It must be to the resource *as authored*. That is a fundamental requirement because without that, you cannot have generic content to which any processing may be applied with consistent and predictable results. As an author I want to say "I am linking to this *content* thing in this other publication" and I want links to that thing to work correctly in all possible renditions. "Work correctly" is rendition dependent, but the author's intent and their markup is rendition independent. Cheers, E. On 9/6/11 9:19 AM, "Michael Priestley" <mpriestl@ca.ibm.com> wrote: > > This was my todo from last week's mtg - sorry I'm leaving it to the wire. > > This describes a solution that can be implemented today - I still think there > more work to be done, including: > > -  a general solution for key scoping (but not deliverable-based scoping since > the boundaries of deliverables are mutable, as I'm trying to show here). > - a standardized approach for cross-deliverable referencing - if we want to > encourage this approach, for example, or propose an alternative - but we > should be providing some guidance to vendors on how to implement so that the > solution is cross-vendor compatible > > scenario: > - we need to produce PDFs for each chapter of a book, as well as a single big > PDF that contains all chapters > - the chapters contain cross-references to content in other chapters, which > needs to be resolved as a cross-deliverable link in the single-chapter PDFs > but as a local link in the single big PDF case > - each chapter is represented by a separate map > - each topicref in the map has a uniquely addressable key (using whatever > general scoping mechanism we choose to implement) > - the book as a whole is represented by a master map that pulls in the others > > solution for individual chapter case: > - for each chapter, execute a partial PDF build, which does not transform the > content but does preprocess the map to turn each topicref href into a form > appropriate for the deliverable being produced (ie, including the filename of > the PDF being produced, with appropriate anchor syntax) >         this results in a deliverable-specific set of key mappings > - for each chapter, create a master map that includes the chapter being built > and then resource-only inclusions of the deliverable-specific maps for all > other chapters > - for each chapter's master map, execute a full PDF build >         this results in a chapter-level PDF with all links to other chapter > resolved correctly > > solution for whole book case: > - build normally > > Michael Priestley, Senior Technical Staff Member (STSM) > Lead IBM DITA Architect > mpriestl@ca.ibm.com > http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > -- Eliot Kimber Senior Solutions Architect "Bringing Strategy, Content, and Technology Together" Main: 512.554.9368 www.reallysi.com www.rsuitecms.com --------------------------------------------------------------------- To unsubscribe from this mail list, you must leave the OASIS TC that generates this mail.  Follow this link to all your TCs in OASIS at: https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php


  • 4.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 21:01
    Michael, On Sep 6, 2011, at 8:11 AM, Michael Priestley wrote: > > Hi Eliot, > > I believed your scenario was covered in my case of multiple chapters being produced as separate PDFs. > > In that scenario, the author of Map A does not define a key that references a key defined in map B - they simply include map B's definition of map B's keys, after it has gone through processing to produce a deliverable-specific version of that key definition. > I'm wading in deep water here:-) and may very well have missed a critical point, but it seems like this is a markup issue that isn't resolve in the general case by simply merging the two (or more) sets of key definitions (which I think is what you're saying above). If the keys are unique across all of the maps, then yes, you could simply include map B's definitions in map A and use them directly. But, if they are not unique, then don't you still need markup that will allow you to uniquely identify the key you want? In which case, you're back to the problem Eliot stated originally (at least as I understand his original statement). Also, don't you still need a method for identifying the universe of maps that are in play? Best Regards, Richard Hamilton ------- XML Press XML for Technical Communicators http://xmlpress.net hamilton@xmlpress.net


  • 5.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 21:30
    Hi Richard, If the keys are not unique, we will need a key scoping mechanism. In my original note I called that out as a requirement.  If the keys are unique, no scoping mechanism is required. The issue of key scoping is separate from the issue of cross-deliverable references. You can have issues with duplicate keys in a single deliverable as well. Whatever solution we come up with for key scoping will have to cope with both separate deliverable and combined deliverable use cases across the same content source. That's why I provided an example that showed both. Eliot wants to have scoping by map - I have concerns with this as an approach, like the need to require source map awareness in the context of assembled map key spaces (like A+B getting built together into a single PDF); but maybe these could be figured out. We'd also want to figure out how things behave when conref'd, etc. All this could be done as part of the proposal for handling key scoping - maybe map-based scoping will turn out to be the best way to do it after all. But map-based scoping is:  1) not a requirement for cross-deliverable referencing (any more than it is a requirement for building single deliverables that include multiple maps) 2) only one of several possible ways that keys could be scoped, which I would like to leave to the other proposal to work out. My main concern is that we separate the issues: scoping by map does not solve the issue of cross-deliverable addressing, it only solves the issue of duplicate key resolution (and it creates new issues for key resolution in the context of same-deliverable addressing). Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25 From: Richard Hamilton <hamilton@xmlpress.net> To: Michael Priestley/Toronto/IBM@IBMCA Cc: Eliot Kimber <ekimber@reallysi.com>, dita <dita@lists.oasis-open.org> Date: 09/06/2011 05:01 PM Subject: Re: [dita] Scenario for cross-deliverable referencing Michael, On Sep 6, 2011, at 8:11 AM, Michael Priestley wrote: > > Hi Eliot, > > I believed your scenario was covered in my case of multiple chapters being produced as separate PDFs. > > In that scenario, the author of Map A does not define a key that references a key defined in map B - they simply include map B's definition of map B's keys, after it has gone through processing to produce a deliverable-specific version of that key definition. > I'm wading in deep water here:-) and may very well have missed a critical point, but it seems like this is a markup issue that isn't resolve in the general case by simply merging the two (or more) sets of key definitions (which I think is what you're saying above). If the keys are unique across all of the maps, then yes, you could simply include map B's definitions in map A and use them directly. But, if they are not unique, then don't you still need markup that will allow you to uniquely identify the key you want? In which case, you're back to the problem Eliot stated originally (at least as I understand his original statement). Also, don't you still need a method for identifying the universe of maps that are in play? Best Regards, Richard Hamilton ------- XML Press XML for Technical Communicators http://xmlpress.net hamilton@xmlpress.net


  • 6.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 21:59
    Michael, Thanks for the explanation. That helps me put the question in context. Best Regards, Richard On Sep 6, 2011, at 2:29 PM, Michael Priestley wrote: > > Hi Richard, > > If the keys are not unique, we will need a key scoping mechanism. In my original note I called that out as a requirement. If the keys are unique, no scoping mechanism is required. > > The issue of key scoping is separate from the issue of cross-deliverable references. You can have issues with duplicate keys in a single deliverable as well. Whatever solution we come up with for key scoping will have to cope with both separate deliverable and combined deliverable use cases across the same content source. That's why I provided an example that showed both. > > Eliot wants to have scoping by map - I have concerns with this as an approach, like the need to require source map awareness in the context of assembled map key spaces (like A+B getting built together into a single PDF); but maybe these could be figured out. We'd also want to figure out how things behave when conref'd, etc. All this could be done as part of the proposal for handling key scoping - maybe map-based scoping will turn out to be the best way to do it after all. > > But map-based scoping is: > 1) not a requirement for cross-deliverable referencing (any more than it is a requirement for building single deliverables that include multiple maps) > 2) only one of several possible ways that keys could be scoped, which I would like to leave to the other proposal to work out. > > My main concern is that we separate the issues: scoping by map does not solve the issue of cross-deliverable addressing, it only solves the issue of duplicate key resolution (and it creates new issues for key resolution in the context of same-deliverable addressing). > > Michael Priestley, Senior Technical Staff Member (STSM) > Lead IBM DITA Architect > mpriestl@ca.ibm.com > http://dita.xml.org/blog/25 > > > From: Richard Hamilton <hamilton@xmlpress.net> > To: Michael Priestley/Toronto/IBM@IBMCA > Cc: Eliot Kimber <ekimber@reallysi.com>, dita <dita@lists.oasis-open.org> > Date: 09/06/2011 05:01 PM > Subject: Re: [dita] Scenario for cross-deliverable referencing > > > > > Michael, > > On Sep 6, 2011, at 8:11 AM, Michael Priestley wrote: > > > > > Hi Eliot, > > > > I believed your scenario was covered in my case of multiple chapters being produced as separate PDFs. > > > > In that scenario, the author of Map A does not define a key that references a key defined in map B - they simply include map B's definition of map B's keys, after it has gone through processing to produce a deliverable-specific version of that key definition. > > > I'm wading in deep water here:-) and may very well have missed a critical point, but it seems like this is a markup issue that isn't resolve in the general case by simply merging the two (or more) sets of key definitions (which I think is what you're saying above). > > If the keys are unique across all of the maps, then yes, you could simply include map B's definitions in map A and use them directly. But, if they are not unique, then don't you still need markup that will allow you to uniquely identify the key you want? In which case, you're back to the problem Eliot stated originally (at least as I understand his original statement). Also, don't you still need a method for identifying the universe of maps that are in play? > > Best Regards, > Richard Hamilton > ------- > XML Press > XML for Technical Communicators > http://xmlpress.net > hamilton@xmlpress.net > > > > >


  • 7.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-13-2011 15:00
    I think we are talking at cross purposes. You are proposing a process that requires an *author* to explicitly include the intermediate process of a particular rendition process. That is simply not an acceptable solution because it mixes the domain of authoring (what's in the content I have and reasonably know about) and the domain of processing, which is, in the general case, unknowable to authors. I cannot accept any such solution. My requirement is that the content *as authored* convey all the information required to express authorial intent and to enable any processor to do the right thing given access to the content involved, without recourse to any particular implementation approach. Your solution does not do that in any way that I can see. That is, saying "the map author includes an map generated by a rendition process" is simply not going to work in the general case because not all processors would generate a map that couple be so included, even if it was sensible to define the authoring in that way. Doing so would be to mandate a particular implementation approach. In my scenario I am creating a map for a specific publication, which represents an invariant unit of publishing *to one or more rendition types*. That is, the map is be published to PDF or HTML or EPUB or something as yet uninvented but each of those renditions will reflect the same content (ignoring conditional processing). The author *of a topic* references some target by key. At the time they author the reference to the key they can't know or care where the ultimate target of the key might be in the content as authored or in the content as rendered, for the simple reason that it is unknowable at authoring time. If they are authoring in the context of a specific map then of course they can know where the key resolves in the context of that map, but if they are authoring the topic outside of a map context then they are simply stating the requirement that there needs to be something at the end of the key in whatever contexts that topic is used. But they cannot know all the possible maps the topic might be used by in the future. The author *of a map* that uses the topic has the responsibility of binding the key to a resource. If the resource is in the same map, then no problem, they just create a normal key reference and they're done. But if the resource is *not* in the same map, *there is nothing they can do today to indicate their intent to reference a resource in a different map*. They *do not want* to directly address a thing in a non-DITA rendition of the publication, for the simple reason that they want the link to work in all possible renditions and because they, as the author of the map, can't know the details of the renditions that might come later. Including the map for a particular rendition of the target map doesn't solve the problem precisely because it is rendition specific, but the intent is not rendition specific, it is publication-as-authored specific. That is, the map author is saying "the target topic is in this other publication, represented by this other map, regardless of where that map is rendered." That is my whole point: neither the author of the topic nor the author of the map can know anything about any potential renditions of the two publications (root maps) involved. They can only know about the maps *as authored*. A production system *can* know about the maps as rendered, *because it's rendering them*. It can know what rendition-specific addresses a thing as authored gets as rendered for a specific rendition. It can know that either because it did the rendition and remembered the result, however it remembers it, or because it has a deterministic algorithm for mapping input locations to result addresses, meaning it can predict what the address as rendered will be. It knows where the rendered results will be published relative to each other, so it can construct appropriate relative URIs if necessary. The DITA standard already defines unambiguous key scopes, namely the root maps that define key spaces. There is no ambiguity about that. That means that addressing a root map *as a root map* allows you to address keys in that key space without having to coordinate key names across key spaces. The *only thing* we lack is the fragment identifier syntax to distinguish a normal element ID reference from a key reference. Cheers, E. On 9/6/11 10:11 AM, "Michael Priestley" <mpriestl@ca.ibm.com> wrote: > > Hi Eliot, > > I believed your scenario was covered in my case of multiple chapters being > produced as separate PDFs. > > In that scenario, the author of Map A does not define a key that references a > key defined in map B - they simply include map B's definition of map B's keys, > after it has gone through processing to produce a deliverable-specific version > of that key definition. > > I believe my scenario shows how cross-deliverable referencing could work > without using map-specific addressing. I believe map-specific addressing is > problematic because it doesn't actually tell us what the deliverable-specific > address will be. You assume some automated process that will allow automatic > association - but I believe that is too large an assumption to make. If I am > addressing content from a deliverable produced by another team, we would all > have to agree on that automatic processing rule - which requires upfront > coordination even greater than that required to ensure unique keys. > > The only time we can know what a deliverable's addressing scheme will be (ie > what the hrefs should resolve to) is when the deliverable is built. That's why > I have a deliverable-specific map being built as part of the deliverable > build, which can then be incorporated into the keyspace for other deliverables > to enable cross-deliverable links for a given set of deliverables. > > Michael Priestley, Senior Technical Staff Member (STSM) > Lead IBM DITA Architect > mpriestl@ca.ibm.com > http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > > > > From: Eliot Kimber <ekimber@reallysi.com> > To: Michael Priestley/Toronto/IBM@IBMCA, dita <dita@lists.oasis-open.org> > Date: 09/06/2011 11:01 AM > Subject: Re: [dita] Scenario for cross-deliverable referencing > > > > > Unless I'm misunderstanding, this doesn't address my scenario at all. > > Given two root maps Map A and Map B, each to be produced as a separate > standalone PDF, the question is: > > How does an author of Map A define a key that references a key defined in > Map B's key space? E.g., I define key "key-x-in-map-B" and then author a > reference to that key from some topic used in Map A, e.g.: <xref > keyref="key-x-in-map-B">X in B</xref>. > > To process this, the processor has to know what a reference to a specific > key name becomes in the rendered output so that the rendition contains a > working link from the PDF for Map A to the PDF for Map B. There's lots of > ways to implement this, but the most obvious is to have some deterministic > processor that always produces the same result for a given key name/key > space pair so that the processor of Map A can blindly generate references in > Map A's PDF to the eventual corresponding anchors in Map B's PDF. > > This might require a run-time parameter that specifies the delivery location > of the two PDFs so that if relative URLs are to be constructed, they can be > constructed reliably. > > But the essential bit here is having the key definition *as authored* be an > unambiguous reference to a key in the scope of Map B's key space. I don't > see that we have a way to do that in DITA 1.2. > > Note that the only thing I'm concerned with is the markup in the content as > authored--given an unambiguous address, the processing implementation is an > exercise in engineering and is uninteresting. If there is no unambiguous > address then there is no generalized processing that will work except by > accident or unenforceable convention. > > In particular, it *cannot be correct* to author the key definition in this > scenario where the URL is to the resource *as rendered*. It must be to the > resource *as authored*. That is a fundamental requirement because without > that, you cannot have generic content to which any processing may be applied > with consistent and predictable results. > > As an author I want to say "I am linking to this *content* thing in this > other publication" and I want links to that thing to work correctly in all > possible renditions. "Work correctly" is rendition dependent, but the > author's intent and their markup is rendition independent. > > Cheers, > > E. > > > On 9/6/11 9:19 AM, "Michael Priestley" <mpriestl@ca.ibm.com> wrote: > >> >> This was my todo from last week's mtg - sorry I'm leaving it to the wire. >> >> This describes a solution that can be implemented today - I still think there >> more work to be done, including: >> >> - a general solution for key scoping (but not deliverable-based scoping >> since >> the boundaries of deliverables are mutable, as I'm trying to show here). >> - a standardized approach for cross-deliverable referencing - if we want to >> encourage this approach, for example, or propose an alternative - but we >> should be providing some guidance to vendors on how to implement so that the >> solution is cross-vendor compatible >> >> scenario: >> - we need to produce PDFs for each chapter of a book, as well as a single big >> PDF that contains all chapters >> - the chapters contain cross-references to content in other chapters, which >> needs to be resolved as a cross-deliverable link in the single-chapter PDFs >> but as a local link in the single big PDF case >> - each chapter is represented by a separate map >> - each topicref in the map has a uniquely addressable key (using whatever >> general scoping mechanism we choose to implement) >> - the book as a whole is represented by a master map that pulls in the others >> >> solution for individual chapter case: >> - for each chapter, execute a partial PDF build, which does not transform the >> content but does preprocess the map to turn each topicref href into a form >> appropriate for the deliverable being produced (ie, including the filename of >> the PDF being produced, with appropriate anchor syntax) >> this results in a deliverable-specific set of key mappings >> - for each chapter, create a master map that includes the chapter being built >> and then resource-only inclusions of the deliverable-specific maps for all >> other chapters >> - for each chapter's master map, execute a full PDF build >> this results in a chapter-level PDF with all links to other chapter >> resolved correctly >> >> solution for whole book case: >> - build normally >> >> Michael Priestley, Senior Technical Staff Member (STSM) >> Lead IBM DITA Architect >> mpriestl@ca.ibm.com >> http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > >> < http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > > -- Eliot Kimber Senior Solutions Architect "Bringing Strategy, Content, and Technology Together" Main: 512.554.9368 www.reallysi.com www.rsuitecms.com


  • 8.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-13-2011 15:29
    Hi Eliot, You are misunderstanding my case. Hopefully the examples I provided in a followon email will help. The authors would be working with a key definition file that mapped to the source files they need to link to. At build time, a new map would be created to pull in the deliverable-specific mappings, overriding the source-time mappings. My approach does assume that a key mapping file can be produced by the build for a specific deliverable. I don't see any way to avoid this assumption, since at no other time does a system know what the key mappings should be for that deliverable - taking into account things like build parameters, like ditavals to be used. Your approach also makes some assumptions:  - You are assuming a single production system for all deliverables. Mine does not.  - You are also assuming a single scope for all deliverables from a given map. You do not allow for map nesting or conreffing to allow for larger or smaller scopes, and you explicitly ignore ditaval. My approach allows for any combination of output conditions. Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25 From: Eliot Kimber <ekimber@reallysi.com> To: Michael Priestley/Toronto/IBM@IBMCA Cc: dita <dita@lists.oasis-open.org> Date: 09/13/2011 11:00 AM Subject: Re: [dita] Scenario for cross-deliverable referencing I think we are talking at cross purposes. You are proposing a process that requires an *author* to explicitly include the intermediate process of a particular rendition process. That is simply not an acceptable solution because it mixes the domain of authoring (what's in the content I have and reasonably know about) and the domain of processing, which is, in the general case, unknowable to authors. I cannot accept any such solution. My requirement is that the content *as authored* convey all the information required to express authorial intent and to enable any processor to do the right thing given access to the content involved, without recourse to any particular implementation approach. Your solution does not do that in any way that I can see. That is, saying "the map author includes an map generated by a rendition process" is simply not going to work in the general case because not all processors would generate a map that couple be so included, even if it was sensible to define the authoring in that way. Doing so would be to mandate a particular implementation approach. In my scenario I am creating a map for a specific publication, which represents an invariant unit of publishing *to one or more rendition types*. That is, the map is be published to PDF or HTML or EPUB or something as yet uninvented but each of those renditions will reflect the same content (ignoring conditional processing). The author *of a topic* references some target by key. At the time they author the reference to the key they can't know or care where the ultimate target of the key might be in the content as authored or in the content as rendered, for the simple reason that it is unknowable at authoring time. If they are authoring in the context of a specific map then of course they can know where the key resolves in the context of that map, but if they are authoring the topic outside of a map context then they are simply stating the requirement that there needs to be something at the end of the key in whatever contexts that topic is used. But they cannot know all the possible maps the topic might be used by in the future. The author *of a map* that uses the topic has the responsibility of binding the key to a resource. If the resource is in the same map, then no problem, they just create a normal key reference and they're done. But if the resource is *not* in the same map, *there is nothing they can do today to indicate their intent to reference a resource in a different map*. They *do not want* to directly address a thing in a non-DITA rendition of the publication, for the simple reason that they want the link to work in all possible renditions and because they, as the author of the map, can't know the details of the renditions that might come later. Including the map for a particular rendition of the target map doesn't solve the problem precisely because it is rendition specific, but the intent is not rendition specific, it is publication-as-authored specific. That is, the map author is saying "the target topic is in this other publication, represented by this other map, regardless of where that map is rendered." That is my whole point: neither the author of the topic nor the author of the map can know anything about any potential renditions of the two publications (root maps) involved. They can only know about the maps *as authored*. A production system *can* know about the maps as rendered, *because it's rendering them*. It can know what rendition-specific addresses a thing as authored gets as rendered for a specific rendition. It can know that either because it did the rendition and remembered the result, however it remembers it, or because it has a deterministic algorithm for mapping input locations to result addresses, meaning it can predict what the address as rendered will be. It knows where the rendered results will be published relative to each other, so it can construct appropriate relative URIs if necessary. The DITA standard already defines unambiguous key scopes, namely the root maps that define key spaces. There is no ambiguity about that. That means that addressing a root map *as a root map* allows you to address keys in that key space without having to coordinate key names across key spaces. The *only thing* we lack is the fragment identifier syntax to distinguish a normal element ID reference from a key reference. Cheers, E. On 9/6/11 10:11 AM, "Michael Priestley" <mpriestl@ca.ibm.com> wrote: > > Hi Eliot, > > I believed your scenario was covered in my case of multiple chapters being > produced as separate PDFs. > > In that scenario, the author of Map A does not define a key that references a > key defined in map B - they simply include map B's definition of map B's keys, > after it has gone through processing to produce a deliverable-specific version > of that key definition. > > I believe my scenario shows how cross-deliverable referencing could work > without using map-specific addressing. I believe map-specific addressing is > problematic because it doesn't actually tell us what the deliverable-specific > address will be. You assume some automated process that will allow automatic > association - but I believe that is too large an assumption to make. If I am > addressing content from a deliverable produced by another team, we would all > have to agree on that automatic processing rule - which requires upfront > coordination even greater than that required to ensure unique keys. > > The only time we can know what a deliverable's addressing scheme will be (ie > what the hrefs should resolve to) is when the deliverable is built. That's why > I have a deliverable-specific map being built as part of the deliverable > build, which can then be incorporated into the keyspace for other deliverables > to enable cross-deliverable links for a given set of deliverables. > > Michael Priestley, Senior Technical Staff Member (STSM) > Lead IBM DITA Architect > mpriestl@ca.ibm.com > http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > > > > From: Eliot Kimber <ekimber@reallysi.com> > To: Michael Priestley/Toronto/IBM@IBMCA, dita <dita@lists.oasis-open.org> > Date: 09/06/2011 11:01 AM > Subject: Re: [dita] Scenario for cross-deliverable referencing > > > > > Unless I'm misunderstanding, this doesn't address my scenario at all. > > Given two root maps Map A and Map B, each to be produced as a separate > standalone PDF, the question is: > > How does an author of Map A define a key that references a key defined in > Map B's key space? E.g., I define key "key-x-in-map-B" and then author a > reference to that key from some topic used in Map A, e.g.: <xref > keyref="key-x-in-map-B">X in B</xref>. > > To process this, the processor has to know what a reference to a specific > key name becomes in the rendered output so that the rendition contains a > working link from the PDF for Map A to the PDF for Map B. There's lots of > ways to implement this, but the most obvious is to have some deterministic > processor that always produces the same result for a given key name/key > space pair so that the processor of Map A can blindly generate references in > Map A's PDF to the eventual corresponding anchors in Map B's PDF. > > This might require a run-time parameter that specifies the delivery location > of the two PDFs so that if relative URLs are to be constructed, they can be > constructed reliably. > > But the essential bit here is having the key definition *as authored* be an > unambiguous reference to a key in the scope of Map B's key space. I don't > see that we have a way to do that in DITA 1.2. > > Note that the only thing I'm concerned with is the markup in the content as > authored--given an unambiguous address, the processing implementation is an > exercise in engineering and is uninteresting. If there is no unambiguous > address then there is no generalized processing that will work except by > accident or unenforceable convention. > > In particular, it *cannot be correct* to author the key definition in this > scenario where the URL is to the resource *as rendered*. It must be to the > resource *as authored*. That is a fundamental requirement because without > that, you cannot have generic content to which any processing may be applied > with consistent and predictable results. > > As an author I want to say "I am linking to this *content* thing in this > other publication" and I want links to that thing to work correctly in all > possible renditions. "Work correctly" is rendition dependent, but the > author's intent and their markup is rendition independent. > > Cheers, > > E. > > > On 9/6/11 9:19 AM, "Michael Priestley" <mpriestl@ca.ibm.com> wrote: > >> >> This was my todo from last week's mtg - sorry I'm leaving it to the wire. >> >> This describes a solution that can be implemented today - I still think there >> more work to be done, including: >> >> -  a general solution for key scoping (but not deliverable-based scoping >> since >> the boundaries of deliverables are mutable, as I'm trying to show here). >> - a standardized approach for cross-deliverable referencing - if we want to >> encourage this approach, for example, or propose an alternative - but we >> should be providing some guidance to vendors on how to implement so that the >> solution is cross-vendor compatible >> >> scenario: >> - we need to produce PDFs for each chapter of a book, as well as a single big >> PDF that contains all chapters >> - the chapters contain cross-references to content in other chapters, which >> needs to be resolved as a cross-deliverable link in the single-chapter PDFs >> but as a local link in the single big PDF case >> - each chapter is represented by a separate map >> - each topicref in the map has a uniquely addressable key (using whatever >> general scoping mechanism we choose to implement) >> - the book as a whole is represented by a master map that pulls in the others >> >> solution for individual chapter case: >> - for each chapter, execute a partial PDF build, which does not transform the >> content but does preprocess the map to turn each topicref href into a form >> appropriate for the deliverable being produced (ie, including the filename of >> the PDF being produced, with appropriate anchor syntax) >>         this results in a deliverable-specific set of key mappings >> - for each chapter, create a master map that includes the chapter being built >> and then resource-only inclusions of the deliverable-specific maps for all >> other chapters >> - for each chapter's master map, execute a full PDF build >>         this results in a chapter-level PDF with all links to other chapter >> resolved correctly >> >> solution for whole book case: >> - build normally >> >> Michael Priestley, Senior Technical Staff Member (STSM) >> Lead IBM DITA Architect >> mpriestl@ca.ibm.com >> http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > >> < http://dita.xml.org/blog/25 < http://dita.xml.org/blog/25 > > -- Eliot Kimber Senior Solutions Architect "Bringing Strategy, Content, and Technology Together" Main: 512.554.9368 www.reallysi.com www.rsuitecms.com


  • 9.  DITA TC Meeting Minutes -- 12 September 2011

    Posted 09-13-2011 17:02
    Minutes of the OASIS DITA TC Tuesday, 13 Sept 2011 Recorded by Richard Hamilton [ Note: This is my first shot at minutes in a while, so please expect, and feel free to report, any anomalies ] Quorum present Regrets: Thilo Buchholz, Tom Magliery Don Day moved to accept last week's minutes, Kris Eberlein seconded, and the minutes were accepted. Subcommittee reports: none today Business: 1) Vote on charter for DITA for Programmers subcommittee Lisa Dyer presented charter to the group. Goal: provide specializations for 1.3 specs for common apis, including: javascript, java, c, c++, and REST Su-Laine Yeo: suggested the subcommittee name should be "DITA for Programming Content," rather than DITA for Programmers Michael Priestley: Concern that scope is too narrow. What about architectural designs? Some work is going on in that area at IBM. Action Item: Lisa will discuss possibilities with Aaron Labella of IBM. Chris Nitchie from PTC has a method for working with a generalized markup that can be used with multiple object oriented languages, and which might be applicable in this work. Adrian Warman: How would this contrast with, for example, javadoc? Michael Priestley: Javadoc ontent in java source would stay the same, applet would change to one that generates DITA, rather than html. Lisa will take comments under consideration and come back next week to continue the discussion, which will be first on the agenda. 2) Continuation of triage of DITA 1.3 Proposals: 13041: Scenario for cross-deliverable referencing - Discussion centered on Eliot Kimber's and Michael Priestley's approaches to this question, which center on the question of whether/how map scope can be tied to deliverable scope when resolving cross-map referencing. - Michael asked Eliot to explain how he would markup Michael's example (multiple chapters processed as separate chapters and as a single book) - Michael notes this is a real-world example, since the scenario is how the DITA spec could be built. - Action Item for Eliot: create a markup example for his approach. Michael summarized the issue and the two approaches under discussion: - The issue is referencing keys in other maps and how they get resolved. - Eliot: keys get resolved to target keys based on processing rules that are external to the markup. - Michael: does not assume a single processing system. Instead, the map creator would create key re-definitions for different deliverables that would be used to resolve key references from other maps. He said it would be nice to use Eliot's model, but his, admittedly messier, model would be more independent of processing software. Don: suggests continuing the discussion after Michael, Eliot, and other interested parties can work off-line to bring up a unified approach that can be discussed by the TC. [ meeting adjourned ]


  • 10.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-13-2011 18:46
    In thinking about this more, I think that Michael's approach of thinking of the rendition-specific key-to-target binding as being a literal DITA map with literal key definitions is a useful one. It provides a clear syntax for capturing the binding for interchange purposes, will always work for distributed processing scenarios, and gives us a clear basis on which to discuss data details. I will use this approach from now on in my discussions. I explore the processing implications and possibilities in some detail below, but I think my difference with Michael comes down to: Is it possible to keep the two key spaces for two publications distinct or must you combine them? I say keep them distinct by enabling addressing of keys in the context of specific root maps. Michael says combine them so that existing processors "just work" once you swap in rendition-specific key bindings, at the cost of requiring coordination of the key names across the maps involved. If we stipulate that in both cases the actual rendition processing to create working links is done by "swapping out" the target map as authored for an equivalent map that contains rendition-specific key bindings, then there are no actual processing differences in our two models--the only difference is in the details of how those rendition-specific maps are coordinated or used, which is all implementation detail. That is, the processing doesn't require or disallow my all-knowing Processing Manager and fully allows Michael's completely informal and distributed processing environment. All the differences in these two models are implementation details. This "swapping out" must be done by specifying a mapping from the target map as authored (e.g., "map-b.ditamap") to the rendition-specific map to use instead (e.g., "map-b-PDF.ditamap") as an input to a rendition process. That mapping has to be known regardless of how the processing is done. It could be specified as a parameter or it could be specified as instructions to the human setting up the production, who then reflects the knowledge by modifying the input map. The functional result is the same. Given that mapping, a human or processor can thus reliably render key references as authored to working links in the rendition, as long as the rendition-specific key bindings are correct. Thus the mechanism by which rendition-specific keys are communicated to or used by a processor is an implementation detail. The only question is what does the processor have to do to resolve the keys? Do they always have exactly one key space or do they need to handle one or more key spaces? My approach, which requires a new fragment identifier in order to point to specific keys in the context of specific root maps, reliably keeps distinct key spaces distinct and removes the need to coordinate names across key spaces. I think this is essential. It requires processors to handle one or more key spaces, but I don't think that should pose a problem in practice because if you can construct one key space you can just as easily construct 100 key spaces. Since the universe has more than one map I would hope that engineers of DITA-aware systems instinctively provide for the possibility of multiple key spaces. Michael's approach requires combining the key spaces of otherwise separate publications into a single unified key space. This simplifies processing where the rendition-specific maps are used literally to implement cross-publication linking using DITA 1.2 processing, but at the cost of requiring coordination across all the key spaces that might be combined. I think that this coordination is impossible in the general, distributed case, because you may want to link to a publication over which you have no control and that happens to duplicate some keys in your publication that you do not want to resolve to that publication. The only solution in that case is to keep the key spaces separate. DITA 1.2 clearly defines the notion of key space so there can't be any ambiguity about what is intended when you address a key in the context of a given root map and it shouldn't be a surprise to any processor that there might be more than one key space in play at any given point in time (because the universe contains more than one map). In the case where you have, for some reason, multiple maps that contribute to a single rendered publication through some process, it would be up to that process to generate the appropriate rendition-specific map but it could do it. In that case there might be a many-to-one mapping from maps as authored to intermediate maps, but the processing will still work just as it would for the simpler case of one map exactly equal to one publication. So I think the question remains: do we allow referencing across key spaces in a way that keeps key spaces distinct or do we require that all maps that might want to participate in cross-publication links share a single unified key space that requires coordination of all key names across those maps? I feel strongly that the latter is not acceptable or sustainable and that the implementation cost of allowing cross-key-space referencing is low and is, in fact, arguably inherent in the DITA 1.2 architecture because it formally defines the concept of key space. In the case of the Toolkit in particular, I will personally implement the processing required if that's a barrier. It is certainly the case that key-aware editors and component management systems already have to manage multiple key spaces if they allow management of multiple maps, which they all do as far as I know (e.g., OxygenXML, Arbortext Editor 6, XMetal 6). [I don't know of any CMS systems that today actually manage keys or provide key-resolution services but there might be some. I'm actively working on adding that functionality to our CMS products, but it's a low product priority right now.] The purpose of the rest of this message is to try to define a general abstract processing model or environment that fits both my tightly-controlled approach and Michael's arbitrarily distributed model. My intent is to define some common vocabulary and appropriate abstractions that let us focus on the general requirements with out worrying too much about implementation details. Michael is presuming (but not requiring) an environment where there is no central all-knowing rendition system that maintains knowledge about all the renditions and the key-to-rendition mappings. I was assuming an all-knowing Production Manager. But I think for both of us those are implementation details that don't really change the problem. We were both presuming that *something* had required knowledge of the renditions involved and the intents of the renderers--in my case it was a management system, in Michael's it was the humans requesting the renditions. But I think the knowledge required in both cases in the same, the only difference is how that knowledge is captured or communicated, which is an implementation detail. The following discussion reflects the real case of the DITA 1.2 spec, where we have a single content set that needs to be published in at least two ways: as a single publication combining the Architectural Spec and the Language Reference and as two separate publications, the Architectural Spec and the Language Reference, with cross references between the two publications *as rendered*. I have tried to reflect this case with the smallest illustrative data set. Note that in the case of the DITA spec all the content is authored by a single, coordinated group, so it is possible to coordinate the key names across all the publication packages that might be applied to the content. This does not reflect the more general distributed case where you may want to link to renditions of a publication you only have read-only access to and for which there is no coordinate of its key names with your key names. Let us have three maps, Map A, Map B, and Map AB, and two topics, Topic 1 and Topic 2. The author of Topic 1 creates a link to Topic 2 because Topic 1 depends rhetorically on Topic 2. This is the DITA Spec case, where the arch spec points to language reference topics (and visa versa). Topic 1 looks like this: <topic id="topic-01"> <title>Topic One</title> <body> <p>See <xref keyref="topic-02"/>.</p> </body. </topic> Topic 2 looks like this: <topic id="topic-02"> <title>Topic Two</title> <body> <p>Something important to Topic 1.</p> </body. </topic> Map AB includes both topics: <map> <title>Map AB</title> <keydef keys="topic-01" href="topics/topic-01.dita" /> <keydef keys="topic-02" href="topics/topic-02.dita" / > <topicref keyref="topic-01"/> <topicref keyref="topic-02"/> </map> This is the full DITA spec case, where all the topics are used in the scope of a single root map. No processing ambiguity. The other case is where we have two publications, Map A and Map B: Map A: <map> <title>Map A</title> <keydef keys="topic-01" href="topics/topic-01.dita" /> <keydef keys="topic-02" href="????" format="????" scope="????" / > <topicref keyref="topic-01"/> <!-- NOTE: No reference to topic-02 --> </map> Map B: <map> <title>Map B</title> <keydef keys="topic-02" href="topics/topic-02.dita" / > <!-- NOTE: No reference to topic-01 --> <topicref keyref="topic-02"/> </map> Processing the publications: When Map B is rendered to a given output we can capture the key-to-address mapping in some way, such as Michael's keydefs, e.g.: Map B-PDF: <map> <title>Map B PDF-specific keys</title> <keydef keys="topic-02" href="/workspace/output/map-b/pdf/map-b.pdf#unique-01" format="pdf" scope="external" /> <map> That's as good as any other way to capture the information and I'm happy to stipulate that this is how it is always captured for the purpose of processing interchange. This leaves open the possibility of manual or automatic inclusion of the map into the publication map as I think Michael is describing in his processing model. How the map is used is an implementation detail if the map is not literally included by a map author separate from a specific rendition process action. When Map A is rendered the questions then are: Question 1. What should the keydef for key "topic-02" look like in Map A? My proposal is currently: <keydef keys="topic-02" href="map-b.ditamap#keyname::topic-02" format="ditamap" scope="peer" /> Where the fragment identifier is a strawman for a fragment ID that is unambiguously a reference to a key in the scope of the key space defined by root map map-b.ditamap. Michael's example is: <mapref processing-role="resource-only" href="map-b.ditamap"/> If I understand Michael's approach, he is simply including Map B as a resource-only map so that the keys have a binding. However, his form of inclusion doesn't make it clear that the intent is that those keys are treated as a separate key space. I think that is essential. That is the intent of my using scope="peer". It doesn't keep the two key spaces separate and therefore requires that the key names not conflict between the two root maps. His approach does allow swapping in of the rendition-specific bindings for Map B given the map-as-authored-to-rendition-map mapping stipulated above as a necessary parameter to the rendition process. But it still requires a single unified key space across maps A and B. In the context of processing Map A as authored outside the context of a specific rendition there would be nothing to indicate that map B's keys are not defining resources directly required by Map A. For example, a process that takes a map and produces a package of all of Map A's dependencies would also gather up everything used by Map B even though they're not really direct dependencies of Map A. (Such a processor is part of the open-source DITA for Publishers project and is also in the Open Toolkit.) If the mapref specified scope="peer" that would avoid the dependency confusion but wouldn't avoid the key space combination because there's no separate direct binding of key in Map A to key in Map B as in my approach. In both cases we're pointing to the map defining the keys, the difference in my approach is that I'm also pointing to the key within the map and using @scope to make it clear that I'm not simply using Map B's key definitions to include resources as part of Map A's content, which is otherwise the implication per the DITA 1.2 rules. In my proposal, because there's an additional layer of indirection between the key as referenced in the context of Map A and the key as referenced in the key definition in Map A, the key names need not be coordinated between the two maps. That is, if Map B defined the key for Topic 2 as "second-topic", my form of keydef could be: <keydef keys="topic-02" href="map-b.ditamap#keyname::second-topic" format="ditamap" scope="peer" /> And the original reference from Topic 1 would continue to work in both Map A and Map AB. I think that even if we don't address the keys via fragment ID that we have to distinguish references to peer and external key sets. Question 2. How does the agent (person or processor) rendering Map A specify which rendition of Map B some or all of the links to Map B should point to? That is, given that there is both a PDF rendition and an HTML rendition of Map B, the choices are: - The PDF rendition - The HTML rendition - Both renditions (multiple links generated from a single source link, or some intermediate fan-out link or whatever). Does this decision need to be made on a per-link basis or on a per-rendition of Map A basis? My thinking to date had been that like would always link to like, but Michael is correct to say that that can't be the only option, so it has to be either a build-time decision or an authoring-time decision. I think it needs to be a build-time decision determined by how you define the mapping of map-as-authored to rendition-specific map. Anything else would require additional per-key-definition syntax or metadata conventions that I think would be impractical in practice. I suppose if it came to it, you could modify the rendition-specific map to reflect exactly what you wanted and maintain that manually. Another fact, which I never stated but that Michael correctly pointed out, is that a given rendition is not identified just by the rendition type (PDF, HTML, etc.) but by all the runtime parameters that define it, including the active DITAVAL conditions, any processor-specific runtime options, the rendition-specific key-to-address mappings, etc. In my model, there is a Processing Manager that manages all rendition processing applied to a set of known content, e.g., all the publications managed within a given system. The Processing Manager abstracts the notion of "rendition" through a Rendition Definition object, which captures all the input parameters for a given rendition, e.g. "PDF, DITAVAL platform="windows", PDF option set "foo". The implication of Rendition Definition is that the same input rendered using the same Rendition Definition will produce the same (or functionally equivalent) output. Michael's model assumes there is no Processing Manager but that processing happens where it happens and people coordinate however they do it. However, the abstract notion of Rendition Definition is the same: you have to now what all the parameters were in order to reproduce the rendition. So in Michael's distributed world the Rendition Definition might be implemented as notes scribbled on your desk blotter or an email from the supplier of the rendition you want to link to, or whatever, but the information content is the same regardless. We can now define a "rendition instance" as being a Rendition Definition/input map pair. Two different input maps that use the same Rendition Definition will have "consistent" or "compatible" output (that is, they'll reflect the same set of runtime options). This is all, I think, equivalent to Michael saying "the person who renders the map has to specify the appropriate DITAVAL files, rendition-specific key bindings, and on". So my notion of Rendition Definition is either literal, as in my Processing Manager system, or virtual, reflected in the knowledge of the person doing the rendering, but in both cases, the same information is represented. In my model all rendering is done by the same processors, so that coordination of intermediate data (key-to-rendition-location mappings) is obviously easy to do. But Michael say "no, you can't assume that--it has to be more disconnected and distributed", which is true. But I think the degree of distribution becomes an implementation detail. That is, if Rendition Definitions include the key-to-rendition bindings, it's only a question of how those bindings get communicated among processing systems, not how they are captured or represented. Michael presumes or stipulates a map-based syntax because that is reliably interchanged and processed by DITA processors, which is fine. So now to the processing: If we stipulate that rendition-target-type is a runtime parameter, then when I process Map A to a particular rendition and want links to be to the PDF renditions of the target publications, part of the Rendition Definition is "render cross-publication links to PDF renditions". But in fact, it needs to be "Render cross-publication links to the rendition created using Rendition Definition X", that is, a specific Rendition Definition reflecting a specific set of rendition options, not just the base output type. In the context of the Open Toolkit, this means all the Ant parameters plus all the Toolkit Plugins and environment variables that contribute to the configuration of the transformation type used. Any other processing system will have the equivalent set of options and starting conditions. Given this background, we can now explore the different processing use cases: Processing Use Case 1: Don't have rendition-specific key bindings for Map B. If I process Map A and I don't have the rendition-specific key binding for Map B, the processor has three choices: 1. Process Map B using the Rendition Definition specified and then use the result to complete processing Map A. Note that this could be a literal process or it could be "get on the phone to the supplier of Map B and ask for the rendition-specific key binding that reflects the Rendition Defininition you want". 2. Process Map A with placeholder or otherwise unresolveable links. 3. Fail the rendition of A. Processing Use Case 2: Do have rendition-specific key bindings for Map B. If we are using my cross-publication key definition approach, then there needs to be an association between the root map map-b.ditamap and the corresponding set of rendition-specific keys. Abstractly this is part of the Rendition Definition parameters: you simply say "for map file "map-b.ditamap" use key definitions "map-b-PDF.ditamap" or whatever. It could also be done by literally change "map-b.ditamap" to "map-b-PDF.ditamap" in the map source before processing it normally. In any case, given that association, the processor can resolve references to keys nominally defined in map-b.ditamap to the keys as bound in the rendition-specific binding. Using Michael's approach it's essentially the same: you define the mapping as a rendition parameter or otherwise modify the map to be processed to replace "map-b.ditamap" with "map-b-PDF.ditamap". In the context of the Open Toolkit this would be something done as part of the general preparation of the intermediate files used to then create the final rendition (e.g., as part of the map-pull process or whatever makes sense). The data manipulation required is consistent with the sort manipulation the Toolkit already does. In the context of Processing Manager the mapping might be hidden behind a key resolution API that takes the rendition-specific key definitions into account. In any case, the result is the same--the rendered links reflect the bindings defined in the rendition-specific key map. The only difference is the interaction or potential interference of the two key spaces. In my approach, as explained above, there's no possible interference of the two key spaces because they are kept distinct, while in Michael's approach they key spaces are combined. I'm sure there's more to say on this subject but I'm out of time for now. But I think I've made my point about as clearly as I can. Cheers, E. -- Eliot Kimber Senior Solutions Architect "Bringing Strategy, Content, and Technology Together" Main: 512.554.9368 www.reallysi.com www.rsuitecms.com


  • 11.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 03-21-2013 02:34
    In starting to implement a working processor that does cross-publication linking in the way Michael and I have outlined I have come to realize that we've overlooked one aspect: references to elements within topics. In all the discussion to date, including my long exploration quoted below, we have only considered mapping *keys* to rendered targets. As Michael asserted and as I think I confirmed, this can be done by generating new key definitions to the rendered result of a given key-bound resource (e.g., what a topic becomes in a given rendered result). However... For references to elements within topics, it's not so easy. Consider the use case of two references from a topic in Map A to two figures in a topic in Map B., with the intent that the cross-publication references get you to the figures, not just it's containing topic: Map A: <map> ... <mapref scope="peer" processing-role="resource-only" href="../map-b/keydefs/map-b-keydefs.ditamap" /> ... <topicref href="a-01.dita"/> ... </map> Topic A-01.dita, used from map Map-A.ditamap: <topic id="a-01"><title>Crossrefs to Figs in Map B</title> <body> <p>See <xref keyref="topic-b-01/fig-01"/>.</p> <p>See <xref keyref="topic-b-01/fig-02"/>.</p> </body> </topic> Map B: Map B Keydefs (map-b/keydefs/map-b-keydefs.ditamap): <map> <keydef keys="topic-b-01" scope="peer" href="../topics/b-01.dita" /> </map> Topic b-01: <topic id="b-01"><title>Two Useful Figures</title> <body> <fig id="fig-01"> ... </fig> <fig id="fig-02"> ... </fig> </body> </topic> The references from topic a-01.dita to b-01.dita *as authored* are clear and can be resolved reliably in the source. However, because a key-based reference to a topic ID includes the element ID *at the point of reference*, not in the key definition, it means that simply rewriting the key definition to point to the topic as rendered is insufficient: you must also map the ID part of the original keyref into the appropriate output-specific address and there is no way to know what that is *except* to maintain an output-specific element-id=to-rendered-location map. There's no way to know what the output-specific address is because that's entirely a function of the output processor and it could do anything it wants. Even in the case of the current HTML transform, where there is a well-understood mapping from source IDs to output IDs, it's not 100% because of the use of @chunk. When you chunk you may create a situation where the processor has to synthesize new IDs and at that point you can't reliably predict what those might be. In the case of monolithic outputs like PDF, it is not possible to have a simple one-to-one mapping from source IDs to output IDs because result IDs need to be unique across the publication but source IDs only need to be unique within a given topic or map document. DITA, today, does not provide any interchange format for that mapping. That is, there is nothing provided by maps today that defines a maping of element IDs to anything--maps only address topics, maps, and non-DITA resources, and thus are incapable of saying anything about elements within topics. In my thinking about this in the past, I had presumed an all-knowing Process Manager that would maintain this mapping as a black box--in that case, there is no need for interchange because there is exactly one actor, the Process Manager. However, Michael makes a strong case for processor interoperation and I think that any solution we come up with has to support interchange of intermediate address resolution data among processors, which means we have to standardize the mapping. The mapping itself has to reflect the following information for each element mapped (e.g., as rows in a table): 1. The deliverable the mapping applies to, as represented by the Rendition Definition (as outlined in my information below). The Redition Definition includes the root map to be processed and all the processing options used to produce the rendition. E.g., "map-b.ditamap to PDF". If you have one mapping per deliverable then the deliverable can be a property of the mapping as a whole and need not be repeated in every row. 2. The containing topic or map, represented by the keys bound to it in the context of the deliverable's root map and the resource bound to those keys. A given topic or map may have any number of keys bound to it. 3. The source element ID (e.g., "fig-01" 4. The rendition-specific address, e.g., "map-b.pdf#anchor-d123" Entries are looked up by the keyname/element ID pair by which an element is referenced. In fact you could use the literal key-based fragment identifier as a lookup key for the data, since DITA's syntax for key-based element addresses is simple and consistent. Represented as a literal table the mapping table for the map-b-to-PDF rendition might look like this: +-----------------------------------------------+ keyname Element ID Rendition address -------------+------------+-------------------- topic-b-01 fig-01 anchor-d123 -------------+------------+-------------------- topic-b-01 fig-02 anchor-d546 +-----------------------------------------------+ If interchange is a requirement, which I think it is, then we need some XML markup for this. I think the right approach would be to define a specialized topic type that captures or points to the rendition definition metadata (which is on my plate to define) and that uses a specialized <simpletable> to capture the mapping pretty much as I've outlined it here. I would not worry about normalizing the data but would keep it as a simple as possible since the point is efficient run-time processing, not database purity. Such a table would be easy to query with XPath or could be read directly into SQL databases if necessary. I would expect a large-scale Production Manager to use a relational database to manage large volumes of mapping data but I could also see using an XQuery database in the context of an XML-primary CMS that already uses something like MarkLogic or eXist. I will add the definition of this mapping topic to my existing processing data representation design task. Cheers, Eliot On 9/13/11 1:45 PM, "Eliot Kimber" <ekimber@reallysi.com> wrote: > In thinking about this more, I think that Michael's approach of thinking of > the rendition-specific key-to-target binding as being a literal DITA map > with literal key definitions is a useful one. It provides a clear syntax for > capturing the binding for interchange purposes, will always work for > distributed processing scenarios, and gives us a clear basis on which to > discuss data details. I will use this approach from now on in my > discussions. > > I explore the processing implications and possibilities in some detail > below, but I think my difference with Michael comes down to: > > Is it possible to keep the two key spaces for two publications distinct or > must you combine them? I say keep them distinct by enabling addressing of > keys in the context of specific root maps. Michael says combine them so that > existing processors "just work" once you swap in rendition-specific key > bindings, at the cost of requiring coordination of the key names across the > maps involved. > > If we stipulate that in both cases the actual rendition processing to create > working links is done by "swapping out" the target map as authored for an > equivalent map that contains rendition-specific key bindings, then there are > no actual processing differences in our two models--the only difference is > in the details of how those rendition-specific maps are coordinated or used, > which is all implementation detail. > > That is, the processing doesn't require or disallow my all-knowing > Processing Manager and fully allows Michael's completely informal and > distributed processing environment. All the differences in these two models > are implementation details. > > This "swapping out" must be done by specifying a mapping from the target map > as authored (e.g., "map-b.ditamap") to the rendition-specific map to use > instead (e.g., "map-b-PDF.ditamap") as an input to a rendition process. That > mapping has to be known regardless of how the processing is done. It could > be specified as a parameter or it could be specified as instructions to the > human setting up the production, who then reflects the knowledge by > modifying the input map. The functional result is the same. > > Given that mapping, a human or processor can thus reliably render key > references as authored to working links in the rendition, as long as the > rendition-specific key bindings are correct. > > Thus the mechanism by which rendition-specific keys are communicated to or > used by a processor is an implementation detail. The only question is what > does the processor have to do to resolve the keys? Do they always have > exactly one key space or do they need to handle one or more key spaces? > > My approach, which requires a new fragment identifier in order to point to > specific keys in the context of specific root maps, reliably keeps distinct > key spaces distinct and removes the need to coordinate names across key > spaces. I think this is essential. It requires processors to handle one or > more key spaces, but I don't think that should pose a problem in practice > because if you can construct one key space you can just as easily construct > 100 key spaces. Since the universe has more than one map I would hope that > engineers of DITA-aware systems instinctively provide for the possibility of > multiple key spaces. > > Michael's approach requires combining the key spaces of otherwise separate > publications into a single unified key space. This simplifies processing > where the rendition-specific maps are used literally to implement > cross-publication linking using DITA 1.2 processing, but at the cost of > requiring coordination across all the key spaces that might be combined. > > I think that this coordination is impossible in the general, distributed > case, because you may want to link to a publication over which you have no > control and that happens to duplicate some keys in your publication that you > do not want to resolve to that publication. > > The only solution in that case is to keep the key spaces separate. DITA 1.2 > clearly defines the notion of key space so there can't be any ambiguity > about what is intended when you address a key in the context of a given root > map and it shouldn't be a surprise to any processor that there might be more > than one key space in play at any given point in time (because the universe > contains more than one map). > > In the case where you have, for some reason, multiple maps that contribute > to a single rendered publication through some process, it would be up to > that process to generate the appropriate rendition-specific map but it could > do it. In that case there might be a many-to-one mapping from maps as > authored to intermediate maps, but the processing will still work just as it > would for the simpler case of one map exactly equal to one publication. > > So I think the question remains: do we allow referencing across key spaces > in a way that keeps key spaces distinct or do we require that all maps that > might want to participate in cross-publication links share a single unified > key space that requires coordination of all key names across those maps? > > I feel strongly that the latter is not acceptable or sustainable and that > the implementation cost of allowing cross-key-space referencing is low and > is, in fact, arguably inherent in the DITA 1.2 architecture because it > formally defines the concept of key space. In the case of the Toolkit in > particular, I will personally implement the processing required if that's a > barrier. > > It is certainly the case that key-aware editors and component management > systems already have to manage multiple key spaces if they allow management > of multiple maps, which they all do as far as I know (e.g., OxygenXML, > Arbortext Editor 6, XMetal 6). [I don't know of any CMS systems that today > actually manage keys or provide key-resolution services but there might be > some. I'm actively working on adding that functionality to our CMS products, > but it's a low product priority right now.] > > The purpose of the rest of this message is to try to define a general > abstract processing model or environment that fits both my > tightly-controlled approach and Michael's arbitrarily distributed model. My > intent is to define some common vocabulary and appropriate abstractions that > let us focus on the general requirements with out worrying too much about > implementation details. > > Michael is presuming (but not requiring) an environment where there is no > central all-knowing rendition system that maintains knowledge about all the > renditions and the key-to-rendition mappings. I was assuming an all-knowing > Production Manager. But I think for both of us those are implementation > details that don't really change the problem. We were both presuming that > *something* had required knowledge of the renditions involved and the > intents of the renderers--in my case it was a management system, in > Michael's it was the humans requesting the renditions. But I think the > knowledge required in both cases in the same, the only difference is how > that knowledge is captured or communicated, which is an implementation > detail. > > The following discussion reflects the real case of the DITA 1.2 spec, where > we have a single content set that needs to be published in at least two > ways: as a single publication combining the Architectural Spec and the > Language Reference and as two separate publications, the Architectural Spec > and the Language Reference, with cross references between the two > publications *as rendered*. I have tried to reflect this case with the > smallest illustrative data set. > > Note that in the case of the DITA spec all the content is authored by a > single, coordinated group, so it is possible to coordinate the key names > across all the publication packages that might be applied to the content. > This does not reflect the more general distributed case where you may want > to link to renditions of a publication you only have read-only access to and > for which there is no coordinate of its key names with your key names. > > Let us have three maps, Map A, Map B, and Map AB, and two topics, Topic 1 > and Topic 2. > > The author of Topic 1 creates a link to Topic 2 because Topic 1 depends > rhetorically on Topic 2. This is the DITA Spec case, where the arch spec > points to language reference topics (and visa versa). > > Topic 1 looks like this: > > <topic id="topic-01"> > <title>Topic One</title> > <body> > <p>See <xref keyref="topic-02"/>.</p> > </body. > </topic> > > Topic 2 looks like this: > > <topic id="topic-02"> > <title>Topic Two</title> > <body> > <p>Something important to Topic 1.</p> > </body. > </topic> > > Map AB includes both topics: > > <map> > <title>Map AB</title> > <keydef > keys="topic-01" > href="topics/topic-01.dita" > /> > <keydef > keys="topic-02" > href="topics/topic-02.dita" > / >> > <topicref keyref="topic-01"/> > <topicref keyref="topic-02"/> > </map> > > This is the full DITA spec case, where all the topics are used in the scope > of a single root map. No processing ambiguity. > > The other case is where we have two publications, Map A and Map B: > > Map A: > > <map> > <title>Map A</title> > <keydef > keys="topic-01" > href="topics/topic-01.dita" > /> > <keydef > keys="topic-02" > href="????" > format="????" > scope="????" > / >> > <topicref keyref="topic-01"/> > <!-- NOTE: No reference to topic-02 --> > </map> > > Map B: > > <map> > <title>Map B</title> > <keydef > keys="topic-02" > href="topics/topic-02.dita" > / >> > <!-- NOTE: No reference to topic-01 --> > <topicref keyref="topic-02"/> > </map> > > > Processing the publications: > > When Map B is rendered to a given output we can capture the key-to-address > mapping in some way, such as Michael's keydefs, e.g.: > > Map B-PDF: > > <map> > <title>Map B PDF-specific keys</title> > <keydef keys="topic-02" > href="/workspace/output/map-b/pdf/map-b.pdf#unique-01" > format="pdf" > scope="external" > /> > <map> > > That's as good as any other way to capture the information and I'm happy to > stipulate that this is how it is always captured for the purpose of > processing interchange. This leaves open the possibility of manual or > automatic inclusion of the map into the publication map as I think Michael > is describing in his processing model. How the map is used is an > implementation detail if the map is not literally included by a map author > separate from a specific rendition process action. > > When Map A is rendered the questions then are: > > Question 1. What should the keydef for key "topic-02" look like in Map A? > > My proposal is currently: > > <keydef keys="topic-02" > href="map-b.ditamap#keyname::topic-02" > format="ditamap" > scope="peer" > /> > > Where the fragment identifier is a strawman for a fragment ID that is > unambiguously a reference to a key in the scope of the key space defined by > root map map-b.ditamap. > > Michael's example is: > > <mapref processing-role="resource-only" href="map-b.ditamap"/> > > If I understand Michael's approach, he is simply including Map B as a > resource-only map so that the keys have a binding. However, his form of > inclusion doesn't make it clear that the intent is that those keys are > treated as a separate key space. I think that is essential. That is the > intent of my using scope="peer". It doesn't keep the two key spaces separate > and therefore requires that the key names not conflict between the two root > maps. > > His approach does allow swapping in of the rendition-specific bindings for > Map B given the map-as-authored-to-rendition-map mapping stipulated above as > a necessary parameter to the rendition process. But it still requires a > single unified key space across maps A and B. > > In the context of processing Map A as authored outside the context of a > specific rendition there would be nothing to indicate that map B's keys are > not defining resources directly required by Map A. For example, a process > that takes a map and produces a package of all of Map A's dependencies would > also gather up everything used by Map B even though they're not really > direct dependencies of Map A. (Such a processor is part of the open-source > DITA for Publishers project and is also in the Open Toolkit.) > > If the mapref specified scope="peer" that would avoid the dependency > confusion but wouldn't avoid the key space combination because there's no > separate direct binding of key in Map A to key in Map B as in my approach. > > In both cases we're pointing to the map defining the keys, the difference in > my approach is that I'm also pointing to the key within the map and using > @scope to make it clear that I'm not simply using Map B's key definitions to > include resources as part of Map A's content, which is otherwise the > implication per the DITA 1.2 rules. > > In my proposal, because there's an additional layer of indirection between > the key as referenced in the context of Map A and the key as referenced in > the key definition in Map A, the key names need not be coordinated between > the two maps. That is, if Map B defined the key for Topic 2 as > "second-topic", my form of keydef could be: > > <keydef keys="topic-02" > href="map-b.ditamap#keyname::second-topic" > format="ditamap" > scope="peer" > /> > > And the original reference from Topic 1 would continue to work in both Map A > and Map AB. > > I think that even if we don't address the keys via fragment ID that we have > to distinguish references to peer and external key sets. > > Question 2. How does the agent (person or processor) rendering Map A specify > which rendition of Map B some or all of the links to Map B should point to? > > That is, given that there is both a PDF rendition and an HTML rendition of > Map B, the choices are: > > - The PDF rendition > > - The HTML rendition > > - Both renditions (multiple links generated from a single source link, or > some intermediate fan-out link or whatever). > > Does this decision need to be made on a per-link basis or on a per-rendition > of Map A basis? > > My thinking to date had been that like would always link to like, but > Michael is correct to say that that can't be the only option, so it has to > be either a build-time decision or an authoring-time decision. > > I think it needs to be a build-time decision determined by how you define > the mapping of map-as-authored to rendition-specific map. Anything else > would require additional per-key-definition syntax or metadata conventions > that I think would be impractical in practice. I suppose if it came to it, > you could modify the rendition-specific map to reflect exactly what you > wanted and maintain that manually. > > Another fact, which I never stated but that Michael correctly pointed out, > is that a given rendition is not identified just by the rendition type (PDF, > HTML, etc.) but by all the runtime parameters that define it, including the > active DITAVAL conditions, any processor-specific runtime options, the > rendition-specific key-to-address mappings, etc. > > In my model, there is a Processing Manager that manages all rendition > processing applied to a set of known content, e.g., all the publications > managed within a given system. The Processing Manager abstracts the notion > of "rendition" through a Rendition Definition object, which captures all the > input parameters for a given rendition, e.g. "PDF, DITAVAL > platform="windows", PDF option set "foo". > > The implication of Rendition Definition is that the same input rendered > using the same Rendition Definition will produce the same (or functionally > equivalent) output. > > Michael's model assumes there is no Processing Manager but that processing > happens where it happens and people coordinate however they do it. However, > the abstract notion of Rendition Definition is the same: you have to now > what all the parameters were in order to reproduce the rendition. So in > Michael's distributed world the Rendition Definition might be implemented as > notes scribbled on your desk blotter or an email from the supplier of the > rendition you want to link to, or whatever, but the information content is > the same regardless. > > We can now define a "rendition instance" as being a Rendition > Definition/input map pair. Two different input maps that use the same > Rendition Definition will have "consistent" or "compatible" output (that is, > they'll reflect the same set of runtime options). > > This is all, I think, equivalent to Michael saying "the person who renders > the map has to specify the appropriate DITAVAL files, rendition-specific key > bindings, and on". > > So my notion of Rendition Definition is either literal, as in my Processing > Manager system, or virtual, reflected in the knowledge of the person doing > the rendering, but in both cases, the same information is represented. > > In my model all rendering is done by the same processors, so that > coordination of intermediate data (key-to-rendition-location mappings) is > obviously easy to do. > > But Michael say "no, you can't assume that--it has to be more disconnected > and distributed", which is true. > > But I think the degree of distribution becomes an implementation detail. > That is, if Rendition Definitions include the key-to-rendition bindings, > it's only a question of how those bindings get communicated among processing > systems, not how they are captured or represented. Michael presumes or > stipulates a map-based syntax because that is reliably interchanged and > processed by DITA processors, which is fine. > > So now to the processing: > > If we stipulate that rendition-target-type is a runtime parameter, then when > I process Map A to a particular rendition and want links to be to the PDF > renditions of the target publications, part of the Rendition Definition is > "render cross-publication links to PDF renditions". But in fact, it needs to > be "Render cross-publication links to the rendition created using Rendition > Definition X", that is, a specific Rendition Definition reflecting a > specific set of rendition options, not just the base output type. > > In the context of the Open Toolkit, this means all the Ant parameters plus > all the Toolkit Plugins and environment variables that contribute to the > configuration of the transformation type used. Any other processing system > will have the equivalent set of options and starting conditions. > > Given this background, we can now explore the different processing use > cases: > > Processing Use Case 1: Don't have rendition-specific key bindings for Map B. > > If I process Map A and I don't have the rendition-specific key binding for > Map B, the processor has three choices: > > 1. Process Map B using the Rendition Definition specified and then use the > result to complete processing Map A. Note that this could be a literal > process or it could be "get on the phone to the supplier of Map B and ask > for the rendition-specific key binding that reflects the Rendition > Defininition you want". > > 2. Process Map A with placeholder or otherwise unresolveable links. > > 3. Fail the rendition of A. > > Processing Use Case 2: Do have rendition-specific key bindings for Map B. > > If we are using my cross-publication key definition approach, then there > needs to be an association between the root map map-b.ditamap and the > corresponding set of rendition-specific keys. Abstractly this is part of the > Rendition Definition parameters: you simply say "for map file > "map-b.ditamap" use key definitions "map-b-PDF.ditamap" or whatever. It > could also be done by literally change "map-b.ditamap" to > "map-b-PDF.ditamap" in the map source before processing it normally. In any > case, given that association, the processor can resolve references to keys > nominally defined in map-b.ditamap to the keys as bound in the > rendition-specific binding. > > Using Michael's approach it's essentially the same: you define the mapping > as a rendition parameter or otherwise modify the map to be processed to > replace "map-b.ditamap" with "map-b-PDF.ditamap". > > In the context of the Open Toolkit this would be something done as part of > the general preparation of the intermediate files used to then create the > final rendition (e.g., as part of the map-pull process or whatever makes > sense). The data manipulation required is consistent with the sort > manipulation the Toolkit already does. > > In the context of Processing Manager the mapping might be hidden behind a > key resolution API that takes the rendition-specific key definitions into > account. > > In any case, the result is the same--the rendered links reflect the bindings > defined in the rendition-specific key map. > > The only difference is the interaction or potential interference of the two > key spaces. > > In my approach, as explained above, there's no possible interference of the > two key spaces because they are kept distinct, while in Michael's approach > they key spaces are combined. > > I'm sure there's more to say on this subject but I'm out of time for now. > But I think I've made my point about as clearly as I can. > > Cheers, > > E. > > -- > Eliot Kimber > Senior Solutions Architect > "Bringing Strategy, Content, and Technology Together" > Main: 512.554.9368 > www.reallysi.com > www.rsuitecms.com > > > --------------------------------------------------------------------- > To unsubscribe from this mail list, you must leave the OASIS TC that > generates this mail. Follow this link to all your TCs in OASIS at: > https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php > -- Eliot Kimber Senior Solutions Architect, RSI Content Solutions "Bringing Strategy, Content, and Technology Together" Main: 512.554.9368 www.rsicms.com www.rsuitecms.com Book: DITA For Practitioners, from XML Press, http://xmlpress.net/publications/dita/practitioners-1/


  • 12.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 15:56
    Hi Michael, Forgive if I have missed something from previous discussions about this particular requirement. Should the scenario be expanded to also include links across publications (maps) and not just limited to chapters with a book? This is certainly a situation which we have come up against with customers, where, for example, a chapter in a user guide may refer to a chapter in an admin guide. Or, are you implying this through the use of a series of nested maps ? where each mapref links to a complete publication? Kind regards   Mark Poston Senior Technical Consultant Mekon Ltd. Tel. +44 20 8722 8461 Mob: +44 7515 906032  Skype: mark_mekon.com Twitter: mekonmark From: Michael Priestley < mpriestl@ca.ibm.com > Date: Tue, 6 Sep 2011 15:19:46 +0100 To: " dita@lists.oasis-open.org " < dita@lists.oasis-open.org > Subject: [dita] Scenario for cross-deliverable referencing This was my todo from last week's mtg - sorry I'm leaving it to the wire. This describes a solution that can be implemented today - I still think there more work to be done, including: -  a general solution for key scoping (but not deliverable-based scoping since the boundaries of deliverables are mutable, as I'm trying to show here). - a standardized approach for cross-deliverable referencing - if we want to encourage this approach, for example, or propose an alternative - but we should be providing some guidance to vendors on how to implement so that the solution is cross-vendor compatible scenario: - we need to produce PDFs for each chapter of a book, as well as a single big PDF that contains all chapters - the chapters contain cross-references to content in other chapters, which needs to be resolved as a cross-deliverable link in the single-chapter PDFs but as a local link in the single big PDF case - each chapter is represented by a separate map - each topicref in the map has a uniquely addressable key (using whatever general scoping mechanism we choose to implement) - the book as a whole is represented by a master map that pulls in the others solution for individual chapter case: - for each chapter, execute a partial PDF build, which does not transform the content but does preprocess the map to turn each topicref href into a form appropriate for the deliverable being produced (ie, including the filename of the PDF being produced, with appropriate anchor syntax)         this results in a deliverable-specific set of key mappings - for each chapter, create a master map that includes the chapter being built and then resource-only inclusionsof the deliverable-specific maps for all other chapters - for each chapter's master map, execute a full PDF build         this results in a chapter-level PDF with all links to other chapter resolved correctly solution for whole book case: - build normally Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25


  • 13.  RE: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 16:01
    I just wanted to second that.  It’s an issue we regularly come up against and some guidelines would really help.   From: Mark Poston [mailto:mark.poston@mekon.com] Sent: 06 September 2011 16:55 To: Michael Priestley; dita@lists.oasis-open.org Subject: Re: [dita] Scenario for cross-deliverable referencing   Hi Michael,   Forgive if I have missed something from previous discussions about this particular requirement.   Should the scenario be expanded to also include links across publications (maps) and not just limited to chapters with a book? This is certainly a situation which we have come up against with customers, where, for example, a chapter in a user guide may refer to a chapter in an admin guide.   Or, are you implying this through the use of a series of nested maps – where each mapref links to a complete publication?   Kind regards   Mark Poston Senior Technical Consultant Mekon Ltd. Tel. +44 20 8722 8461 Mob: +44 7515 906032  Skype: mark_mekon.com Twitter: mekonmark   From: Michael Priestley < mpriestl@ca.ibm.com > Date: Tue, 6 Sep 2011 15:19:46 +0100 To: " dita@lists.oasis-open.org " < dita@lists.oasis-open.org > Subject: [dita] Scenario for cross-deliverable referencing   This was my todo from last week's mtg - sorry I'm leaving it to the wire. This describes a solution that can be implemented today - I still think there more work to be done, including: -  a general solution for key scoping (but not deliverable-based scoping since the boundaries of deliverables are mutable, as I'm trying to show here). - a standardized approach for cross-deliverable referencing - if we want to encourage this approach, for example, or propose an alternative - but we should be providing some guidance to vendors on how to implement so that the solution is cross-vendor compatible scenario: - we need to produce PDFs for each chapter of a book, as well as a single big PDF that contains all chapters - the chapters contain cross-references to content in other chapters, which needs to be resolved as a cross-deliverable link in the single-chapter PDFs but as a local link in the single big PDF case - each chapter is represented by a separate map - each topicref in the map has a uniquely addressable key (using whatever general scoping mechanism we choose to implement) - the book as a whole is represented by a master map that pulls in the others solution for individual chapter case: - for each chapter, execute a partial PDF build, which does not transform the content but does preprocess the map to turn each topicref href into a form appropriate for the deliverable being produced (ie, including the filename of the PDF being produced, with appropriate anchor syntax)         this results in a deliverable-specific set of key mappings - for each chapter, create a master map that includes the chapter being built and then resource-only inclusionsof the deliverable-specific maps for all other chapters - for each chapter's master map, execute a full PDF build         this results in a chapter-level PDF with all links to other chapter resolved correctly solution for whole book case: - build normally Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25


  • 14.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-06-2011 16:02
    Hi Mark, Links across publications could use the same technique as I've described for chapters. I used chapters as my primary example because I wanted to use an example in which the same reference might resolve as cross-deliverable or same-deliverable depending on the including map and build process. Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25 From: Mark Poston <mark.poston@mekon.com> To: Michael Priestley/Toronto/IBM@IBMCA, "dita@lists.oasis-open.org" <dita@lists.oasis-open.org> Date: 09/06/2011 11:58 AM Subject: Re: [dita] Scenario for cross-deliverable referencing Hi Michael, Forgive if I have missed something from previous discussions about this particular requirement. Should the scenario be expanded to also include links across publications (maps) and not just limited to chapters with a book? This is certainly a situation which we have come up against with customers, where, for example, a chapter in a user guide may refer to a chapter in an admin guide. Or, are you implying this through the use of a series of nested maps – where each mapref links to a complete publication? Kind regards   Mark Poston Senior Technical Consultant Mekon Ltd. Tel. +44 20 8722 8461 Mob: +44 7515 906032 Skype: mark_mekon.com Twitter: mekonmark From: Michael Priestley < mpriestl@ca.ibm.com > Date: Tue, 6 Sep 2011 15:19:46 +0100 To: " dita@lists.oasis-open.org " < dita@lists.oasis-open.org > Subject: [dita] Scenario for cross-deliverable referencing This was my todo from last week's mtg - sorry I'm leaving it to the wire. This describes a solution that can be implemented today - I still think there more work to be done, including: -  a general solution for key scoping (but not deliverable-based scoping since the boundaries of deliverables are mutable, as I'm trying to show here). - a standardized approach for cross-deliverable referencing - if we want to encourage this approach, for example, or propose an alternative - but we should be providing some guidance to vendors on how to implement so that the solution is cross-vendor compatible scenario: - we need to produce PDFs for each chapter of a book, as well as a single big PDF that contains all chapters - the chapters contain cross-references to content in other chapters, which needs to be resolved as a cross-deliverable link in the single-chapter PDFs but as a local link in the single big PDF case - each chapter is represented by a separate map - each topicref in the map has a uniquely addressable key (using whatever general scoping mechanism we choose to implement) - the book as a whole is represented by a master map that pulls in the others solution for individual chapter case: - for each chapter, execute a partial PDF build, which does not transform the content but does preprocess the map to turn each topicref href into a form appropriate for the deliverable being produced (ie, including the filename of the PDF being produced, with appropriate anchor syntax)        this results in a deliverable-specific set of key mappings - for each chapter, create a master map that includes the chapter being built and then resource-only inclusionsof the deliverable-specific maps for all other chapters - for each chapter's master map, execute a full PDF build        this results in a chapter-level PDF with all links to other chapter resolved correctly solution for whole book case: - build normally Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25


  • 15.  Re: [dita] Scenario for cross-deliverable referencing

    Posted 09-13-2011 14:59
    Here are the markup examples I owed to Eliot: Assuming A.ditamap contains references to topics in B.ditamap: Starting input: A.ditamap         <topicref keys="a1" href= "a1.dita"/>         <mapref processing-role="resource-only" href= "b.ditamap"/>        <!--gets keys to allow a1.dita to reference b1.dita via keyref--> B.ditamap         <topicref keys="b1" href= "b1.dita"/> A1.dita         Hey here's a cross ref: <xref keyref="b1"/> <!--resolves to b1.dita at authoring time--> Add map shells to pull in deliverable-specific key mappings, and build out pdf/b.ditamap: AtoPDF.ditamap         <mapref processing-role="resource-only" href= "pdf/b.ditamap"/> <!--overrides keys to make b1 key go to a pdf bookmark         <mapref href= "A.ditamap"/> PDF/B.ditamap         <topicref keys="b1" href= "B.pdf#b1"/>         A1.dita         Hey here's a cross ref: <xref keyref="b1"/> <!--now resolves to B.pdf#b1 at build time--> Some additional thoughts The map shells and the deliverable-specific key mappings are really build-specific items, like a ditaval. We could consider simplifying the construction by eliminating the map shell and just make key definition files be something we can either produce or consume as part of the build, the way we consume ditavals today. My fundamental concern is that the mappings for a given deliverable can only be known at the time of build for the given deliverable - issues like output filename, chunking options, ditaval usage, etc.  will all affect what is available to be linked to in the deliverable. That's why I keep focusing on a method that will allow the build for a deliverable to define the key mappings to be used when building another deliverable that links to it. The question of key scoping to avoid conflicts remains, but is equally important to both the cross-deliverable and same-deliverable use cases. Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25 From: Michael Priestley/Toronto/IBM@IBMCA To: dita@lists.oasis-open.org Date: 09/06/2011 10:21 AM Subject: [dita] Scenario for cross-deliverable referencing This was my todo from last week's mtg - sorry I'm leaving it to the wire. This describes a solution that can be implemented today - I still think there more work to be done, including: -  a general solution for key scoping (but not deliverable-based scoping since the boundaries of deliverables are mutable, as I'm trying to show here). - a standardized approach for cross-deliverable referencing - if we want to encourage this approach, for example, or propose an alternative - but we should be providing some guidance to vendors on how to implement so that the solution is cross-vendor compatible scenario: - we need to produce PDFs for each chapter of a book, as well as a single big PDF that contains all chapters - the chapters contain cross-references to content in other chapters, which needs to be resolved as a cross-deliverable link in the single-chapter PDFs but as a local link in the single big PDF case - each chapter is represented by a separate map - each topicref in the map has a uniquely addressable key (using whatever general scoping mechanism we choose to implement) - the book as a whole is represented by a master map that pulls in the others solution for individual chapter case: - for each chapter, execute a partial PDF build, which does not transform the content but does preprocess the map to turn each topicref href into a form appropriate for the deliverable being produced (ie, including the filename of the PDF being produced, with appropriate anchor syntax)        this results in a deliverable-specific set of key mappings - for each chapter, create a master map that includes the chapter being built and then resource-only inclusions of the deliverable-specific maps for all other chapters - for each chapter's master map, execute a full PDF build        this results in a chapter-level PDF with all links to other chapter resolved correctly solution for whole book case: - build normally Michael Priestley, Senior Technical Staff Member (STSM) Lead IBM DITA Architect mpriestl@ca.ibm.com http://dita.xml.org/blog/25