新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Oracle, SQL Server与XML,XML在数据挖掘中的应用, PMML.
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 XML 与 数据库 』 → 非 XML 数据的 XML 化 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 31256 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 非 XML 数据的 XML 化 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     anchen0617 帅哥哟,离线,有人找我吗?双子座1983-6-17
      
      
      威望:5
      等级:大二(研究C++)
      文章:281
      积分:3413
      门派:XML.ORG.CN
      注册:2004/10/17

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给anchen0617发送一个短消息 把anchen0617加入好友 查看anchen0617的个人资料 搜索anchen0617在『 XML 与 数据库 』的所有贴子 访问anchen0617的主页 引用回复这个贴子 回复这个贴子 查看anchen0617的博客楼主
    发贴心情 非 XML 数据的 XML 化

    随着 XML 在 IT 业界的份量越来越重,出现了很多有助于处理 XML 数据的强大工具和技术。这些非常有用的 XML 技术(比如 XSLT)甚至能用于处理非 XML 数据。但一般而言,这类工具不能直接用于非 XML 数据。本文介绍的方法是首先 XML 化 非 XML 数据(即把非 XML 数据转化成 XML 格式),然后利用 XML 技术作进一步的处理。

    本文介绍的方法来自作者开发转换工具 Prop2XLF 的实践经验,这个例子贯穿于全文之中。本文首先将介绍 Prop2XLF 的一些背景,然后详细说明工具设计的 XML 化解决方案。最后将这一方案推广为一般化的模式。

    问题
    首先介绍开发 Prop2XLF 的背景和开发过程中遇到的问题。

    Prop2XLF 的开发背景
    Prop2XLF 是为 Global Travel On Demand 项目开发的一款工具。从项目名可以看出,这是一种多语言解决方案(支持 12 种语言)。我们使用 Java 属性文件作为可部署的翻译资料格式。但是如本文将要说明的那样,Java 属性文件翻译起来不太方便。于是我设计并实现了 Prop2XLF,实现 Java 属性文件和 XLIFF 的相互转换。(尽管我是这个项目的解决方案架构师,但是我确实很喜欢编程。)这项设计工作是从 2003 年开始的,后来交给我们的工具团队来维护,并且到目前为止,一直由他们维护,没有改变过。

    Prop2XLF
    Prop2XLF 是将 Java 属性文件转化成 XLIFF 文件的工具。Java 属性文件是一个简单的文本文件,主要由键/值对组成,用于 Java 资源绑定。但是,将这些文件直接翻译成不同的自然语言不太容易。XLIFF 是本地化行业使用的一种 XML 格式(Java 属性和 XLIFF 的示例代码如 图 3 所示)。将 Java 属性文件转化成 XLIFF 格式,而不是直接翻译 Java 属性文件,有利于改善翻译过程。为此我开发了 Prop2XLF 这个工具。

    直接的解决方法
    Prop2XLF 完成这种转换最直接的方法就是开发一个应用程序,载入并解析源文件(Java 属性文件),然后按照某种特定的映射规则转化成目标格式(XLIFF)。图 1 说明了这种方法的结构。

    图 1. 直接转换


    虽然这种解决方案简单明了,但开发人员常常调整解析器和转换逻辑,从而产生出不够灵活的体系结构。因为这些方面不容易剥离出来,所以这种解决方案很难开发和维护。补偿调整(tweaking)也是重用的一道障碍,其中包括解析结果的重用和现有转换技术(如 XSLT)的重用。

    XML 化解决方案
    另外一种办法是采用简介的解决方案:XML 化。这种方法首先将 Java 属性文件转化成对应的 XML,然后使用 XSLT 从 XML 转换成 XLIFF。这里说的“XML 化”仅仅指的是将 Java 属性转化成 XML 格式的过程,而保留原文件中的所有语义信息。从生成的 XML 对等物的客户的观点来看,转换后的文件与源文件的主要区别是格式:XML 和非 XML。而且,XML 对等物所用的 XML 模式词汇表也应该与源领域中所用的相同。比如,在 Prop2XLF 的 XML 化过程中,生成的 XML 中的 <value> 和 Java 属性文件中定义的 "value" 对应。但是,XLIFF 标签对于这个过程是不可知的,因此 XLIFF 中定义的 <source> 没有出现在 XML 化过程的词汇表中。图 2 说明了这种方案的结构。

    图 2. 利用 XSLT 转化


    可以看出,转换逻辑在一个特定的 XSL 文件中得以具体化,而不是像图 1 那样,与其他应用程序逻辑纠缠不清。因为 XSLT 就是用于转换的技术,所以它可以降低开发转化程序的工作量并提供更好的质量。XML 化解决方案不仅能让用户从成熟的技术中获益,还能提高灵活性。此外,因为 XML 化过程尽量保持与源文件的语义相似,所以如果需要,生成的 XML 对等物可用于多种目的,并不仅限于 XSLT。清单 1 说明了 Prop2XLF 的 XML 化过程。完整的代码很长,这里只列出了其中的关键部分。

    清单 1. Prop2XLF 中的 XML 化伪代码

    //Used by Prop2XLF
    public class Prop2XML {
      ...
      private static final String DTD_KEY = "key";
      private static final String DTD_VALUE="value";
      ...

      //Convert Java properties to its XML counterpart
      void XMLize(){
          //initialize
          ...

          //parse each line of the source
          while (nextLine is not null) {
             //to parse nextLine
             ...

             if (nextLine is a key/value pair){
                stringKey = nextLine.substring(keyStart, keyEnd);
                stringValue = nextLine.substring(valueStart, valueEnd);

                addKeyValue(stringKey,stringValue);
                ...
             }//end of if
             ...
          }//end of while
        ...
      }//end of XMLize

      //insert the key/value node into the target DOM tree.
      boolean addKeyValue(String key, String value)  throws DOMException{
        ...
        Element elem = getDocument().createElement(DTD_VALUE));
        elem.setAttribute(DTD_KEY,key);
        Text text = getDocument().createTextNode(value); 
        elem.appendChild(text);
          ...
      }//end of addKeyValue
    }//end of class

    XML 化的主要任务是解析源文件,根据源文件定义构造 DOM 树。在 Prop2XML 中。初始 DOM 树从预先定义的 XML 框架构造开始逐个节点地构造初始树,而不是从头开始。这是一种技巧,如果需要,您还可以在预定义的框架中定义元信息。

    图 3 显示了 Prop2XLF 处理的一些示例数据,其中包括输入源文件、中间结果和最后的输出。XML 对等物是通过 XML 化过程生成的。实际的转换需求通过特定的 XSL 由 XSLT 实现。这一部分很好地从体系结构中分离出来。XLIFF 代码由 XSLT 生成。

    图 3. Prop2XLF 的示例数据:源文件、中间结果和目标文件


    与上面提到的直接解决方案不同,这种 XML 化解决方案的开发经验表明,间接的方法(首先将 Java 属性转化成对应的 XML)可以改善应用程序的质量,特别是在灵活性和健壮性方面。由于重用和问题的分解,这种方法的工作量也少了一些。

    将 XML 的强大功能用于非 XML 数据的模式
    除了上述的 XSLT 之外,为了利用其他 XML 技术,还可以将 图 2 所示的结构推广为一种模式,对非 XML 数据利用 XML 的强大功能,如图 4 所示。

    图 4. 对非 XML 数据利用强大 XML 功能的模式


    这类解决方案的关键特征是有明显的 XML 化过程,这个过程产生源数据的 XML 对等物,同时保持语义的相似性。接下来,我们将从模式的角度,分别描述 XML 化过程的几个要素:上下文、解决方案和结论。

    上下文
    XML 化过程将 XML 的强大功能用于非 XML 数据。如果存在和要开发的非 XML 数据处理逻辑类似的 XML 工具或技术,可以利用 XML 化建立非 XML 数据到 XML 领域的桥梁。

    在 Prop2XLF 这个例子中,将 Java 属性文件转化为 XLIFF 的逻辑和其他的 XSLT 应用非常类似。因此,将 Java 属性文件预处理成等价的 XML 文件是合理的,因为后续的 XSLT 处理大大减轻了开发的工作量。此外,XML 化还将 Prop2XLF 转变成纯粹 的 XSLT 体系结构(也就是说不掺杂其他转换方法),从而降低了技术上的复杂性。事实上,Prop2XLF 还把翻译后的 XLIFF 转化成 Java 属性文件。这种转换也是使用 XSLT 实现的,如图 5 所示。

    图 5. 完整的 Prop2XLF XML 化过程


    解决方案
    这种解决方案引入一个额外的 XML 化过程,如图 4 所示。但是 XML 化过程本身需要进一步的研究。这里要遵守的基本原则是:设计的 XML 对等物尽量简单,语义上和源数据类似。这是因为:

    XML 越简单,XML 化过程本身的工作量越少。
    非 XML 数据与 XML 等价物之间的直接映射可以保持一致性,因此两者的语义差别很小,或者没有差别,新生成的 XML 对等物也不需要额外的知识。此外,XML 对等物和源数据越接近,就越容易在需要的时候提供多种服务。
    本质上,这是一个单独的问题。XML 化只负责将非 XML 数据转化成 XML,进一步处理则是另一个要单独思考的问题。
    结论
    XML 化模式可以提高应用程序的灵活性、健壮性和可扩展性,但是有一些因素会影响总体性能。首先,增加的 XML 化过程必然对性能产生不利影响。其次,因为后续处理是通过 XML 技术完成的,所以总体性能还依赖于所用 XML 技术(如 XSLT)的实现。

    结束语
    XML 化过程只改变源数据的样式或格式,而不改变源数据的意义。文中的 Prop2XLF 这个示例说明了将 XML 强大功能应用于非 XML 数据的好处。随着越来越多的 XML 技术的出现和成熟,通过这种解决方案实现非 XML 数据的 XML 化还会带来更多的好处。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    xml这门语言太好了,我们共同努力吧!!!!!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/15 10:14:00
     
     xmzhy 帅哥哟,离线,有人找我吗?狮子座1978-8-18
      
      
      威望:5
      等级:计算机学士学位
      文章:385
      积分:2003
      门派:XML.ORG.CN
      注册:2003/10/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xmzhy发送一个短消息 把xmzhy加入好友 查看xmzhy的个人资料 搜索xmzhy在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xmzhy的博客2
    发贴心情 
    不错
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/17 16:36:00
     
     cpayu 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:5
      积分:73
      门派:XML.ORG.CN
      注册:2005/4/28

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cpayu发送一个短消息 把cpayu加入好友 查看cpayu的个人资料 搜索cpayu在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看cpayu的博客3
    发贴心情 
    good
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/4/29 17:52:00
     
     d_hao20@ustc.edu 帅哥哟,离线,有人找我吗?
      
      
      等级:大三(面向对象是个好东东!)
      文章:101
      积分:726
      门派:XML.ORG.CN
      注册:2005/4/28

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给d_hao20@ustc.edu发送一个短消息 把d_hao20@ustc.edu加入好友 查看d_hao20@ustc.edu的个人资料 搜索d_hao20@ustc.edu在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看d_hao20@ustc.edu的博客4
    发贴心情 
    好文章
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/11 12:04:00
     
     宇南 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:16
      积分:127
      门派:XML.ORG.CN
      注册:2005/4/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给宇南发送一个短消息 把宇南加入好友 查看宇南的个人资料 搜索宇南在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看宇南的博客5
    发贴心情 
    确实是好贴~~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/15 11:41:00
     
     宇南 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:16
      积分:127
      门派:XML.ORG.CN
      注册:2005/4/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给宇南发送一个短消息 把宇南加入好友 查看宇南的个人资料 搜索宇南在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看宇南的博客6
    发贴心情 
    只想要源代码
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/28 17:37:00
     
     switer520 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:18
      积分:126
      门派:XML.ORG.CN
      注册:2005/1/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给switer520发送一个短消息 把switer520加入好友 查看switer520的个人资料 搜索switer520在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看switer520的博客7
    发贴心情 
    我也想要源代码看看,最好能发给我啊!老大!我的邮箱是switer520@yahoo.com.cn
    还要问一下,你的软件运行都需要哪些平台啊?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/29 1:52:00
     
     邪之正義 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:33
      积分:193
      门派:W3CHINA.ORG
      注册:2005/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给邪之正義发送一个短消息 把邪之正義加入好友 查看邪之正義的个人资料 搜索邪之正義在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看邪之正義的博客8
    发贴心情 
    tongshang

    ----------------------------------------------
    別放棄,做起來其實很簡單!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/30 8:50:00
     
     wawehi 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:13
      积分:99
      门派:XML.ORG.CN
      注册:2005/4/17

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给wawehi发送一个短消息 把wawehi加入好友 查看wawehi的个人资料 搜索wawehi在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看wawehi的博客9
    发贴心情 
    原代码。。。。。。。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/30 11:04:00
     
     feelwto 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:62
      门派:XML.ORG.CN
      注册:2005/6/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给feelwto发送一个短消息 把feelwto加入好友 查看feelwto的个人资料 搜索feelwto在『 XML 与 数据库 』的所有贴子 引用回复这个贴子 回复这个贴子 查看feelwto的博客10
    发贴心情 
    原代码啊??????
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/9 22:02:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML 与 数据库 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/23 13:51:18

    本主题贴数11,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    191.406ms