【问题标题】:Unique Particle Attribution error唯一粒子属性错误
【发布时间】:2018-02-14 13:06:09
【问题描述】:

目标: 我有一个名为 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 和 WC[##other:"http://www.mybasic.com/1",""] (或它们替换组中的元素)违反“唯一粒子属性”。在针对此模式进行验证期间,将为这两个粒子创建歧义。

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>

我不知道这是在哪里/如何违反了独特的粒子属性。 请帮我解决上述问题。

【问题讨论】:

    标签: xml xsd xsd-validation xml-validation altova


    【解决方案1】:

    您的内容模型可以解释为“任意数量的名为 p:additionalName 的元素,后跟任意数量的元素,前提是它们不在命名空间‘p’中,然后是任意数量的名为 q:element1 的元素,”。现在,如果遇到 aq:element1 元素,验证器不知道是将其放在第二组(不在命名空间“p”中的任意数量的元素)还是第三组(任何名为 q:element1 的元素) .因此模棱两可。

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

    【讨论】:

    • 不幸的是,我无法更改 schema1.xsd,因为它是来自另一个团队的我们项目的标准 xsd。我现有的工具也不支持 XSD 1.1。解决这个问题的任何想法。
    • 为什么要扩展schema1.xsd中的复杂类型?它已经允许在附加名称元素之后使用通配符内容,你为什么需要改变它?
    • 至于“我现有的工具不支持 XSD 1.1”,答案当然是转向正在积极开发产品并跟上最新标准的工具供应商。
    • 非常感谢 Michael Kay 提供的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多