我想扩展现有模式,以将复杂类型添加到现有复杂类型。这可能吗?我已经尝试过以下代码,但它无效。
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Types -->
<xs:complexType name="plotType">
<xs:sequence>
<xs:element name="bufferSize" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
<!-- Base Schema w/ connection restrictions -->
<xs:redefine schemaLocation="baseConfig.xsd">
<xs:simpleType name="connectionName">
<xs:restriction base="connectionName">
<xs:pattern value="test"/>
</xs:restriction>
</xs:simpleType>
<!-- Additional default values -->
<xs:complexType name="baseGuiConfigType">
<xs:complexContent>
<xs:extension base="baseGuiConfigType">
<xs:sequence>
<xs:element name="plot" type="plotType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
</xs:schema>
答案 0 :(得分:0)
是的,正如Michael Kay所说,除了内置类型之外,还可以使用complexTypes扩展架构。
问题是必须在plotType
块之后定义redefine
。像这样重构代码可以解决问题:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="baseConfig.xsd">
<xs:simpleType name="connectionName">
<xs:restriction base="connectionName">
<xs:pattern value="test"/>
</xs:restriction>
</xs:simpleType>
<!-- Additional default values -->
<xs:complexType name="baseGuiConfigType">
<xs:complexContent>
<xs:extension base="baseGuiConfigType">
<xs:sequence>
<xs:element name="plot" type="plotType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
<!-- Types -->
<xs:complexType name="plotType">
<xs:sequence>
<xs:element name="bufferSize" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:schema>