博文

XML技术系列讲座(13)XML与电子商务(2006-05-03 18:37:00)

摘要: 随着计算机技术的发展,企业的大部分业务都逐步由计算机实现自动化处理,而随着网络技术的不断发展,通过网络实现企业间的信息交换也逐渐成为企业进行电子商务的一种重要手段。但是计算机技术从诞生至今已经半个多世纪,各种类型的操作系统平台不胜枚举,运行其上的各种应用程序更是五花八门,要实现机器之间无歧义性的信息识别和处理,一直是困扰电子商务发展的难点。传统解决方案高成本低产出的模式已经不能适应新的全球经济发展趋势,因此企业急需有新的技术能够更快捷、有效地进行信息的集成和发布。 EDI的发展 EDI(Electronic Data Interchange,电子数据交换)是出现在20世纪70年代的一项信息技术,它试图通过计算机网络将不同的计算机系统联系起来,将传统的订购、交易、支付等贸易手段全部通过计算机网络实现,用户将订单、发票、提货单、许可证等贸易信息按照协议标准制作成统一格式的文件发送给对方,接收方按照统一语法格式解读文件,然后通过计算机实现自动化处理。应当说,EDI的大范围使用是可以降低数据处理费用和数据重复录入费用,从而提高经济效益的,但它的一些致命缺陷限制了它的普及应用。 首先是生产成本太高。传统的EDI需要购买或开发专用的数据格式转换软件,需要架设商业服务器控制数据流,还要购买VAN(Value Added Network,增值网络)来确保发送和接收的商业信息的安全和机密。除了少数大企业有能力外,大多数中小企业只能是望“网”兴叹。这也是EDI存在了近30年,但迄今也未规模化、普及化的根本原因。 其次,在实现EDI时,不同的企业会根据它在贸易中所扮演的角色不同,对标准有选择地进行删减,从而构成了独有的标准版本,不同版本之间的EDI消息却根本不能互相处理。   但Internet的蓬勃发展赋予了EDI新的生机。基于Internet的B2B(business-to-business)电子商务模式更是把传统EDI这种小范围的、局部的、昂贵的商务形式推广到一个开放的、公众化的、廉价的系统中,未来企业的生产销售和运营模式势必发生根本性的改变。 BizTalk概述   通过以往内容的学习,我们已......

阅读全文(3262) | 评论:0

XML技术系列讲座(12)验证XML数据合法性(下)(2006-05-03 18:36:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-12 07:15:00) 1、制定Schema 考虑如下XML文档books.xml: <?xml version=“1.0”?> <booklist> <book> <title>Straight Talk About Computers </title> <author>Lars Peterson</author> </book> <book> <title>You Can Comabt Computer Stress</title> <author>Lars Peterson</author> <author>Carlos Diaz</author> </book> </booklist> 为上述XML文档制定Schema时,可以先为<title>和<author>元素制定规则,用<ElementType>定义它们为只能包含字符串的文本元素: <ElementType name=“title” content=“textOnly” dt:type=“string” /> <ElementType name=“author” content=“textOnly” dt:type=“string” /> 然后说明<book>只能包含子元素,且子元素出现的顺序是一定的。随后在内部用<element>定义<book>包括一个<title>和任意个<author>子元素: <ElementType name=“book” content=“eltOnly” ord......

阅读全文(3579) | 评论:0

XML技术系列讲座(11)验证XLM数据合法性(上)(2006-05-03 18:36:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-12 06:15:00) 1、XML的合法性验证 应用XML技术的一个主要目标是为了方便信息交换。很显然,只有XML文档的格式或是结构得到交互各方的一致认可,这个目标才有可能实现。XML Schema(大纲)和DTD就是描述信息结构的模型,可以用来对XML文档内容的合法性进行验证。 Schema和DTD规定了在文档中能够使用的元素和属性,以及这些对象与文本内容的可能组合形式。作为对文档验证的标准,Schema和DTD不仅应该能被人们理解,对应用程序来说也应当是易于理解的。对文档合法性的验证包括两个方面:一方面是语法结构的验证,即元素类型、元素嵌套格式、属性类型、属性值数据类型、属性值是否可选等相关文档对象单元本身及其结构的合法性;另一方面是语义的验证,只有真正理解了XML文档的含义才能算是实现了信息交互,否则仅是结构上正确但意义模糊的信息,对于接收方来说一样是无用的,有时甚至会产生误解,起到相反的作用。 对XML文档的验证有如下几个步骤: 1.定义一份XML Schema或DTD: Schema或DTD为同一类型的所有文档定义了结构标准,比如有关书籍信息的文档可共享一份标准。 2.应用Schema或DTD:一般由文档的作者指定Schema,这样接收方可以很快地根据说明对文档进行验证。但在C/S(客户机/服务器)环境中,由于服务器无法判断XML在客户端是否已经验证过,所以为了能够确保验证过程,也为了避免可能的重复验证,对文档应用Schema或DTD的操作由服务器完成。 3.运行解析器进行验证:解析器在装载文档的同时扫描结构,遇到任何错误都会终止装载过程,并做出适当的响应。 2、Schema和DTD的区别 虽然,XML Schema和DTD都是用于文档验证,但二者还是有一定的区别,其中前者更为精确和灵活: ● XML Schema是一种内容“开放”的模型,可扩展、功能强,而DTD是内容“封闭”的模型,可扩展性差; ● XML Schema支持丰富的数据类型,完全能够满足网络应用特别是电子商务的需......

