2017-02-06 14 views
1

は、次のXMLスキーマを考えてみましょう: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"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name" type="xs:string"/> 
       <xs:element name="zootier" 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:attribute name="id" type="xs:ID"/> 
    </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="pferd_ct"> 
     <xs:complexContent> 
      <xs:extension base="tier"> 
        <xs:attribute name="schimmel" type="xs:boolean"/>    
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="katze_ct"> 
     <xs:complexContent> 
      <xs:sequence> 
       <xs:element name="fellfarbe" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexContent> 
    </xs:complexType> 


    <xs:complexType name="vogel_ct"> 
     <xs:complexContent> 
      <xs:extension base="tier"> 
       <xs:attribute name="flugfaehig" type="xs:boolean"/>     
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="gans_ct"> 
     <xs:complexContent> 
      <xs:extension base="tier"> 
       <xs:sequence> 
        <xs:element name="schlachtgewicht" type="xs:double"/> 
       </xs:sequence>    
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="fink_ct"> 
     <xs:complexContent> 
      <xs:sequence> 
       <xs:element name="beringt" type="xs:boolean"/> 
      </xs:sequence> 
     </xs:complexContent> 
    </xs:complexType> 



    <xs:complexType name="pfleger"> 
     <xs:sequence> 
      <xs:element name="pflegt" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:attribute name="tier" type="xs:IDREF"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 



    <xs:complexType name="behausung_ct"> 
     <xs:attribute name="name" type="xs:string"/> 
     <xs:sequence> 
      <xs:element name="zootier" 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="flaeche" 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> 

これは私に次のエラーメッセージが得られます。

Error1: The content of 'katze_ct' is invalid. Element 'sequence' is invalid, misplaced, or occurs too often. 

Error2: The content of 'fink_ct' is invalid. Element 'sequence' is invalid, misplaced, or occurs too often. 

Error3: The content of 'behausung_ct' is invalid. Element 'sequence' is invalid, misplaced, or occurs too often. 

Error 4: The content type of a derived type and that of its base must both be mixed or both be element-only. Type 'gebäude_ct' is element only, but its base type is not. 

Error 5: The content type of a derived type and that of its base must both be mixed or both be element-only. Type 'teich_ct' is element only, but its base type is not. 

エラー1-3を同じタイプのものです。エラー4と5も同じタイプです。 エラーに関して4 + 5:派生型が親型と同じ種類のコンテンツを持つ必要があるのはなぜですか?これはxmlスキーマのルールの一部にすることはできません...それは無意味です。拡張されたクラスが親クラス(要素と属性からなる)と比較して1つの追加要素しか持たない場合はどうでしょうか? 2つのクラスを似たようにするために、派生クラスの属性をいくつか作成する必要がありますか?

私のコードで何が間違っているのか分かりません。

答えて

2

エラー1-3は意味があり、4-5は偽りです。あなたが最初の3つを修正すると、おそらく彼らは去るでしょう。コンパイラがエラーを発見した後に続行しようとすると、奇妙なパスを辿るのは珍しいことではありません。スキーマを検証するためにサクソンを使用し

は、私は、スプリアスcomplexContentを要素を取り除くことによって固定することができkatze_ctとfink_ctのためのエラーを得た:

<xs:complexType name="katze_ct"> 
    <xs:sequence> 
     <xs:element name="fellfarbe" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

およびxsためbehausing_ctのエラー:属性が見当違いで、それ

<xs:complexType name="behausung_ct">  
     <xs:sequence> 
      <xs:element name="zootier" type="tier" maxOccurs="unbounded"/> 
     </xs:sequence> 
     <xs:attribute name="name" type="xs:string"/> 
    </xs:complexType> 

これらの変更によって、スキーマがコンパイルされるようになりました。

要素のみの型は混合型を拡張できない、またはその逆の規則は完全に合理的な規則ですが、違反ではありません。

+0

ありがとうございます。今、検証中です。 – Tommy

関連する問題