xmlns,xmlns:xsi,xsi:schemaLocation和targetNamespace?

问题描述 投票:32回答:2

对于以下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个网址

  1. http://maven.apache.org/POM/4.0.0(它恰好与xmlns相同,但在访问时会出现404错误。)
  2. http://maven.apache.org/xsd/maven-4.0.0.xsd(这是一个真正的XSD文档)

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

xml xsd xml-namespaces xsd-validation xml-validation
2个回答
40
投票

XML和XML架构(XSD)中与命名空间相关的属性

  • xmlnsW3C Namespaces in XML Recommendation的一部分: 前缀xmlns仅用于声明命名空间绑定,并且根据定义绑定到命名空间名称http://www.w3.org/2000/xmlns/。 在您的示例中,它声明http://maven.apache.org/POM/4.0.0是Maven项目中元素的默认命名空间。
  • xmlns:xsi为XSD中使用的核心命名空间声明了标准名称空间前缀(xsi):http://www.w3.org/2001/XMLSchema-instance XML Schema:Structures还定义了几个可直接用于任何XML文档的属性。这些属性位于不同的命名空间中,其名称空间名称为http://www.w3.org/2001/XMLSchema-instance。为简洁起见,本规范中的文本和示例使用前缀xsi:代表后一个命名空间;实际上,可以使用任何前缀。 在您的示例中,它声明了xsi名称空间前缀与http://www.w3.org/2001/XMLSchema-instance的常规绑定,这正确设置了以下属性的使用: xsi:type允许XML实例直接关联元素类型信息,而不是通过XSD。见How to restrict the value of an XML element using xsi:type in XSD? 在你的例子中,没有使用xsi:type;这里包括xsi的完整性。 当XSD可能不允许时,xsi:nil允许空元素被认为是有效的。 在你的例子中,没有使用xsi:nil;这里包括xsi的完整性。 xsi:schemaLocation and xsi:noNamespaceSchemaLocation向XML处理器提供有关如何将XSD与XML文档相关联的提示。当有命名空间时使用xsi:schemaLocation;没有命名空间时使用xsi:noNamespaceSchemaLocation。 在您的示例中,有一个名称空间,因此您可以正确使用xsi:schemaLocation,其值是空格分隔的名称空间对和XSD-location-URI。您的示例使用命名空间http://maven.apache.org/POM/4.0.0,命名空间是need not be retrivable的词法命名结构。您的示例还使用了XSD-location-URI,http://maven.apache.org/xsd/maven-4.0.0.xsd,它应该是可以回溯的。 如果您的示例未使用命名空间,则应使用xsi:noNamespaceSchemaLocation,其值为单个XSD-location-URI,该URI提示预期XSD的位置以及哪些应该是可检索的。
  • targetNamespace是XSD的xs:schema根元素的属性,它指定XSD要管理的XML文档实例的根元素的名称空间。它必须与这些XML文档的根元素的默认或显式命名空间匹配。

5
投票

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:schemaLocationschemaLocation名称空间的"http://www.w3.org/2001/XMLSchema-instance"属性。它包含一对值 - 名称空间URI和该名称空间的xsd-schema文件的模式位置链接。它可以包含许多值对 - 每个已定义的名称空间URI都有一个xsd文件。这意味着链接http://maven.apache.org/xsd/maven-4.0.0.xsd包含xsd模式和http://maven.apache.org/POM/4.0.0名称空间的定义。

© www.soinside.com 2019 - 2024. All rights reserved.