5

以下のコードのように、特定の文字セットと特定の最大長である必要がある文字列である xsd:simpleType を扱っているとします。

<xsd:simpleType name="MyType">
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="[0-9]" />
    <xsd:maxLength value="36" />
    </xsd:restriction>
</xsd:simpleType>  

したがって、私の xsd タイプは数字のみの文字列で、最大 36 文字です。私の質問は、xsd:pattern と xsd:maxLength (または minLength のような他の同様のタグ) が連携できるかどうかです。私の直感はノーです。xsd:restriction 内のパターンまたは長さベースの xsd 要素のみ。したがって、最大長の制限をパターンに追加する必要があります。

Java で xml をアンマーシャリングしてこれをテストしたところ、検証に失敗したことに注意してください。いずれにせよ、私が探しているのは、パターンと maxLength がどのように連携できるかという 2 つの情報です。

4

1 に答える 1

5

制限のすべてのファセットがタイプに適用されます。これは、上記の定義が、指定されたパターンを持ち、長さが 36 文字に制限されている型を定義していることを意味します。

仕様からの関連エントリは次のとおりです。

スキーマ コンポーネントの制約: 単純型制限 (ファセット) 単純型定義 (R と呼ぶ) が別の単純型定義 (B と呼ぶ) を一連のファセット (これを S と呼ぶ) で制限するには、次のすべてが当てはまる必要があります。

1 R の {種類} は B のそれと同じです。

2 {種類} がアトミックの場合、R の {プリミティブ型定義} は B のそれと同じです。

3 R の {facets} は、B の {facet} に S を重ね合わせたものです。

すべてのファセットは個別に適用され、値がすべての制限を満たしている場合にのみ有効と見なされます。これには、特定の型の派生元の型に課せられた制限も含まれます。

したがって、常に検証に失敗する simpleType を作成することができます。pattern値の長さが 37 文字で、maxLength36 文字である必要がある場合、それらのファセットの少なくとも 1 つが常に失敗します。

つまりpattern、特定のタイプの複数の要素は代替として扱われます ( 「ファセットの制約」の「パターン」を参照してください) 。

于 2011-10-21T15:52:10.100 に答える