是xsi:schemaLocation实际使用?

时间:2013-05-02 11:16:29

标签: xml xsd xmllint

我正在使用xmllint工具根据 XSD 架构检查一些 XML 文件。似乎该工具被调用为

xmllint --noout --schema foo.xsd bar.xml

...并且不包含从 XML 文件的 xsi:schemaLocation 属性中检索 XSD 文件的选项。此外,在relevant w3.org specs中读到:

  

这些提示的存在[即xsi:schemaLocation]不要求处理器获取或使用引用的模式文档,处理器可以自由使用通过任何合适方式获得的其他模式,或者根本不使用模式。

那么说实际上 xsi:schemaLocation 属于(软)文档是否公平?此外,由于允许传入的XML文档告诉应用程序如何验证它们可能不是一个好习惯,但我没有看到它的好处。

2 个答案:

答案 0 :(得分:2)

当您因为不信任来验证传入文档时,当然您想说出要用于验证的架构,而不是信任传入的文档来识别架构。

尽管如此,xsi:schemaLocation的使用范围非常广泛,我认为大多数工具都支持它。我认为,在创作环境中,最有意义的是,如果没有模式验证的帮助,作者基本上不相信自己能够做到正确。

但是,如果您将模式视为解释文档中标记并帮助人们理解它的东西,那么它也是有意义的。然后就像地图上的面板解释符号的含义:文档中使用的符号指南。

答案 1 :(得分:1)

XSD位置提示, schemaLocation noNamespaceSchemaLocation ,很少在生产环境中使用(我从未见过它),的确如此。

我个人认为这是在 开发 阶段使用的工具的便捷方法。它被认为是一种可互操作的方式,用于指示应该使用哪些XSD进行验证,IntelliSense等。

假设您构建了一堆XML文件(示例),以便更好地说明(记录)另一堆XSD文件。根据我以前的看法,人们使用模式位置提示(相对URI),压缩整个集合(XSD,XML等),然后将存档发送给消费者。这样,无论人们使用什么开发工具,都有更多的机会可以“互操作”。例如,MS Visual Studio维护一个内部和专有存储,它包含特定XML文件的模式。 “元数据”不能以与xsi架构位置提示相同的方式移植到其他工具。

我还看到了一些模式位置提示的“高级”用法,这就是为什么至少在我们的工具中我们会花很多周期来阅读这些提示并动态调整智能感知和验证消息... < / p>