ワンソース/マルチユースというけれど

例えば画像はDITAではどうなのでしょうか?DITA Usersに次のようなポストが載っています.
 
 
DITAからPDFとHTMLに出力する.PDFの場合は画像はTIFFでHTMLの場合はJPEGを使用したい.PDFのスタイルシートで画像の拡張子を.jpg⇒.tif に書き換えたがうまくいかない、どうしたらいいのかというものです.考えてみれば極めて普遍的な問題です.
 
DITA Open Toolkitは入力ソース中に画像の参照があると自動的にファイルを出力フォルダにコピーします.ですからスタイルシートで書き換える前にすでにコピーが終わってしまっていてそのままではうまく行きません.
寄せられた解決方法は、ビルドに手を加えてコピーするファイル名のリストを書き換えるというもの、あとはキンバーさんの案で画像のオーサリングそのものをimage/@keyrefの参照に変えるというものです.
 
キンバーさんの案は具体的にはmapでは、
 
<map>
  <title>Key definitions for graphics, HTML usage</title>
  <topicgroup>
    <keydef keys="car_wash" href="image/carwash.jpg" format="jpg"/>
    <keydef keys="spring_flower" href="image/springflower.jpg" format="jpg"/>
  </topicgroup>
</map>
 
と定義します.PDF用も同じように作れるでしょう.このmapをHTML用のmapでmaprefします.そして肝心のオーサリングでは、@keyrefで画像を参照します.
 
<image keyref="car_wash" alt="washing the car"/>
 
こうすればHTML用とPDF用とでmap参照を変更するだけで、元のオーサリングは変更せずに済むというものです.ナルホド.
 
試してみましたが、このimage要素はちゃんと中間ファイルで次のように展開されていました.
 
<image href="image\carwash.jpg" format="jpg" keyref="car_wash" alt="washing the car"  placement="inline" class="- topic/image " xtrf="..." xtrc="..."/>
 
これらの方法にはやはり利点と問題点があるように思えます.
 
ビルドを操作する方法は、あらかじめGIFなりTIFFなりが適切なフォルダに用意されていてOpen Toolkitで参照可能ならば問題ないでしょう.しかし、もしこれがCMS使う場合はどうでしょうか?たぶんCMSではユーザーがmapを指定して出力を指示します.CMSは参照されるすべてのDITAインスタンスと画像ファイルをワークエリアにチェックアウトしてDITA-OTにビルドをさせるでしょう.つまりCMSの関知しないところで画像の拡張子を変えてしまったらうまく行かないように思えます.キンバーさんの方法ならこのような問題はたぶん発生しないと考えられます.
 
キンバーさんの方法はどうでしょうか?keyrefを使う方法は便利ですが、エンドユーザーがオーサリングする場合、やはり画面上に指定した画像が表示されるのがもっともわかりやすいでしょう.ところが、keyrefを使う方法では画面に画像は表示されません.やっぱりimageは@hrefがないとダメみたいです.これだとエンドユーザーは不安を覚えるのではないでしょうか?オーサリングする人はつねに自分のオーサリングした結果がどうなるかを知りたいからです.
 
以下にXMetaLでの例を示します.最初が、image/@hrefで直接画像を指定した場合.次がimage/@keyrefで画像のkey名を指定した場合です.もしオーサリングツールがkeyrefでも画像を表示できるようになれば便利ですね.
 
イメージ 1
 
イメージ 2