Monday, September 22, 2008

XML, 把文档数据化的魔棒

我给大家介绍一个应用XML的实践例子,供大家参考和讨论.
XML作为计算机处理文本文档(通常是指供人阅读的文本)的有力工具,它的"神奇"在于能够使计算机"读懂"文本文档.就拿以下一则我在地铁新快线杂志看到的一条信息为例:
--------------------------------------------------------------------------------
自 驾车到南沙客运港路线一:广州大道?洛溪桥?迎宾路--南沙港--沙湾大桥?南沙大道路线二:天河?华南快速干线?迎宾路?沙湾大桥?南沙大道?南沙港停 车:设有1000和500平方米两个停车场,费用预计5?10元/次,有夜保。航线/航班:除每天与香港对开12个白天航班外,还将加设2个夜间航班。同 时考虑开通南沙至澳门、香港新机场、香港迪斯尼乐园等航线。耗时(单程):约两小时。费用(单程):约120元。优点:耗时少、费用低,上船后有港币兑换 处,可直达中港城购物中心。中心内设中、西餐厅,服装、手表、通讯器材、化妆品、摄影器材、金饰,国际知名品牌一应俱全。缺点:公交配套未完善,必须自驾 车
-------------------------------------------------------------------------------
很明显,这是一则简单的旅游指引,游客可以很容易获得相关的信息数据, 包括线路一,线路二,停车,行程时间和优缺点.因为我们具有阅读的能力.
但是,计算机面对这样的文本却很笨.例如我想让机器找出线路一有几个站点和站点中是否有南沙港,你认为它能为你做吗?很明显,计算机一筹莫展,它除了告诉你文件大小,创建日期和属性外,没有更多的其他数据信息.而这就连我小学毕业的姑妈也能轻易回答.
原因很简单,
计算机需要你首先告诉它如何处理这份文本,才可以回答你的要求.(虽然我们都承认计算机发展惊人,但它处理数据的能力还是很幼稚)
现在,我使用标记,也就是XML,来帮助它"读懂"这份文本.改变如下:
----------------------------------------------------------------------------
<旅游指引><标题>自驾车到南沙客运港<路线>路线一:<站点>广州大道?<站点>洛溪桥?<站点>迎宾路--<站点>南沙港--<站点>沙湾大桥?<站点>南沙大道<路线>路线二:<站点>天河?<站点>华南快速干线?<站点>迎宾路?<站点>沙湾大桥?<站点>南沙大道?<站点>南沙港< 备注>停车:设有1000和500平方米两个停车场,费用预计5?10元/次,有夜保。航线/航班:除每天与香港对开12个白天航班外,还将加设2 个夜间航班。同时考虑开通南沙至澳门、香港新机场、香港迪斯尼乐园等航线。耗时(单程):约两小时。费用(单程):约120元。优点:耗时少、费用低,上 船后有港币兑换处,可直达中港城购物中心。中心内设中、西餐厅,服装、手表、通讯器材、化妆品、摄影器材、金饰,国际知名品牌一应俱全。缺点:公交配套未 完善,必须自驾车
--------------------------------------------------------------------------------

以上的修改并没有改变文档的结构和内容,只是增加了标记。之后,你再把它存成XML文档,就完成文档加工.你可以使用XML搜索引擎,来处理你的要求啦.我使用一个自己编写的XML工具来处理这些信息,使用XPath查询如下:

[XDS cmd]>search -c /tmp -d test01 -xl /旅游指引/路线 -xp //路线[text()="路线一:"]/站点<站点>广州大道<站点>洛溪桥<站点>迎宾路<站点>南沙港<站点>沙湾大桥<站点>南沙大道
^----找到了线路一有几个站点
[XDS cmd]>search -c /tmp -d test01 -xl /旅游指引/路线 -xp //路线[text()="路线一:"]/站点[text()="南沙港"]<站点>南沙港
^----找到了南沙港当然这只是一个简单的例子,使大家可以在实际商业应用上使用XML作更有意义的事。

我有理由相信XML是一根未知的魔棒。也希望我们能从实际应用出发来激发自己的创造力。为商业发展服务。

No comments: