我在下面的表格中有一个XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my/sample/namespace"
xmlns="my/sample/namespace">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Child1" type="Child1TYPE" />
<xs:element name="Child2" type="Child2TYPE" />
</xs:sequence>
</xs:complesType>
<xs:element>
<xs:simpleType name="Child1TYPE">
.
.
.
</xs:schema>
我想在另一个XML文档中使用此模式包含整个XML文档。这个第二个XML文档的模式是什么样的?我的文档应该如下:
<ContainerDoc xmlns="my/containerdoc/namespace">
<s:Root xmlns:s="my/sample/namespace">
<s:Child1>
.
.
.
</s:Child1>
</s:Root>
<ContainerDoc>
我尝试过类似的事情:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my/containerdoc/namespace"
xmlns="my/containerdoc/namespace">
<xs:element name="ContainerDoc">
<xs:element name="s:Root"
xmlns:s="my/sample/namespace" />
</xs:element>
</xs:schema>
但是,显然,这是无效的XSD(我不能在Root元素的元素名称中使用s命名空间。这是否可以在XSD中使用?
答案 0 :(得分:2)
xs:include
。xs:import
。以下是一个完整的工作示例,说明如何将xs:import
与来自不同名称空间的XSD一起使用,以及一个对这些XSD有效的XML文档实例:
此XSD(try.xsd):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my/sample/namespace"
xmlns="my/sample/namespace"
elementFormDefault="qualified">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Child1" type="Child1TYPE" />
<xs:element name="Child2" type="Child2TYPE" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="Child1TYPE">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Child2TYPE">
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:schema>
可以通过此XSD导入(try2.xsd):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my/containerdoc/namespace"
xmlns="my/containerdoc/namespace">
<xs:import namespace="my/sample/namespace" schemaLocation="try.xsd"/>
<xs:element name="ContainerDoc">
<xs:complexType>
<xs:sequence>
<xs:element ref="s:Root" xmlns:s="my/sample/namespace" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这个XML文档实例:
<?xml version="1.0" encoding="UTF-8"?>
<ContainerDoc xmlns="my/containerdoc/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="my/containerdoc/namespace try2.xsd">
<s:Root xmlns:s="my/sample/namespace">
<s:Child1/>
<s:Child2/>
</s:Root>
</ContainerDoc>
有效。