XSD:如何在不导入元素的情况下从外部XSD引用类型?

时间:2017-04-19 03:22:19

标签: xml xsd

假设我们使用相同的命名空间定义了两个XML模式 a.xsd b.xsd

a.xsd 包含复杂类型“ myType ”定义以及元素“ A ”。
b.xsd 仅包含元素 B 定义。

我需要在b.xsd中引用myType,以便定义元素B的一个属性。

由于两个模式都属于同一个名称空间,我在b.xsd中使用了这样的include语句:

<xs:include schemaLocation="a.xsd"></xs:include>

然后,我可以引用myType类型 然而,问题是元素A也被包括在模式B中,这是不可取的,因为预期在模式中仅呈现一个元素B.

那么,有没有一种方法可以导入或引用外部模式中定义的类型而无需导入元素?

谢谢,

3 个答案:

答案 0 :(得分:1)

如果你真的决心实现这一目标,你可以看看你选择的架构处理器是否提供了一个用户钩子(某种URI解析器),允许你拦截xs:include请求并返回一个过滤版本的参考文件。

答案 1 :(得分:0)

标准W3C XML Schema规范没有提供仅包含或导入另一个模式的选定部分的机制。模式组合成一个信息集。有可能redefine imported definitions,所以也许你可以用它做点什么。

答案 2 :(得分:0)

如果元素A和元素B都使用myType,那么它应该在第三个xsd中。通常,重用的基本类型会收集在自己的xsd中,例如types.xsd。然后a.xsd和b.xsd都应该导入/包含types.xsd以访问他们需要的类型而不会引入不需要的元素。