DITA 1.3と分冊間参照

昨年の秋のDITA Fest 2014で、来るべきDITA 1.3の紹介がありました.その中で別のbookmapへのリンク、いわゆる分冊間参照がDITA 1.3では出来るようになるというお話がありました.しかし私にはにわかに信じられませんでした.分冊間参照というのはxrefでやろうがreltable/topicrefでやろうが非常に難しいのです.

例えばDITA 1.1を使用しているお客様は、例えば次のようにreltableにオーサリングしています.

<topicref href="pub-01.pdf#topic-01" format="pdf" scope="external"/>

これをプラグインスタイルシートで分差間参照であることを意識して、次のようなXSL-FOに落とします.

<fo:basic-link external-destaination="pub-01.pdf#nameddest=topic-01" axf:action-type="gotor">[参照先のタイトル]</fo:basic-link>

これにはいくつかの難関があります.

① 参照先のドキュメントのPDFファイル名(パス名)を正しく書く必要があります.
② 参照先のtopicの@idはbookmap中でユニークでなければなりません.

参照先のPDFの中に重複したtopicの@idがあるとリンクの結果は望むことにならないことは明らかでしょう.

そして②の要件は、実は一般的なDITAの要件とは異なるのです.CMSをお使いのお客様は大抵topic/@idがそのtopicの物理的な識別子になっていて、重複することはありません.しかしCMSを使用していない場合、例えばXMLエディタの「ファイル」-「名前をつけて保存」でいとも簡単にtopic/@idが同じのtopicファイルを作り出してしまうことが可能なのです.このような安易なtopicの作り方をしていると分冊間参照は実現できなくなります.

このDITA 1.3で分冊間参照をどのように実現すか?というのはずっと私の疑問でした.これに対してEliot Kimberさんがkeyを使用する二段階の方法で実現するとのことを以下の議論で紹介してくれています.

Linking to a shared topic in a specific publication

この23番目のスレッドがそれにあたります.2段階の処理が必要というのは概念的にはわかりますが、それでも実際にどのようにオーサリングされて、それがどのようなキー定義に置き換えられて実現されるのか?という点ではまだ具体的には感じられません.

いま私にはDITA 1.2で分冊間参照を実現するという課題があるのですが、DITA 1.2ではこのような分冊間参照をオーサリングレベルで表現する手段を持ちません.しかたがないので、分冊間参照自体を特殊化した要素で表現し、参照先のPDFを記号表記で概念的に表して最終的に

<fo:basic-link external-destaination="pub-01.pdf#nameddest=topic-01" axf:action-type="gotor">[参照先のタイトル]</fo:basic-link>

のようなFOを得ようとしています.たとえDITA 1.2であろうがDITA 1.3であろうが、様々な手段を経てこのFOを生成できない限りは分冊間参照は実現できないのです.

という訳でDITA 1.3で何がどこまで分冊間参照をサポートしてくれるのかは非常に興味があるところです.例えオーサリングレベルでいくら分冊間参照を表現できても、それを解釈するツール(例えばDITA-OT)のサポートなしには決してインプリメントは実現し得ません.DITA-OTが何をどこまでサポートしてくれるのか?というのは非常に大事だからです.しかしDITA 1.3になったら簡単に分冊間参照も実現できるという期待は持たない方が良いと思います.