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

时间:2015-12-10 13:18:55

标签: xml xsd xml-namespaces xsd-validation xml-validation

对于以下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文档)
  3. 如果1不存在,为什么还要把它放在那里?

2 个答案:

答案 0 :(得分:42)

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的完整性。

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

      在您的示例中,未使用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 ,提示该位置预期的XSD,哪些应该是可以检索的。

  • targetNamespacexs:schema根目录下的一个属性 XSD的元素,它指定根元素的名称空间 XSD旨在管理的XML文档实例。它必须 匹配这些XML文档的root的默认或显式命名空间 元件。

答案 1 :(得分: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包含带有http://maven.apache.org/POM/4.0.0命名空间定义的xsd模式。