我正在使用XSD进行XML验证。我想为input
元素添加唯一值约束。
我有这样的XML格式:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<definitions>
<input>Page</input>
</definitions>
<definitions>
<input>Page</input>
</definitions>
</test>
我的XSD:
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="definitions" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="input"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我想知道xs:unique
应该如何放置。
答案 0 :(得分:2)
放置xs:unique
元素:
test
)
xs:unique/@selector
( definitions
)。 xs:unique
元素
test
的声明xs:complexType
后的test
请参阅以下XSD中的 HERE :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="definitions"
maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="input"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- HERE -->
<xs:unique name="definitions-input-unique">
<xs:selector xpath="definitions"/>
<xs:field xpath="input"/>
</xs:unique>
</xs:element>
</xs:schema>
然后无效 XML
<?xml version="1.0" encoding="UTF-8"?>
<test>
<definitions>
<input>Page</input>
</definitions>
<definitions>
<input>Page</input>
</definitions>
</test>
将收到错误消息,例如以下内容:
[错误] try.xml:7:24:cvc-identity-constraint.4.1:重复唯一 为身份约束声明的值[Page] 元素“test”的“definitions-input-unique”。
答案 1 :(得分:0)
将它放在最高级别:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="definitions" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="input"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="input-values">
<xs:selector xpath="./definitions"/>
<xs:field xpath="input"/>
</xs:unique>
</xs:element>
</xs:schema>