質問
XMLスキーマで特別なケースを定義するには、あなたの助けが必要です: 「x」と「y」の2つの要素を含むシーケンス:一方:
-
<x>
要素は、シーケンス内の0から非バインド時間まで表示できます -
<y>
要素は、シーケンス内で0〜1回出現できます -
<=>および<=>の場所はどこでも構いません。つまり、<=>要素の非バインド時間、単一の<=>要素、および<=>の非バインド時間を設定できます。要素。
この問題のXMLの例:
例#1
<x>stuff</x>
<y>stuff</y>
<x>stuff</x>
例#2
<y>stuff</y>
<x>stuff</x>
<x>stuff</x>
例#3
<x>stuff</x>
<x>stuff</x>
<y>stuff</y>
<x>stuff</x>
ありがとう!
解決
さまざまな理由により、Yuval、Mo、またはdavidsheldonのサンプルはいずれも動作しません。これは
<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>
他のヒント
編集:Alohciが述べたように、私の解決策は間違っています。仕様によると、xs:allの要素は0回または1回しか表示できません。ご不便をおかけして申し訳ありません
あなたが望むのはシーケンスではないと思います。シーケンスは、要素だけでなく順序も定義します。そして、あなたの場合、順序は変わるかもしれません。 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>
もう1つの方法は、シーケンスにすることですが、シーケンスをmaxOccurs="unbounded"
スキーマを使用してからしばらく経ちましたが、ここでシーケンスが答えだと思います。
(an x)または(yの後にxが続く)の間で無数の選択肢が必要です。
<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>
それほど複雑ではありません。私の頭の上では、このようなものになるはずです:
<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"/>
XSDの各要素はデフォルトでオプションであるため、このXSDは定義したXML構造と一致し、y
要素はx
要素の前、後、または間に出現し、最大1回出現します
所属していません StackOverflow