2008-10-15 45 views
26

que tienen un XSD como estoXsd y la herencia

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

Así que, básicamente quiero clase A para tener una secuencia de opciones (día, semana, por ejemplo), entonces yo quiero B heredar de una y tienen todas las Las opciones de A y 2 o 3 opciones adicionales como horas, segundos.

Respuesta

33

Aquí está el esquema que se me ocurrió:

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

que parece adaptarse a esta 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

sólo tiene que añadir un <xsd:sequence> con los elementos necesarios:

<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

Tendrá que crear un tipo de opciones, que contiene horas, etc, y luego añadir opciones en lugar de horas en la respuesta de csgero.

1

que se necesitan para definir las opciones como un tipo complejo de sí mismo, a continuación, utilizar la extensión sobre eso para crear un nuevo tipo complejo de opciones y usar sustitución en lugar de extensión.