1
我有以下XML:如何在XSD中使用key和keyref?
<?xml version="1.0" encoding="ISO-8859-1"?>
<library xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="library.xsd">
<!--<!DOCTYPE library SYSTEM "library.dtd">-->
<authors>
<author aid="a1">Bill Evjen</author>
<author aid="a2">Michael Kay</author>
<author aid="a3">Kevin Goldberg</author>
<author aid="a4">Michael Morrison</author>
</authors>
<books>
<book bookID="b001" author="a2">
<title>XSLT 2.0 and XPath 2.0 Programmer's Reference</title>
<stock>4</stock>
<publisher>John Wiley</publisher>
<year>2009</year>
<use type="advanced" />
<use type="reference" />
</book>
<book bookID="b002" author="a1 a2">
<title>Professional XML (Programmer to Programmer) </title>
<stock>2</stock>
<publisher>John Wiley</publisher>
<year>2007</year>
<use type="professional" />
<use type="advanced" />
<use type="reference" />
</book>
<book bookID="b003" author="a3">
<title>XML: Visual QuickStart Guide</title>
<stock>3</stock>
<publisher>Peachpit Press</publisher>
<year>2008</year>
<use type="introductory" />
<use type="reference" />
</book>
<book bookID="b004" author="a4">
<title>Sams Teach Yourself XML in 24 Hours</title>
<stock>5</stock>
<publisher>SAMS</publisher>
<year>2005</year>
</book>
</books>
</library>
如何使用鍵/ keyref在XSD讓在書元素「作者」屬性包含author元素的「援助」屬性的值的值/列表?
我測試了以下在Visual Studio中創建的XSD,但出現錯誤「The Keyref'books'無法找到引用的鍵或唯一的範圍。」我不知道如何解決這個問題:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="library">
<xs:complexType>
<xs:sequence>
<xs:element name="authors">
<xs:complexType>
<xs:sequence>
<xs:element name="author" maxOccurs="unbounded" type="theAuthor"/>
</xs:sequence>
</xs:complexType>
<xs:key name="uniqueAuthorID">
<xs:selector xpath="author"/>
<xs:field xpath="@aid"/>
</xs:key>
</xs:element>
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element name="book" type="theBook" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueBookID">
<xs:selector xpath="book"/>
<xs:field xpath="@bookID"/>
</xs:unique>
<xs:keyref refer="uniqueAuthorID" name="authorKeyRef">
<xs:selector xpath="book"></xs:selector>
<xs:field xpath="@author"></xs:field>
</xs:keyref>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="theAuthor">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="aid" type="xs:string">
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="theBook">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="stock" type="xs:integer"/>
<xs:element name="publisher" type="xs:string"/>
<xs:element name="year" type="xs:string"/>
<xs:element name="use" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="type" type="useType" default="advanced"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="bookID" type="xs:string"/>
<xs:attribute name="author" type="xs:string"/>
</xs:complexType>
<xs:simpleType name="useType">
<xs:restriction base="xs:string">
<xs:enumeration value="advanced" />
<xs:enumeration value="reference" />
<xs:enumeration value="professional" />
<xs:enumeration value="introductory" />
</xs:restriction>
</xs:simpleType>
</xs:schema>