2010-09-08 1 views
1

Может быть, я не видя за деревьями леса, но здесь идет:ссылочной целостности в файлах XML без глобальных уникальных идентификаторов

Я «проектирование» 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-схеме?

ответ

0

Использование <xs:key> и <xs:keyref>

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