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