Extensible Markup Language
XML Path Language (XPath)
XML Path Language (XPath) は、W3Cが策定した、XML文書中のデータを取得するための、DOMに似たノードの集まりからなる木構造をデータモデルとするパス式言語である。XSLTおよびXQueryの技術はXPathを使って実現されている。XPathの実装はまた、便利な関数ライブラリを含んでおり使うことができる。
Pull Parsing は、XML文書を、最初から順番に読み込み、Iterator パターン のデザインパターンを使って項目 (item) の一連の流れとして扱う、近年に徐々に普及してきた技法である。
Pull Parsing の技法により、再帰下降パーサを実装することができる。
再帰下降パーサでは、パースを実行するプログラムは、パースの対象となるXML文書の構造と似ている。
そしてパースの中間結果を取得することができる。
パースの中間結果を、パースを実行するメソッド内の局所変数 (ローカル変数) として使うことができる。
あるいは、低水準のメソッドの引数として渡したり、高水準のメソッドへの戻り値として返すことができる。
Pull Parsing の技法を提供する実装としては次のものがある。
SimpleXML - PHP
System.Xml.XmlReader - .NET Framework
例えば、JavaのStAXフレームワークでは、本質的な「反復子」 (イテレータ) を作成して使うことができる。
Pull Parsing で作成される「反復子」はXML文書中のさまざまな要素、属性、データを順番に訪れる。
「反復子」を使うプログラムは、処理中に現在の項目 (例えば、要素の開始、要素の終了、テキスト) を調べ、その特性 (例えば、要素の名前、名前空間、属性値、テキスト内容) を調査する。
そして反復子に「次の」項目へ移動するよう指示することもできる。
プログラムは、このようにXML文書を走査するようにして、文書から情報を取り出すことができる。
Pull Parsing の技法の特筆すべき長所は、XML文書をパースするDOMの技法と比べて非常に高速であり、メモリ使用が非常に少ないことである。
もう一つの長所は、再帰下降の手法は、パースを実行するプログラム内で、データを型づけされた変数として保持することに適していることである。
SAXでは、例えば、プログラマが自分で処理中の要素の祖先となる要素群を格納するスタック内に中間データを保持するコードをプログラミングする必要があることが多い。
これに対し、Pull Parsing の技法を使ってXML文書を処理するプログラムは、SAXを使うプログラムよりも、非常に単純で理解し易く保守が容易になることが多い。
XML文書を処理するもう一つのAPIは、XMLデータバインディングであり、XMLデータバインディングを使うと、XML文書を、その文書型に対応した、強く型づけされたプログラミング言語データ構造 (プログラムのソースコード) を、生成することができる。インタフェース指向のDOMとは対照的な手法である。データバインディングの実現例を次に示す。
Java Architecture for XML Binding (JAXB)
OpenOffice.org、AbiWord、およびAppleの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 Information Set, Infoset)またはXML情報集合 (—じょうほうしゅうごう) は、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) と呼ばれる。
情報集合への追加情報については、賛否両論がある。
情報集合に情報を追加することに否定的な見解としては、情報集合への追加情報はモジュール性を侵害し相互運用性の面での問題を引き起こす危険があるとする。
なぜなら、同じXML文書を扱う複数のアプリケーションソフトウェアは、受け取る情報が妥当性検証を行うかどうかに依存してしまうからである。
アプリケーションソフトウェアが、妥当性検証を行う場合に受け取る情報と、妥当性検証を行わない場合に受け取る情報が、異なってしまうのである。
XML Schema は、XML情報集合への追加情報を扱うことができる。
RELAX NGは、情報集合への追加情報を扱わない。
RELAX NG では、情報集合への追加情報に否定的な立場をとっている。
デジタルメディアの出版を行ってきた人々は、1980年の後半—インターネットが広く使われるようになるより前の時期—には既に、動的に情報を視覚化するための技術として、汎用的なマークアップ言語である Standard Generalized Markup Language (SGML) が多くの用途に適していることを、理解していた。
SGMLはいくつかの分野で普及していたが、仕様が複雑で処理系の開発が難しく、またSGML文書の処理が重いという欠点があった。1990年代半ばまでには、SGMLを実際に使っていた一定の人々は、新しく現れた World Wide Web (ウェブ) を経験した。
そうした人々は、ウェブが発展することにより直面するいくつかの問題に対して、SGMLが解決策を提供すると、強く考えるようになった。
Dan Connolly は、自分が1995年にWorld Wide Web Consortium (W3C) のスタッフになった時に、SGMLをW3Cのアクティビティの一覧に追加した。
このアクティビティの作業は、1996年の中頃にサン・マイクロシステムズのジョン・ボサックが、このアクティビティに関する宣言を起草しアクティビティの共同作業者を募ることで、始まった。
ボサックは、SGMLとウェブの双方を経験していた人々の小さなコミュニティと良好な関係を築いていた。
ボサックは、自分の作業においてマイクロソフトから支援を受けた。
XMLの仕様は、11人のメンバーからなるワーキンググループにより編集され、だいたい150人から構成される Interest Group のメンバーから支援を受けて作成された。
技術的な論議が Interest Group のメーリングリストで提起され、提起された論議は合意形成により解決された。合意形成ができなかった場合は、ワーキンググループのメンバーの投票による多数により解決された。
このアクティビティで行われた設計上の決定とその根拠の記録は、Michael Sperberg-McQueen が1997年12月4日に編集した。
このアクティビティではジェームズ・クラークが技術リーダとして貢献した。
クラークの貢献として特筆されるのは、空要素 "" の導入と、この技術の名称 "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の最初のワーキングドラフトが公表された。
その後も1997年をとおして設計作業は続けられ、XML 1.0 は、1998年2月10日にW3Cの勧告となった。
XML 1.0 は、ワーキンググループが目標としていた次の目標を達成したと、評価する人々が多い。
形式に即していること (formality)
XML文書の作成・編集の容易さ
技術者にとってはXMLはSGMLよりも習得しやすい技術であり、また処理系の開発が容易になったことで低い費用でXML技術を利用できるようになった。
現在ではXMLは広く普及している技術である。
XMLの前身であるSGMLと同様にXMLでも、いくつかの冗長な構文要素があり、要素記述子の繰り返しを仕様に含んでいる。
文書を短くすることは、XMLワーキンググループでは、XMLの構造において本質的な問題とは見なされなかった。
XMLは、ISO標準 Standard Generalized Markup Language (SGML) のサブセットである。
XMLのほとんどはSGMLから変更されずに採り入れられている。
XMLがSGMLから採り入れられている技術的な要素には次のものが含まれる。
論理的な構造と物理的な構造を分離する (要素と実体)
文法に基づいた妥当性検証 (Document Type Definition (DTD、文書型定義))
データとメタデータを分離する (要素と属性)
混合内容 (mixed content、要素の内容として子要素と文字列データが混在する内容モデル)
表現から処理を分離する (処理命令; processing instruction)
XMLがSGMLから採り入れなかった技術要素としては、SGML宣言がある (XMLでは文書の文字符号化方式としてUTF-8とUTF-16を採用している)。
XMLの他の技術的起源としては、次の3つが挙げられる。
Text Encoding Initiative (TEI)
Text Encoding Initiative (TEI、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仕様の設計に関する議論のなかで開発された革新的な考え方には、次のものが含まれる。
XML文書の文字符号化方式 (文字コード) の決定のアルゴリズムと、XML宣言における文字符号化方式の指定
xml:space 属性
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 をいくつかの状況で使い易くすることを目指している。XML 1.1 で追加された主な機能は次のとおりである。
EBCDIC プラットフォームで使われている行終端文字を使えるようにする。
Unicode 2.0 の文字集合に含まれない文字を使えるようにする。
XML 1.1 を実装している XML の処理系は、あまり多くない。XML 1.1 は、XML 1.1 特有の機能を必要とする状況においてのみ、採用を勧められるとされている。
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 に関する議論が行われている。
(SW は、skunk works スカンクワークスの意味) が、XMLの最初の設計者の一人によって書かれた。
XML-SW には、XML 2.0 はどのようなものかということについての、いくつかの提案を含んでいる。
その内容は次のとおりである。
Document Type Definition (DTD、文書型定義) をXMLの構文から排除する。
XML名前空間、XML Base およびXML情報集合 (情報集合) をXML仕様に統合する。
World Wide Web Consortium (W3C) では、XML Binary Characterization (XMLバイナリ表現) のワーキンググループが活動しており、同ワーキンググループでは、XML情報集合をバイナリ形式に符号化するために、ユースケースと特性を調査する予備研究を行っている。
このワーキンググループは、公的な標準を制定することが認可されているわけではない。
XMLは定義上明確にテキストに基づいているため、ITU-TとISOは、それぞれが定めるバイナリインフォメーションセットに対して、混乱を避けるために  の名前を使っている (参照: ITU-T Rec. X.891 | ISO/IEC 24824-1)。
2005年の10月に、Scientigoという小さな企業が、XMLの使用に対して同企業の2つの特許  と  の対象になるという主張を、公的に表明した。
この2つの特許は、「特定の『階層構造ではない』統合されていない中立的な形式での、[データの]モデリングと格納と転送」を対象としている。
特許申請によると、この2つの特許は1997年と1999年に出願された。
Scientigoの最高経営責任者 (CEO) である Doyal Bryant は、この2つの特許を「金銭に換える」という願望を述べたが、同社は「世界を敵にするつもりはない」と言明した。
Bryant は、Scientigoは自社の2つの特許についていくつかの大企業と話し合っていると述べた。
XMLを使う人々や企業に在籍していない専門家たちは、Scientigoの主張に対して懐疑的で批判的な立場で反応した。
一定の人々は、Scientigoをパテント・トロールであると述べた。
ティム・ブレイは、この2つの特許がXMLを対象とするという主張は「ばかげている」と述べた。
XMLに関係する多くの先行技術がSGMLを含めて存在している。
多くの論者がXMLに対してさまざまな批判を行ってきた。
こうした批判は、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文書は冗長であり、記憶装置、転送、処理のコストの面で、効率的な運用に悪い影響を与える可能性がある。
XML文書の構文は、他の「テキストに基づく」データ転送形式と比べて冗長である。
XMLはその前身であるSGMLよりも簡素化されたとはいえ、その処理は決して軽くはなく、インターネット上のプロトコルなど速度と軽さが要求される分野では、採用が見送られることがしばしばある。
XMLが表現形式として採用している階層型モデルは、関係モデルやオブジェクト指向グラフと比べると制限が大きい。
オーバーラップする (階層構造ではない) 節 (ノード) の関連を表現するには、余分な努力が必要である。
XML名前空間を使うことには問題がともなう。名前空間を正しく扱うXMLプロセサを実装することは、難しい作業になる可能性がある。
XMLは、「自己文書化」として表現されることが多い。しかしこの表現では、重大なあいまいさがあることを考慮していない。
XML文書における内容と属性の区別は、一定の人々にとっては不自然に感じられる。XMLのデータ構造の設計を難しくする要因となっている。
先述した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