Add book-level processing to DITA based upon revised bookmap demo.
Longer description
The DITA community has pointed out the need for a native DITA mechanism for producing books from DITA topics. In particular, we need
The book model must rigorously separate all information about the layout and presentation of the book from the actual content so the content can be reused in other contexts and so multiple layout styles can be applied to the same book.
The book model should provide enough information so that an XSLT transform could generate a good XSL-FO representation of a book. An XSL-FO processor such as FOP could then convert the generated XSL-FO to PDF.
Since their introduction two years ago as a demo capability intended to meet the original requirements, the bookmap and bkinfo specializations have become more widely used within the user community. As a basic concept, they have received a high acceptance. Due to the wide use of the bookmap, a list of additional requirements to the existing bookmap/bkinfo has come in from different companies like IBM, Nokia, and KONE. In addition, current DITA 1.1 proposals offer the possibility for elegantly refining the original design. This proposal is based on these requirements and other contingent TC proposals.
Feature Owner(s)
Nancy Harrison (IBM), Chris Kravogel (Seicodyne), JoAnn Hackos (Comtech), Don Day (IBM), Jennifer Linton (Comtech)
Scope
Assumptions:
The proposal is based on the existing "dita132" version of the bookmap demo DTD in the DITA Open Toolkit. The bkinfo specialized topic for metadata is deprecated, and the topicmeta child of bookmap is specialized to contain structured metadata (based on bkinfo and also new requirements) based on the new <data> element.
Note: The rest of the discussion in this section are design notes that did not fit elsewhere in to the proposal template.
The general constraints for the proposal were to review existing practice to discover any book structures that were not already in the bookmap definition, and to generally clean up the book metadata scattered in several locations. We found the general book structure to be basically okay except for the additional design work needed to finish up the "booklist " structures for collected data.
Upon review of the existing bookmap specialization as used in the DITA Open Toolkit's demo/book directory, and of the known requirements, it was clear that all requirements could be met through a series of mostly backwards-compatible updates to new element definitions and content model additions. The deltas provide broader base capability that companies can specialize in order to constrain behaviors to their requirements (versus creating "parameter-driven" designs that introduce style into the design).
The main change from the original bookmap design is the consolidation of book metadata that had been previously spread across three different parts of markup into a unified book metadata design fully contained within the bookmap structure itself, making use of the new "data" element.
The lists requirement deals with how to specify both the location and content of special chapter-like constructs that generally have content derived by query during processing, such as a Table of contents, or lists of terms or endnotes. The balance here was for the design to allow author flexibility to specify which lists are important for a deliverable while leaving the ordering and location of these parts up to the policies of the house style (enforced by the transforms). The solution is a specialized topicgroup (booklists) at the start of the bookmap that has specialized topicrefs that represent the various booklist types. Authors can insert 0 or more of these "markers" into the booklists parent, where they represent instructions to the formatter to generate the appropriate content in the house style. A general override transform can offer call-templates that can be arranged in different order or commented out to effect a house policy for layout of such affordances. This increases the portability of the base bookmap between different processors.
Two requirements (transitional text between topics and limited nesting) were felt to be examples of further specialization that an organization can impose/infuse into local practice. Transitional text can be effected by specializing a topicref so that its topicmeta/shortdesc is available for "inline" discourse between other topicrefs in a map. Nesting limits can be effected locally by specializing topics down to a cutoff depth, as with DocBook's numbered sections, or by creating XSLT that counts the levels and generates a report of out-of-bound nesting.
Use Cases
{Describe this feature's use, as if ideally implemented.}
Technical Requirements
The current collection of bookmap-only requirements that inform on the proposed design are:
Costs
Benefits
The use of the consolidated bookmap would allow users to create a cohesive linear document out of their topics. They would be able to surround their current DITA topics with the information required by their organizations for published materials.
The bookmap proposal enables existing maps of information to be conrefed into bookmap structures, making it faster to produce a book based largely on existing ditamaps.
Time Required
Structures
| New structure | naming influences | legacy fragment | proposed declaration | content model |
|---|---|---|---|---|
| bookmeta | after "topicmeta for books" | bkinfo, prolog, bkbasicinfo | specialized topicmeta, first in bookmap | The structures that follow! |
| booklists | after "lists for books" | not previously implemented | specialized topicgroup, first in bookmap following bookmeta, populated with specialized topicrefs. | Toc, figures, tables, glossary terms, etc.. Zero or more occurance (empty parent is okay). No @href means generate the content; provided @href means use that content. |
| special notices | peer to edition notices; contains terms and other legal/policy info. | not previously implemented | specialized topicref | href to any topic type |
| New structure | naming influences | legacy fragment | proposed declaration | Content model |
|---|---|---|---|---|
| Author Information | . | none - container | bookmeta/authorInformation | (person | organization)*, contact* |
| person | DITA, DocBook, IBMIDDoc | bkinfo/bkinfobody/bkhistory/bkauthored/person | bookmeta/authorInformation/person | honorific?, givenname*, middlename*, familyname*, lineage?, address*, phone*, resource*, summary?, affiliations?, otherinfo* |
| organization | . | bkinfo/bkinfobody/bkhistory/bkauthored/organization | bookmeta/authorInformation/organization | orgname?, address*, phone*, resource*, summary?, otherinfo* |
| contact | . | . | bookmeta/authorInformation/contact | (person | organization)* |
| phone | DITA, DocBook, IBMIDDoc | person/phone, organization/phone | bookmeta/person/phone, bookmeta/organization/phone | office*, fax*, cellular*, URL* |
Note: This leaves out the "Contact department" request. I am not sure where to list that - should it be part of the <person> model? An addition to <contact>?
Note: Unsure how to set the model of the phone element - how to identify the different types? Different numbers, or should there be a marker (such as <cellular/>) inside the phone element?
Note: The content model for person, organization, and elements within those is the same in the original bkinfo and in this new proposal.
| New structure | naming influences | legacy fragment | proposed declaration | Content model |
|---|---|---|---|---|
| Publisher Information | . | none - container | bookmeta/publisherInformation | (person | organization)*, bkprintloc*, bkpublished*, colophon? |
| bkpublished | . | bkinfo/bkinfobody/bkhistory/bkpublished | bookmeta/publisherInformation/bkpublished | same as in bkinfo |
| colophon | . | . | bookmeta/publisherInformation/colophon | empty - this would be a reference to the topic that describes the colophon |
Note: The bkpublished information moved from bkhistory in the original bkinfo.
| New structure | naming influences | legacy fragment | proposed declaration | Content model |
|---|---|---|---|---|
| book change history | DITA | bkinfo/bkinfobody/bkhistory | bookmeta/bkChangeHistory | (*(%bkreviewed;) | (%bkedited;) | (%bktested;) | (%bkapproved;) | (%bkevent;))* |
Title Information / Book Identification
| New structure | naming influences | legacy fragment | proposed declaration | content model |
|---|---|---|---|---|
| BookTitle | DITA, IBMIDDoc, DocBook | No global container | bkbooktitle | . |
| Book Library | DITA, IBMIDDoc, DocBook | bkinfo/bkid/bkvolume/bklibrary | bkbooktitle/bklibrary | . |
| Book Title | DITA, IBMIDDoc, DocBook | bkinfo/title | bkbooktitle/bktitle | . |
| Short/Abbreviated Title | Docbook (titleabbrev); IDDoc (stitle) | bkinfo/bktitlealts/bktitleabbrev | bkbooktitle/bktitlealt | . |
| New structure | naming influences | legacy fragment | proposed declaration | content model |
|---|---|---|---|---|
| Book identification | DITA, IBMIDDoc, DocBook | bkinfo/bkid | bookmeta/bkid | . |
| Book/document Number | DITA, IBMIDDoc, DocBook | bkinfo/bkid/bknum | bookmeta/bkid/bknum | . |
| ISBN | DITA, IBMIDDoc, DocBook | bkinfo/isbn | bookmeta/bkid/isbn | . |
| Part number | . | bkinfo/bkpartno | bookmeta/bkid/bkpartno | . |
| Volume number | . | bkinfo/bkid/bkvolume/bkvolid | bookmeta/bkid/bkvolume | . |
A specialization of map to control the aggregation of topics. In much the same way that map currently organizes topics for an online deliverable, the bookmap defines the hierarchical structure for topics in a book.
Specializations of topic to provide listings that cannot or might not be generated from the book information alone.
A note was appended to dita-users inviting comment by current users of bookmap to gather an understanding of expected migration issues.
The following information will be augmented as new results come in, and will be rolled up in a migration discussion in the pending Design document for the bookmap proposal (to describe some migration scenarios and suggest some best practices for migration implementors (vendors, users).
David Cramer
I've implemented a dita-based system for a small shop that uses the bookmap demo stuff for pdfs.
I'm not too worried about changes to the bookmap content model because I figure conversion can be done programmatically and invisibly (i.e. have it check to see if you're using the demo bookmap and if so, convert it to the new boomap before processing).
I should think supplying a simple demo2release.xsl for the bookmap would be enough.
Mark Poston (Mekon)
I was considering whether to support bookmaps directly in the FrameMaker adapter we are working on. This would be for a future release of the adapter.
In addition, bookmaps would be more appropriate to users who are working in FrameMaker. We are also considering developing a FrameMaker authoring DITA solution and my thoughts were that bookmaps might be the way to go.
Indi Liepa (Nokia)
IBM bookmap plays a key role in our DITA-based environment at Nokia...
We have been waiting for the bookmap design to stabilise before we migrate to OASIS 1.0 so that we can take the new bookmap design into account and only carry out one major migration effort rather than two. We have planned and budgeted for conversion and migration to formalised OASIS bookmap processing in 2006. This move is timed to coincide with formal OASIS DITA support in the content management system we are using.
We have specialised bookmap to meet very specific needs and user group requirements. We do not have a huge amount of DITA IBM bookmap legacy data to migrate or convert - somewhere around 700 masters in our production environment. The most challenging area is re-educating authors who have become familiar with our current specialised bookmap and how it is processed.