ホーム > X-Plus > XML Square >  スタンダーズ

この記事を送る はてなブックマークに追加する BuzzurlにブックマークBuzzurlにブックマーク Yahoo!ブックマークに登録
テキストリンクコードを取得する

スタンダーズコーナー:W3C規格解説 「XML Schema」

2001年05月24日作成 

W3C規格解説
XML Schema
   

(株)日本ユニテック
村上 泰介

XML Schemaとは、XMLのデータ記述方法を定めるための言語です。XMLに関する規格の中でも特に最近話題となっています。XMLのデータ記述方法を定めた言語のことをスキーマ言語といいますが、W3Cが策定にかかわっているスキーマ言語は2つあり、一つはDTD(Document Type Definition)で、もう一つがXML Schemaです。他にもスキーマ言語の候補としてRELAXなどがありますが、XML Schemaが標準になるだろうといわれています。

XML Schema がでてきたのは、XMLが文書データとしてだけでなくビジネスデータとして利用されてゆくにしたがって、DTDではスキーマを記述するのに機能的に不十分だったからです。はやくからこの問題は指摘されていて、W3CもXML Schemaの制定に取り組んできたのですが、機能的にあれもこれも取り入れようとして、作業が遅々として進みませんでした。しかし、2001年5月2日にやっと勧告になりました。

XML Schemaの特徴

XML Schemaの特徴は次のようなものです。

1. スキーマ自体がXMLデータとして表記されている
スキーマ自体がXMLデータとして表記されることにより、これまでのDTDの記述の仕方から大幅に変更されました。また、DTDのような独自のフォーマットではなく、XMLとなったことで、XSLTでスキーマの構造変換をしたり、DOMを使って直接スキーマにアクセスするようなプログラムを作成したりできるようになりました。

2. 要素や属性の値のデータ型や様々な制限を指定できる
要素や属性の値のデータ型に関して、DTDは基本的にすべて文字データで、数値や日付といったデータ型を指定できませんでした。それはXMLの対象が当初は文書データであったからですが、ビジネスデータとして利用されるにつれて、文字データだけでは不十分になりました。XML Schemaは様々なデータ型を指定できますし、アルファベット2文字と数字4桁の組み合わせといった、独自のデータ型を定義することもできます。また、要素の出現回数も、3回以上6回以内といったように、DTDよりも細かく指定できるようになりました。

3. 名前空間を前提に設計されている
名前空間は本来一つのXMLデータ中に複数の名前空間に属する要素や属性を混在させて使おうというものです。その点で、DTDとXMLデータという組み合わせは、1対1対応であり、名前空間とは相容れませんでした。厳密にはDTDで名前空間接頭辞付きの要素型、属性宣言を行えば良いわけですが、前もって複数の名前空間に属する要素間の階層構造を決めなければならず、使用したい場所で名前空間に属する要素を出現させるのが難しくなります。しかし、XML Schemaでは、スキーマ自体が名前空間を持てるので(持たないのもあります)、XMLデータが複数のスキーマに属することができるのです。

4. オブジェクト指向を取り入れている
オブジェクト指向を取り入れています。要素や属性の型の定義を共有したり、継承して制限や拡張を加えたりできる点にみられます。

XML SchemaとDTDの比較

実際にスキーマとそれに適合するXMLデータをみてみましょう。(以下、「スキーマ」はXML Schemaで記述されたスキーマのこととします)

次のようなXMLデータがあるとします。

(XMLデータ)

<?xml version="1.0"?>
<book publicationDate="2001-03-01">
<title>改訂版標準XML完全解説上</title>
<author>(株)日本ユニテック</author>
</book>

このXMLデータのスキーマとDTDは次のように書けます。

(スキーマ)

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="publicationDate" type="xsd:date"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

(DTD)

<!ELEMENT book (title, author) >
<!ATTLIST book publicationDate CDATA #IMPLIED>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>

サンプルのDTDとスキーマを簡単に比較しますと次のようになります。

DTD
スキーマ
要素型宣言
<!ELEMENT book (title, author) >
要素宣言
<xsd:element name="book">...</xsd:element>
内容モデル
title, author
内容モデル
<xsd:sequence>...</xsd:sequence>
データ型
文字データ(CDATA、(#PCDATA)
データ型
文字列(xsd:string)、日付(xsd:date)
属性リスト宣言
<!ATTLIST book publicationDate CDATA #IMPLIED>
属性宣言
<xsd:attribute name="publicationDate" type="xsd:date"/>

このようにDTDとスキーマは大きく異なっているのが分かります。スキーマ自体がXMLだからですが、DTDの要素型宣言がスキーマでは要素宣言、DTDの属性リスト宣言がスキーマでは属性宣言となっています。もちろん名前が代わっただけということではなく、その機能も違います。簡単に言えば、要素の名前の宣言と、その内容モデル(型)を要素型宣言では同時にしていたのですが、スキーマでは、要素宣言と型の定義の2つを別々にしたのです。属性リスト宣言も同様です。

ざっとXML Schemaについて説明しましたが、実際の仕様はかなり複雑で、1冊の本が書けるくらいなので、詳細についてはここでは解説できません。しかし、いずれXML Schema がDTDにとって代わっていくと思われますので、XML Schemaに関する書籍も出てくるでしょう。6月下旬発刊予定の日本ユニテックによる「改訂版・標準XML完全解説(下)」でも取りあげますので、是非お読みください。




関連サービス

XMLスキーマ策定、作成業務
標準化仕様の動向調査
最新動向を伝えるDXメールニュース (無料)



この記事と関連の高い記事

関連キーワード:XMLスキーマ


関連キーワード:XML関連規格




ページトップへ戻る