特殊化しない選択: data要素の使い方

DITAにはdata要素というたぶんフツーに使っていると「なんだこりゃ?」という要素があります.仕様は以下にあるのですが読んでも読んでもいまいちわかりません.

3.7.2 <data>

The <data> element represents a property within a DITA topic or map. While the <data> element can be used directly to capture properties, it is particularly useful as a basis for specialization. Default processing should treat the content as an unknown kind of metadata and ignore it for rendering, but custom processing might match the @name attribute or specialized element and use the element for automated manipulation or to format data associated with the body flow. For example, a specialized <data> element might be used to format properties as sidebars or other adornments or to harvest properties for automated processing.

今までこのdata要素をお客様が使っていた例はほとんお見たことがありません.唯一あったのが、data要素を単位量を表すのに使用していた例です.例えば、

<data datatype="kg">200.0</data>

として単位量を表します.この場合は200.0Kgを表します.でも上にあるように既定の処理は<data>要素は無視です.ですので一般的なスタイルシートでは

    <xsl:template match="*[contains(@class,' topic/data ')]">
    </xsl:template>
    
というテンプレートで読み飛ばしてしまうのです.ですので上記のような単位量は、可用性を考えるなら<data>要素は使うべきではないと思います.もし<ph>要素の特殊化だったら、最低限でも"200.0"というテキストは残ります.<data>要素を使ってしまったのではこれすら出なくなってしまうからです.

でもdita-usersを見ていたらKimberさんの投稿で、これが本当の意味での<data>要素の使い方なんだな~と思わせるものがありました.

Ordered lists - continue numbering?

やりたいことは、番号付きリストの開始番号をリスタートさせるか、それとも前の番号を引き継いでインクリメントしてゆくか?というものです.

<ol>
 <data name="enumeration">
   <data name="enumeration-stream-id" value="stream-01"/>
   <data name="enumeration-action" value="restart"/>
</data>
 <li>List item</li>
</ol>
...
<ol>
 <data name="enumeration">
   <data name="enumeration-stream-id" value="stream-01"/>
   <data name="enumeration-action" value="continue"/>
</data>
 <li>List item</li>
</ol>

上記は前の番号を引き継ぐオーサリングです.

DITA 1.3からは、<ol>の子要素に<data>要素も書けるようになりました.(1.2までは<li>のみです)なので、このようにDATA要素を使用して、

1. 番号付きリストの開始番号を制御する意味を表現する.
2. 他のDITAの処理系へ持って行っても、<data>要素は基本的に無視なので、害を及ぼすことはない.最低限の可用性は担保できる.

ということが実現できます.<data>要素はこのように使うのですね.しかしやはりこのような場合はolに属性をつけたくなるのが人情です.<data>要素は使い方を決めても、特殊化しない限り検証させて正確なオーサリングを保証するということはできないからです.

それがDITAの特殊化のルールに従っていなくともです.可用性を捨てるか?と言われればその通りなのですが.