命名空间的XML相对导入中的分隔符



我有一个关于XML名称空间的概念性问题:如果在文件夹层次结构中有两个不同的xsd文件:

fileA.xsd
folder/
    fileB.xsd

在这两个文件中的每一个文件中,我都通过targetNamespace属性定义了一个单独的命名空间:

在文件A.xsd中,这将是

targetNamespace="http://www.anurlofmine.com/myproject/A"

在fileB.xsd中,它将是:

targetNamespace="http://www.anurlofmine.com/myproject/folder/B"

我可以使用theurl中的路径进行相对导入吗?

例如,我可以使用吗

<xs:schema xmlns:relativeA="../A">

在fileB.xsd中?

我并不真正关心这样做的方法,我知道有各种方法可以指定模式定义的位置,我只关心url中路径的含义。

据我所知,url只是一个字符串,用于唯一标识xsd文件中的类型(除了为定义文件指定一个可能查找的位置之外,没有任何保证)。我说得对吗?

希望我的问题不会太奇怪而无法回答:)

提前非常感谢Mischa

XSD架构文档中导入和包含元素的schemaLocation属性中的架构位置提示被指定为xs:anyURI类型,这意味着是的,它可以是相对引用。

因此,在您的fileB.xsd中,您可以有一个形式为的导入语句

<xs:import namespace="http://www.anurlofmine.com/myproject/A"
           schemaLocation="../fileA.xsd"/>

另一方面,命名空间声明的值(例如示例中的xmlns:relativeA)应该是绝对URI,而不是相对URI。许多程序实际上并不检查命名空间名称作为URI的合法性,因此使用"../A"作为命名空间名称不一定会引发错误。但是定义XML技术堆栈的W3C基本规范规定,使用相对URI作为名称空间名称的文档的信息集是未定义的。

在任何情况下,向xs:schema元素添加名称空间声明都不会产生导入该名称空间或引用可能位于所指示位置的任何模式文档的效果。

最新更新