XML是可扩展标记语言,它定义了按格式编码文件的一系列规则[3],编码的文件是机器可读和人可读的。XML文件对于机器可读是基于XSD(XML Schema Definition)[1]的。XSD是受W3C推荐的XML文件的结构描述文件的规范文档,其中详细说明了如何正式描述XML文件中的元素[3];也就是说,XSD是XML文件的结构描述文件(比如.xsd文件,一个XSD的实例,它是依照XSD的规范来书写的)的规范文档。编译xml的方式是跨语言的,不同语言的解析方式相同,只是具有不同的语言形式。java中解析XML的方式之一是DOM解析,他是基于jdk的lang包中DocumentBuilderFactory类的,如下所示[2]。

public class DOMTest {
public static void main(String[] args) {
//创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder的对象
try {
//创建DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
//通过DocumentBuilder对象的parser方法加载books.xml文件到当前项目下
Document document = db.parse("books.xml");
//获取所有book节点的集合
NodeList bookList = document.getElementsByTagName("book");
//通过nodelist的getLength()方法可以获取bookList的长度
System.out.println("一共有" + bookList.getLength() + "本书");
}
}
}

  那么xml中xsd、xsi、xmlns的含义是什么呢。我以Maven工具的pom.xml文件为例进行说明。Maven的pom.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">
  其中,xmlns的值是默认的命名空间;一个xml里可能有多个命名空间,不同的命名空间可对应不同的.xsd约束;
              xmlns:xsi中xsi表示命名空间“http://www.w3.org/2001/XMLSchema-instance”的简写[3];
              xsi:schemaLocation的值为要引入的文档规范实例(比如.xsd文件);

  我刚开始接触XML时,对.xsd和XSD的区别比较困惑。既然有了.xsd,为什么还要XSD,这个我后面会说。说到超文本标记语言,html是我们最常用的超文本标记语言。html和xml的重要区别是,在xml中可以自定义标签。html和xml的区别如下图:

  在xml中XSD和.xsd的含义不同。XSD是由W3C发布的;而.xsd是XML的使用者依据XSD规范定义的XML格式的说明文档,在定义.xsd的同时,还要定义依据XSD对.xsd中指定标签的解析。比如,MAVEN工具定义了http://maven.apache.org/xsd/maven-4.0.0.xsd,并依据XSD对.xsd中指定标签进行解析。.xsd文件与XML是类与对象,数据库表结构和记录的关系。.xsd文件可以看成一个或多个XML文件的模板,在这里可以定义XML文件的元素、元素的属性、元素的排列方式、元素包含的内容等[4]。

  为了更好的说明.xsd文件和命名空间的对应关系,可以在地址栏打开http://maven.apache.org/xsd/maven-4.0.0.xsd",它包含如下头信息:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                            xmlns="http://maven.apache.org/POM/4.0.0" 
                            elementFormDefault="qualified" 
                            targetNamespace="http://maven.apache.org/POM/4.0.0">
  targetNamespace表示该.xsd只对该目标命名空间生效。

  在一个xml文件中可以定义多个命名空间,比如在springmvc-servlet.xml文件中,它的文件头信息如下:

       <beans xmlns="http://www.springframework.org/schema/beans"
                   xmlns:mvc="http://www.springframework.org/schema/mvc"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:context="http://www.springframework.org/schema/context"
                 xsi:schemaLocation="
                         http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans.xsd
                         http://www.springframework.org/schema/mvc
                         http://www.springframework.org/schema/mvc/spring-mvc.xsd
                         http://www.springframework.org/schema/context
                         http://www.springframework.org/schema/context/spring-context.xsd">
     springmvc-servlet.xml的每个命名空间对应不同的xsd约束文件。如下图,以命名空间为前缀的标签/属性受该命名空间对应的xsd文件约束。

  XSD是XML Schema语言中的一支。它受到DTDs和其它早期XML Schema(比如DDML,SOX,XML-Data和XDR)的影响。XSD采取了一些他们的特点,但同时也是他们之间的妥协。

  相比于DTD,XSD最显著的特点是命名空间和数据类型的支持,在XSD中元素属性值可以为整形或日期类型,而不仅仅是二进制文本。[3]

参考资料:

  [1] XML Schema Part 1 : Structures Second Edition

  [2] XML解析-java中XML解析的4种方式

  [3] XML Schema(W3C)

  [4] 文档类型定义(DTD)

