RELAX NG

出典: フリー百科事典『ウィキペディア(Wikipedia)』
2013年3月15日 (金) 11:15時点におけるAddbot (トーク)による版 (ボット: 言語間リンク 9 件をウィキデータ上の d:q1314117 に転記)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

RELAX NG (リラクシング、RELAX Next Generation) は、マークアップ言語XMLスキーマ言語の一つである。RELAX NG で記述されたスキーマは、XML文書の構造と内容のパターンを定義する。RELAX NG で記述されたスキーマは、それ自身がXML文書である。RELAX NG でスキーマをXML文書として記述する方法を、XML構文という。しかし RELAX NG では、スキーマをXML構文ではない簡潔な短縮構文 (Compact Syntax) で記述することもできる[1]。つまり RELAX NG では、XML構文でスキーマを記述しても良いし、短縮構文でスキーマを記述しても良い。RELAX NG は、W3C XML Schema と比べて仕様が簡潔である。RELAX NG は、ジェームズ・クラーク村田真が共同で設計した。2001年12月に、OASISの RELAX NG 技術委員会が、RELAX NG の仕様を標準として策定した[2][3]。2003年に、ISO/IEC 19757-2 (文書スキーマ定義言語 第2部 正規文法に基づく妥当性検証) として策定された。

背景

マークアップ言語 SGML から使われてきたスキーマ言語であった DTD は、XMLで使う際には、XMLの構文規則を満たしていないなど、様々な問題を有していた。そのため、W3C によって XML Schema が開発されたが、標準化に時間がかかり、また標準化のために巨大化・複雑化しすぎたとの批判から、独自にスキーマ言語を開発する動きが出た。

村田真などの人々は、 Regular Language description for XML (RELAX) を開発した。ジェームズ・クラークは、TREX (Tree Regular Expressions for XML) を開発した。クラークと村田は、RELAX NG を、TREX と RELAX Core に基づいて、この2つのスキーマ言語を統合する形で設計した。

RELAX NG で記述されたスキーマを使う例

一冊の書籍 (book) を記述するための簡単なXML文書のためのスキーマを定義することを、考える。一冊の書籍は、一つもしくは複数の (one or more) ページ (page) の並びとして定義される。おのおののページは、テキスト (text) のみを含む。一冊の書籍を記述するXML文書インスタンスの例を次に示す。

<?xml version="1.0" encoding="UTF-8"?>
<book>
  <page>これは1ページです。</page>
  <page>これは2ページです。</page>
</book>

XML構文

RELAX NG を使ったスキーマは、他の要素の定義を含めたルート要素を定義することにより、入れ子構造で記述することができる。要素の定義自身に、パターンの定義を埋め込むことができる。この方法を使って、書籍のXML文書のスキーマをXML構文で次のように記述することができる。

<element name="book" xmlns="http://relaxng.org/ns/structure/1.0">
   <oneOrMore>
      <element name="page">
         <text/>
      </element>
   </oneOrMore>
</element>

入れ子構造では、深い階層構造をもつXML文書については扱いにくく、また再帰的な要素を定義することはできない。このため、RELAX NGを使った多くのスキーマでは「名前付パターン」定義への参照を使う。名前付パターンの定義は、スキーマ内で名前付パターンへの参照とは分離して記述される。次に示す「フラットなスキーマ」では、先述のスキーマの例と全く同じマークアップを正確に定義する。

<grammar xmlns="http://relaxng.org/ns/structure/1.0">
   <start>
      <element name="book">
         <oneOrMore>
            <ref name="page"/>
         </oneOrMore>
      </element>
   </start>
   <define name="page">
      <element name="page">
         <text/>
      </element>
   </define>
</grammar>

短縮構文

RELAX NG 短縮構文は、XMLに準拠しない形式である。短縮構文は、同等なXML構文のスキーマに正確に変換することが可能であり、また逆にXML構文のスキーマから同等な短縮構文のスキーマに正確に変換することが可能であるように、設計された、XML構文と短縮構文は、構造的にまた意味的に一対一に対応している関係にある。Simple Outline XML (SOX; en:Simple Outline XML) とXMLの関係と同じである。短縮構文は、DTDの構文と多くの機能を共有している。次に入れ子構造の短縮構文によるスキーマを示す。

element book
{
    element page { text }+
}

名前付パターンを使ったフラットなスキーマを示す。

start = element book { page+ }
page = element page { text }

短縮構文を解釈する RELAX NG 妥当性検証器 (バリデータ) は、先述の2つの短縮構文のスキーマを同じパターンとして扱う。

W3C XML Schema との比較

RELAX NG の仕様は、W3C XML Schema の仕様とほぼ同じ時期に設計された。XML Schema が策定された2001年の時点では、RELAX NG よりも XML Schema の方が、より多くの技術者に名前を知られており、より多くのオープンソースおよび商用の妥当性検証器 (バリデータ) やエディタが実装されていた。しかしその後、RELAX NG はこのスキーマ戦争を順調に戦い抜き、XMLを扱う多くのソフトウェアでサポートされるようになっている。DocBookTEIガイドライン、OpenDocumentのような広く使われている文書指向のマークアップ言語は、RELAX NG を第一のスキーマとして採用している。

RELAX NG と W3C XML Schema は、多くの機能を共有している。この2つの現代的なスキーマ言語は、従来使われてきたDTDとは、多くの面で異なっている。RELAX NG と XML Schema がともにもつ機能としては、次のようなものがある。

ファイル名の接尾辞 (拡張子)

非公式的な慣習として、RELAX NG のXML構文で記述されたスキーマは、ファイルの名称の接尾辞 (拡張子) として ".rng" が使われている。短縮構文のスキーマのファイル名の接尾辞は、".rnc" が使われている。

妥当性検証器の実装

RELAX NG の妥当性検証器 (バリデータ) の実装として利用可能なものの一部を示す。いずれもオープンソースソフトウェアである。

関連項目

脚注

テンプレート:脚注ヘルプ

  1. RELAX NG Compact Syntax
  2. RELAX NG Specification
  3. RELAX NG Technical Committee

外部リンク

妥当性検証器の実装のリンク