Xml 强制XSD模式中的属性作为主键(并排序)
在下面所示的XML中,是否有一种方法可以创建一个描述XML的模式,这样随着每个Book节点的增加,id值将增加1。目标是将id用作最小值为1的主键。此外,id值应以升序方式排序Xml 强制XSD模式中的属性作为主键(并排序),xml,xsd,Xml,Xsd,在下面所示的XML中,是否有一种方法可以创建一个描述XML的模式,这样随着每个Book节点的增加,id值将增加1。目标是将id用作最小值为1的主键。此外,id值应以升序方式排序 <Books> <Book id="1"></Book> <Book id="2"></Book> <Book id="3"></Book> <Book id="4"></Book>
<Books>
<Book id="1"></Book>
<Book id="2"></Book>
<Book id="3"></Book>
<Book id="4"></Book>
...
</Books>
...
否。您不能在xsd中执行此操作。
xsd定义的是xml模式,而不是xml数据。您需要在解析xml数据的代码中执行此操作。我认为最接近的方法是:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Books">
<xs:complexType>
<xs:sequence>
<xs:element name="Book">
<xs:complexType>
<xs:attribute name="id" type="id_type" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="PK_BookID">
<xs:selector xpath="Books/Book" />
<xs:field xpath="@id" />
</xs:key>
<xs:unique name="BookIdUnique">
<xs:selector xpath="Books/Book" />
<xs:field xpath="@id" />
</xs:unique>
</xs:element>
<xs:simpleType name="id_type">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
我想不出任何方法来强制排序和一个没有间隙的id序列,但就是这样。uuu好奇的_uGeek已经声明XSD不适用于此。这不一定是一个社区维基问题。@Dan:反馈会很好。