以下XSD應驗證fruits
元素中favorite_fruit
元素的name
屬性應僅包含names
,fruit
。下面是XSD:這個xsd有什麼問題?
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Fruit">
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="FruitArray">
<xsd:sequence>
<xsd:element name="fruit" minOccurs="0" maxOccurs="unbounded" type="Fruit"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="fruit_basket">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="fruits" minOccurs="1" maxOccurs="1" type="FruitArray"/>
<xsd:element name="favourite_fruit" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:attribute name="name" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="fruit_lookup">
<xsd:selector xpath="fruits/fruit"/>
<xsd:field xpath="@name"/>
</xsd:key>
<xsd:keyref name="favourite_fruit_constraint" refer="fruit_lookup">
<xsd:selector xpath="favourite_fruit"/>
<xsd:field xpath="@name"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
以下XML應該是有效的,但驗證時是無效的:
<fruit_basket>
<fruits>
<fruit name="Apple"/>
<fruit name="Peach"/>
<fruit name="Bananna"/>
</fruits>
<favourite_fruit name="Apple"/>
</fruit_basket>
任何想法?我的直覺是我的xpath有問題。 PS:我使用lxml來驗證對xsd的xml。
你能告訴我們XML嗎? – Oded 2009-12-18 08:39:10
W3C模式驗證器在http://www.w3.org/2001/03/webdata/xsv表示它沒問題,所以我猜測你的工具已經損壞或者太繁瑣。 – skaffman 2009-12-18 08:41:43
xml已在上述文章中。 – Johan 2009-12-18 08:58:09