28

私はこのような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>  

したがって、基本的には、クラス A に一連のオプション (たとえば、日、週) を持たせ、次に B に A から継承させ、A のすべてのオプションと、時間、秒などの追加の 2 つまたは 3 つのオプションを持たせたいと考えています。

4

4 に答える 4

36

私が思いついたスキーマは次のとおりです。

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

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

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

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

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

</xs: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>
于 2008-10-16T05:00:33.287 に答える
9

<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>
于 2008-10-15T15:45:06.140 に答える
1

オプションを独自の複合型として定義し、拡張を使用して新しいオプションの複合型を作成し、拡張の代わりに置換を使用する必要があります。

于 2008-10-16T05:27:41.813 に答える
0

時間などを含むオプションのタイプを作成し、時間の代わりに csgero の回答にオプションを追加する必要があります。

于 2008-10-16T04:26:05.870 に答える