我无法让xs:unique说明符在XML文件中工作。我似乎无法找到一个有效的XPath。我对这个问题中的代码数量表示道歉,但我非常感谢任何可以在下面指出我做错的人。无论我做什么,我都无法在元素中获取@ref属性来报告错误,因为我复制了值(每个ref必须是唯一的)。
非常感谢任何帮助或信息指示。
亲爱的,帕特里克这是我的架构:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Artworks"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:aw="http://www.fourthwish.co.uk/data/Artworks.xsd"
xmlns="http://www.fourthwish.co.uk/data/Artworks.xsd"
targetNamespace="http://www.fourthwish.co.uk/data/Artworks.xsd"
elementFormDefault="qualified"
>
<xs:element name="artworks">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="artwork" type="ArtworkType">
<xs:unique name="uniqueRef">
<xs:selector xpath="artwork"/>
<xs:field xpath="@ref"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ArtworkType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
</xs:sequence>
<xs:attribute name="ref" type="xs:nonNegativeInteger"/>
</xs:complexType>
</xs:schema>
这是我的XML文件:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<artworks
xmlns="http://www.fourthwish.co.uk/data/Artworks.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.fourthwish.co.uk/data/Artworks.xsd Artworks.xsd"
>
<artwork ref="1">
<title>Title String</title>
</artwork>
<artwork ref="1">
<title>Title String</title>
</artwork>
</artworks>
为什么我没有收到重复参考值的错误? Arrrggghhh!我已经阅读了互联网上的所有内容。请帮助别人。
答案 0 :(得分:3)
使用此:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Artworks"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:aw="http://www.fourthwish.co.uk/data/Artworks.xsd"
xmlns="http://www.fourthwish.co.uk/data/Artworks.xsd"
targetNamespace="http://www.fourthwish.co.uk/data/Artworks.xsd"
elementFormDefault="qualified"
>
<xs:element name="artworks">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="artwork" type="ArtworkType"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueRef">
<xs:selector xpath="aw:artwork"/>
<xs:field xpath="@ref"/>
</xs:unique>
</xs:element>
<xs:complexType name="ArtworkType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
</xs:sequence>
<xs:attribute name="ref" type="xs:nonNegativeInteger"/>
</xs:complexType>
</xs:schema>
答案 1 :(得分:1)
你有没有看过这个问题,看看它是否相似 - 提问者在他自己的问题上贴了一个答案。
答案 2 :(得分:1)
如果您通过Saxon-EE运行此架构,它会告诉您:
警告:在test.xsd的第13行: 复杂类型ArtworkType不允许名为{} artwork
的子元素基本上告诉你,你忘了说艺术品在名称空间中,因此需要一个前缀。