软件结构体系结构---基础知识点(6)

第六章 可扩展标记语言

6.1 XML概述

软件体系结构描述语言ADL是一种形式化语言,它在底层语义模型的支持下,为软件的概念体系结构建模提供了具体语法和框架ADL强调的是概念体系结构,通常要包含形式化的语义理论,并以此来刻画体系结构的底层框架。但ADL中专业术语过多,语义理论过于复杂,使其不利于向产业界推广。

XML(可扩展标记语言)是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

XML(eXtensible Markup Language,可扩展标记语言)是一种元语言,是Internet 环境中的一种跨平台的、依赖于内容的技术,是当今处理分布式结构信息的有效工具。

•XML有两个先驱

SGML:(Standard Generalized Markup Language,标准通用标志语言)

HTML:HTML是一种界面技术,它只使用了SGML中很少的一部分标记。固定的语法使它易学易用,在计算机上开发HTML的浏览器也十分容易。

•在EDI(Electronic Data Interchange,电子数据交换)应用过程中,XML展现了如下的优势 :

低成本 、定制商业规则,XML允许用户创建自己的商业规则和格式 、容易解释 、平台独立

XML的基本特征

XML是一个精简的SGML子集,保留了SGML的可扩展功能。XML要比HTML强大得多,它不再是固定的标记,而是允许定义数量不限的标记来描述文档中的资料,允许嵌套的信息结构。 其特点如下 :

简洁有效、易学易用、开放的国际化标准、 高效且可扩充

XML的特点 – 开放的国际化标准

ØXML标准。这是W3C正式批准的,这意味着这个标准是稳定的,完全可用于Web和工具的开发。

ØXML名域(namespace)标准。用来描述名域的句法,支持能识别名域的XML解析器。

ØDOM(Document Object Model,文档对象模型)标准。为给结构化的数据编写脚本提供标准,这样,开发人员就能够与计算机在基于XML的数据上进行交互。

ØXSL标准。XSL有两个模块:XSL转换语言和XSL格式化对象。其中转换语言可用来转换XML以满足显示要求。由于XSL的两部分是模块化的,因此,转换语言能够独立地用来进行多用途的转换,包括把XML转换成结构完整的HTML。

ØXLL标准和XML指针语言(XPointer)标准。XLL提供类似与HTML的链接,但功能更强大。例如,链接可以是多方向的,可以存在于对象上而不仅仅是页面上。

XML定义

XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。XML是元标记语言,即定义了用于定义与其他特定领域有关的、语义的、结构化的标记语言句法的语言。可以从以下几个方面来定义XML:

XML是一种类似于HTML的标记语言。

XML是用来描述数据的。

XML的标记不是在XML中预定义的,用户可以自定义标记。

XML使用文档类型定义(DTD)或者模式(SCHEMA)来描述数据。

XML不是HTML的替代品,XML和HTML是两种不同用途的语言:

ØXML是用来描述数据的,侧重描述什么是数据,HTML是用来显示数据的,侧重描述如何显示数据;

ØHTML是与显示信息相关的,而XML则是与描述信息相关的。

XML的作用

Ø使得搜索更加有意义

Ø开发灵活的Web应用软件

Ø实现不同数据的集成

Ø使用于多种应用环境

Ø客户端数据处理与计算

Ø数据显示多样化

Ø局部数据更新

Ø与现有Web发布机制相兼容

Ø可升级性

Ø压缩性能高

XML的应用

Ø应用于客户需要与不同的数据源进行交互时

Ø应用于将大量运算负荷分布在客户端;

Ø应用于将同一数据以不同的面貌展现给不同的用户;

Ø应用于网络代理对所取得的信息进行编辑、增减以适应个人用户的需要。

6.2解析XML

XML使用的是非常简单的数据格式,可以用100%的纯ASCII文本来书写,也可以用几种其他定义好的格式来书写。ASCII文本几乎不会被“磨损”,丢失一些字节甚至是相当多的字节,剩下的数据还是可以读取的。

