Micha: 2 Attribute in einem Element via keyref, die nicht gleich sind

Beitrag lesen

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