通过id引用而不是值进行XSD关联



我是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。在这种状态下,我有一个完整的authorreader详细信息,而我只需要它们的id。

它有助于查看XML级别。

目前,您正在通过在book元素中包含author元素将bookauthor关联起来:

<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:IDxs:IDREF(支持的场景。将您的id属性更改为xs:ID类型,将您的引用属性更改为xs:IDREF类型。

注意:

  • XML id必须以名称起始字符(不包括数字(开头
  • 或者,您可以使用xs:typexs:token作为您的id,并强制执行通过CCD_ 18分别获得唯一性
  • XSD还提供了xs:key/xs:keyref,作为身份引用的一种更灵活的替代方案传统的XML/DTDid/CCD_

相关内容

  • 没有找到相关文章

最新更新