문제
이런 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에서 B를 상속 받고 A의 모든 옵션과 시간, 초와 같은 추가 2 또는 3 옵션을 갖기를 원합니다.
해결책
다음은 제가 생각해 낸 스키마입니다.
<?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>
다른 팁
단순히 추가하십시오 <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>
옵션을 복잡한 유형의 IT 유형으로 정의 한 다음이를 확장하여 새로운 옵션 복잡한 유형을 만들고 확장 대신 대체를 사용해야합니다.
시간 등이 포함 된 옵션 유형을 만들고 CSGERO의 답변에서 시간 대신 옵션을 추가해야합니다.
제휴하지 않습니다 StackOverflow