HY,
如果我导入这样的命名空间:
<xs:import namespace="UniqueIRIstyleNameSpaceName" schemaLocation="mySchema.xsd"></xs:import>
我知道mySchema.xsd创建了一个targetNamespace =“UniqueIRIstyleNameSpaceName”。 现在,如果我转到:http://www.w3schools.com/schema/el_import.asp并读取绑定到'xs'的命名空间中定义的'import'元素的相应API,则表示属性'namespace'是可选的。
现在有以下问题:
这种导入的属性'namespace'的值必须与相应模式(.xsd)中'targetNamespace'的值相同吗?
如果是这样的话:根本不会完全放弃“命名空间”属性吗?
如果没有:...我陷入了深深的麻烦,因为我似乎还没有完全理解命名空间概念,并且真的会对几个关键字感兴趣,在那里查找信息以关闭泄漏:)
我问这个是因为我目前正在使用XML / XSD,这是我职业生涯中的第5次,并且从未在另一个版本中看到它,但是'namespace'属性总是在那里并且在相应的模式中匹配'targetNamespace'的值。
非常感谢提前和问候
JBA
答案 0 :(得分:5)
此类导入的属性'namespace'的值必须与相应模式(.xsd)中'targetNamespace'的值相同吗?
是的,绝对的。 您无法重新定义导入架构的目标命名空间!
这确实是可能的,但是只有当包含的模式没有目标名称空间时才使用<xs:include>
。
这种技术被称为“变色龙设计”。
如果是这样的话:根本没有完全放弃“命名空间”属性会更容易吗?
没有。应该省略namespace
属性的唯一情况是导入的模式
没有目标命名空间。也就是说,它的目标命名空间是全局命名空间。
在<xs:import>
中,namespace
属性是主要属性。指定导入的命名空间可能足以使架构处理器导入必要的架构。 schemaLocation
更像是在何处找到它。
答案 1 :(得分:0)
添加到ColdFusion的答案:
xs:include必须是xs:schema的子元素,并且要使一个模式包含在另一个文件中定义的具有相同或没有目标名称空间的片段
还请注意,XML文档包含模式引用,这是通过根节点上的属性完成的;名称空间需要schemaLocation的一半,但是如果目标模式是未指定targetnamespace的片段,该怎么办?那么您可以定义任何喜欢的命名空间,例如
xmlns:xsi =“ http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation =“ anyNameSpaceYouWant。\ SampleLocalFile.xsd”
(已使用Visual Studio 2019内置XML验证器进行了测试)
参考: https://www.w3schools.com/XML/schema_howto.asp https://www.w3schools.com/xml/el_include.asp