Xml 强制XSD模式中的属性作为主键(并排序)

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>

在下面所示的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>

...
否。您不能在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:反馈会很好。