XML是自描述性的,有很好的规格文档。

XML与HTML的区别

ØHTML是一种格式化的语言,一个HTML文本可以看作一个格式化的程序。HTML定义了一套固定的标记,用来描述一定数目的元素;而XML的描述是一段“纯”数据,它的结构由其他称为DTD的文本来描述,而它的处理可能是其他任何支持XML的容器或程序。

ØXML是一种元标记语言。它可以被用于定义其他的标记语言,甚至DTD和XSL文档也是用XML语法描述的;

ØXML定义了一套元语句,与特定领域有关的标记语言(例如,MusicML、MathML和CML等)都必须遵守。

XML文档

上面是一个组织良好的XML文档,它满足以下三项基本规则:

(1)文档以XML定义<?xml version="1.0"?>开始。

(2)有一个包含所有其它内容的根元素,如上面例子中的<visit>和</visit>标记符。

(3)所有元素必须合理地嵌套,不允许交叉嵌套。

XML文档结构

•XML文档有两个主要组成部分:

序言(prolog)

Ø第一行是XML声明,说明这是一个XML文档,并且遵循XML 1.0版的规范;

Ø第二行是注释。引入注释可以增强文档的可读性,XML文档的注释是可选的。

文档元素(document element,即根元素)

XML声明语句中通常可以有如下属性 :

Øversion :该属性是必须的,用于表明XML的版本,解析器对不同的版本的解析会有区别。

Øencoding :该属性是可选的,用于表明该文档所使用的字符编码方式。

Østandalone:该属性定义了是否可以在不读取任何其他文件的情况下处理该文档,其属性值可以是yes或no。

文档元素

ØXML文档第二个主要部分是文档元素

Ø一个典型的元素有起始标签、元素内容和结束标签。元素的内容可以是字符数据、其他(嵌套的)元素或者两者的组合

Ø整个XML文档就是由标记和字符数据混合成的,标记是用来描述文档结构的定界文本。

XML文档必须有一个根元素,用来包含可能有的其他内容。XML文档中的所有内容都应该出现在根元素的内部。在遵守XML命名规则的前提下,用户可以为元素和属性选择任何名字。XML文档内容的主体部分一般由根元素,各级子元素,属性,注释和内容组成。

XML元素

•元素是XML文档的基本组成部分。所有的XML数据(除了注释、PI和空白)都必须包含在元素中;

•XML中元素使用标记进行分隔,标记由一对尖括号(“<>”)围住元素名称构成。

•起始标记 起始标记是一个包含在尖括号里的元素名称,下面是一些合法的起始标记:<student>,<Student>,<STUDENT>

XML是大小写敏感的,所以前三个例子不是等同的标记

元素名称类型名可以使用任何合法字母,而不一定是ASCII码字符

结束标记 结束标记由一个斜杠和元素名称组成,被括在一对尖括号中。

XML属性

•XML元素的属性是对标记进一步的描述和说明,一个标记可以有多个属性;

•特定的属性名称在同一个元素标记中只能出现一次;属性值不能包括“<”、“>”、“&”

•下面的两种写法在一般情况下是没有区别的,双引号的写法更普遍一些

<student sex = "male"></student>

<student sex = 'male'></student>

XML注释

ØXML中,注释以 <!-- 开始,以 --> 结束,除了在XML声明之前,注释可以出现在XML文档的其他任何位置

Ø在进行XML解析时,注释内的任何标记都被忽略

Ø在添加注释时需要遵循以下规则:

注释里不能包含文本“--”

注释不能包含于标记内部

元素中的开始标签或结束标签不能被单独注释掉

XML的文档规则

格式良好的XML文档规则:

Ø必须有声明语句

Ø注意大小写

ØXML文档有且只有一个根元素

Ø属性值使用引号

Ø所有的标记必须有相应的结束标记

Ø所有的空标记也必须被关闭

Ø标记必须正确嵌套

Ø处理特殊字符

小结

ØXML是一种类似于HTML的标记语言,是一种元语言

ØXML是用来描述数据的,不是HTML的替代品

