XML Schemaを利用したXML文書構造の定義方法について紹介していきます。
まずは簡単なXML Schemaのサンプルを見てみましょう。
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="books"> <xsd:complexType> <xsd:sequence> <xsd:element name="book"> <xsd:complexType> <xsd:sequence> <xsd:element name="title" type="xsd:string" /> <xsd:element name="price" type="xsd:decimal" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
XML SchemaもXML文書であるため、1行目はこれまでどおりXML宣言を記述します。
XML Schemaのルート要素は「xsd:schema」となります。XML Schemaの要素であることを示すため、名前空間の仕組みを使用します。URIには「http://www.w3.org/2001/XMLSchema」指定します。プレフィックスには「xsd」をつけることが慣用的となっています。XML Schemaを定義する際、3行目の内容は固定行と考えても良いでしょう。
要素を取り決める
XML Schemaでは、要素の取り決めを「xsd:element」要素で行います。上記サンプルでは「books」「book」「title」「price」の4つの要素を取り決めています。
<xsd:element name="要素名" type="データ型" />
「title」「price」要素のように、要素の内容がテキストのみの場合、「xsd:element」要素のみを記述します。それが最も単純な要素の定義です。閉じタグのない「xsd:element」タグの最後に「/>」で閉じるのを忘れないよう注意してください。
name属性は要素名を、type属性は要素配下に含まれるテキストのデータ型を指定します。type属性等で指定できるデータ型は、XML Schemaで用意されているものだけでも大変豊富にあります。上記サンプルではstring型(文字列型)とdecimal型(実数型)を指定しています。他にどのようなデータ型があるかここでは割愛しますが、一度ではとても覚えきれない程用意されています。また、自身で新しい型を定義することも可能です。
「要素の内容」に要素を含む要素の定義
XMLはツリー構造となっていますので、当然、要素の内容として要素を持つことができます。「books」「book」要素のように、要素の内容を要素とする場合は、「xsd:complexType」要素を指定します。
<xsd:element name="books"> <xsd:complexType> <xsd:sequence> <xsd:element name="book"> <xsd:complexType> <xsd:sequence> <xsd:element name="title" type="xsd:string" /> <xsd:element name="price" type="xsd:decimal" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
「xsd:complexType」要素は子要素群、属性を定義するためのもで、上記サンプルでは「books」要素の子要素に「book」、「book」要素の子要素に「title」と「price」要素を持ちます。
また、子要素群の定義を「xsd:sequence」要素で囲むことで、配下の子要素が「定義の記述順に登場しなければならない」という規則を取り決めています。