DITAをご検討中のお客様からconrefとconkeyrefについてよく分からないというお話を聞きます。まあ確かにconrefはともかくとしてもconkeyrefはピンときませんね。
今日は両者の違いについて少し書いてみます。両方ともフラグメント単位でのデータ再利用の方法なのですが、どのような違いがあるのか…
たとえばソフトウェアのマニュアルに「[開く]をクリックします」と出力したいとき、この文字列をトピックファイルにそのまま書いてしまってもいいわけですが、そうするとこのソフトウェアをタブレット端末用に移植したとき、「クリック」をすべて「タップ」に変更しなければいけません。
DITAの場合大量のトピックファイルにこのような記述があるはずですので、けっこうきつい作業になりそうです。
そこでconrefの登場です。conrefを使った場合、次のように記述することになるでしょう。
<p>[開く]を<ph conref=”names.xml#concept_names/operation_click” />します</p>
つまり「クリック」という文字列を直書きせずに、<ph>要素を使って「names.xmlを見に行け」とするわけです。そして別途作ったnames.xmlに次のような記述をしておきます。
<ph id=”operation_click”>クリック</ph>
するとDITA Open Toolkitが自動的に「クリック」という文字列に差し替えてくれることになります。将来タブレット端末対応したときに上記を
<ph id=”operation_click”>タップ</ph>
と書き換えれば、マニュアル全体の「クリック」がすべて「タップ」に置き換わってくれるわけですね。
大変便利で手軽なのですが、1つ問題があります。それはトピックファイルに
<p>[開く]を<ph conref=”names.xml#concept_names/operation_click” />します<p>
このように”names.xml”というファイル名を直書きしなければいけない点です。将来このnames.xmlのファイル名を変える必要が出てきたときは…
想像するだけでも嫌になってしまいますね。
そこで次に登場するのがconkeyrefです。conkeyrefを使った場合、トピックファイルには次のように書くことになるでしょう。
<p>[開く]ボタンを<ph conkeyref=”COMMON_NAMES/operation_click/”>します。</p>
で、今度はマップファイルに次のような記述をします。
<keydef href=”names.xml” keys=”COMMON_NAMES” />
“COMMON_NAMES”という文字列をキーにして、マップファイル経由でnames.xmlを参照に行きます。conrefのときとは違ってnames.xmlというファイル名を(トピックファイルではなく)マップファイルに追い出すことができました。
こうすることで将来names.xmlというファイル名を変更する必要があっても、マップファイルだけ修正すればいいことになります。
お手軽で分かりやすいconref、ちょっと面倒だけれど将来も安心なconkeyref。どちらが正解ということではなく、うまく使い分けできるといいですね。
最近は諸事情で「本社が移転!」なんていうこともちょくちょくあります。マニュアルに記載する本社住所もconrefとかconkeyrefを使っておいた方が安心かも(?)