XML模式 - complexType中的元素导致错误消息

时间:2017-01-31 21:23:03

标签: xml xsd

我编写了以下xml-schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified"
    vc:minVersion="1.0" vc:maxVersion="1.1">

    <xs:element name="zoo_ct">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/> 
                <xs:element name="zootier_ct" type="Tier" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="Tier">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/> 
            <xs:element name="alter" type="xs:positiveInteger"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="säugetier_ct">
        <xs:complexContent>
            <xs:extension base="Tier">
                <xs:element name="tragezeit" type="xs:positiveInteger"/>  
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>


    <xs:complexType name="vogel_ct">
        <xs:complexContent>
            <xs:extension base="Tier">
                <xs:element name="flugfähig" type="xs:boolean"/>  
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>


    <xs:complexType name="pfleger_ct">
        <xs:element name="zootier_ct" type="Tier" maxOccurs="unbounded"/>
    </xs:complexType>





    <xs:complexType name="behausung_ct">
        <xs:element name="bezeichnung" type="xs:string"/> 
        <xs:element name="zootier_ct" type="Tier" maxOccurs="unbounded"/>
    </xs:complexType>


    <xs:complexType name="gebäude_ct">
        <xs:complexContent>
            <xs:extension base="behausung_ct">
                <xs:element name="fläche" type="xs:double"/> 
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="teich_ct">
        <xs:complexContent>
            <xs:extension base="behausung_ct">
                <xs:element name="wassertiefe" type="xs:double"/> 
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>






</xs:schema>

然而,当运行它时,它会产生6条错误消息,每条消息都是相同的类型:对于相应的complexType中包含的元素应该是错误的:

The content of 'säugetier_ct' is invalid.  Element 'element' is invalid, misplaced, or occurs too often.

The content of 'vogel_ct' is invalid.  Element 'element' is invalid, misplaced, or occurs too often.

The content of 'pfleger_ct' is invalid.  Element 'element' is invalid, misplaced, or occurs too often.

The content of 'behausung_ct' is invalid.  Element 'element' is invalid, misplaced, or occurs too often.

The content of 'gebäude_ct' is invalid.  Element 'element' is invalid, misplaced, or occurs too often.

The content of 'teich_ct' is invalid.  Element 'element' is invalid, misplaced, or occurs too often.

我不明白各个元素应该是什么问题。 这是代码中最简单的部分,我绝对相信这是正确的语法。

有人知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

在XSD中,xs:complexTypexs:extension不能将xs:element作为直接子女。

以下是添加了xs:sequence包装的XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
           elementFormDefault="qualified"
           vc:minVersion="1.0" vc:maxVersion="1.1">
  <xs:element name="zoo_ct">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string"/> 
        <xs:element name="zootier_ct" type="Tier" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="Tier">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/> 
      <xs:element name="alter" type="xs:positiveInteger"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="säugetier_ct">
    <xs:complexContent>
      <xs:extension base="Tier">
        <xs:sequence>
          <xs:element name="tragezeit" type="xs:positiveInteger"/>  
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="vogel_ct">
    <xs:complexContent>
      <xs:extension base="Tier">
        <xs:sequence>
          <xs:element name="flugfähig" type="xs:boolean"/>  
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="pfleger_ct">
    <xs:sequence>
      <xs:element name="zootier_ct" type="Tier" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="behausung_ct">
    <xs:sequence>
      <xs:element name="bezeichnung" type="xs:string"/> 
      <xs:element name="zootier_ct" type="Tier" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="gebäude_ct">
    <xs:complexContent>
      <xs:extension base="behausung_ct">
        <xs:sequence>
          <xs:element name="fläche" type="xs:double"/> 
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="teich_ct">
    <xs:complexContent>
      <xs:extension base="behausung_ct">
        <xs:sequence>
          <xs:element name="wassertiefe" type="xs:double"/> 
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>

这可以解决您的所有错误。