連載
» 2004年02月11日 10時00分 公開

XMLテクニック集(10):XML Schemaで選択型の値を定義する (1/3)

[山田祥寛,@IT]

XML Schemaで選択型の値を定義する

アイコン

いくつかの値を選択肢として用意しておき、その中から1つの値を選択するような制約を設けるためには、<xsd:restriction>要素と<xsd:enumeration>要素を組み合わせて使います。

カテゴリ XML Schema
関連要素 <xsd:restriction>、<xsd:enumeration>
関連記事 XML Schemaで複雑型要素を定義する

 例えば、HTMLのalign属性を想定してみましょう。“left”、“center”、“right”のような限られたオプションの中から値を選択して指定しなければならないノード(要素・属性)があります。あらかじめ想定されたオプション値以外を選択した場合には、エラーとすべきケースです。このような選択式のオプションを定義する場合にも、別稿「XML Schemaで複雑型要素を定義する」で紹介した<xsd:restriction>要素を使います。

 具体的な例を見てみましょう。なお、対象となるXML文書については、別稿「XML Schemaで文字列パターンを定義する」で用いたbook.xmlを使用します。

books_select.xsd

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="books">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="book" type="book_type"
          minOccurs="0" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string"
          use="required" />
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="book_type">
    <xsd:sequence>
      <xsd:element name="title" type="xsd:string" />
      <xsd:element name="author" type="xsd:string" />
      <xsd:element name="published" type="xsd:string" />
      <xsd:element name="price" type="xsd:positiveInteger" />
      <xsd:element name="publishDate" type="xsd:date" />
      <xsd:element name="category">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="ASP.NET" />
            <xsd:enumeration value="PHP" />
            <xsd:enumeration value="JSP&サーブレット" />
            <xsd:enumeration value="その他" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>

      <xsd:element name="keywords" type="xsd:string" />
    </xsd:sequence>
    <xsd:attribute name="isbn" type="xsd:string" use="required" />
  </xsd:complexType>
</xsd:schema>


 要素ノードに対して、選択式の制約条件を定義する一般的な構文は、以下のとおりです。

<xsd:element name="要素名" そのほかオプション>
  <xsd:simpleType>
    <xsd:restriction base="基本となるデータ型">
      <xsd:enumeration value="オプション値" />
      <!-- 以下、繰り返し -->
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>


 <xsd:enumeration>要素は、列挙(選択)式のオプション値を指定する際に用います。オプション値は、1つの<xsd:enumeration>要素に対して1つしか指定できませんので、オプション値の種類だけ<xsd:enumeration>要素を列挙する必要があります。

 つまり、本稿の例では、<category>要素に対して“ASP.NET”、“PHP”、“JSP&サーブレット”、“その他”の中からいずれかの値を指定できます。逆に、これら以外の値を含む<category>要素が記述された場合には、検証エラーとなります。

実際に、妥当性検証を行いたい場合には、別稿「XML SchemaでXML文書の妥当性を検証する」のサンプルを参考にするとよいでしょう。変更個所は、XMLSchemaCache.addメソッドの第2引数(XML Schemaのファイル名)のみです。スキーマ文書を書いてみるだけでは、スキーマ文書そのものの妥当性を判断できませんが、パーサの処理を介することでスキーマの正否を確認できます。


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。