第38回 XML勧告を記述するXMLspecとは何か Page 4

川俣 晶
株式会社ピーデー
2005/10/12

実はとても重要度が高い備考

 さて、いよいよXML勧告の最後に位置する項目を読んでいくことになる。それは、「I Production Notes (Non-Normative)」である。JIS X 4159では「附属書I(参考)文書作成に関する備考」となる。実は、この備考は極めて重要度の高い内容を含んでいることに、いまになってようやく気付いた。この備考は、いかにしてXML勧告の文書を生成したかという技術的かつ実務的な補足説明にすぎない。実際、勧告の著者もそのようにしか考えず、短い無味乾燥な備考を付け加えたのだろう。しかし、XML勧告の文書は、XML技術を全面的に使用して作成されているのである。つまり、「能書きはいいから、XMLが本当に役立っている事例を見せてよ」という要求に対するストレートな答えが、実はXML勧告自体に含まれていたということである。

 まず、短い本文を読んでしまおう。

This Third Edition was encoded in a slightly modified version of the XMLspec DTD, v2.5. The XHTML versions were produced with a combination of the xmlspec.xsl, diffspec.xsl, and REC-xml-3e.xsl XSLT stylesheets.
この仕様の3rd Editionは、XMLspec DTD, v2.5の部分的修正版で符号化された。XHTML版は、XSLTスタイルシートxmlspec.xsldiffspec.xsl、およびREC-xml-3e.xslを組み合わせることによって生成された。

 まず、XMLspec DTDとは、W3Cで使用される文書を作成するためのDTDである。その内容はThe XML Spec Schema and Stylesheetsというページにまとめられている。ちなみに、W3Cで使用されているすべての文書がこのXMLspecによって記述されているわけではないようであるが、これを用いて記述されている文書も多い。例えば、Document Object ModelやXML Schemaの勧告など、XML形式の文書も提供されているケースは、大体これを使用して記述されていると思ってよいと思う。ただし、バージョンは複数ある。まずバージョン番号の違うXMLspecが存在する。XML 1.0勧告3rd Editionは「v2.5の部分的修正版」を使用しているが、本稿を書いている現在はバージョン2.9まで存在する。また、個々の文書ごとにカスタマイズが行われる場合もある。例えば、Document Object Model (DOM) Level 3 Core Specificationで使用されているXMLspecは、バージョン2.2ではあるが、「IDL structures for DOM specifications(DOM仕様のためのIDL構造)」とコメントが付記された項目などが追加されている。それ故に、すべての文書で共通のDTDが使用されているわけではない。

 この3rd Editionでも、「部分的修正版」という言葉で分かるとおり修正が加えられている。ちなみに、上記の本文中からリンクされているDTDと、この勧告のXMLバージョンの文書型宣言が参照するDTDは、同じファイル名ではあるが異なる内容であることに注意が必要である。具体的にいえば、以下のURLが参照するDTDは内容が違うということである。

 ちなみに、調べてみたところ、両者の相違点は2つあった。xml:lang属性の追加と、w3c-doctype属性の列挙可能な項目に「per」の追加である。ちなみに、一部のXMLプロセッサは、xml:lang属性が定義されていないという理由により、オリジナル版のXMLspec DTD, v2.5を処理できない。これに対処するために、修正が行われた可能性が考えられる。

 さて、XMLspecのバージョンが極めて多いことは、完全なる標準化と統一が何をおいても達成すべき目標であるとする「通信」の常識がいかにXML世界の切実な実情に反するかをよく示している。もし、「通信」を意図しないとすれば、硬直的にたった1つのスキーマを受け入れるように要求することは非現実的である。

 ここで、インターネットで公開されるW3Cの文書は通信を意図したものではないのか、という疑問はあり得るだろう。しかし、そのような認識は正しくない。なぜなら、XMLspecによって記述された文書(XMLspec文書)は、通常、HTMLやPDF形式の文書に変換されたうえで「通信」の対象となるからである。HTMLやPDF形式の文書は、それらの標準を厳格に守る必要があり、それを守らねば読者のパソコン上で閲覧できない事態を引き起こす可能性がある。しかし、XMLspec文書が想定する「読者」とは、読みやすい形式に変換するためのスタイルシート変換である。そのスタイルシート変換は、通常、修正されたスキーマとセットで用意されるものである。

 さて、最後の1文を読んでいこう。つまり、XHTML版はXSLTによって生成されたのである。ここで、XSLTスタイルシートが3つ出てくることに注意を払おう。それぞれ、異なる役割を持ったファイルなのである。まず、REC-xml-3e.xslは通常の文書を生成するための使用される。皆さんがXML勧告だと思って読む文書は、ほとんどの場合これに当たる。次に、diffspec.xslは、追加削除などの訂正をすべて含む「Review Version」を生成するために使用する。最後のxmlspec.xslは、この2つのファイルに下請けとして呼び出され、主要な仕事をすべて引き受けるファイルである。

 さて、「Review Version」を見たことがないという方は、Extensible Markup Language (XML) 1.0 (Third Edition) -- Review Versionを一度見ておくと分かりやすいだろう。追加された文章は黄色で、修正された文章は緑で、削除された文章は打ち消し線で表示されており、2nd Editionからどこが変わったのかが一目で分かる。このような文書が生成できるということは、もちろん、元になるXML文書には修正点についての情報がすべて含まれていることを意味する。XSLTスタイルシートがこの情報を切り捨てれば通常版が、活用すれば「Review Version」が生成されることになる。よくXSLTを利用する効能として、PC用のHTML文書と携帯電話用のHTMLを1つのXML文書から生成できる、というような話が語られるが、ここで発揮されている効能は、通常版と「Review Version」の作り分けである。もちろん、前者は「通信」の話題であるが、後者は「通信」の話題ではない。ちなみに、スタイルシートの技術は通信のためのものだと思っている方がいるなら、それは訂正した方がよいだろう。スタイルシートは、本来出力デバイスの種類や変化に対応する技術であって、そこに通信が介在するかどうかは、本質的に重要な意味を持たない。ちなみに、XSLTはSGMLのスタイルシート言語であるDSSSLの流れをくむものであり、DSSSLの歴史はCSSよりもはるかに古い。

 ちなみに、時間があれば、xmlspec.dtdを読んでみるとよいと思う。パラメタ実体や、条件付きセクションにより、どのようにDTDをカスタマイズ可能になっているか、学び取ることができる情報は多いと思う。

