题
我有像这样的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类有一系列选项(例如Day,Week)然后我希望B继承A并拥有所有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>
您需要将选项定义为它自己的复杂类型,然后使用扩展来创建新选项复杂类型并使用替换而不是扩展。
您需要为选项创建一个类型,其中包含小时等,然后在csgero的答案中添加选项而不是小时。
不隶属于 StackOverflow