我已經經歷了許多網站,然後創建了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