最後に

 以上で、XML 1.0勧告をすべて読み切った。

 読者の皆さんもお疲れさまである。

 この連載は、筆者の側としてもいろいろと有意義なものであった。まず、筆者自身の勉強になったこと。ひととおり読んでいたはずなのに、いざ解説しようとすると、思っていたことと書かれたことが違うことに気付かされることがしばしばあった。また、解説のための精読により、JIS X 4159の文章に誤りを発見することもあった。JIS X 4159の正誤表に含まれる修正点のうちのいくつかは、この連載の執筆によって発見されたものである。

 さて、最後に第1回の冒頭に書いた文章の要約をここに示す 。

  もちろん、現実の世界は正しいことが常に通るとは限らない。時として、間違った仕様のプログラムを動作させねばならないこともある。しかし、それでも何が正しいのかを把握しておく必要がある。XMLは情報交換にも使用されるので、ある日、予想もしない相手にXML文書を送る事態が起こるかもしれない。そういうときに、送ってよい範囲を的確に判断するためには、正しい仕様とは何か、を把握しておく必要がある。

 そう。ここでは「情報交換」という言葉が重要な意味を持って出てくる。「情報交換」とはつまり「通信」のことであり、筆者自身が「通信」の呪縛にとらわれていたことがよく分かる。しかし、XML勧告を最後まで読み切ったことにより、この呪縛から解放されることができた。XMLspecは、それだけの力のある価値あるスキーマであり、それを明確に参照しているXML勧告は、やはり優れた文書であることがよく分かった。もちろん、XML勧告にはいくつもの問題点が存在することがすでに分かっているが、それを差し引いても読む価値のある文章であったといえるだろう。(連載完)

4/4

 Index
やさしく読む「XML 1.0勧告」 第38回
XML勧告を記述するXMLspecとは何か
  Page 1
・連載最終回の内容
・文字符号化の自動検出(続き)
  Page 2
・外部の符号化情報が存在するときの優先順位
  Page 3
・2つの名簿
Page 4
・実はとても重要度が高い備考
・最後に


連載 やさしく読む「XML 1.0勧告」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間