2012-04-16 9 views
2

xml:langという属性を持ついくつかの要素を含むxml文書があります。XSD内のxml:langの値を制限/列挙する

属性の値に許容される値を制限する必要があります。すなわち、「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> 

は、名前空間をインポートするために取得するには、十分に困難だったと私は見つけることができないようそれに制限/列挙を追加することで何か良いリソース=(

答えて

1

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

)迅速な(と汚いやり方がにありますローカルマシン上に元のxml.xsdをコピーします。 xml:lang属性に必要な定義を持つようにxml.xsdファイルを編集します。 (例えばダングリングタイプを使用する場合はカタログなど)、または単純にxsd:を変更したファイルにインポートして、スタック/ツールに修正された定義を使用するよう指示します。いくつかのツールはxml.xsdの内部のキャッシュされたコピーを使用するのに十分なほど頑丈なので、場合によっては動作しないこともあります。あなたのスタックを指定していないので、コメントできません。

xsd:redefineは、型とパーティクルと属性のグループに対してのみ機能するため、XSD 1.0ではこれを行うためのきれいな方法はありません。 xml:langはxsd:language型のものなので、それを再定義してあなたが望む列挙体にのみ制約する方法はありません。

xsd:XSD 1.1のオーバーライドでは、制約のない置換が可能です。残念ながら、私は新しいXSDバージョンの主流の実装を見て驚くでしょう。

+0

私のローカルマシンにxml.xsdをコピーするのは、私がやっていることですが、それは不適切だと思っていました。 それは残念ですが、私はそのタイプについて列挙できませんが、非常に役立つ説明に感謝します! 現在、検証のためにxmllintを使用しています。 – Jimmerz28