一种语言解析器和应用该解析器的解析方法.pdf

上传人:b*** 文档编号:1033007 上传时间:2018-03-27 格式:PDF 页数:32 大小:726.83KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910211716.5

申请日:

2009.11.10

公开号:

CN102053994A

公开日:

2011.05.11

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20091110|||公开

IPC分类号:

G06F17/30; G06F9/44; G06Q30/00

主分类号:

G06F17/30

申请人:

阿里巴巴集团控股有限公司

发明人:

余庆; 王社安; 李永

地址:

英属开曼群岛大开曼岛资本大厦一座四层847号邮箱

优先权:

专利代理机构:

北京集佳知识产权代理有限公司 11227

代理人:

马敬;逯长明

PDF下载: PDF下载
内容摘要

本申请公开了一种语言解析器和解析方法,所述方法包括:解析服务器通过前台业务框架接受来自用户终端的应用请求,判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,抓取所述应用请求所对应的页面;所述解析服务器将抓取到页面内第一语言所采用的标签、类型样式及JavaScript脚本转换成第二语言所支持的标签、类型样式及JavaScript脚本,获得转换后的第二语言,将转换后的第二语言存入缓存服务器;所述解析服务器通过前台业务框架将缓存服务器中的第二语言传送给用户终端。应用本申请,不但确保了解析的安全性,还提高了解析效率。而且,更好的支持网站平台的应用扩展和第三方开发,使得扩展更方便。

权利要求书

1: 一种语言解析方法, 其特征在于, 包括 : 解析服务器通过前台业务框架接受来自用户终端的应用请求, 判断出缓存服务器内不 存在与所述应用请求相对应的已解析后的第二语言时, 抓取所述应用请求所对应的页面 ; 所述解析服务器通过编译语言将抓取到页面内第一语言所采用的标签、 类型样式及 JavaScript 脚本转换成第二语言所支持的标签、 类型样式及 JavaScript 脚本, 获得转换后 的第二语言, 将转换后的第二语言存入缓存服务器 ; 所述解析服务器通过前台业务框架将缓存服务器中的第二语言传送给用户终端。
2: 根据权利要求 1 所述的方法, 其特征在于, 所述来自用户终端的应用请求中包括 URL ; 所述解析服务器判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第 二语言时, 抓取所述应用请求所对应的页面的步骤具体包括 : 通过 URL 判断缓存服务器内是否存在与所述 URL 相对应的已解析后的第二语言, 若不 存在, 则抓取与所述 URL 对应的页面。
3: 根据权利要求 1 所述的方法, 其特征在于, 所述将第一语言所采用的标签和类型样 式转换成第二语言所支持的标签和类型样式的步骤包括 : 过滤掉第一语言中的第一类字符 ; 构造缓冲区 ; 将第一语言中的所有应用进行分块处理, 令每个应用对应一个模块 ; 将所述每个模块中的第一语言所采用的标签都处理为第二语言所支持的标签, 将处理 后的第二语言所支持的标签存入所述缓冲区 ; 将第一语言中分散在不同位置的所有类型样式进行合并, 将合并后的类型样式存入所 述缓冲区的最后位置 ; 将缓冲区中的内容写入缓存服务器中。
4: 根据权利要求 3 所述的方法, 其特征在于, 将一个模块中的第一语言所采用的标签 都处理为第二语言所支持的标签的步骤包括 : 遍历第一语言中的字符串, 如果获取到一个合法的标签, 则 如果所述合法的标签是闭合标签, 则当其不是第一语言所特有的标签, 且在栈中有匹 配的开始标签时, 在缓冲区中追加标签闭合字符 (), 并让所述开始标签出栈 ; 如果所述合法标签是非闭合标签, 则当所述非闭合标签是第一语言所特有的标签时, 调用该标签所对应的处理函数进行处理, 之后, 返回遍历第一语言中的字符串的步骤 ; 当所 述非闭合标签不是第一语言所特有的标签且有与之对应的回调函数时, 调用该标签所对应 的回调函数进行处理, 之后, 返回遍历第一语言中的字符串的步骤 ; 当所述非闭合标签不是 第一语言所特有的标签且没有与之对应的回调函数时, 在缓冲区追加标签开始字符, 并判 断所述不是第一语言所特有的标签且没有与之对应的回调函数的非闭合标签是否需要闭 合, 若需要, 则将当前标签放入栈中, 若不需要, 返回遍历第一语言中的字符串的步骤。
5: 根据权利要求 1 所述的方法, 其特征在于, 所述将第一语言所采用的 JavaScript 脚 本转换成第二语言所支持的 JavaScript 脚本的步骤包括 : 初始化一用于存储 TBJS 各个标志 token 的链表 ; 2 将第一语言所采用的 JavaScript 脚本解析为各个 token, 并解析出每个 Token 的类 型; 检查第一语言所采用的 JavaScript 脚本是否符合预设的框架格式要求, 若符合, 转换 为第一语言所采用的 JavaScript 脚本框架语法, 之后, 遍历所述链表, 根据链表中 token 的 类型作相应处理, 将所述链表中的各个 token 转换为第二语言所支持的 JavaScript 脚本。
6: 根据权利要求 1 所述的方法, 其特征在于, 所述将转换后的第二语言存入缓存服务 器的步骤包括 : 01) 根据前台业务框架的设置, 判断是否需要将所述转换后的第二语言存入缓存服务 器, 若是, 再执行步骤 02) ; 02) 将第二语言的标记语言页面存入缓存服务器 ; 03) 将第二语言所支持的类型样式和 JavaScript 脚本存入缓存服务器。
7: 根据权利要求 6 所述的方法, 其特征在于, 将第二语言的标记语言页面存入缓存服 务器的步骤包括 : 判断是否满足预设的缓存要求, 若满足, 再按照已生成的缓存关键值所指示的位置进 行缓存 ; 所述预设的缓存要求包括 : 所抓取的页面正确, 且该页面 URL 的请求类型为 GET。
8: 根据权利要求 6 所述的方法, 其特征在于, 将第二语言所支持的类型样式和脚本存 入缓存服务器的步骤包括 : 分别获取类型样式标签和脚本标签所对应的 URL 和内容 ; 根据应用路径, 获取所述内容的长度及内容的哈希值, 根据所述长度及哈希值生成缓 存关键值 ; 对所述内容进行语法检查并生成用于转换的中间代码 ; 将所述中间代码加入到所述类型样式标签和脚本标签所对应的内容中, 获得转换后的 类型样式标签和脚本标签 ; 缓存所述转换后的类型样式标签和脚本标签 ; 在所述转换后的类型样式标签和脚本标签中插入用于区别标记语言页面的符号。
9: 根据权利要求 1 所述的方法, 其特征在于, 所述方法还包括 : 在解析服务器判断出缓 存服务器中存在与所述应用请求相对应的已解析后的第二语言时, 将所述缓存服务器中的 第二语言通过前台业务框架传送给用户终端。
10: 根据权利要求 1-9 任一所述的方法, 其特征在于, 所述第一语言为 TBML, 第二语言 为 HTML。
11: 根据权利要求 10 所述的方法, 其特征在于, 所述前台业务框架通过 PHP 扩展的方式 与用户终端进行交互 ; 所述解析服务器所执行的转换操作由 C 语言实现。
12: 一种语言解析服务器, 其特征在于, 包括 : 判断模块, 用于通过前台业务框架接受来自用户终端的应用请求, 判断出缓存服务器 内不存在与所述应用请求相对应的已解析后的第二语言时, 通知抓取模块 ; 抓取模块, 用于根据接收到的通知抓取所述应用请求所对应的页面 ; 转换模块, 用于通过编译语言将抓取到页面内第一语言所采用的标签、 类型样式及 JavaScript 脚本转换成第二语言所支持的标签、 类型样式及 JavaScript 脚本, 获得转换后 3 的第二语言 ; 缓存模块, 用于将转换后的第二语言存入缓存服务器 ; 传送模块, 用于通过前台业务框架将缓存服务器中的第二语言传送给用户终端。
13: 根据权利要求 12 所述的语言解析服务器, 其特征在于, 所述转换模块包括 : 过滤模块, 用于过滤掉第一语言中的第一类字符 ; 构造模块, 用于构造缓冲区 ; 分割模块, 用于将第一语言中的所有应用进行分块处理, 令每个应用对应一个模块 ; 处理模块, 用于将所述每个模块中的第一语言所采用的标签都处理为第二语言所支持 的标签, 将处理后的第二语言所支持的标签存入所述缓冲区 ; 合并模块, 用于将第一语言中分散在不同位置的所有类型样式进行合并, 将合并后的 类型样式存入所述缓冲区的最后位置 ; 写入模块, 用于将缓冲区中的内容写入缓存服务器中。
14: 根据权利要求 12 所述的语言解析服务器, 其特征在于, 所述缓存模块包括 : 页面缓存模块, 用于将第二语言的标记语言页面存入缓存服务器 ; 类型样式和脚本缓存模块, 用于将第二语言所支持的类型样式和脚本存入缓存服务 器。
15: 根据权利要求 12 所述的语言解析服务器, 其特征在于, 所述判断模块, 还用于判断出缓存服务器中存在与所述应用请求相对应的已解析后的 第二语言时, 通知传送模块。
16: 根据权利要求 12-15 任一所述的语言解析服务器, 其特征在于, 所述第一语言为 TBML, 第二语言为 HTML。

说明书


