Короче говоря: я хотел бы знать, как использовать key/keyref из XSD, чтобы элементы имели ссылки друг на друга. он должен иметь форму примера, используя простой xsd и XML.
Длинная история: Я знаком с использованием ID/IDREF. Я использую их для подключения элементов для JAXB. Мне неоднократно говорили, что конструкция key/keyref в XSD обеспечивает повышенную гибкость для межэлементной ссылки. Я консультировался с книгой OReilly XML Schema, которая, кажется, учит всему правильному определению key/keyref и тому, как она похожа на ID/IDREF (но лучше) и не дает простого примера его использования. Это похоже не так, потому что вы определяете ID как атрибут в одном элементе и IDREF в другом элементе и voila. Но key/keyref должны быть определены в общем предке ссылки и ссылочного элемента (AFAIK)...
Я использую файлы XSD для создания JAXB-связанных классов Java с помощью XJC
Я искал инструкции, учебные пособия и примеры, но google дает мне обрывки. то же самое для поисков на SO (также с google и включенным поиском с "+" ).
Чтобы упростить жизнь, я подготовил XSD с уже определенной парой key/keyref, как я ее понял.
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="referenced">
<xs:complexType>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="owner">
<xs:complexType>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="aKey">
<xs:selector xpath="owner" />
<xs:field xpath="@id" />
</xs:key>
<xs:keyref name="aKeyRef" refer="aKey">
<xs:selector xpath="referenced" />
<xs:field xpath="@id" />
</xs:keyref>
</xs:element>
Как бы выглядел фрагмент XML с элементом-владельцем, ссылающимся на "ссылочный" элемент?
EDIT: применил изменение, предложенное Tom W, изменив атрибут xpath ключевого элемента на "owner". JAXB (XJC) все равно не заботится, хотя.
Спасибо