Extensible Markup Language
整形式XML文書 (well-formed XML document) は、XMLの構文の規則のすべてに準拠している。例えば、文書中のある要素が開始タグが有るが対応する終了タグが欠落している場合、その文書は整形式 (well-formed) ではない。整形式ではない文書はXML文書とはみなされない。非検証XMLプロセサおよび検証XMLプロセサは、整形式ではない文書を処理することはできない (処理を試みるとエラーになる)。
XMLはテキストに基づいた技術である。
XMLはUnicodeの文字集合を扱える。Unicodeを採用したことにより、どのような自然言語の書き言葉であってもほとんどの情報を通信の対象にできる。
XMLは汎用的にコンピュータ科学のデータ構造を表現できる。例えば、レコード(構造体)、リスト、木構造などを表現できる。
XMLの自己文書化という形式は、構造とフィールド名とともに値も記述できる。
XMLの厳密な構文と構文解析の要件があるため、XMLプロセサ (XMLパーサ) のアルゴリズムは非常に簡潔で効率よく一貫性のあるものとなる。
XMLは文書データベースおよび文書処理のための技術として、スタンドアロン環境においてもネットワーク環境においても、非常によく活用されている。
XMLは国際標準に基づいている。
XMLでは、RELAX NG やスキマトロンのようなスキーマ言語を使うことで妥当性検証を行える。
XMLだけでは最低限の書式しか決められていないため、XMLの力を引き出す各種の関連技術が別途標準化されている (#XMLの拡張および#XML文書をプログラムで処理する、#XML文書を視覚的に表示する、#XML情報集合を参照)。 以下に挙げるものをはじめとして、現在も多くの関連技術の標準化作業が行われている。
プログラムからXML文書を処理する方法として、Document Object Model (DOM) や Simple API for XML (SAX) などのアプリケーションプログラミングインタフェース (API) が標準化されている。
XML文書のスタイルを指定する技術(スタイルシート)として Extensible Stylesheet Language (XSL) や Cascading Style Sheets (CSS) などがある。
XML文書を非テキスト形式(バイナリ)で効率的に表現する方法として、World Wide Web Consortium (W3C) は Efficient XML Interchange (EXI) フォーマットを定義した。
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つが挙げられる。
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で中核をなす Node やDocument などのインタフェースや、直列化 (出力) などの機能を提供するためのインタフェースはパッケージ org.w3c.dom.* に収められている。
XMLで文書の論理的構造を規定する制約を追加することによって、XMLを適用したマークアップ言語を実装できる。XMLを適用したマークアップ言語は非常に多く存在している (#XMLの応用の節を参照)。例えば、Extensible HyperText Markup Language (XHTML)、DocBook、RSS、Mathematical Markup Language (MathML)、ebXML、Scalable Vector Graphics (SVG)、MusicXML などがある。さらにXMLは、そういった個別のXMLについての構文規則を示すためのスキーマ言語も用意している。スキーマ自体もXMLのXML Schemaの他、XMLではない記法でとても簡潔に大変わかりやすく書ける、Compact Syntaxも用意されているRELAX NGもある。
XML Path Language (XPath) を使うと、XML文書の個々の部分を参照することができるようになる。XPathは、XSLT、XSL-FO、XQuery などの他の技術に対して、XML文書のデータに対するランダムアクセスを行う機能を、提供する。XPathで記述された式は、XML文書を構成するXML要素、属性、処理命令、コメントなどの内側の、テキスト、データ、値を参照することができる。XPathの式は、要素の名前と属性の名前にアクセスすることもできる。Xpathは、妥当なXML文書に対しても整形式XML文書に対しても使うことができる。また名前空間が定義されたXML文書に対しても、名前空間が定義されていないXML文書に対しても使うことができる。
XMLを拡張する技術を説明する。
XML文書を視覚的に表示するための方法を説明する。
XML文書は、その文書の内容をどのように視覚的に表示するかという情報を、一切含んでいない。 Cascading Style Sheets (CSS) や Extensible Stylesheet Language (XSL) のようなXMLのためのスタイルシート言語を使うのでなければ、ほとんどのウェブブラウザは普通のXML文書を生のXMLテキストとして描画する。いくつかのウェブブラウザは「ハンドル」をつけて表示する (例えば、余白に + と - の符号を表示する)。ハンドルを使うことにより、XML文書構造の部分木を、マウスクリックで展開したり折りたたんだりすることができる。
CSSを使ってウェブブラウザでXML文書を描画するためには、XML文書は次のような要領でスタイルシートへの参照を含めなければならない (XMLの処理命令を使ってスタイルシートを使って描画する旨を指定している)。
この方法は、HTML文書におけるスタイルシート指定の方法とは異なる。HTML文書では <link/> 要素を使ってスタイルシートを指定する。
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.
HyperText Markup Language (HTML) では、文書の文字符号化集合はリソースの文字符号化方式と分離されている。
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) をもたない。このため、妥当性の再検証を行わない場合、ベンダ非依存の考え方に反する (#情報集合への追加情報を参照)。