XML Schemaの定義

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」要素で囲むことで、配下の子要素が「定義の記述順に登場しなければならない」という規則を取り決めています。