我想做以下事情:
<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>
有谁知道如何才能实现第一个例子?