XSD导入NameSpaces

时间:2012-05-25 13:29:01

标签: namespaces xsd xml-namespaces

我有两个xsd文件“first.xsd”和“second.xsd”。

在second.xsd中,我想引用first.xsd中定义的元素(具有不同的命名空间) 我的second.xsd看起来像:

<xs:schema ... xmlns:schema1="http://www.schema.org/schema1" targetNamespace "http://www.schema.org/schema2   ...  >
<xs:import namespace = "http://www.schema.org/schema1" schemaLocation = "first.xsd" />

<xs:element name = "complex1">
<xs:complexType>
.........
<xs:element ref="schema1:name2"/>
.........
</xs:complexType>
</xs:element>

现在我想在first.xsd中包含并导入second.xsd 所以我在first.xsd中执行以下操作:

<xs:schema ... xmlns:schema2="http://www.schema.org/schema2" targetNamespace "http://www.schema.org/schema1  ... >
<xs:import namespace="http://www.schema.org/schema2" schemaLocation="second.xsd">
<xs:element name = "name1"/>
<xs:element name = "name2"/>
<xs:element name = "name3"/>

这是正确的方法,因为我无法成功验证架构 这是一个问题,因为一些循环命名空间包含??
我正在使用氧气xml开发人员来验证模式文件,并且在验证时我的first.xsd说: E [Xerces] src-resolve:无法将名称解析为(n)类型定义组件。 (second.xsd)

但是,如果我单独验证second.xsd文件,则表示架构有效。

在我的实际情况中,我有一个非常复杂的场景,所以我把它简化为一个简单的例子,如上所示。
请有人帮忙。

1 个答案:

答案 0 :(得分:3)

拥有这种循环依赖是完全有效的(尽管有争议);您的架构集不能验证的原因不是它;您必须检查架构处理器生成的错误并尝试理解它们中的每一个。一般认为,最好是从第一条错误信息开始。

由于您引用了未在 schema1 中列出的element2(在second.xsd中),因此您的代码段无效。这是一种不会通过验证的事情,因此请关注它们。

如果您需要帮助了解真正的问题,请首先使用实际的错误消息更新您的帖子。