# XML Schema & Attribut Bedingung



## Mewel (8. Mrz 2010)

Hoi,

ich habe eine xml-Datei, in der in Abhängigkeit eines Attributs der Inhalt anders ist. Folgendes Beispiel:

[XML]
<map name="test 1" type="type1">
  <bla>Test</bla>
</map>
<map name="test 2" type="type2">
  <blub>Test2</blub>
</map>
[/XML]

Wie sieht dazu eine passende Schema Definition aus? Mein aktueller Versuch sieht in etwa so aus:

[XML]
<xs:element name="map" type="type1" minOccurs="0" maxOccurs="1"  />
<xs:element name="map" type="type2" minOccurs="0" maxOccurs="unbounded"/>

<xs:complexType name="type1">
  <xs:attribute name="type" fixed="type1" type="xs:string"/>
  <xs:element name="bla" type="xs:string"/>
</xs:complexType>

<xs:complexType name="type2">
  <xs:attribute name="type" fixed="type2" type="xs:string"/>
  <xs:element name="blub" type="xs:string"/>
</xs:complexType>
[/XML]

Das geht aber nicht, da ich nur ein element mit dem namen "map" verwenden darf.
Hat jemand ne Idee wie man das sonst definieren kann?


----------



## Wildcard (8. Mrz 2010)

So in etwa:
[XML]<xs:element name="map" type="basetype" minOccurs="0" maxOccurs="1"  />

<xs:complexType name="basetype">
  <xs:attribute name="type" type="xs:string" abstract="true"/>
</xs:complexType> 

<xs:complexType name="type1">
   <xs:complexContent> 
        <xs:extension base="basetype"> 
            <xs:sequence> 
                   <xs:element name="bla" type="xs:string"/>
           </xs:sequence> 
        </xs:extension> 
    </xs:complexContent>  
</xs:complexType>

<xs:complexType name="type2">
   <xs:complexContent> 
        <xs:extension base="basetype"> 
            <xs:sequence> 
                 <xs:element name="blub" type="xs:string"/>
           </xs:sequence> 
        </xs:extension> 
    </xs:complexContent>  
</xs:complexType>[/XML]


----------



## Mewel (9. Mrz 2010)

Vielen Dank für deine Antwort Wildcard, leider funktioniert das noch nicht so richtig. Zum einen ist das "abstract" attribut in xs:attribute nicht erlaubt, dafür könnte ich basetype abstract machen. Das darf ich laut Validator aber auch nicht, da bringt er mir folgende Fehlermeldung:
"cvc-type.2: The type definition cannot be abstract for element map.". Ein element darf also nicht abstrakt sein.

Als zweites sehe ich noch nicht so richtig, wie in deinem Beispiel, eine Abhängigkeit zum type-Attribut gebildet wird. Aber vielleicht liegt das auch daran, das ich noch nicht soviel Ahnung von XML Schema habe.


----------

