2008-10-15 9 views
26

J'ai un xsd comme celui-ciXSD et l'héritage

<xsd:complexType name="A"> 
     <xsd:complexContent> 
      <xsd:sequence> 
       <xsd:element name="options"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element name="Day"> 
          ... 
          </xsd:element> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexContent> 
</xsd:complexType> 

<xsd:complexType name="B"> 
    <xsd:complexContent> 
     <xsd:extension base="A"> 
     ...What would go here... 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 

Donc, fondamentalement, je veux la classe A d'avoir une série d'options (par exemple jour, semaine) alors je veux B à hériter de A et ont tous Les options de A et 2 ou 3 options supplémentaires comme les heures, les secondes.

Répondre

33

Voici le schéma que je suis venu avec:

<?xml version="1.0" encoding="utf-8"?> 
<schema id="inheritance" 
    targetNamespace="http://test.com" 
    elementFormDefault="qualified" 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:test="http://test.com" 
> 
    <element name="Time"> 
     <complexType> 
      <sequence> 
       <element name="First" type="test:A" /> 
       <element name="Second" type="test:B" /> 
      </sequence> 
     </complexType> 
    </element> 

    <complexType name="shortOptions"> 
     <sequence> 
      <element name="Day" /> 
     </sequence> 
    </complexType> 

    <complexType name="longOptions"> 
     <complexContent> 
      <extension base="test:shortOptions"> 
       <sequence> 
        <element name="Week" /> 
       </sequence> 
      </extension> 
     </complexContent> 
    </complexType> 

    <complexType name="A"> 
     <sequence> 
      <element name="options" type="test:shortOptions" /> 
     </sequence> 
    </complexType> 

    <complexType name="B"> 
     <sequence> 
      <element name="options" type="test:longOptions" /> 
     </sequence> 
    </complexType> 

</schema> 

qui semble correspondre à cette xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Time xmlns="http://test.com"> 
    <First> 
     <options> 
      <Day>Today</Day> 
     </options> 
    </First> 
    <Second> 
     <options> 
      <Day>Tomorrow</Day> 
      <Week>This Week</Week> 
     </options> 
    </Second> 
</Time> 
7

ajouter simplement un <xsd:sequence> avec les éléments requis:

<xsd:complexType name="B"> 
    <xsd:complexContent> 
     <xsd:extension base="A"> 
      <xsd:sequence> 
       <xsd:element name="Hours"> 
       ... 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 
0

Vous devrez créer un type pour les options, qui contient des heures etc, puis ajouter des options au lieu d'heures dans la réponse de csgero.

1

Vous aurez besoin de définir des options comme un type complexe de son propre, puis utilisez l'extension sur cela pour créer un nouveau type complexe d'options et utiliser la substitution au lieu de l'extension.