这是我在foo.xsd
中的现有XSD架构,它只声明了类型:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
targetNamespace="foo">
<xs:complexType name="alpha">
<!-- skipped -->
</xs:complexType>
</xs:schema>
这是另一个模式,它声明了元素:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
targetNamespace="foo">
<xs:import schemaLocation="foo.xsd" namespace="foo" />
<xs:element name="RootElement" type="alpha"/>
</xs:schema>
这是我从Java中使用SAX解析器得到的:
"The namespace attribute 'foo' of an <import> element information
item must not be the same as the targetNamespace of the schema it exists in."
我做错了什么?
答案 0 :(得分:15)
当指定所涉及的XSD的targetNamespace(tns)属性且相同时,仅允许xsd:include(targetNamespace属性不能将空字符串作为其值)。
但是,可以包含一个模式(s1),而没有来自具有tns的模式(s2)的tns;净效果是s1组件假定s2模式的名称空间。这种用法通常被称为变色龙组合物。
关于描述两者之间差异的SO的参考是here。