XML文件中xmlns、xmlns:xsi和xsi:schemaLocation、dtd文件的作用

对于经常复制粘贴xml文件头的我来说,今天终于决定抽一点时间来记录一下这些元素的意思。在Spring的项目开发中,我们会经常见到这些元素。例如如下的xml文件

  

 

这个文档中,根元素就不用说了,接下来是xmlns。那么什么是xmlns呢?xmlns其实是XML Namespace的缩写,可译为“XML命名空间”,但个人觉得,翻译后的名字反而不好理解,所以我们就叫它为XML Namespace吧。

1. 为什么需要xmlns

考虑这样一个xml文档,存在两个标签:表示html表格元素的

:

Apple Banana

和描述一张桌子的

:

African Coffee Table 80 120

假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的

元素,就会发生命名冲突。XML 解析器是无法确定如何处理这类冲突。为了解决上述问题,xmlns就产生了。

2.如何使用xmlns

很简单,使用语法: xmlns:namespace-prefix="namespaceURI"。其中namespace-prefix为自定义前缀,只要在这个XML文档中保证前缀不重复即可;namespaceURI是这个前缀对应的XML Namespace的定义。例如,

xmlns:context="http://www.springframework.org/schema/context"

这一句定义了一个http://www.springframwork.org/schema/context的Namespace(这和Java类中的包的声明很相似),并将其和前缀context绑定。所以上面的Spring XML文档中会有这么一句:


这里的元素就来自别名为context的XML Namespace,也就是在http://www.springframework.org/schema/context中定义的。
例如:



  
    Apples
    Bananas
  

3. xmlns和xmlns:xsi有什么不同

xmlns表示默认的Namespace。例如Spring XML文档中的

xmlns="http://www.springframework.org/schema/beans"

这一句表示该文档默认的XML Namespace为http://www.springframwork.org/schema/beans。对于默认的Namespace中的元素,可以不使用前缀。例如Spring XML文档中的


  

xmlns:xsi表示使用xsi作为前缀的Namespace,当然前缀xsi需要在文档中声明。

4. xsi:schemaLocation有何作用?

xsi:schemaLocation属性其实是Namespace为http://www.w3.org/2001/XMLSchema-instance里的schemaLocation属性,正是因为我们一开始声明了

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

这里才写作xsi:schemaLocation(当然一般都使用这个前缀)。它定义了XML Namespace和对应的XSD(Xml Schema Definition)文档的位置的关系。它的值由一个或多个URI引用对组成,两个URI之间以空白符分隔(空格和换行均可)。第一个URI是定义的XML Namespace的值,第二个URI给出Schema文档的位置,Schema处理器将从这个位置读取Schema文档,该文档的targetNamespace必须与第一个URI相匹配。例如

xsi:schemaLocation="http://www.springframework.org/schema/context 
                   http://www.springframework.org/schema/context/spring-context.xsd"

这里表示Namespace为http://www.springframework.org/schema/context的Schema的位置为http://www.springframework.org/schema/context/spring-context.xsd。这里我们可以打开这个Schema的位置,下面是这个文档的开始部分:


关于schema的作用,可以看这里https://www.cnblogs.com/DreamDrive/p/4184375.html

你可能感兴趣的:(XML文件中xmlns、xmlns:xsi和xsi:schemaLocation、dtd文件的作用)