【发布时间】:2013-08-26 20:20:57
【问题描述】:
我正在尝试调整我的 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。
【问题讨论】:
标签: xsd