我是XML架构定义的新手。请查看我的XSD:
Author.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
targetNamespace="http://NamespaceTest.com/AuthorType"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element id="author" name="author" type="AuthorType"/>
<xs:complexType name="AuthorType">
<xs:complexContent>
<xs:extension base="PersonType">
<xs:sequence>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
Book.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
targetNamespace="http://NamespaceTest.com/BookType"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="http://NamespaceTest.com/AuthorType"/>
<xs:include schemaLocation="http://NamespaceTest.com/ReaderType"/>
<xs:complexType name="BookType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="date" type="xs:string"/>
<xs:element name="author" type="AuthorType" />
<xs:element name="reader" type="ReaderType"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int"/>
</xs:complexType>
</xs:schema>
在BookType
中,我希望拥有作者的id
和读者的id
。在这种状态下,我有一个完整的author
和reader
详细信息,而我只需要它们的id。
它有助于查看XML级别。
目前,您正在通过在book
元素中包含author
元素将book
与author
关联起来:
<book>
<name>John</name>
<date>2018-07-12</date>
<author id="a1">
<!-- author elements -->
</author>
</book>
相反,您只想通过其id:引用author
<book>
<name>John</name>
<date>2018-07-12</date>
<author idref="a1"/>
</book>
这是由基本XML标识符和标识符引用(在XSD中:xs:ID
和xs:IDREF
(支持的场景。将您的id
属性更改为xs:ID
类型,将您的引用属性更改为xs:IDREF
类型。
注意:
- XML id必须以名称起始字符(不包括数字(开头
- 或者,您可以使用
xs:type
或xs:token
作为您的id,并强制执行通过CCD_ 18分别获得唯一性 - XSD还提供了
xs:key
/xs:keyref
,作为身份引用的一种更灵活的替代方案传统的XML/DTDid
/CCD_