XML(eXtensible Markup Language,可扩展标记语言),是一个基于文本格式表示的 结构化信息 , 提供一套跨平台、跨网络、跨程序语言的数据描述方式
关键词: 可扩展标记语言、数据描述方式、跨平台、跨网络、跨程序语言
标记语言(Markup Language)指用一系列约定好的标记对电子文档进行标记,以实现对电子文档的语义、结构及格式的定义
XML发展史
- 1980年代早期,IBM设计了一种标识语言——GML (Generalized Markup Language,通用标记语言)。GML 能够将标识和内容分开,所有文件的标签(标识)使用方法均一致 (例如标记字体大小和版面的标识)
- 1986年国际标准化组织(ISO)正式发布了标记语言标准(ISO 8879),成为新的标准通用语言——SGML
SGML功能强大,是可以定义标记语言的元语言,被广泛地运用在各种大型的文件计划中,但是SGML是一种非常严谨的文件描述法,导致其过于庞大复杂(光标准手册就有500多页),难以理解和学习,进而影响其推广与应用。 HTML是SGML的子集,是一个非常成功的SGML应用。虽然HTML限制定义新的标签,背离了SGML的思想,但是在实际应用中取得了成功。
- 1982年 W3C 发布了 XML 1.0标准,后来又修订了4次,2007年11月发布了XML 1.0 第五版。
- W3C组织于2004年2月四日发布了XML1.1的推荐标准,后又于2006年8月发布了第2版
其目的是在WEB上能以现有的HTML的使用方式提供、接受和处理通用的SGML。XML是SGML的一个简化子集,它以一种开放的、自我描述的方式定义数据结构,在描述数据结构的同时能突出对结构的描述,从而体现出数据与数据之间的关系。
XML文档组成、语法、DTD和Schema
XML的文档组成
- XML声明:
<?xml version = "1.0" encoding = "UTF-8" standalone-"yes"?>
。必需且必须位于第一行 - 文档类型声明: 外部引用或直接在文档中给出DTD
DTD(Document Type Definition),XML从SGML继承了用于定义语法规则的DTD机制,HTML就有一个标准的DTD文件,所以其组织结构和所有标签都是固定的。详细介绍见下文。
- 处理指令(Processing Instruction,PI),XML处理一些非XML格式的数据,使用指令通知其他应用程序来处理这些数据。
- 注释:注释不能出现在标记中,可以包围和隐藏标记。注释中不能出现
--
双连字符;不允许以--->
结尾 - 元素:
<元素名称>标记内容</元素名称>
正确理解 标记、元素和属性
- 标记: 标记是一对尖括号和两者之间的内容,包括元素名和所有属性;如
<tag color="white">
、</tag>
和<tag/>
分别是开始标记、结束标记和单标记- 元素: 元素通常由开始标记、结束标记以及标记的内容构成,是文件的基本对象,是通过标记进行定义的。指开始标记、结束标记以及两者之间的一切内容,包括属性、文本、注释以及子元素
- 属性: 属性是元素的附加信息,总是以
"属性名"="属性值"
的形式给出,总是在元素的开始标记中进行定义
XML语法
- 双标记、单标记都必需关闭标签
<tag></tag>
和<tag/>
- 所有标签都区分大小写
- 标签命名规则:
- 允许使用中文、可以包含空格、大小写敏感、不能用
XML
(无论大小写)开头、可以以字母、下划线(_)开始 - 后面可以是字母、下划线、数字、点号(.)或者连接线(-)
- 允许使用中文、可以包含空格、大小写敏感、不能用
- 所有标签必需合理嵌套
- 所有标签属性必需使用双引号(“)或单引号(‘)括起来,两者不能混用
- 有且只能有一个根元素
- 元素内容:
- 子元素、字符数据、字符引用、实体引用、CDATA字段、空白处理、行尾处理、语言标识
- 字符数据: 任意字符串,但不能包含任何标记的起始定界符(
<
、&
)和CDATA段的结束定界符(]]>
) - 字符引用/实体引用: 字符引用和实体引用都是以一个和号(
&
)开始并以一个封号(;
)结束。 如果采用的是字符引用,需要在和号之后再加上一个井号(#
),之后是所需字符的十进制或十六进制代码; 如果是实体引用,在和号之后写上字符的助记符 - CDATA段:
<![CDATA[ 任意不包含CDATA段的结束定界符的字符串]]>
,主要用于需要将整个文本解释为字符数据而不是标记的情况下,CDATA段内容不被XML处理器分析XML预定义的字符引用和实体引用
|字符|字符引用(十进制/十六进制)|预定义实体引用| |:-:|:-:|:-:| |
<
|<
/<
|<| |>
|>
/>
|>| |"
|"
/"
|"| |'
|'
/'
|&apos| |&
|&
/&
|&|
- 字符数据: 任意字符串,但不能包含任何标记的起始定界符(
- 子元素、字符数据、字符引用、实体引用、CDATA字段、空白处理、行尾处理、语言标识
- 空白处理: 空白包括 空格、制表符和空行。
- 行尾处理: XML处理器在解析前,要将所有的两个字符序列
#xD#xA
以及单独的#xD
字符转换成单个的#xA
字符不同的计算机系统采用的行分隔符是不同的。在XML空白字符中,有两个标准的ASCII码行尾控制字符:回车(CR,#xD)和换行(LF,#xA)。回车是将光标移动到当前行的开头,换行是将光标“垂直”移动到下一行(不改变光标的水平位置)。
- 在windows平台下,采用
#xD#xA
的组合作为行分隔符 - 在Linux、UNIX系统下,采用
#xA
作为行分隔符 - 在Mac OS下,采用
#xD
作为行分隔符
- 在windows平台下,采用
- 语言标识: 使用
xml:lang
属性指出元素的内容和属性值所使用的语言(自然或人工语言)
格式不良好的XML文档
没有完全遵守XML文档语法规则的文档;例如文档中某个开始标记没有对应的结束标记。
格式良好的XML
- 有且只有一个根元素
- 符合XML元素的嵌套规则
- 满足XML规范中定义的所有正确性约束
- 文档中直接或间接引用的每一个已分析实体嗾使格式正确的
有效的XML文档
- XML文档是一个格式良好的文档
- 语法符合DTD的定义或者Schema规定
DTD文档类型定义
W3C推荐的验证XML文档的正式规范
当一个XML单独存在时,其中的元素可以由用户随意定义。但实际应用中往往需要XML文档编写者和提供者遵循共同的原则,比如约定文档可以有哪些元素,哪些元素是必须的等等。DTD就是一种有效约定。
DTD内部包含下列语句:
- 元素类型声明 <!ELEMENT >
- 属性列表声明 <!ATTLIST >
- 实体声明 <!ENTITY >
- 符号声明 <!NOTATION >
DTD可以是独立的文档,扩展名为.dtd
,也可以存在于XML文档内部(但要放置于<!DOCTYPE[...]>之中
)
内部DTD
<!DOCTYPE 根元素名称 [
<!ELEMENT 根元素名称 (子元素1,子元素2)>
<!ELEMENT 子元素1 (#PCDATA)
<!ELEMENT 子元素2 (#PCDATA)
<!ATTLIST 子元素1 属性1 CDATA #REQUIRED>
]>
外部DTD:
在XML文档中按以下语法格式添加
<!DOCTYPE (根元素名称) SYSTEM "外部DTD的URI地址">
SYSTEM
关键字表示文档使用的是私有DTD文件;
外部DTD URI可以是相对URI也可以是绝对URI,也被称为系统标识符(system identifier)
公用DTD
<!DOCTYPE (根元素名称) PUBLIC "DTD的标识名" "公用DTD的URL地址"
公共DTD名称的一些约定