0

次のxmlがあるとします。

<root>
    <node attr1="1" />
    <node attr1="1" attr2="2"/>
    <node attr1="1" attr3="3"/>
</root>

ルートを除くすべてのノードで atrr1 が必要ですが、他の属性は組み合わせを形成できます。許可される唯一の組み合わせは次のとおりです。 1. attr1 自体 2. attr1、attr2 3. attr1、attr3

attr2 と attr3 を組み合わせて表示することはできません。

xsd を使用して属性の組み合わせを条件付きで評価しようとしましたが、xsd ファイル内の複数の要素をノードとして指定できないため、ほとんど不可能に思えます。これを回避する方法や、属性の組み合わせを条件付きでチェックする方法はありますか? そうでない場合、回避策を見た人はいますか?

4

1 に答える 1

1

attr1 が必須であり、attr2 と attr3 がオプションであることのみを伝えることができます。attr2 と attr3 の両方を持つことができない XSD スキーマ (XML 1.0 用) での定義を私が知る方法はありません。その組み合わせを確認するには、後で何かを検証する必要があります。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="node">
          <xs:complexType>
            <xs:attribute name="attr1" type="xs:int" use="required" />
            <xs:attribute name="attr2" type="xs:int" use="optional" />
            <xs:attribute name="attr3" type="xs:int" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

編集:誰かがあなたのような複雑な検証を望んでいて、コメントの1つにリンクが提供されている別のスレッドに出くわしました。これは、あなたが求めているものであり、XMLバージョン1.1に実装された共起制約について話している記事です。また、この記事「 XML Schema 1.1, Part 2: An Introduction to XML Schema 1.1 」で詳細を説明している記事にも出くわしまし た。残念ながら、XML 1.1 は広くサポートされていないようです。

于 2013-10-30T21:46:45.060 に答える