Micha: XSD: Abhängigkeiten von übergeordneten Attributen erzeugen

Beitrag lesen

Hallo,

ich versuche mich gerade ein wenig an XML bzw. an der zugehörigen Schemadatei. Mein Problem ist derzeit, dass ich versuchen möchte, Abhängigkeiten zwischen den Eltern- und Kindselementen zu erzeugen. Nehmen wir folgendes Beispiel:

<punkte dimension="2">  
  <punkt nr="A" x="100" y="200" />  
  <punkt nr="B" x="150" y="300" />  
  <punkt nr="C" x="75" y="150" />  
</punkte>  
  
<punkte dimension="3">  
  <punkt nr="D" x="100" y="200" z="10" />  
  <punkt nr="E" x="150" y="300" z="20" />  
</punkte> 

In punkte wird als Attribut die Dimension vorgegeben, die 1, 2 oder 3 sein kann. In Abhängigkeit der Dimension sind nun bestimmte Attribute in punkt Pflicht (1D -> z; 2D -> x,y; 3D -> x,y,z

Ich kann in diesem Fall das Problem auf zwei Wegen sicher umgehen: Zum einen könnte ich verschiedene Elemente (punkt1d, punkt2d, punkt3d) nutzen; zum anderen könnte ich default-Werte für alle Attribute vorgeben:

<xsd:complexType name="punktTyp">  
  <xsd:attribute name="nr" type="xsd:string" use="required" />  
  <xsd:attribute name="x" type="xsd:double" use="optional" default="0.0" />  
  <xsd:attribute name="y" type="xsd:double" use="optional" default="0.0" />  
  <xsd:attribute name="z" type="xsd:double" use="optional" default="0.0" />  
</xsd:complexType>  
  
<xsd:complexType name="punkteTyp">  
  <xsd:sequence>  
    <xsd:element name="punkt" type="oa:punktTyp" minOccurs="1" maxOccurs="unbounded"/>  
  </xsd:sequence>  
  <xsd:attribute name="dimension" use="required">  
    <xsd:simpleType>  
      <xsd:restriction base="xsd:int">  
        <xsd:pattern value="1|2|3" />  
      </xsd:restriction>  
    </xsd:simpleType>  
  </xsd:attribute>  
</xsd:complexType>

Gibt es auch eine direkte Möglichkeit, in der XSD vorzugeben: Wenn dimension=2, dann muss das Element punkt x und y besitzen oder falls es nur mit unterschiedlichen Elementen geht nur das Element punkt2d folgen darf?

Ich hoffe, mein Anliegen war verständlich... ;-)

Mit freundlichem Gruß
Micha