2008-10-15 7 views
26

Ich habe eine XSD wie dieseXsd und Vererbung

<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> 

Also im Grunde möchte ich Klasse A eine Folge von Optionen (Tag, Woche zum Beispiel) haben, dann möchte ich B von A bis erben und haben alle A Optionen und eine zusätzliche 2 oder 3 Optionen wie Stunden, Sekunden.

Antwort

33

Hier ist das Schema kam ich mit:

<?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> 

Welche diese xml scheint zu passen:

<?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

einfach eine <xsd:sequence> mit den erforderlichen Elemente hinzufügen:

<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

Sie werden einen Typ für Optionen erstellen müssen, die Stunden usw. enthält, und dann Optionen hinzufügen, anstatt Stunden in Antwort des csgero.

1

Sie müssen Optionen als eine komplexe Art von seinen eigenen definieren, dann Erweiterung verwenden Dazu erstellen Sie einen neuen komplexen Optionstyp und verwenden anstelle von Erweiterung Substitution.