ThomasM: Frage zu XSD

Beitrag lesen

Hallo Thomas,

ich möchte mit XSD prüfen ob mindestens eins der Attribute fillColor und borderColor vorhanden ist, also eins der beiden oder beide. Gefunden habe ich bisher nur Lösungen die mit <xs:unique/> arbeiten. Das funktioniert aber nicht wenn beide Attribute vorhanden sind. XML:

<rect fillColor="red" borderColor="black" />

XSD:

<xs:unique name="blub">
   <xs:selector xpath="rect"/>
  <xs:field xpath="@fillColor | @borderColor"/>
</xs:unique>

Hat jemand eine Idee wie man das machen kann?

Hierfür eigenet sich eher xs:assert (XML Schema 1.1):

<xs:element name="rect">
  <xs:complexType>
    <xs:attribute name="fillColor"/>
    <xs:attribute name="borderColor"/>
    <xs:assert test="count(@fillColor) + count(@borderColor) >= 1"/>
  </xs:complexType>
</xs:element>

Grüße,
Thomas