我有一个关于XML命名空间的概念性问题: 如果我在文件夹层次结构中有两个不同的xsd-Files:
fileA.xsd
folder/
fileB.xsd
并且在这两个文件的每一个中,我通过targetNamespace属性定义了一个单独的命名空间:
在fileA.xsd中
targetNamespace="http://www.anurlofmine.com/myproject/A"
并在fileB.xsd中:
targetNamespace="http://www.anurlofmine.com/myproject/folder/B"
我可以使用欧元中的路径进行相对导入吗?
我可以使用
<xs:schema xmlns:relativeA="../A">
在fileB.xsd中?
我并不真正关心这样做的方法,我知道有多种方法可以指定模式定义的位置,我只关心url中路径的含义。 / p>
据我所知,url只是一个字符串,用于唯一标识xsd文件中的类型(除了指定一个可能外观的地方 - 无法保证 - 定义文件)。我是对的吗?
希望我的问题不是太奇怪,无法回答:)
提前多多感谢 米莎
答案 0 :(得分:1)
XSD模式文档中的import和include元素的schemaLocation属性中的模式位置提示被指定为类型xs:anyURI,这意味着是,它可以是相对引用。
因此,在fileB.xsd中,您可以拥有表单
的import语句<xs:import namespace="http://www.anurlofmine.com/myproject/A"
schemaLocation="../fileA.xsd"/>
另一方面,名称空间声明的值(例如示例中的xmlns:relativeA
)应该是绝对URI,而不是相对URI。许多程序实际上并不将命名空间名称作为URI检查,因此使用“../A”作为命名空间名称不一定会引发错误。但是,定义XML技术堆栈的基础W3C规范指定使用相对URI作为命名空间名称的文档的信息集是未定义的。
在任何情况下,向xs:schema元素添加名称空间声明都不会导致导入该名称空间或引用可能位于指定位置的任何模式文档。