ØXML的标记不是在XML中预定义的,用户可以自定义标记

ØXML有两个先驱:SGML和HTML,XML正是为了解决它们的不足而诞生的,XML是一个精简的SGML子集

ØXML文档有两个主要组成部分:序言和根元素

ØXML文档内容的主体部分一般由根元素,子元素,属性,注释和内容组成

Ø元素是XML文档的基本组成部分。

DTD简介

•一个完全意义上的XML文档不仅仅是“Well Formed”(格式良好的),而且还应该是使用了一些自定义标记的“Validating XML”(有效的)文档。

•DTD规定了一个语法分析器以解释一个“Validating XML”文档所需要知道的所有规则的细节 。

•DTD可以看作一个或多个XML文件的模板,这些XML文件中的元素、元素的属性、元素的排列方式/顺序、元素能够包含的内容等,都必须符合DTD中的定义。

•针对不同的行业和应用,已经有数量众多的写好的DTD文件可以利用,这些DTD文件已经建立了通用的元素和标签规则。

DTD声明

•使用DOCTYPE声明将DTD与XML文档关联。

•DOCTYPE声明由以下部分组成:关键字、文档的根元素名称、可选的外部标识符,以及可选的标记声明块 。

外部标识符用于外部DTD(外部子集)的命名和定位

标记声明块是由标记声明(内部子集)构成的

•语法示例如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

DOCTYPE声明必须位于XML声明之后,且在任何文档元素之前。但是,XML声明和DOCTYPE声明之间可以插入注释和处理指令。

内部DTD

•可以使用<!DOCTYPE[.....]>语句在XML文档序言部分声明DTD文档的定义,引入内部DTD的XML文档的结构如下:

<!DOCTYPE:表示开始设定DTD,注意DOCTYPE必须大写

element-name:指定此DTD的根元素的名称,一个XML文件只能有一个根元素

[.........]>:在[]标记里面定义XML文件使用元素,然后用>结束DTD的定义

XML模式

除DTD外,还有一种方式来定义有效的XML文档,那就是W3C与XML标准一起定义的XML模式(XML Schema),其优势如下:

ØXML模式使用XML语法

ØXML模式支持数据类型

ØXML模式是可扩展的

ØXML模式有更强的表达能力

CSSXSL

XML文档最终是要通过一定的应用程序来表现的,如浏览器用浏览器来表现XML就要经过CSS或XSL,它们都是样式语言,描述了XML数据与HTML标记的映射关系。 或者可以说,XSL是对XML文档进行排版的语言。

一个CSS样式单就是一组规则,样式再根据特定的一套规则级联起来。每个规则给出规则所适用的元素的名称,以及此规则要应用于哪些元素的样式。

XSL是专门用于XML文档的样式表单语言,可以把XSL当成一种能够把XML转变成HTML的语言,一种能够筛选和排序XML文档中数据的语言,即XHTML。XSL文档本身就是结构完整的XML文档。

使用步骤:

1.编写XML数据文档;

2.编写XSL文档,注意XSL生命须指向W3C XSLT命名空间和说明版本,如下:

3.在XML中加入对XSL的引用,格式如下:

CSS与XSL比较

ØCSS只能改变特定元素的格式,也只能以元素为基础。但XSL样式单可以重新排列元素并对元素进行重排序。

ØCSS的优越性在于具有广泛的浏览器支持。但是XSL更为灵活和强大,可更好地适用于XML文档。而且,带XSL样式单的XML文档可以很容易地转换为带CSS样式单的HTML文档。

Ø如果只是要对一些固定数据进行排版,可以使用“HTML+CSS”方式如果这些数据是与某些应用程序相关,并且独立于程序存在的,并且要独立于程序来使用,则应该充分使用XML技术,采用“HTML+XML+XSL”

3.XML编程接口

API接口

XML的编程接口,为开发人员使用XML文档提供了一致的接口。在众多的API中,最流行和广泛使用的是以下4中:

ØDOM(Document Object Model)接口

