1

これが私の問題です。ノードに、属性またはサブノード(グループから)のいずれかが必要です。例えば:

<set_variable name="bob" value="3/>

また

<set_variable name="bob">
    <.../>
</set_variable>

私がそれをするために見つけた唯一の方法は:

<xs:element name="set_variable" type="setVariableType"/>

<xs:complexType name="setVariableType">
    <xs:sequence minOccurs="0" maxOccurs="1">
        <xs:group ref="arithmeticGroup"/>
    </xs:sequence>
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="value" type="xs:integer" use="optional"/>
</xs:complexType>

<xs:group name="arithmeticGroup">
    ....
</xs:group>

そのソリューションの問題は、2つの禁止された方法を許可することです。

<set_variable name="bob"/> <!-- Should at least have an attribute or a subnode -->

<set_variable name="bob" value="18"> <!-- Should not have both attribute and a subnode -->
    <.../>
</set_variable>

誰かアイデアがありますか?

4

1 に答える 1

2

残念ながら、これはXSD1.0では不可能です。XSD 1.0の上でSchematronアサーションを使用するか、XSD 1.1アサーションまたはタイプの代替 (4月5日にW3Cレコードとして偽造されたもの)と準拠プロセッサー(無料ではなく、利用できるものはほとんどありません)に依存する必要があります。

于 2012-04-09T11:16:14.307 に答える