XML Schemaで値の有効範囲を定義する
数値のけた数や小数点以下のけた数、数値の範囲チェックなど、数値データに関する範囲制約を規定するには、<xsd:maxInclusive>要素、<xsd:minInclusive>要素、<xsd:maxExclusive>要素、<xsd:minExclusive>要素を利用します。
カテゴリ | XML Schema | |
関連要素 | <xsd:restriction>、<xsd:maxInclusive>、<xsd:minInclusive> | |
関連記事 | XML Schemaで文字列長を制約する XML Schemaで文字列パターンを定義する |
別稿「XML Schemaで文字列長を制約する」で紹介したように、<xsd:maxLength>、<xsd:minLength>、<xsd:length>などの要素を利用することで、ノード値の文字列長を規定できます。しかし、これらの要素では数値のけた数や小数点以下のけた数、数値の範囲チェックなどは行えませんので、注意が必要です。以下のように記述すると、2〜5けたの整数値を定義しているようも見えますが、これは間違いです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
<xsd:maxLength>要素、<xsd:minLength>要素、<xsd:length>要素による制約は、文字列、バイナリ、あるいはリストにしか適用することができません。
では、数値データに関する範囲制約を規定したい場合には、どうすればよいのでしょうか。説明の前に、具体的なサンプル例を見る方が早いでしょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記例の場合、<price>要素のノード値を1000以上10000以下に規定します。<xsd:restriction>要素配下に、制約条件を記述する構文については、すでに別稿「XML Schemaで文字列パターンを定義する」などで紹介しているので、そちらを参照してください。
それよりも、数値データには多くの制約条件要素が存在しますので、この種類を把握しておくのが先です。以下に、主要な制約要素を挙げてみましょう。
要素名 | 概要 |
---|---|
<xsd:maxInclusive> | 指定値以下であること |
<xsd:minInclusive> | 指定値以上であること |
<xsd:maxExclusive> | 指定値未満であること |
<xsd:minExclusive> | 指定値より大きいこと |
<xsd:totalDigits> | 数値データの総けた数が指定値以下であること |
<xsd:fractionDigits> | 小数点以下のけた数が指定値以下であること |
表 数値データに関する制約条件要素 |
ただし、<xsd:totalDigits>要素は精度があらかじめ規定されていない数値データに関してのみ、<xsd:fractionDigits>要素は小数点型で、かつ、精度があらかじめ規定されていない数値データに関してのみ、それぞれ使用することが可能です。
また、<xsd:maxInclusive>要素、<xsd:minInclusive>要素、<xsd:maxExclusive>要素、<xsd:minExclusive>要素については、数値データのみならず、日付・時刻データの範囲チェックを行う場合にも使用可能です。
実際に、妥当性検証を行いたい場合には、別稿「XML SchemaでXML文書の妥当性を検証する」のサンプルを参考にするとよいでしょう。変更個所は、XMLSchemaCache.addメソッドの第2引数(XML Schemaのファイル名)のみです。スキーマ文書を書いてみるだけでは、スキーマ文書そのものの妥当性を判断できませんが、パーサの処理を介することでスキーマの正否を確認できます。
Copyright © ITmedia, Inc. All Rights Reserved.