将一个属性放在两个或没有XSD架构中

时间:2014-11-27 23:31:55

标签: xml xsd

我正在处理XSD架构并且我遇到了这个问题,我希望元素X只有两个可能或没有属性中的一个属性,例如

<a Attribute1="something"/> --> validates
<a attribute2="another thing"/> --> validates
<a attribute1="something" element2="another thing"/> --> validation failed.
<a/> --> validates

我尝试了一些东西,但它允许两个属性,这是想要避免的东西

<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>  

任何有解决方案或想法的人?

1 个答案:

答案 0 :(得分:3)

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