DITA⇒よくわかりません(その5)

keyrefはまだ変種があります.私にはどうにもわからなかった機能です.これは@hrefをスキーマ上で持たない要素(例えばkeyword、term、ph)に対して、@hrefが定義されているkeydefをkeyrefできるのです.その結果、参照元の要素にリンクが生成されるとされています.
この例は
 
 
 
A key definition that uses both elements within the key definition and points to a resource
 
 
Create links from keywords, terms, or other elements
 
にあります.
前者の例だと、
 
<map domains="(map mapgroup-d)">
  <keydef keys="yaw-restrictor"
    href="parts/subassem/subassm-9414-C.dita">
    <topicmeta>
     <keywords>
       <keyword>yaw restrictor assembly</keyword>
     </keywords>
    </topicmeta>
  </keydef>
</map>
 
と書いてkeywordからkeyref="yaw-restrictor"と書けは、keywordのコンテンツを"yaw restrictor assembly"とし、更にsubassm-9414-C.ditaへのリンクも作成するというものです.
 
また後者では、<topicref keys="myterm" href="myterm.dita"/>でglossaryのエントリへのキーを定義し、<term keyref="myterm">my term</term>でterm要素にmyterm.ditaへのナビゲーションリンクを作成するとされています.
同じ例は、
 
DITA 1.2 feature article: Keyref overview
http://dita.xml.org/resource/keyref-overview-dita-12
 
の Creating Links From Terms And Keywords にも載っています.
このリンク生成機能はHTML出力だと問題なく動きます.しかしPDF出力はDITA-OT1.6.3ではリンクは生成されません.DITA-OT1.7.2ではリンクが生成されました.つまり、DITA1.2が発表されてから3年になるのですが、やっと実装されたということになります.
 
実際に中間ファイルを見てみるとわかりますが、中間ファイルにterm要素に@href要素が生成されていません.以下に中間ファイルをコンペアしてみた結果を載せます.左側がDITA-OT1.6.3、右側がDITA-OT1.7.2のTopicMergeのあとの結果です.DITA-OT1.7.2にはhref="#unique_1"があります.このリンク先はseabirds.ditaです.またohref="seabirds.dita"として元のリンク情報も残されています.しかしDITA-OT1.6.3にはこのような情報は一切ありません.これではリンクは生成できないのです.
 
イメージ 1
 
この例はDITA1.2の仕様がどのようになっていても、DITA Open Toolkitに代表されるインプリメンターの側が対応していなければ絵に書いた餅ということを示しています.またDITAもまだまだ発展途上という一例と考えられます.
私見ですが、そもそもスキーマに@hrefが定義されていない要素に対して@hrefをkeyrefが生成すると言うハットトリックのような仕様はどうも納得がゆきません.termに対して用語集へのリンクを生成するという使用方法に限ればなるほどと思えるのですが.
 
参考に上記のPDF出力の結果は以下から確認できます.
DITA-OT1.6.3のPDF http://yahoo.jp/box/-I-mpU
DITA-OT1.7.2のPDF http://yahoo.jp/box/1uVe2S