値制約

値制約は、 単純タイプが表すことのできる値の限度を定義して、単純タイプを詳細にします。

エレメントが取ることができる値を制約できると、 メッセージをビジネス規則に準拠させられるなど、役立つ場合がよくあります。 このトピックでは、値制約を単純タイプに追加して、それを基にしたすべてのエレメントの値を制約する方法を説明します。

ここで述べられているほとんどの値制約は、XML スキーマ・ファセットによりモデル化され、 単純タイプに関連しています。 ただし、デフォルト値および固定値をエレメントに対して定義でき、それらはエレメントそのものと関連付けられます。

ヒント: メッセージ・セットが WebSphere Business Integration Message Broker にデプロイされる場合は、 あらゆる違反がエラーや警告として報告されるようにするため、すべての値制約を妥当性検査することができます。

値制約のタイプ

デフォルト値
空のエレメントが入力メッセージにある場合、 そこにはデフォルト値が割り当てられます。 あるエレメントが入力メッセージから完全に欠落している場合、値は割り当てられません。

ある属性が入力メッセージから欠落している場合、そこにはデフォルト値が割り当てられます。

デフォルト値制約は、エレメントそのものと関連しているために継承できません。

注: メッセージ・セットを WebSphere Business Integration Message Broker にデプロイするとき、上記の動作が適用されないこともあります。 この違いの詳細については、 論理モデルとの関係 のトピックで適切な物理形式を参照してください。
固定値
エレメントが入力メッセージ内に現れる場合、その値は指定された固定値でなければなりません。 空のエレメントが入力メッセージにある場合、そこには固定値が割り当てられます。 あるエレメントが入力メッセージから完全に欠落している場合、固定値が割り当てられます。

属性が入力メッセージ内に存在する場合、それには固定値がなければなりません。 ある属性が入力メッセージから欠落している場合、そこには固定値が割り当てられます。

固定値制約は、エレメントそのものと関連しているために継承できません。

注: メッセージ・セットを WebSphere Business Integration Message Broker にデプロイするとき、上記の動作が適用されないこともあります。 この違いの詳細については、 論理モデルとの関係 のトピックで適切な物理形式を参照してください。
長さ制約 : LengthMin LengthMax Length
長さ制約を使用して、単純タイプを基にしたすべてのエレメントの長さを制約したり、単一値に限定することさえできます。

長さ制約は、xsd:hexBinaryxsd:base64Binary、 または xsd:string (xsd:normalisedString などのビルトイン・スキーマ・タイプを含む) から派生した単純タイプに適用できます。

長さ制約は祖先タイプから継承され、 単純タイプ用に定義された長さ制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 たとえば、タイプ「longString」(Max Length=100) をタイプ「shortString」(Max Length=10) から派生させるのは正しくありません。

注: WebSphere Business Integration Message Broker の場合、 デフォルトでは、Length 値制約は、 メッセージ・セットが BAR ファイルに追加される時に Max Length 制約に変換されます。 これにより、固定長データ構造 (固定幅フィールドに合うようにストリングが埋め込まれる傾向がある) の場合に、 WebSphere Business Integration Message Broker が偽りの妥当性検査エラーを出すことを避けられます。 長さの厳密な妥当性検査が必要な場合、 フラグ「Max Length としての長さファセットの処理 (Treat Length facet as Max Length)」を変更することにより、 メッセージ・セット・プロパティー内でこのデフォルトを変更できます。
範囲制約 : Min InclusiveMax InclusiveMin ExclusiveMax Exclusive
範囲制約は、単純タイプを基にしたすべてのエレメントに対して値の許容範囲を指定します。 包括的制約は、許可された範囲内の指定されたエンドポイントを組み込みますが、 排他的制約はそれを組み込みません。 範囲制約は、数値的である単純タイプまたはカレンダーと時間値に関係する単純タイプに適用できます。 ストリング値の順序付けは使用されている文字セットに依存しているため、範囲制約はストリングには適用できません。

範囲制約は祖先タイプから継承され、 単純タイプ用に定義された範囲制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 たとえば、タイプ「largeNumber」(Max Inclusive=100) をタイプ「smallNumber」(Max Inclusive=10) から派生させるのは正しくありません。

メッセージ・モデルは、排他的制約を非整数タイプ (float、decimal、double、dateTime など) に適用することを許可していません。

列挙制約
列挙制約は、単純タイプを基にしたすべてのエレメントに対して単一の許可値を指定します。 許可値のリストは、同じ単純タイプに対して複数の列挙制約を定義することにより指定できます。 列挙制約は、すべての単純タイプに適用できます。

列挙制約は祖先タイプから継承され、 単純タイプ用に定義された列挙制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 たとえば、タイプ「AllColours」(レインボーのすべての色の列挙を持つ) を、タイプ「MonoColours」(「黒 (black)」と「白 (white)」の列挙を持つ) から派生させるのは正しくありません。

精度制約 : 合計桁および小数桁
精度制約は、10 進値のみに関係しています。 精度制約は、単純タイプを基にしたすべてのエレメントに対して有効数字 (合計桁) の数と小数位の数 (小数桁) を制限します。 精度制約は、xsd:decimal から派生した単純タイプのみに適用できます。

精度制約は祖先タイプから継承され、 単純タイプ用に定義された精度制約によってそのいずれかの先祖タイプにより定められた制約を緩めてはなりません。 たとえば、タイプ「veryPrecise」(Fraction Digits=10) をタイプ「notVeryPrecise」(Fraction Digits=1) から派生させるのは正しくありません。

パターン制約
パターン制約は、単純タイプを基にしたすべてのエレメントに対して許可値のセットを指定する正規表現です。 同じ単純タイプに対して複数のパターンを定義でき、 複雑な妥当性検査規則を論理的に分離した部分で表現することができます。 単純タイプに対する各パターン制約は、 それを基にしたエレメントに対する許可値のセットに寄与します。 言い換えれば、すべてのパターンはブール OR を使用して結合されます。

すべての値制約と同様、単純タイプは、パターン制約の基となっている単純タイプからパターン制約を継承できます。 この場合、単純タイプそのものが寄与するセットだけでなく、 各祖先タイプが寄与するパターン制約のセットも満たす必要があります。 つまり、タイプ階層の各レベルから取られたパターン制約のセットは、ブール AND を使用して結合されます。

パターン制約は、xsd:string から派生した単純タイプのみに適用できます。

空白制約
空白制約は、単純タイプを基にしたすべてのエレメントに対してパーサーが空白文字を処理する方法を指定します。
注: WebSphere Business Integration Message Broker の場合の MRM 物理形式では、 メッセージに定義された物理形式ごとに非常に厳密に空白文字を制御することはできませんが、 それらの物理プロパティーは、論理モデルの空白制約とは別です。

関連概念
メッセージのモデル化の概念
メッセージ・モデル・オブジェクト
複合タイプ
タイプ継承
MRM ドメイン内の物理形式
カスタム・ワイヤー形式 - 論理モデルとの関係
XML ワイヤー形式 - 論理モデルとの関係
タグ付き/区切りストリング形式 - 論理モデルとの関係