阅读全文(3294) | 评论:0

XML技术系列讲座(10)客户机与服务器的数据交互(下)(2006-05-03 18:35:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-11 07:15:00) 1、XMLHTTP对象的Send方法 用Open方法对Request对象进行初始化后,调用Send方法发送XML数据: poster.send XML-data Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。 XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示: 值 说明 0 Response对象已经创建,但XML文档上载过程尚未结束 1 XML文档已经装载完毕 2 XML文档已经装载完毕,正在处理中 3 部分XML文档已经解析 4 文档已经解析完毕,客户端可以接受返回消息 2、 服务器端的数据处理 服务器在接收到客户机发送过来的数据包后,会马上处理数据,并做出相应的响应。服务器先创建一个XMLDOM对象,然后将Request对象中的数据载入,并通过XMLDOM对象开始访问XML数据。 在获得XML数据的访问入口后,首先做的事情是对XML文档进行验证(这部分的具体过程我们将在后面介绍XML Schema的时候一并说明)。一旦通过验证,就可以利用DOM接口对XML数据进行分析处理(例如:将提取的信息用来更新数据库中的记录)。 一个简单的ASP脚本如下: <% Set docReceived = CreateObject(“Microsoft.XMLDOM”) docReceived.async = False docReceived.load Request Set rootNode = docReceived.documentEl......

阅读全文(3058) | 评论:0

XML技术系列讲座(9)客户机与服务器的数据交互(上)(2006-05-03 18:35:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-11 06:15:00) 1、C/S的通信模式 我们在前面文章中讨论客户机与服务器的数据交互时,数据流的方向总是从服务器到客户机,很少涉及到客户机向服务器发送请求并处理返回信息的问题。实际上,在电子商务中,客户机向服务器发送数据也是一个重要的环节,如用户填写的货物订单等。 在传统的实现方案中,用户端只要在订单中做出微小的变动,就要向服务器发送消息,要求更新数据。这样就增加了服务器和网络的负载,降低了工作效率。更有效的工作方式是在客户机端对变更的信息进行缓存,然后分批定量地发送给服务器,这样一些不确定的修改信息都首先存储在客户机,只有那些确定的需要更新的数据才会发送出去,从而避免了网络和服务器做许多无谓的操作。 2、基于XML的C/S 使用XML进行C/S间的通信是一种高效的工作方式。首先在客户机对XML数据打包,然后以XML数据包为单元发送给服务器,服务器在处理完数据之后返回消息,客户机接收到消息后执行其他操作,从而结束一次通信周期。 具体实现步骤如下: ● 客户机构造一个XMLDOM对象,作为发送XML数据的载体; ● 客户机创建一个XMLHTTP对象,该对象包括多种方法和属性,可以发送XML数据到服务器上的应用程序(如ASP页面),同时准备接收响应信息; ● 客户机将XML数据包转载到XMLHTTP对象上并发送给ASP页面; ● 服务器执行ASP,并创建一个服务器端XMLDOM对象来接收XML数据; ● ASP把数据包装载到服务器端的XMLDOM对象上; ● ASP对XML数据进行必要的处理,并返回确认消息; ● 客户机接收响应消息,执行下一步操作。 3、向服务器发送数据 客户机的首要任务是构造XML数据包。XMLDOM作为数据包的载体其数据来源可以是任何XML文档或是XML文档的片段(如XML数据岛),甚至可以是使用loadXML方法接收用户输入信息后动态生成的XML文档。 下面是动态生成的一个XML文档: ......

阅读全文(3456) | 评论:0

