假设我有以下xml:
<root>
<node attr1="1" />
<node attr1="1" attr2="2"/>
<node attr1="1" attr3="3"/>
</root>
除root之外的所有节点都需要atrr1,但其他属性可以组合。允许的唯一组合是: 1. attr1本身 2. attr1,attr2 3. attr1,attr3
attr2和attr3不能组合在一起显示。
我一直在尝试使用xsd来尝试并有条件地评估属性的组合,但似乎几乎不可能,因为我不能将xsd文件中的多个元素命名为节点。有没有办法绕过这个或甚至有条件地检查属性组合?如果没有,有没有人看过工作?
答案 0 :(得分:1)
您只能告诉它需要attr1,并且attr2和attr3是可选的。我不知道在XSD架构中定义(对于XML 1.0),你不能同时拥有attr2和attr3。 之后你必须有一些东西验证它以检查那个组合。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="node">
<xs:complexType>
<xs:attribute name="attr1" type="xs:int" use="required" />
<xs:attribute name="attr2" type="xs:int" use="optional" />
<xs:attribute name="attr3" type="xs:int" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
编辑: 我遇到了另一个线程,其中有人想要像你一样进行一些复杂的验证,并在其中一条评论中提供了一个链接,这篇文章也谈到了Co-occurrence constraints这就是你所追求的并且是为1.1版本实现的。我也参考了这篇详细的文章XML Schema 1.1, Part 2: An introduction to XML Schema 1.1。不幸的是,XML 1.1似乎没有被广泛支持。