заставляя атрибут в Схеме XSD быть первичным ключом (и сортировать) - PullRequest
4 голосов
/ 31 января 2010

В приведенном ниже XML-коде есть ли способ создать схему, которая будет описывать XML-код, чтобы значение id увеличивалось на 1 при добавлении каждого узла Book. Цель состоит в том, чтобы использовать id в качестве первичного ключа, минимальное значение которого равно 1. Кроме того, значения id должны сортироваться по возрастанию.

<Books>
    <Book id="1"></Book>
    <Book id="2"></Book>
    <Book id="3"></Book>
    <Book id="4"></Book>
    ...
</Books>

Ответы [ 2 ]

1 голос
/ 01 февраля 2010

Я думаю, что ближайший вы можете получить это:

<?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>

Я не могу придумать способ принудительной сортировки и последовательности идентификаторов без пробелов, но, как это .__curious_geek уже заявил, что XSD не предназначен для этого.

1 голос
/ 31 января 2010

Нет. Вы не можете сделать это в xsd.

xsd определяет схему xml, а не данные xml. вам нужно будет сделать это в своем коде, который анализирует данные XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...