错误:必须引用现有的简单或复杂类型

时间:2016-03-23 13:34:45

标签: xml xsd complextype simpletype

我在Altova工作,我正在为我的XML文件创建一个XSD文件,而我的代码无法验证。我收到错误:

  

必须引用现有的简单或复杂类型

并且我不知道为什么,因为我已经为元素名titel提供了一个简单的类型。

有谁知道我做错了什么?

P.S。不要介意标签中的值。

这是XSD文件:

   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3schools.com CDS.xsd" xmlns:ns1="http://www.w3schools.com" targetNamespace="http://www.w3schools.com" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="catalogus" type="alles"/>
    <xs:complexType name="alles">
        <xs:sequence>
            <xs:element name="CD">
                <xs:complexType>
                    <xs:sequence>       

                        <!-- Elements -->
                        <xs:element name="titel" type="titelnaam"/>
                        <xs:element name="uitvoerder"/>
                        <xs:element name="uitgever"/>
                        <xs:element name="genre"/>
                        <xs:element name="prijs"/>
                        <xs:element name="jaar"/>
                        <xs:element name="behuizing"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>           
        </xs:sequence>
    </xs:complexType>

<!-- simpleTypes -->
<xs:simpleType name="titelnaam">
    <xs:restriction base="xs:string">
        <xs:pattern value="\d{3}-\d{1}-\d{3}-\d{5}-\d{1}"/>
    </xs:restriction>
</xs:simpleType>    
</xs:schema>

这是XML文件:

<?xml version="1.0"?>
<!DOCTYPE catalogus SYSTEM "CDS.dtd">
<catalogus>
<CD>
    <titel>Until Dawn</titel>
    <uitvoerder>Nirvana</uitvoerder>
    <uitgever>No Clue Music</uitgever>
    <genre>Jazz</genre>
    <prijs valuta="EU">19,95</prijs>
    <jaar>2002</jaar>
    <behuizing>double</behuizing>
    <tracks>
        <track>
            <nummer>Break away</nummer>
            <componist>Nirvana</componist>
            <tekstschrijver>Nirvana</tekstschrijver>
            <tijdsduur tijd="mm.ss">02.55</tijdsduur>
            <uitvoerder>Nirvana</uitvoerder>
        </track>
        <track>
            <nummer>Bananas</nummer>
            <componist>Nirvana</componist>
            <tekstschrijver>Nirvana</tekstschrijver>
            <tijdsduur tijd="mm.ss">03.55</tijdsduur>
            <uitvoerder>Nirvana</uitvoerder>
        </track>
    </tracks>
</CD>
</catalogus>

1 个答案:

答案 0 :(得分:2)

要消除此错误,

  

必须引用现有的简单或复杂类型

正确定义名称空间前缀( ns1 ),

           xmlns:ns1="http://www.w3schools.com/CDS.xsd"

覆盖目标命名空间

           targetNamespace="http://www.w3schools.com/CDS.xsd"

并使用它来引用类型:

  <xs:element name="catalogus" type="ns1:alles"/>

...共

XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ns1="http://www.w3schools.com/CDS.xsd"
           targetNamespace="http://www.w3schools.com/CDS.xsd"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">
  <xs:element name="catalogus" type="ns1:alles"/>
  <xs:complexType name="alles">
    <xs:sequence>
      <xs:element name="CD">
        <xs:complexType>
          <xs:sequence>       

            <!-- Elements -->
            <xs:element name="titel" type="ns1:titelnaam"/>
            <xs:element name="uitvoerder"/>
            <xs:element name="uitgever"/>
            <xs:element name="genre"/>
            <xs:element name="prijs"/>
            <xs:element name="jaar"/>
            <xs:element name="behuizing"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>           
    </xs:sequence>
  </xs:complexType>

  <!-- simpleTypes -->
  <xs:simpleType name="titelnaam">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{3}-\d{1}-\d{3}-\d{5}-\d{1}"/>
    </xs:restriction>
  </xs:simpleType>    
</xs:schema>