我有三个模式:幻灯片,问题和小部件。幻灯片和问题模式导入小部件。但是,幻灯片放映,问题和小部件的命名空间是不同的。我已经定义了我的导入,如下所示:
<?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,但是这需要小部件与导入文档的命名空间相同,问题和小部件不同,因此选项似乎不起作用。
我该怎么做?
答案 0 :(得分:2)
如果您希望三个模式文档中的元素位于不同的名称空间中,则必须使用QNames来引用它们。
当然你可以改变设计,这样他们就不会使用不同的命名空间,但是你没有建议你想做什么。
答案 1 :(得分:1)
唯一的方法是通过所谓的chameleon pattern来重用XSD内容。根据XML命名空间,这将允许您“白标”所需的任何组件。