嗨,
如果我导入这样的命名空间:
<xs:import namespace="UniqueIRIstyleNameSpaceName" schemaLocation="mySchema.xsd"></xs:import>
我知道 mySchema.xsd 创建了一个 targetNamespace="UniqueIRIstyleNameSpaceName"。
现在如果我去:http://www.w3schools.com/schema/el_import.asp并读取绑定(bind)到“xs”的命名空间中定义的“import”元素的相应API,它说属性“namespace”是可选的。
下面是问题:
我问这个是因为我目前在我的职业生涯中第 5 次使用 XML/XSD 并且从未在其他变体中看到它,但“命名空间”属性始终存在并且匹配“目标命名空间”在相应模式中的值。
非常感谢提前和问候
杰巴
最佳答案
MUST the value of attribute 'namespace' of such an import always be the same as the value of 'targetNamespace' in the corresponding schema (.xsd)?
是的,一点没错。
您不能重新定义导入架构的目标命名空间!
这确实是可能的,但使用
<xs:include>
并且仅当包含的架构没有目标命名空间时。这种技术被称为“变色龙设计”。
If so: Wouldnt it be easier to just completly leave away the 'namespace' attribute at all?
不。唯一应该省略
namespace
的情况属性是导入模式时没有目标命名空间。也就是说,它的目标命名空间是全局命名空间。
在
<xs:import>
namespace
属性是首要的。指定导入的命名空间可能足以让模式处理器导入必要的模式。 schemaLocation
而是一个在哪里找到它的提示。
关于xml - 没有命名空间属性的模式导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18981572/