在 xml 中指定唯一元素
Specify unique element in xml
有人可以找出我的模式有什么问题吗,因为我可以在我的模式中添加重复的 PersonID:
<xs:element name="Persons" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Person" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="PersonID" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="JoinedDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniquePeronID">
<xs:selector xpath="Person" />
<xs:field xpath="@PersonID" />
</xs:unique>
</xs:element>
和我的 xml 类似:
<Persons>
<Person>
<PersonID>69674</PersonID>
<JoinedDate>2006-08-25</JoinedDate>
</Person>
<Person>
<PersonID>69674</PersonID>
<JoinedDate>2006-08-25</JoinedDate>
</Person>
</Persons>
我阅读了以下参考资料但没有帮助我:
How do I ensure unique element values in an XML schema?
https://msdn.microsoft.com/en-us/library/ms256146(v=vs.110).aspx
XML XSD Schema - Enforce Unique Attribute Values in Schema
http://support.liquid-technologies.com/KB/a79/creating-a-unique-constrant-with-an-xsd.aspx
我注意到他们在 xpath 中有 'mstns:' 但在我的情况下我的架构没有它,例如
<xs:field xpath="@PersonID" />
这指定了一个 PersonID
属性(这就是 @
的意思),因此您的模式正在寻找重复的属性。您需要重新措辞以引用子元素。
试试这个:
<xs:field xpath="PersonID" />
您的 xs:unique
约束将按预期工作。
小注:如果 Persons
旨在成为 XSD 中的顶级元素,请删除 minOccurs
和 maxOccurs
,因为它们不允许出现关于顶级元素定义。
另见 Unique constraint in XML Schema
有人可以找出我的模式有什么问题吗,因为我可以在我的模式中添加重复的 PersonID:
<xs:element name="Persons" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Person" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="PersonID" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="JoinedDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniquePeronID">
<xs:selector xpath="Person" />
<xs:field xpath="@PersonID" />
</xs:unique>
</xs:element>
和我的 xml 类似:
<Persons>
<Person>
<PersonID>69674</PersonID>
<JoinedDate>2006-08-25</JoinedDate>
</Person>
<Person>
<PersonID>69674</PersonID>
<JoinedDate>2006-08-25</JoinedDate>
</Person>
</Persons>
我阅读了以下参考资料但没有帮助我: How do I ensure unique element values in an XML schema?
https://msdn.microsoft.com/en-us/library/ms256146(v=vs.110).aspx
XML XSD Schema - Enforce Unique Attribute Values in Schema
http://support.liquid-technologies.com/KB/a79/creating-a-unique-constrant-with-an-xsd.aspx
我注意到他们在 xpath 中有 'mstns:' 但在我的情况下我的架构没有它,例如
<xs:field xpath="@PersonID" />
这指定了一个 PersonID
属性(这就是 @
的意思),因此您的模式正在寻找重复的属性。您需要重新措辞以引用子元素。
试试这个:
<xs:field xpath="PersonID" />
您的 xs:unique
约束将按预期工作。
小注:如果 Persons
旨在成为 XSD 中的顶级元素,请删除 minOccurs
和 maxOccurs
,因为它们不允许出现关于顶级元素定义。
另见 Unique constraint in XML Schema