検索
連載

XML Schemaで値の有効範囲を定義するXMLテクニック集(12)(2/3 ページ)

Share
Tweet
LINE
Hatena

XML Schemaで複数の型を結合する

アイコン

2つ以上の異なる制約条件を1つの要素・属性に対して適用するには、<xsd:restriction>要素と<xsd:union>要素を組み合わせ、2段階の手順を踏んで定義します。

カテゴリ XML Schema
関連要素 <xsd:restriction>、<xsd:union>
関連記事 XML Schemaで文字列パターンを定義する

 HTMLにおける<body>タグを想定してみましょう。例えば、背景色を白に設定したいと思った場合、

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


のようにRGB形式の文字列で指定することも、

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


のように色名で指定することも可能です。

 このように同じ属性であっても、異なる型(体系)で値を指定できるケースが少なくありません。このような場合にも、XML Schemaでは<xsd:union>要素を用いることで、2つ以上の異なる制約条件を1つの要素・属性に対して適用できます。

 ここでは、出版社を表す<publish>要素を出版社番号(整数型)、または、出版者名(文字列型)で指定できるようにスキーマを定義してみます。なお、対象となるXML文書については、別稿「XML Schemaで文字列パターンを定義する」で用いたbook.xmlを参照してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 ここでは、大きく2つのブロックに分けて理解する必要があります。

(1)結合する元となるデータ型を定義

 まずは、結合する元となる2つのデータ型を定義しなければなりません。すなわち、以下の部分です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 ここでは、整数型をベースとした1〜5の値から構成されるpub_number型、文字列型をベースとした列挙値から構成されるpub_string型を規定しています。

(2)既存のデータ型を結合する

 次に、これらのデータ型(単純型)を具体的な要素にひも付けると同時に、結合する必要があります。それが、以下の部分です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 <xsd:union>要素で2つのデータ型を結合し、<published>要素の定義としてセットしています。これによって、<published>要素を整数値、もしくは文字列で指定することが可能になるというわけです。

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


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る