2009-06-24 2 views
1

Wir haben eine Situation, wo wir ein Element mit beschränken möchten:zu mit Text ein Element Beschränkung oder Subelementen

  • Entweder Text(). oder
  • Unterelemente.

z.

<a>mytext</a> 

oder

<a><b>xxx</b></a> 

aber nicht:

<a>mytext<b>xxx</b></a> 

Angesichts der xs:simpleContent Mechanismus ich es mit nur Text beschränken können, und natürlich kann ich das Element (e) es definieren kann erlaubt sein, aber weiß jemand, wie ich die beiden kombinieren kann, um entweder Text oder Unterelemente zuzulassen, aber nicht beides?

Ta Jamie

+2

Genau diese Frage wurde gestellt unter: http://stackoverflow.com/questions/381782/xml-schema-element-that-can-contain-elements-or-text. Nicht sicher, wie ich es verpasst habe! Wählen Sie, um zu schließen, wenn Sie möchten. –

Antwort

3

Eine weitere Option ist für Sie Vererbung zu verwenden. Ihre resultierenden XML nicht so schön ist, aber Sie bekommen genau die Inhalte, die Sie wollen:

<xsd:element name="field" type="field" abstract="true" /> 
<xsd:element name="subfield" type="xsd:string" /> 

<xsd:complexType name="field" abstract="true" /> 

<xsd:complexType name="subfield"> 
    <xsd:complexContent> 
    <xsd:extension base="field"> 
     <xsd:sequence> 
     <xsd:element ref="subfield" minOccurs="0" maxOccurs="unbounded" /> 
     </xsd:sequence> 
     <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 

<xsd:complexType name="no-subfield"> 
    <xsd:complexContent mixed="true"> 
    <xsd:extension base="field"> 
     <xsd:attribute name="name" type="xsd:string" /> 
    </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 

dann Ihre resultierenden XML würde folgende Komponenten enthalten (vorausgesetzt, Sie haben xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" irgendwo erklärt)

<field xsi:type="subfield"> 
    <subfield>your stuff here</subfield> 
</field> 

oder

<field xsi:type="no-subfield">your other stuff</field> 

Am wichtigsten ist, nicht zulässt, es

<field xsi:type="subfield"> 
    Text you don't want 
    <subfield>your stuff here</subfield> 
    More text you don't want 
</field> 
+0

Danke, dass Sie das gemacht haben - ich war mir des Vererbungsmechanismus nicht bewusst. –

Verwandte Themen