名前が processNameの 1 つの要素と、それ以外の場合は任意の要素を子として許可するように xsd を調整しようとしています。
そのために、小さなcomplexTypeを用意しました。
<complexType name="configType">
<!-- <xsd:choice> -->
<sequence>
<element name="processName" type="string" maxOccurs="1"/>
<xsd:any minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<!-- </xsd:choice> -->
</complexType>
私の問題は、 processNameの他の発生を妨げないことです:
<config>
<process:processName></process:processName>
<test></test>
<test2></test2>
<process:processName></process:processName>
</config>
選択を使用しようとしましたが、検証エラーで終了します
processName および WC[##any] (またはそれらの置換グループの要素) は、「固有粒子属性」に違反しています。このスキーマに対する検証中に、これら 2 つの粒子に対してあいまいさが生じます。
このルールは、XSD v 1.1 ではアクティブではなくなりました。しかし、私の XML ファイルはすべてバージョン 1.0 です。しかし、古いファイルを新しいスキーマ バージョンでチェックすることはできないと思います。
この特定の例は、XML スキーマ バージョン 1.1 の Unique Particle Attribute 制約に違反しなくなりました。この制約は、要素が要素粒子とワイルドカードの両方に一致する場合、要素粒子が優先されるということで曖昧さをなくしています。ただし、UPA 制約自体はバージョン 1.1 のままです。
processNameの発生を 1 回だけ強制することは可能ですか?
ヒントをありがとう。
編集:
ColdFusion からのいくつかのヒントを使用して、あいまいな宣言を許可する XSD1.1 スキーマを作成することができました。
<sequence>
<element name="processName" type="string" minOccurs="0" maxOccurs="1"/>
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</sequence>
複数回のprocessNameを持つことが可能になりました。