在架构扩展中使用复杂类型
Use complex type in schema extension
我想扩展现有架构以将复杂类型添加到现有复杂类型。这可能吗?我试过下面的代码,但它无效。
<?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>
是的,正如 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>
我想扩展现有架构以将复杂类型添加到现有复杂类型。这可能吗?我试过下面的代码,但它无效。
<?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>
是的,正如 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>