値制約は、単純タイプが表すことのできる値の限度を定義して、単純タイプを絞り込みます。
エレメントが取ることができる値を制約できると、メッセージをビジネス規則に準拠させられるなど、役立つ場合がよくあります。 このトピックでは、値制約を単純タイプに追加して、その単純タイプを基にしたすべてのエレメントの値を制約する方法を説明します。
ここで述べられている値制約は、XML スキーマ・ファセットによりモデル化され、単純タイプに関連しています。
長さ制約は、xsd:hexBinary、xsd:base64Binary、または xsd:string (xsd:normalisedString などのビルトイン・スキーマ・タイプを含む) から派生した単純タイプに適用できます。
長さ制約は祖先タイプから継承され、単純タイプ用に定義された長さ制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 例えば、タイプ「longString」(Max Length=100) は、タイプ「shortString」(Max Length=10) から派生させることはできません。
範囲制約は祖先タイプから継承され、単純タイプ用に定義された範囲制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 例えば、タイプ「largeNumber」(Max Inclusive=100) は、タイプ「smallNumber」(Max Inclusive=10) から派生させることはできません。
メッセージ・モデルは、排他的制約を非整数タイプ (float、decimal、double、dateTime など) に適用することを許可していません。
列挙制約は祖先タイプから継承され、単純タイプ用に定義された列挙制約の何らかのセットによって、許可値の範囲を広げてはなりません。 例えば、タイプ「AllColors」(レインボーのすべての色の列挙を持つ) は、タイプ「MonoColors」(「黒」と「白」の列挙のみを持つ) から派生させることはできません。
精度制約は祖先タイプから継承され、単純タイプ用に定義された精度制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 例えば、タイプ「veryPrecise」(Fraction Digits=10) は、タイプ「notVeryPrecise」(Fraction Digits=1) から派生させることはできません。
すべての値制約と同様、単純タイプは、パターン制約の基となっている単純タイプからパターン制約を継承できます。 この場合、単純タイプそのものが寄与するセットだけでなく、各祖先タイプが寄与するパターン制約のセットも満たす必要があります。 つまり、タイプ階層の各レベルから取られたパターン制約のセットは、ブール AND を使用して結合されます。
パターン制約は、xsd:string から派生した単純タイプのみに適用できます。