使用xs:any包含具有1..1基数的元素的复杂类型

时间:2015-10-02 10:59:00

标签: xml xsd xml-validation

我在确定如何在具有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",因为元素可能来自同一名称空间。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

minOccurs="0"声明中删除OtherAttribute

如果你想在序列的末尾加上xs:any元素,你必须在它之前必须使元素成为必需元素,否则解析器必须比单个元素更进一步,以确定是否{ {1}}应满足可选的直接声明(当前为OtherAttribute)或可选的minOccurs="0"声明。如果验证解析器必须比单个元素更进一步,那么您将遇到“独特粒子归因”。

答案 1 :(得分:0)

在XSD 1.1中,如果元素与特定元素粒子和通配符都匹配,则特定粒子获胜;特定命名粒子和通配符之间没有UPA冲突。