whine: XSD - Verpflichtendes Element

Guten Morgen!

<symbolLeft>	
	<symbolRaster></symbolRaster>
	<symbolVector></symbolVector>
	<symbolFont></symbolFont>
	<symbolTxt></symbolTxt>
</symbolLeft>

Für o.a. XML-Struktur sollen folgenden Regeln gelten:

  1. symbolRaster ODER symbolVector ist verpflichtend, also mindestens eins von beiden muss angegeben werden (können aber auch beide)
  2. symbolFont und symbolTxt sind optional

Wie lege ich das in der XSD fest?

Mit choice? Oder muss ich die XML-Strktur ändern um die Bedingungen abzubilden?

<xs:element name="symbolLeft">
  <xs:complexType>
    <xs:choice>
      	<xs:element name="symbolRaster" type="symbolRaster"/>
      	<xs:element name="symbolVector " type="symbolVector"/>
    </xs:choice>
		<xs:element name="symbolFont " type="symbolFont" minOccurs="0"/>
		<xs:element name="symbolTxt " type="symbolTxt" minOccurs="0"/>
  </xs:complexType>
</xs:element> 

whine

  1. Hallo whine,

    Für o.a. XML-Struktur sollen folgenden Regeln gelten:

    1. symbolRaster ODER symbolVector ist verpflichtend, also mindestens eins von beiden muss angegeben werden (können aber auch beide)
    2. symbolFont und symbolTxt sind optional

    Wie lege ich das in der XSD fest?

    Probiere diesen Ansatz:

    <xs:element name="symbolLeft">
      <xs:complexType>
        <xs:sequence>
          <xs:choice>
            <xs:sequence>
              <xs:element name="symbolRaster"/>
              <xs:element name="symbolVector" minOccurs="0"/>
            </xs:sequence>
            <xs:sequence>
              <xs:element name="symbolVector"/>
              <xs:element name="symbolRaster" minOccurs="0"/>
            </xs:sequence>
          </xs:choice>
          <xs:element name="symbolFont" minOccurs="0"/>
          <xs:element name="symbolTxt" minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    

    Wichtig ist neben minOccurs die geänderte Reihenfolge in der zweiten Auswahl-Sequenz, sonst handelt man sich eine Verletzung der "Unique Particle Attribution" ein.

    Keine maxOccurs-/maxOccurs-Angabe bedeutet jeweils 1.

    Grüße,
    Thomas

    1. Hallo Thomas,

      vielen Dank! Ich habe es mit ein paar Beispieldaten erfolgreich ausprobiert.

      Viele Grüße whine

  2. @@whine

    Ich hatte das Tag deines Postings mal von „sonstiges“ auf „xml“ geändert, damit der ThomasM das sieht. Hat gewirkt. 😉

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    1. Danke, das habe ich vergeblich gesucht. Aber vielleicht war eas auch noch zu früh😀