Extensible Markup Language

提供: miniwiki
2018/9/23/ (日) 12:53時点におけるAdmin (トーク | 投稿記録)による版 (XMLの構文と整形式XML文書)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索
Extensible Markup Language
拡張子 .xml
MIMEタイプ application/xml
text/xml (非推奨)
UTI public.xml
開発者 World Wide Web Consortium (W3C)
初版 1998年
種別 マークアップ言語
派生元 Standard Generalized Markup Language (SGML)
拡張 XHTMLDocBookRSSebXML、 ...
国際標準 1.0 (Fifth Edition) 1.1 (Second Edition)

Extensible Markup Language(エクステンシブル マークアップ ランゲージ)は、基本的な構文規則を共通とすることで、任意の用途向けの言語に拡張することを容易としたことが特徴のマークアップ言語の総称である。一般的にXML(エックスエムエル)と略称で呼ばれる。JISによる訳語は「拡張可能なマーク付け言語」。

SGMLからの移行を目的として開発された。文法はSGMLの構文解析器と互換性を保つようにSGMLのサブセットに定められシンプルになり、機能はSGMLに無いものが追加されている。

XML の仕様は、World Wide Web Consortium (W3C) により策定・勧告されている。1998年2月に XML 1.0 が勧告された。2010年4月現在、XML 1.0 と XML 1.1 の2つのバージョンが勧告されている(#バージョン)。

ちなみに、「eXtensible Markup Language の略である」と書かれることがあるが、これは間違いであり、XExの発音を表している[1]

概要

基礎的概念と利用目的

XMLは、個別の目的に応じたマークアップ言語群を創るために汎用的に使える。マークアップ言語とは、コンピュータ言語の一種で(広義の「コンピュータ言語」であり、プログラミング言語ではないデータ記述言語などを含む意味)あるが、詳細は「マークアップ言語」の記事を参照のこと。XMLは、その「入子状にタグで囲まれたもの」という構文を共通としたことで、拡張が容易であるとして「extensible」と主張している。

しばしば「あらゆる目的に使える」などと主張されるが、基本的に入れ子構造(木構造)であって、より入り組んだネットワーク構造(グラフ構造)を直接扱うことは不可能である(XLinkなどの提案はあるが)。

XMLの最も重要な目的は、異なる情報システムの間で、特にインターネットを介して、構造化された文書や構造化されたデータの共有を、容易にすることである[2]。XMLを使うと、文書を構造化して記述できるし、コンピュータのデータを直列化 (シリアライズ) できる。データを直列化する用途でXMLを使う際には、XMLは、JavaScript Object Notation (JSON) やYAMLなどの、テキストを基にした他の直列化言語と比較衡量できる[注 1]

XMLを基盤とするマークアップ言語とスキーマ言語

XMLで文書の論理的構造を規定する制約を追加することによって、XMLを適用したマークアップ言語を実装できる。XMLを適用したマークアップ言語は非常に多く存在している (#XMLの応用の節を参照)。例えば、Extensible HyperText Markup Language (XHTML)[注 2]DocBookRSSMathematical Markup Language (MathML)、ebXMLScalable Vector Graphics (SVG)、MusicXML などがある。さらにXMLは、そういった個別のXMLについての構文規則を示すためのスキーマ言語も用意している。スキーマ自体もXMLのXML Schemaの他、XMLではない記法でとても簡潔に大変わかりやすく書ける、Compact Syntaxも用意されているRELAX NGもある。

オープンな仕様

XMLは、同じく汎用的に使えるマークアップ言語である Standard Generalized Markup Language (SGML) の、簡素化されたサブセットとして、人間にとっても比較的判読しやすいように設計された (#歴史を参照)。XMLの仕様は、XMLワーキンググループなどにより設計が行われ、World Wide Web Consortium (W3C) により勧告 (策定) されている。XMLは無償で使えるオープン標準の技術である。XML仕様のW3C勧告ではXMLの文法とXMLプロセサ (XMLパーサ、XML文書の構文解析器) のための要件を定めている。1998年2月に XML 1.0 が勧告され、2004年2月に XML 1.1 が勧告された(#バージョン参照)。

正当性水準について

XML文書の正当性の水準には、整形式XML文書と妥当なXML文書の、2つの水準がある (#整形式XML文書と妥当なXML文書を参照)。XML文書のマークアップ規則に従って記述されていることだけが問題とされる文脈で、スキーマ言語を使わずに、XML文書のマークアップ規則に従って記述された文書を、「整形式XML文書」 (well-formed XML document) という (#XMLの構文と整形式XML文書を参照)。さらに、XML文書をより厳密に構造化した文書やデータとして扱いたい場合は、XML文書の構造をスキーマ言語によって定義することができ、XMLプロセサでそのXML文書(XMLインスタンス)に対してその文書構造に従っていることを検証する(妥当性検証を行う)というように、XML技術を使うこともできる (#XML文書の論理的構造と妥当なXML文書を参照)。 XML文書に対して妥当性検証を行うことにより、従来アプリケーションソフトウェアで行ってきた、XML文書の構造の検査や、XML文書に含まれるデータに対するデータ型のチェックや値の範囲のチェックが、可能となる。スキーマ言語としては Document Type Definition (DTD、文書型定義)、W3C XML SchemaRELAX NG文書スキーマ定義言語: DSDL)などがある。XML文書の構造がスキーマ言語によって定義され、XML文書の妥当性を検証するソフトウェアによって妥当性が検証されたXML文書のことを「妥当なXML文書」 (valid XML document) という。整形式XML文書は、妥当なXML文書である場合と、妥当なXML文書ではない場合とがある。スキーマ言語を採用して妥当性検証を行う方法でXMLを使うこともできるし、スキーマ言語を採用せず妥当性検証を行わないで手軽にXMLを使うこともできる。

幅広い人間言語のサポート

XML勧告では、XMLプロセサがサポートすべき文字符号化方式文字コード)としてUTF-8UTF-16 (Unicode) を定めているため、英語以外の言語も扱いやすくなっている (#多言語環境で使うを参照)。また、UTF-8とUTF-16以外の文字コード(UCS-4EUC-JPShift_JISEBCDICなど)を用いることも可能である[注 3]

補完技術

XMLだけでは最低限の書式しか決められていないため、XMLの力を引き出す各種の関連技術が別途標準化されている (#XMLの拡張および#XML文書をプログラムで処理する#XML文書を視覚的に表示する#XMLインフォメーションセットを参照)。 以下に挙げるものをはじめとして、現在も多くの関連技術の標準化作業が行われている。

XMLの普及とXMLへの批評

XMLは現在、広く普及している技術であるが、その技術的な有用性などについて、肯定的に評価する人々が多い一方で、批判的に評価する人々も多い (#XMLに対する支持と批判を参照)。

整形式XML文書と妥当なXML文書

XML文書の正当性の水準には、整形式XML文書と妥当なXML文書の、2つの水準がある。なおXML文書に対して、整形式XML文書としての検査のみを行うXMLプロセサを非検証XMLプロセサといい、整形式XML文書としての検査に加えて妥当なXML文書としての検査を行うXMLプロセサを検証XMLプロセサという。

整形式XML文書
整形式XML文書 (well-formed XML document) は、XMLの構文の規則のすべてに準拠している。例えば、文書中のある要素が開始タグが有るが対応する終了タグが欠落している場合、その文書は整形式 (well-formed) ではない。整形式ではない文書はXML文書とはみなされない。非検証XMLプロセサおよび検証XMLプロセサは、整形式ではない文書を処理することはできない (処理を試みるとエラーになる)。
妥当なXML文書
妥当なXML文書 (valid XML document) は、整形式XML文書としての条件を満たしていることに加えて、文書の論理的構造を規定する何らかの規則に準拠している。このような規則は、RELAX NGXML SchemaDocument Type Definition (DTD) などのスキーマ言語で定義されたスキーマで定める。例えば、あるXML文書がスキーマに定義されていない要素 (タグ) を含んでいた場合、検証XMLプロセサは、そのXML文書を処理することはできない。検証XMLプロセサによって検証されたXML文書は、妥当 (valid) であると位置づけられる。なお、妥当な文書であっても、非検証XMLプロセサでは実体の定義を確認しないため、仕様で定められている実体参照(<、>など)以外の私的な実体参照を用いている場合、非検証XMLプロセサは当該実体を参照できず致命的なエラーとなる。

XML文書の論理的構造と妥当なXML文書

妥当なXML文書について詳しく説明する。

XMLでは、要素に名前を付けることができ、階層構造をとることができ、スキーマ言語 (Document Type Definition など) により用途に沿うように定義されたスキーマを使うことで要素と属性の意味を公開し説明することができる。XMLのこうした特徴により、目的に応じたXMLに準拠したマークアップ言語を創るための、構文的な基礎が成り立っている。

スキーマは、制約の集合を記述することにより、XML文書の構文上の規則を単に補足するのみである。スキーマは、多くの場合、要素と属性の名前を限定し、各要素が内容とするものの階層構造を規定し、属性の内容を規定する。例えば、「誕生日」という名前の要素では、「月」という名前の一つの要素と「日」という名前の一つの要素をもつことができ、「月」要素と「日」要素のそれぞれは文字列データのみをもつことができる。

スキーマに定義された制約には、データ型の割り当てを含むことができる場合がある。 データ型を割り当てることにより、データ型が割り当てられた情報がどのように処理できるかを、規定することができる。 例えば、「月」要素の文字列データは、そのXML文書で採用したスキーマ言語の機能に準拠して、「1」から「12」までの数字のみが妥当であるという形で、定義することができる可能性がある。ここでスキーマ言語の (データ型に関する) 機能とは、おそらく特定の方法で形式にしたがって記述しなければならないということだけでなく、別のデータ型の値であるかのように処理されることを未然に防ぐことを、意味する。

何らかのスキーマに準拠したXML文書は、整形式であるということに加えて、妥当 (valid) であるということができる。

XMLのスキーマは、XMLの文書型 (文書の種類、文書の論理的構造) を記述したものである。 多くの場合スキーマは、その文書の構造と内容に関する制約という形で表現される。XMLのスキーマは、XML仕様で規定されている、整形式XML文書としての基本的な制約に加え、それ以上の制約をXML文書に課すことができる。XMLのスキーマ言語は、標準規格のものもプロプライエタリなものも含めて、こうしたスキーマを表現するという目的のもと、数多く存在している。いくつかのスキーマ言語では、スキーマ自身をXML文書として記述する。

スキーマ言語の記述能力はスキーマ言語ごとにさまざまである。例えばスキーマ言語の一つである Document Type Definition (DTD) では、XML文書がとるべき構造の主な規則として、そのDTDに準拠したXML文書で使うことができる要素の名前、要素の内容モデル、要素で指定できる属性の名前、属性の値のデータ型を、記述することができる[3]

なお、要素の内容モデルとは、要素の内容に出現可能な要素やデータとその順番、および要素の出現回数を規定したもののことをいう[4]

Standard Generalized Markup Language (SGML) やXMLなどの汎用的なデータ記述言語が世に出る前は、ソフトウェア設計者は、複数のプログラムの間でデータの受け渡しをするために、自分自身でファイルフォーマットを定義するか、ちょっとしたコンピュータ言語を定義しなければならなかった。このため受け渡しするデータの詳細な仕様やその他の文書を書かなければならなかったし、文書の書き手を別途に確保しなければならないこともあった。

XMLが一定の構造をもち厳密な構文解析の規則をもつことで、ソフトウェア設計者は構文解析を標準的なソフトウェアツール (妥当性検証器、バリデータ) に任せることができる。そしてXMLには、用途に特有の言語を開発するための一般的な、データモデル指向の枠組みがある。 このためソフトウェア開発者は、比較的高水準の抽象度において、自分たちが扱うデータの規則の開発に専念するだけでよい。

XML文書をスキーマに照らして妥当性検証を行うための、十分にテストされたツールが、数多く存在している。XML文書をスキーマに照らして妥当性検証を行うためのツールを、妥当性検証器 (バリデータ) という。妥当性検証器は、スキーマに表現された制約にXML文書が準拠しているかについて、自動的に妥当性検証を行う。 妥当性検証器は、XMLプロセサ (XMLパーサ) に含まれていることもあれば、XMLプロセサとは別に提供されていることもある。

これまでに述べたスキーマの使い方とは別の使い方も存在する。 例えば、XMLエディタは、XML文書の編集を支援するためにスキーマを使うことができる。こうしたXMLエディタでは、妥当な要素名や妥当な属性名を提示することなどができる。

Document Type Definition (DTD)

XMLのための最も歴史の古いスキーマ言語は Document Type Definition (DTD、文書型定義) である。DTDは、XMLの前身であるSGMLから引き継がれた。DTDは XML 1.0 標準に含められているため、ほとんどあらゆるXMLプロセサがDTDを扱うことができる。しかし2007年現在ではDTDを使うことは限定的な範囲にとどまっているようである。その理由は次のとおりである。

  • DTDではXMLで新しく開発された機能を使うことができない。特にXML名前空間を扱えないことが厳しい。
  • DTDは表現力が乏しい。DTDではいくつかの形式的な視点からXML文書を扱うことができない。
  • DTDによるスキーマはXMLではない独自の構文で記述する。この構文は、XMLの前身であるSGMLから引き継いでいるという、経緯がある。XML 1.0 の制定当時はDTD以外のスキーマ言語は存在しなかった。

DTDは現在も多くの用途で使われている。その理由は、一定の人々にとってはDTDは他の新しいスキーマ言語よりも読みやすく書きやすいと考えられているからである。

XML Schema

XML Schema は、World Wide Web Consortium (W3C) により開発された、DTDの後継となる新しいスキーマ言語である。 非公式には、XSDと呼ばれることもある。XSDは、XML Schema のインスタンス (スキーマ) を意味する "XML Schema Definition" の頭字語である。

XML Schema は、XMLによるマークアップ言語のスキーマの記述能力において、DTDと比べて非常に強力である。XML Schema は、豊富なデータ型を扱うことができるスキーマ言語である。XML文書の論理的構造について、DTDより詳細な制約を記述することができる。そしてDTDより詳細な妥当性検証の枠組みのもとで、妥当性検証が行われる。

XML Schema はまた、XML Schema によるスキーマ自体を、XMLに準拠した形式を使って記述する。XML Schema のスキーマ自体がXMLに準拠することで、スキーマを編集したりスキーマに何らかの処理を行うために、普通のXMLツールを使うことができるようになる。

ただし、XML Schema の妥当性検証器を実装する作業には、単にXML文書を読むことができる能力よりも、非常に多くの知識と能力を必要とする。

XML Schema に対しては賛否両論がある。XML Schema に対する批判の一部を示す。

  • XML Schema の仕様は非常に膨大な分量がある。そのため XML Schema を理解することは難しい。またそのため XML Schema の妥当性検証器を実装することも難しい。
  • XML Schema でスキーマを記述する際、XMLに準拠した構文で記述する (記述しなければならない) のは、冗長である。このことが XML Schema のスキーマを理解することやスキーマを記述することを、DTDよりしんどい作業にしてしまっている。
  • XML文書の構文解析をした後に行う、XML Schema のスキーマによる妥当性検証は、費用が高くつく可能性がある。特にサイズの大きいXML文書の妥当性検証を行う際には、深刻な問題になる可能性がある。
  • XML Schema のデータモデリング能力は非常に限られている。属性の内容によってその要素の内容モデルを変更することはできない。
  • XML Schema における型派生モデルは、非常に限られた能力しかない。特に拡張による派生は、かなり使いにくい。
  • データベースと連携するためのデータ転送機能は、不可解な考え方によって実現されている。nillability (SQLデータベース用語でいうNULLに相当する状態をとることが可能であるという特性) は備えているが、出版業界の要件は満たしていない。
  • key/keyref/uniqueness の機構は、データ型を考慮していない。
  • スキーマ検証後インフォメーションセット (PSVI、Post Schema Validation Infoset) の概念は、標準のXML表現やアプリケーションプログラミングインタフェース (API) をもたない。このため、妥当性の再検証を行わない場合、ベンダ非依存の考え方に反する (#インフォメーションセットへの追加情報を参照)。

RELAX NG

RELAX NGは人気のあるもう一つの新しいスキーマ言語である。最初にOASIS (構造化情報標準促進協会) で仕様が策定された。RELAX NG は、現在ではISO (国際標準化機構) の国際標準となっている。ISOでは、文書スキーマ定義言語 (DSDL) の一部分を構成する仕様として位置づけられている。

RELAX NGのスキーマの記述方法は、2つの形式がある。XMLに準拠した構文 (XML構文、xml syntax) と、XMLに準拠しない短縮構文 (compact syntax) である。短縮構文は、読みやくすることとより書きやすくすることを目指している。ただし、短縮構文で記述されたスキーマをXML構文のスキーマに変換する方法と、その逆の変換を行う方法は、しっかり定義されているので、ジェームズ・クラークが開発した Trang conversion tool を使えば、標準のXMLツールを使う利便を享受することができる。

RELAX NGはXML Schemaよりも簡潔なスキーマ定義と簡潔な妥当性検証の枠組みを、備えている。そのためRELAX NGは、XML Schema と比べて、使いやすく、またRELAX NGの妥当性検証器を実装することも容易になっている。

RELAX NGもまた、データ型フレームワークプラグインを使う能力を備えている。 RELAX NG でスキーマを記述する人は、例えば、XML文書でXML Schemaのデータ型の定義に適合させたいと考えるかもしれない。 そして RELAX NG では、データ型フレームワークプラグインを使うことにより可能となっている。

ISO 文書スキーマ定義言語

ISO 文書スキーマ定義言語 (DSDL; Document Schema Description Languages) 標準は、小規模なスキーマ言語の広範なセットを共に提供する。DSDLを構成する複数の仕様のそれぞれが、特定の問題に対応するために特化されている。DSDLはRELAX NGのXML構文と短縮構文、スキマトロン、データ型ライブラリ言語、文字レパートリ記述言語、文書スキーマ再命名言語、名前空間に基づく検証委譲言語 (NVDL) を、含んでいる。DSDLスキーマ言語群はXML Schemasを支持するベンダの支援は2007年の時点ではまだ受けていない。DSDLは出版のための機能が欠如していることに対する、出版業界の一定の草の根の反応でもある。

XML文書を検証する過程でXMLインフォメーションセットを変更することについて

いくつかのスキーマ言語では、特定のXML文書の構造を記述する能力に加えて、個々のXML文書をその特定のXML文書構造に適合するように変換する機能も、限定的ながら備えている。

DTDとXML Schemaはこの変換機能を備えている。 DTDと XML Schema では、XML文書に属性の既定値を与えることができる。RELAX NGとスキマトロンは、意図的にこの機能を外している。 例えば、XMLインフォメーションセットを正確に扱うことが、RELAX NGとスキマトロンの仕様策定時に変換機能を外した理由の一つである。

XML文書を視覚的に表示する

XML文書を視覚的に表示するための方法を説明する。

XML文書は、その文書の内容をどのように視覚的に表示するかという情報を、含んでいない。 Cascading Style Sheets (CSS) や Extensible Stylesheet Language (XSL) のようなXMLのためのスタイルシート言語を使うのでなければ、ほとんどのウェブブラウザは普通のXML文書を生のXMLテキストとして描画する。いくつかのウェブブラウザは「ハンドル」をつけて表示する (例えば、余白に + と - の符号を表示する)。ハンドルを使うことにより、XML文書構造の部分木を、マウスクリックで展開したり折りたたんだりすることができる。

CSSを使ってウェブブラウザでXML文書を描画するためには、XML文書は次のような要領でスタイルシートへの参照を含めなければならない (XMLの処理命令を使ってスタイルシートを使って描画する旨を指定している)。

<?xml-stylesheet type="text/css" href="myStyleSheet.css"?>

この方法は、HTML文書におけるスタイルシート指定の方法とは異なる。HTML文書では <link/> 要素を使ってスタイルシートを指定する。

XML文書を視覚的に表示するために、Extensible Stylesheet Language(XSL、拡張可能なスタイルシート言語)を使うこともできる。XSLを使う場合は、XML文書をXHTML/HTML文書の構造に変換するか、もしくはウェブブラウザで視覚的に表示することができる他の文書の構造に変換する。

クライアント側でXSL Transformations (XSLT) のスタイルシートを指定するためには、XML文書に次のようにXSLTスタイルシートへの参照を含めることが、必要である(XMLの処理命令を使って実現している)。

<?xml-stylesheet type="text/xsl" href="myTransform.xslt"?>

クライアント側のXSLTスタイルシート処理機能は、現在では多くのウェブブラウザが備えている。

別の方法として、このようなエンドユーザのウェブブラウザの能力に依存する方法を採らずに、サーバ側でXSLを使ってXML文書を視覚化可能な形式に変換する方法も、行われている。エンドユーザは、「舞台の裏側で」何が行われているかを、意識する必要はない。エンドユーザが目にするものは、よく整形され視覚化された文書だけである。

XMLの拡張

XMLを拡張する技術を説明する。

XML Path Language (XPath)
XML Path Language (XPath) を使うと、XML文書の個々の部分を参照することができるようになる。XPathは、XSLTXSL-FOXQuery などの他の技術に対して、XML文書のデータに対するランダムアクセスを行う機能を、提供する。XPathで記述された式は、XML文書を構成するXML要素、属性、処理命令、コメントなどの内側の、テキスト、データ、値を参照することができる。XPathの式は、要素の名前と属性の名前にアクセスすることもできる。Xpathは、妥当なXML文書に対しても整形式XML文書に対しても使うことができる。また名前空間が定義されたXML文書に対しても、名前空間が定義されていないXML文書に対しても使うことができる。
XML Inclusions (XInclude)
XML Inclusions (XInclude) の仕様は、XML文書内に外部ファイルの全内容もしくは外部ファイルの一部の内容を含める機能を、定義している。XML文書においてXIncludeの処理が終了すると、XInclude処理終了後のXMLインフォメーションセットにはXIncludeの要素はなく、XIncludeの要素の代わりにそこに外部の文書もしくは文書の一部の複製が、最終的なインフォメーションセットに含まれている。XIncludeでは、外部文書の一部をXML文書に含める際に、外部文書の複製対象の領域を参照するためにXPathを使っている。
XQuery
XQueryは、XMLにおいて、関係データベースにとってのSQLPL/SQLに相当する、問い合わせ言語としての機能を提供する。XML文書にアクセスし、XML文書を操作(編集)し、その結果をXML文書の形で返す。
XML名前空間 (Namespaces in XML)
XML名前空間 (Namespaces in XML) を使うことで、同一のXML文書内で異なる複数のボキャブラリ(スキーマ)に由来する要素と属性を、名前の衝突を発生させることなく、含めることができる。後述する。
XML Signature
XML Signature の仕様は、XML文書の内容に対して電子署名を生成するための構文と処理規則を定義する。
XML Encryption
XML Encryption の仕様は、XML文書の内容に対して暗号化を行うための構文と処理規則を定義する。
XML Pointer Language (XPointer)
XML Pointer Language (XPointer) は、XMLに基づいたインターネットメディアのコンポーネントを指し示す体系である。

MIMEタイプ

XML文書はさまざまなMIMEタイプで配布することができる。RFC 3023 は、"application/xml" および "text/xml" のMIMEタイプを定義する。 "application/xml" と "text/xml" のMIMEタイプは、そのデータがXML文書の形式をとっているということのみを述べているだけであり、そのXML文書の論理的構造については何も述べていない。 "text/xml" を使うことに対しては、符号化に関する問題が生じる可能性があるとの批判があり、現在では非推奨とされている[5]。RFC 3023 では、加えて、XML文書を "application/" で始まり、"+xml" で終わるMIMEタイプで配布することを勧めている。例えば、AtomのXMLデータに対しては、"application/atom+xml" のMIMEタイプで配布するのである。

XML名前空間

XML名前空間 (Namespaces in XML) は、一つXML文書内で、異なる複数のボキャブラリ(スキーマ)に由来する要素と属性を、名前の衝突を発生させることなく、含めることができるようにするための仕様である。World Wide Web Consortium (W3C) から、1999年1月14日に Namespaces in XML 1.0 が勧告された。XML文書に異なる複数のボキャブラリに由来する要素と属性を含める場合、ボキャブラリのそれぞれに名前空間をわりあてることにより、要素名の衝突と属性名の衝突の問題を、解決することができる。

一つの名前空間において定義された要素の名前は、一意でなければならない。

顧客への参照と注文された商品への参照を含む簡単なXML文書の例を考える。顧客要素と商品要素は、ともに「識別番号」という名前の子要素をもつことがあるだろう。識別番号要素への参照は、顧客要素の子要素の識別番号要素も商品要素の子要素の識別番号要素も同じ要素名をもつので、あいまいである。しかし2つのボキャブラリを区別する2つの名前空間のもとで識別番号要素を使う場合、顧客要素の子要素の識別番号要素と商品要素の子要素の識別番号要素は意味的に明確に異なる2種類の要素となる。

名前空間の宣言

名前空間は、XMLの予約属性である xmlns を使って宣言される。xmlns属性の属性値はIRI (Internationalized Resource Identifier) である必要があり、通常はURI (Uniform Resource Identifier) である。

例を示す。

xmlns="http://www.w3.org/1999/xhtml"

この例の "http://www.w3.org/1999/xhtml" を名前空間名という。ここで注意すべきこととしては、名前空間の宣言で記述されたURIは、実際にインターネット上の住所として解釈されるわけではないということである(自由に考えよう、URIほど便利なものが必ずインターネットのアドレスをささなければいけないなどと、誰が決めたのか)。例えば、http://www.w3.org/1999/xhtml自体には何のコードもない。このURIの文書では、人間の読者に対してXHTMLについて簡単に説明しているだけである。 ("http://www.w3.org/1999/xhtml" のような) URIを名前空間の識別子として使うことで、("xhtml" のような)単純な文字列を名前空間名として使うよりも、異なる名前空間が意図せずして同じ名前空間名を使ってしまう危険性を低減する。名前空間の識別子は、ウェブの住所(アドレス)の慣習にしたがう必要はない。

名前空間の宣言は短い接頭辞を含むことができる。この名前空間接頭辞を使うことで、異なるボキャブラリに由来する要素と属性を識別することができる。

名前空間接頭辞を使う例を示す。

xmlns:xhtml="http://www.w3.org/1999/xhtml"

XML名前空間を使ったXML文書の例を示す。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="http://www.w3.org/1999/xhtml">
 <xsl:template match="/社員名簿">
  <html>
   <head>
    <title>XML文書をXHTML文書に変換する例</title>
   </head>
   <body>
    <h1>社員名簿</h1>
    <ul> 
     <xsl:apply-templates select="社員">
      <xsl:sort select="姓"/>
     </xsl:apply-templates>
    </ul>
   </body>
  </html>        
 </xsl:template>
 <xsl:template match="社員">
  <li>
   <xsl:value-of select="姓"/> <xsl:value-of select="名"/>
  </li>        
 </xsl:template>
</xsl:stylesheet>

このXML文書は、次の2つの名前空間のボキャブラリから構成されている。

  • XSLTのボキャブラリ: xslの名前空間接頭辞をもち、名前空間名は "http://www.w3.org/1999/XSL/Transform"。
  • XHTMLのボキャブラリ: 名前空間接頭辞をもたないデフォルトの名前空間であり、名前空間名は "http://www.w3.org/1999/xhtml"。

なおこのXML文書は、あるXML文書をXHTML文書に変換するXSLTスタイルシートである。

XML名前空間を使う場合、そのXML名前空間のボキャブラリが定義されていることが必要であるわけではない。しかしXML文書でXML名前空間を使う場合に、そのXML名前空間のボキャブラリを定義しておくことは、そのXML名前空間のURIのもとで正しい文書構造を定義しているスキーマに関連づけるために、行われることが多い。

XML文書をプログラムで処理する

プログラマアプリケーションソフトウェアがXML文書を処理する手段としては、これまで次に示す3つの技法が伝統的に使われてきた。なお、この節の説明で使うAPIとはアプリケーションプログラミングインタフェースのことをさす。

さらに、近年に開発され使われるようになった、XML文書を処理する技法を示す。

  • Pull Parsing
  • データバインディング

Simple API for XML (SAX)

Simple API for XML (SAX) は、字句解析を行いイベント駆動で処理を行う API である。SAXを使うとXML文書は文書の最初から順次読み込まれ、その内容はプログラマが実装したハンドラオブジェクトの様々なメソッドへのコールバックとして報告される。SAXを使ったXML文書処理は高速であり、少ないコンピュータ資源を効率的に使って非常にサイズの大きいXML文書を処理することが可能である。

SAXを使うことに伴う問題は、XML文書に対してランダムアクセスを行って情報を取り出すことが難しいことである。そのため、SAXを使うに際し、プログラマはXML文書のどの部分が現在処理対象となっているか把握する為の機構を実装しなければならない。

SAXは、処理対象となるXML文書中のある種類の情報がどの部分に出現するかに依らず、常に同じように処理されると保証できる場合に用いるのが望ましい。

Document Object Model (DOM)

Document Object Model (DOM) は、インタフェース指向のAPIであり、XML文書のおのおのの部分を表現する節オブジェクトの集まりからなる木構造であるかのように、XML文書全体に対してナビゲーションを行うことを想定している。DOMでは、XML文書に対してランダムアクセスを行って情報を取り出すことが、簡単にできる。

DOMにおけるXML文書全体に相当する Document オブジェクトは、XML文書をXMLプロセサが処理することにより生成することもできるし、プログラマがプログラミングすることによって生成することもできる。DOMにおける Node (節) のさまざまな型のデータ型は、DOM仕様においては抽象的にインタフェースとして定義されている。Node のデータ型の実装は、プログラミング言語に固有の言語バインディングを提供する。 DOMの実装は、サイズの大きいXML文書を扱う場合はたくさんのメモリを使う。なぜならDOMの実装は、一般的にはXML文書全体からオブジェクトの木構造を構築してメモリにロード(展開)し、その後にDOMを介した処理をできるようにしているからである。

Javaでは、標準ライブラリを構成するいくつかのパッケージでDOMが実装されており、Javaのプログラマは標準ライブラリのDOMを使うことができる。DOMの仕様は、World Wide Web Consortium (W3C) で策定されているため、DOMで中核をなす NodeDocument などのインタフェースや、直列化 (出力) などの機能を提供するためのインタフェースはパッケージ org.w3c.dom.* に収められている。 [6]

変換エンジンとフィルタ

Extensible Stylesheet Language (XSL) 技術におけるフィルタは、XML文書に対して、視覚的に出力したり印刷出力できるよう変換処理を行うことができる。

XSL Formatting Objects (XSL-FO)
XSL Formatting Objects (XSL-FO) は、World Wide Web Consortium (W3C) が策定した、XMLに準拠した宣言的なページ整形 (組版) 言語である。XSL-FO処理系を使うと、XSL-FO文書を他の非XML形式 (PDFなど) に変換出力することができる。
XSL Transformations (XSLT)
XSL Transformations (XSLT)は、W3Cが策定した、XMLに準拠した宣言的な文書変換言語である。XSLT処理系を使うと、XSLTスタイルシートを指示書として、XML文書として表現されたあるデータの木構造を、別の木構造に変換することができる。変換後の文書として、XML (例えば、XSL-FO文書やXHTML文書など)、HTMLプレーンテキストなどの形式にすることができる。またXSLT処理系によってはこの他の形式に変換できるものもある。
XQuery
XQueryは、W3Cが策定した、XML文書に対する、問い合わせ、構築、変換を行うための、コンピュータ言語 (問い合わせ言語) である。
XML Path Language (XPath)
XML Path Language (XPath) は、W3Cが策定した、XML文書中のデータを取得するための、DOMに似たノードの集まりからなる木構造をデータモデルとするパス式言語である。XSLTおよびXQueryの技術はXPathを使って実現されている。XPathの実装はまた、便利な関数ライブラリを含んでおり使うことができる。

Pull Parsing

Pull Parsing は、XML文書を、最初から順番に読み込み、Iterator パターンデザインパターンを使って項目 (item) の一連の流れとして扱う、近年に徐々に普及してきた技法である[7][8]。 Pull Parsing の技法により、再帰下降パーサを実装することができる。 再帰下降パーサでは、パースを実行するプログラムは、パースの対象となるXML文書の構造と似ている。 そしてパースの中間結果を取得することができる。

パースの中間結果を、パースを実行するメソッド内の局所変数 (ローカル変数) として使うことができる。 あるいは、低水準のメソッドの引数として渡したり、高水準のメソッドへの戻り値として返すことができる。 Pull Parsing の技法を提供する実装としては次のものがある。

例えば、JavaのStAXフレームワークでは、本質的な「反復子」 (イテレータ) を作成して使うことができる。

Pull Parsing で作成される「反復子」はXML文書中のさまざまな要素、属性、データを順番に訪れる。 「反復子」を使うプログラムは、処理中に現在の項目 (例えば、要素の開始、要素の終了、テキスト) を調べ、その特性 (例えば、要素の名前、名前空間、属性値、テキスト内容) を調査する。 そして反復子に「次の」項目へ移動するよう指示することもできる。 プログラムは、このようにXML文書を走査するようにして、文書から情報を取り出すことができる。

Pull Parsing の技法の特筆すべき長所は、XML文書をパースするDOMの技法と比べて非常に高速であり、メモリ使用が非常に少ないことである。 もう一つの長所は、再帰下降の手法は、パースを実行するプログラム内で、データを型づけされた変数として保持することに適していることである。 SAXでは、例えば、プログラマが自分で処理中の要素の祖先となる要素群を格納するスタック内に中間データを保持するコードをプログラミングする必要があることが多い。 これに対し、Pull Parsing の技法を使ってXML文書を処理するプログラムは、SAXを使うプログラムよりも、非常に単純で理解し易く保守が容易になることが多い。

データバインディング

XML文書を処理するもう一つのAPIは、XMLデータバインディングであり、XMLデータバインディングを使うと、XML文書を、その文書型に対応した、強く型づけされたプログラミング言語データ構造 (プログラムソースコード) を、生成することができる。インタフェース指向のDOMとは対照的な手法である。データバインディングの実現例を次に示す。

XMLに準拠したアプリケーションソフトウェアとエディタ

OpenOffice.orgAbiWord、およびアップルiWorkなどのアプリケーションソフトウェアのネイティブファイルフォーマットは、XMLである。

従前、オフィススイートには各ソフトの特有のバイナリ形式としてデータが保存されていた。しかしながらこれでは互換性が低く、様々な情報をデータベースとして利用するオフィススイートでは不都合が生じていた。 そのため、データの標準化を進めて互換性を高めるため、各オフィススイートはXML形式でデータを出力する機能や、そもそも標準保存形式をXMLベースとするものが増えてきた。

OpenOffice.orgはXMLベースの保存形式を当初より標準としていた(英語版バージョン1.0は2002年5月1日リリース)。また、OpenOffice.orgに限らず、どのオフィススイートでも利用できるOpenDocument形式が国際標準化機構(ISO)によって標準規格として認定されている。

もう一つのオフィススイート用の保存形式である Office Open XML も、ISOにより標準規格として認定されている。

マイクロソフトMicrosoft Office では Microsoft Office XP のバージョンからXML形式への対応を始め、Microsoft Office 2003 で独自の定義の XML Schema がサポートされるに至った。 Microsoft Office 2007 ではデフォルトの保存方式がXMLとなった(Office Open XML)。Microsoft Office 2007 のいくつかの機能では、XMLファイルを利用者が指定したスキーマ (ただしDTDではない) に沿って編集することができるようになっている。 またマイクロソフトは、Microsoft Office 2003 のためのファイルフォーマット互換性キットを公開している。 この互換性キットを使うことにより、以前のバージョンの Microsoft Office で作成された文書をXMLに準拠した新しいフォーマットで保存することができる。

エディタについては現在、多くのXMLエディタが使えるようになっている。

XMLインフォメーションセット

XMLインフォメーションセット (XML Information Set、インフォセット、Infoset) は、XML文書の抽象的なデータモデルを「情報項目」 (information item) の集合を使って規定している。 World Wide Web Consortium (W3C) から、2001年10月24日にXMLインフォメーションセット仕様が勧告された。 XMLインフォメーションセットの仕様における定義は、整形式XML文書内の情報を参照する必要がある他の仕様において使われることが想定されている。

一つのXML文書には、そのXML文書が整形式でありかつXML名前空間の制約に準拠している場合、一つのXMLインフォメーションセットがある。 XMLインフォメーションセットを構成するためには、そのXML文書が妥当なXML文書であることは、必須要件ではない。

一つのXMLインフォメーションセットには、次に示す11種類の情報項目がある。

  • 文書情報項目
  • 要素情報項目
  • 属性情報項目
  • 処理命令情報項目
  • 展開されなかった実体情報項目
  • 文字情報項目
  • コメント情報項目
  • 文書型宣言情報項目
  • 解析対象外実体情報項目
  • 記法情報項目
  • 名前空間情報項目

XMLインフォメーションセットの Second Edition (第2版) が2004年2月4日に勧告された。

インフォメーションセットへの追加情報

インフォメーションセットへの追加情報すなわちインフォメーションセットに対する改変は、スキーマによる妥当性検証を行う際に、インフォメーションセットを改変することをいう。 例えば、インフォメーションセットに属性の既定値 (デフォルト値) を追加することなどがある。情報を追加されたインフォメーションセットは、スキーマ検証後インフォメーションセットあるいはPSVI (post-schema-validation infoset) と呼ばれる[11]

インフォメーションセットへの追加情報については、賛否両論がある。 インフォメーションセットに情報を追加することに否定的な見解としては、インフォメーションセットへの追加情報はモジュール性を侵害し相互運用性の面での問題を引き起こす危険があるとする。 なぜなら、同じXML文書を扱う複数のアプリケーションソフトウェアは、受け取る情報が妥当性検証を行うかどうかに依存してしまうからである。 アプリケーションソフトウェアが、妥当性検証を行う場合に受け取る情報と、妥当性検証を行わない場合に受け取る情報が、異なってしまうのである[12]

XML Schema は、XMLインフォメーションセットへの追加情報を扱うことができる。 RELAX NGは、インフォメーションセットへの追加情報を扱わない。 RELAX NG では、インフォメーションセットへの追加情報に否定的な立場をとっている。

歴史

デジタルメディアの出版を行ってきた人々は、1980年の後半—インターネットが広く使われるようになるより前の時期—には既に、動的に情報を視覚化するための技術として、汎用的なマークアップ言語である Standard Generalized Markup Language (SGML) が多くの用途に適していることを、理解していた[13][14]。 SGMLはいくつかの分野で普及していたが、仕様が複雑で処理系の開発が難しく、またSGML文書の処理が重いという欠点があった。1990年代半ばまでには、SGMLを実際に使っていた一定の人々は、新しく現れた World Wide Web (ウェブ) を経験した。 そうした人々は、ウェブが発展することにより直面するいくつかの問題に対して、SGMLが解決策を提供すると、強く考えるようになった。 Dan Connolly は、自分が1995年にWorld Wide Web Consortium (W3C) のスタッフになった時に、SGMLをW3Cのアクティビティの一覧に追加した。 このアクティビティの作業は、1996年の中頃にサン・マイクロシステムズのジョン・ボサックが、このアクティビティに関する宣言を起草しアクティビティの共同作業者を募ることで、始まった。 ボサックは、SGMLとウェブの双方を経験していた人々の小さなコミュニティと良好な関係を築いていた。 ボサックは、自分の作業においてマイクロソフトから支援を受けた。

XMLの仕様は、11人のメンバーからなるワーキンググループにより編集され[15]、だいたい150人から構成される Interest Group のメンバーから支援を受けて、作成された。 技術的な論議が Interest Group のメーリングリストで提起され、提起された論議は、合意形成により解決された。合意形成ができなかった場合は、ワーキンググループのメンバーの投票による多数により、解決された。 このアクティビティで行われた設計上の決定とその根拠の記録は、Michael Sperberg-McQueen が1997年12月4日に編集した[16]。 このアクティビティでは、ジェームズ・クラークが、技術リーダとして貢献した。 クラークの貢献として特筆されるのは、空要素 "<空/>" の導入と、この技術の名称 "Extensible Markup Language" (XML) の命名である。 この技術の名称として、他に提案され吟味されたものの一部を次に示す。

  • MAGMA (Minimal Architecture for Generalized Markup Applications)
  • SLIM (Structured Language for Internet Markup)
  • MGML (Minimal Generalized Markup Language)

XML仕様のワーキンググループではジョン・ボサックが議長を務めた。 このワーキンググループではジェームズ・クラークが技術リーダを務めた。 ワーキンググループの共同エディタは、もともとはティム・ブレイと Michael Sperberg-McQueen であった。 このアクティビティのプロジェクトの途中で、ブレイはネットスケープ・コミュニケーションズとのコンサルティングの契約を結んだ。 このブレイとネットスケープの契約に対しては、マイクロソフトが強く抗議した。 ブレイは、エディタの役割を一時的に辞することを要請された。 このことに関して、ワーキンググループでは激しい議論が行われた。 この議論は、最終的にはマイクロソフトの Jean Paoli が第3の共同エディタに就くことで解決した。 なおXMLワーキンググループには、日本人としてはただ一人村田真がメンバーとして1997年に参加した。

XMLワーキンググループは、直接会って活動したことは数回しかなかった(最初の会議は1997年8月22日)。 XML仕様の設計は、電子メールと週に一度の電話会議の双方を有機的に活用することにより、成し遂げられた。 XML仕様の設計では、SGMLの欠点を解決すべく文法を簡素化した。 XML仕様における設計上のいくつかの大きな決定は、1996年の7月から11月までの間の12週間の真剣な作業のなかで行われた。 この12週間の作業の後 (1996年11月) に、XMLの最初のワーキングドラフトが公表された[17]。 その後も1997年をとおして設計作業は続けられ、XML 1.0 は、1998年2月10日W3Cの勧告となった[18]

XML 1.0 は、ワーキンググループが目標としていた次の目標を達成したと、評価する人々が多い。

  • インターネット環境での使いやすさ
  • 汎用的な用途での使いやすさ
  • SGMLとの互換性
  • XML文書を扱うソフトウェアの開発を容易にする機能
  • オプショナルな機能の最小化
  • XML文書の読みやすさ
  • 形式に即していること (formality)
  • 簡潔さ
  • XML文書の作成・編集の容易さ

技術者にとってはXMLはSGMLよりも習得しやすい技術であり、また処理系の開発が容易になったことで低い費用でXML技術を利用できるようになった。 現在ではXMLは広く普及している技術である。

XMLの前身であるSGMLと同様にXMLでも、いくつかの冗長な構文要素があり、要素記述子の繰り返しを仕様に含んでいる。 文書を短くすることは、XMLワーキンググループでは、XMLの構造において本質的な問題とは見なされなかった。

起源

XMLは、ISO標準 Standard Generalized Markup Language (SGML) のサブセットである。 XMLのほとんどはSGMLから変更されずに採り入れられている。 XMLがSGMLから採り入れられている技術的な要素には次のものが含まれる。

  • 論理的な構造と物理的な構造を分離する (要素と実体)
  • 文法に基づいた妥当性検証 (DTD)
  • データとメタデータを分離する (要素と属性)
  • 混合内容 (mixed content、要素の内容として子要素と文字列データが混在する内容モデル)
  • 表現から処理を分離する (処理命令; processing instruction)
  • 山括弧の構文

XMLがSGMLから採り入れなかった技術要素としては、SGML宣言がある (XMLでは文書の文字符号化方式としてUTF-8UTF-16を採用している)。

XMLの他の技術的起源としては、次の3つが挙げられる。

Text Encoding Initiative (TEI)
Text Encoding Initiative (TEI、en:Text Encoding Initiative) は、「転送構文」として使うためのSGMLのプロファイルを定義している。
HyperText Markup Language (HTML)
HyperText Markup Language (HTML) では、文書の文字符号化集合はリソースの文字符号化方式と分離されている。
Extended Reference Concrete Syntax (ERCS)
Extended Reference Concrete Syntax (ERCS) から、XML 1.0 の命名規則が採用された。ERCSは、十六進数の文字参照を導入しており、全てのUnicodeの文字を使うことができるようにするために参照の概念を導入している。

XML仕様の設計に関する議論のなかで開発された革新的な考え方には、次のものが含まれる。

バージョン

2010年1月現在の時点では、XMLには2つのバージョンがある。

XML 1.0
XML 1.0 が最初に策定されたのは1998年2月10日であった。1998年の策定後、数度の改訂 (修正) を経ている。この数度の改訂については新しいバージョン番号は割り当てられていない。現在の時点では、Fifth Edition(第5版)が最新版である。XML 1.0 Fifth Edition は、2008年11月26日にW3Cから公開された。XML 1.0 は、多くの処理系が実装され、現在においても一般的な用途に対しては採用が勧められるとされている。日本ではJIS X 4159:2005としてJIS規格化されている。
XML 1.1
XML 1.1 が最初に策定されたのは2004年2月4日であり、XML 1.0 Third Edition が公開された日と同じ日であった。現在の時点では、Second Edition (第2版) が最新版である。XML 1.1 Second Edition は、2006年8月16日にW3Cから公開された。XML 1.1 にはいくつかの機能が追加されている。XML 1.1 で追加された機能については議論の対象となっている。XML 1.1 で追加された機能は、XML をいくつかの状況で使い易くすることを目指している[19]。XML 1.1 で追加された主な機能は次のとおりである。
  • EBCDIC プラットフォームで使われている行終端文字を使えるようにする。
  • Unicode 2.0 の文字集合に含まれない文字を使えるようにする。
XML 1.1 を実装している XML の処理系は、あまり多くない。XML 1.1 は、XML 1.1 特有の機能を必要とする状況においてのみ、採用を勧められるとされている[20]

XML 1.0 と XML 1.1 は、要素名と属性名に使うことができる文字集合において異なっている。XML 1.0 では、 Unicode 2.0 で定義された文字集合のみ要素名および属性名として使うことができる。Unicode 2.0 の文字集合には、世界で使われているほとんどの文字が含まれている。しかし Unicode 2.0 の文字集合には Unicode 2.0 より新しいバージョンで追加された文字は含まれていない。こうした Unicode の新しいバージョンで追加された文字としては、モンゴル語クメール語 (カンボジア語)、アムハラ語ビルマ語などの文字が、含まれる。

XML 1.1 においては、ほとんどのUnicode文字をXML文書の文字列データや属性値として使うことができる。また Unicode の現在のバージョンで定義されていない文字でさえ、使うことができる。 XML 1.1 の方式では、いくつかの文字については使うことができないが、その他の全ての文字は使うことができる。 一方で XML 1.0 では、仕様で明示的に規定された文字集合のみを、XML文書の文字列データや属性値として使うことができる。 このため XML 1.0 では、Unicode の新しいバージョンで追加される文字を扱うことはできない。

XML文書の文字列データや属性値について、XML 1.1 では XML 1.0 より多くの制御文字を使うことができる。 しかし「堅牢性」の観点から、XML 1.1 で使えるようになった制御文字の多くは、文字参照としてXML文書内に記述しなければならない。 XML 1.1 で使えるようになった制御文字には、2つの改行コードが含まれる。 この2つの改行コードは、XML 1.1 の処理系では空白記号として扱われる。 制御文字のうちこの空白記号として扱われる制御文字のみが、XML 1.1 で文字参照を使わずに直接にXML文書に記述することができる。

現在、XML 2.0 に関する議論が行われている。 XML-SW (SW は、skunk works スカンクワークスの意味) が、XMLの最初の設計者の一人によって書かれた。 XML-SW には、XML 2.0 はどのようなものかということについての、いくつかの提案を含んでいる。 その内容は次のとおりである。

World Wide Web Consortium (W3C) では、XML Binary Characterization (XMLバイナリ表現) のワーキンググループが活動しており、同ワーキンググループでは、XMLインフォメーションセットをバイナリ形式に符号化するために、ユースケースと特性を調査する予備研究を行っている。 このワーキンググループは、公的な標準を制定することが認可されているわけではない。 XMLは定義上明確にテキストに基づいているため、ITU-TISOは、それぞれが定めるバイナリインフォメーションセットに対して、混乱を避けるために Fast Infoset の名前を使っている (参照: ITU-T Rec. X.891 | ISO/IEC 24824-1)。

特許の主張

2005年の10月に、Scientigoという小さな企業が、XMLの使用に対して同企業の2つの特許 U.S. Patent 5,842,213U.S. Patent 6,393,426 の対象になるという主張を、公的に表明した。 この2つの特許は、「特定の『階層構造ではない』統合されていない中立的な形式での、[データの]モデリングと格納と転送」を対象としている。 特許申請によると、この2つの特許は1997年と1999年に出願された。 Scientigoの最高経営責任者 (CEO) である Doyal Bryant は、この2つの特許を「金銭に換える」という願望を述べたが、同社は「世界を敵にするつもりはない」と言明した。 Bryant は、Scientigoは自社の2つの特許についていくつかの大企業と話し合っていると述べた[21]

XMLを使う人々や企業に在籍していない専門家たちは、Scientigoの主張に対して懐疑的で批判的な立場で反応した。 一定の人々は、Scientigoをパテント・トロールであると述べた。 ティム・ブレイは、この2つの特許がXMLを対象とするという主張は「ばかげている」と述べた[22]

XMLに関係する多くの先行技術がSGMLを含めて存在している。

XMLに対する支持と批判

多くの論者がXMLに対してさまざまな批判を行ってきた。 こうした批判は、XMLの長所と潜在的な欠点に対する言及を含んでいる[23]

XMLの長所

  • XMLはテキストに基づいた技術である。
  • XMLはUnicode文字集合を扱える。Unicodeを採用したことにより、どのような自然言語の書き言葉であってもほとんどの情報を通信の対象にできる。
  • XMLは汎用的にコンピュータ科学データ構造を表現できる。例えば、レコード(構造体)、リスト木構造などを表現できる。
  • XMLの自己文書化という形式は、構造とフィールド名とともに値も記述できる。
  • XMLの厳密な構文と構文解析の要件があるため、XMLプロセサ (XMLパーサ) のアルゴリズムは非常に簡潔で効率よく一貫性のあるものとなる。
  • XMLは文書データベースおよび文書処理のための技術として、スタンドアロン環境においてもネットワーク環境においても、非常によく活用されている。
  • XMLは国際標準に基づいている。
  • XMLでは、RELAX NGスキマトロンのようなスキーマ言語を使うことで妥当性検証を行える。こうした妥当性検証の機構は次のことを容易にする。
    • 有効な単体テスト
    • 有効な防火壁 (ファイアウォール)
    • 有効な受け入れテスト
    • 契約に基づく有効な仕様
    • 有効なソフトウェア構築
  • XMLの階層構造は、(全てではないが) ほとんどの種類の文書の表現に向いている。
  • XMLはプレーンテキストとして表現される。プレーンテキストは、他のプロプライエタリな文書形式と比べて制限が少ない。
  • XMLはプラットフォーム独立である。このため技術の移り変わりによる影響に比較的強い。
  • XML文書は、スキーマが変更されても、前方互換性と後方互換性を保持することは、比較的容易である。
  • XMLの前身であるSGMLは、1986年から使われつづけている。そのため大量に蓄積された経験やソフトウェアを活用できる。
  • 整形式XML文書の要素の断片もまた、整形式のXML文書である。

XMLの短所

  • XML文書の構文は、同じ情報を表すバイナリ表現と比べて、冗長でサイズが大きい[24][25]
  • XML文書は冗長であり、記憶装置、転送、処理のコストの面で、効率的な運用に悪い影響を与える可能性がある[25][26][注 5]
  • XML文書の構文は、他の「テキストに基づく」データ転送形式と比べて冗長である[27][28]
  • XMLはその前身であるSGMLよりも簡素化されたとはいえ、その処理は決して軽くはなく、インターネット上のプロトコルなど速度と軽さが要求される分野では、採用が見送られることがしばしばある[注 6]
  • XMLが表現形式として採用している階層型モデルは、関係モデルオブジェクト指向グラフと比べると制限が大きい[注 7][29]
  • オーバーラップする (階層構造ではない) 節 (ノード) の関連を表現するには、余分な努力が必要である[30]
  • XML名前空間を使うことには問題がともなう。名前空間を正しく扱うXMLプロセサを実装することは、難しい作業になる可能性がある[31]
  • XMLは、「自己文書化」として表現されることが多い。しかしこの表現では、重大なあいまいさがあることを考慮していない[32][注 8]
  • XML文書における内容と属性の区別は、一定の人々にとっては不自然に感じられる。XMLのデータ構造の設計を難しくする要因となっている。[33]

標準化

先述したISOの標準群のほかに、XML関連では次の文書が発行されている。

  • ISO/IEC 8825-4:2002 Information technology -- ASN.1 encoding rules: XML Encoding Rules (XER)
  • ISO/IEC 8825-5:2004 Information technology -- ASN.1 encoding rules: Mapping W3C XML schema definitions into ASN.1
  • ISO/IEC 9075-14:2006 Information technology -- Database languages -- SQL -- Part 14: XML-Related Specifications (SQL/XML)
  • ISO 10303-28:2007 Industrial automation systems and integration -- Product data representation and exchange -- Part 28: Implementation methods: XML representations of EXPRESS schemas and data, using XML schemas
  • ISO/IEC 13250-3:2007 Information technology -- Topic Maps -- Part 3: XML syntax
  • ISO/IEC 13522-5:1997 Information technology -- Coding of multimedia and hypermedia information -- Part 5: Support for base-level interactive applications
  • ISO/IEC 13522-8:2001 Information technology -- Coding of multimedia and hypermedia information -- Part 8: XML notation for ISO/IEC 13522-5
  • ISO/IEC 18056:2007 Information technology -- Telecommunications and information exchange between systems -- XML Protocol for Computer Supported Telecommunications Applications (CSTA) Phase III
  • ISO/IEC 19503:2005 Information technology -- XML Metadata Interchange (XMI)
  • ISO/IEC 19776-1:2005 Information technology -- Computer graphics, image processing and environmental data representation -- Extensible 3D (X3D) encodings -- Part 1: Extensible Markup Language (XML) encoding
  • ISO/IEC 22537:2006 Information technology -- ECMAScript for XML (E4X) specification
  • ISO 22643:2003 Space data and information transfer systems -- Data entity dictionary specification language (DEDSL) -- XML/DTD Syntax
  • ISO/IEC 23001-1:2006 Information technology -- MPEG systems technologies -- Part 1: Binary MPEG format for XML
  • ISO 24531:2007 Intelligent transport systems -- System architecture, taxonomy and terminology -- Using XML in ITS standards, data registries and data dictionaries

脚注

注釈

  1. JavaScript Object Notation (JSON) とYAMLは、XMLと比べて、他のテキストを基にした直列化言語との中でも、一般に、軽量であり、冗長性の少ないという、特徴をもつと言及されることが多い。 この項目の#XMLに対する支持と批判の節を参照。
  2. Extensible HyperText Markup Language (XHTML) は、マークアップ言語 HyperText Markup Language (HTML) を簡素化しその一貫性を改良しようという試みである。なお、HTMLは、Standard Generalized Markup Language (SGML) に基づいたマークアップ言語である。
  3. XMLプロセサを利用する際には、XML文書で用いている文字コードをサポートしたものを選択することになる。
  4. 他の方法でXML文書を処理することも可能である
  5. ただし、Binary XML の試みは、XML文書のバイナリ表現を使うことでこうした問題を軽減するべく努力している。例えば、Javaによる Fast Infoset 標準のリファレンス実装では、構文解析 (パース) の速度は Apache Xerces Java と比べて10倍速く、Javaによる最も高速なXMLプロセサの一つであるPiccolo driver と比べて4倍速い[1]
  6. XMLの汎用性とそれに伴う重さはしばしば揶揄の対象とされることもある。IPTCPUDPをXMLで定義するというジョークRFC ( RFC 3252 ) が存在する。
  7. 階層型モデルは木構造の固定的な単一の視点による見方しか提供しない。例えば、役者が映画の下位に位置づけられるか、映画が役者の下位に位置づけられるかのいずれかであり、双方の視点を両立することはできない。
  8. 例えば多義語を参照

出典

  1. "XML stands for Extensible Markup Language. The X is for the first syllable of Extensible. eXtensible is a spelling error."
  2. Bray, Tim; Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, François Yergeau (2006年9月). “拡張可能なマーク付け言語 (XML) 1.0 - 経緯及び目標”. World Wide Web Consortium. . 2007閲覧.
  3. 株式会社日本ユニテック、中山幹敏、奥井康弘、2001年、pp.28-29
  4. 株式会社日本ユニテック、中山幹敏、奥井康弘、2001年、p.29
  5. xml-dev - Fw: An I-D for text/xml, application/xml, etc
  6. JavaプラットフォームAPI仕様
  7. Fitzgerald, Michael (2004). Learning XSLT. Sebastopol, CA: O'Reilly Media, p.243. ISBN 978-0-596-00327-2. 
  8. Push, Pull, Next! - Bob DuCharme, XML.com
  9. http://www.asahi-net.or.jp/~DP8T-ASM/java/tools/Relaxer/index_ja.html
  10. http://java.sun.com/xml/jaxb/
  11. XML Schema 1.1 Part 1: Structures
  12. RELAX NG and W3C XML Schema, James Clark, 4 Jun 2002
  13. Bray, Tim (2005年2月). “A conversation with Tim Bray: Searching for ways to tame the world’s vast stores of information”. Association for Computing Machinery's "Queue site". . 2008閲覧.
  14. (1988) “Publishers, multimedia, and interactivity”, Interactive multimedia. Cobb Group. ISBN 978-1-55615-124-8. 
  15. このワーキンググループはもともとは "Editorial Review Board" と呼ばれていた。このワーキンググループの最初のメンバーとXML仕様の first edition が完成するまでに加わっていた7人のメンバーは、XML 1.0 first edition のW3C勧告の最後に一覧して掲載されている。参照: http://www.w3.org/TR/1998/REC-xml-19980210#sec-xml-wg
  16. Reports From the W3C SGML ERB to the SGML WG And from the W3C XML ERB to the XML SIG
  17. Extensible Markup Language (XML) - W3C Working Draft 14-Nov-96
  18. W3CがXML 1.0を勧告”. INTERNET Watch (1998年2月12日). . 2012閲覧.
  19. Extensible Markup Language (XML) 1.1 (Second Edition) - Rationale and list of changes for XML 1.1”. W3C. . 2006閲覧.
  20. Harold, Elliotte Rusty (2004). Effective XML. Addison-Wesley, 10-19. ISBN 978-0321150400. 
  21. Small company makes big claims on XML patents - CNET News.com
  22. XML co-inventor Bray responds to patent assault | Between the Lines | ZDNet.com
  23. 例えば、 XML-QL Proposal discussing XML benefitsWhen to use XML"XML Sucks" on c2.comDaring to Do Less with XML
  24. Harold, Elliotte Rusty (2002). Processing XML with Java(tm): a guide to SAX, DOM, JDOM, JAXP, and TrAX. Addison-Wesley. 0201771861. XML文書はバイナリと比べて冗長である
  25. 25.0 25.1 Efficient XML Interchange Evaluation, W3C Working Draft, 7 April 2009。W3C は、XML を非テキスト形式(バイナリ)で効率的に表現する方法を別途定義している。
  26. Harold, Elliotte Rusty (2002). XML in a Nutshell: A Desktop Quick Reference. O'Reilly. 0596002920. XML文書はとても冗長であり、高速であることが必要な大規模なデータベースシステムで情報の探索を行うには効率が悪い。
  27. Bierman, Gavin (2005). Database Programming Languages: 10th international symposium, DBPL 2005 Trondheim, Norway. Springer. 3540309519. XMLの構文は、いくつかの用途においては、人間が読むにはとても冗長である。人間にとっての読みやすさを改善するために dual syntax を提案する
  28. 世間で言われているところによれば、XMLより「冗長性の小さい」多くのテキストフォーマットが、XMLに刺激を受けかつ先行的な業績としてXMLを位置づけ言及している。 例えば次のページを参照: http://yaml.org/spec/current.html、 http://innig.net/software/sweetxml/index.html、 http://www.json.org/xml.html
  29. Lim, Ee-Peng (2002). Digital Libraries: People, Knowledge, and Technology. Springer. 3540002618. 固定的な階層構造を採用することに伴ういくつかの制限について議論する。2002年12月にシンガポールで開催された 5th International Conference on Asian Digital Libraries, ICADL 2002 の議事録より。
  30. Searle, Leroy F. (2004). Voice, text, hypertext: emerging practices in textual studies. University of Washington Press. 0295983051. オーバーラップする要素を表現する代替システムを提案する。
  31. 例えば次のページを参照: http://www-128.ibm.com/developerworks/library/x-abolns.html
  32. The Myth of Self-Describing XML”. . 2007閲覧.
  33. Does XML Suck?”. . 2007閲覧.("8. Complexity: Attributes and Content" を参照)

参考文献

  • (株) 日本ユニテック、中山幹敏、奥井康弘 編著 『改訂版 標準XML完全解説 (上)』 技術評論社、2001年。ISBN 978-4-7741-1186-5。
  • (株) 日本ユニテック、中山幹敏、奥井康弘 編著 『改訂版 標準XML完全解説 (下)』 技術評論社、2001年。ISBN 978-4-7741-1302-9。

関連項目

XML関係の仕様

関連する団体

XMLと関連する技術

  • Abstract Syntax Notation One (ASN.1) - 電気通信やコンピュータネットワークでのデータ構造の表現・エンコード・転送・デコードを記述する記法
  • JavaScript Object Notation (JSON) - JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語
  • YAML - 構造化データやオブジェクトを文字列に直列化(シリアライズ)するためのデータ形式

外部リンク