Ø文档对象模型DOM为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用DOM接口来操作这个树结构。用户可以遍历树以了解原始文档包含了什么,可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。

DOM存在的问题

ØDOM提供了一组丰富的功能,用户可以用这些功能来解释和操作XML文档,但使用它们是有代价的。

ØDOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存;

ØDOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果用户只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。

ØDOM 解析器必须在代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。

ØSAX(Simple API for XML)接口,用于XML的简单API

为了解决DOM问题,产生了SAX接口(用于XML的简单的API接口),其特征如下:

ØSAX 解析器向代码发送事件。用户可以决定什么事件对自己重要,而且可以决定要创建什么类型的数据结构以保存来自这些事件的数据;

ØSAX解析器根本不创建任何对象,它只是将事件传递给应用程序。

ØSAX解析器在解析开始的时候就开始发送事件。

SAX存在的问题

SAX事件是无状态的。

SAX事件不是持久的。

ØJDOM

ØJDOM是基于Java技术的开放源码项目,它试图遵循80/20 规则:用DOM和SAX的20%的功能来满足80%的用户需求。 JDOM使用SAX和DOM解析器,因此,它是作为一组相对较小的Java类被实现的。

ØJDOM 的主要特性是它极大地减少了用户必须编写的代码数量,JDOM应用程序的长度通常是DOM应用程序的三分之一,大约是SAX应用程序的一半。JDOM并不做所有的事,但对于大多数用户要做的解析,它可能正好适合用户的需求。

ØJAXP(Java API for XML Parsing)接口,用于XML解析的Java API

Ø尽管DOM、SAX和JDOM为大多数常见任务提供了标准接口,但仍有些事情是它们不能解决的。为了修正这个问题,SUN发布了JAXP,该API为使用DOM、SAX和XSLT处理XML文档提供了公共接口。

ØJAXP提供的诸如DocumentBuilderFactory和DocumentBuilder之类的接口,为不同的解析器提供了一个标准接口。还有一些方法可以允许用户控制底层的解析器是否可以识别名称空间,以及是否使用DTD或模式来验证XML文档。

API接口– 接口的选择(选择)

Ø要用java编写应用程序么?JAXP使用DOM、SAX和JDOM;如果用Java编写代码,那么应使用JAXP将代码与各种解析器实现的细节隔离。

Ø应用程序将如何部署?如果应用程序将要作为Java applet部署,那么会希望使要下载的代码数量最小,SAX解析器比DOM解析器小,而使用JDOM时,除了SAX或DOM解析器之外还要求编写少量的代码。

Ø一旦解析了XML文档,还需要多次访问那些数据么?如果需要回过头来访问 XML文件的已解析版本,DOM可能是正确的选择。而SAX事件被触发时,如果以后需要它,则由(开发人员)自己决定以某种方式保存它。如果需要访问不曾保存的事件,则必须再次解析该文件;而DOM自动保存所有的数据。

Ø只需要XML源文件的少量内容吗?如果只需要XML源文件的少量内容,那么 SAX可能是正确的选择。

Ø正在一台内存很少的机器上工作么?若是的话,不管可能考虑到的其它因素是什么,SAX都是最佳选择。

XML建模

XML技术的出现,使用户对信息的描述能力增强了。它使得用户得以设计不会随着关键数据变化而要修改代码的程序,提高系统的可维护性和适应性,构造与平台无关的数据,构造可以在不同系统中使用和交换的数据,定义在不同部门共同遵守的标准。

XML不是程序设计层面的技术,XML建模包含以下方面:

Ø描述具体数据,任何文本编辑工具可编写XML文档;

Ø描述数据结构和模式,使用DTD;

Ø描述数据的表现,XSL定义一组元素,描述如何格式化数据;

Ø描述数据中的位置,Xpath是描述XML文档中位置的语法;

Ø描述数据中的链接关系,Xlink定义将不同资源链接在一起的各种资源;

Ø描述数据的应用关系,通过SOAP、WSDL、UDDI来描述。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiayi_init_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值