XML文档 标签理解

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

本文是针对我在手把手编写spring.xml时,产生的疑惑,因为不知道每个标签是干嘛的,很是痛苦,所以记录下来,便于以后浏览

参考博客:https://blog.csdn.net/yangyuge1987/article/details/59536964

 

日常java项目, web.xml,application.xml,pom.xml等,在这些文件中都有 xmlns, xmlns:xsi, xsi:schemaLocation.

XML文档 标签理解_第1张图片

 

在平常自己编写spring,maven,等各种xml文件时,都是一股脑的copy,少了哪些多了哪些也不知道,报错了,就还是百度,所以我决定花点时间把整个结构搞清楚。

 

搞清楚时,从几个问题出发,逐个击破:

 

1 . xmlns、xmlns:xsi和xsi:schemaLocation代表什么意思? 

1. 为什么要使用这些配置信息?

问题一: xmlns、xmlns:xsi和xsi:schemaLocation代表什么意思?

 

xmlns,就是xml命名空间(XML Namespaces)。W3School给的标准就是--》 XML 命名空间提供避免元素命名冲突的方法

 

例如(也是W3School的例子):

  为了解决上述问题,xmlns就产生了。解决过程如下:

 

首先是使用前缀来避免命名冲突。两个xml文档使用前缀后格式如下:

现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的

元素 ()。

通过使用前缀,我们创建了两种不同类型的

元素。

命名空间方式解决冲突:

自身理解这些例子: 就比如一个包下建两个相同名字的类肯定报错==xml解析器无法解析

使用前缀理解:就等于两个Table分别命名成了HTable和FTable

使用命名空间理解:等于先建了两个包H和F,然后分别在两个包下创了两个class

 

上面两个均使用了默认命名空间。 

 

注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

也就是说:xmlns="http://www.springframework.org/schema/beans" 这个url地址只是为 元素命名空间定义的一个唯一名称,没有其它作用

我们再来分析下xmlns:xsi 在配置文件中的作用:

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

根据上面的理解,我们知道这句代码中,xsi表示前缀,http://www.w3.org/2001/XMLSchema-instance 表示命名空间唯一名称

那这句代码到底表示什么含义呢?为什么要引用这句代码呢? 首先我们要知道xsi是xml shema instance的缩写,翻译后就是xml文档实例, 要理解xsi具体含义,我们先理解xml文档验证,在验证xml文档时,一个合法的xml文档,同样遵守文档类型定义(DTD)的语法规则,例如: 

            note.xml

<note>

<to>Georgeto>

<from>Johnfrom>

<heading>Reminderheading>

<body>Don't forget the meeting!body>

note>

那这个note.xml为什么可以这么写呢?肯定是还有个东西在约束着他,那就是dtd文件了, 在note.xml文件中,DOCTYPE声明是对外部DTD文件的引用,这个DTD文件的内容如下:

            note.dtd

]>

上下对比就明白了,上面是根据下面dtd语法的约束编写的,如果此时在note.xml文件中写一个语法是肯定不能通过的,要想通过则必须加

,然后再note.xml中写aa才能通过

 

对于xml文档验证,W3C支持一种基于xml的dtd替代者,它名为xml schema(注意上面我们提到了xml schema instance这个词义)。 

xml schema是描述xml文档结构。现公司基本用的都是*.xsd文件,你们可以点开项目xml schema 语言也称作xml schema 定义(xml schema definition , xsd)。那么xml schema文件是什么样式的呢?针对note.xml 我们定义一个名称为note.xsd的xml schema文件。

                            note.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3school.com.cn"

xmlns="http://www.w3school.com.cn"

elementFormDefault="qualified"> 

<xs:element name="note"> 

<xs:complexType> 

<xs:sequence> 

<xs:element name="to" type="xs:string"/> 

<xs:element name="from" type="xs:string"/> 

<xs:element name="heading" type="xs:string"/> 

<xs:element name="body" type="xs:string"/> 

xs:sequence>

xs:complexType> 

xs:element>

xs:schema>

 

针对note.xsd中具体代码含有不再具体解释。那么我们要理解note.xsd是xsd的一个具体的实例,也就是说现在我们拥有了一个xml schema 的一个实例即一个xml schema instance,名称叫note.xsd。接下来,在note.xml 文件中对note.xsd的使用如下:

            note.xml

 

<note xmlns="http://www.w3school.com.cn"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> 

<to>Georgeto> 

<from>Johnfrom> 

<heading>Reminderheading> 

<body>Don't forget the meeting!body>

note>

 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance这句代码再次出现了,现在我们就明白了,这句代码的意思是我们拥有了一个xml schema instance,这实际编程中这句代码是:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

1

 

其中,前缀、url都是固定不变的,说明遵守w3c协议。 

那么,现在我们拥有了xml schema instance,接下来就是为xml schema instance提供使用的xml schema地址(schemaLocation),即xsd文件全路径。代码如下:

xsi:schemaLocation="http://www.w3school.com.cn note.xsd"

1

 

好了,现在我们就全部理解了xmlns、xmlns:xsi和xsi:schemaLocation的具体含义,及为什么要使用它们。 

现在我有个疑问,如果我们去掉web.xml中的xmlns,项目会不会报错?去掉xmlns:xsi呢?

 

你可能感兴趣的:(Java,xml标签)