スペース区切りのリスト値に対してデータ型とデータ個数の制限を定義するには、<xsd:list>要素と<xsd:restriction>要素を使い2段階に分けて設定し、制約には<xsd:maxLength>要素などを指定します。
カテゴリ | XML Schema | |
関連要素 | <xsd:restriction>、<xsd:list>、<xsd:maxLength> | |
関連記事 | XML Schemaで文字列パターンを定義する XML Schemaで選択型の値を定義する |
|
XML文書では、以下のようにスペース区切りのリスト値を記述することができます。例えば、以下のようにです。
<keywords>JSP サーブレット Tomcat J2SE</keywords> |
これによって、XML文書は不特定個数の列挙値をコンパクトに記述する術を提供しているというわけです。XML Schemaはこうしたリスト値に対しても、リストに含むことができるデータ型とデータ個数の制限を定義することが可能です。
以下に、具体的な例を見てみましょう、なお、対象となるXML文書については、別稿「XML Schemaで文字列パターンを定義する」で用いたbook.xmlを使用します。
[books_list.xsd] |
リスト値のデータ型と個数の制約を指定するには、以下の2段階のステップを踏む必要があります。
まずは、ノード値がリスト構成となっていること、かつ、リストに含まれるデータの型を単純型として定義していることです。これを規定しているのが、以下の部分です。
<xsd:simpleType name="keywords_type"> |
<xsd:list>要素は、データ値が「itemType属性で指定されたデータ型のリスト」であることを規定します。この場合、文字列型データのリストを定義しています。
(1)で定義されたリスト型に対して、さらに制約条件を規定しているのが以下の部分です。
<xsd:element name="keywords"> |
すでに定義された単純型“keywords_type”をベースとして、さらに制約を設けているわけです。ここでは、<xsd:maxLength>要素で「リストに含むことができるデータの個数」を定義しています(リストに含まれる個々の文字列データの最大長ではない点に注意してください。その場合は、一度、文字列長を規定された文字列型を定義しておき、それを元にしてリスト型を生成する必要があります)。リストに含まれる個数が指定値5を超えた場合に、パーサ検証はエラーとなります。
ちなみに、リスト型に対する制約は、ほかにも
などがあります。<xsd:length>、<xsd:minLength>要素については、<xsd:maxLength>要素同様、リストに含まれる個数(サイズ)の制約である点に注意してください。<xsd:enumeration>、<xsd:pattern>要素については、別稿「XML Schemaで文字列パターンを定義する」「XML Schemaで選択型の値を定義する」をそれぞれ参照してください。
実際に、妥当性検証を行いたい場合には、別稿「XML SchemaでXML文書の妥当性を検証する」のサンプルを参考にするとよいでしょう。変更個所は、XMLSchemaCache.addメソッドの第2引数(XML Schemaのファイル名)のみです。スキーマ文書を書いてみるだけでは、スキーマ文書そのものの妥当性を判断できませんが、パーサの処理を介することでスキーマの正否を確認できます。
Copyright © ITmedia, Inc. All Rights Reserved.