将二进制数据嵌入XML文档的三种方法_第1页
将二进制数据嵌入XML文档的三种方法_第2页
将二进制数据嵌入XML文档的三种方法_第3页
将二进制数据嵌入XML文档的三种方法_第4页
将二进制数据嵌入XML文档的三种方法_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、将二进制数据嵌入XMLt档的三 种方法将二进制数据嵌入XMLi档的三种方法将二进制数据嵌入 XML文档的三种方法将XML用于B2B应用程序之间的数据传输Gowri Shankar vgowriaquila.co.in 软件工程师,AQUILA Technologies Pvt.LtdXML用于数据互操作性的主要优点是其可扩展性及其能够以文本格式表示所有形式的数据的能 力.甚至当处理二进制数据时,XML也证实了它的价值.本文集中讨论了在XML中表示二进制数据的三种方法.第一种方法以最适当的方式使用XML和DTD表示二进制文件或数据源.第二种方法使用一种简单格式,其中每个人都能定义自己的格式来表示

2、二进制数据.在第三种方 法中,所有二进制数据都包含在XML文件中.XML已经改变了完全不同的应用程序一 这些应用程序使用不同的技术、操作平台和位置一之间交换、共享和传输数据的方式.对于所有这些数据的运动,为到达可伸缩性,必须记住的 唯点是通过启用 HTTP的标记来包装数据.通过 HTTP发送数据的最正确途径是使用XML,有许多原因可以说明它比HTML好.最初,HTML被认为只能处理文本, 但是现在它还普遍用于引用和标记非文本数据.所以XML步HTML后尘是十分自然的.由于XML不必遵循特定的语法象 HTML那样并且比 HTML更具可扩展性,所以人们可以以他们想要标记各类数据的任意方式来使用它.

3、尽管如此,HTTP通常仍作为传输层使用;因此 XML在处理二进制数据时必定受到许多约束.当二进制数据是用户或 客户机应用程序请求的全部信息的一局部时,XML只用于标记该二进制数据.而且,在 XML中包含二进制数据的优点是便于在HTTP上传送数据.演示应用程序: GODOWN: AGENT在应用程序之间有时候会传输非文本数据.例如,设想有两个B2B应用程序:GODOWN: AGENTGODOWN护公共库中的所有存货;AGENT是销售界面.当用户在 AGENT上选中一个产品名时,就向GODOWNS出有关该产品详细信息的请求.以下是操作技巧局部.例如,如果该产品是一 块手表,那么应用程序可能显示诸如

4、价格、制造商地址和手表图片等详细信息.如果该产品是 一盒迈克杰克逊 CD,那么详细信息可能包括用户可以播放的样品媒体文件.本文将关注于通过 XML进行数据二进制数据定义和描述,以及如何访问这个二进制数据.正如您会发现的那样,在开发时不能决定数据的本质,并且可能需要经HTTP传送该数据来提供通用访问.XML是描述和定义数据的一种非常便利的框架,所以我们使用它来定义库存中的 产品 一 库存由GODOWNS用程序来维护.让我们看一下这两个应用程序之间进行数据传输过程中的不同阶段.以下是一个数据请求进程 的生命周期:从 AGENT 向 GODOWN出带 ProductId 的 HTTP 请求.GODO

5、WN取标识并为所需的产品编制XML文档.然后用AGENT应用程序理解的方式格式化这个XML文档,并以字节流的形式将它发送回AGENT有两种方法可以完成这个操作:从GODOWN等XML文档传送到 AGENT,这样生成的文件格式为agentproductl.xml 请参阅下面显示的代码.解密XML数据并将二进制数据编码为字符串格式,然后将之转储到CDATA节中并发送到AGENT这使AGENT的作业稍微简单些.生成的文件格式将是agentproduct2.xml请参阅下面显示的代码.AGENT接收来自GODOWN勺字节流并对其进行相应处理.三种方法现在,我们需要将一个应用程序的二进制数据传送到另一个

6、应用程序中.让我们看一下用XML文件表示二进制数据或将二进制数据嵌入到XML文件中的三种方法,这里简要地列出了这三种方法,下面还有更详细信息:第一种:通过外部实体和标记法的方式来表示二进制数据第二种:使用 MIME数据类型来表示二进制数据第三种:将二进制数据嵌入CDATA节中虽然这三种方法都可以用来表示二进制数据,但不是每种方法都可以适用于任意给定的情况中,而且一种方法未必能很好地替代另一种方法.换句话说,可以同时应用这些方法使之相互协作 相互补充.为了详细阐述这一点,让我们考虑例如应用程序.如果您必须维护库中所有产品的 详细信息,以便能对任何产品的请求提供效劳,那么最正确方法是使用方法 1以

