私はこのような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つのオプションを持たせます。
これが私が思いついたスキーマです:
<?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>
必要な要素を含む<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>
オプションをそれ自体の複合型として定義し、その上で拡張機能を使用して新しいオプション複合型を作成し、拡張機能の代わりに置換を使用する必要があります。
時間などを含むオプションのタイプを作成してから、csgeroの回答で時間の代わりにオプションを追加する必要があります。