在架构扩展中使用复杂类型

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>