xmlns、xmlns:xsi、xsi:schemaLocation 和 targetNamespace?

xmlns, xmlns:xsi, xsi:schemaLocation, and targetNamespace?

对于以下 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/xsd/maven-4.0.0.xsd">

xmlnsxmlns:xsixsi:schemaLocation 属性的确切含义是什么?它们有什么关系? : 有什么用?

xsi:schemaLocation=

中有 2 个 URL
  1. http://maven.apache.org/POM/4.0.0(刚好和xmlns一样但是访问的时候报404错误。)
  2. http://maven.apache.org/xsd/maven-4.0.0.xsd(这是一个实际的 XSD 文档)

如果 1 不存在,为什么还要放在那里?

xmlns 定义了默认命名空间,它指出,项目节点中所有没有命名空间别名的节点默认都在 http://maven.apache.org/POM/4.0.0 命名空间中。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 定义命名空间 - http://www.w3.org/2001/XMLSchema-instance,并给它一个新的别名 - xsi

xsi:schemaLocation"http://www.w3.org/2001/XMLSchema-instance" 命名空间的属性 schemaLocation。它包含成对的值 - 命名空间 URI 和架构位置 link 用于 xsd- 该命名空间的架构文件。它可以包含多对值 - 每个定义的命名空间 URI 对应一个 xsd 文件。这意味着 link http://maven.apache.org/xsd/maven-4.0.0.xsd 包含具有 http://maven.apache.org/POM/4.0.0 命名空间定义的 xsd 模式。

Namespace XML 和 XML 架构中的相关属性 (XSD)

  • xmlns is part of the W3C Namespaces in XML Recommendation:

    The prefix xmlns is used only to declare namespace bindings and is by definition bound to the namespace name http://www.w3.org/2000/xmlns/.

    在您的示例中,它声明 http://maven.apache.org/POM/4.0.0 是 Maven 项目中元素的默认名称space。

  • xmlns:xsi 为 XSD 中使用的核心名称space 声明标准名称space 前缀(xsi):http://www.w3.org/2001/XMLSchema-instance

    XML Schema: Structures also defines several attributes for direct use in any XML documents. These attributes are in a different namespace, which has the namespace name http://www.w3.org/2001/XMLSchema-instance. For brevity, the text and examples in this specification use the prefix xsi: to stand for this latter namespace; in practice, any prefix can be used.

    在您的示例中,它声明了 xsi 名称space 前缀到 http://www.w3.org/2001/XMLSchema-instance 的常规绑定,它正确地设置了使用以下属性:

    • xsi:type allows an XML instance to associate element type information directly rather than through an XSD. See

      在你的例子中xsi:type没有被使用;此处包括有关 xsi.

    • 的完整性
    • xsi:nil 允许在 XSD 可能不允许的情况下将空元素视为有效。

      在你的例子中xsi:nil没有被使用;此处包括有关 xsi.

    • 的完整性
    • xsi:schemaLocation and xsi:noNamespaceSchemaLocation 向 XML 处理器提供有关如何将 XSD 与 XML 文档相关联的提示。有名字时使用xsi:schemaLocationspace;没有名字时使用xsi:noNamespaceSchemaLocationspace.

      在你的例子中,有一个名称space,所以你正确使用xsi:schemaLocation,其值是space分隔 of namespace and XSD-位置-URI。您的示例使用 namespace、http://maven.apache.org/POM/4.0.0,而 namespace 是 need not be retrivable 的词法命名结构。您的示例还使用了 XSD-location-URI,http://maven.apache.org/xsd/maven-4.0.0.xsd,它应该是可检索的。

      如果您的示例没有使用名称space,您将使用 xsi:noNamespaceSchemaLocation,其值是单个 XSD-位置-URI 提示预期 XSD 的位置并且应该是可检索的。

  • targetNamespacexs:schema 根上的一个属性 XSD 的元素指定根元素的名称space 在 XML 个文档实例中,XSD 旨在管理。它必须 匹配 XML 文档根目录的默认或显式名称 space 元素.