Thomas Mell: Frage zu XSD

Hallo, 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? Grüße

  1. Lieber Thomas,

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

    vielleicht das Oder in zwei eigene Elemente aufspalten?

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

    Full Disclosure: Ich habe nicht die geringste Ahnung.

    Liebe Grüße

    Felix Riesterer

  2. 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