2

属性 xml:lang を持ついくつかの要素を含む xml ドキュメントがあります。

属性の値に許容される値を制限したい。つまり、「en-US、en-CA」のみを許可します。

制限を追加しようとしましたが、値が参照されているため、有効ではないようです:

<xs:element name="translation">
<xs:complexType>
    <xs:sequence>
    <xs:element ref="name" />
    </xs:sequence>
    <xs:attribute ref="xml:lang" use="required"/>
</xs:complexType>
</xs:element>

名前空間をインポートするのは非常に困難であり、それに制限/列挙を追加するための適切なリソースが見つからないようです=(

4

1 に答える 1

1

残念ながら、それを達成する簡単な方法はありません。あなたが持っているオプションは間違いなくそれほど使用されていません。

手っ取り早い (そして汚い) 方法は、元の xml.xsd をローカル マシンにコピーすることです。xml:lang 属性に必要な定義を持つように xml.xsd ファイルを編集します。そして、いくつかの一般的なメカニズム (たとえば、ダングリング タイプを使用する場合はカタログ) を使用するか、単に xsd:import を変更したファイルに追加して、修正された定義を使用するようにスタック/ツールに指示します。一部のツールは、xml.xsd のキャッシュされた内部コピーを使用するほど頑固な場合があるため、場合によっては機能しないこともあります。現在のスタックを示していないため、コメントできません。

xsd:redefine はタイプ、およびパーティクルと属性のグループに対してのみ機能するため、XSD 1.0 でこれを行う明確な方法はありません。xml:lang は xsd:language 型であるため、それを再定義して必要な列挙のみに制限する方法はありません。

XSD 1.1 の xsd:override は、制約のない置換を可能にします。残念ながら、新しい XSD バージョンの主流の実装を見ると驚かれることでしょう。

于 2012-04-16T19:00:12.960 に答える