XML技术系列讲座(8)通过DOM操作数据(下)(2006-05-01 11:44:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-10 07:20:01) 1、DOM解析时的错误 DOM在解析XML文档的时候可能会产生各式各样的错误,可以根据ParseError对象中的属性得知出错的可能原因及相关信息。 常用的属性及其含义如下表所示: 属性 说明 errorCode 错误代码 filepos 错误在文档中的绝对字符位置 line 错误所在行的行号 linepos 错误所在行的字符位置 reason 错误产生原因 srcText 错误所在行的源代码 url 最近一份含有解析错误的XML文档的URL地址  2、访问DOM树中的元素与属性 DOM还提供了许多查找节点的方法。其中基于搜索机制的方法有: ● 根据标签名称搜索元素; ● 使用XSL模式搜索节点; ● 利用集合索引搜索节点。 以books.xml为例,Document对象中的getElementsByTagName方法就是根据参数中的标签名称在全文范围内查找元素的,返回值是一个NodeList对象: Set doc = dsoDetails.XMLDocument Set authors = doc.getElementsByTagName(“author”) 上述查询结果中包含了文档中出现的全部4位作者。如果调用的是Element对象中的getElementsByTagName方法,除了搜索范围缩小为该元素的所有后继节点之外,其他的情况都是一样的。 所有类型的节点都带有selectNodes方法,该方法的唯一参数是XSL的模式规则,返回值是匹配该规则的结果集合。调用这个方法可以利用XSL的模式匹配策略查找节点。例如: Set rootNode = doc.documentElement Set cheapbooks = rootNode.selectNodes(“//book[price < 10......

阅读全文(3252) | 评论:0

XML技术系列讲座(7)通过DOM操作数据(上)(2006-05-01 11:43:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-09 07:20:00) 1、DOM树 所有类型的XML解析器都要求处理对象是“格式良好”的XML文档,有些还能根据DTD或XML Schema进行有效性验证,DOM(Document Object Model)解析器将XML文档一次性解析,生成一个位于内存中的对象树用以描述该文档。 DOM是一种与平台和语言无关的接口,它允许程序和脚本动态访问和修改文档的内容、结构和类型。它定义了一系列的对象和方法对DOM树的节点进行各种随机操作: ● Document对象:作为树的最高节点,Document对象是对整个文档进行操作的入口。 ● Element和Attr对象:这些节点对象都是文档某一部分的映射,节点的定级层次恰好反映了文档的结构。 ● Text对象:作为Element和Attr对象的子节点,Text对象表达了元素或属性的文本内容。Text节点不再包含任何子节点。 ● 集合索引:DOM提供了几种集合索引方式,可以对节点按指定方式进行遍历。索引参数都是从0开始记数的。 DOM树中的所有节点都是从Node对象继承而来的。Node对象定义了一些最基本的属性和方法,利用这些方法可以实现对树的遍历,同时,根据属性还可以得知节点的名称、取值并判断其类型。 利用DOM,开发人员可以动态地创建XML、遍历文档、增加/删除/修改文档内容。DOM提供的API与编程语言无关,所以对一些DOM标准中没有明确定义的接口,不同解析器的实现方法也可能有所差别。为方便描述,本文的举例均采用MSXML DOM方案并用VB Script编写代码。 2、DOM树的结构 Document对象建立之后,就可以与XML文档或数据岛联系在一起。数据岛的加载方法是将数据岛ID赋给Document对象: <XML ID=“dsoDetails” src=“Books.xml”></XML> Set doc = dsoDetails.XMLDocument 加载文档大体上分为三步:......

阅读全文(3377) | 评论:0

XML技术系列讲座(6)XML与HTML的结合(下)(2006-05-01 11:42:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-08 07:15:00) 1、XML的嵌套处理 一般情况下,我们从数据库中查询得到的结果集可能很大,所以从服务器返回到客户端时,数据会被分成若干个页面分别进行传递。此时,利用TABLE元素中的DATAPAGESIZE属性可以指定每个页面包含记录集条目的个数。 例如: <TABLE DATASRC=“#xmldso” DATAPAGESIZE=10> 很显然,如果XML数据格式是对称的,则无论是映射到ADO记录集还是绑定到表格元素上,效果都会很好。而在实际应用中,XML数据为非对称的例子也很多,比如一本书的作者可能就不止一位,这在映射和绑定时都会产生一定的麻烦。解决问题的办法就是利用嵌套。每一行表格仍对应一条主元素,每一栏也对应着一个子元素。对于重复元素,则使用嵌套的表格。我们假设在books.xml中,第一本书的作者为Dean Straight,第二本书的作者为Charlotte Cooper、Shelley Burke和Regina Murphy。此时,绑定过程如下: ● 创建TABLE元素,并将数据岛ID赋值给DATAFLD属性; ● 对于单独的XML元素,如<isbn>,创建TD元素,并设定相应的DATAFLD属性; ● 对于重复元素,在TD元素内部嵌套一个表格; ● 用单行单列的形式显示作者信息。 注意这里的DATAFLD属性必须设定为“$TEXT”, 以保证嵌套元素的内容被全部显示在指定的元素中。 完整的HTML代码如下所示: <TABLE BORDER=1 DATASRC=“#xmldso”> <THEAD><TR><TH>Title</TH> <TH>ISBN</TH> <TH>Author</TH></TR></THEAD> <TBOD......

阅读全文(3295) | 评论:0

XML技术系列讲座(5)XML与HTML的结合(上)(2006-05-01 11:42:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-08 06:15:00) 1、XML的局限性 目前,许多Web网站的内容数据都存放在数据库或数据文件中。对于Web程序开发人员来说,如果要想把有用的信息从数据库中提取出来,传统的方法是在服务器端编写脚本程序(如VBScript、JavaScript、CGI、ASP、Perl等等),通过对数据库执行SQL查询得到相关记录,然后把查询结果组织成HTML页面返回给客户端,用户使用浏览器观察最终结果。 为了提高系统服务的灵活性、可扩展性,使服务对象范围更广,许多商业网站都尽可能地把商务规则、原始数据和表现形式当做相互独立的服务分别提供。HTML那种蕴数据于显示之中的方式显然不合乎这种需求。因此,把原始数据存放在XML文档中,使用样式单文件显示内容是XML技术适合于电子商务的优势所在。但从本质上来说,XSL技术不是面向数据显示的,它是一种格式转换技术,在显示手段和方式上都远不及HTML那样丰富。对编程人员来说,一种较为理想的方案是把HTML和XML两种技术相结合,优势互补,使真正的原始数据在能够保持本来意义和结构的同时,还能充分利用HTML那千变万化的显示技巧。XML数据岛就是这种技术融合的产物,它使用<XML>标签把XML数据直接嵌入到HTML页面中,从而实现了二者的优势互补。 2、IE中数据岛的处理方式 为了能够处理这种内嵌XML代码的HTML页面,Internet Explorer 4.0(以下简称IE 4.0)引入了DSO(Data Source Objects,数据源对象)技术,用Java Applet实现。 例如: <APPLET CODE=“com.ms.xml.dso.XMLDSO.class” ID=“xmldso” WIDTH=0 HEIGHT=0 MAYSCRIPT=TRUE> <PARAM NAME=“URL” VALUE=“myXML.xml”> </APPLET> 上述例子中,CODE属性指明了DSO Java小程序,MAYSCRIPT属性保......

阅读全文(3106) | 评论:0

XML技术系列讲座(4)XML的显示—XSL样式单(下)(2006-04-30 13:03:00)

摘要:本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-07 07:15:01) 一、XSL模板的使用 XSL在输出模板中描述输出格式,这些格式可以是各种字符串、标签符号、节点值或者是一些XSL语法结构,如条件判断、循环处理等。在许多应用场合中,输出模板中需要使用节点的取值,此时可以根据需要使用元素输出节点值,最直接的使用方式是,这样可以输出当前节点及其所有后继节点的取值。而如果仅仅是想输出指定节点的取值,可以利用select属性进行限定(select属性可以是任意合法的路径表达式): 上述第一个表达式匹配的对象是当前节点的所有子节点中名称为的元素,第二个表达式匹配的对象则是当前节点中所有后继节点中名为的元素。注意: 在XSL样式单中必须有一个模板规则与根元素相匹配。 在确定了模板规则与元素相匹配之后,就可以激活模板,这项任务由元素完成。它和元素相结合就如同编程中的函数调用:前者是调用指令,而后者就是函数体。对于不同的元素需要调用不同的模板进行处理。为了激活样式单中的模板规则,要在根元素模板规则中使用元素,这样就会层层作用使整个样式单文件生效: 直接使用元素表示不加区分地对当前节点的所有子节点应用模板,而在select属性中书写匹配式则能够限定作用对象: 上述第一个模板与XML文档的根元素相匹配,并对根节点以下的所有元素应用模板规则。然后,一旦遇到标签,就插入一个 标签作为空白段落,接着对元素和元素分别应用模板规则。最后,经过转换显示的结果是36磅字体的职员名字和用斜体字表示的职员薪水。 二、XSL的扩展规则 1. 路径指示符 除了前面介绍的“//”和“/”路径指示符,以及统配符“*”,还有几个符号可以用来对模板的匹配对象进行限制: ● 当前节点指示符为“.”; ......

阅读全文(3341) | 评论:0