Hallo,
ich möchte in einer XSD einem Element zwei Attribute geben, die nur mit definierten Inhalten (key/keyref) belegt werden dürfen. Das habe ich soweit auch hinbekommen. Wie kann ich aber ausschließen, dass diese beiden Attribute den selben Schlüssel bekommen innerhalb eines Elementes?
Beispiel: Nehmen wir einen Wanderkarte mit verschiedenen (eindeutigen) Orten. Die Wegbeschreibung enthält immer ein from
und ein to
Attribut. Ausschließen möchte ich somit, das innerhalb eines Elements from
und to
ident sind.
<orte>
<ort pid="1" name="Berlin" />
<ort pid="2" name="Hamburg" />
<ort pid="3" name="München" />
</orte>
<reise>
<reiseweg from="1" to="2" />
<reiseweg from="2" to="3" />
<reiseweg from="1" to="3" />
<reiseweg from="2" to="2" /> <!-- dieses soll unterbunden werden -->
</reise>
Mein Ansatz in der XSD bisher lautet:
<xsd:key name="keyPid">
<xsd:selector xpath=".//ort"/>
<xsd:field xpath="@pid"/>
</xsd:key>
<xsd:keyref name="keyrefPidTo" refer="oa:keyPid">
<xsd:selector xpath=".//reiseweg"/>
<xsd:field xpath="@to"/>
</xsd:keyref>
<xsd:keyref name="keyrefPidFrom" refer="oa:keyPid">
<xsd:selector xpath=".//reiseweg"/>
<xsd:field xpath="@from"/>
</xsd:keyref>
Mit dieser XSD erreiche ich aber lediglich, dass ich Reisewege zu undefinierten Orten ausschließe: <reiseweg from="4711" to="0815" />
aber identische Start- und Endorte nicht. Die beiden Attribute from
und to
müssten innerhalb von reiseweg
irgendwie unique sein. Wie kann ich das erreichen oder geht das gar nicht?
Mit freundlichem Gruß
Micha