Krótka historia: chciałbym wiedzieć, jak używać klucza/klucza z XSD, aby elementy miały odniesienia do siebie nawzajem. musi mieć postać przykładu, używając prostego xsd i XML.XML Schema key/keyref - jak z nich korzystać?
Długa historia: znam się na ID/IDREF. Używam ich do łączenia elementów dla JAXB. Powtarzano mi wielokrotnie, że konstrukcja key/keyref w XSD oferuje zwiększoną elastyczność w odwoływaniu między elementami. Konsultowałem się z OReilly XML Schema book, który wydaje się nauczać wszystkiego o poprawnej definicji klucza/klucza i jak jest podobny do ID/IDREF (ale lepszy) i nie daje prostego przykładu jego użycia. Nie wydaje się być podobne, ponieważ definiujesz ID jako atrybut w jednym elemencie, a IDREF w innym elemencie i voila. Ale klucz/keyref muszą być określone we wspólnym przodkiem bazowania i elementu powołanego (AFAIK) ...
używam pliki XSD wygenerować JAXB związana klas Java z XJC
Przeszukałem w przypadku poradników, samouczków i przykładów, ale google podaje mi notki. samo dla wyszukiwania w SO (również z wyszukiwaniem google i włącznie z "+").
Aby ułatwić życie wszystkim osobom, przygotowałem XSD z już zdefiniowaną parą key/keyref, ponieważ ją zrozumiałem.
<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>
Jak kawałek XML wyglądać, z 'owner'-elementu odnoszącego się do' referenced'-element?
EDYCJA: zastosowała zmianę zaproponowaną przez Toma W, zmieniając atrybut xpath elementu klucza na "właściciel". JAXB (XJC) nadal nie dba o to.
Dziękujemy
Aah, dlatego nie ma żadnego atrybutu. Zastosowałem zmianę, którą wskazałeś, ale JAXB nie generuje niczego, aby mieć dostęp do elementu odniesienia od właściciela - cała część key/keyref wydaje się nie mieć wpływu na mapowanie. Czy może czegoś brakuje? – kostja
Chciałem powiedzieć, że XJC nie generuje ... – kostja
Może powinienem wyjaśnić, co mówię w powyższym poście. Nie wiem, czym jest JAXB, ale to nie powinno mieć znaczenia - staram się powiedzieć, że mówię ... . to wszystko, czego potrzebujesz, aby wyrazić kluczową relację, nie ma składni xml, aby konkretnie zadeklarować kluczową relację w instancji. Chyba masz na myśli to, że używasz frameworku, który powinien działać jako ORM do plików xml, w takim przypadku możesz spodziewać się znaczących wyników, w takim przypadku spróbuj bawić się z zakresem klucza i keyref przez przenoszenie ich. –