[英]Make xml element unique using xsd
我有一个带有关联的xsd的xml文件:
元素ContentTitle必须是唯一的。 我已经进行了一些调查,并且知道使用xs:unique属性,但是我还没有使其在我的场景中正常工作。
谁能提供建议?
<xs:element name="AllMeta">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="WikiMeta">
<xs:complexType>
<xs:sequence>
<xs:element name="ContentTitle" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="PageTitle" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="PageMetaDescription" type="xs:string" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在AllMeta
的xs:complexType
之后添加xs:unique
元素:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AllMeta">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="WikiMeta">
<xs:complexType>
<xs:sequence>
<xs:element name="ContentTitle" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="PageTitle" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="PageMetaDescription" type="xs:string" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueContentTitle">
<xs:selector xpath="WikiMeta"/>
<xs:field xpath="ContentTitle"/>
</xs:unique>
</xs:element>
</xs:schema>
然后,此XML文档实例将有效:
<?xml version="1.0" encoding="UTF-8"?>
<AllMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="try.xsd">
<WikiMeta>
<ContentTitle>One</ContentTitle>
<PageTitle></PageTitle>
<PageMetaDescription></PageMetaDescription>
</WikiMeta>
<WikiMeta>
<ContentTitle>Two</ContentTitle>
<PageTitle></PageTitle>
<PageMetaDescription></PageMetaDescription>
</WikiMeta>
</AllMeta>
并且此XML文档实例将无效:
<?xml version="1.0" encoding="UTF-8"?>
<AllMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="try.xsd">
<WikiMeta>
<ContentTitle>One</ContentTitle>
<PageTitle></PageTitle>
<PageMetaDescription></PageMetaDescription>
</WikiMeta>
<WikiMeta>
<ContentTitle>One</ContentTitle>
<PageTitle></PageTitle>
<PageMetaDescription></PageMetaDescription>
</WikiMeta>
</AllMeta>
验证器(在这种情况下为Xerces-J)将给出如下错误消息:
[Error] try.xml:10:37: cvc-identity-constraint.4.1: Duplicate unique value [One] declared for identity constraint "uniqueContentTitle" of element "AllMeta".
c:/gd/usr/kjh/proj/try/xsd/try.xml: 219 ms (9 elems, 1 attrs, 0 spaces, 49 chars)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.