我在<xsd:choice> </xsd:choice> </xsd:any>中使用<xsd:any>时的唯一粒子属性异常

时间:2011-08-11 10:15:48

标签: xml validation

我需要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>

3 个答案:

答案 0 :(得分:0)

这不起作用,因为XML处理器不知道您的应用程序属于哪里。 xsd:element或xsd:any。它无法预测。选择另一个名称空间。

答案 1 :(得分:0)

独特粒子归因有助于防止歧义 - 在xsd:any旁边定义了apps元素,app元素是否与特定元素声明相关联是不明确的( xsd:element name =“apps”< / strong>)或使用通配符( xsd:任何)。

您的问题没有给出完整答案的足够详细信息 - 其他非“应用”元素是否完全未指定?例如。它是字面上的任何元素,还是“应用程序”和其他明确定义的选择?如果您已经定义了其他元素,那么将它们添加为指定选项,否则您也可以使用 xsd:any 而无需定义“apps”元素。

答案 2 :(得分:0)

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