目次へ

1. XML Schema

本章では、XMLのスキーマ言語、XML Schemaについて、説明します。

1.1 DTDの問題

XMLはSGMLの後継言語ということもあり、XML勧告でもSGMLから引き継いだDTDをスキーマ言語として説明しています。スキーマ言語とは、XML文書の骨組みを決めるものです。XML文書を扱う場合には、XML文書を処理してアプリケーションに引き渡す、XMLパーサといわれるモジュールを使用します。XMLパーサは、XML文書をタグとテキストに分解して、要素や属性の値を取り出して、アプリケーションに渡します。その際、タグ付けがきちんとなされているか、チェックするとともに、文書がスキーマに沿った文書であるか解析する働きもします。スキーマに沿った文書であるか、確認することをValidationといいます。スキーマに沿ったXML文書がvalidなXML文書です。

image

現在、XMLがインターネット上でのデータ交換の基盤技術として広く認識されています。しかし、XMLはそれを処理するアプリケーションがあってはじめて有効になります。XML文書を受け取って処理するアプリケーションを開発をしなければなりません。ところで、XMLパーサはXML文書がDTDに沿っているか、確認する機能を備えています。XMLパーサにより充分解析された状態で文書を受け取ることができれば、アプリケーションの開発はより簡単になります。

しかし、DTDでは、機能が充分ではありません。DTDの短所には以下のものが挙げられます。

  • 貧弱なデータ型指定
  • Namespaceに対応していない
  • XMLの構文に従っていない.

以上の問題点について、詳しく見ていきます。

まず、データ型指定です。以下に例を示します.

<?xml version="1.0"?> 
<purchaseOrder orderDate="1999-10-20">
<shipTo country="US">
<name>Alice Smith</name>
<address>123 Maple Street,Mill Valley,CA </address>
<zip>90952</zip> 
</shipTo> 
</purchaseOrder> 

上の例は、注文情報を記したXML文書です。purchaseOrder要素のorderDate属性は、注文した日時を表します。この文書を扱う人は、属性の値には、"yyyy-mm-dd"形式の日付情報が設定されていてほしいでしょう。"abc"等の文字列がorderDateの属性値として設定されている場合は、エラーにしたいと思います。ところが、DTDでは、属性値の型として設定できるのは、CDATAやNMTOKENなど、非常に限られたもののみです。また、zip要素は郵便番号を表します。よって、zip要素の内容は5桁の数字である必要があります。ところが、DTDは要素の内容のデータ型を指定することができません。以上のように、DTDでは要素や属性値のデータ型に制限を加えることができません。データ型を指定する場合は、XMLパーサではなくアプリケーションで行う必要があります。

また、DTDはNamespaceに対応していません。

image

XMLの利用が拡大し、XMLにより作成された言語も増えれば、既存のXML文書をモジュールとして再利用する方が賢明です。NamespaceはXML文書をモジュール化して再利用するために、制定された概念です。XMLで作成された言語それぞれに、「日本語」「英語」などのように、「paperinfo」「peopleinfo」と言語に名前を付け、それぞれのタグが「何語」で書かれたタグか記述することによって、複数の「言語」が混在するXML文書も処理できるようにします。

複数の「言語」をひとつの文書内で使用した場合、XMLパーサは、複数のスキーマを参照する必要があります。例えば、上の例ですと、1行目のpaper要素を検証する際は、paperinfo言語のスキーマ、DTDを参照して、適切であるか判断する必要があります。また、name要素が適切な構文になっているか、というのは、別のpeopleinfoスキーマを参照する必要があります.ところが、DTDは「複数の言語」を同じ文書の中に使用することができません。ひとつの文書内で複数のDTDを参照できないのです。ですから、複数の言語を使用したXMLのValidationは不可能で、XMLパーサはWell-formedであるかどうかしか、確認できません。また、Namespaceを考慮したDTDを記述しようとすると、Namespace接頭辞の宣言が決まった場所しかすることができない、等柔軟性が損なわれる点に関しては、前章に記述した通りです。

最後に、DTDはXMLの構文に対応していません。XMLパーサはXML文書をvalidationするとき、スキーマ言語とXML文書、両方読み込んで照らし合わせます。ところが、スキーマ言語とXML文書が異なる構文の場合は、それぞれの構文を解釈できるように、XMLパーサを作らなくてはいけません。これは、余計な負荷がかかります。XML文書を記述する私たちにとっても、DTDとXML文書で、異なる構文を理解し習得しなければいけないというのは、大変です。

このように、XMLをデータ交換技術として実際に使用していくにつれ、DTDの機能の欠点が顕著になってきました。DTDの問題点を包括するような、新しいスキーマ言語の策定が必要とされるようになってきたのです。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp