XML文書の構造定義について(2)
IT・情報処理室のMです。
前回はXML文書の構造を定義するためスキーマ言語の『DTD』について説明しましたが、今回は『XML Schema』について書いてみたいと思います。
ですがその前に、「毎回XMLについて偉そうに説明しているけど、本当に理解した上で説明してるの?」等の疑問の声が聞こえてきそうですが、私自身、ベンダーニュートラルな資格ではあるのですが、【XMLマスター:ベーシック】【XMLマスター:プロフェッショナル(アプリケーション開発)】という資格を数年前に取得しておりまして、その際に脳みそがオーバーヒートをするのではないかと思うくらい勉強し、XMLについての基礎知識は蓄えたつもりなので、たぶん大丈夫かと… (^_^;)
それでは気を取り直して、前回のDTDを参考にしてXML Schemaを実際に記述してみたいと思います。
●前回のDTD記述例
<!DOCTYPE root[
<!ELEMENT root (data*)>
<!ELEMENT data (firstName, lastName)>
<!ATTLIST data age CDATA #REQUIRED>
<!ELEMENT firstName (#PCDATA)>
<!ELEMENT lastName (#PCDATA)>
]>
●前回のDTDを参考にして作成したXML Schema記述例
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="data" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="age" type="xsd:nonNegativeInteger" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name=" firstName " type="xsd:string" />
<xsd:element name=" lastName " type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
どうですか。 上記の記述例でDTDとXML Schemaとでは文法が全然違うことが分かると思います。
そもそもなぜDTDとXML Schemaの記述方法が異なるのかというと、DTDはもともとSGML※1のスキーマ言語として開発された言語であり、現在でもHTML・XHTML等の文書構造定義として使用されております。
ですが最近では、スキーマ言語としてDTDを使用するケースは少なくなる傾向にあるそうで、その理由としては『XMLの文法とは異なる文法を採用している』『名前空間に対応していない』『データ型が定義できない』等の柔軟性に欠けることが考えられます。
その点、XML Schema はDTDの欠点を補う文書構造定義の方法として考案されており、『XML形式で記述できる』『データ型を定義できる』『名前空間を利用できる』等の拡張性に優れたスキーマ言語となっています。
「それじゃDTDを使わないでXML Schemaだけで文書構造定義をすればいいのでは?」と思ってしまいそうですが、上記の記述例を見てわかるように構造が複雑な上、扱えるデータ型の種類も豊富に存在するため、実際に文書構造定義を作成する際にはそれなりの知識が必要となりますし、また、同じ内容の定義をするにも何通りもの記述方法が可能なため、 取り扱いは煩雑なものとなります。
それではXML Schema記述例について説明していきたいのですが、前説が長くなってしまったので、次回に詳しい説明をしたいと思いますm(_ _)m。
※1 SGML(Standard Generalized Markup Language)は、主にマニュアル等の文書作成のためのマークアップ言語