xml文件常用来作为配置文件,但是 xml 文件的头部会让初学者感到困惑, 这里对其进行一个清晰易懂的解释(梳理自网络资料)

先修知识

  • 理解 xml 中的标签含义, 及标签之间树状的嵌套结构
  • 了解 pom.xml ( project object model)文件

XML 文件头示例

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

初学者看到如上的内容应当有如下困惑点:

  • xmlns:xsi , xmlns, xsi:schmeLocation 这些看上去相近的属性是什么含义, 为什么他们的值是不一样的 URL
  • 这些 URL 是否对应一些可以访问的资源,对于该文件的解析是否会需要下载这些 URL 对应的资源

从 xmlns 的作用讲起

一个 xml 文档中如果包含如下两种定义不同, 但是名称相同的元素, xml 解析器是无法解析的, 因为它不能确定当你调用 document.getElementsByTagName("book") 时应该返回哪个元素。

<!-- 这里的 table 元素描述的是一个表格-->
<table><tr><td>Apples</td><td>Bananas</td></tr>
</table>
<!-- 这里的 table 元素描述的是一个家居桌子-->
<table><name>African Coffee Table</name><width>80</width><length>120</length>
</table>

显然, 如果给他们的名字添加一个前缀, 则命名冲突的问题就可以解决。

<!-- 这里的 table 元素描述的是一个表格-->
<h:table>  <!--添加了前缀 h --><h:tr><h:td>Apples</h:td><h:td>Bananas</h:td></h:tr>
</h:table>
<!-- 这里的 table 元素描述的是一个表格-->
<f:table> <!--添加了前缀 f --><f:name>African Coffee Table</f:name><f:width>80</f:width><f:length>120</f:length>
</f:table>

但是, 在一个拥有众多元素的文档中, 仅仅拥有前缀, 也不能完全避免命名冲突的问题。

  • 注意 xml 文档相互之间是可以通过 XInclude, External Entites 实现相互包含或者引用的。

此时, 命名空间就诞生了, 我们可以为元素定义一个命名空间, 将一个很长的, 可以保证全局唯一性的字符串与该元素关联起来。这样就可以避免命名冲突了。

但是如何保证那个较长的字符串全局唯一呢, 最好的方式莫过于使用 统一资源标识符(Uniform Resource Identifier,URI) 了, 而我们最常见的 URI 就是平时经常访问的网址 URL 了。

xmlns:namespace-prefix="namespaceURI"

应用到我们所举的例子中就是:

<!-- 这里的 table 元素描述的是一个表格-->
<h:table xmlns:h="http://www.w3.org/TR/html4/"><h:tr><h:td>Apples</h:td><h:td>Bananas</h:td></h:tr>
</h:table>
<!-- 这里的 table 元素描述的是一个表格-->
<f:table xmlns:f="http://www.w3school.com.cn/furniture"><f:name>African Coffee Table</f:name><f:width>80</f:width><f:length>120</f:length>
</f:table>
  • 所以, 对于命名空间的标识符, URI 的作用仅仅是保证唯一性, 它并不需要对应一个可以访问的资源或文件 ! 但是, 有很多公司都会让 namespace 的 URI 指向一个包含该命名空间信息的网页

回到我们的 POM 文档头中,你会发现 project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 中的http://www.w3.org/2001/XMLSchema-instance可以访问到一个正常的页面, 但是如果访问 xmlns="http://maven.apache.org/POM/4.0.0" 中的 http://maven.apache.org/POM/4.0.0 就会得到一个 PAGE NOT FOUND 错误, 页面未获取到。

xmlns 出现在没有前缀的元素中的含义

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

细心的童鞋会注意到, project 元素前面并没有前缀。 这里实际上使用的是默认命名空间(default naming space)。 它的语法如下:

<elementName xmlns="namespaceURI">

例如我们的 project 元素定义 和下面的例子

<table xmlns="http://www.w3.org/TR/html4/"><tr><td>Apples</td><td>Bananas</td></tr>
</table>

使用默认命名空间的作用是, 该元素内部的子元素都会默认属于该命名空间下, 我们不需要为他们一一添加命名空间前缀。

xmlns:xsi 与 xsi:schemaLocation

现在来看文件头中剩下的, 看上去更为复杂的部分。

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"

根据之前的知识我们可以理解, xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 http://www.w3.org/2001/XMLSchema-instance。 但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。

  • 注解: XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器。

那么, 有了上述的理解, 再来看

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"

上面这行的语法其实是, xsi:schemaLocation = "键" “值” 
即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对。

  • 前一个“键” http://maven.apache.org/POM/4.0.0 指代 【命名空间】, 只是一个全局唯一字符串而已
  • 后一个值指代 【XSD location URI】 , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, xml parser 可以利用这个信息获取到 XSD 文件, 从而通过 XSD 文件对

