代码之家  ›  专栏  ›  技术社区  ›  VinayCH

唯一粒子属性错误

  •  1
  • VinayCH  · 技术社区  · 7 年前

    我想扩展Schema1的complexType(“tElementWithIDAndName”)。Schema2的complexType(“TVDSection”)中的xsd。xsd。

    错误: http://www.mySchema.com/Generic/1 “:元素1和WC[##其他:” http://www.mybasic.com/1

                <?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>
    

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   Michael Kay    7 年前

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

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