我有XML模式的問題。我需要內部的三個類型中的一種元素的元素,但沒有任何其他限制,其次是元素output
的只有一個發生:XSD - 任何順序和數量的元素(XML使用XSD驗證XERCES)
<command path="app.exe" workingDir="/usr/local/bin">
<param name="--name" assign="=">anyName</param>
<switch name="--verbose"/>
<param name="--config">/etc/app/conf.txt</param>
<param name="--overriding">~/app/conf.txt</param>
<switch name="-d"/>
<param name="--report" assign="=">~/app/report.txt</param>
<param name="--template">~/app/templates/default.tt</param>
<string>../t/${testName}/log.txt</string>
<output>
<out path="stdout.txt"/>
<err path="stderr.txt"/>
</output>
</command>
我可以只使用sequence
,all
或choice
,但沒有他們中的一個滿足我的要求。序列 - 按照確切順序的任意次數。全部 - 以任何順序零次或一次。選擇 - 只有其中之一。我找到了one solution on this web,但它不適用於Xerces。我試試這個:
<xs:complexType name="commandType">
<xs:sequence>
<xs:group ref="gupa"/>
<xs:element name="output" type="outputType" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="path" use="required" type="value"/>
<xs:attribute name="workingDir" use="required" type="value"/>
</xs:complexType>
<xs:group name="gupa">
<xs:choice>
<xs:element name="env" type="pair" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="switch" type="switchType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="string" type="value" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:group>
但我得到的錯誤:無效的含量被發現開始元素「開關」。其中'{param,output}'預計爲。有一個竅門。
If
maxOccurs="unbounded"
is moved from elements to elementchoice
in schema, then can any of elements appear in any order in any number of times.
然而,當我這樣做,我得到的錯誤:屬性「maxOccurs的」不能出現在元素「選擇」
我巡航跨越互聯網,但我仍然沒有發現什麼我在找。
謝謝,它現在有效。 – 2011-02-24 07:37:24