2008-10-15 204 views
26

我有這樣XSD和繼承

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

一個xsd所以基本上我想A級擁有的選項(例如日,周)序列,然後我想B到從A繼承和擁有所有的A的選項和額外的2或3個選項,如小時,秒。

回答

33

這是我想出了架構:

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

這似乎符合這個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

只需使用所需的元素添加一個<xsd:sequence>

<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

你需要創建選項的類型,其中包含小時等,然後添加選項,而不是在csgero的答案小時。

1

您需要定義選項的複雜類型它自己的,然後使用延長在此基礎上創建一個新的選項複雜類型,並使用替代而不是擴展名。