XSD Schema中的强制属性是主键(并已排序)

时间:2010-01-31 04:31:37

标签: 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>

2 个答案:

答案 0 :(得分:1)

  

否。你不能在xsd中做到这一点。

xsd定义xml架构而不是xml数据。您将需要在解析xml数据的代码中执行此操作。

答案 1 :(得分:1)

我认为你能得到的最接近的是:

<?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序列但是因为这个.__ curious_geek已经声明XSD不适用于此。