描述性程序设计语言Declarative Languages
Declarative Languages 更关注如何描述问题本身,更脱离实际运行环境 大规模软件 Declarative Deterministic Concurrent 冯诺依曼单机 网络环境 不同的软件开发方法 更关注描述冯诺依曼机如何执行 Imperative 小规模软件
Declarative Languages 走出去:某一个环境下编写的程序要能在其他环境下执行。 请进来:其他环境下编制的程序要能为我的环境所使用。
走出去 平台无关(编程语言) 放置标示 脚本解释
走出去 源程序经过编译生成的目标码是与本地机紧密相关的。表现在: 基本类型定义与及其字长相关; 各机指令集不一,操作效果相当,实现过程有微小的差别; 同一语言在相同编译和执行环境下,同一程序执行速度不一(硬件差异,优化次数);
平台无关 可移植性(portability)-为减少开发费用和开发时间。 程序员可移植:用户会了某种语言到任何能实现该语言的环境上即可编制程序而不需其它知识 程序可移植:在该语言的某个环境上编制的程序拿到有该语言实现的另一个环境上可以照样运行,程序的计算,语义不变。
平台无关 已采用增加可移植手段。 设预定义环境(包)——Ada; 分出头文件 - 宏 - 编译文件——C;
平台无关 网络计算的兴起使可移植性上升为平台无关性。
平台无关 局域网时代,需要在局域网内实现信息共享,有协作计算需求。 网络协议栈实现了数据的平台无关; 以文件共享形式实现; 客户/服务器模式,程序可以不共享; 只要局域网内使用相同或相互兼容的平台,也可以实现程序的共享。
平台无关 Internet时代,对资源共享提出了新的要求: WWW(World Wide Web)是Internet上最广泛的信息发布/浏览方式。与FTP等以往的方式相比较,WWW具有较强的动态性和交互性,需要完成复杂的应用(如电子商务等)因此,共享资源不但包括数据,也应包括程序。这就需要一种平台无关的语言。 激烈的竞争迫使软件生产者不断降低开发成本,缩短开发周期。平台无关语言使开发者不需要为一个软件开发多个操作系统的版本,减少了开发费用和时间。
平台无关 平台无关语言(编程语言)的实现: 传送源代码 将源代码传送到目标机,先经过编译,生成目标机代码,再执行。前提是必须有不同平台的编译器,这种情况往往在编译时缺乏源代码原有的环境信息(全程量),且只能先编译存入目标码再运行。局域网时代服务器已经做过了。要实时运行只能是解释(也要求有完整的信息)型语言。 传送目标代码 只有在相同或相互兼容的平台之间才可以实现。如在Windows NT/9x组成的局域网中,可以在一台机器上调用执行其它机器上的应用程序。 传送中间代码 中间代码由源代码经过编译生成。中间代码经过优化。中间代码传送到目标机上由解释器解释执行。Java语言使用的是这种方式。
Java对平台无关性的支持方法 保留了高级语言的主要机制 与C++基本相同的字符集、标识符、关键字、运算符、特殊符号 比C++更加强化类型。增加了布尔类型,只保留数组类型;使用真正的类型转换(C++中的类型转换是“伪”的,目的是为了通过编译器的检查;Java中的类型转换在运行时真正发生,如果不能转换,系统会抛出异常) 保留声明、作用域、变量、表达式、语句、三种结构化控制; 保留并增强C++的异常;
与C++相似的面向对象机制:类作为特殊类型、构造函数、初始化序列、实例变量、this/super、方法的覆盖与重载、成员可见性。 指针。以对象引用代替指针; 取消头文件和预处理器(宏与机器相关); C++中原有冗余:struct、union都被类代替; 不支持模板,动态束定功能可实现; 取消typedef; 不支持运算符重载;
平台无关 编译解释执行。 Java语言实现平台无关的关键是使用了“编译-解释”执行方式。Java源代码经过编译,称为Java字节代码(byte-code)。Java虚拟机(VM)是字节代码的解释器。JavaVM是用软件构造的一个虚拟计算机,它由虚拟的寄存器、内存、堆栈等;字节代码就是这台虚拟计算机的指令。所有操作系统上的JavaVM执行一致的指令,这样,就屏蔽了各个平台之间的差异(如下图所示)。
Java虚拟机是平台无关性的关键 在不同的操作系统上有不同的Java虚拟机,向上有一致 的接口(虚拟机的指令——字节代码),向下针对不同 的操作系统有不同的实现方式。
平台无关 即时编译(JIT: Just-in-Time Compile)。 使用即时编译是为了提高Java程序的执行效率,是对Java解释器的改进。即时编译在虚拟机解释执行Java字节代码时发生。当虚拟机第一次调用某个方法时,不再直接解释这个方法的字节代码,而是用即时编译器将这个方法的字节代码编译成为本机目标代码,然后执行这些目标代码。即时编译不是将整个类的字节代码进行一次性编译,而是只编译正在执行的函数,“边执行,边编译”。
平台无关 小程序(applet)的传递运行方式 小程序是可以在Web浏览器中执行的Java程序; 浏览器根据HTML文档中的<APPLET>标志,从指定的URL下载小程序的类字节码(.class文件),装入到Java虚拟机中运行; 小程序的出现提高了Web页面的交互性和动态性,使浏览器能够完成更加复杂的应用。 Java虚拟机有内置的类装入机制,从文件系统或网络中下载类代码,然后在虚拟机中运行。浏览器下载运行小程序只是一个特例,这种机制可以被所有Java应用程序使用。
即时编译(JIT: Just-in-Time Compile)。 使用即时编译是为了提高Java程序的执行效率,是对Java解释器的改进。即时编译在虚拟机解释执行Java字节代码时发生。当虚拟机第一次调用某个方法时,不再直接解释这个方法的字节代码,而是用即时编译器将这个方法的字节代码编译成为本机目标代码,然后执行这些目标代码。即时编译不是将整个类的字节代码进行一次性编译,而是只编译正在执行的函数,“边执行,边编译”。
小程序(applet)的传递运行方式 小程序是可以在Web浏览器中执行的Java程序; 浏览器根据HTML文档中的<APPLET>标志,从指定的URL下载小程序的类字节码(.class文件),装入到Java虚拟机中运行; 小程序的出现提高了Web页面的交互性和动态性,使浏览器能够完成更加复杂的应用。 Java虚拟机有内置的类装入机制,从文件系统或网络中下载类代码,然后在虚拟机中运行。浏览器下载运行小程序只是一个特例,这种机制可以被所有Java应用程序使用。
Java虚拟机技术 虚拟机技术作为一门综合技术几乎体现了当代程序设计语言设计与实现技术的各个方面。Java虚机要实现Java的面向对象程序: 类装入及实例对象生成,对象交互(引用方法); 获得核心类库支持; 线程运行; 处理异常; 作无用单元自动收集。
虚机执行过程如下
Java虚机的体系结构
虚机技术进展 第一代JVM直接解释执行字节代码文件 第二代JVM及时编译方案,它的执行效率大写提高,约为解释执行的6-10倍。 第三代虚拟机只编译运行时间长的热点,混用解释和编译后的机器码,效率最高。是当今发展前沿。
第一代JVM直接解释执行字节代码文件 JVM P.java javac P.class 类装入器和字节代码校验 无用单元收集器 线程,同步化设施 取一条指令 执行一条指令 解 释 器 本地 O.S 网络
JVM 第二代JVM及时编译方案 P.java javac P.class 类装入器和字节代码校验 无用单元收集器 线程同步化设施 JIT编译器 连接器与运行 本地 O.S 网络 p.obj p.class
第三代JVM采用近年发展出的动态编译技术。 P.java javac P.class JVM 类装入器和字节代码校验 本地 O.S 网络 native.code profile 全面优化器 JIT编译器 探测器 解释器 动 态 编 译 器
走出去 平台无关 放置标示 脚本解释
放置标示 标记语言/置标语言不是程序设计语言,是电子文档发展以后,以计算机或网上自动处理电子文档而设计的语言。它们一般解释执行,平台无关。 电子文档三类标准:信息的基本表达,信息结构描述,电子信息再现处理。
放置标示 置标语言就是定义标记及其使用规则的语言。它不属于程序设计语言,因为它不能按任意计算模型,设计算法进行计算,仅仅是描述文档,围绕文档的增、删、改、并的“计算”。 80年代早已有许多软件系统采用标记,为Telx,PostScript等。它们采用过程式置标,即告诉计算机为何一步一步地生成合乎预想的文档。 描述性置标不管过程,只按文档最后形式描述文档的结构。标记是“标题”、“第一段”、“第二节”、“空一行”……最后的显现各机可用不同的软件、不同的过程实现。描述只关注数据的内在相互关系。
放置标示 标记语言/置标语言: SGML:Standard Generalized Markup Language HTML:HyperText Mark-up Language XML:Extensible Markup Language
置标语言 表示性的置标语言 (Presentational markup)是在编码过程中,标记文档的结构信息。 过程性置标语言(Procedural markup) 一般都专门于文字的表达,但通常对于文本编辑者可见,并且能够被软件依其出现顺序依次解读。 描述性置标(Descriptive markup),所描述的是文件的内容或结构,而不是文件的显示外观或样式,制定SGML的基本思想就是把文档的内容与样式分开,XML、SGML都是典型的通用置标语言。
标准通用置标语言SGML SGML( Standard Generalized Markup Language)是ISO(国际标准化组织,International Standards Organization)在1986年推出的一个用来创建标识语言的语言标准。 SGML是一种用来定义标识的语言,它提供了一种将数据内容与显示分离开来的数据表示方法,使得数据独立于机器平台和处理程序。 SGML也被称作元语言(metalanguage),后来的许多标识语言都采用了SGML的标识方法,例如HTML、XML和XHTML。
SGML SGML把文档看作是对象集合,对象即元素。每个元素是标记括着的内容,内容又可嵌入元素,这就形成树形分层体系结构。也是文档的逻辑结构。SGML 不涉及内容的语义。 (1) SGML文档结构 SGML的文档结构由有类型的元素(实例对象)组成、元素是由命名的起始标记<tag_Name>和结束标记</tag_name>括着的正文单元。正文单元也叫内容。
例 SGML的文档实例 这是一个文档实例,就元素<anthology>而言,它给出了内容模型: <poem><title> The SICK ROSE </title> <stanza> <line> O Rose thon art sick. </line> <line> The invisible worm,</line> <line> That flies in the night </line> <line> In the howling storm:</line> </stanza> <line> Has found out thy bed </line> <line> Of crimson joy:<line> <line> Does thy life destroy <line> </poem> <!--more poems go here--> //SGML的注释 </anthology>
SGML (2) 定义SGML文档结构 在创建SGML文档实例时,首先要给出形式规格说明以指明该文档结构,即文档类型定义,简称DTD。DTD是对正文的解释。为了分析可以从不同角度定义DTD。 例子中出现的各元素其形式声明如: <!ELEMENT anthology - - (poemt>> <!ELEMENT poem - - (title? stanza+>> <!ELEMENT title - 0 (#PCDATA)> <!ELEMENT Line 0 0 (#PCDATA)>
SGML (3) 并发结构 同样一个文档结构,可从另一观点定义它,设按页的诗集 <p.anth>: <!DOCTYPE p.anth [ <!ELEMENT p.anth - - (page+) > <!ELEMENT page - - ((title?,line+)+)> <!ELEMENT (title | line ) – 0 (#PCDATA) > ]> 因为它最低层行题名和行都是一样的(#PCDATA),它们是并发定义的,可以写到一起: <(anthology) anthology> //A类型的A <(p.anth> p.anth> //B类型的B <(p.anth> page> //按B类型的DTD定义page元素
<!-- other titles and lines on this page here --> <(anthology)poem><title> The SICK ROSE <(anthology)stanza> <line> O Rose thou art sick. <line> The invisible worm. </(p.anth) page> //page结束 <(p.anth) page> //另起一页 <line> That flies in the night <line> In the howling storm: <(anthology) stanza> //按A类型的DTD 定义stanza元素 <line> Has found out thy hed <line> Of crimson joy: <line> And his dark crecret loe <line> Does tyh life destroy. </(anthology) poem> <!-- rest of material on this page here --> </(p.anth) page> //B类型的page结束 </(p.anth) p.anth> //B类型的B结束 </(anthology) anthology> //A类型的A结束 这样定义的电子文档,当处理器只识别其中一个类型(有其定义), 则自动跳过另一个类的标记。若二者都识别则由人指定其一。
SGML (4) 属性 SGML的每个元素都可以定义属性或属性表。属性并不影响元素的内容,只是为显示,处理提供方便。在文档实例中要给出属性值,如: <poem id = PI status =“draft”>…</poem> <poem>元素定义了两个属性一为标识id一为状态status,它们均在起始标记之中,只看有无‘属性名=属性值’。
SGML (5) 实体 为了跨文档间的可移植性,SGML提供了实体(Entity)概念。实体是置标文档的某一部分,可大可小,小到一字符串,大到整个正文文件。如有声明: <!ENTITY tei “Text Encoding Initiative”> <!ENTITY ChapTwo SYSTEM “sgmlmkup.txt”> 第一句声明了名为tei的实体,也叫内部实体,其值(即内容)是引号中的那段正文,故也称正文实体。第二个声明的实体是ChapTwo,指明它是SYSTEM实体,本文档以外的外部实体,其值是名为sgmlmkup.txt的正文文件的全部内容。
SGML (6) 标记节 标记节(Marked Section)是为了将一个主文档做成多个版一,即在一段正文中做出条件正文域标记,其形式是: <! [关键字[被标记正文段]]> (7) 文档样式 SGML只处理文档结构、内容,没有为文档样式(stgle)制定标准。
SGML SGML十分庞大,不同业务需求取其不同子集。关键的问题是‘定制’实现。至少,当前学习使用全集,既耗费资金又浪费精力。但作为学术研究是极有价值的。 但SGML复杂度太高,不适合网络的日常应用,加上开发成本高、不被主流浏览器所支持等原因,使得SGML在Web上的推广受到阻碍。HTML和XML都是SGML的子集。
HTML 1989年Tim Berners-Lee在欧洲核物理实验室(CERN)开发出了超文本置标语言。它从SGML出发作出了它的应用实例。让用户只在HTML类型定义下为用户文档置标。简单地说,它只是一组给定标记集合。没想到这种固定格式的标记,由于其简洁性大获成功。1994-1995年Web站点发展起来HTML成为开发页面最广泛使用的工具。
HTML 超文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言。 HTML是在 SGML定义下的一个描述性语言,或可说 HTML是 SGML的一个应用程式, HTML不是程式语言,它只是标示语言。 HTML被用来结构化信息——例如标题、段落和列表等等,也可用来在一定程度上描述文档的外观和语义。
HTML HTML是SGML应用程序,它的文档模型也是树状结构模型。标记的约定和置标方式和SGML一样,只是文档类型定义DTD已由系统定义为HTML·用户不必学习SGML复杂的语法,直接用标记定义实例文档。 标记分以下四类: ·文档结构定义 ·字体字型定义 ·版面布局定义 ·链接定义 它的最大特点是超文本和多媒体。
HTML HTML写的Web主页成了网上主要传递信息手段。 (1) 文档结构标记 <HTML>一个HTML文档<IHTML> <TITLE> 题名</TITLE> <!--注释--> <HI>下一级标题</HI> //可以嵌套6级,至N6 .... <P> .... //另起一段,无结束标记 <BR>..... //另起一行,无结束标记
HTML 分逻辑字符模式和物理字符模式。因为是逐词标记都是成对的。逻辑的 (2) 文档页面格式标记 <DFN> 定义的单词 //一般斜体 <EM> 强调的单词 //一般斜体 <CITE> 书或电影主题名 //一般斜体 <CODE> 程序代码段 //打印字体 <KBD> 键盘输入 <SAMP> 计算机状态信息 <STRONG> 特别强调词 //黑体 <VAR> 代替变量的实例 //斜体 物理的。<B> 黑体 <I> 斜体 <TI> 打印机字体
HTML 各种列表 标记列表及表项: (3) 版面布局标记 <UL> //无号列表 <OL> //有序号列表 各种列表 标记列表及表项: <UL> //无号列表 <OL> //有序号列表 <LI> //表项 <LI> //表项1 <LI> //表项 <LI> //表项2 </UL> //至此结束 </OL> //至此结束 <DL> //定义列表 <DT> //第一条目 <DD> //与<DT>交替出现,对<DT>的测试 <DT> //第二条目 <DD> //对<DT>的测试 </DL> //结束
XML 可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
XML XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。 它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
XML XML文档的三种形式 即第一种文档形式先形式化地定义文档的类型、元素、属性、实体的标记, 再以这些标记定义文档实例。 第二种形式是不作DTD的形式定义, 但遵照文档模型直接置标写出文档实例。文档的标记必须是良定义(well-formed)的。 第三种形式也不作完整的DTD形式定义, 但可以引用已有的DTD定义。称之为合法(valid)的XML文档。
指出XML文档是否独立 是非常重要的, 为此, 所有XML文档的第一行必须是处理指令。
例 一个出版商清单 <?xml version = "1.0" standalone = "yes"? > //处理指令 <!DOCTYPE document [ //文档类型定义 <!ELEMENT document ANY> <!ELEMENT title (#PCDATA)> <!ELEMENT publisher (name, email, homepage, address, voice, fax)+> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT homepage (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT fax (#PCDATA)> ]> <document> //以下文档实例 <title> publishers of the Music of New York women composers </title> <publisher> <name> ACA-American composers Alliance </name> <email> info @ composers.com </email> <homepage> http: //www.composers.com/</homepage> <address> 170 west 74th st.NY NY10023 </address> <voice> 212-362-8900 </voice> <fax> 212-874-8605 </fax> </publisher> <name> Alfred Publishing </name> <email></email> //*** <homepage / > //** <address>15535 Morrison South Oaks CA 91403 </address> <voice></voice> <fax/> </document>
第三种形式的XML文档也举一例子: 例 一个合法的XML文档 <?xml version="1.0"? > <! DOCTYPE advert SYSTEM "http://www.foo.org/ad.dtd"> <advert> <headline>...<plcl>...</headline> <text>...</text> </advert>
XML XSL可扩展样式语言 XML文档通过XSL可扩展样式语言描述的样式表(它本身也是XML的文档), 执行后产生一个HTML文档, 即XSL把XML文档翻译为HTML文档显现。
XML 特点 XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。 XML与HTML的设计区别是:XML是用来存储数据的,重在数据本身。而HTML是用来定义数据的,重在数据的显示模式。 XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言 XML去掉了一些繁杂的功能,保留了SGML的结构化功能,使得网站设计者可以定义自己的文档类型,XML同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。
XML优点 XML有两个先驱--SGML和HTML,它既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。 2. 内容与形式的分离。 3. 遵循严格的语法要求。XML不但要求标记配对、嵌套,而且还要求严格遵守DTD的规定。 4. 便于不同系统之间信息的传输。 5. 具有较好的保值性。XML的保值性来自它的先驱之一--SGML语言。
XML相关技术 单纯的XML是用来描述数据的,如果没有搭配适当的样式表,在Web浏览器中浏览XML文件时,只能看到XML文件的树形结构,这本身意义不大,所以需要借助一些相关技术。 1.CSS 2.DTD和XML Schema 3.XML DOM 4.XML XSLT 5.XLink、XPionter和XPath
XHTML XHTML 是 HTML 与 XML(扩展标记语言)的结合物。 XHTML 包含了所有与 XML 语法结合的 HTML 4.01 元素。 XHTML 是更严格更纯净的 HTML 代码。 XHTML 的目标是取代 HTML。
XHTML 下面的 HTML 代码仍然可以工作得很好,即使它没有遵守 HTML 规则
HTML5的起源 HTML5 是 W3C(World Wide Web Consortium) 与 WHATWG (Web Hypertext Application Technology Working Group)合作的结果。 WHATWG 致力于 web 表单和应用程序,而 W3C 专注于 XHTML 2.0。 在 2006 年,双方决定进行合作,来创建一个新版本的 HTML。
HTML5 HTML 5 的第一份正式草案已于2008年1月22日公布。 HTML 5有两大特点: 强化了 Web 网页的表现性能。
HTML5建立的规则 新特性应该基于 HTML、CSS、DOM 以及 JavaScript。 减少对外部插件的需求(比如 Flash) 更优秀的错误处理 更多取代脚本的标记 HTML5 应该独立于设备 开发进程应对公众透明
HTML5新特性 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 新的特殊内容元素,比如 article、footer、header、nav、section 新的表单控件,比如 calendar、date、time、email、url、search
HTML5改进特征 HTML5提供了一些新的元素和属性,例如<nav>(网站导航块)和<footer>。这种标签将有利于搜索引擎的索引整理,同时更好的帮助小屏幕装置和视障人士使用。 除此之外,还为其他浏览要素提供了新的功能,如<audio>和<video>标记。
HTML5改进特征 1.取消了一些过时的HTML4标记 2.将内容和展示分离 其中包括纯粹显示效果的标记,如<font>和<center>,它们已经被CSS取代。 2.将内容和展示分离 b 和 i 标签依然保留,但它们的意义已经和之前有所不同,这些标签的意义只是为了将一段文字标识出来,而不是为了为它们设置粗体或斜体式样。u,font,center,strike 这些标签则被完全去掉了。
HTML5改进特征 3.一些全新的表单输入对象 4.全新的,更合理的Tag 包括日期,URL,Email 地址,其它的对象则增加了对非拉丁字符的支持。HTML5 还引入了微数据,这一使用机器可以识别的标签标注内容的方法,使语义Web 的处理更为简单。总的来说,这些与结构有关的改进使内容创建者可以创建更干净,更容易管理的网页,这样的网页对搜索引擎,对读屏软件等更为友好。 4.全新的,更合理的Tag 多媒体对象将不再全部绑定在 object 或 embed Tag 中,而是视频有视频的Tag,音频有音频的 Tag。
HTML5改进特征 5.本地数据库 6.Canvas 对象 7.浏览器中的真正程序 这个功能将内嵌一个本地的SQL 数据库,以加速交互式搜索,缓存以及索引功能。同时,那些离线Web 程序也将因此获益匪浅。不需要插件的富动画。 6.Canvas 对象 将给浏览器带来直接在上面绘制矢量图的能力,这意味着用户可以脱离Flash 和Silverlight,直接在浏览器中显示图形或动画。 7.浏览器中的真正程序 将提供 API 实现浏览器内的编辑,拖放,以及各种图形用户界的能力。内容修饰Tag 将被剔除,而使用CSS。
audio 和 video 元素可以包含额外的标记,用来描述音频和 视频的内容。这对搜索引擎也有帮助。
使用HTML5开发的应用 在HTML5未成熟应用的时候,流媒体播放等一些精彩应用必须借助第三方软件才可以实现,比如Flash等。
处理图片 本网站使用了HTML5的Canvas元素来创建一个图层列表,通过从图片库选择图片添加后,会新建一个新的图层,每一层都可以通过操纵将图片进行:移动、缩放、旋转、改变图层上下级、删除层、改变透明度、改变混合模式、启用或禁用的图片阴影。 网址:radikalfx.com/files/collage/demo.html
地理定位 这个web应用程序会自动检测您所在的位置,然后使用谷歌地图返回附近的就业信息。 不过需要注意的是,它要求分享您浏览器所处的地址信息。网址:studio.html5rocks.com/#Geolocation
走出去 平台无关 放置标示 脚本解释
脚本解释 脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。 HTML通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。 2.脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些. 4.脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在. 脚本语言不需要编译,可以直接用,由解释器来负责解释。 5.脚本语言一般都是以文本形式存在,类似于一种命令. 举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件. 你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言.
脚本解释 脚本语言假设已经存在了一系列由其他语言写成的有用的组件.脚本语言不希望随机地产生请求,他希望主要是把组件接在一起.脚本语言常用于扩展组件特性,但他们很少用于复杂的算法和数据结构;这些东西常由组件提供.脚本语言有时涉及胶着语言或系统整体语言. –21世纪的高级程序语言。
脚本语言 脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。 原则 简单的方式快速完成某些复杂的事情
脚本语言特点 特点 良好的快速开发 高效率的执行 解释而非编译执行 和其它语言编写的程序组件之间通信功能很强大
脚本语言与高级编程语言 许多脚本语言都超越了计算机简单任务自动化的领域,成熟到可以编写精巧的程序。 几乎所有计算机系统的各个层次都有一种脚本语言。包括操作系统层,如计算机游戏,网络应用程序,字处理文档,网络软件等。 在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。
常用的脚本语言 C Shell JavaScript Nuva Perl PHP Python Ruby Tcl VBScript CSS
JavaScript HTML语言是静态的,动态性和交互性不强。于是,Netscape公司开发了JavaScript(与之对应是Microsoft公司的VBScript),扩充HTML文档的功能。 Javascript嵌入在HTML文本中,由浏览器解释执行。 JavaScript是为网络客户端用户编制处理Web页面上数据、增加交互性的小程序而设,减轻服务器端的负担,从而可减少网络传输,增加用户的方便性。这些工作Java小应用程序全可以做,但JavaScript做起来更简洁、利索。
JavaScript JavaScript的世界只限于HTML文档浏览器(JavaScript的解释器作为插件、集成到浏览器)在这个意义上它是平台无关的。它却与浏览器密切相关,因为运行支持由浏览器提供。 JavaScript是对象语言但不是面向对象的。它只能建立预定义(内置)类对象的实例对象不能设计(派生)新的类对象。故无继承概念。 JavaScript不能打开、读/写、保存本机和服务器上的文件。它只能处理页面上见到或引入的信息。因而它也是安全的,程序有毛病最多只能破坏本页,对系统无法损害。 JavaScript是全动态束定的
JavaScript JavaScript提供以下功能: — 访问Java小程序的方法 — 客户端表单验证(发送到服务器之前) — 与其它插件、小程序、脚本通信 — 客户端表单验证(发送到服务器之前) — 动态生成HTML文件 — 创建简单的交互程序
JavaScript JavaScript语言特征 1) 常量、变量、表达式、运算符 2)控制语句 JavaScript是为客户端用户使用,类似于Java但比Java简单 1) 常量、变量、表达式、运算符 与Java基本相同。变量需作声明: var foo = 23; //初值不必须 保留了C的条件表达式: is Real = (Imagination <= Reality) ? ture: false 2)控制语句 有条件语句(if …else),循环语句(for,while)及循环操作语句(continue,break),对象操作语句(for…in、new、this、with)和注释语句(11、1*…/)。也有花括号括住语句组的规定。
JavaScript 3) 函数 脚本语言大多以函数为其核心部分,函数的定义形式和其它语言无差别,先装入后使用 JavaScript的函数参数传递采用引用机制,返回值是任何有效类型。如果运行后不返回值(只有操作)则自动返回ture; 4 ) 事件 JavaScript是事件驱动,装载主页、卸载、击鼠标键、按下按钮、在某个域中输入都是事件。 事件由事件句柄确定,一组语句,一个函数均可为事件处理代码,一般按以下语法: <HTMLTAG event Headler = ”JavaScript Code”>
JavaScript 5) 数组 JavaScript有内置数组Forms(窗体)和Anchors(锚)不用声明即可操作其元素。它是document对象的属性,所以有: document.forms[0] //第一窗体,下标从0开始 document.forms[1] //第二窗体 6) 对象 JavaScript提供了卡在HTML文档上操作的一组预定 义对象(类),每个类对象都有其属性和方法(即 函数)。
JavaScript的类体系
例子 每秒钟显示一次当前的时间。 <HTML> <HEAD> <TITLE> JavaScript Clock </TITLE> <SCRIPT Language =”JavaScript”> <!-- Hide me from old Browsers-hopefully //Netscapes Clock-start //this code was taken Netscapes JavaScript document ation //at www.netscape,com on Jan ,25. 96 var timerID = null; var timerRunning = false; function stopclock( ){ if ( timerRunning ) clearTimeOut(timerID); timerRunning = false; } function startclock( ){ //Make sure the clock is stopped
以下是一个HTML文本中嵌入JavaScript的例子: <HEAD> <SCRIPT LANGUAGE="JavaScript"> function welcome(){ var s = “Hello world!”; document.write(s); //document是HTML文档对象 } //函数的定义 </SCRIPT> </HEAD> <BODY><SCRIPT> welcome() // 函数的调用 </SCRIPT></BODY> </HTML> 这个例子将在浏览器中显示“ Hello world!”字符串。 “document”是HTML文档对象,使用它的write方法可以在文档中写入文本。
一个统计HTML文档中超链接个数的程序: <HTML><BODY> <A HREF="http://www.yahoo.com"></A> <A HREF="http://home.netscape.com"></A> <A HREF="http://www.javasoft.com"></A> <SCRIPT language="JavaScript"> for(var i=0; i<document.links.length; i++){ document.write("link"+(i+1)+": "+document.links[i].href+"<br>"); } document.write("<p>There are "+document.links.length+" links."); </SCRIPT> </BODY></HTML> 其中,document是整个HTML页面对象;links是document对象中的超链接对象数组,length、href又是links的属性,分别表示链接的数目、链接的内容
该HTML在浏览器中的显示如下图所示:
JavaScript有以下特点: 与C、Java相似的语法,如常规的变量、表达式、函数和控制语句等。 弱类型。有数字、布尔、字符串和空值类型。变量的确切类型取决于所赋给它数据的类型。 基于对象。把浏览器和HTML文档中的元素看作对象,对象有各自的属性。例如,浏览器对象是已被预定义的Navigator;HTML页面是document对象。程序员可以使用的对象及其属性是已经被浏览器定义和生成的,不能定义新的类和对象。因此,是基于对象而不是面向对象的。 事件驱动。定义了一组系统、鼠标事件。可以通过事件激活定义好的函数。 在客户端使用的小语言
Java与JavaScript语言的区别 Java语言是一种高级程序设计语言,有完整而严格的定义,源代码需要经过编译。不但可以编写浏览器中运行的小程序(applet),而且可以编写大型的应用程序。Java语言也是一种面向对象语言,继承、封装和多态特性明显。程序员可以扩展已有的类库,生成自己需要的模块。 JavaScript是一种脚本语言,嵌入在HTML文本中,由浏览器解释执行。它基于对象,只能应用在浏览器中,而且只能使用浏览器中已有的对象、构件,实质上是对浏览器中各种构件(主要是图形元素)的简单操纵。 JavaScript是对静态HTML文本的扩充,使Web页面的交互性和动态性都大为增强。“JavaScript(客户端)+CGI(服务器端)”直到目前都是一种广泛使用的模式。但是,面对Web应用的复杂化,JavaScript已经显得力不从心了。
Perl语言 Larry Wall 希望设计一种语言,能够简单高效处理文本,既具有C语言的特征,又有awk,shell等脚本语言的特性。 There's More Than One Way To Do It.(不只一种方法来做这件事。)
Perl语言 解释性 不需要预先编译既可以对源代码程序解释执行(解释性语言的通用特点)
Perl弱类型 弱类型语言:数据类型可以被忽略,一个变量可以赋不同数据类型的值。 #!/usr/bin/perl $var = "12"; $var = "$var"."3"; if($var < 124){ print "yes"."\n"; } 结果 yes
Perl弱类型 类型由上下文确定 #!/usr/bin/perl @people=qw(fred barney betty); @sort = sort @people; #将people数组排序 $number = 42 + @people; #这里$number将等于45,在一个标量上下文中,@people表示people数组的元素个数。 print "@sort\n"; print $number."\n"; 结果 barney betty fred 45
面向对象 Perl 作为一种成熟的“面向过程”的语言,同样也提供了对于面向对象编程的支持。 支持动态的多重继承和虚函数方法 package Person; sub new { my ($name, $age) = @_; my $r_object = { “ name ” => $name, “ age ” => $age } return $r_object; my $personA = Person->new ( “ Tommy ” , 22 ); my $personB = Person->new ( “ Jerry ” , 30 ); print “ Person A ’ s name: ” . $personA->{name} . “ age: ” . $personA->{age} . ” .\n ” ; print “ Person B ’ s name: ” . $personB->{name} . “ age: ” . $personB->{age} . ” .\n ” ;
面向对象 bless 以一个普通的指向数据结构的引用为参数,它将会把那个数据结构(注意:此处不是引用本身)标记为属于某个特定的包,这样就赋予了这个匿名哈希表的引用以多态的能力。
继承和重载 Employee 继承了Person,并对构造函数new进行了重载
Python Guido van Rossum (google) There should be one-- and preferably only one --obvious way to do it.(对于一个特定的问题,只要有一种最好的方法来解决就好了)
Interpreted and (Byte-) Compiled 解释性和字节编译性 Python被分类为解释性语言,意思是指编译时间在开发过程中不再是个因素。 一版来讲,纯粹的解释性语言几乎总是比编译型语言慢,因为不是用系统本地二进制语言执行。但是,类似于JAVA,Python事实上是编译成字节码,非常近似于机器代码的中间形式。 这提高了Python的性能,同时又保持着解释性语言的所有优点。
Python类型系统 Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。 是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。 与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可。类型本身也是特殊类型type的对象(type类型本身也是type对象),这种特殊的设计允许对类型进行反射编程。 Python内置丰富的数据类型。 Python 支持五种基本数据类型:数字 (Numbers)、字符串 (String)、列表 (List)、元组 (Tuple) 和字典 (Dictionary)。与Java、C++相比,这些数据类型有效地减少代码的长度。
Python 强类型 强类型语言,强制数据类型定义,类型之间只能通过显示转换。 var = '12' var = '12' + '3' print 'str123: ' + var var2 = int(var) print 'num123: %d' % var2 if var2 < 124: print 'YES!' raw_input() 输出 Str123:123 Num123:123 yes
Python函数 Python函数 Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。 当函数有多个参数时,我们在调用函数时,参数的位置是可以变的,可以指定哪个参数赋什么值。 为了增强代码的可读性,可以在函数后书写“文档字符串”(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()打印出函数的使用帮助。
Python 支持内嵌函数 ,在外部函数的定义体内定义函数 , 整个函数体都在外部函数的作用域之内 .
方法的绑定与非绑定(Bound and Unbound) 当方法被引用时,并非直接返回其对应的函数,而是将这个函数,载入到了bound或者unbound方法上。 bound和unbound的区别在于:bound将特定的函数,与特定的实例相关联;而unbound则相反。
若没有同名属性,直接用函数名(函数名后不带括号),可以观察到其绑定状态。 假设有对象C和实例x: class C: a = 1 def g(self): print "method g in class C" x = C() print x.g #执行结果:<bound method C.g of <__main__.C instance at 0x00BA2F58>> print C.g #执行结果:<unbound method C.g> 上面的执行结果表明:x.g被绑定到了C.g()函数上,所以执行x.g()会有结果返回;而C.g没有被绑定,所以执行C.g()没有结果。
类 >>> class Class1: def __init__(self): print "initialize..." def test(self): print id(self) >>> a = Class1() initialize... >>> a.test() 13860176 >>> id(a) 13860176 Python 的 Class 1. 使用一个名为 __init__ 的方法来完成初始化。 2. 使用一个名为 __del__ 的方法来完成类似析购操作。 3. 所有的实例方法都拥有一个 self 参数来传递当前实例,类似于 this。 4. 可以使用 __class__ 来访问类型成员。
Python 支持多继承 >>> class Base1: def __init__(self): print "Base1" def test(self): print "Base1 test..." >>> class Base2: def __init__(self): print "Base2" def test(self): print "Base2 test..." >>> class Class1(Base2, Base1): def __init__(self): Base1.__init__(self)#这个是最基本的继承方法,可以用super,一句话即可。 Base2.__init__(self)#这个是最基本的继承的方法 print "Class1" >>> a = Class1() Base1 Base2 Class1 >>> a.test() Base2 test...
多态 由参数传递实现多态 class aa: def __init__(self): pass def get(self): d=5 return d class bb(aa): def __init__(self): aa.__init__(self) def get(self): d=3 return d class dd(aa): def __init__(self): aa.__init__(self) def get(self): d=4 return d def getNum(cc): print cc.get() first=aa() second=bb() third=dd() getNum(first) getNum(second) getNum(third) 运行结果 5 3 4
重载 Python 支持一些特殊方法和运算符重载。 >>> class Class1: def __init__(self): self.i = 0 def __str__(self): return "id=%i" % id(self) def __add__(self, other): return self.i + other.i >>> a = Class1() >>> a.i = 10 >>> str(a) 'id=13876120' >>> b = Class1() >>> b.i = 20 >>> a + b 30
Python存储机制 Python的世界中,一切都是对象,一个整数是一个对象,一个字符串也是一个对象。类型也是一个对象,整数类型是一个对象,字符串类型也是一个对象。 在Python中,对象就是在堆上申请的结构体,对象不能是被静态初始化的,并且也不能是在栈空间上生存的。唯一的例外就是类型对象(type object),Python中所有的类型对象都是被静态初始化的。 在Python中,一个对象一旦被创建,它在内存中的大小就是不变的了。
垃圾回收 Python通过对一个对象的引用计数的管理来维护对象在内存中的生存。 在Python中每一个东西都是一个对象,都有一个ob_refcnt变量,正是这个变量维护着该对象的引用计数,从而也最终决定着该对象的生生灭灭。 通过Py_INCREF(op)和Py_DECREF(op)两个宏来增加和减少一个对象的引用计数。 当一个对象的引用计数减少到0之后,Py_DECREF将调用该对象的析构函数(deallocator function)来释放该对象所占有的内存和系统资源。
请进来 CORBA和DCOM Web服务 语义理解
CORBA和COM/DCOM 在网络上提供对象服务通常要采用DCOM(Distributed COM)或CORBA。这两种技术各有特点,也各自有相当广泛的应用。
CORBA CORBA全称是公共对象请求代理体系结构(common object request broker architecture),它是由IBM、HP等多家公司联合开发的构件软件的体系结构和构件接口标准。1997年8月版的CORBA2.1的版权页上 已方21个公司、组织。而支持CORBA的对象管理集团OMG已达750多家公司。
CORBA OMA由对象模型(objet model)和参考模型(reference model)组成。对象模型主要定义了如何描述在异种(heterogeneous)环境中的分布式对象;参考模型则刻画了对象之间的交互
OMA参考模型
·静态调用:包括Stub and Skeleton。 ·动态调用:包括动态Skeleton和接口库(interface repository)。 ·对象适配器(object adapter)。 ·Inter—ORB协议。 CORBA 2.0主要包括以下几个部分: ·0RB核心(core)。 ·OMG接口定义语言IDL。 ·语言映射(language mapping)。 ·运行机制。
CORBA ORB能识别的协议是OMG的接口定义语言IDL。它可完整地确定部件的接口——即客户所需使用接口的全部信息。 IDL定义的接口经IDL编译器编译后能产生客户的桩(stub)及执行对象的骨架(skeleton)这类能与ORB通信的接口: (1)接口桩stub。在编译时确定的静态接口。它位于客户对象的本地,接受客户的请求,对客户来说相当于远程的执行对象。接口桩向ORB提交请求。 (2)动态调用接口(DII)。用于编译时不能确定的请求。与接口桩作用相同。 (3)骨架Skeleton。分动态骨架与静态骨架。它针对执行对象来说代表了远程客户的作用,可在本地调用执行对象服务,并与ORB通信。 (4)对象适配器。提供执行对象可以访问ORB服务的基本接口,其作用是产生及解释对象引用、安全交互、登记和执行等等。
CORBA CORBA对于流行的操作系统如Windows、Unix系列都有很好的支持。就是说,CORBA对象可以运行在任何一种CORBA软件开发商所支持的平台上,如Solaris、 Windows95/NT、Open VMS、Digital Unix、HP—UX或AIX等。换句话说,我们可以在 Windows95下运行Java应用程序,同时动态调入并使用C++对象,而实际上,该对象可 能存储于一个在Internet上的Unix Web服务器上。目前,对于较为流行的编程语言(包括(C++、SmalltaLk、Java和Ada95),已经有了许多第三方的ORB。
DCOM Microsoft的分布式COM(DCOM)扩展了组件对象模型技术(COM),使其能够支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯。使用DCOM,你的应用程序就可以在位置上达到分布性,从而满足你的客户和应用的需求。
DCOM Dcom是构件技术COM的扩展,所以可以将对基于COM的应用、组件、工具以及知识转移到标准化的分布式计算领域中来。
DCOM 在现在的操作系统中,各进程之间是相互屏蔽的。当一个客户进程需要和另一个进程中的组件通讯时,它不能直接调用该进 程,而需要遵循操作系统对进程间通讯所做的规定。COM使得这种通讯能够以一种完全透明的方式进行:它截取从客户进程来的调用并将其传送到另一进程中的组 件。 COM运行库向客户和组件提供了面向对象的服务,并且使用RPC和安全机制产生符合DCOM线路协议标准的标准网络包。
比较 从概念层次上讲,二者具有相近的结构,都可以让客户软件实例化分布在网络上远端的对象,并最终访问对象服务。但是,在具体实现机制上,这两种方案有许多不 同。比如在通信协议方面,DCOM采用的是RPC协议而CORBA采用的是IIOP协议。另外,对于客户端程序而言,访问提供服务对象的方法也是大相径 庭,前者通过客户端代理(proxy),经过RPC通道后访问服务端的存根(stub)后才可以最终访问到对象;而后者必须先通过客户端的存根,然后经过 IIOP访问服务端的骨架(skeleton)才能最终访问到对象。两种模式的对比如下。
Web服务 为了可以在整个因特网中实现对服务的自由访问,有必要提供一种崭新的模式或信息交换手段来达到这个目的。于是,微软提出了Web 服务。
Web服务 另外,更为关键的特性是,Web 服务可以被XML语言进行详尽的描述。这就是说,提供Web服务的站点可以提供一个(或多个)该站点可以对外提供服务的描述文件,这个文件的内容可以被访问者理解。更进一步说,就是客户端可以从网络上直接得到代码。
Web服务 也许举个例子能更清楚地说明问题。假设开发人员需要搭建一个商务网站,这个网站需要一个验证客户合法身份的功能。为了实现这个功能,下面分别描述了可以采用的办法。 ● 由开发人员自己编写安全验证所需的全部代码。这样做显然不现实,一个安全验证程序涉及到诸多专业知识,并需要相当长的时间才能够完成。 ● 购买这段程序(通常是一个ActiveX组件)。在收到组件之后,首先将组件注册在自己的机器上,然后根据组件类型库产生接口文件。在实际编程中就可以使用这个接口文件来访问组件服务。很明显,这种方式在目前使用得最为广泛。 ● 有了Web 服务,情况就不同了,只需要在自己的程序中通过访问某个服务的URL地址,得到一份XML描述,并使用这个描述文件产生一个接口文件。然后,在实际编程 中,只需要通过这个接口文件来访问服务就可以了。一定要注意,这个服务可不是运行在我们机器上的,是运行在因特网上URL地址所指向的地方。
Web Services (general view) The Service Grid Service registration UDDI Service discovery WSDL XML Messaging
请进来 Web服务 语义理解
语义理解 服务的描述和发布:WSDL,UDDI 服务组合:OWL-S
语义理解 随着通讯协议和消息格式在WEB中的标准化,以某种格式化的方法描述通讯变得越来越重要并且其实现的可能性也越来越大。WSDL通过定义一套XML的语法 来描述网络服务的方式满足了这种需求。WSDL把网络服务定义成一个能交换消息的通讯端点集(communication collection)。
语义理解 一个WSDL文档在定义网络服务的时候使用如下的元素: 类型–使用某种的类型系统(比如XSD)定义数据类型的容器 消息–通讯数据抽象的有类型的定义 操作– 服务支持的动作的抽象描述 端口类型–一个操作的抽象集合,该操作由一个或多个端点支持 绑定– 针对一个特定端口类型的具体的协议规范和数据格式规范 端口– 一个单一的端点,定义成一个绑定和一个网络地址的联接 服务– 相关的端点的集合
语义理解 这一点非常重要。为了描述消息的结构,需要具有丰富类型的系统,WSDL意识到了这种需求,因此它支持XML的schema规范[11]作为它的规范的类 型系统。但是仅使用一种类型语言来描述现在和将来的所有消息格式显然是不可能的,因此WSDL可以扩展使用其他的类型定义语言。
例子 通过HTTP实现的SOAP 1. 1 Request/Response <. xml version="1. 0" 例子 通过HTTP实现的SOAP 1.1 Request/Response <?xml version="1.0"?> <definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd1="http://example.com/stockquote.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace="http://example.com/stockquote.xsd" xmlns="http://www.w3.org/1999/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element> <element name="TradePriceResult"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema> </types>
<message name="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePriceResult"/> </message> <portType name="StockQuotePortType"> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> </operation> </portType> <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetLastTradePrice"> <soap:operation soapAction="http://example.com/GetLastTradePrice"/> <input> <soap:body use="literal" namespace="http://example.com/stockquote.xsd" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="literal" namespace="http://example.com/stockquote.xsd" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding>
语义理解 <service name="StockQuoteService"> <documentation>My first service</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location="http://example.com/stockquote"/> </port> </service> </definitions>
语义理解 描述之后发布:UDDI(Universal Description Discovery and Integration)
语义理解 服务组合:Web 服务组合可以以两种方式进行:静态方式和动态方式。 ①在静态组合中,被组合的服务在设计时由设计者选择。如果被组合的过程具有固定的特性,即如果在商业过程中,商业合伙人及其服务组件几乎不变动,那么静态组合就能满足这一需要。静态服务组合的两个最著名的平台是微软的Biztalk和Bea 的WebLogic。 ②在动态组合中,被组合的服务是在运行时选择的。
语义理解 Web 服务组合是当前的一个热门研究领域,学术界和业界的研究群体提出了很多服务组合语言。IBM的Web 服务流语言(web service flow language,WSFL)和微软的XLANG 是两个最早的语言,用于定义Web 服务组合的标准。它们都扩展了W3C 的Web 服务描述语言(web service describe language,WSDL)。WSFL 是一个基于XML 的语言,它描述了复杂的服务组合,既支持服务的静态配置,又支持在Web服务注册中心动态查找服务。微软的服务组合语言XLANG 对WSDL 进行行为标准的扩展,为服务组合提供了一个模型,但XLANG 只支持动态服务组合。
语义理解 Web服务商业过程执行语言(BPEL4WS)是后来提出的一个标准,它综合了WSFL 和XLANG。BPEL4WS 试图把WSFL的有向图过程表述和XLANG 的基于结构化构建的过程进行合并,构成Web 服务的一个统一标准。另一个服务组合语言是DARPA 代理标记语言(DAML-S)。DAML-S 为服务提供者提供了一个标记语言核心集,用于以无歧义,计算机可解释的方式来描述它们的服务属性和性能。Web 服务的DAML-S 标记方便了服务任务的自动化,包括Web 服务的自动查找、执行、互操作、组合和执行监测。
语义理解 服务描述和发现后的一个问题:如何正确理解这些信息以保证集成进来的服务正如我所期望? 比如前面介绍的例子:假设开发人员需要搭建一个商务网站,这个网站需要一个验证客户合法身份的功能。--计算机语义理解的问题。
语义理解 张三的个子比李四高,李四的个子比王五高-> 张三的个子是否比王五高? 张三是否比王五高? 张三是否比王五个子高? 张三是否比王五个高?
语义理解 本体技术:针对语义理解提出的方法。 OWL-S介绍:OWL Web Ontology Language for Services ,OWL (Web Ontology Language) 使用OWL-S Editor进行讲解
总结: 在描述性语言提供更加抽象的描述时,面对Internet环境下对“请进来,走出去”的要求,产生了一系列技术。 “走出去”目前比较成功和实用。 “请进来”还有待发展和完善。
The End