我需要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中,如果通配符允许的名称空间包含特定元素的名称空间,则不能在特定元素和通配符之间进行选择。