加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml基础知识(一)

发布时间:2020-12-15 23:50:59 所属栏目:百科 来源:网络整理
导读:声明:发表了才看到csdn博客的这个编辑器排版实在是不敢恭维,相当混乱。发表之前调整得很好,发表之后就全乱了。见谅。 xml作为一种标记语言在现阶段得到了广泛的应用,最近学到了xml这种标记语言,于是写此笔记。 一、标记语言的发展史。 1. SGML (Standar

声明:发表了才看到csdn博客的这个编辑器排版实在是不敢恭维,相当混乱。发表之前调整得很好,发表之后就全乱了。见谅。


xml作为一种标记语言在现阶段得到了广泛的应用,最近学到了xml这种标记语言,于是写此笔记。

一、标记语言的发展史。
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>

当然,HTML 也无法解决所有信息的显式,比如化学公式、音乐符号等其他形态的内容。
一方面,随着 Web 的飞速发展,网络成为了一个庞大的数据库,人们需要从中搜索、甄别、挑选出自己感兴趣的信息。
另一方面,对于 HTML 文档来说,除了便于在浏览器中进行显示之外,要使用计算机程序对其进行复杂的处理非常困难。比如,在搜索信息时并不关心信息的显示特征(是以粗体、还是斜体字体出现的),我们关心的是该数据项与其他数据之间的联系。而 HTML 的标记无法实现元数据的描述,它们仅仅与数据的呈现方式有关。
为了解决前面提出的问题,专家们使用 SGML 标准、并依照 HTML 的发展经验,提出一套使用上规则严谨,但是语法简单的信息描述语言:XML( eXtensible Markup Language )。

三、xml的出现
XML的目的是以一种更中立的方式,让用户自行决定要如何理解、呈现从服务端所提供的信息,而着重表示数据以及数据之间的联系。
XML 的特点主要包括四个方面:
1、可扩展性(Extensibility)——XML 允许使用者创建和使用他们自己的标记而不是 HTML 的有限词汇表。
2、灵活性(Flexibility)——XML 提供了一种结构化的数据表示方式,使得用户界面分离于结构化数据。所以,Web 用户所追求的许多先进功能在 XML 环境下更容易实现。
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/
VoiceXML 是一种创建音频、语音和电话应用程序的语言,相当于带语音功能的 HTML。VoiceXML 语音浏览器相当于 Web 浏览器,可以解释 VoiceXML 2.0 脚本并向用户呈现语音信息,同时还能接受用户的语音请求。寻求把基于 Web 的开发和内容传递的优势带入交互式语音响应应用程序中。可以方便的实现音频应用的研发,如:支持自动语音识别(ASR,Automatic Speech Recognition)的IVR(IVR,Interactive Voice Response)应用。
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 与数据库
在 XML 应用中,数据库作为数据管理的位置依然没有改变。目前,管理 XML 数据的方式主要有:传统的关系(或者对象)数据库、NXD(Native XML Database,本源 XML 数据库)。从技术角度讲,“以数据库(关系型数据库、对象数据库或者是 NXD)为存贮手段,以 XML 为交换载体”的数据管理模式是一种趋势。XML 结构比关系型数据库中所使用的关系更有表现力、更加容易表示和描述复杂的对象。将在后续文章中详细地介绍“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 的标准。
加密过程包括加密 XML 文档的元素及其子元素,通过加密,XML 的初始内容将被替换,但其 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 与无结构化数据的表示
非关系型数据广泛存在,它们无法以关系表中行列的形式进行描述。比如 Word 文档、电子邮件消息、电子表格等等。数据元素可能是松散耦合的列表、或者相互之间存在复杂的关系。XML 将对非关系型数据的表示起到至关重要的作用,因为这类数据的处理和交换将变得更加容易和高效。XML 与无结构化数据之间的关系,就好像关系数据库和结构化数据之间的关系。
RDMBS 提供了:
描述数据库、表、行、列和数据类型的机制;
查询数据库、并返回满足指定模型的数据的机制;
严格的规则,以控制数据库的行为及其操作。
在实际应用中,也希望为无结构化数据提供与 RDBMS 类似的特性,比如支持 XML+DTD。
四、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 的数据表示、数据交换、数据存储成为可能。
要学习和掌握 XML 及其相关技术,第一步是学习 W3C 的 XML 规范。XML 1.0 规范非常简单,说明了 XML 文档的组成要素、以及如何编写一个正确的 XML 文档。XML 文档实际上是一个文本文件,但并不是任何文本文件都是正确的 XML 文档。可以使用任何文本编辑器来编写 XML 文档。比如 notepad.exe 或者 Word。可以使用 XMLSPY (http://www.altova.com) 等 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 编码方式,因为这样既可以表示西文字符、又可以表示非西文的字符(包括中文)。
有关 Unicode 和 UTF-8 的内容,稍后将进行详细地介绍。standalone 属性的取值表明当前 XML 文件是独立使用、还是与其他的标记文件配套使用。如果该属性为“yes”,表示在解析当前 XML 文档时,无需其他的外部标记声明文件。相反,如果这个属性为“no”,则表示在解析当前文件时可能需要使用外部的标记声明文件。
示例:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE book [
<!ENTITY % html.4.entities SYSTEM "1.ent">
%html.4.entities;
]>
<book>
<title>&nbsp;&nbsp;Data on the Web&nbsp;&nbsp;</title>
</book>
第二:处理指令:
XML 文档可以包含一些特定的处理指令,以便将 XML 文档用于特殊的应用程序时,表示需要执行的特定操作。通常,XML 解析器并不理解这些处理指令的含义,也不会执行任何特定的操作。处理指令的语法格式如下:
<?target-name data?>
比如: <?xml-stylesheet href=“style.xsl” type=“text/xsl”?>。
当 XSL 的执行引擎碰到这个处理指令时,将会根据 href 的取值获得指定的 xsl 文件,并对输入的 XML 文档进行相应的转换。
第三:注释:
作为标记语言的一种,XML 使用了 HTML 相同的注释语法,即:<!-- ........ -->。请注意,在注释的内容中,不应该出现两个连续的横线 (-),因为这是标记注释的特殊符号。通常,注释不应该出现在元素的标记中,注释之中不应该嵌套注释。
第四:元素:
在层次结构的 XML 文档中,元素是最基本的组成单元(Building Block)。元素的语法格式如下所示:
<element_name att1="val1" att2="val2"> ――开始标记
...content... ――内容
</element_name> ――结束标记
元素中可以包含文本、子元素、或者两者的组合。
元素命名规则:
在定义元素时,其命名必须遵循下面的规则:
元素的名称必须以字母、或者下划线(_)、或者冒号(:)开头;
元素名称中除首个符号之外的部分可以是字母、数字、横线(-)、下划线(_)、点号(.)、冒号(:)的任意组合;
元素名称是大小写敏感的,因此开始标记和结束标记中元素名称的大小写形式必须完全相同;
元素名称长度没有限制。
可以使用非英文的元素名。
空元素:
在 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 标记的开始符号),所以 < 号不能直接在文本内容中出现。
XML 1.0 规范中定义了五种预定义实体:

字符

预定义实体

<

&lt;

>

&gt;

&

&amp;

'

&apos;

"

&quot;

<lessthan>one&lt;two</lessthan>(解析之后将会还原)
而除此以外的的其他实体,必须在使用前进行声明。

第七:CDATA
预定义实体为某些非法字符(< 和 &)提供了相应的替代使用方式,但使用起来不太方便,同时会降低原始 XML 文档的可读性。XML 1.0 规范为此提供了另一种解决方案,即 CDATA 段。假设 XML 文档的某块文本内容中包含大量的特殊字符,那么可以将整个文本块的内容放入到一个 CDATA 段中(<![CDATA[......]]>)。使用 CDATA 段,可以告诉解析器不要试图从该文本块中查找 XML 标记,它仅仅就是文本内容,从而避免了歧义的产生,因此可以使用非法字符。同理,CDATA 段的文本内容中不能直接出现 ]]>,并且 CDATA 段不应该嵌套使用。
第八:空白字符:
XML 1.0 规范明确指出,XML 文档中的空白字符包括空格、回车、换行、制表等四种符号。在缺省的情况下,对于连续出现的空白字符,解析器会将其缩减为一个空格字符。
第九:xml文档的良构性规则:
通常将语法形式上正确的 XML 文档称为良构的(Well-formed)XML 文档,这是对 XML 文档的最基本的要求,其目的是确保能够将文档转换为树型结构,从而使用计算机程序对其进行正确地解析。良构的 XML 文档必须满足的下面五个要求。
1. 开始标记必须与结束标记相对应;
2. 标记是大小写敏感的;
3. 标记必须正确地嵌套;
4. 属性值必须使用引号扩起来;
5. 有且只有一个根元素。
XML 既可以是面向数据(Data Centric)的,又可以是面向文档(Document Centric)的。