一种语言解析器和应用该解析器的解析方法

    【技术领域】
     本申请涉及计算机软件技术领域, 特别涉及一种语言解析器和应用该解析器的解析方法。 背景技术 API 开放平台提供了访问数据的开放接口。购物网站可以被理解为一种 API 开放 平台, 其可以满足商家快速、 个性建站的需求, 可以方便商家建立外部网店的一个系统。商 家可以使用这个开发平台, 更好的塑造自己的品牌。 第三方可以基于这个开放平台, 开发第 三方应用, 满足用户的需求, 同时实现自己的价值。
     如果第三方开发者基于 HTML 直接在购物网站平台上开发应用, 因为 HTML 的灵活 性, 安全性得不到保证, 同时因为 HTML 的限制性, 又不能方便的使用旺店内部的数据, 这便 诞生了淘宝扩展 HTML 标记语言 -TBML。 它既可以保证第三方开发者开发的安全性、 灵活性, 又提供了一个访问淘宝内部数据的通道。但 TBML 语言并不能在用户浏览器中直接解析展 现。
     现有的 FBML 的解析器 (Parser) 是美国著名的社交网站 Facebook 的后端模块, 其 所采用的语言为 fbml 语言。FBML 的 Parser 实现机理如下 :
     核心的算法由 mozilla 引擎和自定义的 Sink 模块 fbml ContentSink 完成 ; 其中, Mozilla 是一个为标准的兼容性, 跨平台性和可移植特性而设计的一个开放源码 web 浏览 器和工具包 ;
     Parser 以 PHP 扩展 (PHP, Personal Home Pages) 模块的方式提供使用 ;
     fb 标签的扩展, 渲染以及整个 html 文档的重构则在 php 层面进行。
     页面的渲染过程其实就是一个以深度优先遍历一颗文档对象模型 (DOM, Document Object Model) 树的过程, 遇到特殊节点时调用相应的回调函数进行渲染, 例如 css, js 以 及 fb 自定义标签等回调函数可以用 php 编写, 通过 php 模块提供给 mozilla 引擎使用。
     从上述实现机理可知, FBML 的 Parser 底层使用 Mozilla Parser, 虽然该引擎成熟 稳定, 功能强大, 可大大减少程序员开发工作, 但由于将解析和转换过程独立开, 增加了灵 活性同时降低了效率 ; 虽然通过 php 的反射机制动态扩展标签而无需重新编译, 但由于大 量工作在 php 层面进行, 存在效率问题, 例如反射机制的使用。
     Facebook 的 FBML Parser 是针对于交友网络的, 对商务开放平台需要改造很多 ; FBML 在安全性上要求不严格, 会造成 HTML 注入漏洞 ; 页面渲染等工作在 PHP 层面完成, 效 率较低, 影响性能。
     发明内容
     本申请实施例在于提供一种语言解析器和应用该解析器的解析方法, 不但能确保 解析的安全性, 还能够提高解析效率。
     本发明实施例提供了一种语言解析方法, 包括 :解析服务器通过前台业务框架接受来自用户终端的应用请求, 判断出缓存服务器 内不存在与所述应用请求相对应的已解析后的第二语言时, 抓取所述应用请求所对应的页 面;
     所述解析服务器通过编译语言将抓取到页面内第一语言所采用的标签、 类型样式 及 JavaScript 脚本转换成第二语言所支持的标签、 类型样式及 JavaScript 脚本, 获得转换 后的第二语言, 将转换后的第二语言存入缓存服务器 ;
     所述解析服务器通过前台业务框架将缓存服务器中的第二语言传送给用户终端。
     其中, 所述来自用户终端的应用请求中包括 URL ;
     所述解析服务器判断出缓存服务器内不存在与所述应用请求相对应的已解析后 的第二语言时, 抓取所述应用请求所对应的页面的步骤具体包括 :
     通过 URL 判断缓存服务器内是否存在与所述 URL 相对应的已解析后的第二语言, 若不存在, 则抓取与所述 URL 对应的页面。
     其中, 所述将第一语言所采用的标签和类型样式转换成第二语言所支持的标签和 类型样式的步骤包括 :
     过滤掉第一语言中的第一类字符 ; 构造缓冲区 ;
     将第一语言中的所有应用进行分块处理, 令每个应用对应一个模块 ;
     将所述每个模块中的第一语言所采用的标签都处理为第二语言所支持的标签, 将 处理后的第二语言所支持的标签存入所述缓冲区 ;
     将第一语言中分散在不同位置的所有类型样式进行合并, 将合并后的类型样式存 入所述缓冲区的最后位置 ;
     将缓冲区中的内容写入缓存服务器中。
     其中, 将一个模块中的第一语言所采用的标签都处理为第二语言所支持的标签的 步骤包括 :
     遍历第一语言中的字符串,
     如果获取到一个合法的标签, 则
     如果所述合法的标签是闭合标签, 则当其不是第一语言所特有的标签, 且在栈中 有匹配的开始标签时, 在缓冲区中追加标签闭合字符 (), 并让所述开始标签出栈 ;
     如果所述合法标签是非闭合标签, 则当所述非闭合标签是第一语言所特有的标签 时, 调用该标签所对应的处理函数进行处理, 之后, 返回遍历第一语言中的字符串的步骤 ; 当所述非闭合标签不是第一语言所特有的标签且有与之对应的回调函数时, 调用该标签所 对应的回调函数进行处理, 之后, 返回遍历第一语言中的字符串的步骤 ; 当所述非闭合标签 不是第一语言所特有的标签且没有与之对应的回调函数时, 在缓冲区追加标签开始字符, 并判断所述不是第一语言所特有的标签且没有与之对应的回调函数的非闭合标签是否需 要闭合, 若需要, 则将当前标签放入栈中, 若不需要, 返回遍历第一语言中的字符串的步骤。
     其 中, 所 述 将 第 一 语 言 所 采 用 的 JavaScript 脚 本 转 换 成 第 二 语 言 所 支 持 的 JavaScript 脚本的步骤包括 :
     初始化一用于存储 TBJS 各个标志 token 的链表 ;
     将第一语言所采用的 JavaScript 脚本解析为各个 token, 并解析出每个 Token 的
     类型 ; 检查第一语言所采用的 JavaScript 脚本是否符合预设的框架格式要求, 若符 合, 转换为第一语言所采用的 JavaScript 脚本框架语法, 之后, 遍历所述链表, 根据链 表中 token 的类型作相应处理, 将所述链表中的各个 token 转换为第二语言所支持的 JavaScript 脚本。
     其中, 所述将转换后的第二语言存入缓存服务器的步骤包括 :
     01) 根据前台业务框架的设置, 判断是否需要将所述转换后的第二语言存入缓存 服务器, 若是, 再执行步骤 02) ;
     02) 将第二语言的标记语言页面存入缓存服务器 ;
     03) 将第二语言所支持的类型样式和 JavaScript 脚本存入缓存服务器。
     其中, 将第二语言的标记语言页面存入缓存服务器的步骤包括 :
     判断是否满足预设的缓存要求, 若满足, 再按照已生成的缓存关键值所指示的位 置进行缓存 ;
     所述预设的缓存要求包括 : 所抓取的页面正确, 且该页面 URL 的请求类型为 GET。
     其中, 将第二语言所支持的类型样式和脚本存入缓存服务器的步骤包括 :
     分别获取类型样式标签和脚本标签所对应的 URL 和内容 ;
     根据应用路径, 获取所述内容的长度及内容的哈希值, 根据所述长度及哈希值生 成缓存关键值 ;
     对所述内容进行语法检查并生成用于转换的中间代码 ;
     将所述中间代码加入到所述类型样式标签和脚本标签所对应的内容中, 获得转换 后的类型样式标签和脚本标签 ;
     缓存所述转换后的类型样式标签和脚本标签 ;
     在所述转换后的类型样式标签和脚本标签中插入用于区别标记语言页面的符号。
     其中, 所述方法还包括 : 在解析服务器判断出缓存服务器中存在与所述应用请求 相对应的已解析后的第二语言时, 将所述缓存服务器中的第二语言通过前台业务框架传送 给用户终端。
     其中, 其特征在于, 所述第一语言为 TBML, 第二语言为 HTML。
     其中, 所述前台业务框架通过 PHP 扩展的方式与用户终端进行交互 ; 所述解析服 务器所执行的转换操作由 C 语言实现。
     本发明实施例还提供了一种语言解析服务器, 包括 :
     判断模块, 用于通过前台业务框架接受来自用户终端的应用请求, 判断出缓存服 务器内不存在与所述应用请求相对应的已解析后的第二语言时, 通知抓取模块 ;
     抓取模块, 用于根据接收到的通知抓取所述应用请求所对应的页面 ;
     转换模块, 用于通过编译语言将抓取到页面内第一语言所采用的标签、 类型样式 及 JavaScript 脚本转换成第二语言所支持的标签、 类型样式及 JavaScript 脚本, 获得转换 后的第二语言 ;
     缓存模块, 用于将转换后的第二语言存入缓存服务器 ;
     传送模块, 用于通过前台业务框架将缓存服务器中的第二语言传送给用户终端。
     其中, 所述转换模块包括 :
     过滤模块, 用于过滤掉第一语言中的第一类字符 ; 构造模块, 用于构造缓冲区 ; 分割模块, 用于将第一语言中的所有应用进行分块处理, 令每个应用对应一个模块; 处理模块, 用于将所述每个模块中的第一语言所采用的标签都处理为第二语言所 支持的标签, 将处理后的第二语言所支持的标签存入所述缓冲区 ;
     合并模块, 用于将第一语言中分散在不同位置的所有类型样式进行合并, 将合并 后的类型样式存入所述缓冲区的最后位置 ;
     写入模块, 用于将缓冲区中的内容写入缓存服务器中。
     其中, 所述缓存模块包括 :
     页面缓存模块, 用于将第二语言的标记语言页面存入缓存服务器 ;
     类型样式和脚本缓存模块, 用于将第二语言所支持的类型样式和脚本存入缓存服 务器。
     其中, 所述判断模块, 还用于判断出缓存服务器中存在与所述应用请求相对应的 已解析后的第二语言时, 通知传送模块。
     其中, 所述第一语言为 TBML, 第二语言为 HTML。
     应用本申请, 不但确保了解析的安全性, 还提高了解析效率。而且, 更好的支持购 物网站平台的应用扩展和第三方开发, 使得扩展更方便。由于对第三方应用实现了代码级 的监控, 所以能够严格、 适当、 有效的控制第三方应用, 保证购物网站平台的健壮和安全性。
     附图说明
     为了更清楚地说明本申请实施例中的技术方案, 下面将对实施例中所需要使用的 附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是本申请的一些实施例, 对于本领 域普通技术人员来讲, 在不付出创造性劳动的前提下, 还可以根据这些附图获得其他的附 图。
     图 1 是根据本申请实施例的 TBML 解析器的网络示意图 ;
     图 2 是根据本申请实施例的解析服务器的逻辑层示意图 ;
     图 3 是根据本申请实施例的语言解析方法流程图 ;
     图 4 是根据本申请实施例的将 TBML 所采用的标签和类型样式转换成 HTML 所支持 的标签和类型样式的流程图 ;
     图 5 是根据本申请实施例的将一个模块中的 TBML 所采用的标签都处理为 HTML 所 支持的标签的处理流程图, 即步骤 404 的详细处理流程图 ;
     图 6 是根据本申请实施例的将 TBML 所采用的 JavaScript 脚本转换成 HTML 所支 持的 JavaScript 脚本的流程图 ;
     图 7 是根据本申请实施例的判断缓存服务器内是否存在与应用请求相对应的已 解析后的 HTML 的流程图 ;
     图 8 是根据本申请实施例的将 HTML 页面存入缓存服务器的流程图 ;
     图 9 是将 HTML 所支持的类型样式和脚本存入缓存服务器的流程图 ;
     图 10 是根据本申请实施例的用于电子商务的解析服务器的逻辑结构示意图。具体实施方式
     下面将结合本申请实施例中的附图, 对本申请实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例仅仅是本申请一部分实施例, 而不是全部的实施例。基于 本申请中的实施例, 本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例, 都属于本申请保护的范围。
     为了更好的说明本申请, 下面先对 TBML 做一简单介绍。
     TBML(TaoBao Markup Language), 是一种 HTML 商务扩展标记语言, 是基于超文本 标记语言 (HTML, HyperText Mark-up Language) 子集进行扩展后的标记语言。
     TBML 包含两种类型的标签 ( 或元素 ) :
     标准 HTML 标签 : TBML 支持绝大部分常用的 HTML 标签和属性, 不支持的标签和属 性如下 :
     不 支 持 在 浏 览 器 中 引 用 外 部 对 象 的 标 签, 如: 等 ;
     不支持 HTML4.01 中弃用的标签, 如: 等 ;
     部分支持样式相关属性 : 如: border、 bgcolor、 color 等 ;
     不支持极少数会使用到的属性, 如: charset、 char、 clear、 ismap 等 ;
     TBML 扩展标签 : 用来表示购物网站的网页中特殊的数据或组件, 这些标签以 tb: 开头。如 : 等, 这部分标签将逐步提供。
     TBJS(TaoBao JavaScript), 可以称为淘宝 JavaScript 脚本, 是基于 JavaScript 脚本 (Javascript) 子集进行扩展后的标记语言。TBJS 是为在下一代电子商务平台 (NCP, Next Commerce Platform) 版外部网店平台上开发应用程序的开发者提供支持 Javascript 的解决方案。其中, Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承 的面向对象的动态类型的区分大小写的客户端脚本语言。
     TBML 支持的标签及其属性如表 1 所示 :
     表1
     标签名称 a abbr acronym address area b属性 href, name, rel, target, type, title, id, dir, class, style title, id, dir, class, style title, id, dir, class, style title, id, dir, class, style id, class, href, alt, shape, coords, target, style title, id, dir, class, stylebdo big blockquote br button caption center cite col colgroup dd del dfn div dl dt emtitle, id, class, style, dir title, id, dir, class, style title, id, dir, class, style, cite(url) title, id, class, style disabled, name, type, value, title, id, dir, class, style, tabindex, size title, id, dir, class, style, align, span title, id, class title, id, dir, class, style align, span, valign, title, id, dir, class, style align, span, valign, width, title, id, dir, class, style title, id, dir, class, style datetime, title, id, dir, class, style, cite(url) title, id, dir, class, style title, id, dir, class, style, align title, id, dir, class, style title, id, dir, class, style title, id, dir, class, style src, width, height, wmode, var, style, flashvars, quality, id, name, typ e allowNetworking( 强制写为 internal), allowScriptAccess( 强 制写为 neyer) title, id, dir, class, style title, id, class, face, size, color, style action, enctype, method, target, title, id, dir, class, style title, id, dir, class, style, alignembedfieldset font form h1h2 h3 h4 h5 h6 hrtitle, id, dir, class, style, align title, id, dir, class, style, align title, id, dir, class, style, align title, id, dir, class, style, align title, id, dir, class, style, align size, width, title, id, class, style, height, noshade title, id, dir, class, stylei alt, height, src, width, title, id, dir, class, style, border, usemap, img align, valign, vspace, hspace alt, checked, disabled, maxlength, name, readonly, size, src, type, input value, title, id, dir, class, style, tabindex, usemap ins kbd label legend 1i datetime, title, id, dir, class, style, cite(url) title, id, dir, class, style title, id, dir, class, style, for title, id, dir, class, style type, title, id, dir, class, stylelink map nobr noscript ol optgrouphref, style, rel, type name, title, id, dir, class, style class, id, title, style title, id, dir, class, style type, title, id, dir, class, style disabled, label, title, id, dir, class, styleoption p q s script select small span strike strong style sub supdisabled, label, selected, value, title, id, dir, class, style title, id, dir, class, style, align title, id, dir, class, style, cite(url) title, id, class src, type disabled, multiple, name, size, title, id, dir, class, style, tabindex title, id, dir, class, style title, id, dir, class, style title, id, class title, id, dir, class, style media, type, dir title, id, dir, class, style title, id, dir, class, style border, cellpadding, cellspacing, summary, width, title, id, dir, class,table style, bgcolor, background, height, align, valign, color tbody align, valign, title, id, dir, class, style, bgcolor abbr, align, colspan, headers, rowspan, scope, valign, width, title, td id, dir, class, style, bgcolor, background, height cols, disabled, name, readonly, rows, title, id, dir, class, style, textarea wrap(SOFT|HARD|OFF), tabindex(1 ~ 32767) tfoot align, valign, title, id, dir, class, style, bgcolor abbr, align, colspan, headers, rowspan, scope, valign, width, title, th id, dir, class, style, bgcolor, background, heightthead title tr tt u ul varalign, valign, title, id, dir, class, style, bgcolor dir align, valign, title, id, dir, class, style, bgcolor, background, height title, id, dir, class, style title, id, class type, title, id, dir, class, style title, id, dir, class, style
     TBML 支持的 CSS 样式属性如表 2 所示 : 表213backgroundbackground attachment backgroundbackground-position repeat border-botto border-bottom-color m-style border-bottom-width border background-color102053994 A CN 102054001ascentbackground-imageborder-bottom说border-collapse border-left-widthborder-colorborder-left border-right border-spaciborder-left-color border-right-color明14border-left-style书border-right-styleborder-right-width ng border-top-st border-top-color yle cap-height caption-sideborder-styleborder-topborder-top-widthborder-widthclear10/19 页color direction font font-stretch letter-spacin height g line-height font-style font-variant font-family font-size display empty-cellscounter-incrementcounter-resetcursor102053994 A CN 102054001descentfloatfont-size-adjustfont-weight说list-style-pos list-style-image ition margin-bottom max-height orphans margin-left max-width outline overflow(-x, outline-width -y) padding margin-right min-height outline-color list-style-typelist-style明15书marginmargin-topmin-widthoutline-style11/19 页102053994 A CN 102054001padding-righ padding-left t slope text-decorati text-align on vertical-alig unicode-bidi n widows width writing-mod word-wrap e x-height word-spacing visibility text-indent stemh stemv padding-toppadding-bottompanose-1table-layout说明16text-transform书white-spaceword-break12/19 页102053994 A CN 102054001
     说明书13/19 页TBML 具有如下优点 :
     扩展方便 : 更好的支持购物网站平台的应用扩展和第三方开发 ;
     解析快速 : 采用编译语言 C 实现解析, 响应速度更迅速 ;
     内嵌缓存 : 实现了缓存机制, 提高应用的响应速度并减轻应用服务器压力 ;
     安全严格 : 对第三方应用实现了代码级的监控, 严格、 适当、 有效的控制第三方应 用保证旺店平台的健壮和安全 ;
     淘宝建站中用 TBML 来定义应用要展示的内容。应用回调接口输出的内容必须以 TBML 的形式返回给淘宝旺店, 淘宝站点的前台业务框架再将 TBML 转换为 HTML 并嵌入最终 页面。
     本申请所涉及的语言解析器 -Parser, 是基于第一语言的扩展标记语言解析器, 可以将第一语言转化为第二语言, 这里, 第一语言是指 TBML/TBJS, 第二语言是指 HTML/ Javascript。
     简单而言, TBML 是基于 HTML 子集进行扩展后的标记语言, 也就是说 TBML 只支持 部分最常用的 HTML 标记, 同时增加了 TBML 支持而 HTML 不支持的标记。
     TBJS 是为第三方的应用程序开发者提供支持 Javascript 的解决方案。出于安全 方面的考虑, 本发明对原生的 Javascript 做了一些限制, 也就是说必须按照指定的规则写 javascript 代码。
     参见图 1, 其是根据本申请实施例的 TBML 解析器的网络示意图 ; 本实施例中, 解析 服务器 102 通过前台业务框架接受来自用户终端 101 的应用请求, 如果解析服务器 102 确 定缓存服务器 104 中存在与所述应用请求对应的已解析后的第二语言, 则将该第二语言通 过前台业务框架发送给用户终端 101, 如果不存在, 则从应用服务器 103 中抓取与所述应用 请求对应的页面, 将抓取到页面内第一语言所采用的标签、 类型样式及 JavaScript 脚本转 换成第二语言所支持的标签、 类型样式及 JavaScript 脚本, 获得转换后的第二语言, 将转 换后的第二语言存入缓存服务器 104 ; 之后, 再从缓存服务器 104 中获取与应用请求对应已 解析后的第二语言, 通过前台业务框架传送给用户终端 101。
     上述抓取操作可以通过 Curl 工具 ( 一个开源的抓取页面的工具 ) 实现, 缓存服务 器可以通过现有的 MemCache 的分布式缓存工具实现, 也可以通过自开发的 FastDHT 缓存工 具实现。
     参见图 2, 其是根据本申请实施例的解析服务器的逻辑层示意图 ; Parser 是用 C 语 言开发的一个 so 文件, 通过 PHP 扩展 Extension 的方式由前台页面框架调用。解析器内核 (Parser Core) 是一个共享的函数库或称为共享程序库。Parser 还包括抓取工具和缓存工 具。其中, so 文件是一个 UNIX 的动态连接库, 是二进制文件, 相当于 WINDOWS 下的 .dll 文 件。
     参见图 3, 其是根据本申请实施例的用于电子商务的语言解析方法流程图。 本实施 例中, 解析服务器的框架会把用户请求的应用的各种参数预先传给 Parser, 其中, TBML 为 第一语言, HTML 为第二语言, 所述流程具体包括 :
     步骤 301, 解析服务器通过前台业务框架接受来自用户终端的应用请求, 该请求中 包含统一资源定位符 (URL) 信息 ;
     这里, 上述应用请求实际就是用户打开一个网页, 即一个 HTTP 页面请求, 上述 URL 指示待访问应用服务器的地址 ;
     步骤 302, 判断缓存服务器内是否存在与所述应用请求相对应的已解析后的 HTML, 若存在, 执行步骤 306, 若不存在, 执行步骤 303 ;
     上述判断的具体方式可以是 : 通过 URL 判断缓存服务器内是否存在与所述 URL 相 对应的已解析后的 HTML。
     步骤 303, 抓取所述应用请求所对应的页面 ;
     步骤 304, 解析服务器通过 Parser Core 将 TBML 转换为 HTML, 具体的, 通过编译语 言将抓取到页面内 TBML 所采用的标签、 类型样式及 JavaScript 脚本转换成 HTML 所支持的 标签、 类型样式及 JavaScript 脚本, 从而获得解析后的 HTML ;
     步骤 305, 判断是否需要将解析后的 HTML 存入缓存服务器中, 若是, 再执行步骤 306, 否则直接执行步骤 307。
     这里, 是根据前台业务框架的设置的指示参数决定是否需要将解析后的 HTML 存 入缓存服务器中。
     步骤 306, 将解析后得到的 HTML 存入缓存服务器 ;
     具体的, 包括 : 将第二语言的标记语言页面存入缓存服务器 ; 以及将第二语言所 支持的类型样式和脚本存入缓存服务器 ;
     步骤 307, 解析服务器通过前台业务框架将缓存服务器中的 HTML 传送给用户终 端。
     需要说明的是, 前台业务框架通过 PHP 扩展的方式与用户终端进行交互 ; 解析服 务器所执行的转换操作由 C 语言实现。
     由于本申请提供的 TBML、 TBJS 支持第三方开发, 因而可以将第三方开发后的内容 放到网站购物平台上, 以供用户 ( 如商户 ) 使用, 其与现有的腾讯拍拍、 百度有啊相比, 具有 更好的可扩展性, 即本申请能够更好的支持网站购物平台的应用扩展和第三方开发 ; 再有, 本申请提供的方案不但确保了解析的安全性, 还因为使用了 C 语言而提高了解析效率, 而 且让扩展更方便。
     下面对图 3 的中的步骤 304、 302 和 305 的具体实现过程进行详细说明。
     参见图 4, 其是根据本申请实施例的将 TBML 所采用的标签和类型样式转换成 THML 所支持的标签和类型样式的流程图, 该流程包括 :
     步骤 401, 过滤掉 TBML 中的第一类字符 ;
     这里, 第一类字符是非 UTF8 字符, 即过滤掉 TBML 中的非 UTF8 字符 ;
     步骤 402, 构造缓冲区 ;
     步骤 403, 将 TBML 中的所有应用进行分块处理, 令每个应用对应一个模块 ;
     具体的, 对于步骤 403, 可以通过 语句来实现, 通 过 div 可以把每一个应用隔开, 使得各个应用不会互相影响。
     步骤 404, 将所述每个模块中的 TBML 所采用的标签都处理为 HTML 所支持的标签 ;
     对于步骤 404, 具体的, 可以通过 tbml_do_parse() 函数来实现。
     步骤 405, 将处理后的 HTML 所支持的标签存入所述缓冲区 ;
     步骤 406, 将 TBML 中分散在不同位置的所有类型样式进行合并, 将合并后的类型样式存入所述缓冲区的最后位置 ;
     具体的, 将 extinfo- > style Buffer 中的 css 样式加入 buffer ; 其中, CSS 是一 种样式表语言, 用于为 HTML 文档定义布局。例如, CSS 涉及字体、 颜色、 边距、 高度、 宽度、 背 景图像、 高级定位等方面 ;
     步骤 407, 将缓冲区中的内容写入缓存服务器中。
     参见图 5, 其是根据本申请实施例的将一个模块中的 TBML 所采用的标签都处理为 HTML 所支持的标签的处理流程图, 即步骤 404 的详细处理流程, 该流程包括 :
     步骤 501, 遍历第一语言中的字符串,
     步骤 502, 获取一个标签 tag, 并判断其是否合法, 若合法, 则执行步骤 503, 否则执 行步骤 518 ;
     步骤 503, 判断所获取的标签是否为闭合标签 closs_tag, 若是, 执行步骤 504, 否 则执行步骤 507 ;
     步骤 504 ~ 506, 对于合法的闭合标签, 当其不是 TBML 所特有的标签, 且在栈中有 匹配的开始标签时, 在缓冲区中追加标签闭合字符 (), 并让所述开始标签出栈 ; 然 后返回步骤 501 ;
     步骤 507, 判断是否为 TBML 所特有的标签, 若是, 则执行步骤 508, 否则执行步骤 509 ;
     步骤 508, 调用该 TBML 标签所对应的处理函数进行处理, 然后返回步骤 501 ;
     步骤 509, 判断是否有 parser 回调函数, 若有, 则执行步骤 510, 否则执行步骤 511 ;
     步骤 510, 调用该标签所对应的回调函数进行处理, 然后返回步骤 501 ;
     步骤 511 ~ 517, 在缓冲区追加标签开始字符 “< tag” , 解析该 tag 所对应的属性, 并判断该标签是否为闭合标签, 若是, 在缓冲区中追加 “/” 后再追加 “>” , 否则直接在缓冲 区中追加 “>” , 之后, 判断该标签是否需要闭合, 若需要, 则将当前标签放入栈中, 然后返回 步骤 501, 若不需要, 直接返回步骤 501 ;
     步骤 518, 栈中是否仍有未匹配的标签, 若有则报错, 否则结束解析处理, 将处理后 的 HTML 所支持的标签存入所述缓冲区。
     也就是说, 图 5 所示流程可以简单的表述为 : 遍历第一语言中的字符串,
     如果获取到一个合法的标签, 则判断是否为闭合标签 ;
     如果所述合法的标签是闭合标签, 则当其不是第一语言所特有的标签, 且在栈中 有匹配的开始标签时, 在缓冲区中追加标签闭合字符 (), 并让所述开始标签出栈 ;
     如果所述合法标签是非闭合标签, 则当所述非闭合标签是第一语言所特有的标签 时, 调用该标签所对应的处理函数进行处理, 之后, 返回遍历第一语言中的字符串的步骤 ; 当所述非闭合标签不是第一语言所特有的标签且有与之对应的回调函数时, 调用该标签所 对应的回调函数进行处理, 之后, 返回遍历第一语言中的字符串的步骤 ; 当所述非闭合标签 不是第一语言所特有的标签且没有与之对应的回调函数时, 在缓冲区追加标签开始字符, 并判断是否需要闭合 ( 即判断不是第一语言所特有的标签且没有与之对应的回调函数的 非闭合标签是否需要闭合 ), 若需要, 则将当前标签放入栈中, 若不需要, 返回遍历第一语言 中的字符串的步骤。参见图 6, 其是根据本申请实施例的将 TBML 所采用的 JavaScript 脚本转换成 HTML 所支持的 JavaScript 脚本的流程图, 该流程具体包括 :
     步骤 601, 初始化一链表, 该链表用于存储 TBJS 各个标志 (token) ;
     步骤 602, 将 TBML 所采用的 JavaScript 脚本即 TBJS 解析为各个 token, 并解析出 每个 Token 的类型, 该类型包括函数名, 变量名, 操作符等, 将所解析出的各个 token 及该 token 所对应的类型存储在所述链表中 ; 若解析失败则返回错误信息 ;
     步骤 603 ~ 605, 检查 TBJS 是否符合预设的框架格式要求, 若符合, 转换为 TBJS 框 架语法, 之后, 遍历所述链表, 根据链表中 Token 的类型作不同处理 ( 例如, 在变量值的前面 添加 “TBJS.$(this).” 之类的前缀 ), 将所述链表中的各个 token 转换为第二语言所支持的 JavaScript 脚本。
     上述预设的框架格式要求为 : 程序的前面五个 Token 是否分别为 : “TBJS” 、 “.” 、 “app” 、 “=” 及 “{” , 最后一个 Token 是 “; ” ; 如果 TBJS 满足上述框架格式要求, 则判定为 符合, 否则判定为不符合。
     下面从如何缓存的角度对本申请再做说明。
     首先, 待缓存的内容需要满足以下规则 :
     只对获取 (GET) 类型的请求返回作缓存, 对 post 类型的请求返回不作缓存 ;
     只对页面返回码为 200 的, 即返回正确的应用页面作缓存。
     缓存的时间可根据用户需要而定, 缓存时间范围为 1 分钟到 1 天 : (60 ~ 86400)s。
     缓存的内容主要是三大部分, 即应用页面内容解析为 html 的缓存、 页面内部 css 以及 js 的缓存以及页面外部 css 以及 js 的缓存。
     下面从缓存的角度具体说明步骤 302 和步骤 305 的实现过程。
     参见图 7, 其是根据本申请实施例的判断缓存服务器内是否存在与应用请求相对 应的已解析后的 HTML 的流程图, 该流程具体包括 :
     步 骤 701, 通 过 parser extension 接 口 判 断 URL 类 型 (url_type) 是 否 为 获 取 (GET), 若是, 则执行步骤 702, 否则结束 ;
     步骤 702, 解析服务器根据前台业务框架的设置的指示参数, 判断是否需要缓存, 若是, 则执行步骤 703, 否则结束 ;
     步骤 703, 根据 url_paras 数组生成缓存关键值 (cache key), 该 cache key 包括 应用模块的标识 (modul) 长度、 内容哈希码 (hashcode) ;
     步骤 704, 根据 cache key 判断缓存中是否已经存在待缓存的内容, 若是, 则返回 缓存的内容, 然后结束, 否则直接结束。
     参见图 8, 其是根据本申请实施例的将 HTML 页面存入缓存服务器的流程图 ; 该流 程包括 :
     步骤 801, 解析服务器获得通过抓取得到的页面 ;
     步骤 802, 解析服务器判断所抓取返回的页面是否正确, 即状态是否为 200, 若是, 则执行步骤 803, 否则结束 ;
     步骤 803, 解析服务器获取缓存控制字段 (cache-control) ;
     步骤 804, 判断抓取得到页面的 url_type 是否为 GET, 若是, 则执行步骤 805, 否则 结束 ;步骤 805, 判断 cache-control 所表示的信息是否允许缓存, 若是, 则执行步骤 807, 否则执行步骤 806 ;
     步骤 806, 将解析后内容按照 cache key 所指示的位置进行缓存, 结束 ;
     步骤 807, 将解析后内容按照 cache key 所指示的位置进行缓存, 并返回给用户终 端。
     也就是说, 将 HTML 页面存入缓存服务器的步骤是判断是否满足预设的缓存要求, 若满足, 再按照已生成的缓存关键值所指示的位置进行缓存 ; 该预设的缓存要求包括 : 所 抓取的页面正确, 该页面 URL 的类型为 GET, 且 cache-control 所表示的信息是否允许缓存。
     参见图 9, 其是将 HTML 所支持的类型样式和脚本存入缓存服务器的流程图, 具体 包括 :
     步骤 901 ~ 907, 分别获取类型样式标签和脚本标签所对应的 URL 和内容 ;
     步骤 908, 根据应用路径 (app_path), 获取所述内容的长度及内容的哈希值, 根据 所述长度及哈希值生成缓存关键值 (cache key) ;
     步骤 909, 判断 cache key 是否已被缓存, 若是, 则执行步骤 912, 否则执行步骤 910 ;
     步骤 910, 对所述内容进行语法检查并生成用于转换的中间代码, 并把中间代码存 储到缓存中 ;
     步骤 911, 将所述中间代码加入到所述类型样式标签和脚本标签所对应的内容中, 获得转换后的类型样式标签和脚本标签 ;
     步骤 912, 在所述转换后的类型样式标签和脚本标签中插入用于区别标记语言页 面的符号。
     本申请的 TBML Parser 与现有的 FBML Parse 的比较结果如表 3 所示 :
     表3
     FBML Parser 程序语言 开源 扩展方式 标签扩展性 效率 PHP 大部分开放 PHP 扩展模块 方便 一般TBML Parser C 否 PHP 扩展模块 方便 高缓存公布的代码中没有有21102053994 A CN 102054001说安全 一般明书高18/19 页HTML 标签支持
     齐全比较齐全可见, 本申请中的 Parser 比现有技术中的 FBML Parser 具有更高的效率和安全 性, 在实际应用中更可靠, 更方便。
     本申请实施例还提供了一种用于电子商务的语言解析服务器, 参见图 10, 具体包 括:
     判断模块 1001, 用于通过前台业务框架接受来自用户终端的应用请求, 判断出缓 存服务器内不存在与所述应用请求相对应的已解析后的第二语言时, 通知抓取模块 ;
     抓取模块 1002, 用于根据接收到的通知抓取所述应用请求所对应的页面 ;
     转换模块 1003, 用于通过编译语言将抓取到页面内第一语言所采用的标签、 类型 样式及 JavaScript 脚本转换成第二语言所支持的标签、 类型样式及 JavaScript 脚本, 获得 转换后的第二语言 ;
     缓存模块 1004, 用于将转换后的第二语言存入缓存服务器 ; 传送模块 1005, 用于通过前台业务框架将缓存服务器中的第二语言传送给用户终 上述转换模块 1003 还可以包括 : 过滤模块, 用于过滤掉第一语言中的第一类字符 ; 构造模块, 用于构造缓冲区 ; 分割模块, 用于将第一语言中的所有应用进行分块处理, 令每个应用对应一个模端。
     块; 处理模块, 用于将所述每个模块中的第一语言所采用的标签都处理为第二语言所 支持的标签, 将处理后的第二语言所支持的标签存入所述缓冲区 ;
     合并模块, 用于将第一语言中分散在不同位置的所有类型样式进行合并, 将合并 后的类型样式存入所述缓冲区的最后位置 ;
     写入模块, 用于将缓冲区中的内容写入缓存服务器中。
     上述缓存模块 1004 可以具体包括 :
     页面缓存模块, 用于将第二语言的标记语言页面存入缓存服务器 ; 类型样式和脚本缓存模块, 用于将第二语言所支持的类型样式和脚本存入缓存服务器。 上述判断模块, 还用于判断出缓存服务器中存在与所述应用请求相对应的已解析 后的第二语言时, 通知传送模块。
     上述第一语言为 TBML, 第二语言为 HTML。
     需要说明的是, 在本文中, 诸如第一和第二等之类的关系术语仅仅用来将一个实 体或者操作与另一个实体或操作区分开来, 而不一定要求或者暗示这些实体或操作之间存 在任何这种实际的关系或者顺序。而且, 术语 “包括” 、 “包含” 或者其任何其他变体意在涵 盖非排他性的包含, 从而使得包括一系列要素的过程、 方法、 物品或者设备不仅包括那些要
     素, 而且还包括没有明确列出的其他要素, 或者是还包括为这种过程、 方法、 物品或者设备 所固有的要素。在没有更多限制的情况下, 由语句 “包括一个 ......” 限定的要素, 并不排 除在包括所述要素的过程、 方法、 物品或者设备中还存在另外的相同要素。
     为了描述的方便, 描述以上装置时以功能分为各种单元分别描述。 当然, 在实施本 申请时可以把各单元的功能在同一个或多个软件和 / 或硬件中实现。
     通过以上的实施方式的描述可知, 本领域的技术人员可以清楚地了解到本申请可 借助软件加必需的通用硬件平台的方式来实现。基于这样的理解, 本申请的技术方案本质 上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来, 该计算机软件产品 可以存储在存储介质中, 如 ROM/RAM、 磁碟、 光盘等, 包括若干指令用以使得一台计算机设备 ( 可以是个人计算机, 服务器, 或者网络设备等 ) 执行本申请各个实施例或者实施例的某些 部分所述的方法。
     本说明书中的各个实施例均采用递进的方式描述, 各个实施例之间相同相似的部 分互相参见即可, 每个实施例重点说明的都是与其他实施例的不同之处。 尤其, 对于系统实 施例而言, 由于其基本相似于方法实施例, 所以描述的比较简单, 相关之处参见方法实施例 的部分说明即可。
     本申请可用于众多通用或专用的计算系统环境或配置中。 例如 : 个人计算机、 服务 器计算机、 手持设备或便携式设备、 平板型设备、 多处理器系统、 基于微处理器的系统、 置顶 盒、 可编程的消费电子设备、 网络 PC、 小型计算机、 大型计算机、 包括以上任何系统或设备的 分布式计算环境等等。
     本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述, 例如程序 模块。 一般地, 程序模块包括执行特定任务或实现特定抽象数据类型的例程、 程序、 对象、 组 件、 数据结构等等。也可以在分布式计算环境中实践本申请, 在这些分布式计算环境中, 由 通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中, 程序模块可以 位于包括存储设备在内的本地和远程计算机存储介质中。
     以上所述仅为本申请的较佳实施例而已, 并非用于限定本申请的保护范围。凡在 本申请的精神和原则之内所作的任何修改、 等同替换、 改进等, 均包含在本申请的保护范围 内。

一种语言解析器和应用该解析器的解析方法.pdf_第1页
第1页 / 共32页
一种语言解析器和应用该解析器的解析方法.pdf_第2页
第2页 / 共32页
一种语言解析器和应用该解析器的解析方法.pdf_第3页
第3页 / 共32页
点击查看更多>>
资源描述

《一种语言解析器和应用该解析器的解析方法.pdf》由会员分享,可在线阅读,更多相关《一种语言解析器和应用该解析器的解析方法.pdf(32页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102053994A43申请公布日20110511CN102053994ACN102053994A21申请号200910211716522申请日20091110G06F17/30200601G06F9/44200601G06Q30/0020060171申请人阿里巴巴集团控股有限公司地址英属开曼群岛大开曼岛资本大厦一座四层847号邮箱72发明人余庆王社安李永74专利代理机构北京集佳知识产权代理有限公司11227代理人马敬逯长明54发明名称一种语言解析器和应用该解析器的解析方法57摘要本申请公开了一种语言解析器和解析方法,所述方法包括解析服务器通过前台业务框架接受来自用户终端的应。

2、用请求,判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,抓取所述应用请求所对应的页面;所述解析服务器将抓取到页面内第一语言所采用的标签、类型样式及JAVASCRIPT脚本转换成第二语言所支持的标签、类型样式及JAVASCRIPT脚本,获得转换后的第二语言,将转换后的第二语言存入缓存服务器;所述解析服务器通过前台业务框架将缓存服务器中的第二语言传送给用户终端。应用本申请,不但确保了解析的安全性,还提高了解析效率。而且,更好的支持网站平台的应用扩展和第三方开发,使得扩展更方便。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书3页说明书19页附图9页CN1。

3、02054001A1/3页21一种语言解析方法,其特征在于,包括解析服务器通过前台业务框架接受来自用户终端的应用请求,判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,抓取所述应用请求所对应的页面;所述解析服务器通过编译语言将抓取到页面内第一语言所采用的标签、类型样式及JAVASCRIPT脚本转换成第二语言所支持的标签、类型样式及JAVASCRIPT脚本,获得转换后的第二语言,将转换后的第二语言存入缓存服务器;所述解析服务器通过前台业务框架将缓存服务器中的第二语言传送给用户终端。2根据权利要求1所述的方法,其特征在于,所述来自用户终端的应用请求中包括URL;所述解析服务器判断。

4、出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,抓取所述应用请求所对应的页面的步骤具体包括通过URL判断缓存服务器内是否存在与所述URL相对应的已解析后的第二语言,若不存在,则抓取与所述URL对应的页面。3根据权利要求1所述的方法,其特征在于,所述将第一语言所采用的标签和类型样式转换成第二语言所支持的标签和类型样式的步骤包括过滤掉第一语言中的第一类字符;构造缓冲区;将第一语言中的所有应用进行分块处理,令每个应用对应一个模块;将所述每个模块中的第一语言所采用的标签都处理为第二语言所支持的标签,将处理后的第二语言所支持的标签存入所述缓冲区;将第一语言中分散在不同位置的所有类型样式进。

5、行合并,将合并后的类型样式存入所述缓冲区的最后位置;将缓冲区中的内容写入缓存服务器中。4根据权利要求3所述的方法,其特征在于,将一个模块中的第一语言所采用的标签都处理为第二语言所支持的标签的步骤包括遍历第一语言中的字符串,如果获取到一个合法的标签,则如果所述合法的标签是闭合标签,则当其不是第一语言所特有的标签,且在栈中有匹配的开始标签时,在缓冲区中追加标签闭合字符,并让所述开始标签出栈;如果所述合法标签是非闭合标签,则当所述非闭合标签是第一语言所特有的标签时,调用该标签所对应的处理函数进行处理,之后,返回遍历第一语言中的字符串的步骤;当所述非闭合标签不是第一语言所特有的标签且有与之对应的回调函。

6、数时,调用该标签所对应的回调函数进行处理,之后,返回遍历第一语言中的字符串的步骤;当所述非闭合标签不是第一语言所特有的标签且没有与之对应的回调函数时,在缓冲区追加标签开始字符,并判断所述不是第一语言所特有的标签且没有与之对应的回调函数的非闭合标签是否需要闭合,若需要,则将当前标签放入栈中,若不需要,返回遍历第一语言中的字符串的步骤。5根据权利要求1所述的方法,其特征在于,所述将第一语言所采用的JAVASCRIPT脚本转换成第二语言所支持的JAVASCRIPT脚本的步骤包括初始化一用于存储TBJS各个标志TOKEN的链表;权利要求书CN102053994ACN102054001A2/3页3将第一。

7、语言所采用的JAVASCRIPT脚本解析为各个TOKEN,并解析出每个TOKEN的类型;检查第一语言所采用的JAVASCRIPT脚本是否符合预设的框架格式要求,若符合,转换为第一语言所采用的JAVASCRIPT脚本框架语法,之后,遍历所述链表,根据链表中TOKEN的类型作相应处理,将所述链表中的各个TOKEN转换为第二语言所支持的JAVASCRIPT脚本。6根据权利要求1所述的方法,其特征在于,所述将转换后的第二语言存入缓存服务器的步骤包括01根据前台业务框架的设置,判断是否需要将所述转换后的第二语言存入缓存服务器,若是,再执行步骤02;02将第二语言的标记语言页面存入缓存服务器;03将第二语。

8、言所支持的类型样式和JAVASCRIPT脚本存入缓存服务器。7根据权利要求6所述的方法,其特征在于,将第二语言的标记语言页面存入缓存服务器的步骤包括判断是否满足预设的缓存要求,若满足,再按照已生成的缓存关键值所指示的位置进行缓存;所述预设的缓存要求包括所抓取的页面正确,且该页面URL的请求类型为GET。8根据权利要求6所述的方法,其特征在于,将第二语言所支持的类型样式和脚本存入缓存服务器的步骤包括分别获取类型样式标签和脚本标签所对应的URL和内容;根据应用路径,获取所述内容的长度及内容的哈希值,根据所述长度及哈希值生成缓存关键值;对所述内容进行语法检查并生成用于转换的中间代码;将所述中间代码加。

9、入到所述类型样式标签和脚本标签所对应的内容中,获得转换后的类型样式标签和脚本标签;缓存所述转换后的类型样式标签和脚本标签;在所述转换后的类型样式标签和脚本标签中插入用于区别标记语言页面的符号。9根据权利要求1所述的方法,其特征在于,所述方法还包括在解析服务器判断出缓存服务器中存在与所述应用请求相对应的已解析后的第二语言时,将所述缓存服务器中的第二语言通过前台业务框架传送给用户终端。10根据权利要求19任一所述的方法,其特征在于,所述第一语言为TBML,第二语言为HTML。11根据权利要求10所述的方法,其特征在于,所述前台业务框架通过PHP扩展的方式与用户终端进行交互;所述解析服务器所执行的转。

10、换操作由C语言实现。12一种语言解析服务器,其特征在于,包括判断模块,用于通过前台业务框架接受来自用户终端的应用请求,判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,通知抓取模块;抓取模块,用于根据接收到的通知抓取所述应用请求所对应的页面;转换模块,用于通过编译语言将抓取到页面内第一语言所采用的标签、类型样式及JAVASCRIPT脚本转换成第二语言所支持的标签、类型样式及JAVASCRIPT脚本,获得转换后权利要求书CN102053994ACN102054001A3/3页4的第二语言;缓存模块,用于将转换后的第二语言存入缓存服务器;传送模块,用于通过前台业务框架将缓存服务器。

11、中的第二语言传送给用户终端。13根据权利要求12所述的语言解析服务器,其特征在于,所述转换模块包括过滤模块,用于过滤掉第一语言中的第一类字符;构造模块,用于构造缓冲区;分割模块,用于将第一语言中的所有应用进行分块处理,令每个应用对应一个模块;处理模块,用于将所述每个模块中的第一语言所采用的标签都处理为第二语言所支持的标签,将处理后的第二语言所支持的标签存入所述缓冲区;合并模块,用于将第一语言中分散在不同位置的所有类型样式进行合并,将合并后的类型样式存入所述缓冲区的最后位置;写入模块,用于将缓冲区中的内容写入缓存服务器中。14根据权利要求12所述的语言解析服务器,其特征在于,所述缓存模块包括页面。

12、缓存模块,用于将第二语言的标记语言页面存入缓存服务器;类型样式和脚本缓存模块,用于将第二语言所支持的类型样式和脚本存入缓存服务器。15根据权利要求12所述的语言解析服务器,其特征在于,所述判断模块,还用于判断出缓存服务器中存在与所述应用请求相对应的已解析后的第二语言时,通知传送模块。16根据权利要求1215任一所述的语言解析服务器,其特征在于,所述第一语言为TBML,第二语言为HTML。权利要求书CN102053994ACN102054001A1/19页5一种语言解析器和应用该解析器的解析方法技术领域0001本申请涉及计算机软件技术领域,特别涉及一种语言解析器和应用该解析器的解析方法。背景技术。

13、0002API开放平台提供了访问数据的开放接口。购物网站可以被理解为一种API开放平台,其可以满足商家快速、个性建站的需求,可以方便商家建立外部网店的一个系统。商家可以使用这个开发平台,更好的塑造自己的品牌。第三方可以基于这个开放平台,开发第三方应用,满足用户的需求,同时实现自己的价值。0003如果第三方开发者基于HTML直接在购物网站平台上开发应用,因为HTML的灵活性,安全性得不到保证,同时因为HTML的限制性,又不能方便的使用旺店内部的数据,这便诞生了淘宝扩展HTML标记语言TBML。它既可以保证第三方开发者开发的安全性、灵活性,又提供了一个访问淘宝内部数据的通道。但TBML语言并不能在。

14、用户浏览器中直接解析展现。0004现有的FBML的解析器PARSER是美国著名的社交网站FACEBOOK的后端模块,其所采用的语言为FBML语言。FBML的PARSER实现机理如下0005核心的算法由MOZILLA引擎和自定义的SINK模块FBMLCONTENTSINK完成;其中,MOZILLA是一个为标准的兼容性,跨平台性和可移植特性而设计的一个开放源码WEB浏览器和工具包;0006PARSER以PHP扩展PHP,PERSONALHOMEPAGES模块的方式提供使用;0007FB标签的扩展,渲染以及整个HTML文档的重构则在PHP层面进行。0008页面的渲染过程其实就是一个以深度优先遍历一颗。

15、文档对象模型DOM,DOCUMENTOBJECTMODEL树的过程,遇到特殊节点时调用相应的回调函数进行渲染,例如CSS,JS以及FB自定义标签等回调函数可以用PHP编写,通过PHP模块提供给MOZILLA引擎使用。0009从上述实现机理可知,FBML的PARSER底层使用MOZILLAPARSER,虽然该引擎成熟稳定,功能强大,可大大减少程序员开发工作,但由于将解析和转换过程独立开,增加了灵活性同时降低了效率;虽然通过PHP的反射机制动态扩展标签而无需重新编译,但由于大量工作在PHP层面进行,存在效率问题,例如反射机制的使用。0010FACEBOOK的FBMLPARSER是针对于交友网络的,。

16、对商务开放平台需要改造很多;FBML在安全性上要求不严格,会造成HTML注入漏洞;页面渲染等工作在PHP层面完成,效率较低,影响性能。发明内容0011本申请实施例在于提供一种语言解析器和应用该解析器的解析方法,不但能确保解析的安全性,还能够提高解析效率。0012本发明实施例提供了一种语言解析方法,包括说明书CN102053994ACN102054001A2/19页60013解析服务器通过前台业务框架接受来自用户终端的应用请求,判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,抓取所述应用请求所对应的页面;0014所述解析服务器通过编译语言将抓取到页面内第一语言所采用的标签、类。

17、型样式及JAVASCRIPT脚本转换成第二语言所支持的标签、类型样式及JAVASCRIPT脚本,获得转换后的第二语言,将转换后的第二语言存入缓存服务器;0015所述解析服务器通过前台业务框架将缓存服务器中的第二语言传送给用户终端。0016其中,所述来自用户终端的应用请求中包括URL;0017所述解析服务器判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,抓取所述应用请求所对应的页面的步骤具体包括0018通过URL判断缓存服务器内是否存在与所述URL相对应的已解析后的第二语言,若不存在,则抓取与所述URL对应的页面。0019其中,所述将第一语言所采用的标签和类型样式转换成第二语。

18、言所支持的标签和类型样式的步骤包括0020过滤掉第一语言中的第一类字符;0021构造缓冲区;0022将第一语言中的所有应用进行分块处理,令每个应用对应一个模块;0023将所述每个模块中的第一语言所采用的标签都处理为第二语言所支持的标签,将处理后的第二语言所支持的标签存入所述缓冲区;0024将第一语言中分散在不同位置的所有类型样式进行合并,将合并后的类型样式存入所述缓冲区的最后位置;0025将缓冲区中的内容写入缓存服务器中。0026其中,将一个模块中的第一语言所采用的标签都处理为第二语言所支持的标签的步骤包括0027遍历第一语言中的字符串,0028如果获取到一个合法的标签,则0029如果所述合法。

19、的标签是闭合标签,则当其不是第一语言所特有的标签,且在栈中有匹配的开始标签时,在缓冲区中追加标签闭合字符,并让所述开始标签出栈;0030如果所述合法标签是非闭合标签,则当所述非闭合标签是第一语言所特有的标签时,调用该标签所对应的处理函数进行处理,之后,返回遍历第一语言中的字符串的步骤;当所述非闭合标签不是第一语言所特有的标签且有与之对应的回调函数时,调用该标签所对应的回调函数进行处理,之后,返回遍历第一语言中的字符串的步骤;当所述非闭合标签不是第一语言所特有的标签且没有与之对应的回调函数时,在缓冲区追加标签开始字符,并判断所述不是第一语言所特有的标签且没有与之对应的回调函数的非闭合标签是否需要。

20、闭合,若需要,则将当前标签放入栈中,若不需要,返回遍历第一语言中的字符串的步骤。0031其中,所述将第一语言所采用的JAVASCRIPT脚本转换成第二语言所支持的JAVASCRIPT脚本的步骤包括0032初始化一用于存储TBJS各个标志TOKEN的链表;0033将第一语言所采用的JAVASCRIPT脚本解析为各个TOKEN,并解析出每个TOKEN的说明书CN102053994ACN102054001A3/19页7类型;0034检查第一语言所采用的JAVASCRIPT脚本是否符合预设的框架格式要求,若符合,转换为第一语言所采用的JAVASCRIPT脚本框架语法,之后,遍历所述链表,根据链表中TO。

21、KEN的类型作相应处理,将所述链表中的各个TOKEN转换为第二语言所支持的JAVASCRIPT脚本。0035其中,所述将转换后的第二语言存入缓存服务器的步骤包括003601根据前台业务框架的设置,判断是否需要将所述转换后的第二语言存入缓存服务器,若是,再执行步骤02;003702将第二语言的标记语言页面存入缓存服务器;003803将第二语言所支持的类型样式和JAVASCRIPT脚本存入缓存服务器。0039其中,将第二语言的标记语言页面存入缓存服务器的步骤包括0040判断是否满足预设的缓存要求,若满足,再按照已生成的缓存关键值所指示的位置进行缓存;0041所述预设的缓存要求包括所抓取的页面正确,。

22、且该页面URL的请求类型为GET。0042其中,将第二语言所支持的类型样式和脚本存入缓存服务器的步骤包括0043分别获取类型样式标签和脚本标签所对应的URL和内容;0044根据应用路径,获取所述内容的长度及内容的哈希值,根据所述长度及哈希值生成缓存关键值;0045对所述内容进行语法检查并生成用于转换的中间代码;0046将所述中间代码加入到所述类型样式标签和脚本标签所对应的内容中,获得转换后的类型样式标签和脚本标签;0047缓存所述转换后的类型样式标签和脚本标签;0048在所述转换后的类型样式标签和脚本标签中插入用于区别标记语言页面的符号。0049其中,所述方法还包括在解析服务器判断出缓存服务器。

23、中存在与所述应用请求相对应的已解析后的第二语言时,将所述缓存服务器中的第二语言通过前台业务框架传送给用户终端。0050其中,其特征在于,所述第一语言为TBML,第二语言为HTML。0051其中,所述前台业务框架通过PHP扩展的方式与用户终端进行交互;所述解析服务器所执行的转换操作由C语言实现。0052本发明实施例还提供了一种语言解析服务器,包括0053判断模块,用于通过前台业务框架接受来自用户终端的应用请求,判断出缓存服务器内不存在与所述应用请求相对应的已解析后的第二语言时,通知抓取模块;0054抓取模块,用于根据接收到的通知抓取所述应用请求所对应的页面;0055转换模块,用于通过编译语言将抓。

24、取到页面内第一语言所采用的标签、类型样式及JAVASCRIPT脚本转换成第二语言所支持的标签、类型样式及JAVASCRIPT脚本,获得转换后的第二语言;0056缓存模块,用于将转换后的第二语言存入缓存服务器;0057传送模块,用于通过前台业务框架将缓存服务器中的第二语言传送给用户终端。0058其中,所述转换模块包括说明书CN102053994ACN102054001A4/19页80059过滤模块,用于过滤掉第一语言中的第一类字符;0060构造模块,用于构造缓冲区;0061分割模块,用于将第一语言中的所有应用进行分块处理,令每个应用对应一个模块;0062处理模块,用于将所述每个模块中的第一语言所。

25、采用的标签都处理为第二语言所支持的标签,将处理后的第二语言所支持的标签存入所述缓冲区;0063合并模块,用于将第一语言中分散在不同位置的所有类型样式进行合并,将合并后的类型样式存入所述缓冲区的最后位置;0064写入模块,用于将缓冲区中的内容写入缓存服务器中。0065其中,所述缓存模块包括0066页面缓存模块,用于将第二语言的标记语言页面存入缓存服务器;0067类型样式和脚本缓存模块,用于将第二语言所支持的类型样式和脚本存入缓存服务器。0068其中,所述判断模块,还用于判断出缓存服务器中存在与所述应用请求相对应的已解析后的第二语言时,通知传送模块。0069其中,所述第一语言为TBML,第二语言为。

26、HTML。0070应用本申请,不但确保了解析的安全性,还提高了解析效率。而且,更好的支持购物网站平台的应用扩展和第三方开发,使得扩展更方便。由于对第三方应用实现了代码级的监控,所以能够严格、适当、有效的控制第三方应用,保证购物网站平台的健壮和安全性。附图说明0071为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。0072图1是根据本申请实施例的TBML解析器的网络示意图;0073图2是根据本申请实施例的解析服务器。

27、的逻辑层示意图;0074图3是根据本申请实施例的语言解析方法流程图;0075图4是根据本申请实施例的将TBML所采用的标签和类型样式转换成HTML所支持的标签和类型样式的流程图;0076图5是根据本申请实施例的将一个模块中的TBML所采用的标签都处理为HTML所支持的标签的处理流程图,即步骤404的详细处理流程图;0077图6是根据本申请实施例的将TBML所采用的JAVASCRIPT脚本转换成HTML所支持的JAVASCRIPT脚本的流程图;0078图7是根据本申请实施例的判断缓存服务器内是否存在与应用请求相对应的已解析后的HTML的流程图;0079图8是根据本申请实施例的将HTML页面存入缓。

28、存服务器的流程图;0080图9是将HTML所支持的类型样式和脚本存入缓存服务器的流程图;0081图10是根据本申请实施例的用于电子商务的解析服务器的逻辑结构示意图。说明书CN102053994ACN102054001A5/19页9具体实施方式0082下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。0083为了更好的说明本申请,下面先对TBML做一简单介绍。0084TBMLTAOBAOM。

29、ARKUPLANGUAGE,是一种HTML商务扩展标记语言,是基于超文本标记语言HTML,HYPERTEXTMARKUPLANGUAGE子集进行扩展后的标记语言。0085TBML包含两种类型的标签或元素0086标准HTML标签TBML支持绝大部分常用的HTML标签和属性,不支持的标签和属性如下0087不支持在浏览器中引用外部对象的标签,如、等;0088不支持HTML401中弃用的标签,如、等;0089部分支持样式相关属性如BORDER、BGCOLOR、COLOR等;0090不支持极少数会使用到的属性,如CHARSET、CHAR、CLEAR、ISMAP等;0091TBML扩展标签用来表示购物网站。

30、的网页中特殊的数据或组件,这些标签以TB开头。如等,这部分标签将逐步提供。0092TBJSTAOBAOJAVASCRIPT,可以称为淘宝JAVASCRIPT脚本,是基于JAVASCRIPT脚本JAVASCRIPT子集进行扩展后的标记语言。TBJS是为在下一代电子商务平台NCP,NEXTCOMMERCEPLATFORM版外部网店平台上开发应用程序的开发者提供支持JAVASCRIPT的解决方案。其中,JAVASCRIPT是一种由NETSCAPE的LIVESCRIPT发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言。0093TBML支持的标签及其属性如表1所示0094表10095。

31、标签名称属性AHREF,NAME,REL,TARGET,TYPE,TITLE,ID,DIR,CLASS,STYLEABBRTITLE,ID,DIR,CLASS,STYLEACRONYMTITLE,ID,DIR,CLASS,STYLEADDRESSTITLE,ID,DIR,CLASS,STYLEAREAID,CLASS,HREF,ALT,SHAPE,COORDS,TARGET,STYLEBTITLE,ID,DIR,CLASS,STYLE说明书CN102053994ACN102054001A6/19页10BDOTITLE,ID,CLASS,STYLE,DIRBIGTITLE,ID,DIR,CLAS。

32、S,STYLEBLOCKQUOTETITLE,ID,DIR,CLASS,STYLE,CITEURLBRTITLE,ID,CLASS,STYLEBUTTONDISABLED,NAME,TYPE,VALUE,TITLE,ID,DIR,CLASS,STYLE,TABINDEX,SIZECAPTIONTITLE,ID,DIR,CLASS,STYLE,ALIGN,SPANCENTERTITLE,ID,CLASSCITETITLE,ID,DIR,CLASS,STYLECOLALIGN,SPAN,VALIGN,TITLE,ID,DIR,CLASS,STYLECOLGROUPALIGN,SPAN,VALIGN。

33、,WIDTH,TITLE,ID,DIR,CLASS,STYLEDDTITLE,ID,DIR,CLASS,STYLEDELDATETIME,TITLE,ID,DIR,CLASS,STYLE,CITEURLDFNTITLE,ID,DIR,CLASS,STYLEDIVTITLE,ID,DIR,CLASS,STYLE,ALIGNDLTITLE,ID,DIR,CLASS,STYLEDTTITLE,ID,DIR,CLASS,STYLEEMTITLE,ID,DIR,CLASS,STYLEEMBEDSRC,WIDTH,HEIGHT,WMODE,VAR,STYLE,FLASHVARS,QUALITY,ID,NA。

34、ME,TYPEALLOWNETWORKING强制写为INTERNAL,ALLOWSCRIPTACCESS强制写为NEYERFIELDSETTITLE,ID,DIR,CLASS,STYLEFONTTITLE,ID,CLASS,FACE,SIZE,COLOR,STYLEFORMACTION,ENCTYPE,METHOD,TARGET,TITLE,ID,DIR,CLASS,STYLEH1TITLE,ID,DIR,CLASS,STYLE,ALIGN说明书CN102053994ACN102054001A7/19页11H2TITLE,ID,DIR,CLASS,STYLE,ALIGNH3TITLE,ID,D。

35、IR,CLASS,STYLE,ALIGNH4TITLE,ID,DIR,CLASS,STYLE,ALIGNH5TITLE,ID,DIR,CLASS,STYLE,ALIGNH6TITLE,ID,DIR,CLASS,STYLE,ALIGNHRSIZE,WIDTH,TITLE,ID,CLASS,STYLE,HEIGHT,NOSHADEITITLE,ID,DIR,CLASS,STYLEIMGALT,HEIGHT,SRC,WIDTH,TITLE,ID,DIR,CLASS,STYLE,BORDER,USEMAP,ALIGN,VALIGN,VSPACE,HSPACEINPUTALT,CHECKED,DISAB。

36、LED,MAXLENGTH,NAME,READONLY,SIZE,SRC,TYPE,VALUE,TITLE,ID,DIR,CLASS,STYLE,TABINDEX,USEMAPINSDATETIME,TITLE,ID,DIR,CLASS,STYLE,CITEURLKBDTITLE,ID,DIR,CLASS,STYLELABELTITLE,ID,DIR,CLASS,STYLE,FORLEGENDTITLE,ID,DIR,CLASS,STYLE1ITYPE,TITLE,ID,DIR,CLASS,STYLELINKHREF,STYLE,REL,TYPEMAPNAME,TITLE,ID,DIR,CLA。

37、SS,STYLENOBRCLASS,ID,TITLE,STYLENOSCRIPTTITLE,ID,DIR,CLASS,STYLEOLTYPE,TITLE,ID,DIR,CLASS,STYLEOPTGROUPDISABLED,LABEL,TITLE,ID,DIR,CLASS,STYLE说明书CN102053994ACN102054001A8/19页12OPTIONDISABLED,LABEL,SELECTED,VALUE,TITLE,ID,DIR,CLASS,STYLEPTITLE,ID,DIR,CLASS,STYLE,ALIGNQTITLE,ID,DIR,CLASS,STYLE,CITEURL。

38、STITLE,ID,CLASSSCRIPTSRC,TYPESELECTDISABLED,MULTIPLE,NAME,SIZE,TITLE,ID,DIR,CLASS,STYLE,TABINDEXSMALLTITLE,ID,DIR,CLASS,STYLESPANTITLE,ID,DIR,CLASS,STYLESTRIKETITLE,ID,CLASSSTRONGTITLE,ID,DIR,CLASS,STYLESTYLEMEDIA,TYPE,DIRSUBTITLE,ID,DIR,CLASS,STYLESUPTITLE,ID,DIR,CLASS,STYLETABLEBORDER,CELLPADDING,。

39、CELLSPACING,SUMMARY,WIDTH,TITLE,ID,DIR,CLASS,STYLE,BGCOLOR,BACKGROUND,HEIGHT,ALIGN,VALIGN,COLORTBODYALIGN,VALIGN,TITLE,ID,DIR,CLASS,STYLE,BGCOLORTDABBR,ALIGN,COLSPAN,HEADERS,ROWSPAN,SCOPE,VALIGN,WIDTH,TITLE,ID,DIR,CLASS,STYLE,BGCOLOR,BACKGROUND,HEIGHTTEXTAREACOLS,DISABLED,NAME,READONLY,ROWS,TITLE,ID。

40、,DIR,CLASS,STYLE,WRAPSOFT|HARD|OFF,TABINDEX132767TFOOTALIGN,VALIGN,TITLE,ID,DIR,CLASS,STYLE,BGCOLORTHABBR,ALIGN,COLSPAN,HEADERS,ROWSPAN,SCOPE,VALIGN,WIDTH,TITLE,ID,DIR,CLASS,STYLE,BGCOLOR,BACKGROUND,HEIGHT说明书CN102053994ACN102054001A9/19页13THEADALIGN,VALIGN,TITLE,ID,DIR,CLASS,STYLE,BGCOLORTITLEDIRTRA。

41、LIGN,VALIGN,TITLE,ID,DIR,CLASS,STYLE,BGCOLOR,BACKGROUND,HEIGHTTTTITLE,ID,DIR,CLASS,STYLEUTITLE,ID,CLASSULTYPE,TITLE,ID,DIR,CLASS,STYLEVARTITLE,ID,DIR,CLASS,STYLE00960097009800990100TBML支持的CSS样式属性如表2所示0101表20102说明书CN102053994ACN102054001A10/19页14ASCENTBACKGROUNDBACKGROUNDATTACHMENTBACKGROUNDCOLORBACK。

42、GROUNDIMAGEBACKGROUNDPOSITIONBACKGROUNDREPEATBORDERBORDERBOTTOMBORDERBOTTOMCOLORBORDERBOTTOMSTYLEBORDERBOTTOMWIDTHBORDERCOLLAPSEBORDERCOLORBORDERLEFTBORDERLEFTCOLORBORDERLEFTSTYLEBORDERLEFTWIDTHBORDERRIGHTBORDERRIGHTCOLORBORDERRIGHTSTYLEBORDERRIGHTWIDTHBORDERSPACINGBORDERSTYLEBORDERTOPBORDERTOPCOLOR。

43、BORDERTOPSTYLEBORDERTOPWIDTHBORDERWIDTHCAPHEIGHTCAPTIONSIDECLEAR说明书CN102053994ACN102054001A11/19页15COLORCOUNTERINCREMENTCOUNTERRESETCURSORDESCENTDIRECTIONDISPLAYEMPTYCELLSFLOATFONTFONTFAMILYFONTSIZEFONTSIZEADJUSTFONTSTRETCHFONTSTYLEFONTVARIANTFONTWEIGHTHEIGHTLETTERSPACINGLINEHEIGHTLISTSTYLELISTSTYLE。

44、IMAGELISTSTYLEPOSITIONLISTSTYLETYPEMARGINMARGINBOTTOMMARGINLEFTMARGINRIGHTMARGINTOPMAXHEIGHTMAXWIDTHMINHEIGHTMINWIDTHORPHANSOUTLINEOUTLINECOLOROUTLINESTYLEOUTLINEWIDTHOVERFLOWX,YPADDING说明书CN102053994ACN102054001A12/19页16PADDINGBOTTOMPADDINGLEFTPADDINGRIGHTPADDINGTOPPANOSE1SLOPESTEMHSTEMVTABLELAYOUTT。

45、EXTALIGNTEXTDECORATIONTEXTINDENTTEXTTRANSFORMUNICODEBIDIVERTICALALIGNVISIBILITYWHITESPACEWIDOWSWIDTHWORDSPACINGWORDBREAKWORDWRAPWRITINGMODEXHEIGHT说明书CN102053994ACN102054001A13/19页1701030104TBML具有如下优点0105扩展方便更好的支持购物网站平台的应用扩展和第三方开发;0106解析快速采用编译语言C实现解析,响应速度更迅速;0107内嵌缓存实现了缓存机制,提高应用的响应速度并减轻应用服务器压力;0108安全。

46、严格对第三方应用实现了代码级的监控,严格、适当、有效的控制第三方应用保证旺店平台的健壮和安全;0109淘宝建站中用TBML来定义应用要展示的内容。应用回调接口输出的内容必须以TBML的形式返回给淘宝旺店,淘宝站点的前台业务框架再将TBML转换为HTML并嵌入最终页面。0110本申请所涉及的语言解析器PARSER,是基于第一语言的扩展标记语言解析器,可以将第一语言转化为第二语言,这里,第一语言是指TBML/TBJS,第二语言是指HTML/JAVASCRIPT。0111简单而言,TBML是基于HTML子集进行扩展后的标记语言,也就是说TBML只支持部分最常用的HTML标记,同时增加了TBML支持而。

47、HTML不支持的标记。0112TBJS是为第三方的应用程序开发者提供支持JAVASCRIPT的解决方案。出于安全方面的考虑,本发明对原生的JAVASCRIPT做了一些限制,也就是说必须按照指定的规则写JAVASCRIPT代码。0113参见图1,其是根据本申请实施例的TBML解析器的网络示意图;本实施例中,解析服务器102通过前台业务框架接受来自用户终端101的应用请求,如果解析服务器102确定缓存服务器104中存在与所述应用请求对应的已解析后的第二语言,则将该第二语言通过前台业务框架发送给用户终端101,如果不存在,则从应用服务器103中抓取与所述应用请求对应的页面,将抓取到页面内第一语言所采。

48、用的标签、类型样式及JAVASCRIPT脚本转换成第二语言所支持的标签、类型样式及JAVASCRIPT脚本,获得转换后的第二语言,将转换后的第二语言存入缓存服务器104;之后,再从缓存服务器104中获取与应用请求对应已解析后的第二语言,通过前台业务框架传送给用户终端101。0114上述抓取操作可以通过CURL工具一个开源的抓取页面的工具实现,缓存服务器可以通过现有的MEMCACHE的分布式缓存工具实现,也可以通过自开发的FASTDHT缓存工具实现。0115参见图2,其是根据本申请实施例的解析服务器的逻辑层示意图;PARSER是用C语言开发的一个SO文件,通过PHP扩展EXTENSION的方式由。

49、前台页面框架调用。解析器内核PARSERCORE是一个共享的函数库或称为共享程序库。PARSER还包括抓取工具和缓存工具。其中,SO文件是一个UNIX的动态连接库,是二进制文件,相当于WINDOWS下的DLL文件。0116参见图3,其是根据本申请实施例的用于电子商务的语言解析方法流程图。本实施例中,解析服务器的框架会把用户请求的应用的各种参数预先传给PARSER,其中,TBML为第一语言,HTML为第二语言,所述流程具体包括0117步骤301,解析服务器通过前台业务框架接受来自用户终端的应用请求,该请求中包含统一资源定位符URL信息;说明书CN102053994ACN102054001A14/19页180118这里,上述应用请求实际就是用户打开一个网页,即一个HTTP页面请求,上述URL指示待访问应用服务器的地址;0119步骤302,判断缓存服务器内是否存在与所述应用请求相对应的已解析后的HTML,若存在,执行步骤306,若不存在,执行步骤303;0120上述判断的具体方式可以是通过URL判断缓存服务器内是否存在与所述URL相对应的已解析后的HTML。0121步骤303,抓取所述应用请求所对应的页面;0122步骤304,解析服务器通过PARSERCORE将TBML转换为HTML,具体的,通过编译语言将抓取到页面内TBML所采用的标签、类型样式及JAVASCRIPT脚本转换。

展开阅读全文
相关搜索



copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1