2013-02-18 11 views
5

sto cercando ereditare e limitare un elemento, ma sto ottenendo seguente errore (nella convalida Eclipse):restrizione XSD dell'elemento con l'ereditarietà non funziona

La particella del tipo non è una valida restrizione della particella della base.

L'elemento "Descrizione" non deve far parte dell'elemento "TipoDevice". Non riesco a capirlo perché. Questo dovrebbe essere possibile (in base a questo tutorial):

Qualcuno mi può aiutare?

saluta,

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> 

risposta

4

Tipo AbstractDevice presenta due elementi richiesti, mentre il tipo TypeDevice ha una sola. Così TypeDevice non è un'istanza valida del relativo tipo di base AbstractDevice. Al fine di renderla valida, si dovrebbe aggiungere minOccurs="0"-Description elemento o girare la derivazione intorno e utilizzare l'estensione.

+0

Grazie per la risposta. Ma ho pensato, questo era esattamente ciò che si può fare con una restrizione applicata a un elemento. Il tutorial collegata fa esattamente questo (limitare un elemento "autore" del tipo di base "Book" nel elment derivata "Pamphlet" di restrizione. Forse mi fraintenda qualcosa qui. Tra l'altro, non è possibile nella mia applicazione per impostare Descrizione a "minOccurs = 0" nell'elemento base. – Bill