7、单一大型XML文件的形式来表示数据.甚至方法2也适用于这一目的,但是在数据的可扩展性上有某些限制实体重用等.当必须传送数据时,如果数据大小相比照拟小,那么我们应该应用方法3 o另一种选择是首先高速缓存实体名称和systemid ,然后将详细信息发送到另一个应用程序或方法来处理下载/显示数据.在确定哪种方法最适合给定的情况时,尽管没有指导原那么或标 准,您还是可以识别哪种方法最适合于您的情况.现在应该更详尽地查看这些方法了.第一种方法一通过外部实体和标记法的方式来表示二进制数据一用来描述数据.正如我们已经看到的,在使用Request和Response 范例的数据访问中本质上有三个阶段.它们是:描

8、述数据并将之存储在一个公共区域以供访问 将请求的数据提供应客户机响应.在客户机应用程序中表示已提供的数据经过一些修改/变换.这里,以标记法称为外部实体的形式描述二进制数据,通过使用DTD来保持数据的持久性. 我们应使用第一种方法来进行二进制数据的描述和存储.甚至第二种方法也适用于相同的目的这两种方法的区别在于是否使用DTD的应用程序.如果不能确定是否需要DTD,那么有一个简化的和范围缩小的选项:当产生请求这样一个二进制数据时,可以通过使用HTTP将它发送到客户机;然后,客户机应用程序完成一些转换并向用户表示.如果客户机是启用HTTP的,象一些浏览器,那么可以将这个XML数据转换为HTML并显示

9、.但是如果最终用户环境不启用HTTP,那么我们必须分别下载所有引用的二进制数据源.在这样的情况中,我们必须使用方法 3 c当出现请求二进制数据时,读取二进制数据源并打包到XML文档中作为以base64编码的字符.将之发送到客户机.这个阶段的缺点是数据传送需要更多等待时间,读取和编码需要更多 处理时间.当客户机应用程序读取这个XML文件时,它对base64字符进行解码,将二进制数据写入本地文件系统的一个文件中,并使用那个引用来向最终用户表示这一数据.方法3非常适合于二进制数据源不是一张图片或能显示的东西的特定情况;它可以是一个数字签名或一个 可执行文件.通过外部实体和标记法的方式来表示二进制数据

10、这是在XML文档中表示二进制数据最好的方法.虽然许多人会争论DTD使它变得混乱,但是我仍将建议这是非常有效的方法,由于数据在XML文档中模块化,并且从 DTD中抽取二进制数据源、文件名等的详细信息.要以这种方法完成操作,您需要了解XML和DTDo查看下面的样本XML和清单2中的DTD.清单1. 样本XML产品文件:product.xml watchHMT ShakthiSG CS 07 ARs.5002 days XML文件应遵循 DTD并且通常包含许多产品标记,每个标记包含一个产品和它的详细信息.当 AGENT应用程序向 GODOWNZ用程序发送一个或多个标识时,GODOWNZ用程序对 XM

11、L文件进行语法分析并获取与产品相关的所有详细信息,然后将它们发送回效劳器.在向效劳器发送详细信息前,它应根据 AGENT要求的格式重新编制数据.清单 3中显示了一个这样的输出格式. 转换成这个格式的 Java 程序是agentl.java ,在binaryxml.zip 请参阅参考资料中提供 了该程序.这个格式不涉及处理二进制数据;它只描述和提供二进制数据.AGENT应用程序通过使用URL能直接引用二进制数据,或者它能从URL下载文件来保存本地副本.如果它必须在浏览器中显示信息,那么它能直接引用信息,由于它有链接.在这种方法中,我们获得格式良好的XML.查看文件agent1.java请参阅参考

12、资料来了解它如何对 XML文件和DTD进行语法分析,以便搜集有关外部实体引用的信息.使用MIME数据类型来表示二进制数据这种方法使用MIME数据类型来描述二进制数据/数据源时有两种方法:使用可扩展邮件传送协议XMTP或者类似的 MIME编码效劳器/应用程序将不同的MIME类型映射成XML文件中的二进制数据类型 让我们看一下这两种方法的优缺点.在第一种方法中一使用XMTP,将软件的可使用性限制于启用XMTP的应用程序,或者在不使用启用XMTP的软件时,必须用另一个XML解码器来打包这个层.这意味着我们还必须实现第二种方法,而且我们还要有可用于同一目的的一些XMTP API因此这没有使我们有更好的

