如何将XSD类型导入根模式?

时间:2012-01-18 03:30:10

标签: java xml xsd sax

这是我在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."

我做错了什么?

1 个答案:

答案 0 :(得分:15)

当指定所涉及的XSD的targetNamespace(tns)属性且相同时,仅允许xsd:include(targetNamespace属性不能将空字符串作为其值)。

但是,可以包含一个模式(s1),而没有来自具有tns的模式(s2)的tns;净效果是s1组件假定s2模式的名称空间。这种用法通常被称为变色龙组合物。

关于描述两者之间差异的SO的参考是here