我可以将XML架构导入另一个架构的targetNamespace吗?

时间:2013-10-11 14:52:34

标签: xml import xsd xml-namespaces

我有三个模式:幻灯片,问题和小部件。幻灯片和问题模式导入小部件。但是,幻灯片放映,问题和小部件的命名空间是不同的。我已经定义了我的导入,如下所示:

 <?xml version="1.0" encoding="UTF-8"?>
 <xs:schema targetNamespace="http://www.mydomain.com/slideshow"
       xmlns="http://www.mydomain.com/slideshow"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:wd="http://www.mydomain.com/widgets"
       elementFormDefault="qualified">

    <xs:import namespace="http://www.mydomain.com/widgets" schemaLocation="./widgets-v1.0.xsd"/>

 </xs:schema>

但是,这需要我使用小部件架构中的元素的完全限定名称(例如wd:someElement)。我真的想将小部件中的定义导入到幻灯片和问题命名空间中,因此您不必使用wd:someElement来引用someElement。好像它们是直接在那些相应的模式中定义的。

我尝试过include,但是这需要小部件与导入文档的命名空间相同,问题和小部件不同,因此选项似乎不起作用。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果您希望三个模式文档中的元素位于不同的名称空间中,则必须使用QNames来引用它们。

当然你可以改变设计,这样他们就不会使用不同的命名空间,但是你没有建议你想做什么。

答案 1 :(得分:1)

唯一的方法是通过所谓的chameleon pattern来重用XSD内容。根据XML命名空间,这将允许您“白标”所需的任何组件。