DITA 1.3の見果てぬ夢(1)

DITA 1.3がOASIS標準となったのは2015年12月17日でした.それからもう1年弱が経とうとしています.私見ですが、DITA 1.3とそのインプリメント状況にはいまだにわからないことがよくあります.私の考えが間違っているのかもしれませんが、この1年近くいろいろ触れた感じではDITA 1.3というのは少し進みすぎたのではないのか?と思えるのです.DITA-OTに代表されるインプリメントが追い付いていないように感じます.

例えば、DITA 1.2まではDTDXML SchemaXML grammar files(DITAのXMLの文法規定)として配布されていました.DITA 1.3になってからはこれに加えてRELAX NGも採用され、そしてしかも、RELAX NGが正式な代表スキーマとされるに至りました.

1.1 About the DITA specification: All-inclusive edition

XML grammar files
The DITA markup for DITA vocabulary modules and DITA document types is available in several XML languages: RELAX NG (RNG), XML Document-Type Definitions (DTD), and W3C XML Schema (XSD).
While the files should define the same DITA elements, the RELAX NG grammars are normative if there is a discrepancy.

実際XML SchemaDTDRelax NGから自動生成されているようです.2014年のDITA EuropeでEliot Kimberさんが生成するのを実演していたくらいですから、もはや3つを手でメンテナンスするなどという手間のかかることはやらないのかもしれません.(それでもDITA 1.3ではSVGやMath MLが加わったので、これらのDTDは手で作業して加わっているのでしょう.)

ところが、2016年11月現在、DITA Open ToolkitではいまだにRELAX NGによる検証がサポートされていないのです.以下にDITA-OTのGitHubのIssueがありますが、早くても次のDITA-OT 2.4で搭載されるようです.ダメなら3.0になってしまうのかもしれません.

Support RELAXNG parsing and validation #2019


※ oXygenがREALX NGでの検証を可能とするためのDITA-OTのプラグインを出しています.また以前からXMLエディタのoXygenのIDEから変換シナリオを起動するなら、RELAX NGも検証は可能です.

dita-relaxng-defaults

実際DITAのスキーマというのは、他のDocBookなどのスキーマにない特徴を持っています.それは顧客によって特殊化される、しかも元のOASISの提供するスキーマに直接手を加えることなしに行う、つまりきれいなカスタマイズを行うことが前提となっています.今まで多くのDocBook 4.x時代のDTDを見てきましたが、みんな元のDTDを自分用に結構好き勝手な変更を加え、そこにはルールも秩序も何もありませんでした.DITAはこの点で根本的に異なります.

そしてこの特殊化をRELAX NGでやってみると、如何にXML SchemaDTDに比べて簡単に特殊化ができるかを身をもって実感することができます.DTDによる特殊化なんて一時代昔と思わせるほど優れています.RELAX NGOASIS標準になったのは、2001年12月と古いのですが、2015年のDITAの標準スキーマ(ベーススキーマ)になっているくらいですから実によくできているのです.

そしてOASISRELAX NGからXML SchemeDTDを自動生成するプロジェクトをGitHubに開設しています.

oasis-open/dita-rng-converter

でも、使ってみている人はあまり多くないようです.私はDITA 1.3が出てから自分の特殊化はRELAX NGで書いて、DTDに落とそうと思い、このプロジェクトをクローンして何度もトライしたのですが、まともに動いてくれませんでした.止む無く自分でデバッグを重ねてローカル環境でなんとか動くようにしてpull requestを出したのですが、なしのつぶてです.それでもせっかくDTDに落とせたのでなんとか実用に持ってこようとしたのですが、

* 公開識別子の宣言が欠落している.
* base属性を特殊化してもドメインの実体定義に反映されない

などバグだらけで、結局手間暇かけて自分ですべてDTDを手修正をすることになりました.

という訳でRELAX NGは広まるだけの基盤をまだ持ち得ていないように思えます.まだみんなが安心して使えないのです.もちろんRELAX NGの世界だけで閉じているならよいかもしれませんが、多くのDITAユーザーはDTDの資産を持っていて、それをわざわざRELX NGに置き換えようとはしないのでしょう.またベースはRELAX NGで書いて、運用ではこれをDTDに変換して使うということも上記のプロジェクトの状況ではとても望める状態ではありません.

また新規のプロジェクトでも、CMSベンダーがサポートしなければRELAX NGは使えないのです.一例がマイクロソフトアーキテクチャーのCMSです.マイクロソフトRELAX NGには決して手を出そうとはしません.

Relax-ng schema support - by Lionel Fourquaux 状態 : 解決済み   解決策: 修正しない

マイクロソフトはパーサーの既定値でDTDのサポートはOFFにし、XML Schemaのサポートに絞っているようです.結果的にこのようなCMSを使用するユーザーはRELAX NGの恩恵をこうむることはできないでしょう.

という訳でDITA 1.3のRELAX NGは良いものであるにもかかわらず、なかなか普及するのは大変なのではないでしょうか?一度触れてみればその良さがわかるのに大変もったいない話だと思います.

早くても次のDITA-OT 2.4で搭載されるようです.
DITA-OT 2.4はミュンヘンで開催されたDITA-OT Day 2016にあわせてリリースされたようです.

DITA Open Toolkit 2.4 Release Notes

でもやはりRELAX NGによる検証はリリースノートには見当たりませんね.