Короче говоря: я хотел бы знать, как использовать ключ/keyref из XSD, чтобы элементы имели ссылки друг на друга. он должен иметь форму примера, используя простой xsd и XML.Ключ XML-схемы/keyref - как их использовать?
Длинная история: Я знаком с использованием ID/IDREF. Я использую их для подключения элементов для JAXB. Мне неоднократно говорили, что конструкция key/keyref в XSD обеспечивает повышенную гибкость для межэлементной ссылки. Я консультировался с OReilly XML Schema book, который, кажется, учит всему правильному определению ключа/keyref и тому, как он похож на ID/IDREF (но лучше) и не дает простого примера его использования. Это похоже не так, потому что вы определяете ID как атрибут в одном элементе и IDREF в другом элементе и voila. Но ключ/KeyRef должны быть определены в общем предке ссылок и ссылочного элемента (AFAIK) ...
Я использую файлы XSD для создания JAXB-связанных классов Java с XJC
Я искал для справки, учебники и примеры, но google дает мне обрывки. то же самое для поисков на SO (также с поиском google и inclusive с «+»).
Чтобы облегчить жизнь каждого человека, я подготовил 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 выглядеть, с 'owner'-элемента, ссылающегося на' referenced'-элемент?
EDIT: применил изменение, предложенное Tom W, изменив атрибут xpath ключевого элемента на «owner». Однако JAXB (XJC) все равно не заботится.
Спасибо
aah, вот почему нет атрибута. Я применил указанное вами изменение, но JAXB ничего не генерирует, чтобы иметь доступ к ссылочному элементу от владельца - вся часть key/keyref, похоже, не влияет на отображение. Есть ли еще что-то, что мне не хватает? – kostja
Я хотел сказать, что XJC не генерирует ... – kostja
Возможно, я должен уточнить, что я говорю в вышеупомянутом сообщении. Я не знаю, что такое JAXB, но это не имеет никакого значения. Я пытаюсь сказать, что говоря <владелец OtherItemID = "1" /> ... . . все, что вам нужно, чтобы выразить ключевое отношение, нет синтаксиса xml, чтобы специально объявить ключевое отношение в экземпляре. Я предполагаю, что вы имеете в виду, что вы используете фреймворк, который должен функционировать как ORM для xml-файлов, и в этом случае вы можете ожидать какой-то значимый вывод, и в этом случае попробуйте сыграть с объемом ключа и keyref на перемещая их. –