【问题标题】:xsi:schemaLocation and pom.xmlxsi:schemaLocation 和 pom.xml
【发布时间】:2012-09-05 00:35:51
【问题描述】:

我正在通过以...开头的 maven pom.xml。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  1. 为什么我需要在这里使用 xsi:schemaLocation?我理解它是一种发现具有目标命名空间的 XSD 的方法。但是当我使用 xmlns="http://www.w3.org/2001/XMLSchema" 时,我不需要提及架构位置?

  2. 当我尝试用其他东西(比如 xsitest)覆盖前缀 xsi 时,编辑器显示它无效。它是一个应该使用的标准前缀关键字吗?我认为前缀可以是任何东西。

【问题讨论】:

    标签: xml maven xsd xml-namespaces


    【解决方案1】:

    您问“为什么我需要使用 xsi:schemaLocation ...?”

    你呢?是否需要使用 xsi:schemaLocation 取决于您使用的验证器和其他模式感知处理器:xsi:schemaLocation 是将命名空间绑定到特定模式的一种方式,但不是唯一方式。

    如果您更改绑定 XSI 名称空间的前缀,您期望文档保持有效是正确的。如果您的软件向您显示错误,则可能是软件中存在错误,或者您没有正确重新绑定前缀。

    【讨论】:

    • 所以对于 xmlns="w3.org/2001/XMLSchema" 我不使用 xsi:schemaLocation,我怎么知道哪个验证器/模式感知处理器正在发现 xsd?
    • 我不认为我理解你的问题。听起来好像您正在寻求帮助以找出您正在运行的软件,但我很难想象这会如何。您正在调用模式验证器,在这种情况下,您应该查阅其文档。或者您正在调用其他一些软件,它会主动调用验证器,在这种情况下,我会再次查看文档。您不需要使用 xsi:schemaLocation 为 XSD 命名空间指定模式位置,因为所有符合标准的 XSD 处理器都知道内置的命名空间。
    • 我只是想知道为什么我们必须在项目的许多 XSD 中指定 xsi:schemaLocation 以使其更加冗长。我也不知道 XML 模式验证器如何将模式绑定到命名空间。
    • 好吧,要么你必须在很多地方指定 xsi:schemaLocation,要么你不需要。如果您这样做,原因将是您选择使用的软件需要它。如果您不这样做,那将是因为您选择使用的软件可以使用其他方法(配置文件、目录、本地存储库,您可以命名)来查找模式文档。无论哪种方式,找出真实情况的方法是阅读您正在使用的软件的文档。简而言之:RTFM。
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 2011-08-18
    • 2011-05-10
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多