Frage

Ich brauche Ihre Hilfe einen Sonderfall in XML-Schema zu definieren: Eine Sequenz, die zwei Elemente enthält: ‚x‘ und ‚y‘ während:

  • <x> Element 0 bis ungebundenen mal in der Sequenz erscheinen kann

  • <y> Element 0 bis 1 mal in der Folge erscheinen

  • <x> und <y> Standorte können überall sein - das heißt, es ist möglich, ungebundene mal das <x> Element zu haben und dann ein einzelnes <y> Element, und dann ungebunden mal das <x> Element

  • .

XML-Beispiele für dieses Problem:

Beispiel # 1

<x>stuff</x>
<y>stuff</y>
<x>stuff</x>

Beispiel # 2

<y>stuff</y>
<x>stuff</x>
<x>stuff</x>

Beispiel # 3

<x>stuff</x> 
<x>stuff</x>
<y>stuff</y>
<x>stuff</x>

Danke!

War es hilfreich?

Lösung

Aus verschiedenen Gründen keiner von Yuval ist, Mos oder Proben des davidsheldon Arbeit. Hier ist eine, die der Fall ist.

    <xs:complexType name="myComplexType">
    <xs:sequence>
        <xs:element name="x" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
        <xs:sequence minOccurs="0">
            <xs:element name="y" type="xs:string"/>
            <xs:element name="x" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:sequence>
    </xs:complexType>

Andere Tipps

EDIT: Wie Alohci erwähnt, meine Lösung ist falsch. Gemäß der Spezifikation, ein Element in xs: alle kann nur Null oder Eins Mal erscheinen. Sorry für etwaige Unannehmlichkeiten

Ich denke, was Sie wollen nicht eine Sequenz ist. Eine Sequenz definiert nicht nur die Elemente, sondern auch die Reihenfolge. Und in Ihrem Fall kann die Reihenfolge ändern. Haben Sie versucht, xs: all

<xs:complexType name="myComplexType">
  <xs:all>
    <xs:element name="x" type="xs:string" maxOccurs="unbounded"/>
    <xs:element name="y" type="xs:string" maxOccurs="1"/>
  </xs:all>
</xs:complexType>

könnte ein weiterer appraoch sein, damit es eine Sequenz zu machen, aber die Sequenz markieren zu maxOccurs="unbounded"

Es ist schon eine Weile her, seit ich Schema verwendet, aber ich denke Sequenzen Ihre Antwort finden Sie hier.

Sie benötigen eine unbegrenzte Anzahl von Auswahlmöglichkeiten zwischen haben (ein x) oder (y eine durch ein x folgt).

<xsd:element name="parent">
  <xsd:complexType>
    <xsd:choice maxOccurs="unbounded">
      <xsd:element name="x" type="xs:string"/>
      <xsd:sequence>
        <xsd:element name="y" type="xsd:string" />
        <xsd:element name="x" type="xsd:string" />
      </xsd:sequence>
    </xsd:choice>
  </xsd:complexType>  
</xsd:element>  

Nicht zu kompliziert. Aus der Spitze von meinem Kopf, sollte es so etwas wie diese:

<xs:element name="x" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="y" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="x" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 

Da jedes Element in XSD standardmäßig optional ist, diese XSD wird die XML-Struktur entspricht, die Sie definiert haben, mit dem y Elemente überall vor dem Auftritt, nach oder zwischen den x Elementen, mit einem maximalen Auftreten von 1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top