XML Schemaで選択型の値を定義する:XMLテクニック集(10)(1/3 ページ)
いくつかの値を選択肢として用意しておき、その中から1つの値を選択するような制約を設けるためには、<xsd:restriction>要素と<xsd:enumeration>要素を組み合わせて使います。
例えば、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のファイル名)のみです。スキーマ文書を書いてみるだけでは、スキーマ文書そのものの妥当性を判断できませんが、パーサの処理を介することでスキーマの正否を確認できます。
Copyright © ITmedia, Inc. All Rights Reserved.