发明名称 一种快速执行可扩展样式表单语言转换的方法
摘要 本发明属数据库技术领域,具体为一种快速执行可扩展样式表单语言转换(XSLT)的方法。该方法首先通过构造转换树,将XML文档的结构信息和XSLT转换要求结构起来,然后从转换树建立流处理模型;扫描XLM源文档,通过流处理模型,将一个XSLT转换程序转换成很多个事件处理器,对应于扫描过程中触发的每一类事件,都有一个对应的事件的输出片断被添加到已产生的结果文档后面;扫描结束后,即得到最终完整的结果文档。本发明方法完全避免了现有转换引擎需要预先将整个源文档载入内存的缺点,减少了内存消耗,大大提高了执行效率。即使对于非常大的XML数据,也能通过一趟扫描完成转换过程。
申请公布号 CN1632784A 申请公布日期 2005.06.29
申请号 CN200410099274.7 申请日期 2004.12.29
申请人 复旦大学 发明人 郭志懋;周傲英
分类号 G06F17/22;G06F17/30 主分类号 G06F17/22
代理机构 上海正旦专利代理有限公司 代理人 陆飞;盛志范
主权项 1、一种快速执行XSLT转换的方法,其特征在于通过一个流处理模型来执行XSLT转换,具体步骤如下:(1)首先通过构造转换树,将XML源文档的结构信息和XSLT转换要求结合起来,其步骤为:构造XML文档类型定义的DTD树T;考察XSLT转换程序L的每一条转换规则r,在T中找到r的匹配节点n;继续考察r的输出模板序列中的每一个元素o,如果o是一个常数字符串,为树T创建一个叶子节点n’,添加一条从n到n’的边;如果o是调用模板命令,从树T中找到o的选中节点n’,同样添加一条从n到n’的边;(2)从转换树建立流处理模型,它是一个递归过程,其步骤为:对转换树的任一节点n,end(n),start(n)初始值为空串;如果n是叶子节点,则令end(n):=pcdata+end(n);以c1,c2,...,cp表示节点n下面所有来自于DTD树的孩子节点,以d1,d2,...,dq表示节点n下面所有来自于XSLT转换程序的孩子节点,如果d1是一个常数字符串节点,则令start(n):=start(n)+d1,并且设置计数器i为2,否则,设置计数器i为1;当i不大于q的时候,重复以下步骤:假设c是位于从节点n到节点di这条路径上的n的孩子节点,如果从n到c的边没有被星号标记,并且di+1是常数串节点,则令end(c):=end(c)+di+1和i:=i+2,否则令i:=i+1;如果di+1是常数串节点,假设c′是位于从节点n到节点di+2这条路径上的n的孩子节点,则令start(c′):=di+1+start(c′)和i:=i+2,否则令i:=i+1;对每一个孩子节点dj,递归调用以上过程;(3)扫描XLM源文档,通过流处理模型,将一个XSLT转换程序转化成很多个事件处理器;在从头到尾读XML取源文档的过程中会触发很多事件,对每一类事件,都有一个对应的输出片断;最开始的时候,结果文档为空,随着对源文档的扫描过程的进行,相应事件的输出片断被逐渐添加到已产生的结果文档的后面;在扫描过程结束后,用户马上就可以得到最终完整的结果文档;其中,end(n)为元素结束事件的输出片段,start(n)为元素开始事件的输出片段,pcdata为当前叶子节点的PCDATA值。
地址 200433上海市邯郸路220号