如何将 XSD 类型导入根架构?
Posted
技术标签:
【中文标题】如何将 XSD 类型导入根架构?【英文标题】:how to import XSD types into root schema? 【发布时间】:2012-02-12 20:36:30 【问题描述】:这是我在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】:当涉及的 XSD 的 targetNamespace (tns) 属性指定且相同时,仅允许 xsd:include (targetNamespace 属性不能有空字符串作为其值)。
然而,一个可能包含一个没有 tns 的模式 (s1) 来自一个有 tns 的模式 (s2);最终效果是 s1 组件采用 s2 模式的命名空间。这种用法通常被称为变色龙组合。
关于 SO 描述两者区别的参考是here。
【讨论】:
非常感谢,这正是我想要的! “tns”和“targetNamespace”一样吗?以上是关于如何将 XSD 类型导入根架构?的主要内容,如果未能解决你的问题,请参考以下文章