Extensible Markup Language
XML文書を処理するもう一つのAPIは、XMLデータバインディングであり、XMLデータバインディングを使うと、XML文書を、その文書型に対応した、強く型づけされたプログラミング言語データ構造 (プログラムのソースコード) を、生成することができる。インタフェース指向のDOMとは対照的な手法である。データバインディングの実現例を次に示す。
Relaxer
Java Architecture for XML Binding (JAXB)
XMLは、ユーザが定義したタグを用いて文章構造を記述するマークアップ言語である。HTMLが、Webページを記述するための言語であるのに対して、XMLは、データ交換のための汎用のデータ形式である。HTMLで使用するタグはあらかじめ定義済みのものだが、XMLではユーザが新しくタグを定義して、データの意味や構造を記述することが可能である。
処理命令 (processing instruction) は、XML文書の構成要素であり、XML文書を扱うソフトウェアに対する何らかの処理を行う命令を、記述する内容が、処理命令である。
次に処理命令の構文を示す。
処理命令は ?> の文字列を除き任意の処理内容を記述することができる。処理命令には、処理内容として擬似属性 (pseudo attribute) を記述することがある。擬似属性は、記述のしかたが属性名と属性値のペアに似ている。しかしXMLプロセサは擬似属性を、属性として解釈せず、処理命令の処理内容として解釈する。
擬似属性を使った処理命令の例を次に示す。 これはXML文書にカスケーディングスタイルシート (CSS) と関連づけるという処理命令である。
あるXML文書内に記述された特定の処理命令について、その処理命令をプログラマーが意図したとおりの処理を実行させるためには、そのXML文書を処理するアプリケーションソフトウェア側がその処理命令に対応する必要がある。
XMLは、個別の目的に応じたマークアップ言語群を創るために汎用的に使える。マークアップ言語とは、コンピュータ言語の一種で(広義の「コンピュータ言語」であり、プログラミング言語ではないデータ記述言語などを含む意味)あるが、詳細は「マークアップ言語」の記事を参照のこと。XMLは、その「入子状にタグで囲まれたもの」という構文を共通としたことで、拡張が容易であるとして「extensible」と主張している。
上記の理由もあって、しばしば「あらゆる目的に使える」などと主張されるが、データ構造的には木であって、より入り組んだネットワーク構造(グラフ構造)を直接扱うことは不可能である(XLinkなどの提案はあるが)。
XMLの最も重要な目的は、異なる情報システムの間で、特にインターネットを介して、構造化された文書や構造化されたデータの共有を、容易にすることである。XMLを使うと、文書を構造化して記述できるし、コンピュータのデータを直列化 (シリアライズ) できる。データを直列化する用途でXMLを使う際には、XMLは、JavaScript Object Notation (JSON) やYAMLなどの、テキストを基にした他の直列化言語と比較衡量できる。
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文書を処理する手段としては、これまで次に示す3つの技法が伝統的に使われてきた。なお、この節の説明で使うAPIとはアプリケーションプログラミングインタフェースのことをさす。
プログラミング言語と SAX API を使う。
プログラミング言語と DOM API を使う。
変換エンジンとフィルタを使う。
さらに、近年に開発され使われるようになった、XML文書を処理する技法を示す。
Pull Parsing
データバインディング
先述した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
Pull Parsing で作成される「反復子」はXML文書中のさまざまな要素、属性、データを順番に訪れる。 「反復子」を使うプログラムは、処理中に現在の項目 (例えば、要素の開始、要素の終了、テキスト) を調べ、その特性 (例えば、要素の名前、名前空間、属性値、テキスト内容) を調査する。 そして反復子に「次の」項目へ移動するよう指示することもできる。 プログラムは、このようにXML文書を走査するようにして、文書から情報を取り出すことができる。
Pull Parsing の技法の特筆すべき長所は、XML文書をパースするDOMの技法と比べて非常に高速であり、メモリ使用が非常に少ないことである。 もう一つの長所は、再帰下降の手法は、パースを実行するプログラム内で、データを型づけされた変数として保持することに適していることである。 SAXでは、例えば、プログラマが自分で処理中の要素の祖先となる要素群を格納するスタック内に中間データを保持するコードをプログラミングする必要があることが多い。 これに対し、Pull Parsing の技法を使ってXML文書を処理するプログラムは、SAXを使うプログラムよりも、非常に単純で理解し易く保守が容易になることが多い。
XML文書ではどのUnicodeの文字も (XMLで特別な意味をもつ、開き山括弧 "<" のような文字を除いて)、要素名として、属性名として、コメント内容として、文字データとして、処理命令 (後述) として、直接に使うことができる。このため、漢字とキリル文字を共に含む次の文書も、整形式XML文書である。
妥当なXML文書 (valid XML document) は、整形式XML文書としての条件を満たしていることに加えて、文書の論理的構造を規定する何らかの規則に準拠している。このような規則は、RELAX NG や XML Schema、Document Type Definition (DTD、文書型定義) などのスキーマ言語で定義されたスキーマで定める。例えば、あるXML文書がスキーマに定義されていない要素 (タグ) を含んでいた場合、検証XMLプロセサは、そのXML文書を処理することはできない。検証XMLプロセサによって検証されたXML文書は、妥当 (valid) であると位置づけられる。なお、妥当な文書であっても、非検証XMLプロセサでは実体の定義を確認しないため、仕様で定められている実体参照(&lt;、&gt;など)以外の私的な実体参照を用いている場合、非検証XMLプロセサは当該実体を参照できず致命的なエラーとなる。