1

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

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"

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

我可以例如使用

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

在文件 B.xsd 中?

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

据我所知,url 只是一个字符串,用于唯一标识 xsd 文件中的类型(除了为定义文件指定一个可能看起来的位置 - 不能保证)。我对么 ?

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

提前非常感谢米莎

4

1 回答 1

1

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 元素添加名称空间声明都不会产生导入该名称空间或引用可能位于指定位置的任何模式文档的效果。

于 2013-02-05T16:52:29.827 回答