XMLスキーマ言語RELAX NG - 情報処理学会 情報基礎とアクセス技術

ÅÄ スキーマ言語 Ê Ä
日本 Á
½
Æ
村田 真
Å´株µ 東京基礎研究所/国際大学研究所
はじめに
文書がある想定を満たすものであることを保証す
るために使われるのがスキーマである。スキーマは、
ÅÄ のためのスキーマ言語として従来は Ì が
用いられてきた。¾¼¼½ 年 月には、Ï¿ ´ÏÓÖÐ
Ï Ï ÓÒ×ÓÖØ Ùѵ によって ÅÄ Ë Ñ が
制定されている。いっぽう、Ç ËÁË ´Ø ÇÖ Ò Þ ¹
Ø ÓÒ ÓÖ Ø
Ú Ò Ñ ÒØ Ó ËØÖÙ ØÙÖ ÁÒ ÓÖÑ ¹
Ø ÓÒ ËØ Ò Ö ×µ という標準化団体では Ê Ä Æ
というスキーマ言語を ¾¼¼½ 年 ½¾ 月に制定した。本
稿では、これらのスキーマ言語を紹介し、とくに Ê ¹
Ä Æ について説明する。
どのような
ÅÄ 文書を許すかを明確に規定したも
のである。スキーマは、なんらかのスキーマ言語に
よって書かれる。与えられた文書があるスキーマに
従っているかどうかを調べることを検証といい、検
証を行うプログラムを検証器と呼ぶ。
スキーマ なんらかのスキーマ言語によって書かれた
記述であり、どのような
ÅÄ 文書を許すかを
明確に規定したもの
スキーマ言語に関しては多くの論点がある。しか
スキーマ言語 スキーマを記述するためのコンピュー
し、本稿ではそれらを網羅的に扱うことはせず、プ
タ言語
ログラミングを容易にするためのスキーマという点
検証
だけを扱う。
ÅÄ 文書を与えられてスキーマと比較照合し、
そのスキーマで許されている文書であるかどう
かを判定する処理
¾
スキーマがなぜ必要なのか
¾º½
検証器 検証を行うプログラム。スキーマ言語ごとに
作成される
想定を外れた文書のチェック
ÅÄ ½º¼ ½
では、タグや属性につける名前を定め
¾º¾ スキーマを省略すると何が起こるか
ていない。どんな名前を付けるかは利用者の自由で
ある。適切な名前をもつ要素や属性を組み合わせて
用いることによって、用途に相応しい
スキーマを作るのが大変だという批判は以前から
ÅÄ 文書を
存在する。大規模なスキーマなら、作成に数年を要
表現することができる。
することすらある。この手間を惜しんで、スキーマ
ÅÄ を用いたアプリケーションプログラムを構
の作成を省くとどういうことになるだろうか。
築するときには、タグや属性の名前として特定のも
スキーマを書かないということは、想定した範囲
のを想定する。たとえば、タグの名前として製品名
の文書であるかどうかの判定に、汎用の検証プログ
などを想定する。アプリケーションプログラムはこ
ラムを利用できないことを意味する。必要なチェッ
れらの想定に従う文書に対してのみ動作し、従わな
クは、アプリケーションプログラムでやらなければ
い文書を受け取っても動作しない。
ならない。
½
¾
アプリケーションプログラムでチェックする方法は、 値である文字列のデータ型がスキーマで宣言されて
スキーマを作成して検証プログラムを用いてチェッ いるので、このデータ型に属するデータにテキスト
クする方法より非効率である。アプリケーションプ
を変換してからプログラマに提供することができる。
ログラムでチェックするには、プログラミングをし
また、要素の木構造についても、スキーマを利用す
なくてはならない。スキーマと検証プログラムによ
ることによって、アクセスを容易にすることができ
るチェックでは、スキーマを一度作成すれば検証プ
る。指定したタグ名や属性名をもつ要素や属性を探
ログラムを実行するだけでチェックができる。
す必要はない。
スキーマを利用したアクセスを実現するには、い
スキーマを作成しないことの本質的な問題点とし
て、どんな範囲の文書を認めるのかが不明確になる
くつかの方法がある。
ということがあげられる。異なるプログラマが異なっ
Æ
た理解に基づいてプログラミングすれば、連携動作
する。
Ì ¸ ÅÄ Ë Ñ ¸ Ê Ä
がどんな方法を用いているかは次章以降で議論
するはずのアプリケーションプログラムが連携動作
しなくなってしまう。
逆にいえば、スキーマを作成しなくてもすませら
れるのは、どんな範囲の文書を認めるのかを散文だ
けで明確にすることができ、想定した範囲の文書か
どうかをチェックするアプリケーションプログラムを
書いてもよい場合である。そうでなければ、スキー
マを作成して、検証を行うべきである。
¾º¿
¿
Ì
ÅÄ ½º¼ の Ì は、スキーマ言語の一つである。
ÅÄ の前身である Ë ÅÄ の頃から、 Ì は長
年にわたって用いられてきた。しかし、 ÅÄ の急激
な発展に伴い、 Ì が次のような欠陥を持つこと
が広く認識されるようになった。
¯
データモデルとしてのスキーマ
スキーマは、文書に対する操作を容易にするため
のデータモデルとみなすこともできる。ここでいう
データモデルとは、
ÅÄ 文書がどんな構造を持ち、
どのようにアクセスするかを定めたものである。
まず、文書のアクセスにスキーマを利用しない場
Ì
の構文が特殊なため、
Ì
を処理するソ
フトウェアツールを作るのは難しい。
¯
Ì
の提供するデータ型は十分ではない。
¯
Ì
は名前空間を扱わない。
¯
Ì
ではタグ名と制約を分離できない。
属性を持った要素とテキストからなる木構造でもあ
ÅÄ 文書のそれとは異
なる。実際、 Ì を構成するのは
Ä Å ÆÌ
ººº ¸ ÌÌÄÁËÌ ººº ¸ ÆÌÁÌ ººº などの宣
り、
などのインターフェースを通じて
言であり、タグや属性ではない。さらに、これ
この木構造を操作することができる。しかし、これ
らの宣言を表現するためには、パラメタ実体と
らの方法はアプリケーションプログラマから見ると
いう独自のマクロ構文がしばしば必要となる。
抽象度が低い。
この特殊な構文が
ÅÄ 文書は文字列であり、テキスト処
理ツールで扱うことができる。また、 ÅÄ 文書は
合を考える。
ÇÅ や Ë
より抽象度が高い方法は、スキーマを利用するこ
とである。
ÅÄ 文書は、単なる文字列や木構造で
はなく、スキーマに従うデータとみなされる。
スキーマを利用することによって、データ型を利
用したアクセスが可能である。要素の内容や属性の
特殊な構文
Ì
の構文は、
Ì
の習得を困難にしてい
ると考える人もいる。
ÅÄ 文書を処理するソフトウェアツールと比
較して、 Ì を処理するソフトウェアツール
は未成熟である。ツールの数そのものが少なく、
性能・価格もじゅうぶん満足できるとはいえな
¿
い。おそらく、その一つの原因は、
Ì
な構文である。これらの構文を解釈し、
ÅÄ Ë
の特殊
Ì
特
有のマクロ機構であるパラメタ実体にまで対応
Ì
の持つこれらの問題点を克服するため、Ï¿
ÅÄ Ë Ñ Ï ¾ を設立した。Ï¿
ÅÄ Ë Ñ ¸ ½¼¸ ½½ は、このワーキンググループ
ない。
の三年近くにわたる活動の成果である。 ÅÄ Ë Ñ
不十分なデータ型 ÅÄ の Ì は、 ÅÄ の前身で は ¾¼¼½ 年 月に Ï¿ 勧告として発行された。
ÅÄ Ë Ñ は強力な言語であるが、たいへん複
ある Ë ÅÄ から引き継いだものである。Ë ÅÄ
は、人間が読む文書を表現するために用いら 雑な言語でもある。 ÅÄ コミュニティには、 ÅÄ
れることが多かった。プログラム間で交換する Ë Ñ の推進者と反対者の両方が存在している。す
して、
Ì
支援ツールを作ることは容易では
データの表現に使われることもあったが、それ
はË
Ì
ÅÄ の主な用途ではなかった。このため、
が備えているデータ型は、プログラム間
で交換するデータにはまったく不十分である。
例えば、 ページ数 というタグを導入して、各
章が何ページあるかを表現したとする。½¼ ペー
ジの章に対しては、 ページ数
のように書く。しかし、
Ì
½¼ »ページ数
を用いる限り、整
数を表す文字列だけを指定せよという規定は不
可能である。その結果、 ページ数 不明
»ペー
は½
Ñ
年に
べてを理解することは困難であり、実装も利用例も
現時点では少ない。しかも、他の規格団体 ´Ç
や ÁËÇ»Á
ËÁË
µ も ÅÄ のためのスキーマ言語の制定
に取り組んでおり、 ÅÄ Ë Ñ は ÅÄ のための
唯一のスキーマ言語ではない。
ÅÄ Ë Ñ は、 Ì の問題点を解決するため
に、´½µ ÅÄ 構文を採用し、´¾µ 強力なデータ型と
相(ファセット)を提供し、´¿µ 名前空間を支援し、
´ µ タグ名と制約とを分離している。本稿では、´¾µ
を中心に説明する。
ジ数 と書かれても自動的に検出することはで
º½ データ型
きない。
ÅÄ ½º¼ の重要な拡張として
名前空間がある。名前空間はすでに Ï¿ 勧告
として制定されているが、 Ì の整合性に欠
ÅÄ は豊富なデータ型を提供している。スキーマ
名前空間との不整合
において要素や属性にデータ型を指定すれば、要素
や属性がこのデータ型のデータを表現したものであ
ÅÄ Ë Ñ
ける。特に、名前空間本来の趣旨(接頭辞は文
ることを保証できる。
書中で任意に変えられる)に従った形での運用
タ型のうち特に重要と筆者が考えるものを次に示す。
は不可能である。
記述力の不足
Ì
文字列
では、タグ名ごとに子要素や属
性についての制限を記述する。したがって、一
つのタグ名がどこで使われるかによって異なる
制限を用いることはできない。たとえば、タグ
名が Ø ØÐ であれば、章のタイトルについて人
のタイトルについても同一の制限が適用されて
しまう。½
½ この問題は、文脈自由文法をもとに
数値
×ØÖ Ò ¸ ÒÓÖÑ Ð Þ ËØÖ Ò ¸ ØÓ Ò
ÝØ ¸ Òظ ÐÓÒ ¸ × ÓÖظ ­Ó ظ ÓÙ Ð ¸
日付関連
ÑÐ
ØÑ ¸ Ø ÌÑ ¸ Ø
ÍÊÁ 関連 ÒÝÍÊÁ
Ì 互換 Á ¸ Á Ê ¸ Á Ê Ë¸ ÆÌÁÌ ¸ ƹ
ÌÁÌÁ ˸ ÆÇÌ ÌÁÇƸ ÆÅÌÇà Ƹ ÆÅÌǹ
à ÆË
Ì
が設計されている
ことに由来する。一般に言う文脈自由文法は、本来は文字列を受
理するためのものであり、木構造を受理するのには適していない
(とくにスキーマのブール演算について無力である)。
が提供するデー
¾
ØØÔ »ÛÛÛºÛ¿ºÓÖ » ÅÄ»Ë Ñ
º¾
¯ 文 書へ のアク セス を容易 にす るた め、 ÅÄ
Ë Ñ の検証エンジンはスキーマに書かれた
情報を ÅÄ 文書に付け加えている。
相
データ型には相 ´
ص というパラメタを指定する
ÅÄ Ë Ñ が提供する相の一覧を
ことができる。
をつぎに示す。
ÒÙÑ Ö Ø ÓÒ 許容される値を列挙する。複数の値
を許容するには、複数の
ÒÙÑ Ö Ø ÓÒ 要素を用
いる。
Ð Ò Ø ¸ Ñ ÒÄ Ò Ø ¸ Ñ ÜÄ Ò Ø
とÑ
Ó
の文字である。Ñ ÒÄ
ÒØ
ÜÄ ÒØ は、それぞれ最小と最大の長さを
規定する。Ð Ò Ø は、長さを正確に指定する。
Ô ØØ ÖÒ 文字列に関する正規表現。主に、文字列関
連のデータ型に用いられる。
Ñ Ü´Ñ ÒµÁÒ ÐÙ× Ú ´ Ü ÐÙ× Ú µ 主に、数値関連
なっただろうか。確かに、Â
スキーマを
ÅÄ Ë Ñ
め、
ÅÄ Ë Ñ
対して用いられる。ØÓØ
めた数字の数を表し、 Ö
Ø× データ型
Ð
ÅÄ Ë Ñ
は
Ñ Ðに
Ñ
ÅÄ Ë Ñ
やÊ
スキーマへの
仕様書に記述されているが、数学
ÅÄ Ë Ñ
はブール演算について
数 学 的 な 基 盤 を 持 た な い こ と は 、Ï¿
¿ のような検索言語、
Ù
ÅÄ
のようなプロ
グラミング言語の設計を難しくしている。
Ê Ä
ÅÄ Ë Ñ
ÅÄ
Ú
閉じていない。
Ø× は、小数点を含
Ø ÓÒ Ø× は小数点以
データモデルとしての
から Â
的な性質を満たすように設計されているわけではな
下の数字の数を表す。
Ë
で表現することは容易に
ずに設計されている。言語仕様と検証器の動作概略
ÉÙ ÖÝ
Ø׸ Ö Ø ÓÒ
のクラス定義や Ê
ÅÄ Ë Ñ の ×Ù ×Ø ØÙØ ÓÒ ÖÓÙÔ をどのようにし
て Â Ú に変換するべきかは明らかではない。
ÅÄ Ë Ñ は、根拠となる数学的な基盤を持た
定された値そのものが許されるかどうかを表し
ØÓØ Ð
Ú
マッピングはかえって困難になっている。たとえば、
い。たとえば、
ている。
Æ
と
Ì
以外のスキーマ言語で、規
格団体の成果物であるものとして Ê
ある。Ê
Ä
Æ
Ä
Æ
は国際的な標準化団体 Ç
が
ËÁË に
よって制定されている。ユーザによる学習がきわめ
て容易でありながら、
は、データモデルとしてのスキーマ
ÅÄ Ë Ñ
にない機能すら
有している。
る機能を数多く取り入れている。主なものとし
Ê Ä
Æ は 、Ê Ä
ÓÖ と ÌÊ の
ÙÒ ¬ Ø ÓÒ によって成立した言語である。Ê Ä
ÓÖ は、ÁËÇ»Á の発行した Ì Ò Ð Ê ÔÓÖØ
´ÁËÇ»Á Ìʾ¾¾ ¼¹½µ であり、もともとは日本から
ÁËÇ に提出された。ÌÊ は Â Ñ × Ð Ö 氏( ÅÄ
て、インヘリタンス
に関する仕様と実装において大きな貢献をした専門
を重視して設計された言語であり、次の特徴を備え
ている。
¯
や関係データベースとの連携が容易に
ܹと Ñ Ò¹は最大
と最小を表し、¹ ÁÒ ÐÙ× Ú と¹ Ü ÐÙ× Ú は、指
のデータ型に用いられる。Ñ
º¿
Ú
なった場合もある。しかし、言語仕様が肥大したた
長さを表す非
負整数。主に、文字列関連のデータ型に用いられ
る。単位は、ÍÒ
これらの特徴によって、文書へのアクセスが容易
になり、Â
ÂÚ
や関係データベースとの連携を容易にす
るため、Â
Ú
や関係データベースや
Ì
にあ
´ Ö Ú Ø ÓÒ Ý ÜØ Ò× ÓÒ¸
Ö Ú Ø ÓÒ Ý Ö ×ØÖ Ø ÓÒ¸ ×Ù ×Ø ØÙØ ÓÒ ÖÓÙÔ×µ
と ËÉÄ の ÒÙÐÐ がある。
家)によって設計されており、Ê
¿
ØØÔ »»ÛÛÛºÛ¿ºÓÖ » ÅÄ»ÉÙ ÖÝ
Ä
の影響を受
けている。両者を Ç
ËÁË でマージすることによって
Ê Ä Æ が始まった。
Ê Ä Æ は、 ÅÄ 構文を採用している。デー
タ型(及び相)として、 ÅÄ Ë Ñ È ÖØ ¾ やそれ
木オートマトンは
¼ 年代から研究されてきたが、最
ÅÄ のための基礎理論としての重要性
が認識されつつある ¸ 。
Ê Ä Æ は、木オートマトン理論に基づいて
近になって
以外のデータ型ライブラリを利用することができる。 設計されている。タグ名と制約との分離は、木オー
Ê Ä
Æ
は名前空間を扱うことができる。これ
トマトンによって自然に実現される。Ê
Ä
Æ
の
検証器は木オートマトンを実行するプログラムとし
らについては、本稿では扱わない。
て実現することができる。また、スキーマに関する
º½
データモデルとしての Ê Ä
Ê Ä
Æ
は、データモデルとしてのスキーマ
を重視して設計されている。ただし、Ê
は
ÅÄ Ë Ñ
Æ
Ä
Æ
とは対極的なアプローチを用いてい
ブール演算も、木オートマトンのブール演算によっ
てただちに実現できる。
Ï¿
ÅÄ ÉÙ ÖÝ のような検索言語や
Ù
の
ようなプログラミング言語も、木オートマトン理論
に基づいて設計されている。したがって、Ê
Ä
ÅÄ 文書とプログラム用データ Æ で書かれたスキーマを、これらの言語から容易
の間の変換は、ツール( Ø
Ò Ò ツールと呼ぶ) に利用することができる。
る。木構造としての
によって行われる。検証器は、このような変換には
ÅÄ 文書
ÅÄ 参考文献
Ë Ñ ではスキーマ言語を肥大させたが、Ê Ä
½ ̺ Ö Ý¸ º È ÓÐ ¸ º ź ËÔ Ö Ö ¹Å ÉÙ Ò¸
Æ では逆に簡略化している。
Ò º Å Ð Öº
ÜØ Ò× Ð Å Ö ÙÔ Ä Ò¹
Ê Ä Æ のための Ø Ò Ò ツールには、
Ù ´ Åĵ ½º¼º Ï¿ Ê ÓÑÑ Ò Ø ÓÒº
Ê Ð Ü Ö ½¾ と Ê Ð ÜÆ
のふたつがある。Ê ¹
ØØÔ »»ÛÛÛºÛ¿ºÓÖ »ÌÊ»Ê ¹ÜÑи Ç ØÓ Ö
Ð Ü Ö は、スキーマから Â Ú プログラムを生成し、
¾¼¼¼º
ÅÄ 文書と Â Ú オブジェクトの間の双方向変換を
٠ظ ʺ ÐÐ ÖÓÒ¸
提供する。Ê Ð Ü Ö は、もともと Ê Ä
ÓÖ のた ¾ Àº ÓÑÓÒ¸ ź
º  ÕÙ Ñ Ö ¸ º ÄÙ Þ¸ ˺ Ì ×ÓÒ¸ Ò
めに設計されたが、Ê Ä
Æ にも対応している。
ź ÌÓÑÑ × º ÌÖ ÙØÓÑ Ø Ì Ò ÕÙ × Ò
ÔÔÐ Ø ÓÒ× ¸ ½ º ØØÔ »»ÛÛÛº Ö ÔÔ ºÙÒ Ú¹
Ð ÐÐ ¿º Ö»Ø Ø º
º¾ 木オートマトン
立ち入らず、検証だけを行う。すなわち、
とプログラムの間の連携を容易にするために、
¾ 章で、どのような ÅÄ 文書を許すかを明確に
規定したものがスキーマであると述べた。これを数
学の言葉で言い換えると、スキーマとは
の集合を記述したものである。
ÅÄ 文書
ÅÄ 文書は要素の
木構造であるから、スキーマは木の集合になる。
木の集合を記述するための数学理論として、木オー
トマトン
¾¸ ¿
が存在する。木オートマトンは木を
与えられて動作し、受理するかどうかを報告する。
ØØÔ »» ÓÑ Ô ¾ºÒ Øݺ ÓÑ»Ó
Ò Ü º ØÑ
Ñ »Ö Ð ÜÒ »
¿ º
× Ò Åº ËØ Ò Ýº ÌÖ ÙØÓÑ Ø º
Ñ Ã Ó¸ Ù Ô ×ظ ½ º
Àº ÀÓ×ÓÝ Ò º È Ö º Ù
ÔÖÓ ×× Ò Ð Ò Ù ¸ ¾¼¼¼º
ØÝÔ ÜÑÐ
ÁËǺ ËØ Ò Ö Ò Ö Ð Þ Å Ö ÙÔ Ä Ò Ù
´Ë Åĵ¸ ½ º
ź ÅÙÖ Ø º À
ÙØÓÑ Ø
ÓÖ ÅÄ × Ñ Ø ¸ ½ º
ÓÖÑ Ð ÑÓ Ð
Ê Ä
Æ ËÔ ¬ Ø ÓÒº Ç ËÁË Óѹ
Ñ ØØ ËÔ ¬ Ø ÓÒº
ØØÔ »»ÛÛÛºÓ × ×¹
ÓÔ ÒºÓÖ » ÓÑÑ ØØ ×»Ö Ð Ü¹Ò »¸ ÆÓÚ Ñ Ö
¾¼¼½º
κ Î ÒÙº
Ï Ç Ý×× Ý ÖÓÑ Ó
ØÓ Åĺ ÁÒ ËÝÑÔÓ× ÙÑ ÓÒ ÈÖ Ò ÔÐ × Ó
Ø × ËÝ×Ø Ñ׸ ¾¼¼½º
ÅÄ Ë Ñ È ÖØ ¼
ÈÖ Ñ Öº
Ï¿
Ê ÓÑÑ Ò Ø ÓÒº
ØØÔ »»ÛÛÛºÛ¿ºÓÖ »ÌÊ»ÜÑÐ× Ñ ¹¼»¸
Å Ý ¾¼¼½º
½¼
ÅÄ Ë Ñ
È ÖØ ½
ËØÖÙ ¹
ØÙÖ ×º
Ï¿
Ê ÓÑÑ Ò Ø ÓÒº
ØØÔ »»ÛÛÛºÛ¿ºÓÖ »ÌÊ»ÜÑÐ× Ñ ¹½»¸
Å Ý ¾¼¼½º
½½
ÅÄ Ë Ñ È ÖØ ¾
Ø ØÝÔ ×º
Ï¿
Ê ÓÑÑ Ò Ø ÓÒº
ØØÔ »»ÛÛÛºÛ¿ºÓÖ »ÌÊ»ÜÑÐ× Ñ ¹¾»¸
Å Ý ¾¼¼½º
½¾
浅海º
Ê Ð Ü Öº
Ñ Ö ¾¼¼½º
ピアソン・エデュケーション¸