CN112527297A - 数据处理的方法、装置、设备及存储介质 - Google Patents
数据处理的方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112527297A CN112527297A CN202011536939.1A CN202011536939A CN112527297A CN 112527297 A CN112527297 A CN 112527297A CN 202011536939 A CN202011536939 A CN 202011536939A CN 112527297 A CN112527297 A CN 112527297A
- Authority
- CN
- China
- Prior art keywords
- action
- document object
- preset
- sub
- object tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title abstract description 7
- 238000012545 processing Methods 0.000 claims abstract description 53
- 230000009471 action Effects 0.000 claims description 123
- 238000000034 method Methods 0.000 claims description 76
- 238000004590 computer program Methods 0.000 claims description 11
- 239000012634 fragment Substances 0.000 claims description 11
- 230000015654 memory Effects 0.000 claims description 11
- 230000005856 abnormality Effects 0.000 claims description 3
- 230000000875 corresponding effect Effects 0.000 description 78
- 230000008569 process Effects 0.000 description 27
- 238000011156 evaluation Methods 0.000 description 23
- 238000010586 diagram Methods 0.000 description 19
- 230000014509 gene expression Effects 0.000 description 16
- 239000003795 chemical substances by application Substances 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 13
- 230000003993 interaction Effects 0.000 description 9
- 238000011161 development Methods 0.000 description 8
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 238000013515 script Methods 0.000 description 6
- 238000010367 cloning Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000012854 evaluation process Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000003638 chemical reducing agent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
- G06F16/986—Document structures and storage, e.g. HTML extensions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例公开了一种数据处理的方法、装置、设备及存储介质。首先通过接收混合虚拟标记语言HVML文档;之后根据HVML文档中的元素确定虚拟DOM文档对象树;最后根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。本发明实施例解决了现有技术中存在的编程语言解释器或编译器无法有效对HVML文档进行解释或编译的问题,实现了根据HVML文档生成有效DOM文档对象树。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种数据处理的方法、装置、设备及存储介质。
背景技术
随着互联网技术和网络Web应用的发展,围绕超文本标记语言(Hypertext MarkupLanguage,HTML)/层叠样式表(Cascading Style Sheets,CSS)/Java描述语言(JavaScript)发展出来的Web前端开发技术发展迅猛。
由于虚拟文档对象模型(Document Object Model,DOM)技术中,脚本并不使用脚本程序直接操作真实的DOM树,一方面简化了前端开发的复杂性,另一方面减少了由于动态修改页面内容而对DOM树的频繁操作,从而提高页面的渲染效率和用户体验。此外虚拟DOM,即vDOM技术中,程序对某个数据的修改,还可以直接反应到该数据绑定的页面内容上,开发者无需主动或直接地调用相关接口来操作DOM树,因此降低了开发者的工作量。
但是,现有方案中的编程语言解释器或编译器存在无法有效对HVML文档进行解释或编译的问题。
发明内容
本发明实施例提供了一种数据处理的方法、装置、设备及存储介质,解决了现有技术中存在的编程语言解释器或编译器无法有效对HVML文档进行解释或编译的问题,实现了根据HVML文档生成有效DOM文档对象树。
为了解决上述技术问题,本发明:
第一方面,提供了一种数据处理的方法,该方法包括:
接收混合虚拟标记语言HVML文档;
根据所述HVML文档中的元素确定所述虚拟DOM文档对象树;
根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。
第二方面,提供了一种数据处理的装置,该装置包括:
接收模块,用于接收混合虚拟标记语言HVML文档;
处理模块,用于根据所述HVML文档中的元素确定所述虚拟DOM文档对象树;
所述处理模块,还用于根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。
第三方面,提供了一种电子设备,该设备包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现第一方面的数据处理的方法。
第四方面,提供了一种计算机存储介质,计算机存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现第一方面的数据处理的方法。
本发明实施例中提供的数据处理的方法、装置、设备及存储介质。通过首先接收混合虚拟标记语言HVML文档;之后根据所述HVML文档中的元素确定所述虚拟DOM文档对象树;最后根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。所以解决了现有技术中存在的编程语言解释器或编译器无法有效对HVML文档进行解释或编译的问题,实现了根据HVML文档生成有效DOM文档对象树。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种HVML解释器与用户代理进行数据传递的系统架构图;
图2是本发明实施例提供的一种HVML解释器的系统示意图;
图3是本发明实施例提供的一种数据处理的方法的流程示意图;
图4是本发明实施例提供的一种虚拟DOM文档对象树;
图5是本发明实施例提供的一种eDOM树示意图;
图6是本发明实施例提供的另一种eDOM树示意图;
图7是本发明实施例提供的一种与栈有关的示意图;
图8是本发明实施例构造的一种求值树的示意图;
图9是本发明实施例提供的一种数据处理的装置;
图10是本发明实施例提供的一种计算设备的结构图。
具体实施方式
下面将详细描述本发明的各个方面的特征和示例性实施例,为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本发明,并不被配置为限定本发明。对于本领域技术人员来说,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明更好的理解。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
随着互联网技术和Web应用的发展,围绕HTML/CSS/JavaScript发展出来的Web前端开发技术发展迅猛,甚至可以用“一日千里”来形容。几年前,基于jQuery和Bootstrap的前端框架大行其道,而最近,基于虚拟DOM技术的框架又受到前端开发者的青睐,比如著名的React.js、Vue.js等。值得注意的是,微信小程序、快应用等,也不约而同使用了这种虚拟DOM技术来构建应用框架。
所谓“虚拟DOM”是指前端应用程序通过JavaScript来创建和维护一个虚拟的文档对象树,应用程序并不直接操作真实的DOM树。在虚拟DOM树中,通过一些特别的属性实现了基于数据的一些流程控制,如条件、循环等。虚拟DOM技术提供如下一些好处:
1.由于脚本并不使用脚本程序直接操作真实的DOM树,故而一方面通过现有的框架简化了前端开发的复杂性,另一方面通过优化对真实DOM数的操作而减少了由于动态修改页面内容而对DOM树的频繁操作,从而提高页面的渲染效率和用户体验。
2.通过虚拟DOM技术,程序对某个数据的修改,可以直接反应到该数据绑定的页面内容上,开发者无需主动或直接地调用相关接口来操作DOM树。这种技术提供了所谓的“响应式”编程,极大降低了开发者的工作量。
基于虚拟DOM思想基础上,发明人在开发一款针对物联网及云环境中使用的新一代操作系统的过程中,提出了一种全新的数据驱动的动态标记语言,称为混合虚拟标记语言(Hybrid Virtual Markup Language,HVML),HVML属于一种全新的领域特定语言(domainspecific language,DSL)。
HVML的思想主要来源于虚拟DOM技术,但和Vue.js、小程序、快应用等不同,HVML采用类似可扩展标记语言(Extensible Markup Language,XML)/HTML的语法描述虚拟DOM,通过具有特定语义的动作标签来定义如何生成实际的XML/HTML文档内容,以及如何更新XML/HTML内容。另外,HVML是一种可以脱离浏览器环境使用的编程语言,比如在Python或者C/C++程序中内嵌HVML代码,从而可以让除JavaScript语言之外的其他编程语言可以操作XML/HTML页面内容。
虽然目前,以React.js、Vue.js为代表的前端框架取得了巨大成功,但仍存在如下缺陷和不足:
这些技术建立在已有成熟的Web标准之上,需要完整支持相关前端规范的浏览器才能运行,因此无法应用于其他场合。比如要在Python脚本中使用这类技术,目前没有任何解决方案;再比如在传统的图形用户界面(Graphical User Interface,GUI)应用编程中,也无法使用这一技术带来的好处。
这些技术通过引入v-if、v-else、v-for等虚拟属性实现了基于数据的条件和循环流程控制,但这种方法带来代码可读性的极具下降,代码可读性的下降必然带来代码可维护性的下降。
而本发明中使用的HVML语言与常见的编程语言(C/C++、Python、JavaScript)相比,HVML语言具有如下显著不同的特征:
1.数据驱动编程。通过基于数据的迭代、插入、更新、清除等操作,开发者不需要编写程序或者只要少量编写程序即可动态生成最终的XML/HTML文档。通过观察新的数据或文档本身的变化以及用户交互事件,HVML可实现XML/HTML文档或数据的动态更新。我们将这种编程方式称为数据驱动的编程(data-driven programming)。
2.抽象的数据操作。HVML为数据的操作提供了更接近最终用途的操作,比如集合的合并、字符串或者整数上的迭代等,开发者无需自行编写代码来实现具体的数据操作。
3.HVML动作标签使用介词和副词属性来定义动作依赖的数据、目标对象以及执行条件等,和常见的编程语言有很大不同,HVML的描述方式更加贴近自然语言,从而可以大幅降低学习门槛。
4.通过对数据和文档结构的抽象,HVML提供了为数不多的几种动作标签,通过这些标签的嵌套使用,可组合成更为复杂的操作逻辑。
但是目前不存在可处理HVML文档的解释器来生成虚拟DOM树文档并根据输入的数据和用户交互生成和更新有效DOM树的方案,更进一步,由于HVML语言设计上的独特性,现有的编程语言解释器或编译器无法有效对HVML文档进行解释或编译。
因此,为了解决目前的技术方案中的编程语言解释器或编译器存在无法有效对HVML文档进行解释或编译的问题。本发明实施例提供了一种数据处理的方法、装置、设备及存储介质,首先通过接收混合虚拟标记语言HVML文档;之后根据HVML文档中的元素确定虚拟DOM文档对象树;最后根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。所以解决了现有技术中存在的编程语言解释器或编译器无法有效对HVML文档进行解释或编译的问题,实现了根据HVML文档以及初始输入数据生成有效DOM文档对象树,并根据其他数据和用户的交互动态更新有效DOM文档对象树的效果。
下面结合附图对本发明实施例提供的技术方案进行描述。
图1是本发明实施例提供的一种HVML解释器与用户代理进行数据传递的系统架构图。如图1所示,HVML解释器根据HVML文档生成vDOM,再根据vDOM以及外部数据源的数据(如通过HTTP协议从服务器端获得的数据)生成eDOM,将构建的eDOM发送给用户代理,以用于用户代理根据eDOM(该eDOM在用户代理端称为uDOM)进行渲染生成渲染页面,并根据渲染页面与用户进行交互,根据用户的输入,例如按钮的单击事件生成uDOM更新及交互事件,该交互事件由用户代理发送给HVML解释器,以用于HVML解释器根据uDOM更新及交互事件对eDOM进行更新,从而生成更新后的eDOM,并将更新信息再次发送给用户代理,以实现用户代理更新uDOM,最后根据uDOM的变更渲染新的页面进行显示。
图2是本发明实施例提供的一种HVML解释器的系统示意图。HVML解释器用于根据HVML文档生成有效DOM文档对象树,以用于用户代理进行渲染。
其中,HVML解析器,用于解析HVML文档并构造vDOM。
动作指令执行模块,用于执行动作标签指定的数据操作动作,克隆文档模板或者数据模板并生成文档片段或者数据,并更新eDOM或者数据。
目标标记语言解析器,用于按照目标文档标签语言(HTML、XML或者其他XML变种标记语言,如QML)的规则解析文档或者文档片段,负责生成或者更新eDOM。
用户代理通讯模块,用于该模块围绕eDOM的更新和用户代理保持通讯,并接收来自用户代理的事件通知,将其翻译成事件数据包发送到事件队列中。
数据源监听模块,用于监听来自外部数据源的数据,翻译成相应的事件数据包发送到事件队列中。该模块包括对各种通讯协议的支持功能,如HTTP(超文本传输协议)、hiBUS(一种数据总线协议)、MQTT、WebSocket、XMPP等。该模块获取来自数据源的数据或者发起请求并等待应答。和现代Web浏览器类似,这个模块通常被设计为独立的网络请求进程来实现。
事件循环模块,用于管理事件队列,按先进先出的原则获取一个待处理的事件数据包,在vDOM中找到观察该事件的vDOM元素节点,切换上下文到该节点,并通知动作指令执行模块执行新的操作。
图2所示的HVML解释器的系统根据HVML文档生成有效DOM文档对象树的流程如图3所示。
图3是本发明实施例提供的数据处理的方法的流程示意图。该方法的执行主体可以是处理器,此外,执行该方法的处理器又可以被称为HVML解释器或解释器。如图3所示,数据处理的方法可以包括:
S101:接收混合虚拟标记语言HVML文档。
S102:根据HVML文档中的元素确定虚拟DOM文档对象树。
具体的,虚拟DOM文档对象树包括模板标签、动作标签等定义的元素以及数据。
需要说明的是,在该过程中,对HVML文档进行解析并生成vDOM的过程和解析一个普通的XML文件或者HTML文件生成对应的DOM树的过程,并无本质的不同,而且本质上,vDOM树和普通的DOM树也无本质区别,但是解析过程中,存在一些特殊处理。
在一个实施例中,可以确定HVML文档中使用预设语言标签定义的第一目标元素,该第一目标元素在vDOM树中存在相应的元素节点,因此可以根据该第一目标元素确定vDOM树中的元素节点。但是,需要说明的是,这类标签定义的元素不会定义任何操作数据或元素的动作或者其定义的操作为“noop”(“无”)。
之后确定使用目标标记语言书写的代码作为文本内容的第二元素,将第二元素包括的文本内容复制到与第二目标元素对应的元素节点中,生成虚拟DOM文档对象树。
在一个具体的实施例中,如表1中的HVML文档所示,生成的虚拟DOM文档对象树如图4所示。
表1
在生成虚拟DOM文档对象树时,head和body中出现的使用目标标记语言标签定义的元素,即上述第一目标元素(如上例中的div元素),在vDOM中存在有相应的元素节点。
而由名词标签archetype和archedata定义的文档片段模板或者数据模板。这类元素即上述的第二目标元素,不能定义子元素;在其内部使用目标标记语言或者JSON记法书写的代码(前者用于定义文档片段模板,后者用于定义数据模板),将被视作这两类元素的文本内容,在vDOM中不存在对应的子元素节点。
此外,还需要说明的是,HVML元素的内容(content)可能是JSON格式表达的数据,我们称为jsonContent。比如在init、archedata和listen标签中,其内容必定是JSON表达的数据。
而且,archetype、archedata、error、except标签的内容,会整个记录为对应元素的文本内容(textContent)。在后续依照vDOM执行HVML代码时,当动作标签克隆对应的模板时,或者在处理错误或者异常时,其中的内容才会被解析为目标标记语言的片段或者JSON数据,这时候,会根据变量的值置换其中的变量。也就是说,这些元素的内容不会被解析为vDOM树的一部分。如上例中的except元素,其文本内容为<p>No valid locale defined.</p>,其中的p标签不会被解析为except元素的子元素。
再者,HVML中可以存在多个嵌套的骨架(skeleton)元素,骨架元素是指使用预设语言(目标标记语言)标签定义的元素,需要满足如下规则:骨架元素不可出现在HVML动作元素中,或者骨架元素的父元素必定是一个骨架元素,而不能是一个HVML动作元素。不符合该规则的HVML文档,将被HVML解析器视为非法。
此外,在解析HVML文档的过程中,不会立即解析jsonContent和textContent的内容,也不解析HVML介词属性中的JSON求值表达式,只是将这些内容作为文本字符串记录下来。
在生成虚拟DOM文档对象树之后,会再继续根据虚拟DOM文档对象树生成有效DOM文档对象树,即S103。
S103:根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。
具体地,该有效DOM文档对象树即eDOM文档对象树。
在该过程中,确定虚拟DOM文档对象树中的使用预设语言标签定义的骨架元素,并将骨架元素插入预设的空有效DOM文档对象树中,生成第一DOM文档对象树。
以图4所示的虚拟DOM文档对象树为例,head和body中出现的使用预设语言(目标标记语言)标签定义的元素,在vDOM中有相应的元素节点,最终作为eDOM/uDOM的文档骨架存在。这类标签定义的元素不定义任何操作数据或元素的动作,但会定义隐含的上下文(context)信息,这类元素就是前述骨架元素。
此外,再以表2所示的HVML文档为例,沿着vDOM树,以深度优先的顺序执行,生成有效DOM文档对象树时,ul是使用预设语言(目标标记语言)标签定义的一个骨架元素,该元素将被完整克隆到空的eDOM文档的当前插入位置,生成第一DOM文档对象树,而且,该eDOM位置将作为该骨架元素子元素的默认eDOM操作位置。
然后按照深度优先的顺序,执行骨架元素中预设动作元素所对应的指令,得到计算结果,将计算结果插入第一DOM文档对象树中与所述预设动作元素对应的位置,生成有效DOM文档对象树。
具体地,再根据表2中所示的HVML文档为例,沿着vDOM树,以深度优先的顺序执行,即,要执行iterate元素指定的迭代操作。该操作是将$users变量定义的数据项追加到eDOM相应的位置,以生成有效DOM文档对象树。
需要说明的是,表2中所示的HVML文档中的observe元素定义的操作将被延后,只有在eDOM的ul元素上出现change事件时执行。
表2
在根据表2中所示的HVML文档的沿着vDOM树生成eDOM的过程中,observe元素在id属性为the-user-list的ul元素上观察change事件(任何在ul元素及其后代元素上的改变将产生该事件)。当观察到该事件出现时,将执行observe元素定义的动作子树,然后按照如下路径执行各动作元素:
1.执行init标签初始化$users局部变量,是一个空的数组。
2.在当前的操作位置(由$@指定,也就是ul元素)上执行广度优先遍历并迭代。本质上,就是遍历ul元素的所有直接子元素,并根据子元素的属性值和内容信息一个个追加到$users数组中。
3.在$users对应的数据上执行reduce(规约)动作。该动作将使用外部执行器统计eDOM中的用户数量以及按照用户所在地区分组的数量;重置当前操作位置到#the-user-statistics。
4.在规约动作获得的结果基础之上,执行choose动作,并重置当前操作位置到>h2>span,即#the-user-statistics>h2>span。
5.执行update动作,更新目标元素的文本内容,即用户总数。
6.执行empty动作,清空目标元素#the-user-statistics>h2>span的内容。
7.重复执行iterate动作,在目标元素#the-user-statistics>dl中追加使用文档片段模板#region-to-users生成的子元素(本质上是一个eDOM子树)。
此外,根据HVML规范的要求,每个动作元素被执行时,需要包括如下的上下文信息:
1.动作的初始输人数据,默认为vDOM父动作元素的执行结果。即,根据预设动作元素的父动作元素的执行结果确定初始输入数据。
2.动作元素所在的vDOM子树,以其直接父元素为根元素确定,可用来查找在当前动作中引用的局部变量。即,根据预设动作元素的父元素确定所述动作元素所在的虚拟DOM子树。
3.动作元素为子元素定义的局部变量。
4.eDOM中对应的当前操作位置。
5.动作执行结果数据。
而且,在一个实施例中,某些动作元素可能执行多次,比如observe、iterate定义的动作元素(及其子元素)以及define定义的操作组。每执行一次,将产生一个新的执行结果并作为其子动作元素的输人数据。还需要说明的是,每次执行observe或者iterate动作时,其子树中包含的所有子动作元素将按照以上执行路径重新执行。
此外,还需要说明的是,有效DOM文档对象树,即eDOM,可以看做是vDOM在不同数据集下的一个文档快照。
例如,继续以表1中的HVML文档为例,当装载这个文档时传人的请求参数locale为zh_CN时,对应的HTML文档快照可以为表2所示。与表2所示的HTML文档快照相对应的eDOM树示意图如图5所示。
表2
当装载这个文档时传入的请求参数locale为en_US时,则对应的HTML文档快照可以为表3所示。与表3所示的HTML文档快照相对应的eDOM树示意图如图6所示。
表3
此外,在HVML解释器中,为了支持同一动作元素的多次执行,甚至递归执行(比如在define定义的操作组中使用call调用当前操作组本身),HVML解释器使用执行栈(stack)来维护执行路径和执行过程中的上下文数据。执行路线中的骨架元素和每个动作元素的上下文构成了执行栈的一个个栈帧(stack frame)。
在HVML动作指令执行模块中,可能会存在多个执行栈:
主执行栈:其栈顶为vDOM根节点,即body元素。
可以按照深度优先的顺序,每执行一个预设子动作元素对应的指令,对预设子动作元素做一次压栈操作,具体地,可以沿深度优先的vDOM树遍历顺序执行每个骨架元素或者动作元素,每执行一个动作做一次压栈(push stack)操作。
当所述骨架元素中的第一目标动作元素对应的第一指令,以及所述第一目标动作元素的子动作元素对应的第二指令全部执行完毕时,做一次出栈操作。即当骨架元素中的一个动作及其子动作全部执行结束后,做一次出栈(pop stack)操作。
当出栈操作达到栈顶,且获取到事件数据时,执行与所述事件数据对应的预设第一动作子树。具体地,当出栈操作达到栈顶时,解释器会检查事件队列,若有被监听的事件数据到达,则执行与该事件数据对应的observe元素定义的动作子树,即预设第一动作子树,按同样的策略执行压栈和出栈操作。
之后可以根据预设第一动作子树,按照深度优先的顺序,每执行一次预设第一动作子树中子动作元素对应的指令,对子动作元素做一次压栈操作;当预设第一动作子树中的第二目标动作元素对应的第三指令,以及所述第二目标动作元素的子动作元素对应的第四指令,即一个动作元素及其子动作元素对应的指令全部执行完毕时,做一次出栈操作。当出栈操作到栈顶时,循环上述过程。
异步执行栈。对所有异步执行的操作组,解释器创建一个单独的执行栈,并在一个独立的线程中执行操作组。该执行栈以body元素作为栈顶,按照define元素定义的预设第二动作子树,按深度优先的遍历顺序执行每个动作,并执行相应的压栈和出栈操作。当预设第二动作子树中的第三目标动作元素对应的第五指令,以及第三目标动作元素的子动作元素对应的第六指令全部执行完毕时,做一次出栈操作。
当出栈操作到栈顶时,结束执行,等待第五指令和第六指令的执行结果被call动作获取,之后销毁异步执行栈和异步执行线程。
还需要说明的是,在HVML解释器中,所有的iterate动作及其子动作元素、后代动作元素,会被重复执行多次,直到迭代结束才会继续遍历其他的兄弟动作元素。每执行一次,其栈帧内容会相应变化。
为了说明执行栈的构造和执行变化情况,可以如表4所示的代码片段进行理解。
表4
表4中的代码在`div`骨架元素内执行了3次迭代操作,将动态生成的`user`对象合并到了集合`users`中,最终生成的`users`变量值如表5所示。
表5
图7给出了一个栈帧中包含的上下文信息,以及上述HVML代码每执行一次动作元素的主执行栈变化情况,还包括每个栈帧的关键信息。
在一个实施例中,在生成该有效DOM文档对象树的过程中,还会获取事件数据,根据事件数据确定虚拟DOM文档对象树中与事件数据对应的第一位置;之后根据第一位置和虚拟DOM文档对象树,按照深度优先的顺序生成更新后的有效DOM文档对象树。
在根据事件数据生成有效DOM文档对象树的过程中,具体的,可以借助asynchronously副词属性使用init元素从远程数据源获取数据初始化一个变量,或者使用listen监听一个长连接数据源,或者使用call异步执行一个操作组时,HVML解释器将会建立一个变量和任务的映射关系,并在事件循环中监听这些数据源上的变化。当对应的数据源上有数据时,或者操作组完成执行产生结果数据时,会产生相应的事件,即事件数据。
需要说明的是,异步执行的操作组也看成是一种数据源。HVML解释器通过观察在这些数据源上的事件数据进行相应的处理。处理规则如下所示:
1.所有的observe元素确定了其执行上下文(也就是在vDOM中的位置),只有在对应的数据源上有被观察的事件(for属性定义)时才会被执行。HVML解释器会切换上下文到对应的vDOM位置,即第一位置,然后继续执行该上下文中的其他操作,生成上述更新后的有效DOM文档对象树。
2.当未观察到observe元素定义的事件到达时,不执行该元素及其子树中定义的任何操作。
3.不论在何处定义,listen定义的长连接数据源始终是全局存在的,但对应的变量被限制在其所在的vDOM子树中。
此外,当异步地从数据源获取数据时,需要通过观察该数据源上可能的各种状态,比如数据就绪、连接错误、身份验证错误、超时等。HVML解释器使用事件来表示这些状态。
具体的,对于数据就绪而言,ready事件通常用来表示数据获取正常并已就绪,此时的事件数据可以如表6所示。
表6
具体的,当在observe动作元素中观察到ready事件时,其结果数据(即提供给子动作元素的$?变量值)就是payload对应的键值。
此外,如果从外部数据源获取数据时遇到错误,则对应的JSON数据格式大致如表7所示。
表7
当从外部数据源获取数据时,异常事件的JSON数据格式可以如表8所示。
表8
此外,除了观察数据源上的ready事件之外,也可以使用表9中的代码来处理可能的错误情形。
表9
在一个实施例中,当根据虚拟DOM文档对象树按照深度优先的顺序无法生成有效DOM文档对象树时,生成失败返回信息;然后根据失败返回信息确定虚拟DOM文档对象树中出现异常的第二位置;之后查找虚拟DOM文档对象树中与失败返回信息对应的预设标签;最后根据预设标签中包括的内容以及第二位置,按照深度优先的顺序生成用于表达错误或异常的有效DOM文档对象树。
具体的,上述实施例中的无法生成有效DOM文档对象树是指,当HVML解释器装载一个新的HVML文档时,在生成vDOM树之后,解释执行各种动作元素指定的操作时出现错误或者异常。
当解释器根据动作元素的属性执行特定的操作时,可以把获取数据或元素时遇到不可恢复的问题称为“错误”,而把调用执行器或者外部脚本程序时遇到的不可恢复的问题称为“异常”。
其中,错误经常出现在如下情况:
on、in、with等属性指定的元素或者数据不存在,尚未就绪,获取失败或者不可用时。无法连接到被监听的数据源,或者数据源异常断开时。没有为动作标签指定正确的执行器时,或者执行器语法错误。错误的JSON表达式。
异常经常出现在如下情况:
由于数据错误,执行器无法完成进一步操作时,比如被零除。引用数组时,超出索引范围。引用字典时,键名不存在。目标标记语言解析器错误。其他可能的程序错误。
在遇到错误或者异常时,HVML解释器首先会中断当前上下文的动作执行,并执行如下操作:
1.遍历当前上下文中的error或者except子元素,如果定义有匹配的错误或者异常,则克隆相应的error或者except标签的内容,插入到当前的文档操作位置,即虚拟DOM文档对象树中出现异常的第二位置。
2.如果没有,则检查当前上下文是否定义有标识符为ERROR或者EXCEPT的archetype子元素,若有,则克隆其中的内容并插入到当前的文档操作位置。
3.如果当前上下文未定义默认的错误或者异常模板,则查看其父节点,直到根节点为止。若有,则克隆其中的内容并插入到当前的文档操作位置。注意,根节点定义的ERROR或者EXCEPT文档模板,是系统内置的默认模板。
之后,HVML解释器会上溯到上一个上下文继续处理其他元素。该上一个上下文即指按照所述深度优先的顺序确定所述第二位置的上一执行位置。
此外,还需要说明的是,由于在error和except元素中仍然可以使用JSON求值表达式,故而可能产生新的错误或者异常。此时,HVML解释器会使用系统默认的错误或者异常模板。
此外,在一个实施例中,HVML解释器还可以将一个经过JSON求值表达式处理后的目标标记语言之代码片段进行解析,生成一个DOM子树,然后插入到eDOM的当前位置。
此外,在一个实施例中,本方案对HVML语言进行说明。
在HVML中,使用init动作标签定义的命名变量、使用listen动作标签监听的数据源,以及使用bind动作标签绑定的命名变量,其作用域均只在其所在的vDOM子树中有效。对定义在head元素中的变量,则全局有效,相当于全局变量。
如表10所示的HVML代码,在head元素中使用init元素定义了通过数据源异步获得$users变量,该变量是全局的。由于该数据是异步获取的,因此,上述HVML使用observe标签观察该变量上的ready事件,并根据获得的数据迭代生成了用户清单。
在第二个observe动作中,该代码观察ul元素上的change事件,然后在其中使用init动作标签定义了一个仅在第二个observe元素子树中有效的变量,是一个空的数组。
根据变量名称确定具体使用哪个数据时,HVML遵循如下简单的规则:
1.当HVML的动作元素遇到一个命名变量时,会首先在当前上下文(即动作元素的直接父元素定义的vDOM子树)向前寻找对应的变量;如果没有找到,
2.则上溯父元素一直到vDOM的body元素;若仍未找到,
3.则按全局变量(包括内置全局变量)处理;若仍未找到,
4.则产生nodata错误。
表10
此外,在HVML的规范文档中,内建执行器一般由一个符合特定语法要求的语句构成,然后根据所在标签的动作完成相应的数据过滤、选择、排序以及规约等操作。因此,一个内建执行器一般由如下两个模块构成:
1.用于解析执行语句的解析器(parser)。
2.用于操作数据完成过滤、选择、排序或规约的数据生成器(generator)。
可以以以KEY执行器为例说明一个内建执行器的实现细节。
表11所示的是KEY执行的语法。
表11
本质上,使用KEY执行器依赖于一个键名列表:
·ALL关键词表示全部键名。
·LIKE关键词表示匹配正则表达式或者通配符(wildcard)模式的所有键名。正则表达式或者模式字符串可使用JSON求值表达式求值获得,也可以是一个字面的(literal)字符串。
·不使用LIKE关键词时表示一个普通的键名。一个普通键名可使用JSON求值表达式求值获得,也可以是一个字面的(literal)字符串。
故而,KEY执行语句的解析器最终会输出两个字符串集合。
1.用于正则表达式匹配或者模式匹配的字符串集合。使用ALL关键词时,该集合中只有一个字符串:*。
2.用于精确匹配的字符串集合。使用ALL关键词或者只有LIKE分句时,该集合为空。
比如解析下面这个KEY执行语句:KEY:′zh_CN′,′zh_TW′,LIKE′en_*′,将对应生成下面这两个集合:
1.[″en_*″]
2.[″zh_CN″,″zh_TW″]
接下来,创建KEY执行器的对象,并根据该执行器所在的动作元素的动作要求调用其中的一个方法即可完成对应的动作。
使用Python时,KEY执行器的一个简单实现如表12所示。
表12
在执行choose、iterate、reduce这三个动作元素指定的操作时,HVML解释器一般遵循如下过程:
1.判断当前数据是否和执行器匹配。比如在非字典数据上,不能使用针对数组、字符串、数值的内建执行器。如果不匹配,则返回错误BadExecutor。
2.解析执行语句,在当前数据基础上构建相应的输入参数。
3.创建对应执行器的类对象,然后根据动作元素的标签名称(choose、iterate或reduce)调用相应的类方法获得返回的数据。
4.根据各方法返回的数据设置上下文变量。
此外,根据HVML规范,外部执行器使用外部脚本实现对应的外部执行器,不同的外部执行器有不同的接口,调用外部执行器的过程就是执行一条动态生成的脚本语言代码。比如,在Python中,规约器的接口如表13所示。
表13
如果要实现派生HVMLReducer实现了一个自己的规约器RUserRegionStats,当HVML解释器遇到表14所示的reduce动作元素时,解释器将生成一组动态Python代码并调用Python的内置函数eval执行表15所示的代码。其中,on_value是reduce动作元素on属性指定的数据。
表15
表16
解释器的克隆模板的过程实质进行的是字符串的替代工作。比如表17所示的文档片段模板。
表17
解释器将对archetype的所有子标签整个视作该元素的文本内容,然后根据当前上下文变量$?的值将该文本内容的替换掉。假设当前上下文变量$?的JSON表达如表18所示。
表18
进行替换之后的文本内容如表19所示。
表19
之后,解释器可以将把置换后的整个文本内容作为HTML文档片段插入到eDOM中。此时,调用目标标签语言解析模块生成对应的eDOM子树并插入到eDOM中。
此外,还可以HVML规范定义的动态JSON对象完成一些额外的处理工作,比如将用户的名称转换成大写。
例如,假设绑定了一个名称为string的动态JSON对象,该对象提供常见的字符串操作函数,如:
·toupper:将给定的字符串转换成大写形式。
·tolower:将给定的字符串转换成小写形式。
可以设定如表20所示的文档片段模板。
表20
则进行变量替换之后的文本内容如表21所示。
表21
如前所述,使用bind标签绑定一个外部脚本程序作为一个动态JSON对象:<bindon=″ctype″in=″strings″as=″string″/>
在使用Python脚本语言作为外部脚本语言时,我们通常按如下思路实现:
1.bind元素的in属性指定一个Python的包(package),on属性这个包中实现的一个类。
2.将Python包中的特定类和HVML变量绑定的过程就是导入(import)对应的包并创建一个类实例的过程。
上面的bind元素将导入strings包,然后创建一个ctype类的实例,并将该实例和HVML的变量$string关联起来。
这里作为示例的ctype类,主要实现了字符串中字符的大小写转换功能,主要通过前面示例中使用的toupper和tolower两个功能。因为字符的大小写转换和特定语言相关,因此,要获得特定语言环境下的大小写转换能力,需要设置正确的locale(地区)信息。因此,这个类对应的动态JSON对象提供了一个可写的locale键名,可用来设置当前的locale。
ctype的Python实现大致如表22所示。
表22
需要注意的是,上面的示例代码中,我们忽略了利用locale信息正确处理字符串大小写的功能。相关信息,可参阅Unicode规范。
HVML解释器将上面的ctype类和$string变量绑定的过程本质上可以是执行表23所示的Python语句。
表23
在HVML的JSON表达式中,当我们在$string对象引用相应的键名时,将调用表24对应的ctype类方法。
表24
此外,针对HVML规范要求的JSON求值表达式,HVML解释器引入JSON求值表达式解析器来完成对应的求值工作,即:
1.对JSON表达式进行解析,生成一个用于求值的函数调用树结构,我们称为求值树(evaluation tree)。
2.需要求值时,使用深度优先算法遍历求值树,代人JSON对象值执行求值过程,并返回一个最终值。
作为一个具体的示例,上述示例中的如下右值表达式如表25所示。
表25
构造的求值树如图8所示。
构造了求值树之后,执行求值过程按照深度优先算法遍历求值树确定每个节点的值即可,如上面的求值树:
1.节点(1):这个节点是一个叶子节点,其值取$?的name键值。
2.节点(2):这个节点是一个叶子节点,其值取$?的id键值。
3.节点(3):这个节点是一个叶子节点,其值取$?的region键值。
4.节点(4):这个节点是一个函数节点,用其子节点的值作为参数调用$string动态JSON对象的strcat方法,即可获得对应的值,如:David0en_US。
5.节点(5):这个节点是一个函数节点,用其子节点的值作为参数调用$string动态JSON对象的upper方法,即可获得对应的值,如:DAVID0EN_US。
所以上述求值树的最终结果是DAVID0EN_US。
在动作指令的执行中,所有JSON求值表达式均应该在第一次被引用时解析为求值树,然后按以上算法获得求值结果。
本发明的实施例所生成的有效DOM文档对象树会发送给用户设备,用于用户设备根据有效DOM文档对象树生成渲染页面并展示,之后用户设备可以接收用户对所述渲染页面的输入。因此解释器和用户设备通过分别维护两个最终文档对应的DOM树,有效地降低了文档数据和人机交互之间的耦合性。此外,用户设备具体是指用户代理端。
本发明实施例中提供的数据处理的方法,通过首先接收混合虚拟标记语言HVML文档;之后根据所述HVML文档中的元素确定所述虚拟DOM文档对象树;最后根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。所以解决了现有技术中存在的编程语言解释器或编译器无法有效对HVML文档进行解释或编译的问题,实现了根据HVML文档以及初始输入数据生成有效DOM文档对象树,并根据其他数据的数据和用户的交互动态更新有效DOM文档对象树的效果。
与图3中数据处理的方法相对应,本发明实施例还提供了一种数据处理的装置。
图9是本发明实施例提供的一种数据处理的装置。如图9所示,数据处理的装置可以包括:接收模块701,处理模块702.
接收模块701,可以用于接收混合虚拟标记语言HVML文档。
处理模块702,用于根据HVML文档中的元素确定虚拟DOM文档对象树。
处理模块702,还可以用于根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。
在一个实施例中,处理模块702,还可以用于确定HVML文档中使用预设语言标签定义的第一目标元素;根据第一目标元素确定虚拟DOM文档对象树的元素节点;确定HVML文档中包括文本内容的第二目标元素;将第二目标元素的文本内容复制到与第二目标元素对应的元素节点中,生成虚拟DOM文档对象树。
在一个实施例中,处理模块702,还可以用于确定虚拟DOM文档对象树中的使用预设语言标签定义的骨架元素;将骨架元素插入预设的空DOM文档对象树中,生成第一DOM文档对象树;按照深度优先的顺序,执行骨架元素中预设子动作元素对应的指令;将计算结果插入第一DOM文档对象树中与预设动作元素对应的位置,生成有效DOM文档对象树。
在一个实施例中,处理模块702,还可以用于按照深度优先的顺序,确定骨架元素中的预设子动作元素;根据预设子动作元素的父动作元素的执行结果确定初始输入数据;根据预设子动作元素的父元素确定子动作元素所在的虚拟DOM子树;根据虚拟DOM子树确定与子动作元素相关的局部变量;根据初始输入数据和局部变量执行预设子动作元素对应的指令。
在一个实施例中,处理模块702,还可以用于按照深度优先的顺序,每执行一个预设子动作元素对应的指令,对预设子动作元素做一次压栈操作;当骨架元素中的第一目标动作元素对应的第一指令,以及第一目标动作元素的子动作元素对应的第二指令全部执行完毕时,做一次出栈操作;当出栈操作达到栈顶,且获取到事件数据时,执行与事件数据对应的预设第一动作子树。
在一个实施例中,处理模块702,还可以用于根据预设第一动作子树,按照深度优先的顺序,每执行一次预设第一动作子树中子动作元素对应的指令,对子动作元素做一次压栈操作;当预设第一动作子树中的第二目标动作元素对应的第三指令,以及第二目标动作元素的子动作元素对应的第四指令全部执行完毕时,做一次出栈操作。
在一个实施例中,处理模块702,还可以用于按照异步执行的方式,根据预设第二动作子树,按照深度优先的顺序,每执行一次预设第二动作子树中子动作元素对应的指令,对子动作元素做一次压栈操作;当预设第二动作子树中的第三目标动作元素对应的第五指令,以及第三目标动作元素的子动作元素对应的第六指令全部执行完毕时,做一次出栈操作;当出栈操作达到栈顶时,停止执行,将第五指令和第六指令的执行结果插入第一DOM文档对象树中与预设动作元素对应的位置,生成有效DOM文档对象树。
在一个实施例中,数据处理的装置还包括获取模块(图中未示出),用于获取事件数据;处理模块702,还可以用于根据事件数据确定虚拟DOM文档对象树中与事件数据对应的第一位置;根据第一位置和虚拟DOM文档对象树,按照深度优先的顺序更新有效DOM文档对象树。
在一个实施例中,处理模块702,还可以用于当根据虚拟DOM文档对象树按照深度优先的顺序无法生成有效DOM文档对象树时,生成失败返回信息;根据失败返回信息确定虚拟DOM文档对象树中出现异常的第二位置;查找虚拟DOM文档对象树中与失败返回信息对应的预设标签;根据预设标签中包括的内容以及第二位置,按照深度优先的顺序生成用于表达错误或异常的有效DOM文档对象树片段。
在一个实施例中,处理模块702,还可以用于根据预设标签中包括的内容,对内容中的变量根据当前数据值执行变量置换操作,并将变量置换操作得到的数据插入虚拟DOM文档对象树中的第二位置;按照深度优先的顺序确定第二位置的上一执行位置;根据更新后的虚拟DOM文档对象树以及上一执行位置,按照深度优先的顺序生成有效DOM文档对象树。
在一个实施例中,处理模块702,还可以用于当按照深度优先的顺序,执行骨架元素中预设子动作元素对应的指令,且指令与预设执行器中的数据匹配时,解析指令,确定与指令对应的输入参数;根据输入参数和与指令对应的预设类方法确定指令的上下文变量;根据上下文变量执行指令。
可以理解的是,图9所示的数据处理的装置中的各个模块具有实现图3中各个步骤的功能,并能达到其相应的技术效果,为简洁描述,在此不再赘述。
本发明实施例中提供的数据处理的装置,通过首先接收混合虚拟标记语言HVML文档;之后根据所述HVML文档中的元素确定所述虚拟DOM文档对象树;最后根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。所以解决了现有技术中存在的编程语言解释器或编译器无法有效对HVML文档进行解释或编译的问题,实现了根据HVML文档以及初始输入数据生成有效DOM文档对象树,并根据其他数据的数据和用户的交互动态更新有效DOM文档对象树的效果。
图10是本发明实施例提供的一种计算设备的硬件架构的结构图。如图10所示,计算设备800包括输入设备801、输入接口802、中央处理器803、存储器804、输出接口805、以及输出设备806。其中,输入接口802、中央处理器803、存储器804、以及输出接口805通过总线810相互连接,输入设备801和输出设备806分别通过输入接口802和输出接口805与总线810连接,进而与计算设备800的其他组件连接。
具体地,输入设备801接收来自外部的输入信息,并通过输入接口802将输入信息传送到中央处理器803;中央处理器803基于存储器804中存储的计算机可执行指令对输入信息进行处理以生成输出信息,将输出信息临时或者永久地存储在存储器804中,然后通过输出接口805将输出信息传送到输出设备806;输出设备806将输出信息输出到计算设备800的外部供用户使用。
也就是说,图10所示的计算设备也可以被实现为数据处理的设备,该数据处理的设备可以包括:处理器以及存储有计算机可执行指令的存储器;该处理器在执行计算机可执行指令时可以实现本发明实施例提供的数据处理的方法。
本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现本发明实施例提供的数据处理的方法。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
以上所述的结构框图中所示的功能块可以实现为硬件、软件、固件或者它们的组合。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、只读存储器(Read-Only Memory,ROM)、闪存、可消除的只读存储器(ErasableRead Only Memory,EROM)、软盘、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、光盘、硬盘、光纤介质、射频(Radio Frequency,RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
上面参考根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各方面。应当理解,流程图和/或框图中的每个方框以及流程图和/或框图中各方框的组合可以由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机、或其它可编程数据处理装置的处理器,以产生一种机器,使得经由计算机或其它可编程数据处理装置的处理器执行的这些指令使能对流程图和/或框图的一个或多个方框中指定的功能/动作的实现。这种处理器可以是但不限于是通用处理器、专用处理器、特殊应用处理器或者现场可编程逻辑电路。还可理解,框图和/或流程图中的每个方框以及框图和/或流程图中的方框的组合,也可以由执行指定的功能或动作的专用硬件来实现,或可由专用硬件和计算机指令的组合来实现。
以上所述,仅为本发明的具体实施方式,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。应理解,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。
Claims (14)
1.一种数据处理的方法,其特征在于,所述方法包括:
接收混合虚拟标记语言HVML文档;
根据所述HVML文档中的元素确定虚拟DOM文档对象树;
根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。
2.根据权利要求1所述的方法,其特征在于,所述根据所述HVML文档中的元素确定所述虚拟DOM文档对象树,包括:
确定所述HVML文档中使用预设语言标签定义的第一目标元素;
根据所述第一目标元素确定所述虚拟DOM文档对象树的元素节点;
确定HVML文档中包括文本内容的第二目标元素;
将所述第二目标元素的文本内容复制到与所述第二目标元素对应的元素节点中,生成所述虚拟DOM文档对象树。
3.根据权利要求1所述的方法,其特征在于,所述根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树,包括:
确定所述虚拟DOM文档对象树中的使用预设语言标签定义的骨架元素;
将所述骨架元素插入预设的空DOM文档对象树中,生成第一DOM文档对象树;
按照深度优先的顺序,执行骨架元素中预设子动作元素对应的指令;
将所述指令的执行结果插入所述第一DOM文档对象树中与所述预设子动作元素对应的位置,生成所述有效DOM文档对象树。
4.根据权利要求3所述的方法,其特征在于,所述按照深度优先的顺序,执行骨架元素中预设子动作元素对应的指令,包括:
按照深度优先的顺序,确定所述骨架元素中的预设子动作元素;
根据所述预设子动作元素的父动作元素的执行结果确定初始输入数据;
根据所述预设子动作元素的父元素确定所述子动作元素所在的虚拟DOM子树;
根据所述虚拟DOM子树确定与所述子动作元素相关的局部变量;
根据所述初始输入数据和所述局部变量执行所述预设子动作元素对应的指令。
5.根据权利要求3所述的方法,其特征在于,所述按照深度优先的顺序,执行骨架元素中预设子动作元素对应的指令,包括:
按照深度优先的顺序,每执行一个预设子动作元素对应的指令,对所述预设子动作元素做一次压栈操作;
当所述骨架元素中的第一目标动作元素对应的第一指令,以及所述第一目标动作元素的子动作元素对应的第二指令全部执行完毕时,做一次出栈操作;
当出栈操作达到栈顶,且获取到事件数据时,执行与所述事件数据对应的预设第一动作子树。
6.根据权利要求5所述的方法,其特征在于,当出栈操作达到栈顶,且获取到事件数据时,执行与所述事件数据对应的预设第一动作子树,包括:
根据所述预设第一动作子树,按照深度优先的顺序,每执行一次预设第一动作子树中子动作元素对应的指令,对所述子动作元素做一次压栈操作;
当所述预设第一动作子树中的第二目标动作元素对应的第三指令,以及所述第二目标动作元素的子动作元素对应的第四指令全部执行完毕时,做一次出栈操作。
7.根据权利要求3所述的方法,其特征在于,所述方法还包括:
按照异步执行的方式,根据预设第二动作子树,按照深度优先的顺序,每执行一次预设第二动作子树中子动作元素对应的指令,对所述子动作元素做一次压栈操作;
当所述预设第二动作子树中的第三目标动作元素对应的第五指令,以及所述第三目标动作元素的子动作元素对应的第六指令全部执行完毕时,做一次出栈操作;
当出栈操作达到栈顶时,停止执行,将所述第五指令和所述第六指令的执行结果插入所述第一DOM文档对象树中与所述预设子动作元素对应的位置,生成所述有效DOM文档对象树。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取事件数据;
根据所述事件数据确定所述虚拟DOM文档对象树中与所述事件数据对应的第一位置;
根据所述第一位置和所述虚拟DOM文档对象树,按照深度优先的顺序更新所述有效DOM文档对象树。
9.根据权利要求1所述的方法,其特征在于,所述根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树,还包括:
当根据虚拟DOM文档对象树按照深度优先的顺序无法生成有效DOM文档对象树时,生成失败返回信息;
根据所述失败返回信息确定虚拟DOM文档对象树中出现异常的第二位置;
查找所述虚拟DOM文档对象树中与所述失败返回信息对应的预设标签;
根据所述预设标签中包括的内容以及所述第二位置,按照深度优先的顺序生成用于表达错误或异常的有效DOM文档对象树片段。
10.根据权利要求9所述的方法,其特征在于,所述根据所述预设标签中包括的内容以及第二位置,按照深度优先的顺序生成有效DOM文档对象树,包括:
根据所述预设标签中包括的内容,对所述内容中的变量根据当前数据值执行变量置换操作,并将变量置换操作得到的数据插入所述虚拟DOM文档对象树中的第二位置;
按照所述深度优先的顺序确定所述第二位置的上一执行位置;
根据所述虚拟DOM文档对象树以及所述上一执行位置,按照深度优先的顺序生成有效DOM文档对象树。
11.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当按照深度优先的顺序,执行骨架元素中预设子动作元素对应的指令,且所述指令与预设执行器中的数据匹配时,解析所述指令,确定与所述指令对应的输入参数;
根据所述输入参数和与所述指令对应的预设类方法确定所述指令的上下文变量;
根据所述上下文变量执行所述指令。
12.一种数据处理的装置,其特征在于,所述装置包括:
接收模块,用于接收混合虚拟标记语言HVML文档;
处理模块,用于根据所述HVML文档中的元素确定虚拟DOM文档对象树;
所述处理模块,还用于根据虚拟DOM文档对象树按照深度优先的顺序生成有效DOM文档对象树。
13.一种电子设备,其特征在于,所述设备包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如权利要求1-11任意一项所述的数据处理的方法。
14.一种计算机存储介质,其特征在于,所述计算机存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如权利要求1-11任意一项所述的数据处理的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011536939.1A CN112527297A (zh) | 2020-12-23 | 2020-12-23 | 数据处理的方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011536939.1A CN112527297A (zh) | 2020-12-23 | 2020-12-23 | 数据处理的方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112527297A true CN112527297A (zh) | 2021-03-19 |
Family
ID=74976053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011536939.1A Pending CN112527297A (zh) | 2020-12-23 | 2020-12-23 | 数据处理的方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527297A (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004068320A2 (en) * | 2003-01-27 | 2004-08-12 | Vincent Wen-Jeng Lue | Method and apparatus for adapting web contents to different display area dimensions |
US6981212B1 (en) * | 1999-09-30 | 2005-12-27 | International Business Machines Corporation | Extensible markup language (XML) server pages having custom document object model (DOM) tags |
US7210097B1 (en) * | 2002-05-22 | 2007-04-24 | Pitney Bowes Inc. | Method for loading large XML documents on demand |
US20070180360A1 (en) * | 2006-02-02 | 2007-08-02 | Nextair Corporation | Apparatus, method and machine-readable medium for facilitating generation of a markup language document containing identical sets of markup language elements |
CN108647025A (zh) * | 2018-05-15 | 2018-10-12 | 浙江口碑网络技术有限公司 | 文档对象模型中节点的处理方法及装置、电子和存储设备 |
CN111125597A (zh) * | 2019-12-18 | 2020-05-08 | 百度在线网络技术(北京)有限公司 | 网页加载方法、浏览器、电子设备及存储介质 |
CN111381809A (zh) * | 2018-12-28 | 2020-07-07 | 深圳市茁壮网络股份有限公司 | 一种焦点页面的查找方法及装置 |
CN111580830A (zh) * | 2020-05-12 | 2020-08-25 | 北京飞漫软件技术有限公司 | 超文本标记语言文档元素的绑定及解析方法 |
CN112114807A (zh) * | 2020-09-28 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 界面显示方法、装置、设备及存储介质 |
-
2020
- 2020-12-23 CN CN202011536939.1A patent/CN112527297A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6981212B1 (en) * | 1999-09-30 | 2005-12-27 | International Business Machines Corporation | Extensible markup language (XML) server pages having custom document object model (DOM) tags |
US7210097B1 (en) * | 2002-05-22 | 2007-04-24 | Pitney Bowes Inc. | Method for loading large XML documents on demand |
WO2004068320A2 (en) * | 2003-01-27 | 2004-08-12 | Vincent Wen-Jeng Lue | Method and apparatus for adapting web contents to different display area dimensions |
US20070180360A1 (en) * | 2006-02-02 | 2007-08-02 | Nextair Corporation | Apparatus, method and machine-readable medium for facilitating generation of a markup language document containing identical sets of markup language elements |
CN108647025A (zh) * | 2018-05-15 | 2018-10-12 | 浙江口碑网络技术有限公司 | 文档对象模型中节点的处理方法及装置、电子和存储设备 |
CN111381809A (zh) * | 2018-12-28 | 2020-07-07 | 深圳市茁壮网络股份有限公司 | 一种焦点页面的查找方法及装置 |
CN111125597A (zh) * | 2019-12-18 | 2020-05-08 | 百度在线网络技术(北京)有限公司 | 网页加载方法、浏览器、电子设备及存储介质 |
CN111580830A (zh) * | 2020-05-12 | 2020-08-25 | 北京飞漫软件技术有限公司 | 超文本标记语言文档元素的绑定及解析方法 |
CN112114807A (zh) * | 2020-09-28 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 界面显示方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
郭燕鹏: ""基于Xen的虚拟机资源动态优化算法研究及应用"", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, no. 2017, 15 March 2017 (2017-03-15) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8286132B2 (en) | Comparing and merging structured documents syntactically and semantically | |
US7962904B2 (en) | Dynamic parser | |
US7340718B2 (en) | Unified rendering | |
Schordan et al. | A source-to-source architecture for user-defined optimizations | |
US20100077380A1 (en) | Framework for automatically merging customizations to structured code that has been refactored | |
US20020111965A1 (en) | Methods and systems for direct execution of XML documents | |
US20140157243A1 (en) | System for Translating Diverse Programming Languages | |
US20060031820A1 (en) | Method for program transformation and apparatus for COBOL to Java program transformation | |
US20150242194A1 (en) | System for Translating Diverse Programming Languages | |
JP6377739B2 (ja) | パーサの生成 | |
US20080320031A1 (en) | Method and device for analyzing an expression to evaluate | |
US10062030B2 (en) | Tree structured data transform, by determining whether a predicate of a rule matches a given node in a set and applying a function responsive to the match | |
US7505988B2 (en) | XML validation processing | |
US20080033968A1 (en) | Methods and apparatus for input specialization | |
CN114385148A (zh) | 一种实现联动功能的方法、装置、设备和存储介质 | |
Møller et al. | Static validation of XSL Transformations | |
KR102614967B1 (ko) | 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 | |
US8650536B2 (en) | Modular server architecture | |
CN112527297A (zh) | 数据处理的方法、装置、设备及存储介质 | |
Zhang et al. | Correct-by-construction implementation of runtime monitors using stepwise refinement | |
JP2002182915A (ja) | ソース・プログラム保管方法及びシステム、ソース・プログラム復元方法及びシステム、並びにコンパイル方法及び装置 | |
CN111399842A (zh) | 一种代码编译方法及装置 | |
Sarkar et al. | Code generation using XML based document transformation | |
EP1644827A1 (en) | Automated patching of code for schema derived classes | |
Kay et al. | An XSLT compiler written in XSLT: can it perform |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |