dieKerstin: XML-Schema XSD: Attribut als keyref

Beitrag lesen

Hallo,

aaaaaah, danke. Und wenn es dann doch ein Element <Person></Person> sein soll? so?

<xs:keyref name="PersonID2" refer="PersonID">
   <xs:selector xpath="Bestellung"/>
   <xs:field xpath="Person"/>
</xs:keyref>

Ja, genau so.

NEIN, XMLSpy will das aber nicht so. Im XML-Schema ist das so ok, wenn ich aber eine XML-Datei gegen dieses Schema prüfen lasse, kommt:

"Diese Datei ist nicht gültig: Der <keyref> Identity Contraint 'PersonID2' ergab keinen Treffer im Geltungsbereich des Elements 'Bestellungen'. Der referenzierte Identity Contraint 'PersonID' befindet sich außerhalb des Geltungsbreichs."

So sieht das ganze im XML-Schema aus:
<xs:element name="Bestellungen">
 xs:complexType
  xs:sequence
   <xs:element name="Bestellung">
     xs:complexType
 xs:sequence
   <xs:element name="Person"/>
 </xs:sequence>
 <xs:attribute name="Person" type="xs:positiveInteger"
         use="required"/>
     </xs:complexType>
   </xs:element>
 </xs:sequence>
 </xs:complexType>
 <xs:keyref name="PersonID2" refer="PersonID">
  <xs:selector xpath="Bestellung"/>
  <xs:field xpath="Person"/>
 </xs:keyref>
</xs:element>

Wieso ist das falsch? Ich wähle in selector das Element Bestellung aus und das Unterelement Person ist das field, was gemeint ist.