XML文書の構造定義について(1)

IT・情報処理室のMです。

 今回は少し専門的な話題になりますが、XML文書の構造を定義するためスキーマ言語について書いてみたいと思います。

 そもそもDTD・XML Schema・RELAX NG等のスキーマ言語でXML文書の構造を定義しなければならないかというと、例えば複数の方々にXML文書の作成を依頼する場合、それぞれが構造の違ったXML文書を作成してしまうと後々面倒なことになりますので、事前に文書構造を定義をしておくことで統一性を図ることが可能となります。

 また、XML文書内に記述することができる要素やその発生順序・発生回数・要素がもつ属性・属性の型などを記述することができるので、作成されたXML文書が構造に従っているかどうかを検証することも可能になるので、文書構造を定義するメリットは大きいのです。

 それではまず、DTD(Document Type Definition)について説明していきましょう。

 DTDは他のスキーマ言語に比べてシンプルな構造であり、比較的わかりやすいのではないかと思いますので、とりあえず簡単なDTDを記述してみたいと思います。

 ●DTD記述例
 <!DOCTYPE root[
  <!ELEMENT root (data*)>
  <!ELEMENT data (firstName, lastName)>
  <!ELEMENT firstName (#PCDATA)>
  <!ELEMENT lastName (#PCDATA)>
  <!ATTLIST data age CDATA #REQUIRED>
 ]>

 
 どうですか。 いきなり上記の記述だけでは何をしているのかわからないと思いますので、1行目から確認していきましょう。

  • 1行目は『root』というルートタグを宣言している(ルートタグは1つしか持つことができない)。
  • 2行目は『root』という要素を宣言しており、また『data』という要素を複数記述することができる。
  • 3行目は『data』という要素を宣言しており、また『firstName』『lastName』の各要素をもち、さらに『firstName』『lastName』の順で出現しなければならない。
  • 4行目は『firstName』という要素を宣言しており、要素内には文字列が記述できる。
  • 5行目は『lastName』という要素を宣言しており、要素内には文字列が記述できる。
  • 6行目は『data』という要素の『age』という属性リストを宣言しており、また『#REQUIRED』は省略不可であることを意味している。

 今度はどうですか。 やはり説明文だけではわかりづらいので、次は上記の文書構造に準じた形式でXML文書を記述してみたいと思います。

 ●XML記述例
    <root>
        <data age="25">
            <firstName>太郎</firstName>
            <lastName>三報社</lastName>
        </data>
        <data age="20">
            <firstName>花子</firstName>
            <lastName>三報社</lastName>
        </data>
    </root>

 今度はどうですか。 何となく文書構造の意味がわかってきたのではないでしょうか。
 
 『説明不足で全然わからないよ〜』との声が聞こえてきそうですが、それでもめげずに、
次回はXML Schemaについて説明したいと考えております。