面向数据的文档主要利用 XML 来传送应用数据,这些文档包括销售订单(参见 data-centric.xml)、病人记录和科学数据等。面向数据的 XML 文档的物理结构,如元素的顺序、或者数据被存储为属性还是子元素,通常不是很重要。它们的特征是高度有序的结构,并且同时带有那些数据结构的多个项目,类似于关系数据库系统中的多条记录。
面向文档的 XML 文件几乎没有结构,元素结构粗糙。面向文档的文档是利用 XML 来获取自然(人类)语言的那些文档,如留言信息(参见 doc-centric.xml)、用户手册。它们以复杂或无规则的结构和混合内容为特征,而且文档的物理结构非常重要。这些文档的处理侧重于给用户提供信息的最终表示,因此它们也被称作面向表示的文档。面向数据和面向文档的 XML 文档,在文档的操作上存在一定的差别。

5、xml开发工具:
XML 应用非常广泛,用于编写 XML 文档的编辑工具不胜枚举,其中包括一些常见的编辑工具,比如 Microsoft Word、Ultraedit 等文本编辑工具;
许多专用的集成开发环境中也都提供了 XML 文档编辑和查看器,比如 Eclipse、Microsoft SQLServer、DB2 等等。这些应用程序都提供了 XML 编辑功能的扩展,可以像编辑普通文本文件那样编写 XML 文档,并且支持 XML 文档良构和有效性的验证,能够完成最基本的 XML 文档创建和修改任务。
xml-IDE:
与一般的编辑工具相比,XML 集成开发环境为有关 XML 的开发提供了更多的支持:
提供图形化的 XML 文档编辑和浏览功能;
提供 DTD 和 XML Schema 的编辑环境;
提供了 XPath 和 XQuery 的编辑和查询执行引擎;
提供了 XSLT 的编辑和转换执行引擎;
提供了与文件系统和数据库的接口;
提供了 Web 服务 WSDL 的开发接口等等。
6、命名空间:
命名空间 (namespace) 的概念在许多计算机领域中有着广泛的应用,主要是通过某种形式来表示标识符 (identifier) 的上下文。标识符可能用于表示各种对象,比如在软件开发中可以表示变量、函数、数据对象等。如果不明确地指定标识符所处的上下文(即实际应用环境),很可能会发生名称上的冲突。另外,还可以将逻辑上相关的标识符组织成相应的命名空间,可使整个系统更加模块化。某个命名空间中的元素或属性可以具有与其他命名空间中同名元素或属性完全不同的含义,从而对这些数据对象进行区分。
作为复杂数据的表现形式,命名空间对于 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 22222111,即0xD800-0xDBFF。第二个WORD的取值范围(二进制)是11011100 00000000到11022222 22222111,即0xDC00-0xDFFF。

9、相关概念:
代码点(Code Point):指 Unicode 中为字符分配的编号,一个字符只占一个代码点。
例如字符“汉”,它的代码点是U+6C49。
有效的 Unicode 代码点范围是 U+0000 至 U+10FFFF 。
代码单元(Code Unit):是针对编码方法而言,它指的是编码方法中对一个字符编码以后所占的最小存储单元。
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读