什么是XML?
相信很多人在学习java web的时候都会很疑惑XML是什么?xmlns是什么?xmlns:xsi,xsi:schemalLocation又是什么?首先我们要了解
What is XML
XML全称可扩展标记语言(英语:Extensible Markup Language,简称:XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。
The history of XML
XML是从1995年开始有其雏形,并向W3C(万维网联盟)提案,而在1998年二月发布为W3C的标准(XML1.0)。XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从1960年代就开始发展的GML(Generalized Markup Language)标准化后的名称。
GML的重要概念:
- 文件中能够明确的将标示与内容分开
- 所有文件的标示使用方法均一致
1978年,ANSI将GML加以整理规范,发布成为SGML,1986年起为ISO所采用(ISO 8879),并且被广泛地运用在各种大型的文件计划中,但是SGML是一种非常严谨的文件描述法,导致过于庞大复杂(标准手册就有500多页),难以理解和学习,进而影响其推广与应用。
同时W3C也发现到HTML的问题:
- 不能解决所有解释数据的问题 - 像是影音档或化学公式、音乐符号等其他形态的内容。
- 性能问题 - 需要下载整份文件,才能开始对文件做搜索。
- 扩充性、弹性、易读性均不佳。
为了解决以上问题,专家们使用SGML精简制作,并依照HTML的发展经验,产生出一套使用上规则严谨,但是简单的描述数据语言:XML。
XML是在一个这样的背景下诞生的——为了有一个更中立的方式,让消费端自行决定要如何消化、呈现从服务端所提供的信息。
XML被广泛用来作为跨平台之间交互数据的形式,主要针对数据的内容,通过不同的格式化描述手段(XSLT,CSS等)可以完成最终的形式表达(生成对应的HTML,PDF或者其他的文件格式)。
Apply
XML设计用来传送及携带数据信息,不用来表现或展示数据,HTML语言则用来表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。XML文档·必须匹配文档类型定义(DTD)或XML纲要,XML文件的第二行并不一定要包含文档元素;如果有注释或者其他内容,文档元素可以迟些出现。XML的结构有一个缺陷,那就是不支持分帧(framing)。当多条XML消息在TCP上传输的时候,无法基于XML协议来确定一条XML消息是否已经结束。
example:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
第一行很好理解,version即指XML的版本,encodeing指XML文件的编码格式。这里编码也简单说一下吧,偶尔当我们打开文件时,文件虽然能打开,但是却是乱码。世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号,因此,要想打开一个文本文件,就必须知道它的编码方式。UTF-8是互联网上使用最广的一种Unicode的实现方式,UTF-8是一种变长的编码方式,它可以根据1-6个字节表示一个符号,根据不同的符号,而变化字节长度。对于单字节的UTF-8,该字节的最高位为0,其余7位用来对字符进行编码;对于多字节的UTF-8编码,如果编码包含多个字节,那么第一个字节的最高最高两位为01,该字节的剩余各位用来对字符进行编码。第一个字节之后的所有字节,都是最高两位为10,其余6位用来对字符进行编码。
第二行,xmlns即XML namespace,也叫做XML的命名空间,用于在一个XML文档中提供名字唯一的元素和属性,XML命名空间在W3C推荐规范《Namespaces in XML》中定义。XML命名空间于1999年1月14日成为W3C的推荐规范。W3C将XML命名空间定义为以国际化资源标识符(Internationalized Resource Identifier,IRI)引用为标识的元素名和属性名的集合。
为什么要使用命名空间?一个XML文档可能包括来自多个XML词汇表的元素或属性,如果每一个词汇表指派一个命名空间,那么相同名字的元素或属性之间的名称冲突就可以解决。举一个简单的例子来说,在一个订单的XML文档中需要引用到客户和所购买的产品,customer元素和product元素可能都有一个叫做id的子元素。这时候要引用id元素会造成名称冲突,但是如果将两个id元素放到不同的命名空间中就会解决这个问题。
而xmlns附带的xsi指xml schema instance,是指当前xml所要遵循的标签规范。这里补充一下,XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器
再看
上面一行的语法是:xsi:schemaLocation = "键" "值",中间用空格分开,前一个”键“指代命名空间,后一个”值“指代XSD Location URL,这个值指示了前一个命名空间所对应的 XSD 文件的位置, xml parser 可以利用这个信息获取到 XSD 文件, 从而通过 XSD 文件对所属命名空间的元素结构进行校验。javaee和web的值同理。
参考文档:https://zh.wikipedia.org/wiki/XML%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4
https://zh.wikipedia.org/wiki/XML