XML基础
XML作为一种优秀的数据存储形式、数据交换方式被广泛接受与应用。
了解XML
XML: 可扩展标记语言 (Extensible Markup Language),它提供了一套跨平台、跨网络、跨程序的数据描述方式,它是w3c组织发布的技术。
- xml有两个版本1.0 1.1,我们使用1.0版本(1.1不能向下兼容)。
- 可扩展标记语言:
- 标记性语言:html是标记型语言,使用标签操作。
- 可扩展:html里的标签都是固定的,每个标签都有特定的含义, XML 不是固定的,标签可以自己定义, 比如可以写中文的标签<人></人> 。
- 例如:一个XML文档实例
<?xml version="1.0" encoding="UTF-8"?>
<个人信息>
<姓名>田诗琪</姓名>
<生日>2011-04-11</生日>
<性别>女</性别>
<身高>83cm</身高>
</个人信息>
- SGML、HTML和XML之间的关系:
- SGML是一种在Web发明之前就早已存在的,它是一种定义标记语言的元语言。
- HTML和XML都是从SGML发展而来的标记语言,因此,他们有一些共同点,如相似的语法和标记的使用。
- 不过HTML是在SGML定义下的一个描述性的语言,只是SGML的一个应用,其DTD作为标准被固定下来
- 而XML是SGML的一个简化版本,是SGML的一个子集。严格意义上来说,XML仍然是SGML。
- XML实现如下功能: 不同系统之间传输数据,数据结构清晰,利于维护,用于表示生活中关系的数据,经常用在配置文件。
- XML历史:
- 1998年2月,W3C发布了XML1.0标准-1998年2月,W3C发布了XML1.0标准
- 2007年11月发布了XML1.0第5版。经过了4次修订。
其目的是为了在Web上能以现有的超文本标记语言(HTML)的使用方式提供,接受和处理通用的SGML。XML是SGML的一个简化子集,它以一种开放的、自我描述的方式定义了数据结构。在描述数据内容的同时能突出对结构的描述,从而体现出数据与数据之间的关系。 - W3C组织于2004年2月4日发布了XML1.1的推荐标准,后来又于2006年8月发布了第2版,这是最新的XML版本。
- HTML与XML主要区别:
HTML | XML | |
---|---|---|
功能 | 用于数据显示 | 用于描述数据和保存数据 |
标记 | 标记是固定不变的 | 没有固定标记,根据实际需要定义。XML本身是一门元语言 |
语法 | 语法要求宽松 | 有固定的语法要求 |
XML的语法基础
XML的文档分类
- 格式不良好的XML文档
- 格式良好的XML
- 有效的XML文档
XML的文档组成
XML文档在逻辑上主要由以下五个部分组成:
- XML声明
- 文档类型声明
- 元素
- 注释
- 处理指令
- XML声明
文档声明的具体语法格式如下所示:
<?xml version="1.0|1.1"[ encoding="编码方式"] [standalone=”yes|no”]?>
属性说明:
version: 必需包含该属性,指明以下文档遵循哪个版本的XML规范。该属性必须放在其它属性之前,属性的合法值为1.0或1.1。
encoding:该属性可以被省略,指明文档中要采用的字符编码方式。当省略该属性时,属性的默认值为utf-8。
standalone:该属性可以被省略,指定该XML文档是否和一个外部文档配套使用。该属性为yes是说明当前XML文档是一个独立的XML文档,与外部文件无关联。否则相反。当省略该属性时,属性的默认值为yes。
- 文档类型声明
<!DOCTYPE china SYSTEM "mydtd.dtd">
- 处理指令
处理指令(Processing Instructions,简称PI)允许文档中包含由应用程序来处理的指令。在XML文档中,有可能会包含一些非XML格式的数据,XML处理器无法处理这些数据,我们就可以通过处理指令来通知其它应用程序来处理这些数据。
处理指令(PI)的语法和XML声明类似,以“<?”开始并以“?>”结束。常见的使用样式表单的处理指令如下所示。
<?xml-stylesheet href="hello.css" type="text/css"?>
<?xml-stylesheet href="hello.xsl" type="text/xsl"?>
- 注释
XML文档中,注释可以出现在文档中其它标记之外的任何位置。另外,它们还可以在文档类型声明中语法(grammar)允许的地方出现。
以“<!–”开始,以“- ->”结束
- 注释不能出现在XML声明之前,XML声明必须是文档最前面的部分。下面的情况是不允许的:
<!--Author :tanglin -->
<?xml version="1.0"?>
- 注释不能出现在标记中,下面的例子是非法的。
<greeting<!--Begin greet-->>Hello,world!</greeting>
- 注释可以包围和隐藏标记,但要注意的是,在增加注释之后,要保证剩余的文本仍然是一个结构完整的XML文档。下面的例子是错误的:
<?xml version="1.0"?>
<greeting>
<!--
<title>This is a greeting example--></title>
<content>Hello,world!</content>
</greeting>
- 当我们将注释部分去掉的时候,文档结构仍然是完整的。
<?xml version="1.0"?>
<greeting>
<content>Hello,world!</content>
</greeting>
- 字符串“–”(双连字符)不能在注释中出现
- 元素
-
XML元素构成:
- 区分标记、元素和属性
- 标记是由<>包含的对象,例如:就是一个标记。标记通常包括两种:开始标记和结束标记。
- 元素通常包括开始标记、结束标记以及标记的内容构成,是文件的基本对象,是通过标记进行定义的。
- 属性是为元素附加信息,总是以“属性名=”属性值””的形式给出。
- 区分标记、元素和属性
-
元素的形式
- XML中元素有两种形式分别是:空元素和非空元素。
- 空元素:空元素即内容为空的元素,编写时空元素中不能包括内容也不能包括子元素。空元素的写法有两种,分别是:
- 单标记的形式,这种方式比较常见也是建议使用的方式
<student/>
- 双标记的形式,这种方式不建议使用
<student></student>
- 非空元素:所有的非空元素都是双标记的,开始标记和结束标记约定了元素的范围。非空元素包括如下三类:
1)带有文本内容的元素,该内容位于开始标记和结束标记中间。
2)带有子元素的元素,元素中可以嵌套子元素,而且嵌套的层数没有限制。
3)同时带有子元素及文本内容的元素,这种类型的元素不建议使用
-
元素的内容
- 字符数据:如
<tag>abc</tag>
,元素内容是abc。 - 字符引用和实体引用:如字符引用:
<?xml version="1.0" encoding="UTF-8"?>
<tag>abc<</tag>
实体引用:
<?xml version="1.0" encoding="UTF-8"?>
<tag>abc<</tag>
- CDATA段
CDATA段以字符串“<![CDATA[”开始,以字符串“]]>”结束。中间包含的都是纯字符数据,但字符数据可以是不包含CDATA段的结束定界符的任意字符串。在字符数据可以出现的任何地方都可以使用CDATA段。CDATA段主要用于需要将整个文本解释为字符数据而不是标记的情况下。例如:<?xml version = "1.0" ?> <java> <![CDATA[ if (a > b && c < b) max = a; ]]> </java>
- 空白处理
可以在元素中使用一个特殊的属性xml:space,来通知应用程序保留此元素中的空白,xml:space 属性接受两个值:default 和 preserve。
default :此值允许应用程序根据需要处理空白。 如果不包含 xml:space 属性,结果与使用 default 值相同。
preserve :此值表示应用程序按原样保留空白,空白可能有含义。
- 字符数据:如
XML相关技术
- 检查XML语义相关技术:DTD 和 Schema
- DTD是Document Type Definitions的缩写,即文档类型定义。是W3C推荐验证XML文档的正式规范。一个XML文档同时遵守语法和DTD的语法规定,才能保证XML文档的易读性,更好的更准确的描绘数据。
- DTD可以指定XML文件中哪些元素、那些属性是必需的,元素与元素之间的先后关系、嵌套关系以及出现次数等。
- XML Schema,即XML模式,也被称为XML模式定义(XML Schema Definition,XSD)。它与DTD一样用于验证XML文档有效性的方法。XML Schema本身也是一个XML文档。与DTD比较而言,DTD对对XML命名空间支持不好,而XML Schema对XML命名空间支持较好。
- 生成和解析XML文档的相关技术
- DOM:文档对象模型(DOM) 是基于树结构的用于程序访问和维护HTML和XML文档的应用程序接口(API)。
- JDOM: JDOM(Java Document Object Model,Java文档对象模型。为了给Java程序员提供一套简单易用的操作XML的API。
- DOM4J:DOM4J是一个Java的XML API,类似于JDOM,用来读写XML文件的。DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。无论性能、功能和易用性哪一方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。
- SAX: SAX(Simple APIs for XML),由XML-DEV邮件列表的成员开发,是事实上的工业标准。使用SAX,解析器通过向应用程序报告解析事件流来告知应用程序文档的内容。SAX是基于事件的API,一旦事情开始发生,你不需要调用解析器,而是解析器调用程序。与DOM相比较,SAX不要求将整个XML文件一起装入内存。
- Digester: Digester本来仅仅是Jakarta Struts中的一个工具,用于处理struts-config.xml配置文件。显然,将XML文件转换成相应的Java对象是一项很通用的功能,这个工具理应具有更广泛的用途,所以很快它就在Jakarta Commons项目(用于提供可重用的Java组件库)中有了一席之地。如今Digester随着Struts的发展以及其的公用性而被提到commons中独自立项,是apache的一个组件 apache commons-digester.jar,通过它可以很方便的从xml文件生成java对象。
- XQuery: XQuery 即XML Query,是W3C所制定的一套标准,用来从类XML文档中提取信息,类XML文档可以理解成一切符合XML数据模型和接口的实体,他们可能是文件或RDBMS。XQuery相对于XML文件等同于SQL相对于数据库。
- 显示XML文档的相关技术
- CSS: CSS是Cascading Style Sheets(层叠样式表单)的缩写,它是一种用来表现HTML或 XML 等文件样式的计算机语言,能够真正做到网页表现与内容分离的一种样式设计语言。
- XSLT: XSLT是扩展样式表转换语言(Extensible Style sheet Language Transformations)的简称,这是一种对XML文档进行转化的语言,XSLT中的T代表英语中的“转换”(transformation)。它是XSL(Extensible style sheet language)规范的一部分。XSLT用于将一种XML文档转换为另外一种XML文档,或者可被浏览器识别的其他类型的文档,比如HTML和XHTML。
- XML的命名空间
在复杂的大型XML文档中,不可避免的会遇到标识名称相同,但代表的意义不同的现象。命名空间就是解决这类问的方法,它是通过在元素名前增加独特的标识符,制定元素的有效空间。