2013-02-18 5 views
5

Ich versuche, vererben und ein Element beschränken, aber ich bin immer Fehler folgend (in Eclipse Validierung):XSD Einschränkung des Elements mit der Vererbung funktioniert nicht

Die Partikel des Typs keine gültiges sind Beschränkung der Partikel der Basis.

Das Element "Description" sollte nicht Teil des Elements "TypeDevice" sein. Ich verstehe einfach nicht warum. Dies sollte möglich sein (nach dieser tutorial):

Kann mir jemand helfen?

Greets,

Bill

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com" xmlns="http://www.example.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <!-- Abstract Base Class --> 
    <xs:complexType name="AbstractDevice" abstract="true"> 
    <xs:sequence> 
     <xs:element name="Name" type="xs:string" /> 
     <xs:element name="Description" type="xs:string" /> 
    </xs:sequence> 
    <xs:attribute name="id" type="xs:string" /> 
    </xs:complexType> 

    <!-- Inheritance with restriction --> 
    <xs:complexType name="TypeDevice"> 
    <xs:complexContent> 
     <xs:restriction base="AbstractDevice">         
     <xs:sequence> 
      <xs:element name="Name" type="xs:string" /> 
     </xs:sequence> 
     <xs:attribute name="id" type="xs:string" use="required" /> 
     </xs:restriction>       
    </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="TypeRoot"> 
    <xs:sequence> 
     <xs:element name="Device" type="TypeDevice" /> 
    </xs:sequence>     
    </xs:complexType> 
    <xs:element name="Configuration" type="TypeRoot" /> 
</xs:schema> 

Antwort

4

Typ AbstractDevice hat zwei Elemente benötigt, während Typ TypeDevice nur eine hat. Daher ist TypeDevice keine gültige Instanz seines Basistyps AbstractDevice. Um es gültig zu machen, sollten Sie minOccurs="0" zu Description Element hinzufügen oder die Ableitung umdrehen und Erweiterung verwenden.

+0

Danke für Ihre Antwort. Aber ich dachte, das ist genau das, was man mit einer Beschränkung tun kann, die auf ein Element angewendet wird. Das verknüpfte Tutorial tut genau dies (schränkt ein Element "Author" des Basistyps "Book" in der abgeleiteten Elment "Pamphlet" durch Einschränkung ein. Vielleicht versteh ich hier etwas falsch. Übrigens ist es in meiner Implementierung nicht möglich, Description zu setzen zu "minOccurs = 0" im Basiselement. – Bill