xml中xsd、xsi、xmlns的含义的更多相关文章

  1. struts.xml中的配置常量的含义

    struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容.当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false. stru ...

  2. AndroidManifest.xml中声明权限——各种permission含义摘录

    android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android. ...

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

    https://yq.aliyun.com/articles/40353 ************************************* 摘要: 相信很多人和我一样,在编写Spring或者 ...

  4. XML 中的 xmlns 等属性的意义

    原文:https://blog.csdn.net/lengxiao1993/article/details/77914155 Maven 是一个 java 开发人员很难绕过的构建工具, 因为有众多的开 ...

  5. 【转载】关于XML文档的xmlns、xmlns:xsi和xsi:schemaLocation

    原文在: https://yq.aliyun.com/articles/40353 这里有转载:http://www.cnblogs.com/zhao1949/p/5652167.html 先来一段S ...

  6. xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance

    http://blog.sina.com.cn/s/blog_4b6f8d150100nx3e.html http://blog.csdn.net/iaiti/article/details/4226 ...

  7. XML中DTD,XSD的区别与应用

    XML我们并不陌生,在企业级应用中有很广的用途.具体就不再说,下面介绍一下DTD,XSD的区别并以XSD为例看spring中定义与使用.1.DTD(Documnet Type Definition)D ...

  8. javaWeb项目中web.xml的xsd( XML Schemas Definition)文件

    <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://w ...

  9. load-on-startup在web.xml中的含义

    在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是: 标记容器是否在启动的时候就加载这个servlet. 当值为0或者 ...

  10. xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊。

    1.xml文件的schema也是经过jdk编译器编译的,如果xsd没引入完整,而xml中又用到了这些标签,就会编译不通过啊. 2.java编译器会下载xsd的指定链接文件,加在代码里,一起编译

随机推荐

  1. 记一次 .NET某工控自动化系统 崩溃分析

    一:背景 1. 讲故事 前些天微信上有位朋友找到我,说他的程序偶发崩溃,分析了个把星期也没找到问题,耗费了不少人力物力,让我能不能帮他看一下,给我申请了经费,哈哈,遇到这样的朋友就是爽快,刚好周二晚上 ...

  2. vue全局事件总线和消息订阅详细讲解

    全局事件总线 在写组件的时候,我们都知道父传递子 也知道子传递给父 但是组件间嵌套复杂的时候我们应该怎么通信呢? 有的小伙伴会说适用vuex,的确是可以解决问题的 下面我们说一下全局事件总线 一种组件 ...

  3. 小记录 单选框的注意点 html中字符串拼接 el-upload手动上传 表格跳转 v-for动态添加背景色 控制label标签于文本框之间的间距

    在element-ui中 单选框的v-model的值最好是一个字符串 否者可能不能够进行数据回填哈 单选框 的类型必须是字符串类型哈 在elemnet-ui中 如果你想从A页面拿到B页面中的值 可以有 ...

  4. 【JS 逆向百例】有道翻译接口参数逆向

    逆向目标 目标:有道翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.youdao.com/translate_o?smartresult=di ...

  5. TienChin-课程管理-配置课程字典

    课程类型 课程适用人群

  6. 复原docker中容器的启动命令

    复原 docker 容器的启动命令 前言 查看 docker 容器的启动命令 参考 复原 docker 容器的启动命令 前言 不规范的操作,在启动 docker 容器,没有留命令脚本,或者没有使用 d ...

  7. 18.3 NPCAP自定义数据包过滤

    NPCAP 库是一种用于在Windows平台上进行网络数据包捕获和分析的库.它是WinPcap库的一个分支,由Nmap开发团队开发,并在Nmap软件中使用.与WinPcap一样,NPCAP库提供了一些 ...

  8. C/C++ 反汇编:针对加减乘除的还原

    算术运算通常是指,加减乘除四则运算,而计算机中的四则运算与数学中的有所不同,同样是实现算术运算,高级语言与汇编语言的实现思路完全不同,往往一个简单的减法运算,都要几条指令的配合才能得出计算结果,而为了 ...

  9. 最好的个人博客评论区实现方案推荐:waline

    我的博客一直没有一个好看的评论区,自己做又不会..没错,我是个前端渣渣.调研了一下,一开始想套用一些网上的静态模板,但是改造成本还是挺大的,后来接触到了Waline,简单了解了以下,我就知道了,它就是 ...

  10. 手撕B树 | 二三查找树,B+树B*树你都会了吗? | 超详细的数据结构保姆级别实现

    说在前面 今天给大家带来B树系列数据结构的讲解! 博主为了这篇博客,做了很多准备,试了很多画图软件,就是为了让大家看得明白!希望大家不要吝啬一键三连啊!! 前言 那么这里博主先安利一下一些干货满满的专 ...