声明:发表了才看到csdn博客的这个编辑器排版实在是不敢恭维,相当混乱。发表之前调整得很好,发表之后就全乱了。见谅。
一、标记语言的发展史。
1. SGML (Standard Generalized Markup Language)
SGML SGML 是一种通用的文档结构描述符号化语言,主要用来定义文献模型的逻辑和物理结构。一个 SGML 语言文件由三部分组成,即语法定义、文件类型定义 DTD 和文件实例。SGML 过于庞大复杂(标准手册有 500 多页),难以理解和学习,进而影响其推广与应用。因此,真正大行其道的是 SGML 的一些子集(面向某些领域进行了优化和精简,比如后来的html和xml。
2. 1989 年,欧洲物理量子实验室发明了超文本链接语言,使用它能够轻松地将文字、图形嵌入到网页或其他文件中,这是 HTML 前身。HTML(Hypertext Markup Language)是 SGML 的一种实际应用,其 DTD 作为标准被固定下来。因此,HTML 的功能单一,只能用于编写网页,而不能作为定义其它符号化语言的元语言。经历了 HTML 1.0、HTML 2.0 和HTML 3.0、HTML 4.0 等多个版本,同时 DHTML(动态 HTML,实际上是 script + css + html)、VHTML(虚拟HTML,用于在浏览器中浏览三维对象的技术)、SHTML(一种服务器 API)等技术逐步出现。
二、html存在的问题。
HTML包含许多内置标记,比如 <head>、<table>等都是在 HTML 4.0 里规范和定义。每一种标记的意义都非常明确,用于表示如何在浏览器中显示相应的数据,比如使用表格、或者采用粗体字体。
<html>
<head> <title>Title of page</title> </head>
<body>This is my first homepage<br/>
<b>Hello World!</b>
</body>
</html>
为了解决前面提出的问题,专家们使用 SGML 标准、并依照 HTML 的发展经验,提出一套使用上规则严谨,但是语法简单的信息描述语言:XML( eXtensible Markup Language )。
三、xml的出现
XML的目的是以一种更中立的方式,让用户自行决定要如何理解、呈现从服务端所提供的信息,而着重表示数据以及数据之间的联系。
XML 的特点主要包括四个方面:
1、可扩展性(Extensibility)——XML 允许使用者创建和使用他们自己的标记而不是 HTML 的有限词汇表。
3、自描述性(Self-describing)——不仅人能读懂XML文档,计算机也能处理。XML表示数据的方式真正做到了独立于应用系统,并且数据能够重用。
4、简洁性(Simplicity)——它只有 SGML 约 20% 的复杂性,但却具有 SGML 约 80% 的功能。XML 比完整的 SGML 简单得多,易学、易用并且易实现。
xml的实际应用:
1、XML 成为一种与平台无关的、数据表示和数据交换的载体。
2、XML 被业界认为是最近数十年来最成功的 IT 技术之一,并广泛地应用于 IT 行业的各个领域。
比如:MML(Music ML,面向音乐领域的 XML)、(Math ML,面向数学领域的 XML)、ebXML(面向电子商务领域的 XML)、CML(Chemical ML,面向化学领域的 XML)等等,XML 技术已经深入到自然科学和社会科学的各个领域。
3、XML在语音技术中的应用(VoiceXML )
http://www.vxml.org/
4、XML 与移动嵌入式开发(WAP/WML、Symbian、无线搜索等技术)WML(Wireless Markup Language)是 WAP 规范指定的基于 XML 的基本内容格式,使用支持该规范的设备例如移动电话可以浏览 WML 的页面。WML 是一种基于扩展标记语言 XML 的语言,是 XML 的子集。它可以显示各种文字、图像等数据,专为无线设备用户提供交互界面而设计,这些无线设备包括移动电话、呼机和个人数字助理 PDA (Personal Digital Assistants) 等。
5、XML 图形技术(SVG 等)W3C 推荐标准SVG (Scalable Vector Graphics) 1.1 是一种描述二维图像的语言。它主要是一种向量图形语言,也支持一些光栅图形特性。SVG 提供了一种实用的、灵活的、使用 XML 表示的图像格式,可以以文本的方式,轻松地、实时地创建各种图形。下载并安装 Adobe 公司的 SVGVIEW.EXE(
http://www.adobe.com/svg/viewer/install)
6、XML 与远程教育(IMS、E-learning)IMS (Instructional Management System) 标准包括存放和使用教学内容、教学进度跟踪、学生程度报告、交换学生记录等等。
IMS 有以下两个主要目标:定义远程教育应用及服务的技术标准;支持基于IMS标准的服务和产品全球化。微软公司的 LRN 是 IMS 内容包规范的第一个商业实现。IMS 规定每套教程应该必须有一个名为 "imsmanifest.xml" 的 XML 文件,在这个文件中定义了教程中内容的编排、内容的来源。
7、XML 与数据库
8、XML 与安全
数字签名可以提供端到端的消息完整性保证,还可以提供有关消息发件人的验证信息。通常,签名必须是应用程序数据的一部分。W3C 和 IETF 联合制定了 XML Signature 规范。.NET Framework 中的 System.Security. Cryptography.Xml 就应用了 XML Signature 规范。在 WS-Security 具有的验证、内容完整性和内容保密性三种功能当中,XML 签名可以提供完整性,并可用于进行发件人验证,是基于 Web Services 的 SOA 中的一项非常重要的支撑技术。XML 加密 (XML Encryption) 是 W3C 提出的加密 XML 的标准。
9、XML 在软件工程中的应用(ADML 等技术)
ADML (Architecture Description Markup Language) 在 ADL (Architecture description languages) 的基础上形成的基于 XML 的软件体系结构描述规范,使其能够更广泛的应用于软件系统体系结构的分析设计。从快速响应供应链的角度来看,部署 SOA、搭建 Web 服务正逐渐成为企业信息化建设的必然选择。XML 作为 Web 服务数据应用与交换的支撑,其重要性更是不言而喻。从软件体系结构建模、到以 XML 为基础的 SOA 实现框架,XML 及其相关技术在软件工程、软件体系结构设计方面日益扮演着举足轻重的角色。
10、XML 在电子商务中的应用 1
电子商务标准的发展趋势是从电子数据交换 (EDI) 和电子资金转帐 (EFT) 的标准化转向基于 XML 语言的标准化。基于 XML 的电子商务标准包括通用架构标准、通用规范标准、行业供应链集成规范标准、B2B特定流程规范标准及各行业规范等。ebXML 是联合国电子商务促进中心制定的,是基于 XML 的电子商务架构技术规范之一。其目标是开发一个以开放的 XML 标准为基础的全球电子商务 e-Market 的基础架构,简化贸易程序,为所有企业进入电子商务扫清障碍。ebXML 标准技术规范可以建立协调一致的、有极强互操作能力的电子商务的服务和组件,实现在全球电子商务市场中无缝集成。实现电子政务管理,必须解决文档的管理与传输技术,解决信息交换的方法就是对数据格式进行转换,同时逐步建立可行性的电子公文规范。XML 的出现给数据交换与管理带来了一场革命。在电子政务领域,XML 为实现数据交换、上下文检索、多媒体传输等公文处理提供了技术可能,XML 成为电子公文数据处理的引擎。《中国电子政务标准化规范》明确提出了公文要基于 XML 电子公文格式规范,确定文字处理、电子表格和电子演示等 XML 标准。
11、XML 与无结构化数据的表示
四、xml介绍
1、定义
XML 是一种标记语言,用于表示包含结构信息的数据。
XML is about moving all forms of data and its meaning from many types of source to any kind of destination.
XML 的十个设计目标
1. XML shall be straightforwardly usable over the Internet.
2. XML shall support a wide variety of applications.
3. XML shall be compatible with SGML.
4. It shall be easy to write programs that process XML documents.
5. The number of optional features in XML is to be kept to the absolute minimum,ideally zero.
6. XML documents should be human-legible and reasonably clear.
7. The XML design should be prepared quickly.
8. The design of XML shall be formal and concise.
9. XML documents shall be easy to create.
10. Terseness in XML markup is of minimal importance.
2、XML 编程接口
Core SAX,DOM(W3C Standard model)
Microsoft XML Parser (MSXML)
Java :
JDOM (Java DOM)
JAXP (Java API for XML)
TrAX (Transformation API for XML)
JAXB (Java Architecture for XML Binding )
XML4J (XML for Java)
……
3、XML 规范
W3C 制定了 XML 规范,并为其制定了一系列的支撑性技术规范,正是有了这些相关技术的辅助,才使得基于 XML 的数据表示、数据交换、数据存储成为可能。
4、基本语法规则
在开始编写 XML 文档之前,首先学习一下 XML 的基本语法规则。
第一:xml声明,XML 文档的第一行内容,通常是 XML 的声明部分,比如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
XML 声明部分本身是可选的,但是如果包含声明部分,必须是整个 XML 文档的第一行内容。完整的 XML 声明包括三个部分:版本声明(version)、编码声明(encoding)和文档独立性声明(standalone)。version 属性的取值用于描述当前 XML 的版本编号,通常情况下为 1.0,这是为了将来的新版本能够保持向后的兼容性而设计的,一般都应该包含版本编号的声明;在 XML 的声明中,这个属性是必须的,并且必须作为第一个属性出现。encoding 属性的取值用于指明当前 XML 文档中所使用的符号的编码方式,请注意:这个编码方式与 XML 文档在文件系统中保存时使用的编码方式没有直接的关系。GB2312、UTF-8、UTF-16、ISO-10646-UCS-2、ISO-10646-UCS-4、ISO-8859-1 等等都是合法的 encoding 属性的取值。通常情况下,建议使用 UTF-8 编码方式,因为这样既可以表示西文字符、又可以表示非西文的字符(包括中文)。
示例:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE book [
<!ENTITY % html.4.entities SYSTEM "1.ent">
%html.4.entities;
]>
<book>
<title> Data on the Web </title>
</book>
第二:处理指令:
XML 文档可以包含一些特定的处理指令,以便将 XML 文档用于特殊的应用程序时,表示需要执行的特定操作。通常,XML 解析器并不理解这些处理指令的含义,也不会执行任何特定的操作。处理指令的语法格式如下:
<?target-name data?>
比如: <?xml-stylesheet href=“style.xsl” type=“text/xsl”?>。
当 XSL 的执行引擎碰到这个处理指令时,将会根据 href 的取值获得指定的 xsl 文件,并对输入的 XML 文档进行相应的转换。
第三:注释:
第四:元素:
在层次结构的 XML 文档中,元素是最基本的组成单元(Building Block)。元素的语法格式如下所示:
元素中可以包含文本、子元素、或者两者的组合。
元素命名规则:
在定义元素时,其命名必须遵循下面的规则:
元素的名称必须以字母、或者下划线(_)、或者冒号(:)开头;
元素名称中除首个符号之外的部分可以是字母、数字、横线(-)、下划线(_)、点号(.)、冒号(:)的任意组合;
元素名称长度没有限制。
可以使用非英文的元素名。
空元素:
在 XML 文档中,元素的内容可以为空,比如:<details></details>,这表示该元素中不包含任何内容。空元素还有另外一种书写形式,即 <details/>,这个标记既是开始标记又是结束标记。上面两种写法是完全等价的。空元素是指不包含任何内容的元素,但是在其开始标记中可以包含属性,比如:
<details about="Location"></details>
第五:属性:
属性不能独立于元素而存在,通常以名-值对的形式出现,属性的取值必须加上引号(单引号或者双引号)。属性的名-值对用于描述当前元素的某个方面的特征,比如:<author firstname="tom" lastname="hanks"></ author >元素的命名规则同样适用于属性的命名。
第六:元素和属性对比:
元素内容中的
<book>
<author>
<firstname>tom</firstname>
<lastname>hanks</lastname>
</author>
......
</book>
子元素和属性,都可以用来刻画该元素某个方面的特征。
那么在实际使用时,应该选择哪一种方式呢?
对于简单的标量数据(无结构的数据),可以采用属性,否则应该采用子元素。
对于可能在数目上发生变化的特性,应该使用子元素,比如某本书籍可能有多个作者:
<book>
<author>tom hanks</author>
<author>mike jimmy</author>
......
</book>
<book author1="tom hanks" author2="mike jimmy">...</book>
这种方法修改了元数据的内容,即属性名称本身,可能会影响到已经编写的用于解析该文档的应用程序。所以,使用子元素的方案在可扩展性方面更好。一个元素可以包含任意多个子元素,可以包含多个同名的子元素;元素之间不存在对称关系,子元素的顺序是非常重要的,比如在前面的例子中,第一个 author 元素可能表示该书籍的第一作者,而第二个 author 元素表示第二作者,所以颠倒顺序后含义完全不同。元素在其开始标记中可以包含任意多个属性,但不能包含同名的属性。对于一个元素所有的属性,它们不分先后顺序,因为它们之间可以通过名称相互区别。充分认识和理解元素和属性之间的区别,这对于学习后面的内容是非常重要的。元素开始标记和结束标记之间的数据称为该元素的内容,而元素可以包含子元素、文本或者两者的混合作为其内容。文本内容也是 XML 文档中一种非常重要的信息表现形式。比如:
<author>tom hanks</author>
对于计算机程序(比如 XML 解析器)来说,如何能够确定文本内容和元素标记之间的边界呢?根据元素的语法,我们知道,< > 之间的文本是元素的标记,换句话说,< 和 > 符号在 XML 语法中具有特殊的含义。如果文本内容中出现了 < 号,比如 <lessthan>one<two</lessthan> ???
XML 1.0 规范中定义了五种预定义实体:
字符 |
预定义实体 |
< |
< |
> |
> |
& |
& |
' |
' |
" |
" |
<lessthan>one<two</lessthan>(解析之后将会还原)
而除此以外的的其他实体,必须在使用前进行声明。
第七:CDATA
第八:空白字符:
XML 1.0 规范明确指出,XML 文档中的空白字符包括空格、回车、换行、制表等四种符号。在缺省的情况下,对于连续出现的空白字符,解析器会将其缩减为一个空格字符。
第九:xml文档的良构性规则:
通常将语法形式上正确的 XML 文档称为良构的(Well-formed)XML 文档,这是对 XML 文档的最基本的要求,其目的是确保能够将文档转换为树型结构,从而使用计算机程序对其进行正确地解析。良构的 XML 文档必须满足的下面五个要求。
2. 标记是大小写敏感的;
3. 标记必须正确地嵌套;
4. 属性值必须使用引号扩起来;
5. 有且只有一个根元素。
XML 既可以是面向数据(Data Centric)的,又可以是面向文档(Document Centric)的。
5、xml开发工具:
XML 应用非常广泛,用于编写 XML 文档的编辑工具不胜枚举,其中包括一些常见的编辑工具,比如 Microsoft Word、Ultraedit 等文本编辑工具;
许多专用的集成开发环境中也都提供了 XML 文档编辑和查看器,比如 Eclipse、Microsoft sqlServer、DB2 等等。这些应用程序都提供了 XML 编辑功能的扩展,可以像编辑普通文本文件那样编写 XML 文档,并且支持 XML 文档良构和有效性的验证,能够完成最基本的 XML 文档创建和修改任务。
xml-IDE:
6、命名空间:
作为复杂数据的表现形式,命名空间对于 XML 来说是非常重要的。
命名空间的声明:xmlns:prefix-name="URI"
分别表示:xmlns:(即 xml namespace)是专门用于声明命名空间的关键字。prefix-name:命名空间的前缀名称是以字母或下划线(_)开头的、不包含空白字符和冒号(:)的字符串,通常规定不应该使用 XML 中的保留字,比如 xml、xsl 等等。URI统一资源标识符(Universal Resource Identifier) 是识别、定位和命名互联网上的资源的标准途径;URL、URN 都是 URI 的子集。在这里可看作一个简单的字符串。
举例:
<myns:element xmlns:myns="http://www.myns.com">
....
</myns:element>
任何命名空间只能够在其作用域内进行使用,在同一个命名空间里,所有的元素名和属性名都必须唯一。
<?xml version="1.0" encoding="UTF-8"?>
<ns:company xmlns:ns="http://www.myns.com">
<ns:company-info>
<ns:name>SoftwareBG</ns:name>
<ns:fdate>2007-03-17</ns:fdate>
<ns1:division xmlns:ns1="http://www.myns.com/division">
<ns1:name>Development</ns1:name>
<ns1:employees>100</ns1:employees>
</ns1:division>
</ns:company-info>
</ns:company>
XML Namespace 1.0 规范中提供了一种缺省命名空间的机制,以简化命名空间的使用。
<?xml version="1.0" encoding="UTF-8"?>
<company xmlns="http://www.myns.com">
<company-info>
<name>SoftwareBG</name>
<fdate>2007-03-17</fdate>
<ns1:division xmlns:ns1="http://www.myns.com/division">
<ns1:name>Development</ns1:name>
<ns1:employees>100</ns1:employees>
</ns1:division>
</company-info>
</company>
7、xml的数据模型规范:
XML 1.0 规范定义了基本的 XML 语法。XML 信息集(XML Infoset 第二版,http://www. w3.org/TR/xml-infoset),描述了 XML 文档的抽象数据模型。XML 数据由11种信息项的集合构成。规范的 XML 规范(Canonical XML,http:// www.w3.org/TR/xml-c14n),它的作用正好与 XML 信息集相反,其中描述了一种统一的方式,以便将使用 XML 信息集表示的 XML 数据重新转换为 XML 文档的字符表示形式。
8、各种字符集:
ascii字符集:
在早期字符集中,使用最为频繁的是 ASCII 的7位字符集,它是由美国信息交换标准委员会为美国英语符号和文字所设计的字符集。
在 EASCII 中,原前 0-127 的符号保持不变,而值为 128-255 之间的字符则用于表格符号、计算符号、希腊字母和特殊的拉丁符号。
EASCII 实际上等同于国际标准化组织的标准 ISO 8859-1,简称为ISO Latin-1。ISO Latin-1 是现今最通用的、最常见的单字节编码系统。
gb2312:由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。GB 2312标准共收录6763个汉字,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。
unicode:
单个字节编码系统可以表示 28 = 256 个不同的符号和文字,但需要在计算机中表示的、或者需要使用计算机来进行处理的符号和文字越来越多,256 种编码是远远不够的。
Unicode 1.0 (ISO/IEC 10646 ) 通过增加一个高字节对 ISO Latin-1 字符集进行扩展。是在计算机中表示各种文字和符号的统一编码形式,其目的是为每一个字符和文字提供一种唯一的数值表示。
转换工具
http://www.chinaue.com/tool/uni.htm
字符集编码和字符集编码实现方式:
Unicode 字符集采用 UCS-2 和 UCS-4 两种版本,后者是一个 31 位字符集,加上恒为 0 的首位,共需占据 32 位,即 4 字节。理论上最多能表示 231 = 2,147,483,648 个字符,完全可以涵盖一切语言所用的符号和文字。
Unicode 的实现方式不同于编码方式,一个字符的 Unicode 编码是确定的,但是在实际传输过程中,由于不同系统平台在设计上的差别、以及出于节省空间的目的,Unicode 编码的实现方式有所不同。
Unicode 的实现方式称为 Unicode 转换格式(Unicode Translation Format,简称为 UTF),比如 UTF-7、UTF-8、UTF-16 等等。
utf-16:UTF-16 编码使用 2 个字节来对一个字符进行编码,所以对于 USC-2 中的字符(65536 之内),可以直接编码,无需进行任何转换。UTF-16 编码的另一个作用是可以通过代理对的编码机制,使用变长的方式支持 4 个字节(65536 及以上)的字符。UTF-16 编码至少使用 2 个字节进行编码,所以存在字节序的问题,即高字节在前(Big-Endian )、还是低字节在前(Little-Endian )。
utf-8:如果一个 7-8 位基本 ASCII 字符,使用 2 字节的 Unicode 编码传输,其第一字节的 8 位始终为 0,这就造成了比较大的浪费。UTF-8 采用变长(1-3 个字节)的方式来表示 65536 以内的基本字符。
utf-8变长编码方式的分析:对于 127 以内的字符仅使用一个字节进行编码,能够节省空间;对于中文字符可能需要 3 个字节来进行表示。比如,我们通常编写的 Java 源代码,其中大部分都是西文字符,可能仅包含少量的中文注释,那么使用 UTF-8 变长编码方式,将比固定的双字节编码方式节省更多的空间。
ucs-4:根据最高位为0的最高字节分成 2^7=128个group。每个group再根据次高字节分为256个平面(plane)。每个平面根据第 3 个字节分为 256 行(row)。每行有 256 个码位(cell)。group 0的平面0被称作BMP(Basic Multilingual Plane)。
unicode 5.0的码位:每个平面有2^16=65536个码位。Unicode计划使用了17个平面,一共有 17*65536=1114112个码位。在 Unicode 5.0.0 版本中,已定义的码位只有238605个,分布在平面 0、平面 1、平面 2、平面 14、平面 15、平面 16。平面 0 的 0xD800-0xDFFF,共 2048 个码位,是一个被称作代理区(Surrogate)的特殊区域。代理区的目的用两个UTF-16字符表示BMP以外的字符。
utf-16与增补字符:Unicode 编码 0x10000-0x10FFFF,第一个WORD的高6位是110110,第二个WORD的高6位是110111,第一个WORD的取值范围(二进制)是11011000 00000000到11011011 11111111,即0xD800-0xDBFF。第二个WORD的取值范围(二进制)是11011100 00000000到11011111 11111111,即0xDC00-0xDFFF。
9、相关概念:
例如字符“汉”,它的代码点是U+6C49。
有效的 Unicode 代码点范围是 U+0000 至 U+10FFFF 。
10、base64编码的出现:
XML 文档可用于各种复杂的数据,那么是否仅限于文本数据呢?除了文本数据之外,计算机中还包括大量的二进制数据(比如可执行程序、图片、声音、视频数据等等),那么是否能够在 XML 文档中直接表示和存储二进制数据呢,比如 00001010?
base64的编码方式:把每三个 8Bit 的字节转换为四个 6Bit 的字节(3*8 = 4*6 = 24),然后把 6Bit 再添两位高位 0,组成四个 8Bit 的字节。比如 00001010 11001010 01101100 将分解为 000010、101100、101001、101100,每 6Bit 高位补 0,然后查表,将转换为 C、s、p、s。在将二进制的数转换为 Base64 编码时,以每 3 个字节为单位进行转换,但是,二进制数的长度并不一定是 3 字节的整数倍。
正在学习之中,如果不正之处,还请指教。
版权所有,转载请注明出处:stanly——you will never walk alone.
http://blog.csdn.net/Stanly7
原文链接:https://www.f2er.com/xml/300589.html