13、适应性.另外,我们所关注的是用XML而不是用XMTP来表示二进制数据,所以我们将集中讨论第二种方法 一 映射不同的 MIME类型及其资源.对 MIME和XMTP更感兴趣的人,请参阅参 考资料,从获得实现信息.映射MIME类型和二进制数据当我们必须映射 MIME类型和二进制数据时,我们又有两个选择.第一个是用DTD中的二进制资源来系统地表示MIME类型.由于在本文的前面局部我们已经看到了类似表示,所以让我们来看一些不同的表示.DTD只用于定义文档格式,并且将在XML文件本身中定义 MIME类型.虽然总可以使用 DTD来验证,但是这种方法的最正确用途是减少对DTD的依赖

14、并使之成为自我描述的XML格式.由于它是自我描述的,所以它是可进化的方法.通过使用XML文件中的MIME类型,让我们来查看用于定义product.xml的变体版本的方法.清单 4. product.xml 版本 2 : product-mime.xmlproduct id=1HMT ShakthiSG CS 07 ARs.5002 days sgcs07a3.jpg除了显示标记不同外,这个 XML文件遵循与原始 product.xml 文件相同的结构.它描述了二 进制数据文件的元数据.所以,当 AGENT应用程序发送标识时,mimeagent.java 在binaryxml.zip 中对标识的

15、 product-mime.xml进行语法分析并将输出的XML文件生成为agentproduct2.xml请参阅下面的代码. agentproduct1.xml 和 agentproduct2.xml 之间的唯一区别是后者在CDATA节中包含文件内容,而不是文件名称.我们正在将二进制内容嵌入XML文件本身而不是在 XML文件中描述它的来源.下面显示了 agentproduct2.xml的一个样本格式.清单 5.输出格式 2 : agentproduct2.xmlwatchHMT ShakthiSG CS 07 ARs.5002 days 在用方法1和方法2解释XML数据的客户机应用程序之间有一

16、个显著的区别.在方法1中,客户机应用程序只须转换可用的 XML数据并以HTML或一些其它格式显示.通过使用XSL、CSS等可以很好地实现.然而,在方法 2中,客户机应用程序必须解释CDATA节并将打包的二进制数据解码为原始格式,然后必须将它存储到本地文件系统中.存储在本地的二进制数据源用 于进一步引用.表示之前需要一个处理阶段.使用这个方法之前必须注意这一点.我们已经揭示了将二进制数据流发送回AGENT应用程序的第二个方法.第三种将使AGENT应用程序能够处理 XML数据并生成用户可以查看/访问的数据的目标版本.这就完成了我们 B2B应用程序的第3阶段.将二进制数据嵌入 CDATA节中上面的方

17、法用 XML处理数据的表示,但是这种方法完全用XML来包装数据.它主要应用在当将数据以XML格式发送回客户机应用程序时.当客户机接收到这种格式的数据时,或者如果客 户机高速缓存这种格式的 XML数据/文件,客户机应用程序非常容易向用户提供XML数据在最后一种方法中,我们看到输出的XML文件包含了 CDATA节来包装二进制数据.当客户机应用程序接收到这种数据时,它能以多种方法处理数据,例如:将整个数据保存为一个文件.将数据转换为 HTML、WML等然后显示它.让我们尝试将数据转换为HTML文件.这涉及两个阶段.第一阶段,我们必须将二进制数据保存到各自的文件中,然后创立一个带引用那些二进制文件的新

18、HTML文件.如果二进制文件是一张图像,那么我们将在 HTML中使用img标记来引用二进制文件;否那么,我们必须使用适当的标记,例如用于shockwave 文件的embed.与此相关的信息存储到显示标记的MIME属性中每个XML元素XML中都可以将XML转换为HTML遵循将XML标记映射到HTML代码段这样一个简单映射.映射为某个产品如手表或音乐CD的HTML表中的一行.所以,每个产品在表示为一个有五六个元素的节点,而同一产品在HTML中表示为一个含有四行的表.标记表示为头,内容还是表示为内容.还有其它的XML-至1HTML的转换技术,象 CSS或XSL.在这个特殊实例中,我们正在处理 CDA

19、TA节,其中存储了二进制数据并且需要将该数据持久保存为客户机系统中的一个文件.最 简单的选项是使用从 XML到HTML的简单的、定制映射,但是我鼓励那些感兴趣的人尝试基于 XSL的转换.您可以参考 binaryxml.zip 中的HTML文件,其中您将看到那个HTML文件的图片.这只是几种可能的方法中的一种;它能被转换为WML或一些其它格式,这样客户机能访问尽可能多的变体版本的XML信息.图1.样本输出Product DetailstMT ShakttudebveivtimeSGCS07ARs 50Gcategorydescnpt4*?ii pncfr我们已经完成了 B2B应用程序中的第 4阶段,在这一阶段中 AGENT应用程序将XML转换为 HTML文件.本文研究了将二进制数据嵌入到 XML中的三种方法并探究了将 XML转换为其它方 式的持久性数据的方法.执行样本程序执行样本Java程序以产生如上所示的各个输出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论