制約ファセット(1): 数値の制約ファセット

2002年7月14日(日)更新


■制約ファセット

たけち: 前回は単純型における制限(restriction)を使ったユーザ派生データ型の定義の方法を学んだよね。

さらら: えぇ。で、それには制約ファセットというものを使う、ということを学んだわ。

たけち: 今回からは、そのほかにどんな制約ファセットがあるのか見てみよう。

さらら: 前回は、「最小値」を定義するminInclusiveと「最大値」を定義するmaxInclusiveというが出てきたわね。

たけち: そうだね。でも、minInclusiveだけが「最小値」じゃないし、maxInclusiveだけが「最大値」というわけじゃないんだよ。

さらら: えっ、「最小値」「最大値」を示すものが他にもあるの!?

さらら


■minExclusiveとmaxExclusive

たけち: うん。minExclusiveというのと、maxExclusiveというのがあるんだよ。minInclusiveは指定したその数値も含めた最小値だけれども、minExclusiveはその数値を含めない最小値になるんだ。

さらら: あっ、そうなの。

たけち: 英語でinclusiveは、"…を含めて"という意味で、exclusiveは、"…を除いて"という意味なんだよ。

さらら: あっ、なるほど〜。

たけち: つまり、前回のように
  <xsd:minInclusive value="0" />
と書くと "0以上" という意味になるけれど、
  <xsd:minExclusive value="0" />
と書くと "0より上" という意味になるんだ。

さらら

さらら: そうなんだぁ。じゃあ、maxExclusiveというのも同じような意味なのね。

たけち: うん。同様にmaxInclusiveはその数値も含めた最大値だけれども、maxExclusiveはその数値を含めない最大値になるんだね。つまり、前回のように
  <xsd:maxInclusive value="100" />
と書くと "100以下" という意味になるけれど、
  <xsd:maxExclusive value="100" />
と書くと "100未満" という意味になるんだよ。

さらら: なるほど。

たけち: 例えば前回のスキーマをこんなふうに改造してみるね。

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="kokugo_test" type="TestPointType" />

<xsd:simpleType name="TestPointType">
<xsd:restriction base="xsd:int">
  <xsd:minExclusive value="0" />
  <xsd:maxExclusive value="100" />

</xsd:restriction>
</xsd:simpleType>

</xsd:schema>

たけち: 前回は「0以上で100以下の整数」という意味だったけれど、これは「0より上で100未満の整数」つまり1〜99の整数という意味になるんだよ。

さらら: なるほど、そうなるわけね。わかったわ。


■totalDigitsとfractionDigits

たけち: 数値関係の制約ファセットとしては他にtotalDigitsfractionDigitsがあるよ。totalDigitsは桁数の最大値を規定するし、fractionDigitsは小数部の桁数の最大値を規定するんだ。

さらら: ふ〜ん。。

たけち: 次の例を見て。

たけち

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="number" type="NumberType" />

<xsd:simpleType name="NumberType">
<xsd:restriction base="xsd:nonNegativeInteger">
  <xsd:totalDigits value="2" />
</xsd:restriction>
</xsd:simpleType>

</xsd:schema>

たけち: この例では、xsd:nonNegativeInteger、つまり "0以上の整数" を基準型にして、totalDigitsを "2桁まで" と規定しているんだ。つまりは、0〜99の整数を範囲とする単純型になるんだね。

さらら: なるほど〜。で、fractionDigitsはどう使うの?

たけち: そうだね。それについては次の例を見て。

たけち

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="number" type="NumberType" />

<xsd:simpleType name="NumberType">
<xsd:restriction base="xsd:decimal">
  <xsd:fractionDigits value="2" />
</xsd:restriction>
</xsd:simpleType>

</xsd:schema>

たけち: この例では、xsd:decimal、つまり "10進数" を基準型にして、fractionDigitsを "2桁まで" と規定しているんだ。ということは、1.25のように小数部が2桁までの数値が許されるけど、たとえば、1.156のように小数部が3桁の実数は許されない、ということになるね。

さらら: うん。やっとわかったわ。でも、制約ファセットっていろいろな種類があるのね。

たけち: そうだよ。次回は文字列関係の制約ファセットを勉強しようね。

さらら: えっ? あ、まだあったのね (^ ^;

たけち: さっ、さらら。。。(^ ^;

→ たけち、あせりつつも制約ファセット(2): 文字列の制約ファセットにつづきます。。。。 (^ ^)v

さらら


XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。