Lange Rede, kurzer Sinn: Ich würde gerne wissen, wie man den Schlüssel/keyref von XSD benutzt, um Elemente Referenzen zueinander haben zu lassen. Es muss eine Form eines Beispiels haben, mit einem einfachen xsd und einem XML.XML-Schema-Schlüssel/keyref - wie man sie benutzt?
Lange Geschichte: Ich bin vertraut mit der Verwendung von ID/IDREF. Ich benutze diese, um Elemente für JAXB zu verbinden. Mir wurde wiederholt gesagt, dass das key/keyref-Konstrukt in XSD eine erhöhte Flexibilität für die Referenzierung zwischen Elementen bietet. Ich habe die OReilly XML Schema book konsultiert, die alles über die richtige Definition von key/keyref zu lehren scheint und wie sie der ID/IDREF ähnelt (aber besser) und gibt kein einfaches Beispiel für ihre Verwendung. Es scheint nicht ähnlich zu sein, weil Sie die ID als ein Attribut in einem Element und die IDREF in einem anderen Element und voila definieren. Aber key/keyref haben in einem gemeinsamen Vorfahren der Referenzierung und das referenzierte Element (AFAIK) definiert werden ...
ich die XSD-Dateien verwenden, um zu generieren JAXB gebundenen Java-Klassen mit XJC
ich gesucht für Anleitungen, Tutorials und Beispiele, aber Google gibt mir Fetzen. Gleiches gilt für Suchanfragen auf SO (auch bei Google und inklusive Suche mit '+').
Um jedermanns Leben einfacher zu machen, habe ich eine XSD mit bereits definierten Schlüssel/Schlüssel-Paar vorbereitet, wie ich es verstanden habe.
<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>
Wie würde sich ein Stück von XML wie mit einem 'owner'-Element verweist ein' referenced'-Element?
BEARBEITEN: Die von Tom W vorgeschlagene Änderung wurde angewendet, indem das Xpath-Attribut des Schlüsselelements in "Eigentümer" geändert wurde. JAXB (XJC) kümmert das immer noch nicht.
Danke
aah, deshalb ist kein Attribut beteiligt. Ich habe die Änderung angewendet, auf die Sie hingewiesen haben, aber JAXB generiert nichts, um vom Eigentümer auf das referenzierte Element zugreifen zu können - der gesamte key/keyref-Teil scheint keinen Einfluss auf das Mapping zu haben. Gibt es noch etwas, das ich vermisse? – kostja
ich wollte sagen XJC generiert nicht ... – kostja
Vielleicht sollte ich klarstellen, was ich in dem obigen Beitrag sage. Ich weiß nicht, was JAXB ist, aber das sollte keinen Unterschied machen - was ich sagen will ist, dass ... heißt. Es ist alles, was Sie brauchen, um die Schlüsselbeziehung auszudrücken, es gibt keine XML-Syntax, um eine Schlüsselbeziehung in der Instanz spezifisch zu deklarieren. Ich denke, Sie meinen, dass Sie ein Framework verwenden, das als ORM für XML-Dateien fungieren soll. In diesem Fall könnten Sie eine sinnvolle Ausgabe erwarten. In diesem Fall sollten Sie versuchen, mit dem Gültigkeitsbereich des Schlüssels und der keyref herumzuspielen Bewegen sie herum. –