RELAX NG
RELAX NG (リラクシング、RELAX Next Generation) は、マークアップ言語XMLのスキーマ言語の一つである。RELAX NG で記述されたスキーマは、XML文書の構造と内容のパターンを定義する。RELAX NG で記述されたスキーマは、それ自身がXML文書である。RELAX NG でスキーマをXML文書として記述する方法を、XML構文という。しかし RELAX NG では、スキーマをXML構文ではない簡潔な短縮構文 (Compact Syntax) で記述することもできる。つまり RELAX NG では、XML構文でスキーマを記述しても良いし、短縮構文でスキーマを記述しても良い。RELAX NG は、W3C XML Schema と比べて仕様が簡潔である。RELAX NG は、ジェームズ・クラークと村田真が共同で設計した。2001年12月に、OASISの RELAX NG 技術委員会が、RELAX NG の仕様を標準として策定した。2003年に、ISO/IEC 19757-2 (文書スキーマ定義言語 第2部 正規文法に基づく妥当性検証) として策定し、2008年に改定している。
一冊の書籍 (book) を記述するための簡単なXML文書のためのスキーマを定義することを、考える。一冊の書籍は、一つもしくは複数の (one or more) ページ (page) の並びとして定義される。おのおののページは、テキスト (text) のみを含む。一冊の書籍を記述するXML文書インスタンスの例を次に示す。
RELAX NG を使ったスキーマは、他の要素の定義を含めたルート要素を定義することにより、入れ子構造で記述することができる。要素の定義自身に、パターンの定義を埋め込むことができる。この方法を使って、書籍のXML文書のスキーマをXML構文で次のように記述することができる。
入れ子構造では、深い階層構造をもつXML文書については扱いにくく、また再帰的な要素を定義することはできない。このため、RELAX NGを使った多くのスキーマでは「名前付パターン」定義への参照を使う。名前付パターンの定義は、スキーマ内で名前付パターンへの参照とは分離して記述される。次に示す「フラットなスキーマ」では、先述のスキーマの例と全く同じマークアップを正確に定義する。