独特的粒子属性错误

Unique Particle Attribution error

目标: 我有一个名为 Schema1.xsd 的现有标准 XSD。 我想在 Schema2.xsd.

的 complexType("TVDSection") 中扩展 Schema1.xsd 的 complexType("tElementWithIDAndName")

当我尝试在 Altova XMLSpy/oXygen xml 编辑器中验证 Schema2.xsd 时,出现以下错误:

错误: [Xerces] cos-nonambig:“http://www.mySchema.com/Generic/1":element1 and WC[##other:"http://www.mybasic.com/1”,“”](或其替换组中的元素)违反 "Unique Particle Attribution"。在针对此模式进行验证期间,将为这两个粒子创建歧义。

Schema1.xsd:

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns="http://www.mybasic.com/1" 
                       xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                       xmlns:xml="http://www.w3.org/XML/1998/namespace"  
                       targetNamespace="http://www.mybasic.com/1" 
                       elementFormDefault="qualified" 
                       version="0.1">

                <xs:complexType name="tElementWithIDAndName">
                    <xs:sequence>
                          <xs:element name="additionalName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                          <xs:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:ID" use="required"/>
                    <xs:attribute name="name" type="xs:string" use="required"/>
              </xs:complexType>
            </xs:schema>    

Schema2.xsd:

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns="http://www.mySchema.com/Generic/1" 
                       xmlns:xs="http://www.w3.org/2001/XMLSchema"
                       xmlns:myBasic="http://www.mybasic.com/1"
                       targetNamespace="http://www.mySchema.com/Generic/1"
                       elementFormDefault="qualified" version="0.1">

                <xs:import namespace="http://www.mybasic.com/1" schemaLocation="schema.xsd"/>

                <xs:element name="Element1" type="TVDSection"/>
                <xs:complexType name="TVDSection">
                    <xs:complexContent>
                        <xs:extension base="myBasic:tElementWithIDAndName">
                            <xs:sequence>
                                <xs:element name="element1" type="xs:string" minOccurs="0" maxOccurs="unbounded">
                                </xs:element>
                            </xs:sequence>
                        </xs:extension>
                    </xs:complexContent>
                </xs:complexType>
            </xs:schema>

我不知道where/how这违反了独特的粒子属性。 请帮助我解决上述问题。

您的内容模型可以解释为 "any number of elements named p:additionalName, followed by any number of elements provided they are not in namespace 'p', followed by any number of elements named q:element1, "。现在,如果遇到 q:element1 元素,验证器不知道是将其放入第二组(不在命名空间 'p' 中的任何数量的元素)还是第三组(任何名为 q:element1)。因此模棱两可。

在 XSD 1.1 中,规范已更改,因此在这种情况下,如果存在同时匹配的特定粒子和通配符粒子,则始终优先选择特定粒子。因此,一种解决方案是简单地移动到 XSD 1.1。如果您想继续使用 XSD 1.0,则需要更改 xs:any 通配符,以便对允许的元素的命名空间施加更多限制。