当我在<xsd:choice中使用<xsd:any>时的唯一粒子归因异常>



我需要apps元素或在其他xsd中定义的其他元素(我通过<xsd:any>导入)或两者兼而有之。我已经使用了choice,但它抛出唯一粒子属性异常。

<xsd:sequence>
    <xsd:choice minOccurs="1" maxOccurs="unbounded">
        <xsd:element name="apps" />
        <xsd:any minOccurs="0" namespace="##local" />
    </xsd:choice>
</xsd:sequence>

这不起作用,因为XML处理器不知道你的应用程序元素属于哪里。Xsd:element或Xsd:any它不能做预知。选择另一个命名空间

唯一粒子属性有助于防止歧义-当您将apps元素定义在xsd:any旁边时,apps元素是否与特定元素声明(xsd:element name="apps")或通配符(xsd:any)相关联是不明确的。

你的问题没有给出足够的细节来给出一个完整的答案——其他非"app"元素是否完全未指定?例如,它是字面上的任何元素,还是"应用程序"和其他定义良好的选择?如果你已经定义了其他元素,那么将它们添加为指定的选项,否则你也可以使用xsd:any而不需要定义"apps"元素。

您的模式在XSD 1.1中是合法的,它通过声明与显式元素声明的匹配优于与通配符的匹配来解决歧义。但是,在XSD 1.0中,如果通配符允许的名称空间包含特定元素的名称空间,则不能在特定元素和通配符之间进行选择。

最新更新