2011-01-16 16 views
2

ist es möglich, in XML Schema dasselbe Element mit mehreren verschiedenen Definitionen zu definieren, abhängig von einem Attribut.Mehrere Möglichkeiten für das gleiche Element definieren

Als Beispiel:

<xsd:element name="Element"> 
    <xsd:complexType> 
    <xsd:sequence> 
    <xsd:attribute name="type" fixed="type1"/> 
    <xsd:seqeuence> 
    </xsd:complexType> 
</xsd:element> 

<xsd:element name="Element"> 
    <xsd:complexType> 
    <xsd:sequence> 
    <xsd:attribute name="type" fixed="type2"/> 
    <xsd:attribute name="value" type="xsd:integer"/> 
    <xsd:seqeuence> 
    </xsd:complexType> 
</xsd:element> 

<xsd:element name="RootElement"> 
    <xsd:complexType> 
    <xsd:sequence> 
    <xsd:element ref="Element"/> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Oder gibt es eine andere Möglichkeit, dieses Problem zu lösen. Es ist wichtig, dass beide Definitionen den Namen "Element" haben, weil ich eine Anwendung brauche, die beide Elemente auf die gleiche Weise benannt haben. Aber es gibt eine zweite Anwendung, die die zusätzlichen Informationen für Typ2 benötigt.

+0

Sind Sie an XML-Schema gebunden? –

+0

Ja, ich bin an XML Schema gebunden. – moggi

Antwort

0

Ziehen Sie in Betracht, das Attribut type zu entfernen und nur zwei Childnodes mit den gewünschten Strukturen zu definieren.

Auf diese Weise können Sie

<Element> 
    <ElementType1> 
    <!--whatever--> 
    </ElementType1> 
</Element> 

und

<Element> 
    <ElementType2 value="42"> 
    <!--whatever--> 
    </ElementType1> 
</Element> 

im selben Dokument haben.

Versuchen Sie dies in der DTD Abschnitt für Element:

<!ELEMENT Element (ElementType1?)> <!-- the ? means 1 or 0 --> 
<!ELEMENT Element (ElementType2?)> 

oder vielmehr das, wenn nur ein immer unter Element und Element darf nicht leer sein darf:

<!ELEMENT Element (ElementType1 | ElementType1)> 

Sie können lesen mehr über ungefähr DTD element operators.

+0

Würde das nicht bedeuten, dass mein Parser es nicht mehr lesen würde? Ich kann einen der Parser nicht ändern, also wäre das keine Möglichkeit. – moggi

0

Wenn Sie XML Schema 1.1 verwenden, können Sie type alternatives verwenden. Schauen Sie für XML Schema 1.0 in xsi:type oder ein Add-on wie Schematron.

Verwandte Themen