WSDL 导入"位置"属性 -vs- XSD 导入"架构位置"属性



这是什么关系:

  • WSDL 中的import元素

    -和-

  • import元素和 XML 架构

。特别是前者的location属性与后者的schemaLocation属性之间的关系?

虽然我可以使用目录文件(在 JAX-WS/wsimport 工具链中(来"覆盖"xsd:import元素的schemaLocation属性,但似乎我不能对 wsdl:import 语句的location属性做同样的事情。

在这两种情况下,import在文档(WSDL 或 XSD(和外部资源之间建立关系(。

除非围绕 wsdl:import 的混淆,特别是它是否可以用于导入 XSD(以不应该以可互操作的方式(,它们都意味着为自己的同类做同样的事情,即引入另一个 WSDL(在 WSDL 的情况下(,或者另一个 XSD(在 XSD 的情况下(的定义在范围内, 从而允许采用模块化方法进行创作。

您所指的属性应该是等效的,就像 Java 中的import或多或少与 C# 中的using匹配一样。

但是,如果您考虑 WSDL 1.1 注释,则每个注释的细节是不同的:虽然在 XSD 中,schemaLocation 属性对于 xsd:import 是可选的(因为可以使用规范允许的其他方式通过其命名空间解析导入的位置(,但 WSDL 1.1 注释中没有内置相同的位置属性。

此外,XSD 规范明确允许覆盖:

The ·actual value· of the schemaLocation, if present, gives a **hint** as to where a serialization of a ·schema document·...

如果您在 WSDL 2.0 中查找相同的内容,您会注意到现在 WSDL 除了旧的导入之外还支持包含,基本上遵循与指令关联的命名空间相同的语义。更重要的是,位置属性的使用也与XSD中的使用一致,这反过来应该促进一种基于目录的方法来解决"悬而未决"的导入。

为了四舍五入,考虑到 WSDL 1.1 中的强制位置属性,谈论目录或覆盖是没有意义的,因为它不是注释所暗示或允许的。

最新更新