プログラミング言語とXPath (1)

Office2003はもうすぐサポート終了になるそうです.私のPCにはOffice2013も入っていますがOffice2003もまだちゃんと入っています.Office2003の例えばWord2003はMicrosoftにとって画期的な製品でした.何故かというとそれまでのバイナリーのネイティブフォーマットの.docに加えて、WordML(.xml)がネイティブフォーマットとして追加されたからです.それまでの.doc形式は読み書きするのがとても大変でした.たとえばうちの会社はもう十何年もコンバータを作っていますが、.docのフォーマットをずっと追い続け、読み書きできるライブラリを作っていたからです.ところがフォーマットがXMLになると事態は一変します.どこが変わるのかと言うと次のような点になると思います.

1.XMLファイルは読み込むのに特別なライブラリを必要としません.XMLパーサーさえあれば、どのような言語でも読み込めます.
2.文字のエンコーディングを意識する必要がありません.なぜならば、XMLとして読み込めば文字はすべてUnicodeで表されているからです.
3.XMLは書くほうも楽です.前の記事でXMLをコピーするプログラムを紹介しましたが、エンコーディングを指定したWriterに"<"+タグ名+属性+">"、タグの内容、"</"+タグ名+">"を書き込むだけです.

という訳です.今まで.docを読み書きできるライブラリは当たり前のようにC/C++で作成されてきました.なので、このライブラリを使う側も自動的に(ほとんど)C/C++に言語に縛られていたわけです.しかしXMLを使えばパーサーが使えるほぼすべての言語で読み(書き)ができるようになります.ガチガチのC/C++に縛られる必要はまったくなくなるのです.

わたしももう10年前ですが、お客様の要望で、DocBookからWordMLをXSLTで生成し、実際に使ってもらっています.もしWordMLなしにDocBookからWordの.docを作るとなったら、とてつもない工数がかかったでしょう.しかし、このXSLTスタイルシートの作成工数は数人月であったと記憶しています.

また以前ですが、WordMLからXSL-FOを直接作成するスタイルシートを書いたことがあります.まだXSLT1.0の時代でしたので、その労力たるや大変でしたが、それでもお客様の役に立つ場合はあったようです.

ですのでプログラム間の交換に使用するデータ形式としてXMLを使用するのは非常にメリットがあります.

ところでそうは言ってもXMLを読み込む側から考えてみると、単にパーサーを使用して、読み込んだ結果を自分独自のクラスのインスタンスや構造体に展開して、それから目的の結果を生成するということでしたらそれほどの価値はありません.

XMLを読み込みで使用する価値というのは、やはり読み込みのプログラムでXMLの武器であるXPathが使えて、XMLの中を自由にナビゲート/目的のノードを選択できるという点にあるのではないでしょうか?

例えば、

<doc>
  <chapter>
    <title>~</title>
    <p id="ID_001">FOO</p>
    <p id="ID_002">BAR</p>
  </chapter>
</doc>

というXMLファイルに対して、XPathで"//p[@id='ID_002']" と書いて、<p id="ID_002">BAR</p>要素を取得できることです.

XMLファイルをいろんな言語でコピーすることはできたので、XPathがどのように言語で使用できるのか考えてみたいと思います.