XML-Schema, XML-Dateien keyref key include
dieKerstin
- xml
0 Thomas J.S.0 Kerstin
Hallo,
ich habe nun endlich ein schönes XML-Schema fertiggestellt, welches mehrere keys und keyrefs besitzt. Zur besseren Übersicht wollte ich jedoch die Daten in mehrere XML-Dateien aufsplitten, allerdings ist dies wiederrum mit dem XML-Schema nicht in Einklang zu bringen.
____________________________________________________________________
im XML-Schema sieht die Struktur ungefähr so aus:
<xs:element name="Bestellungen">
xs:complexType
xs:sequence
<xs:element name="Bestellung">
xs:complexType
<xs:attribute name="PersonID" type="xs:positiveInteger"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:keyref name="PersonID2" refer="PersonID">
<xs:selector xpath="Bestellung/Person"/>
<xs:field xpath="@Person"/>
</xs:keyref>
</xs:element>
<xs:element name="Personen">
xs:complexType
xs:sequence
<xs:element name="Person">
xs:complexType
<xs:attribute name="PersonID" type="xs:positiveInteger"
use="required"/>
</xs:complexType>
<xs:key name="PersonID">
<xs:selector xpath="Person"/>
<xs:field xpath="@PersonID"/>
</xs:key>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
_____________________________________________________________________
D.h. ich habe kein Wurzel-Element. Nur das keyref, welches auf den key aus Person "verweist". Jetzt möchte ich aber nicht beides in eine Datei, sondern eine Datei "Bestellungen.xml" und eine Datei "Personen.xml" haben. Allerdings habe ich nun das Problem, dass "Bestellungen.xml" nicht gültig ist, das das referenzierte Entity "PersonID" nicht gefunden werden kann.
_____________________________________________________________________
"Bestellungen.xml":
<Bestellungen>
<Bestellung PersonID="1">
...
</Bestellung>
</Bestellungen>
---------------------------------------------------------------------
"Personen.xml":
<Personen>
<Person PersonID="1">
...
</Person>
</Personen>
_____________________________________________________________________
Wie kriege ich es hin, dass es doch gefunden werden kann? Es wäre doch <xi:include href="Personen.xml"/> in "Bestellungen.xml" möglich, oder? Aber wie bringe ich das dem XML-Schema bei?
Gruß,
dieKerstin
Hallo,
im XML-Schema sieht die Struktur ungefähr so aus:
<xs:element name="Bestellungen">
xs:complexType
xs:sequence
<xs:element name="Bestellung">
xs:complexType
<xs:attribute name="PersonID" type="xs:positiveInteger"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:keyref name="PersonID2" refer="PersonID">
<xs:selector xpath="Bestellung/Person"/>
Du hast aber kein <Person> in <Bestellung>, dein keryref verweist so auf nichts.
D.h. ich habe kein Wurzel-Element.
Doch, nämlich Bestellungen
Nur das keyref, welches auf den key aus Person "verweist".
Nö, der verweist zwar schon auf das key, aber für den Vergleich verweist er auf gar nix. (keine <Person> in <Bestellung>)
Jetzt möchte ich aber nicht beides in eine Datei, sondern eine Datei "Bestellungen.xml" und eine Datei "Personen.xml" haben. Allerdings habe ich nun das Problem, dass "Bestellungen.xml" nicht gültig ist, das das referenzierte Entity "PersonID" nicht gefunden werden kann.
Wie kriege ich es hin, dass es doch gefunden werden kann? Es wäre doch <xi:include href="Personen.xml"/> in "Bestellungen.xml" möglich, oder? Aber wie bringe ich das dem XML-Schema bei?
Es ist "weniger" das Problem dem Schema das beizubringen, sondern der Anwendung, die deine XML-Instanzdokumente dann validieren soll.
im <schema>
xmlns:xlink="http://www.w3.org/1999/xlink"
dann:
<annotation>
<appinfo>
<link xlink:type="simple" xlink:href="personen.xml" xlink:actuate="onRequest" xlink:role="http://www.example.org/wasauchimmer" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase"/>
nur, wie der Name sagt es ist ein appinfo (application information), d.h. deine Anwendung muss dann dieses Element verstehen und auswerten.
Dasselbe gilt für XInclude.
Dann wäre es einfacher, wenn du person.xml mit XInclude in bestellungen.xml einbinden würdest. Die Frage ob deine Anwendung XInclude versteht bleibt in diesem Fall aber auch.
Grüße
Thomas
Hallo,
im XML-Schema sieht die Struktur ungefähr so aus:
<xs:element name="Bestellungen">
xs:complexType
xs:sequence
<xs:element name="Bestellung">
xs:complexType
<xs:attribute name="PersonID" type="xs:positiveInteger"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:keyref name="PersonID2" refer="PersonID"><xs:selector xpath="Bestellung/Person"/>
Du hast aber kein <Person> in <Bestellung>, dein keryref verweist so auf nichts.
ja, tschuldigung, bei meinem ganzen rumprobieren, fällt och mal was untern Tisch.
Wie kriege ich es hin, dass es doch gefunden werden kann? Es wäre doch <xi:include href="Personen.xml"/> in "Bestellungen.xml" möglich, oder? Aber wie bringe ich das dem XML-Schema bei?
Dann wäre es einfacher, wenn du person.xml mit XInclude in bestellungen.xml einbinden würdest. Die Frage ob deine Anwendung XInclude versteht bleibt in diesem Fall aber auch.
gut, per XInclude klar ... aber mein dummes XML-Schema kennt ja das XInclude-Element net und meckert deshalb rum.
Ach, wurscht, also doch alles in eine unübersichtliche Datei ... ich seh jetzt schon kaum durch *depremiertbin*