《XML技术及其应用》 第1章 XML 基础知识 主讲教师:桂浩 武汉大学
教材与参考资料 教材: 参考资料: 《XML开发技术教程》. 桂浩 等. 武汉大学出版社 《XML 编程技术大全》清华大学出版社 www.w3c.org (www.w3.org)、www.xml.com、www.xml.org、 bbs.xml.org.cn IBM Developerworks、MS MSDN、Apache XML
XML related technologies XML,DTD,Schema, XSLT, DOM, PDOM, SAX, XPATH, XQuery….. Web Service, RDF, WSDL, SOAP, Semantic Web, Grid, Ontology….. XML Message, EAI… CML, MathML, VoiceML, SVG, SMIL, DrML, ebXML…
XML & encryption, signature, security We’ll cover … XML DTD Schema Namespace DOM SAX XPath XQuery CSS XSL XSLT Xlink XPointer XInclude SOAP Biztalk XML & encryption, signature, security XML & Databases XML & DOTNET XML & JAVA
标记语言发展简史 专用数据格式: Proprietary Data Format (与生成厂商、平台密切相关) Standard Generalized Markup Language (SGML) Hypertext Markup Language (HTML) Dynamic Hypertext Markup Language (DHTML) eXtensible Hypertext Markup Language (XHTML) eXtensible Markup Language (XML)
标记语言(ML)发展过程 1 1. SGML (Standard Generalized Markup Language) SGML SGML 是一种通用的文档结构描述符号化语言,主要用来定义文献模型的逻辑和物理结构。一个 SGML 语言文件由三部分组成,即语法定义、文件类型定义 DTD 和文件实例。 SGML 过于庞大复杂(标准手册有 500 多页),难以理解和学习,进而影响其推广与应用。因此,真正大行其道的是 SGML 的一些子集(面向某些领域进行了优化和精简),比如随后的 HTML 和 XML。
标记语言(ML)发展过程 2 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存在的问题 1 HTML包含许多内置标记,比如 <head>、<table>等都是在 HTML 4.0 里规范和定义。每一种标记的意义都非常明确,用于表示如何在浏览器中显示相应的数据,比如使用表格、或者采用粗体字体。 当然,HTML 也无法解决所有信息的显式,比如化学公式、音乐符号等其他形态的内容。 <html> <head> <title>Title of page</title> </head> <body> This is my first homepage. <br/> <b>Hello World!</b> </body> </html>
HTML存在的问题 2 一方面,随着 Web 的飞速发展,网络成为了一个庞大的数据库,人们需要从中搜索、甄别、挑选出自己感兴趣的信息。 另一方面,对于 HTML 文档来说,除了便于在浏览器中进行显示之外,要使用计算机程序对其进行复杂的处理非常困难。比如,在搜索信息时并不关心信息的显示特征(是以粗体、还是斜体字体出现的),我们关心的是该数据项与其他数据之间的联系。而 HTML 的标记无法实现元数据的描述,它们仅仅与数据的呈现方式有关。
标记语言(ML)发展过程 3 为了解决前面提出的问题,专家们使用 SGML 标准、并依照 HTML 的发展经验,提出一套使用上规则严谨,但是语法简单的信息描述语言:XML( eXtensible Markup Language )。 XML的目的是以一种更中立的方式,让用户自行决定要如何理解、呈现从服务端所提供的信息,而着重表示数据以及数据之间的联系。
XML 的特点 1 XML 的特点主要包括四个方面: 可扩展性(Extensibility)——XML 允许使用者创建和使用他们自己的标记而不是 HTML 的有限词汇表。 灵活性(Flexibility)——XML 提供了一种结构化的数据表示方式,使得用户界面分离于结构化数据。所以,Web 用户所追求的许多先进功能在 XML 环境下更容易实现。
XML 的特点 2 自描述性(Self-describing)——不仅人能读懂XML文档,计算机也能处理。XML表示数据的方式真正做到了独立于应用系统,并且数据能够重用。 简洁性(Simplicity)——它只有 SGML 约 20% 的复杂性,但却具有 SGML 约 80% 的功能。XML 比完整的 SGML 简单得多,易学、易用并且易实现。
一个 XML 示例文档 book.xml 浏览器中的显示 XMLSPY 中的显示、及 XMLSPY 中其他 XML 文档 <?xml version="1.0" encoding="UTF-8"?> <book year="1994"> <title>TCP/IP Illustrated</title> <author> <last>Stevens</last> <first>W.</first> </author> <publisher>Addison-Wesley</publisher> <price> 65.95</price> </book> book.xml 浏览器中的显示 XMLSPY 中的显示、及 XMLSPY 中其他 XML 文档
XML 的实际应用 XML 成为一种与平台无关的、数据表示和数据交换的载体。 XML 被业界认为是最近数十年来最成功的 IT 技术之一,并广泛地应用于 IT 行业的各个领域。 比如:MML(Music ML,面向音乐领域的 XML)、(Math ML,面向数学领域的 XML)、ebXML(面向电子商务领域的 XML)、CML(Chemical ML,面向化学领域的 XML)等等,XML 技术已经深入到自然科学和社会科学的各个领域。
XML在语音技术中的应用(VoiceXML ) http://www.vxml.org/ VoiceXML 是一种创建音频、语音和电话应用程序的语言,相当于带语音功能的 HTML。 VoiceXML 语音浏览器相当于 Web 浏览器,可以解释 VoiceXML 2.0 脚本并向用户呈现语音信息,同时还能接受用户的语音请求。寻求把基于 Web 的开发和内容传递的优势带入交互式语音响应应用程序中。 可以方便的实现音频应用的研发,如:支持自动语音识别(ASR,Automatic Speech Recognition)的IVR(IVR,Interactive Voice Response)应用。
XML 与移动嵌入式开发(WAP/WML、Symbian、无线搜索等技术) WML(Wireless Markup Language)是 WAP 规范指定的基于 XML 的基本内容格式,使用支持该规范的设备例如移动电话可以浏览 WML 的页面。 WML 是一种基于扩展标记语言 XML 的语言,是 XML 的子集。它可以显示各种文字、图像等数据,专为无线设备用户提供交互界面而设计,这些无线设备包括移动电话、呼机和个人数字助理 PDA (Personal Digital Assistants) 等。
XML 图形技术(SVG 等) W3C 推荐标准SVG (Scalable Vector Graphics) 1.1 是一种描述二维图像的语言。 它主要是一种向量图形语言,也支持一些光栅图形特性。SVG 提供了一种实用的、灵活的、使用 XML 表示的图像格式,可以以文本的方式,轻松地、实时地创建各种图形。 下载并安装 Adobe 公司的 SVGVIEW.EXE(http://www.adobe.com/svg/viewer/install)
SVG 示例 MySVG.svg 。 更多的示例,参见http:// www.svgmaker.com/examples.htm。 SVG 基于 XML,所以可以用可扩展样式表(XSL)轻松地对其进行转换。结合 Javascript 等客户端脚本语言,SVG 可以支持复杂的 GIS 系统应用,甚至可以使用 SVG 做出类似 Google Map 的 Web 地图,包括各种基本操做(如漫游、缩放模式功能等等)。 MySVG.svg X坐标全部减30。
XML 与远程教育(IMS、E-learning) IMS (Instructional Management System) 标准包括存放和使用教学内容、教学进度跟踪、学生程度报告、交换学生记录等等。IMS 有以下两个主要目标:定义远程教育应用及服务的技术标准;支持基于IMS标准的服务和产品全球化。 微软公司的 LRN 是 IMS 内容包规范的第一个商业实现。IMS 规定每套教程应该必须有一个名为 "imsmanifest.xml" 的 XML 文件,在这个文件中定义了教程中内容的编排、内容的来源。
XML 与数据库 在 XML 应用中,数据库作为数据管理的位置依然没有改变。目前,管理 XML 数据的方式主要有:传统的关系(或者对象)数据库、NXD(Native XML Database,本源 XML 数据库)。 从技术角度讲,“以数据库(关系型数据库、对象数据库或者是 NXD)为存贮手段,以 XML 为交换载体”的数据管理模式是一种趋势。 XML 结构比关系型数据库中所使用的关系更有表现力、更加容易表示和描述复杂的对象。 将在第 7 章中详细地介绍“XML 与数据库”。
XML 与安全(基于XML的签名) 数字签名可以提供端到端的消息完整性保证,还可以提供有关消息发件人的验证信息。通常,签名必须是应用程序数据的一部分。 W3C 和 IETF 联合制定了 XML Signature 规范。 .NET Framework 中的 System.Security. Cryptography.Xml 就应用了 XML Signature 规范。 在 WS-Security 具有的验证、内容完整性和内容保密性三种功能当中,XML 签名可以提供完整性,并可用于进行发件人验证,是基于 Web Services 的 SOA 中的一项非常重要的支撑技术。
XML 与安全(基于XML的加密) XML 加密 (XML Encryption) 是 W3C 提出的加密 XML 的标准。 可以使用非对称和对称算法来加密。
XML 在软件工程中的应用(ADML 等技术) ADML (Architecture Description Markup Language) 在 ADL (Architecture description languages) 的基础上形成的基于 XML 的软件体系结构描述规范,使其能够更广泛的应用于软件系统体系结构的分析设计。 从快速响应供应链的角度来看,部署 SOA、搭建 Web 服务正逐渐成为企业信息化建设的必然选择。XML 作为 Web 服务数据应用与交换的支撑,其重要性更是不言而喻。 从软件体系结构建模、到以 XML 为基础的 SOA 实现框架,XML 及其相关技术在软件工程、软件体系结构设计方面日益扮演着举足轻重的角色。
XML 在电子商务中的应用 1 电子商务标准的发展趋势是从电子数据交换 (EDI) 和电子资金转帐 (EFT) 的标准化转向基于 XML 语言的标准化。 基于 XML 的电子商务标准包括通用架构标准、通用规范标准、行业供应链集成规范标准、B2B特定流程规范标准及各行业规范等。
XML 在电子商务中的应用 2 ebXML 是联合国电子商务促进中心制定的,是基于 XML 的电子商务架构技术规范之一。其目标是开发一个以开放的 XML 标准为基础的全球电子商务 e-Market 的基础架构,简化贸易程序,为所有企业进入电子商务扫清障碍。 ebXML 标准技术规范可以建立协调一致的、有极强互操作能力的电子商务的服务和组件,实现在全球电子商务市场中无缝集成。
XML 在电子政务中的应用 实现电子政务管理,必须解决文档的管理与传输技术,解决信息交换的方法就是对数据格式进行转换,同时逐步建立可行性的电子公文规范。 XML 的出现给数据交换与管理带来了一场革命。在电子政务领域,XML 为实现数据交换、上下文检索、多媒体传输等公文处理提供了技术可能,XML 成为电子公文数据处理的引擎。 《中国电子政务标准化规范》明确提出了公文要基于 XML 电子公文格式规范,确定文字处理、电子表格和电子演示等 XML 标准。
XML 与无结构化数据的表示 1 非关系型数据广泛存在,它们无法以关系表中行列的形式进行描述。比如 Word 文档、电子邮件消息、电子表格等等。 数据元素可能是松散耦合的列表、或者相互之间存在复杂的关系。 XML 将对非关系型数据的表示起到至关重要的作用,因为这类数据的处理和交换将变得更加容易和高效。
XML 与无结构化数据的表示 2 XML 与无结构化数据之间的关系,就好像关系数据库和结构化数据之间的关系。 RDMBS 提供了: 描述数据库、表、行、列和数据类型的机制; 查询数据库、并返回满足指定模型的数据的机制; 严格的规则,以控制数据库的行为及其操作。 在实际应用中,也希望为无结构化数据提供与 RDBMS 类似的特性,比如支持 XML+DTD。
XML 的定义 XML 是一种标记语言,用于表示包含结构信息的数据。 XML is about moving all forms of data and its meaning from many types of source to any kind of destination.
XML 的十个设计目标 (1) 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. Tim Bray(one of the three editors of the XML specification)
XML 的十个设计目标 (2) 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. Tim Bray(one of the three editors of the XML specification)
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) ……
XML 规范 W3C 制定了 XML 规范,并为其制定了一系列的支撑性技术规范,正是有了这些相关技术的辅助,才使得基于 XML 的数据表示、数据交换、数据存储成为可能。 要学习和掌握 XML 及其相关技术,第一步是学习 W3C 的 XML 规范。 XML 1.0 规范非常简单,说明了 XML 文档的组成要素、以及如何编写一个正确的 XML 文档。
XML 文档 XML 文档实际上是一个文本文件,但并不是任何文本文件都是正确的 XML 文档。 可以使用任何文本编辑器来编写 XML 文档。比如 notepad.exe 或者 Word。 可以使用 XMLSPY (http://www.altova.com) 等 XML 集成开发环境,能够起到事半功倍的效果! 在开始编写 XML 文档之前,首先学习一下 XML 的基本语法规则。
XML 声明 (XML Declaration) 完整的 XML 声明包括三个部分:版本声明(version)、编码声明(encoding)和文档独立性声明(standalone)。 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
版本声明 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> Data on the Web </title> </book>
处理指令(Processing Instruction) XML 文档可以包含一些特定的处理指令,以便将 XML 文档用于特殊的应用程序时,表示需要执行的特定操作。通常,XML 解析器并不理解这些处理指令的含义,也不会执行任何特定的操作。 处理指令的语法格式如下: <?target-name data?> 比如: <?xml-stylesheet href=“style.xsl” type=“text/xsl”?>。 当 XSL 的执行引擎碰到这个处理指令时,将会根据 href 的取值获得指定的 xsl 文件,并对输入的 XML 文档进行相应的转换。
注释 (Comment) 作为标记语言的一种,XML 使用了 HTML 相同的注释语法,即:<!-- ........ -->。 请注意,在注释的内容中,不应该出现两个连续的横线 (-),因为这是标记注释的特殊符号。 通常,注释不应该出现在元素的标记中,注释之中不应该嵌套注释。
元素 (Element) 在层次结构的 XML 文档中,元素是最基本的组成单元(Building Block)。 元素的语法格式如下所示: 元素中可以包含文本、子元素、或者两者的组合。 <element_name att1="val1" att2="val2"> ――开始标记 ...content... ――内容 </element_name> ――结束标记
元素名的命名规则 在定义元素时,其命名必须遵循下面的规则: 元素的名称必须以字母、或者下划线(_)、或者冒号(:)开头; 元素名称中除首个符号之外的部分可以是字母、数字、横线(-)、下划线(_)、点号(.)、冒号(:)的任意组合; 元素名称是大小写敏感的,因此开始标记和结束标记中元素名称的大小写形式必须完全相同; 元素名称长度没有限制。 可以使用非英文的元素名。
有关元素命名的示例 下列 XML 标记名称都是正确的: 下列 XML 标记名称都是错误的: <example-one>、<_example2>、<Example.Three> <bad*charater>、<illegal space>、<12number-start>
空元素 (Empty Element) 在 XML 文档中,元素的内容可以为空,比如:<details></details>,这表示该元素中不包含任何内容。 空元素还有另外一种书写形式,即 <details/>,这个标记既是开始标记又是结束标记。上面两种写法是完全等价的。 空元素是指不包含任何内容的元素,但是在其开始标记中可以包含属性,比如: <details about="Location"></details>
属性 (Attribute) 属性不能独立于元素而存在,通常以名-值对的形式出现,属性的取值必须加上引号(单引号或者双引号)。 属性的名-值对用于描述当前元素的某个方面的特征,比如: 元素的命名规则同样适用于属性的命名。 <author firstname="tom" lastname="hanks"></ author >
元素 V.S. 属性 1 元素内容中的子元素和属性,都可以用来刻画该元素某个方面的特征。 那么在实际使用时,应该选择哪一种方式呢? <book> <author> <firstname>tom</firstname> <lastname>hanks</lastname> </author> ...... </book>
元素 V.S. 属性 2 对于简单的标量数据(无结构的数据),可以采用属性,否则应该采用子元素。 对于可能在数目上发生变化的特性,应该使用子元素,比如某本书籍可能有多个作者: 这种方法修改了元数据的内容,即属性名称本身,可能会影响到已经编写的用于解析该文档的应用程序。所以,使用子元素的方案在可扩展性方面更好。 <book> <author>tom hanks</author> <author>mike jimmy</author> ...... </book> <book author1="tom hanks" author2="mike jimmy">...</book>
有关 XML 文档中的元素的补充说明 一个元素可以包含任意多个子元素,可以包含多个同名的子元素; 元素之间不存在对称关系,比如 solar system.xml。 子元素的顺序是非常重要的,比如在前面的例子中,第一个 author 元素可能表示该书籍的第一作者,而第二个 author 元素表示第二作者,所以颠倒顺序后含义完全不同。
有关 XML 文档中的属性的补充说明 元素在其开始标记中可以包含任意多个属性,但不能包含同名的属性。 对于一个元素所有的属性,它们不分先后顺序,因为它们之间可以通过名称相互区别。 充分认识和理解元素和属性之间的区别,这对于学习后面的内容是非常重要的。
元素的文本内容 1 元素开始标记和结束标记之间的数据称为该元素的内容,而元素可以包含子元素、文本或者两者的混合作为其内容。 元素的文本内容 1 元素开始标记和结束标记之间的数据称为该元素的内容,而元素可以包含子元素、文本或者两者的混合作为其内容。 文本内容也是 XML 文档中一种非常重要的信息表现形式。比如: 对于计算机程序(比如 XML 解析器)来说,如何能够确定文本内容和元素标记之间的边界呢? <author>tom hanks</author>
元素的文本内容 2 根据元素的语法,我们知道,< > 之间的文本是元素的标记,换句话说,< 和 > 符号在 XML 语法中具有特殊的含义。 如果文本内容中出现了 < 号,比如 <lessthan>one<two</lessthan> ??? 关键在于,< 可能会产生歧义(究竟是小于号本身、还是 XML 标记的开始符号),所以 < 号不能直接在文本内容中出现。
文本内容中不应该出现的特殊字符 XML 1.0 规范中定义了五种预定义实体: 而除此以外的的其他实体,必须在使用前进行声明。 字符 < > & & ' ' " " <lessthan>one<two</lessthan>(解析之后将会还原)
CDATA 段 1 预定义实体为某些非法字符(< 和 &)提供了相应的替代使用方式,但使用起来不太方便,同时会降低原始 XML 文档的可读性。 XML 1.0 规范为此提供了另一种解决方案,即 CDATA 段。 假设 XML 文档的某块文本内容中包含大量的特殊字符,那么可以将整个文本块的内容放入到一个 CDATA 段中(<![CDATA[......]]>)。 cdata.xml
CDATA 段 2 使用 CDATA 段,可以告诉解析器不要试图从该文本块中查找 XML 标记,它仅仅就是文本内容,从而避免了歧义的产生,因此可以使用非法字符。 同理,CDATA 段的文本内容中不能直接出现 ]]>,并且 CDATA 段不应该嵌套使用。
空白字符(White Space) XML 1.0 规范明确指出,XML 文档中的空白字符包括空格、回车、换行、制表等四种符号。 在缺省的情况下,对于连续出现的空白字符,解析器会将其缩减为一个空格字符。
XML 文档的良构性规则 1 通常将语法形式上正确的 XML 文档称为良构的(Well-formed)XML 文档,这是对 XML 文档的最基本的要求,其目的是确保能够将文档转换为树型结构,从而使用计算机程序对其进行正确地解析。 良构的 XML 文档必须满足的下面五个要求。
XML 文档的良构性规则 2 1. 开始标记必须与结束标记相对应; 2. 标记是大小写敏感的; 3. 标记必须正确地嵌套; <book><author>tom hanks</author></book> 是正确的<book><author>tom hanks</book> 是错误的 <book>...</book> 是正确的 <book>...</Book> 是错误的 <book><author>tom hanks</book></author> 是错误的
XML 文档的良构性规则 3 4. 属性值必须使用引号扩起来; 5. 有且只有一个根元素。 这段内容称为 XML 片段。 <details about=Location /> 是错误的 <author>tom hanks</author> <author>mike jimmy</author> 是错误的
XML 文档的分类(面向数据) XML 既可以是面向数据(Data Centric)的,又可以是面向文档(Document Centric)的。 面向数据的文档主要利用 XML 来传送应用数据,这些文档包括销售订单(参见 data-centric.xml)、病人记录和科学数据等。 面向数据的 XML 文档的物理结构,如元素的顺序、或者数据被存储为属性还是子元素,通常不是很重要。它们的特征是高度有序的结构,并且同时带有那些数据结构的多个项目,类似于关系数据库系统中的多条记录。
XML 文档的分类(面向文档) 面向文档的 XML 文件几乎没有结构,元素结构粗糙。 面向文档的文档是利用 XML 来获取自然(人类)语言的那些文档,如留言信息(参见 doc-centric.xml)、用户手册。 它们以复杂或无规则的结构和混合内容为特征,而且文档的物理结构非常重要。这些文档的处理侧重于给用户提供信息的最终表示,因此它们也被称作面向表示的文档。 面向数据和面向文档的 XML 文档,在文档的操作上存在一定的差别。
XML 开发工具的选择 XML 应用非常广泛,用于编写 XML 文档的编辑工具不胜枚举,其中包括一些常见的编辑工具,比如 Microsoft Word、Ultraedit 等文本编辑工具; 许多专用的集成开发环境中也都提供了 XML 文档编辑和查看器,比如 Eclipse、Microsoft SQLServer、DB2 等等。这些应用程序都提供了 XML 编辑功能的扩展,可以像编辑普通文本文件那样编写 XML 文档,并且支持 XML 文档良构和有效性的验证,能够完成最基本的 XML 文档创建和修改任务。
XML 集成开发环境 与一般的编辑工具相比,XML 集成开发环境为有关 XML 的开发提供了更多的支持: 提供 DTD 和 XML Schema 的编辑环境; 提供了 XPath 和 XQuery 的编辑和查询执行引擎; 提供了 XSLT 的编辑和转换执行引擎; 提供了与文件系统和数据库的接口; 提供了 Web 服务 WSDL 的开发接口等等。 本课程将重点介绍 Altova的XMLSPY。
XMLSPY 常用的 XML 集成开发环境主要包括 XMLSPY 和 Stylus Studio,这两种开发环境都非常优秀,占据了绝大部分的市场份额。本课程将主要介绍 Altova 公司的 XMLSPY 2008。 Altova 公司是专门提供 XML 开发解决方案的软件供应商,除了 XMLSPY 集成开发环境之外,还提供了一系列的开发工具,包括 MapForce、SemanticWorks、Stylevision 等。 下载并安装 XMLSPY。
XMLSPY 集成开发环境的使用 XMLSPY 的基本功能介绍。 在 XMLSPY 中创建、编辑、保存 XML 文档。
命名空间的概念 命名空间 (namespace) 的概念在许多计算机领域中有着广泛的应用,主要是通过某种形式来表示标识符 (identifier) 的上下文。 标识符可能用于表示各种对象,比如在软件开发中可以表示变量、函数、数据对象等。 如果不明确地指定标识符所处的上下文(即实际应用环境),很可能会发生名称上的冲突。另外,还可以将逻辑上相关的标识符组织成相应的命名空间,可使整个系统更加模块化。
namespace foo { int bar1,bar2; } 编程语言中的命名空间 在 C++ 语言中,可以使用关键字 namespace 来声明命名空间,并使用 { } 来界定命名空间的作用域。 使用 namespace foo 内的变量,必须使用 :: 操作符,比如 foo::bar1。可以使用关键字 using 导入某个名称、或整个的命名空间 。 现实生活中命名空间的使用。 namespace foo { int bar1,bar2; } int main(){ using foo::bar1; cout << bar1 << endl; } int main(){ using namespace foo; cout << bar1 << endl; }
XML 文档中的命名空间 某个命名空间中的元素或属性可以具有与其他命名空间中同名元素或属性完全不同的含义,从而对这些数据对象进行区分。 命名空间的声明: xmlns:prefix-name="URI" <myns:element xmlns:myns="http://www.myns.com"> .... </myns:element> xmlns(即 xml namespace)是专门用于声明命名空间的关键字。 命名空间的前缀名称是以字母或下划线(_)开头的、不包含空白字符和冒号(:)的字符串,通常规定不应该使用 XML 中的保留字,比如 xml、xsl 等等。 统一资源标识符(Universal Resource Identifier) 是识别、定位和命名互联网上的资源的标准途径;URL、URN 都是 URI 的子集。在这里可看作一个简单的字符串。
XML 的命名空间使用 任何命名空间只能够在其作用域内进行使用,在同一个命名空间里,所有的元素名和属性名都必须唯一。 <?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> 进一步修改!
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 文档的字符表示形式。
ASCII 字符集 在早期字符集中,使用最为频繁的是 ASCII 的7位字符集,它是由美国信息交换标准委员会为美国英语符号和文字所设计的字符集。 在 EASCII 中,原前 0-127 的符号保持不变,而值为 128-255 之间的字符则用于表格符号、计算符号、希腊字母和特殊的拉丁符号。 EASCII 实际上等同于国际标准化组织的标准 ISO 8859-1,简称为ISO Latin-1。ISO Latin-1 是现今最通用的、最常见的单字节编码系统。 ascii. gif
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 )。 JavaDoc 通过Ultraedit工具的使用,演示说明GB2312和Unicode的区别。
UTF-8 编码实现方式 1 如果一个 7-8 位基本 ASCII 字符,使用 2 字节的 Unicode 编码传输,其第一字节的 8 位始终为 0,这就造成了比较大的浪费。 UTF-8 采用变长(1-3 个字节)的方式来表示 65536 以内的基本字符。 UTF-8非常适合于进行数据传输。
UTF-8 变长编码方式的分析 对于 127 以内的字符仅使用一个字节进行编码,能够节省空间;对于中文字符可能需要 3 个字节来进行表示。 比如,我们通常编写的 Java 源代码,其中大部分都是西文字符,可能仅包含少量的中文注释,那么使用 UTF-8 变长编码方式,将比固定的双字节编码方式节省更多的空间。 notepad 中 utf-8 的使用。
XML 和 Unicode 及其他字符集 XML 支持 Unicode,lang.xml。 在符合 XML 规范的编辑器中,可以直接使用中文作为元素的名称(Han Ideographs for Element Names)。 但是所使用的汉字必须是 ISO 10646 中的“统一汉字(Uni-Han)”。 encoding 属性的取值与 XML 文档保存时采用的编码格式没有直接的关系。 <title>学习XML</title> 将被解析为:<title>学习XML</title> <标题>学习XML</标题>
Base64 编码的出现 XML 文档可用于各种复杂的数据,那么是否仅限于文本数据呢?
Base64 编码表
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 字节的整数倍。