扩展现有的xsd架构

时间:2016-02-03 06:37:10

标签: xsd

我想做以下事情:

<a xmlns="http://example.com/general"
   xmlns:ext1="http://example.com/extension1"
   xmlns:ext2="http://example.com/extension2">
    <b name="asdf">
        <ext1:test>HELLO</ext1:test>
        <ext2:test>HELLO</ext2:test>
    </b>
 </a>

基本上我尝试创建一个基本模式,任何用户都可以使用其他模式文件进行扩展。扩展模式文件定义必须有元素“ext1:test”和“ext2:test”。

我尝试重新定义但是我必须用扩展名xsd替换命名空间 - 见下文。这适用于一个扩展,但用户不能包含多个扩展。

<!-- general.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://example.com/general"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://example.com/general">

    <xs:complexType name="aType">
        <xs:sequence>
            <xs:element type="bType" name="b"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="bType">
        <xs:group ref="bGroup"/>
    </xs:complexType>

    <xs:group name="bGroup">
        <xs:sequence/>
    </xs:group>

    <xs:element name="a" type="aType"/>
</xs:schema>

<!-- extension-base.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://example.com/extension"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://example.com/extension">
    <xs:group name="extendedBGroup">
        <xs:sequence>
            <xs:element name="test" type="xs:string"/>
        </xs:sequence>
    </xs:group>
</xs:schema>

<!-- extension.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://example.com/general"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ext="http://example.com/extension"
           xmlns="http://example.com/general">
    <xs:import namespace="http://example.com/extension" schemaLocation="extension-base.xsd"/>

    <xs:redefine schemaLocation="general.xsd">
        <xs:group name="bGroup">
            <xs:choice>
                <xs:group ref="bGroup"/>
                <xs:group ref="ext:extendedBGroup"/>
            </xs:choice>
        </xs:group>
    </xs:redefine>
</xs:schema>

<!-- test.xml -->
<a xmlns="http://example.com/general"
   xmlns:ext="http://example.com/extension"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://example.com/general extension.xsd">
    <b>
        <ext:test>HELLO</ext:test>
    </b>
</a>

有谁知道如何才能实现第一个例子?

0 个答案:

没有答案