<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">

    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.beokwithanything.springboot</groupId>
    <artifactId>springboot_start</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

xmlns 是 xml (name space) 的缩写,意思是 xml命名空间

xmlns 是<project></project> 的一个属性

xmlns 类似于java里的包名,用于区分 同名而不同来源的标签

假如在一个xml文件里写了多个同名的标签,可用xmlns属性来区分此标签不同于其他的同名标签

例如我这里有两个<table>标签:

<!-- 这里的 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>

一个 xml 文档中如果包含如上两种定义不同 但是名称相同的元素, xml 解析器是无法解析的,

因为它不能确定当你调用时应该返回哪个元素。

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

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

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

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

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

<t:table xmlns:t="http://www.w3school.com.cn/furniture">
    <t:tr>
        <t:td>Apples</t:td> 
        <t:td>Bananas</t:td>
    </t:tr> 
</t:table>
 
<h:table xmlns:h="http://www.w3.org/TR/html4/"> 
    <h:name>African Coffee Table</h:name> 
    <h:width>80</h:width> 
    <h:length>120</h:length> 
</h:table>

所以, 对于命名空间的标识符, URI 的作用仅仅是 保证唯一性, 它并不需要对应一个可以访问的资源或文件 !

但是, 有很多公司都会让 namespace 的 URI 指向一个包含该命名空间信息的网页


<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">

    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.beokwithanything.springboot</groupId>
    <artifactId>springboot_start</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

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

它的语法如下:

<elementName xmlns="namespaceURI">

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

xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 http://www.w3.org/2001/XMLSchema-instance。

但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。

这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。

XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器:

XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。


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


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 文件的内容


---------------------
作者:萧萧冷
来源:CSDN
原文:https://blog.csdn.net/lengxiao1993/article/details/77914155
版权声明:本文为博主原创文章,转载请附上博文链接!