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>

该解决方案的问题在于它允许两种禁止的方式:

<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

不幸的是,这在 XSD 1.0 中是不可能的。您要么必须在 XSD 1.0 之上使用 Schematron 断言,要么依赖 XSD 1.1断言类型替代方案 (刚刚在 4 月 5 日伪造为 W3C rec)和兼容的处理器(没有免费的,可用的很少)。

于 2012-04-09T11:16:14.307 回答