OK, ich weiss jetzt ungefähr wo mein Problem liegt. Den key zu erstellen ist noch einfach. Aber bei der richtigen keyref hakt es dann.
<xsd:element name="root" type="rootType">
<xsd:key name="myKey">
<xsd:selector xpath="a"/>
<xsd:field xpath="b/@name"/>
<xsd:field xpath="@name"/>
</xsd:key>
<xsd:keyref name="myRef1" refer="myKey">
<xsd:selector xpath="."/>
<xsd:field xpath="c/d/@id"/>
<xsd:field xpath="c/@context"/>
</xsd:keyref>
<xsd:keyref name="myRef2" refer="myKey">
<xsd:selector xpath="c"/>
<xsd:field xpath="d/@id"/>
<xsd:field xpath="@context"/>
</xsd:keyref>
<xsd:keyref name="myRef3" refer="myKey">
<xsd:selector xpath="c/d"/>
<xsd:field xpath="@id"/>
<xsd:field xpath="../@context"/>
</xsd:keyref>
</xsd:element>
myRef1 überprüft nur, ob das allererste d-Element im allerersten c-Element der Schlüsselbedingung genügt. Falls nicht gibt es eine schöne Fehlermeldung, falls doch werden alle anderen d-Elemente ignoriert.
myRef2 überprüft für jedes c-Element, ob das erste d-Element die Schlüsselbedingung erfüllt. Falls nicht gibt es die Fehlermeldung, falls doch werden alle weiteren d-Elemente in diesem c-Element ignoriert.
Ich muss also offensichtlich mit dem Selektor direkt auf das d-Element zeigen, damit alle Elemente überprüft werden. Wenn ich es so versuche wie in myRef3, dann bekomme ich aber die Fehlermeldung:
c-general-xpath: The expression '../@context' is not valid with respect to the XPath subset supported by XML Schema.
Aber irgendwie muss ich mit XPath mein xsd:field auf ein Attribut des unmittelbaren Eltern-Element des im Selektor ausgewählten Elements verweisen lassen. Kann man nicht irgendwo nachlesen, welches Subset von XPath in XML Schema erlaubt ist?
Grüße Jan