错误:元素具有type属性以及匿名子类型

时间:2016-01-09 20:50:33

标签: xml xsd xml-parsing xsd-validation

具有类型属性

的嵌套复杂XSD元素

试图解决为什么XSD中的复杂元素不能具有类型属性和嵌套复杂元素? 。所有类型只是用户定义的数据类型,因此应该能够包含任何其他用户定义的数据类型?

XSD解析器抛出错误:

  

该元素具有type属性以及匿名子类型

或者我在理解中遗漏了什么?

所以,如果我必须达到以下XSD,是否可能?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="A" type ="A">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="B" type ="B">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="C" type ="C">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="SomeElement" type="xs:int"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:3)

元素的类型可以命名为匿名

直观,两者在一起是不可能的,因为 命名 匿名 是的对立

正式W3C XML Schema Recommendation中违反的确切约束为src-element.3

  

架构表示约束:元素声明表示确定

     

除了对<element>元素施加的条件之外   模式架构的信息项:以下所有必须   是真的:

     
      
  1. 类型,<simpleType><complexType>互斥。

         

    [ 1,2和4;见完全约束here ]

  2.   

使用命名类型的XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="A" type="A"/>
  <xs:complexType name="A">
    <xs:sequence>
      <xs:element name="B" type="B">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="B">
    <xs:sequence>
      <xs:element name="C" type="C">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="C">
    <xs:sequence>
      <xs:element name="SomeElement" type="xs:int"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

使用匿名类型的XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="A">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="B">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="C">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="SomeElement" type="xs:int"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>