我在确定如何在具有1..1基数的强制元素的复杂类型末尾允许xs:any
元素时遇到一些麻烦。
示例:
<xs:element name="ComplexElement" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="OtherAttribute" type="xs:integer" minOccurs="0" />
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
这会抛出一个错误,因为通配符会捕获Identifier
,这只允许一次。我不想使用namespace="##other"
,因为元素可能来自同一名称空间。
任何想法如何解决这个问题?
答案 0 :(得分:0)
从minOccurs="0"
声明中删除OtherAttribute
。
如果你想在序列的末尾加上xs:any
元素,你必须在它之前必须使元素成为必需元素,否则解析器必须比单个元素更进一步,以确定是否{ {1}}应满足可选的直接声明(当前为OtherAttribute
)或可选的minOccurs="0"
声明。如果验证解析器必须比单个元素更进一步,那么您将遇到“独特粒子归因”。
答案 1 :(得分:0)
在XSD 1.1中,如果元素与特定元素粒子和通配符都匹配,则特定粒子获胜;特定命名粒子和通配符之间没有UPA冲突。