0

XSDを使用してノード名を列挙に再制限し、この列挙に基づいて別の制限を追加することは可能ですか?

たとえば、私はこのxmlを持っています:

<a>
    <b name="string" value="hello">
    <b name="integer" value="123">
</a>

「b」ノードに列挙型{"string"、"integer"}のname属性を持たせたい。次に、「string」の場合はその「value」属性をxs:stringのタイプにし、「integer」の場合はその「value」属性をxs:integerのタイプにします。

4

3 に答える 3

1

特定の制限を行うことができます。たとえば、name属性の値が特定のリストから取得されるように制限できますが、「名前が文字列の場合、値のタイプは xs:string である必要がある」というXML スキーマ。

他の手法 ( Schematronなど) を使用するか、アプリ コードでこれを確認する必要があります。

マルク

于 2009-08-07T09:06:49.310 に答える
1

いいえ、XSD ではこれを行うことはできません。つまり、タイプの異なる 2 つの <b> があります。これは要素の一貫性ルールに違反しています。

いくつかのオプションがありますが、

  1. アプリケーションで、スキーマ外のルールを適用します。これが私がすることです。
  2. 他の人が述べたように、Schematron のような検証言語を使用します。
  3. Relax NGなどのより強力なスキーマ言語に切り替えます。
于 2009-08-07T11:00:30.017 に答える
0

いいえ。ただし、名前を型のように扱っています。XML スキーマではcomplexType、文字列値によって決定される要素をサポートしています。ただし、XML ドキュメントでは属性名「xsi:type」を使用する必要があるため、次のようになります。

<a>
    <b xsi:type="string" value="hello">
    <b xsi:type="integer" value="123">
</a>

残念ながら、これが XML Schema でできる最善のことです。詳細については、公式の入門書 (残念ながらかなり混乱する可能性があります) を参照してください: http://www.w3.org/TR/xmlschema-0/#UseDerivInInstDocs

于 2009-08-07T10:46:15.600 に答える