Xml 从两个或两个都没有的XSD模式中放入一个属性

Xml 从两个或两个都没有的XSD模式中放入一个属性,xml,xsd,Xml,Xsd,我正在处理一个XSD模式,我面临这个问题,我希望元素X在两个可能的属性中只有一个属性,或者根本没有属性 <a Attribute1="something"/> --> validates <a attribute2="another thing"/> --> validates <a attribute1="something" element2="another thing"/> --> validation failed. <a/&

我正在处理一个XSD模式,我面临这个问题,我希望元素X在两个可能的属性中只有一个属性,或者根本没有属性

<a Attribute1="something"/> --> validates
<a attribute2="another thing"/> --> validates
<a attribute1="something" element2="another thing"/> --> validation failed.
<a/> --> validates
-->验证
-->证实
-->验证失败。
-->证实
我尝试了一些东西,但它允许这两个属性,这就是a想要避免的

<xsd:element name ="a">
<xsd:complexType>
    <xsd:attribute name ="attribute1" type="xsd:string" use="optional"/>
    <xsd:attribute name ="attribute2" type="xsd:string" use="optional"/>
</xsd:complexType>  
</xsd:element>

我还尝试了这段代码,它没有验证0属性标记

<xsd:key name="key">
            <xsd:selector xpath="."/>
            <xsd:field xpath="@attribute1|@attribute2"/>
        </xsd:key>  


有人提出了解决方案或想法吗?

@sergioFC已经回答了您的问题。XSD 1.0无法表示属性之间的交叉依赖约束。在XSD1.1中,可以使用断言或条件类型赋值。Xerces、Saxon和Altova目前支持XSD1.1

@sergioFC已经回答了你的问题。XSD 1.0无法表示属性之间的交叉依赖约束。在XSD1.1中,可以使用断言或条件类型赋值。Xerces、Saxon和Altova目前支持XSD1.1

@sergioFC已经回答了你的问题。XSD 1.0无法表示属性之间的交叉依赖约束。在XSD1.1中,可以使用断言或条件类型赋值。Xerces、Saxon和Altova目前支持XSD1.1

@sergioFC已经回答了你的问题。XSD 1.0无法表示属性之间的交叉依赖约束。在XSD1.1中,可以使用断言或条件类型赋值。Xerces、Saxon和Altova目前支持XSD1.1

如果您使用的是XSD 1.1,您可以使用xs:assert count(@*)如果您使用的是XSD 1.1,您可以使用xs:assert count(@*)如果您使用的是XSD 1.1,您可以使用xs:assert count(@*)谢谢,我的问题谢谢,我的问题谢谢,我的问题谢谢,我的问题谢谢,这回答了我的问题