OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

dita-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Public Comment


Comment from: ehennum@us.ibm.com

On behalf of IBM, I'd like to make the following proposal to the TC
for a minor change prior to the initial OASIS DITA release that would
have major benefits for DITA adopters.

-------------------------------------------------
Data Element Proposal

This note proposes adding a new element to DITA to support
extensible record structures.

Problem
--------

DITA provides only limited extensibility for topic metadata.  A
designer can specialize from the othermeta element for simple
metadata values, but the designer can't define complex metadata
structures similar to the existing metadata properties.

The same extensibility limitation applies to other machine-processable
properties of the topic in the prolog.  The specializer can't create
complex property structures.

As a result, specializers are forced to specialize body content to
create complex data structures.  (For examples, see the eNote
record-oriented demo and the bookmap book collection demo.)  These
data structures are not part of the topic content and thus don't
belong in the body.


Proposal
--------

Add a new element with unspecified semantics as a basis for
specializing data structures.  Expressed with DTD syntax:

<!ELEMENT data      (#PCDATA|%state;|%keyword;|%image;|%object;|%ph;|%data;)*>
<!ATTLIST data        %univ-atts;
                      name   CDATA   #REQUIRED
                      keyref NMTOKEN #IMPLIED
                      href   CDATA   #IMPLIED
>

The data element would have a loose content model to provide a basis
for specialization.  Content could include any of the following:

*  Textual content.

*  Data oriented subelements such as state and object.

*  A phrase for isolated fragments of content out of the main flow of
   discourse such as biographical blurbs and so on.

*  An href and keyref attributes because data often has links and keys
   expressed as URIs.

*  Recursion for creation of deeper substructure.

Zero or more instances of the data element could appear in the
following contexts:

*  At the end of the content list for the metdata element so new
   kinds of metadata can be added to the topic.

*  At the end of the content list for the prolog element so new
   properties can be added to the topic.

*  In the content list for the body element so new kinds of data
   structures can be added to the topic content structure.

*  In content lists where the ph element can appear so new kinds
   of data structures can be embedded in content.

Providing the data element to the body and ph contexts would offer
additional benefits in that a DITA topic specialization could provide
a mix of machine processable and human readable content.

The default processing for the data element would be to ignore it
silently because the data element has no semantics.  Thus, processing
has to be provided for the specialization.  Because the specialized
element can generalize to the data element, however, interoperability
is still preserved when topic is exchanged with other DITA adopters.
Other DITA adopters simply ignore the data, which is meaningless in
their applications anyway.

As a design note, specializers should never use the data element to
specialize an element for human readable content because the content
will be ignored and the topic will thus be incomplete if the topic is
generalized.


Examples
--------

In the DITA 1.3 distribution on IBM DeveloperWorks, the eNote demo
supports the following record in the topic body.  The subelements of
the noteheader element could all be modelled as specializations of the
proposed data element, so the noteheader could become the topic
prolog:

<noteheader>
    <From>
        <recipient href="dond@us.ibm.com">Don Day</recipient>
    </From>
    <To>
        <recipient href="ehennum@us.ibm.com">Erik Hennum</recipient>
        <recipient href="john_hunt@us.ibm.com">John Hunt</recipient>
    </To>
    <Date>2004-03-24</Date>
    <delivery>
        <Importance value="high"/>
        <ReturnReceipt state="yes"/>
    </delivery>
    <references>
        <InReplyTo href="OF910137D5.CFA24150-ON87256E60.0062F17A-88256E60.00639864@LocalDomain"/>
    </references>
</noteheader>

Similarly, the bookinfo file for the bookmap demo supports the
following record in the topic body.  The subelements of the bkinfobody
could all be modelled as specializations of the data element, which
would allow us to move the bookinfo elements into the metadata of the
bookmap where they really belong (and rename the container from
bkinfobody to a bkinfo specialization of topicmeta).  The benefits
include using existing metadata elements with the additional
properties and being able to declare any data of the book inline
within the bookmap itself or externally via conref.

<bkinfobody>
    <bkrights>
        <bkcopyrfirst><year>2003</year></bkcopyrfirst>
        <bkcopyrlast><year>2004</year></bkcopyrlast>
        <bkowner>
	         <organization>
		       <orgname>International Business Machines</orgname>
                <address>New Orchard Road
Armonk, New York 10504</address>
                <phone>914-499-1900</phone>
                <resource href="http://www.ibm.com/"/>
            </organization>
        </bkowner>
    </bkrights>
</bkinfobody>


Issues
------

The data element should also be added to the end of the topicmeta
element in the DITA map.  That way, prolog and metadata is consistent
across topic and map, and map benefits from the ability to specialize
complex metadata and topic properties.  To allow this, DITA needs a design
pattern so the ph element and its specializations can be shared
between maps and topics.

While it's clear that data should be added to the topic body element,
it's not clear whether it should be added to the conbody, refbody, and
taskbody specializations.



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]