ссылочная целостность в файлах XML без глобально уникальных идентификаторов - PullRequest
1 голос
/ 08 сентября 2010

Может быть, я не вижу леса за деревьями, но вот оно:

Я «проектирую» документ XML и до сих пор придумал что-то вроде следующего:

<element key="root">
    <data>...</data>
    <elements>
        <element key="foo">
            <data>...</data>
        </element>
        <element key="bar">
            <data>...</data>
        </element>
    </elements>
</element>

Так что это простая иерархическая структура. Что я хочу сделать сейчас, так это иметь ссылки от одного элемента к любому другому элементу в любой точке иерархии. Это было бы тривиально, если бы у каждого элемента был уникальный идентификатор, но это не так. Пока я только планирую гарантировать, что ключ каждого элемента уникален на своем уровне (так же, как имена файлов в структуре каталогов).

Другими словами, если бы у меня были полностью определенные ключи, такие как root.foo, гарантировать ссылочную целостность было бы просто. Но тогда я буду хранить избыточную информацию (я уже знаю, что foo является подэлементом root, зачем хранить эту информацию дважды?).

Я понимаю, что это по сути косметическая проблема. Возможно, одно из самых простых решений - просто назначить идентификаторы автоматически и покончить с этим. Но это довольно не элегантно (и подвержено ошибкам, если у вас нет приятного внешнего интерфейса для редактирования файла), поэтому я надеялся на лучший способ сделать это.

Есть ли способ реализовать это в XML-схеме?

1 Ответ

0 голосов
/ 10 сентября 2010

Используйте <xs:key> и <xs:keyref>

Ключи являются уникальными в указанном контексте, поэтому они не должны быть глобально уникальными, как ID: s <xs:key> содержит <xs:selector> элемент, который определяет область действия или контекст ключа (значение ключа / ключей должно быть уникальным во всем этом set) и <xs:field> элемент, который определяет ключевые узлы. Ключ может иметь несколько полей, и в этом случае их комбинация должна быть уникальной. <xs:key> и <xs:keyref> используются в декларации <xs:element>.

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