我想强制执行唯一属性。我已经阅读了很多指南并尝试了很多配置,但我似乎无法得到它。我使用了两种不同的验证器,XML Copy Editor和http://www.xmlvalidation.com/。我做错了什么?
以下是被认为有效的xml:
<?xml version="1.0"?>
<stuff xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com test.xsd">
<thing att="hi">
<test>Hi</test>
</thing>
<thing att="hi">
<test>Hi</test>
</thing>
</stuff>
这是架构:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="stuff">
<xs:complexType>
<xs:sequence>
<xs:element name="thing" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="test" type="xs:string"/>
</xs:sequence>
<xs:attribute name="att" type="xs:string"/>
</xs:complexType>
<xs:unique name="thing">
<xs:selector xpath="thing"/>
<xs:field xpath="@att"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:0)
要正确验证XML文档,您必须执行以下操作:
xs:unique
声明移至stuff
元素声明(thing
元素没有名为thing
的子元素; XPath表达式相对于父元素)。您的XSD应该重写如下:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns:p="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="stuff">
<xs:complexType>
<xs:sequence>
<xs:element name="thing" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="test" type="xs:string"/>
</xs:sequence>
<xs:attribute name="att" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="thing">
<xs:selector xpath="p:thing"/>
<xs:field xpath="@att"/>
</xs:unique>
</xs:element>
</xs:schema>