我正在尝试调整我的 xsd,它允许将一个名为processName的元素作为子元素,否则为任何元素。
为此,我准备了一个小的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](或它们的替换组中的元素)违反“唯一粒子属性”。在针对此模式进行验证期间,将为这两个粒子创建歧义。
该规则在 XSD v 1.1 中不再有效,但我所有的 XML 文件都是 1.0 版。但我认为不可能用较新的模式版本检查较旧的文件。
这个特定示例不再违反 XML Schema 版本 1.1 中的唯一粒子属性约束,该约束通过说当元素同时匹配元素粒子和通配符时,元素粒子获胜来消除歧义。但是,UPA 约束本身仍保留在 1.1 版中。
是否可以只强制执行一次processName?
感谢您的任何提示。
编辑:
通过 ColdFusion 的一些提示,我能够创建一个允许模棱两可声明的 XSD1.1 模式:
<sequence>
<element name="processName" type="string" minOccurs="0" maxOccurs="1"/>
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</sequence>
现在可以有多次processName。