Xml 唯一粒子属性误差

Xml 唯一粒子属性误差,xml,xsd,xsd-validation,xml-validation,altova,Xml,Xsd,Xsd Validation,Xml Validation,Altova,目标: 我有一个名为Schema1.XSD的现有标准XSD。 我想在Schema2.xsd的complexType(“TVDSection”)中扩展Schema1.xsd的complexType(“tElementWithIDAndName”) 当我尝试在Altova XMLSpy/oXygen xml编辑器中验证Schema2.xsd时,出现以下错误: 错误: [Xerces]cos nonambig:::element1和WC[##other:,“”](或其替换群中的元素)违反“唯一粒子属性

目标: 我有一个名为Schema1.XSD的现有标准XSD。 我想在Schema2.xsd的complexType(“TVDSection”)中扩展Schema1.xsd的complexType(“tElementWithIDAndName”)

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

错误: [Xerces]cos nonambig:::element1和WC[##other:,“”](或其替换群中的元素)违反“唯一粒子属性”。在根据该模式进行验证期间,将为这两个粒子创建歧义

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>

我不知道这在哪里/如何违反唯一粒子属性。
请帮助我解决上述问题。

您的内容模型可以解释为“任意数量的名为p:additionalName的元素,后跟任意数量的元素,前提是它们不在名称空间“p”中,后跟任意数量的名为q:element1的元素”。现在,如果遇到一个q:element1元素,验证器不知道是将其放入第二个组(不在名称空间“p”中的任意数量的元素)还是第三个组(任何名为q:element1的元素)。因此产生了歧义


在XSD 1.1中,等级库已经更改,因此在这种情况下,如果有一个特定粒子和一个通配符粒子都匹配,则始终优先选择该特定粒子。因此,一个解决方案就是简单地移动到XSD1.1。如果您想继续使用XSD 1.0,则需要更改xs:any通配符,以便对允许元素的命名空间施加更多约束。

不幸的是,我无法更改schema1.XSD,因为它是来自另一个团队的项目的标准XSD。我现有的工具也不支持XSD1.1。这个问题有什么想法吗?为什么要扩展schema1.xsd中的复杂类型?它已经允许在additionalName元素之后使用通配符内容,为什么您需要更改它呢?至于“我现有的工具不支持XSD 1.1”,答案当然是切换到一家工具供应商,该供应商正在积极开发他们的产品并跟上最新的标准。非常感谢您提供的信息Michael Kay。