値制約は、 単純タイプが表すことのできる値の限度を定義して、単純タイプを絞り込みます。
エレメントが取ることができる値を制約できると、 メッセージをビジネス規則に準拠させられるなど、役立つ場合がよくあります。 このトピックでは、値制約を単純タイプに追加して、それを基にしたすべてのエレメントの値を制約する方法を説明します。
ここで述べられているほとんどの値制約は、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 など) に適用することを許可していません。
列挙制約は祖先タイプから継承され、 単純タイプ用に定義された列挙制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 例えば、タイプ「AllColours」(レインボーのすべての色の列挙を持つ) を、タイプ「MonoColours」(「黒」と「白」の列挙を持つ) から派生させるのは正しくありません。
精度制約は祖先タイプから継承され、 単純タイプ用に定義された精度制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 例えば、タイプ「veryPrecise」(Fraction Digits=10) をタイプ「notVeryPrecise」(Fraction Digits=1) から派生させるのは正しくありません。
すべての値制約と同様、単純タイプは、パターン制約の基となっている単純タイプからパターン制約を継承できます。 この場合、単純タイプそのものが寄与するセットだけでなく、 各祖先タイプが寄与するパターン制約のセットも満たす必要があります。 つまり、タイプ階層の各レベルから取られたパターン制約のセットは、ブール AND を使用して結合されます。
パターン制約は、xsd:string から派生した単純タイプのみに適用できます。