我已经经历了许多网站,然后创建了Xml架构,其中的其他属性取决于其中一个属性的值。XML验证不验证基于另一个属性的属性
如下XML文件:
<?xml version="1.0"?>
<Main>
<Matter kind="fruits" calories="10" name="apple" quantity="10" color="red"/>
<Matter kind="car" brand="ford" name="ikon" quantity="1" color="red"/>
<Matter kind="country" continent="Asia" name="japan"/>
</Main>
那种属性可以有水果,汽车和国家。并根据属性需要其他参数,如国家值,所需的大陆属性。
和下面的是XSD文件,
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Main">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="Matter"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Matter">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:NCName"/>
<xs:alt cond="@kind='fruits'">
<xs:attribute name="kind" use="required" type="xs:NCName" fixed="fruits"/>
<xs:attribute name="color" type="xs:NCName"/>
<xs:attribute name="quantity" type="xs:integer"/>
</xs:alt>
<xs:alt cond="@kind='car'">
<xs:attribute name="kind" use="required" type="xs:NCName" fixed="car"/>
<xs:attribute name="brand" type="xs:NCName"/>
<xs:attribute name="quantity" type="xs:integer"/>
<xs:attribute name="color" type="xs:NCName"/>
</xs:alt>
<xs:alt cond="@kind='country'">
<xs:attribute name="kind" use="required" type="xs:NCName" fixed="country"/>
<xs:attribute name="continent" type="xs:NCName" use="required"/>
</xs:alt>
</xs:complexType>
</xs:element>
</xs:schema>
当我确认上述XSD的XML文件,我得到的错误“元素ALT是无效的,错位,或过于频繁地发生。
请帮我确认上述文件,在适当的XSD
xs:alt不是有效的Xsd构造。 Xsd不会根据文档的内容进行验证,它只允许验证“形状”。我认为xs:alt可能是模式的扩展,如果是这种情况,您需要使用能够理解如何处理它的验证器。开箱即用,您的文档不是有效的模式,因为它使用的是未在XSD中定义的结构(关键字)。 – Pawel