所有属于 命名空间 http://maven.apache.org/POM/4.0.0 的元素结构进行校验, 因此这个值必然是可以访问的, 且访问到的内容是一个 XSD 文件的内容。

xmlns与xmlns:xsi和xsi:schemaLocation详解相关推荐

  1. xsi:schemaLocation详解 1

    转自:http://blog.csdn.net/zhengyeqing520/article/details/6091656 https://zhidao.baidu.com/question/109 ...

  2. xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance(xsi:schemaLocation详解)

    http://topic.csdn.net/u/20110117/01/3e3cc322-8f8e-4c2b-8cbb-768bf7319c59.html xmlns:xsi="http:/ ...

  3. xsi:schemaLocation详解

    在实例中引用模式文档 XML Schema提供了两个在实例文档中使用的特殊属性,用于指出模式文档的位置.这两个属性是:xsi:schemaLocation和xsi:noNamespaceSchemaL ...

  4. 详解 xml 文件头部的 xmlns:xsi

    xmlns:(XML Namespaces的缩写)是一个属性,是XML(标准通用标记语言的子集)命名空间的声明.作用是赋予命名空间一个唯一的名称. 命名空间是什么呢? 由于xml允许你自己定义自己的标 ...

  5. XML文档中的xmlns、xmlns:xsi和xsi:schemaLocation

    文章转载自:https://yq.aliyun.com/articles/40353 相信很多人和我一样,在编写Spring或者Maven或者其他需要用到XML文档的程序时,通常都是将这些XML文档头 ...

  6. XML 中的 xmlns、xmlns:xsi、xsi:schemaLocation

      在用 Java 开发项目的过程中,少不了使用 xml 配置文件,比如 web.xml.pom.xml.applicationContext.xml 等等.在这些文件中,都会出现 xmlns.xml ...

  7. 关于XML文档的xmlns、xmlns:xsi和xsi:schemaLocation

    相信很多人和我一样,在编写Spring或者Maven或者其他需要用到XML文档的程序时,通常都是将这些XML文档头拷贝过来,并没有理解其中元素(比如xmlns,xmlns:xsi,xsi:schema ...

  8. XML文档中的xmlns、xmlns:xsi和xsi:schemaLocation理解

    java开发项目中,经常用到xml配置文件,比如web.xml.applicationContext.xml.pom.xml等.在这些文件中都有xmlns.xmlns:xsi和xsi:schemaLo ...

  9. XML:文件头部xmlns详解

    目录 先修知识 POM 文件头示例 从 xmlns 的作用讲起 xmlns 出现在没有前缀的元素中的含义 xmlns:xsi 与 xsi:schemaLocation 本文转载自:https://bl ...

最新文章

  1. matlab sae模型,matlab的Deep Learning的toolbox 中的SAE算法
  2. 【转载】深度学习数学基础(二)~随机梯度下降(Stochastic Gradient Descent, SGD)
  3. Code First :使用Entity. Framework编程(7) ----转发 收藏
  4. 2013蓝桥杯-B-省赛-六-三部排序
  5. 华为鸿蒙2.0操作页面,华为鸿蒙2.0开面界面确认,这一变化你可懂
  6. java中gc触发的条件,各种gc触发条件统计
  7. Forefront TMGUAG
  8. java voip 的sip服务器搭建_用树莓派搭建低成本VOIP服务器与电话系统
  9. ACProtect ——脱壳
  10. Day15——Huffman编码之构建Huffman树
  11. mysql面试题学校三表查询_mysql经典面试题之学生成绩表
  12. Java递归求全排列详解
  13. golang中定时器ticker
  14. 香蕉派 BPI-R2 作为4G多路聚合融合通信应用开发平台
  15. JavaScript-事件和事件对象、实现键盘打字小游戏
  16. 华为公司官方指定的五种主流编程语言
  17. 用函数编程实现输出 m~n之间所有素数,并求和,m和n由键盘输入。(c语言)
  18. GRUB4DOS详解
  19. 没有同理心_在设计上超越同理心
  20. 炎症回路和肠道微生物

热门文章

  1. 使用Pipeline构建算法链
  2. 2021年初级会计考试题库app
  3. 用测试金字塔指导数据应用的测试
  4. 支持Mac及Windows iOS模拟器苹果盒即将登场
  5. jquery mouseleave和mouseout的区别
  6. 【Tornado】Tornado入门教程
  7. 硬盘基本知识(磁头、磁道、扇区、柱面
  8. JavaScript基础之闭包
  9. 30万亿的新零售生意,从这5个机会说起
  10. 原生app 打开uni小程序 传参问题