web服务体系结构 (2).ppt
Web Services 体系结构,孟博计算机科学学院,XML基础,Web Services 体系结构,主要内容,XML简介XML设计目的XML特点XML1.0规范组成XML文档逻辑结构XML文档规则XML schemaXML 应用接口,XML简介,XML是 Extensible Markup Language(可扩展标记语言)的简称,是一种元语言(定义其它语言的系统)1996年,W3C(World Wide Web Consortium,互联网联合组织)为了克服HTML的局限性,在SGML的基础上创建XML计算机产业界的需求:开发简单而又可扩展的、结构化和半结构化信息文本表示机制,XML简介,HTML是SGML的一个应用,XML是SGML的一个子集,并且已经成为Internet上事实的数据交换标准1998年2月推出第一个正式的XML1.0版本;目前XML已经以扩展巴科斯-诺尔范式 EBNF(Extended Backus-Naur Form notation)的形式正式定义了下来独立于平台的XML是为Web开发的,这是它将最具影响的地方.,HTML的局限性,可扩展性差HTML的标记集是固定的,即HTML语法是不可扩展的缺乏对信息含义的描述能力,信息检索效率低HTML是针对人机交流而设计的,标记几乎全都是用来设计网页的布局和外观的。检索信息时,需要对全部页面的所有内容扫描,并且检索质量往往极差与应用程序的数据自动交换受限制服务器端在HTML中嵌入动态数据是非常困难的客户端应用程序也很难自动从HTML中获取所需的数据,HTML的局限性,描述能力有限HTML语言不能描述矢量图形、数学公式、化学符号等特殊对象链接功能有限链路丢失后不能自动纠正 HTML不能维持文档间的任何历史和关系,因此如果页面的URL地址变化了,浏览这些页面时就会遇到烦人的404 URL地址未找到的信息。链接方式是纯单向的虽然链接文档知道它要链接到的地法,但被链接的文档却无法知道它是从何处被链接的,而这一点对于开发者往往是很重要的信息。,SGML简介,是标准通用标记语言(Standard Generalized Markup Language)的简称,是一种用标记(tag)来描述文档资料的国际标准通用语言Web发明之前就存在了,是HTML和XML的基础。SGML中包含了一系列的文档类型定义(简称DTD),用于定义标记的含义,因而它的语法是可以扩展的优点:SGML的语义标记有助于计算机分类和索引,并且可扩展成处理新数据格式的各种方法缺点:SGML十分庞大,不易学,不易用,在计算机上尤其是web上实现也十分困难。SGML 也代表“听起来很棒,但或许以后会用(Sounds Great,Maybe Later)”,XML设计目的,其设计目的:使得在Web上以现有的HTML方式提供、接收和处理通用的SGML成为可能W3C建议的XML 1.0中对XML设计目标:(1)应该可以在Internet上直接使用(2)应该广泛的支持不同的应用(3)与SGML兼容(4)处理XML的文档应该容易编写(5)可选特征应该尽可能少,最好为0(6)XML文件要易读,清晰(7)XML应易于设计。(8)XML的设计应该正式而且简洁,XML的设计目的,(9)XML文档应易于创建。(10)XML标记的简洁性较为次要此外,还有两个隐含目标:可扩充性语义与表现形式的分离,一个XML例子,标记是左尖括号()之间的文本。有开始标记(例如)和结束标记(例如)元素是开始标记、结束标记以及位于二者之间的所有内容。在上面的样本中,元素包含三个子元素:、和。属性是一个元素的开始标记中的名称-值对,属性间用空白符号隔开。在该示例中,province 是 元素的属性;,Teacher bo meng wuhan,XML的特点,可扩展性 XML是一种元标记语言,它定义了一组用来形成语义标记的规则集,用户可以构造自己的标记.已有化学标记语言CML、数学标记语言MathML等对文档内容具有自描述能力,支持智能代码和智能搜索XML是一种语义化的标记语言,具有自描述性.XML文档本身仅包含描述文档内容的标记,并不描述文档的外观格式应用程序更容易定位文档中的信息结构化数据表达能力结构化的数据指的是其内容,意义或应用被标记的数据 通过文档类型定义DTD或XML Schema,XML指定文档中的元素以及元素之间的关系.,XML的特点,XML还提供了一种将多个数据源数据集成为单个文档的客户端包括机制数据位置也可以重排根据用户的操作,部分数据还可以被隐藏/显示良好的通用数据格式,跨平台以及语言独立XML 允诺成为交换数据和文档的标准机制 XML是一种独立于平台的信息表示格式.用纯ASCII文本和一些人们普遍使用的格式来编写的,ASCII文件抵抗破坏的能力很强,是计算机领域中最通用的数据格式并没有定义数据文件中数据出现的具体规范,而是在数据中附加tag来表达数据的逻辑结构和含义。这使XML成为一种跨平台程序能自动理解的规范,XML的特点,强大的超链接功能XLL代表XML的链接语言,由用于链接的XLinks和用于定位文档中某部分的Xpointers的两部分组成XLL支持可扩展的链接和多方向的链接。它打破了HTML只支持超级文本概念下最简单的链接限制,能支持独立于地址的域名、双向链路、环路、多个源的集合链接等。文档的表示形式多样化通过将结构,内容和表现分离,同一个XML源文档只写一次,可以用不同的方法表现出来。数据表示是由层叠样式表CSS或可扩展样式语言XSL来实现的,XML的特点,用户可以根据具体需要为同一个XML文件编写多个样式文件,为文档中的元素设计不同的显示/打印样式。这将使网络的用户界面更趋于个性化、风格化降低了对服务端的要求XML没有SGML那么复杂,它是设计用于有限带宽的网络的,如Internet.服务器只须发出同一个XML文件,而由客户根据自己的需求选择和制作不同的应用程序以处理数据.服务端可以集中精力尽可能完善、准确地将数据封装进XML文件中使广泛、通用的分布式计算成为可能,XML的特点,目前的不足在强调了数据结构的同时,语义表达能力上略显不足 XML的有些技术尚未形成统一的标准,充分支持XML的应用处理程序很少 由于XML是元置标语言,任何个人、公司和组织都可以利用它定义新的标准,这些标准间的通信成为了巨大的问题,XML1.0规范组成,XML1.0及其相关规范可以被分为两大部分:核心层:XML 1.0语法Ref:包含文档结构,元素,属性,注释,实体等多个部分内容的规定加上相关标准(Unicode,ISO/IEC 10646字符集,Internet RFC 1766语言识别标记,ISO 639语言名编码,ISO 3166国名编码等),给出了创建规范的XML文档所需要的一切XML的描述和验证:DTD(Document Type Definition,文档类型定义)本身不使用XML语法任何进行有效性验证的解析器都可以通过使用DTD来验证XML文档的有效性带有一定的局限性,XML1.0规范组成,Schema(模式)由W3C官方制定,使用XML 1.0语法可以对数据进行更详细的控制可以使用工具将DTD转换为Schema其他模式XDR:XML-Data Reduced.SOX:Schema for Object-oriented XML.Ref:www.w3.org/TR/NOTE-SOXXML正则表达语言RELAX NG(REgular LAnguage description for XML(Next Generation)Ref:XML正则表达式TREX(Tree Regular Expressions for XML)Ref:Schematron:依赖规则而不是基于语法 Ref:,XML1.0规范组成,XML命名空间(Namespaces)为了防止共享词汇表的时候发生名字冲突,在单一文档中使用多个词汇表一种复合命名方法是其他XML技术如Schema或Infoset关键组成部分,它们与XML解析器共同构成XML处理的第一层,语法,描述和验证,命名空间,XML1.0规范组成,应用程序支持层:XML信息集合(XML Infoset)为XML文档设计一个查阅文档的摘要方式至少包含一条文档信息项和一条元素信息项,还可以包含属性信息项等。每条信息项有一组属性,分为核心属性和一般属性。Ref:www.w3.org/TR/xml-infosetXML定位与链接:XML Base规范设置XML文档的基本URIXPath(XML路径语言)用于对XML数据对象的特定部分进行编址其表达式使用了一种压缩的非XML语法,可以在URI和属性内部使用提供了一种查询数据的简单方法,XML1.0规范组成,XPointer(XML指针语言)基于XPath表达式,并扩展了XPath:提供在XML数据中任意的点和范围的相对位置的编址XML数据内部的字符串匹配用其找到的位置可以作为链接目标XLink(XML链接语言)定义了一些特殊元素,可以在XML数据中使用,以创建资源间链接可以不用改变文档的内容而描述指向不同的XML文档的链接不仅指定了链接的数据结构,也定义了一个简单的链接行为模型,可以被高级应用层扩展,XML1.0规范组成,XInclude(XML包含)为XML的通用包含提供了过程模式和语法XFI(文档片断交换)用于对XML数据段进行描述和传递可以使查看和编辑XML文件时不用发送整个数据对象,也不用使用显式定义的外部实体XQuery(XML查询语言)XQuery是一种新的查询语言提案,是用非XML语法表达的可以使用XPath2.0表达式,也可是使用类似于SQL查询的表达,XML1.0规范组成,XML转换:CSS(Cascading Style Sheet层叠样式表)被设计用于使数据作为网页表示,还有许多媒体方面的扩展功能可以使数据的描述和表示分开是XSL的一个有用的补充XSL(eXtensible Style Language可扩展样式语言)有一个子集为XSLT(用于转换的XSL)是一种描述性语言,只需要陈述一些规则即可自动调用模板,XML1.0规范组成,XSL-FO(Formated Object格式化对象)是一个XML词汇表目标是将XML数据精确显示和打印象HTML一样描述了详细的格式化规范,但是格式模型更加复杂支持真正的国际化文本可以认为它在布局信息方面具有与PostScript和PDF等同的能力,XML文档逻辑结构,XML文档基本组成部分概览:序言(可选)XML声明例:DTD声明例:主体:元素命名空间声明例:xmlns=标记开始标记,结束标记,空标记属性,XML文档逻辑结构,可出现在任何部分的其他可选内容:注释(注释不能出现在XML声明之前)例:处理指令例:空白空格回车符换行符制表符,XML文档规则-XML 文档分类,三种 XML 文档无效文档(Invalid)没有遵守 XML 规范定义的语法规则开发人员已经在 DTD 或模式中定义了文档能够包含什么,而某个文档没有遵守那些规则有效文档(Valid)遵守 XML 语法规则也遵守在其 DTD 或模式中定义的规则格式良好的文档(Well-Formed)满足XML规范的语法要求,XML文档规则-字符,标记和字符数据XML文档是纯文本,由标记或字符数据组成标记描述了实体的逻辑结构,包括起始标记和结束标记空元素标记实体引用字符引用注释CDATA段定界符文档类型声明DTD操作指令其他所有非标记的文本组成文档的字符数据,和&不能作为字符出现在字符数据中,XML文档规则-字符,XML中合法的字符包括制表符回车换行Unicode和ISO/IEC 10646中定义的合法的图形字符命名字符命名必须以有效命名头字母开始:任何Unicode字母字符_(下划线):(冒号)后跟有效命名字母:有效命名头字母任何Unicode数字字符-(连字符).(句号,终止符)名字中不能包含空格,XML文档规则-字符,XML 规范定义了五个可以用来替代不同的特殊字符的实体:代表一个“与”符号。,This is element,XML文档规则-声明,XML 声明向解析器提供了关于文档的基本信息,建议使用,不是必需的。如果有的话,那么它一定是文档的第一项声明包含名称-值对version 是使用的 XML 版本;目前该值必须是 1.0encoding 是该文档所使用的字符集。如没有指定 encoding,XML 解析器会假定字符在 UTF-8 字符集中,这是一个几乎支持世界上所有语言的字符和象形文字的 Unicode 标准。在XML声明中添加encoding=GB2312属性,就可以在XML中使用简体中文,XML文档规则-注释,注释 结束。注释不是文档字符数据的一部分,XML处理器不对中间的文本进行解析注释不能在结束部分以外包含双连字符(-);除此之外,注释可以包含任何内容。最重要的是,注释内的任何标记都被忽略;不能出现在XML声明之前,XML声明绝对是文档的第一项内容不能放在任何一个标记中示例:,XML文档规则-根元素,根元素XML 文档必须包含在一个单一元素中。这个单一元素称为根元素,它包含文档中所有文本和所有其它元素。一个XML文档只能有一个根元素!一个无效XML文档,XML文档规则-元素不能重叠,元素不能重叠在 一个 元素a中开始了另一个元素b,则必须在 a 元素中结束 b 元素一个无效XML文档,XML文档规则-结束标记,结束标记是必需的尽管这在 HTML(以及某些情况下在 SGML)中可以接受,但 XML 解析器将拒绝它一个无效XML文档,XML文档规则,元素内容元素起始标记和结束标记之间的一切是元素的内容内容类型只含子元素只包含正文的元素常常被称为含有“数据”内容混合嵌套元素和文本的组合空内容,XML文档规则-空元素,空元素规定如果一个元素根本不包含内容,则称为空元素;在 XML 文档的空元素中,可以把结束斜杠放在开始标记中空元素示例,XML文档规则-区分大小写,元素是区分大小写的在 HTML 中,和 是相同的;在 XML 中,它们是不同的XML文档示例,Elements are case sensitive,Elements are case sensitive,XML文档规则-属性,属性必须有用引号括起的值属性必须有值那些值必须用引号括起,可以使用单引号,也可以使用双引号,但要始终保持一致同一个标记不能包含相同名称的两个属性如果属性值包含单引号或双引号,则可以使用另一种引号来括起该值(如 name=“Dougs car”),或使用实体 代表单引号。示例(前者可以被html接受,而XML拒绝):,XML文档规则-属性,两个特殊属性:xml:lang指定文档内容和属性值所使用的语言,这对于像Web搜索引擎这样软件相当有用可以设定为下面几个值:双字符的语言代码,ISO 639标准 如“en”代表英国已经在IAIN(Internet Assigned Numbers Authority)注册的语言标识,这种标识具有前缀i-(或I-)自定义标志符,以x-或者X-开头允许使用语言子码,在语言编码后加上段横线和子码。用来指定方言与区域性语言等。,XML文档规则-属性,使用语言子码示例,The colour is red The color is red,XML文档规则-属性,xml:space用于指定应用程序对空白的处理方法,而不依赖于应用程序的隐含行为类似于HTML中的pre元素两个有效值:preserve:应用程序应该保留指定元素中的所有空白default:依赖应用程序的隐含行为来处理,XML文档规则-处理指令,处理指令处理指令是为使用一段特殊代码而设计的标记进程指令以应用程序的名字(即进程指令所要执行的操作)开头,后面是该指令的数据。示例:Cocoon 是来自 Apache 软件基金会(Apache Software Foundation)的 XML 处理框架。当 Cocoon 处理 XML 文档时,它会寻找以 cocoon-process 开头的处理指令,然后相应地处理 XML 文档。在该示例中,type=“sql”属性告诉 Cocoon:XML 文档包含一个 SQL 语句。,XML文档规则-CDATA段,CDATA段以字符串“”结束XML将保留CDATA段中的字符数据不被解析,这样CDATA段中包括的、&或“无需使用实体引用来转义CDATA段中唯一禁用的文本是关闭CDATA的标记 CDATA段不能嵌套,Hello,&world!This is a showcase of CDATA usage,and including a element description,XML文档规则-命名空间,命名空间为了区分相同名字代表的不同含义的元素要使用名称空间,您要定义一个名称空间前缀,然后将它映射至一个特殊字符串名称空间定义中的字符串仅仅是字符串,要确保其唯一性!,Mrs.Lord of the Rings NC2948-388-1983,XML文档规则-命名空间,xmlns并没有限定在根元素中使用,它可以存在于子元素中冒号不能出现在名称空间前缀中xml和xmlns不能作为名称空间前缀,Mrs.Lord of the Rings NC2948-388-1983,XML文档规则-小结,一个格式良好的XML文档必须满足以下基本条件包含一个或多个元素;有且仅有一个称为根(root)或文档元素的元素,它不出现在其他任何元素的内容中;非空元素的开始标记和结束标记必须匹配;元素可以嵌套,但是不能交叉,即应符合树型结构;文档中直接或间接引用的每一个已析实体都是格式良好的,例子:,定义文档内容,两种方法定义数据元素:文档类型定义(Document Type Definition)或简称 DTDXML SchemaXML Schema特点:XML模式使用XML语法XML模式支持数据类型XML模式可扩展XML 模式表达能力强,XML Schema规范,XML Schema Part 0:Primer提供入门知识,解释模式是什么?如何建立模式?XML Schema Part 1:Structures 定义XML文档结构模式XML Schema Part 2:Datatypes定义了一组简单类型,XML Schema结构文档,注释声明元素声明属性声明表示法声明类型定义简单类型复杂类型属性组模型组,DTD,XML文档实例(学生信息)文档实例对应的DTD(学生信息)DTD特征元素定义方式是(元素,内容模型),在定义元素的同时,指定元素内容模型DTD缺点DTD有自己的特殊的语法,其本身不是XML文档 DTD只提供了有限的数据类型 DTD不支持名域机制,01 11 12 13 Lin14 2015 16 17 Lin18 19,记录某班学生信息的XML文档实例,返回,2 4 5 6 7 8 9,学生信息XML文档实例对应的DTD,返回,Schema,XML文档的Schema(学生信息)Schema特征Schema使用(元素,类型)模式描述文档的结构Schema优点本身是XML文档内建丰富的数据类型;可以方便地定义数据类型支持名域(namespace),学生信息XML文档的Schema:Students.xsd,0103 09 10 11 12 13 14 15 16 17 18 19 20 21 22,小结,Schema通过类型定义和元素声明,描述XML文档的结构。,应用程序接口API,DOM(document Object Model)SAX(simple APIs for XML),文档对象模型DOM,文档对象模型(通常称为 DOM)为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后您的代码就可以使用 DOM 接口来操作这个树结构。您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。,DOM 和基于树的处理,使用 DOM 时,数据以类树结构被装入内存中。同一文档将被表示为节点,如左边所示。矩形框表示元素节点,椭圆形表示文本节点。DOM 使用根节点和父子关系。例如,在本例中,samples 将是带有五个子节点的根节点:三个文本节点(空白)和两个元素节点 server 和 monitor。,DOM 问题,DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。这些仅仅是由文档对象模型的设计引起的问题;撇开这些问题,DOM API 是解析 XML 文档非常有用的方法。,用于 XML 的简单 API,SAX 解析器向您的代码发送事件。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,它会告诉您。您可以决定什么事件对您重要,而且可以决定要创建什么类型的数据结构以保存来自这些事件的数据。如果您没有显式地保存来自某个事件的数据,它就被丢弃。SAX 解析器根本不创建任何对象,它只是将事件传递给您的应用程序。如果希望基于那些事件创建对象,这将由您来完成。SAX 解析器在解析开始的时候就开始发送事件。当解析器发现文档开始、元素开始和文本等时,代码会收到一个事件。您的应用程序可以立即开始生成结果;您不必一直等到整个文档被解析完毕。更妙的是,如果您只查找文档中某些内容,代码一旦找到所要找的东西就可以抛出一个异常。该异常会停止 SAX 解析器,然后代码用它找到的数据做它需要做的任何事。,SAX 处理是如何工作的,SAX 分析经过其的 XML 流,考虑以下 XML 代码片断:UNIX color SAX 处理涉及以下几步:创建事件处理程序。创建 SAX 解析器。将事件处理程序分配给解析器。对文档进行解析,将每个事件发送给处理程序。,SAX 问题,这种处理的好处非常象流介质的好处;可以立即开始分析,而不是必须等待所有要处理的数据。同样,由于应用程序简单地检查经过其的数据,所以不需要将数据存储在内存里。当遇到大文档时,这是一个突出的优势。一般来讲,SAX 还比其替代物“文档对象模型”快。另一方面,由于应用程序不以任何方式存储数据,所以,使用 SAX 时,不可能对数据进行更改,或者“返回”至数据流中前面的数据。,在 SAX 与 DOM 之间如何选择,选择 DOM 还是 SAX,这取决于几个因素:应用程序的目的:如果必须对数据进行更改,并且作为 XML 将它输出,则在大多数情况下,使用 DOM。与使用 XSL 转换来完成的简单结构更改不一样,如果是对数据本身进行更改,则尤其应该使用 DOM。数据的数量:对于大文件,SAX 是更好的选择。将如何使用数据:如果实际上只使用一小部分数据,则使用 SAX 将数据抽取到应用程序中,这种方法更好些。另一方面,如果知道将需要向后引用已经处理过的信息,则 SAX 可能不是正确的选择 需要速度:通常,SAX 实现比 DOM 实现快。SAX 和 DOM 不是互斥的,这一点很重要。可以使用 DOM 来创建事件的 SAX 流,可以使用 SAX 来创建 DOM 树。事实上,大多数解析器实际常常使用 SAX 来创建 DOM 树!,选择合适的API,要用 Java 编写应用程序吗?JAXP 使用 DOM、SAX 和 JDOM;如果您用 Java 编写代码,那么您应使用 JAXP 将您的代码与各种解析器实现的细节隔离。应用程序将如何部署?如果您的应用程序将要作为 Java applet 部署,那么您会希望使要下载的代码数量最小,别忘了 SAX 解析器比 DOM 解析器小。还要知道使用 JDOM 时,除了 SAX 或 DOM 解析器之外还要求编写少量的代码。一旦解析了 XML 文档,还需要多次访问那些数据吗?如果您需要回过头来访问 XML 文件的已解析版本,DOM 可能是正确的选择。而 SAX 事件被触发时,如果您以后需要它,则由您(开发人员)自己决定以某种方式保存它。如果您需要访问不曾保存的事件,则必须再次解析该文件。而 DOM 自动保存所有的数据。,选择合适的API,只需要 XML 源文件的少量内容吗?如果您只需要 XML 源文件的少量内容,那么 SAX 可能是正确的选择。SAX 不会为源文件中的每个东西创建对象;您要确定什么是重要的。使用 SAX,您要检查每个事件以了解它是否与您的需要有关,然后相应地处理它。更妙的是,一旦找到您正在寻找的东西,您的代码就会抛出一个异常来完全停止 SAX 解析器。您正在一台内存很少的机器上工作吗?若是的话,不管您可能考虑到的其它因素是什么,SAX 是您的最佳选择。,Web Services体系结构,谢 谢!,