我正在处理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>
任何有解决方案或想法的人?
答案 0 :(得分:3)
@sergioFC已回答你的问题。 XSD 1.0无法表达属性之间的交叉依赖性约束。在XSD 1.1中,您可以使用断言或条件类型赋值。 Xerces,Saxon和Altova目前支持XSD 1.1。