利索能及
我要发布
收藏
专利号: 2019102014660
申请人: 浙江工业大学
专利类型:发明专利
专利状态:已下证
更新日期:2026-07-29
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种基于子图同构的web数据自动可视化方法,其特征在于,所述方法包括以下步骤:

第一步:构建服务数据可视化建模与匹配方法的架构,包括三个模块:数据建模、图形建模和降维匹配;

第二步:定义元数据树MDT,包括根节点TRoot、索引节点INode、数据节点DNode,同时用深度level来表示节点在树结构中的层数,根节点默认为第一层,即level=1;

第三步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模;

第四步:由于JSON数据集中存在批量数据,批量数据以相同的数据结构形式存在,在数据集中数组的形式表现;若是用户的对于JSON数据分析的重点不在于数据的定位、查询,而是针对数据结构的分析,在上述JSON数据解析建模的方法基础上,可以通过剪枝的方法,保留数据结构信息,剪除相同的重复数据结构,缩小模型的体量,但仍然保留数据结构,降低JSON数据结构所带来的查询开销;

第五步:对可视化图形进行分类,归纳总结各类图形的属性及结构特征,通过建模创建一种可视模型树VT,来形式化地表述各类图形信息;

第六步:子图同构是一个在查询图中查找查询子图,判断查询图中是否包含了查询子图的问题;先用降维方法对MDT进行降维操作,生成元结构树MST,再将可视模型树VT与MST进行匹配查询,调用基于子图同构的匹配方法查找MST中与VT的各个StructModel匹配的片段,并根据Mapping信息进行数据映射,生成可视化图形。

2.如权利要求1所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第一步的过程如下:

1.1、数据建模:从Internet获取的REST服务经解析器解析后进行注册,存储于缓存cache或数据库Database中,自动调用后所获取的基于JSON的REST服务数据,通过服务数据建模将服务数据转变为标准化模型,并抽取出主要数据结构生成元数据树MDT;

1.2、图形建模:对多种配置型可视化工具所支持的图形进行数据结构分析与归纳,整理出主要图形的通用数据结构及数据映射关系,再根据上述信息进行可视化图形建模,创建描述性可视模型VT;

1.3、降维匹配:调取数据建模所生成的MDT,通过降维算法对其进行结构降维,获得包含源数据基础数据结构的元结构树MST,然后通过VT解析器提取出VT中的图形结构模型,在MST中使用基于子图同构的匹配算法来搜索与图形结构模型匹配的数据结构片段,最后输出源数据可生成的图形种类及MST中的匹配片段;

1.4、图像生成:根据所属1.3输出的图形种类及MST中的匹配片段,将其按照VT解析器提取出的映射关系通过映射处理器来自动化生成可视化图形。

3.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第二步的过程如下:

2.1、根节点:MDT的根节点,即MDT的起始节点;

2.2、索引节点:代表JSON数据中每一个关键字KEY,但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点;

2.3、数据节点:代表JSON数据中最内层的“键-值”对,存储为叶子节点;

所述2.1中,所述根节点内包含以下信息:

2.1.1、星标isMark:记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(1)(2),isMark的数据类型为数字NUMBER,若JSON数据中“键-值”对中的值VALUE为数组ARRAY,则isMark=1,否则isMark=0;“#”为数据类型定义符,“::=”为赋值符,〖A→condition⊕:〗表示若A符合条件condition,则该式值为B,否则该式值为C;

(1)、“isMark”#(2)、“isMark”::=〖“VALUE”→ARRAY⊕<1>:<0>〗

2.1.2、元素数量arrayNum:若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为数字NUMBER类型,若JSON数据中“键-值”对中的值VALUE为ARRAY,则arrayNum等于VALUE数组的长度,否则arrayNum=0;

(3)、“arrayNum”#(4)、“arrayNum”::=〖“VALUE”→ARRAY⊕:<0>〗所述2.2中,所述索引节点内包含以下信息:

2.2.1、节点名称name:name的数据类型为字符串STRING,name属性值为JSON数据中“键-值”对中的关键字KEY;name形式化定义表述如(5)(6);

(5)、“name”#

(6)、“name”::=

2.2.2、节点值类型vType:vType是JSON数据中“键-值”对中的值VALUE的数据类型,属性值为对象OBJECT、数组ARRAY、字符串STRING、数字NUMBER、TRUE、FALSE之一;vType形式化定义表述如(7);

(7)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]

2.2.3、星标isMark:记录JSON数据中,以当前节点名称name作为关键字的“键-值”对中的值VALUE是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述同步骤

2.1.1中的(1)(2);

2.2.4、元素数量arrayNum:若当前节点的isMark为1,则记录“键-值”对中的值VALUE的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述同步骤

2.1.2中的(3)(4);

所述2.3中,所述数据节点内包含以下信息:

2.3.1、节点名称name:保存JSON数据中“键-值”对中的关键字KEY,数据类型为字符串STRING;name形式化定义表述同步骤2.2.1中的(5)(6);

2.3.2、节点值nValue:nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值VALUE;nValue形式化定义表述如(8)(9);

(8)、“nValue”#(9)、“nValue”::=

2.3.3、节点类型type:保存JSON数据中“键-值”对中的值VALUE的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(10);

(10)、“type”::=[“str”|“num”|NULL]。

4.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第三步的步骤如下:

3.1、创建一棵根节点为TRoot的MDT,TRoot是起始节点,根节点的深度level默认为1;

3.2、读取JSON数据集ds,如果是首次读取ds,设置ds的第一个元素为当前元素,元素包括关键字KEY及其值VALUE;否则设置ds的下一个元素为当前元素;若JSON数据最外层就是ARRAY,则TRoot的isMark=1,元素数量arrayNum为ARRAY元素个数。

5.如权利要求4所述的基于子图同构的web数据自动可视化方法,其特征在于,所述步骤3.2的过程如下:

3.2.1、若VALUE的数据类型非OBJECT,同时非ARRAY,创建深度为level+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤3.2;

3.2.2、若VALUE的数据类型为ARRAY,创建深度level’=level+1的索引节点,节点名称name为关键字KEY,节点值类型vType为ARRAY,isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;

3.2.2.1、若所述3.2.2中的VALUE数组的元素不是OBJECT类型,则创建level”=level’+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤3.2;

3.2.2.2、若所述3.2.2中的VALUE数组的元素是OBJECT类型,则创建level”=level’+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型;若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;

3.2.2.3、将步骤3.2.2.2中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2;

3.2.3、若VALUE的数据类型为OBJECT,创建深度level’=level+1的索引节点,节点名称name为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型;若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;

3.2.4、将步骤3.2.3中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2。

6.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第四步的步骤如下:

4.1、从level=1的TRoot开始,按广度优先策略,按层遍历MDT的根节点与索引节点;广度优先策略将按level逐层遍历MDT,从level=1的第一层开始遍历,当level层的节点遍历完成后,再继续遍历level+1层的节点;

4.2、将MDT的TRoot存入遍历队列;

4.3、按遍历队列顺序,读取每个节点的isMark属性;过程如下:

4.3.1、若遍历到的节点的isMark属性值为1,则保留当前节点的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤4.3.4;

4.3.2、若遍历到的节点的isMark属性值为0,则不进行任何操作,跳转至步骤4.3.4;

4.3.3、若遍历到的节点为数据节点,将当前节点从遍历队列中删除,跳转至步骤4.3;

4.3.4、将当前遍历到的节点的子节点加入遍历队列,并将当前节点从遍历队列中删除,再跳转至步骤4.3;

4.4、当遍历队列中全部为数据节点时或遍历队列为空时,停止遍历,结束方法;

4.5、输出剪枝后的MDT。

7.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第五步的过程如下:

5.1、定义VT包括基础属性BASICATTRIBUTE和可视结构DVSCHEMA两个部分,形式化定义如(11),其中BASICATTRIBUTE保存了图形标题和副标题;

(11)、VisualModel::=

5.2、BASICATTRIBUTE包括三个属性:标题title、子标题subtitle、属性attributes,形式化定义如(12),title用于保存最终生成的可视化图形的标题,subtitle用于保存最终生成的可视化图形的子标题,attributes用于保存最终生成的可视化图形的位置、颜色组合、字体、字号设置参数;

(12)、BASICATTRIBUTE::=<subtitle><attributes></p></div><div num="63"><p class="claim-text">5.3、BASICATTRIBUTE根据图形所需的数据类型、图形数据结构、图形维度将常见的可视化图形归纳为四种基础类别:一般图形General、拓扑图Topology、地图Map、文本图形Text,形式化定义如(13);</p></div><div num="64"><p class="claim-text">(13)、DVSCHEMA::=<General><Topology><Map><Text></p></div><div num="65"><p class="claim-text">5.4、步骤5.3中的四种基础类别下属均分别包含两个属性:图形类型VType和图形结构StructModel,VType保存了该类别所属图形种类,StructModel保存了该类别所属图形的可视化结构,形式化定义如(14),“A::B”表示“A包含了属性B”;</p></div><div num="66"><p class="claim-text">(14)、DVSCHEMA::=<General><Topology><Map><Text>::<VType><StructModel>所述5.4中,四种基础类别的VType属性的所属图形如下:</p></div><div num="67"><p class="claim-text">5.4.1、General包括柱状图BarChart、折线图LineChart、饼图PieChart、雷达图RadarChart、散点图ScatterChart;</p></div><div num="68"><p class="claim-text">5.4.2、Topology包括网络图NetworkChart、树图TreeMap、面积树图TreeMapChart;</p></div><div num="69"><p class="claim-text">5.4.3、Map包括地区地图AreaMapChart、国家地图CountryMapChart、世界地图WorldMapChart;</p></div><div num="70"><p class="claim-text">5.4.4、Text包括词云WorldCloudChart;</p></div><div num="71"><p class="claim-text">5.5、步骤5.4中四种基础类别均有各自的映射关系Mapping,描述了各类图形的数据结构、数据维度、图形结构关系、数据映射位置信息;根据Mapping信息并结合图形的数据结构,可以抽象出各类图形的可视化结构StructModel,步骤三中所生成的MDT将与StructModel进行匹配,来判断REST API的返回数据能够生成何种可视化图形。</p></div><div num="72"><p class="claim-text">8.如权利要求7所述的基于子图同构的web数据自动可视化方法,其特征在于,所述步骤5.5的过程如下:</p></div><div num="73"><p class="claim-text">5.5.1、General类型中的图形通常用于表示二维数据或三维数据,可用二元组(XAxis,YAxis)或三元组(XAxis,YAxis,ZAxis)来表示信息,此类图形的Mapping结构如(15),其中LegendName表示图例名称,以ARRAY类型来存储各分组信息;根据Mapping结构可抽象出基础StructModel的结构如(16),StructModel的子节点为临时根节点Root,Root包含两个子节点:键值对K_V与图例节点LegendNode;</p></div><div num="74"><p class="claim-text">(15)、Mapping::=<XAxis,YAxis,[ZAxis]><LegendName>(16)、StructModel::=<Root::<K_V><LegendNode>></p></div><div num="75"><p class="claim-text">5.5.2、Topology类型中的图形通常用于表示拓扑关系数据,树图与面积树图可用嵌套的键值对{key:value,children:{key:value}}来表示属性结构,Mapping结构如(17);网络图可用节点集合Nodes和边集合Links来表示图结构,Mapping结构如(18),其中source表示一条边link的起始节点,target表示该条边link的指向节点;根据Mapping结构可抽象出基础StructModel的结构如(19),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含两个子节点:键值对K_V和孩子节点children,children的子结构为键值对K_V;Root2包含两个子节点:节点集合Nodes和边集合Links,节点集合的子节点为关键字key和值value,其中value为空,边集合的子节点为起点source和目标target;</p></div><div num="76"><p class="claim-text">(17)、Mapping::=<K_V><children::<K_V>>(18)、Mapping::=<Nodes::<key,[value]><Links::<source><target>>(19)、StructModel::=<Root1::<K_V><children::<K_V>>><Root2::<Nodes::<key,[value]>,<Links::<source><target>>></p></div><div num="77"><p class="claim-text">5.5.3、Map类型中的图形用于表示地图信息,用键值对数组[{PlaceName:value}]或三元组数组[{lng,lat,value}]来表示地图信息,此类图形的Mapping结构如(20),其中PlaceName表示地名,lng表示纬度,lat表示经度;根据Mapping结构可抽象出基础StructModel的结构如(21),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含子子节点键值对K_V;Root2包含了三个子节点:经度lat,纬度lng,数值value;</p></div><div num="78"><p class="claim-text">(20)、Mapping::=<Data1::<PlaceName><value>><Data2::<lng><lat><value>>(21)、StructModel::=<Root1::<K_V>>,<Root2::<lng>,<lat>,<value>></p></div><div num="79"><p class="claim-text">5.5.4、Text类型中的图形常用二元组(Keyword,frequency)来表示关键字频率,此类图形的Mapping结构如(22),其中Keyword为文本中提取出的词汇,frequency表示该词汇在文本中的出现频率;根据Mapping结构可抽象出基础StructModel的结构如(23),StructModel的子节点为临时根节点Root,Root包含了键值对K_V;</p></div><div num="80"><p class="claim-text">(22)、Mapping::=<Keyword><frequency>(23)、StructModel::=<Root::<K_V>>。</p></div><div num="81"><p class="claim-text">9.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第六步的过程如下:</p></div><div num="82"><p class="claim-text">6.1、定义元结构树MST,包括子树根节点STRoot、子结构Substruct,形式化定义如(24),MST用于保存降维后的MDT;其中子结构Substruct由引导节点GNode和数据节点LNode两部分构成,形式化定义如(25);根节点STRoot内包含的信息同2.1.1至2.1.2;引导节点GNode内包含的信息同2.2.1至2.2.4;叶子节点LNode内包含的信息同2.3.1至2.3.3;同时用深度(level)来表示节点在树结构中的层数,STRoot默认为第一层,即level=1;</p></div><div num="83"><p class="claim-text">(24)、MST::=<subtree_root><Substruct>(25)、Substruct::=<guide_node><leaf_node></p></div><div num="84"><p class="claim-text">6.2、解析VT中四种基础类别的StructModel,提取每种StructModel中的临时根节点及其子结构,每一个临时根节点及其子结构构成的树结构片段将作为查询子图,根据步骤</p></div><div num="85"><p class="claim-text">5.5.1至5.5.4可以提取出六个查询子图:General类型的StructModel的下属Root为起点的子结构,Topology类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,Map类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,Text类型的StructModel的下属Root为起点的子结构;</p></div><div num="86"><p class="claim-text">6.3、定义基于子图同构的匹配方法Match(MST),以MST作为输入,将步骤6.2中的六个查询子图用StructModelk表示,与每个StructModelk同属于一个大类,即General、Topology、Map、Text之一的VType用VTypek表示;</p></div><div num="87"><p class="claim-text">6.4、基于子图同构的降维匹配算法通过对MDT进行降维操作生成MST后,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST)进行自动化匹配,将MDT作为输入,最后输出源数据可生成的图形种类及MST中的匹配片段;</p></div><div num="88"><p class="claim-text">6.5、根据Match(MST)方法输出的匹配片段从源数据中提取数据,并将数据根据Mapping结构映射到输出的对应类型的图形结构中,从而生成可视化图形。</p></div><div num="89"><p class="claim-text">10.如权利要求9所述的基于子图同构的web数据自动可视化方法,其特征在于,所述步骤6.3的过程如下:</p></div><div num="90"><p class="claim-text">6.3.1、按照广度优先策略,按层遍历MST,将MST的节点从STRoot开始,按层数从小到大的顺序,将STRoot和所有GNode存入遍历队列Q;</p></div><div num="91"><p class="claim-text">6.3.2、设置节点s为StructModelk的根节点;</p></div><div num="92"><p class="claim-text">6.3.3、按遍历队列Q的顺序,将当前Q中遍历到的节点xi与节点s进行比较,判断xi与s的isMark属性值是否相等;</p></div><div num="93"><p class="claim-text">6.3.3.1、若xi与s的isMark属性值相等,将xi加入集合P,设置i=i+1,跳转至步骤</p></div><div num="94"><p class="claim-text">6.3.3;</p></div><div num="95"><p class="claim-text">6.3.3.2、若xi与s的isMark属性值不相等,设置i=i+1,跳转至步骤6.3.3;</p></div><div num="96"><p class="claim-text">6.3.4、当Q遍历完成后,遍历集合P中的节点pj,判断pj与s的父子节点关系是否一致;</p></div><div num="97"><p class="claim-text">6.3.4.1、若pj与s的父子节点关系不一致,设置j=j+1,跳转至步骤6.3.4;</p></div><div num="98"><p class="claim-text">6.3.4.2、若pj与s的父子节点关系一致,将pi加入集合M,跳转至步骤6.3.5;</p></div><div num="99"><p class="claim-text">6.3.5、判断集合M与StructModelk的结构是否一致;</p></div><div num="100"><p class="claim-text">6.3.5.1、若M与StructModelk的结构一致,输出集合M和StructModelk对应的VTypek;清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.2;</p></div><div num="101"><p class="claim-text">6.3.5.2、若M与StructModelk的结构不一致,将s设置为它在StructModelk中的下一个节点,清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.3;</p></div><div num="102"><p class="claim-text">6.3.6、当六个查询子图均完成查询后,结束方法Match(MST),输出源数据可生成的图形种类VTypek及MST中匹配片段的集合M;</p></div><div num="103"><p class="claim-text">所述步骤6.4的过程如下:</p></div><div num="104"><p class="claim-text">6.4.1、按照广度优先策略,按层遍历MDT,将MDT的节点从TRoot开始,按层数从小到大的顺序,将TRoot和所有INode存入遍历队列L;</p></div><div num="105"><p class="claim-text">6.4.2、按遍历队列L的顺序,对当前遍历到的节点ma的isMark属性和m的子节点的type属性进行判断,是否符合isMark=1且type=”num”;</p></div><div num="106"><p class="claim-text">6.4.2.1、若isMark=1且type=”num”,将ma加入集合S,设置a=a+1,跳转至步骤6.4.2;</p></div><div num="107"><p class="claim-text">6.4.2.2、若不符合isMark=1且type=”num”,设置a=a+1,跳转至步骤6.4.2;</p></div><div num="108"><p class="claim-text">6.4.3、当L遍历完成后,按集合S中节点加入顺序的逆序来遍历集合S,当前遍历到的节点用nb表示;</p></div><div num="109"><p class="claim-text">6.4.4、如果在S中没有其他节点与nb有相同的父节点,将nb和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将nb从集合S中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;</p></div><div num="110"><p class="claim-text">6.4.5、如果在S中存在其他节点与nb有相同的父节点,将nb加入集合U;</p></div><div num="111"><p class="claim-text">6.4.6、按顺序遍历集合U,对遍历到的节点uc的arrayNum属性值进行判断;</p></div><div num="112"><p class="claim-text">6.4.6.1、若arrayNum>2,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将uc从集合U中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;</p></div><div num="113"><p class="claim-text">6.4.6.2、若arrayNum<=2,在U中查找出其他的arrayNum<=2节点d,将uc的父节点、uc、d、uc的子节点、d的子节点存储为总层数为3的临时子树subtree,若subtree与Topology类中StructModel的两个子结构之一结构相同,则将该subtree存入MST,以uc的父节点为STRoot,再从MDT中剪除subtree,并将nb和d从集合U与S中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;</p></div><div num="114"><p class="claim-text">6.4.6.3、若arrayNum<=2,在U中没有其他的arrayNum<=2节点,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将uc从集合U中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5。</p></div></span></div></div><div tabIndex="0" role="presentation" style="width:0;height:0;overflow:hidden;position:absolute;"></div></div><div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div><div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div></div><div tabIndex="0" role="presentation" style="width:0;height:0;overflow:hidden;position:absolute;"></div></div></div></div> <div class="right_content"><div class="right_content" style="width:;" data-v-aa7878aa><!----> <!----> <div class="command_box fourth" data-v-aa7878aa><div class="tit" data-v-aa7878aa><span data-v-aa7878aa><img src="/_nuxt/img/important.79aef07.svg" alt data-v-aa7878aa></span> <span class="desc" data-v-aa7878aa>推荐专利</span></div> <a target="_blank" title="一种Web可视化环境中的数据视图副本迭代方法" href="https://trade.9235.net/sell/detail/2017103418323" class="items clearfix" data-v-aa7878aa><div title="一种Web可视化环境中的数据视图副本迭代方法" class="title hand" data-v-aa7878aa>一种Web可视化环境中的数据视图副本迭代方法</div> <div class="bottom" data-v-aa7878aa><div class="tips typeName invente" data-v-aa7878aa>发明专利</div> <div class="price1" data-v-aa7878aa><span data-v-aa7878aa>面议</span></div></div></a><a target="_blank" title="可视化图表数据转换处理方法和装置" href="https://trade.9235.net/sell/detail/201710087569X" class="items clearfix" data-v-aa7878aa><div title="可视化图表数据转换处理方法和装置" class="title hand" data-v-aa7878aa>可视化图表数据转换处理方法和装置</div> <div class="bottom" data-v-aa7878aa><div class="tips typeName invente" data-v-aa7878aa>发明专利</div> <div class="price1" data-v-aa7878aa><span data-v-aa7878aa>面议</span></div></div></a><a target="_blank" title="一种电子信息数据可视化智能处理方法" href="https://trade.9235.net/sell/detail/202510360355X" class="items clearfix" data-v-aa7878aa><div title="一种电子信息数据可视化智能处理方法" class="title hand" data-v-aa7878aa>一种电子信息数据可视化智能处理方法</div> <div class="bottom" data-v-aa7878aa><div class="tips typeName invente" data-v-aa7878aa>发明专利</div> <div class="price1" data-v-aa7878aa><span data-v-aa7878aa>¥30000</span></div></div></a><a target="_blank" title="一种翻阅式数据可视化装置" href="https://trade.9235.net/sell/detail/2021215158954" class="items clearfix" data-v-aa7878aa><div title="一种翻阅式数据可视化装置" class="title hand" data-v-aa7878aa>一种翻阅式数据可视化装置</div> <div class="bottom" data-v-aa7878aa><div class="tips typeName ulity" data-v-aa7878aa>实用新型</div> <div class="price1" data-v-aa7878aa><span data-v-aa7878aa>¥1800</span></div></div></a></div> <div class="ques_box second img" data-v-aa7878aa><div class="btn" data-v-aa7878aa>我要求购</div></div> <!----> <div class="ques_box first" data-v-aa7878aa><div class="tit" data-v-aa7878aa>您有专利需要变现?</div> <div class="btn" data-v-aa7878aa>我要出售</div> <div class="desc" data-v-aa7878aa>智能匹配需求,快速出售</div></div> <!----> <!----> <!----> <!----> <!----> <!----> <!----></div></div></div></div><div class="addPool_dialog"><!----> <!----></div></div></div></div> <div id="footer"><div class="mwidth"><div class="foottxt"><div class="footlogo fl"></div> <div class="fr footmain"><div class="footnav1"><h3><a href="http://trade.9235.net/" target="_blank">利索能及</a></h3> <ul><li><a href="/sell/-p-1">专利商城</a></li> <li><a href="/purchase">专利求购</a></li></ul></div> <div class="footnav1"><h3>友情链接</h3> <ul><li><a target="_blank" href="https://9235.net">利索能及专利检索</a></li> <li><a target="_blank" href="https://www.cnipa.gov.cn/">国家知识产权局</a></li></ul></div> <div class="footnav1"><h3>关于我们</h3> <ul><li><a href="/agreement/register">注册协议</a></li> <li><a href="/map">网站地图</a></li> <li><span>v1.1.791</span></li></ul></div> <div class="footnav1 last1"><h3>联系我们</h3> <ul><li class="footer-kf"><div class="phone-desc">15618600796</div> <div class="whl_img"></div></li></ul></div> <div class="footnav1 last"></div></div> <div class="clear"></div></div> <!----></div> <div class="copyright">Copyright © 2018 上海笑溢网络科技有限公司 <a href="https://beian.miit.gov.cn/" target="_blank">备案号: 沪ICP备09049145号-13</a> <a href="https://tsm.miit.gov.cn/dxxzsp/" target="_blank"></a></div></div></div></div></div><script>window.__NUXT__=(function(a,b,c,d,e,f,g,h,i,j,k,l){k[0]={applicationNumber:"2017103418323",attachedImg:"https:\u002F\u002Fwww.9235.net\u002Fviewimg\u002FfnMSDw0MChIMEgsFElRQXFpYThIPDQwKDA0OCQwFDg8TV01a",applicant:i,options:{},patentStatusId:c,patentType:e,title:"一种Web可视化环境中的数据视图副本迭代方法",isFirstHand:a};k[1]={applicationNumber:"201710087569X",attachedImg:"https:\u002F\u002Fwww.9235.net\u002Fviewimg\u002FfnMSDw0MChIMEgwKElRQXFpYThIPDQwKDA0NBQoICwQTV01a",applicant:"平安科技(深圳)有限公司",options:{feeData:{paymentDeadline:"2027-03-17"}},patentStatusId:c,patentType:e,title:"可视化图表数据转换处理方法和装置",isFirstHand:a};k[2]={applicationNumber:"202510360355X",attachedImg:"https:\u002F\u002Fwww.9235.net\u002Fviewimg\u002FfnMSDw0PCBIMEgoPElRQXFpYThIPDQ8IDA0OCw0OCAgTV01a",applicant:"北京星光悦达文化科技有限公司",options:{},patentStatusId:c,patentType:e,title:"一种电子信息数据可视化智能处理方法",price:30000,isFirstHand:a};k[3]={applicationNumber:"2021215158954",attachedImg:"https:\u002F\u002Fwww.9235.net\u002Fviewimg\u002FfnMSDw0PDBIPEg4NDhJUUFxaWE4SDw0PDA8MCAwIBQQIE1dNWg==",applicant:"内江亿橙网络科技有限公司",options:{},patentStatusId:c,patentType:c,title:"一种翻阅式数据可视化装置",price:1800,isFirstHand:a};return {layout:"default",data:[{title:g,summary:h,info:{applicationNumber:"2019102014660",attachedImg:"https:\u002F\u002Fwww.9235.net\u002Fviewimg\u002FfnMSDw0MBBIMEgkNElRQXFpYThIPDQwEDA0PDQwJCwsTV01a",applicantType:"学校",applicant:i,options:{},agents:[{annualSales:d,isBroker:a,isCompany:a,isMember:a,statusDes:"未认证",priceDate:"2026-07-29 02:47:29",id:489752843012160,phone:"15320833693",fullName:"重庆智小智",kind:"personal",workYear:c,status:"unexamined",edges:{},showComplain:a},{annualSales:d,isBroker:a,isCompany:a,isMember:a,statusDes:"已认证",oriPrice:j,id:471614069450817,phone:"18621327849",fullName:"王汉麟",kind:"company",workYear:c,status:"pass",userID:3,edges:{},showComplain:a}],patentStatusId:c,patentType:e,summary:h,title:g,updatedAt:"2026-07-29",price:j,isFirstHand:a,ipc:"G06F16\u002F21",claimsHtml:"\u003Cdiv num=\"1\"\u003E\u003Cp class=\"claim-text\"\u003E1.一种基于子图同构的web数据自动可视化方法,其特征在于,所述方法包括以下步骤:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"2\"\u003E\u003Cp class=\"claim-text\"\u003E第一步:构建服务数据可视化建模与匹配方法的架构,包括三个模块:数据建模、图形建模和降维匹配;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"3\"\u003E\u003Cp class=\"claim-text\"\u003E第二步:定义元数据树MDT,包括根节点TRoot、索引节点INode、数据节点DNode,同时用深度level来表示节点在树结构中的层数,根节点默认为第一层,即level=1;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"4\"\u003E\u003Cp class=\"claim-text\"\u003E第三步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"5\"\u003E\u003Cp class=\"claim-text\"\u003E第四步:由于JSON数据集中存在批量数据,批量数据以相同的数据结构形式存在,在数据集中数组的形式表现;若是用户的对于JSON数据分析的重点不在于数据的定位、查询,而是针对数据结构的分析,在上述JSON数据解析建模的方法基础上,可以通过剪枝的方法,保留数据结构信息,剪除相同的重复数据结构,缩小模型的体量,但仍然保留数据结构,降低JSON数据结构所带来的查询开销;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"6\"\u003E\u003Cp class=\"claim-text\"\u003E第五步:对可视化图形进行分类,归纳总结各类图形的属性及结构特征,通过建模创建一种可视模型树VT,来形式化地表述各类图形信息;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"7\"\u003E\u003Cp class=\"claim-text\"\u003E第六步:子图同构是一个在查询图中查找查询子图,判断查询图中是否包含了查询子图的问题;先用降维方法对MDT进行降维操作,生成元结构树MST,再将可视模型树VT与MST进行匹配查询,调用基于子图同构的匹配方法查找MST中与VT的各个StructModel匹配的片段,并根据Mapping信息进行数据映射,生成可视化图形。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"8\"\u003E\u003Cp class=\"claim-text\"\u003E2.如权利要求1所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第一步的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"9\"\u003E\u003Cp class=\"claim-text\"\u003E1.1、数据建模:从Internet获取的REST服务经解析器解析后进行注册,存储于缓存cache或数据库Database中,自动调用后所获取的基于JSON的REST服务数据,通过服务数据建模将服务数据转变为标准化模型,并抽取出主要数据结构生成元数据树MDT;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"10\"\u003E\u003Cp class=\"claim-text\"\u003E1.2、图形建模:对多种配置型可视化工具所支持的图形进行数据结构分析与归纳,整理出主要图形的通用数据结构及数据映射关系,再根据上述信息进行可视化图形建模,创建描述性可视模型VT;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"11\"\u003E\u003Cp class=\"claim-text\"\u003E1.3、降维匹配:调取数据建模所生成的MDT,通过降维算法对其进行结构降维,获得包含源数据基础数据结构的元结构树MST,然后通过VT解析器提取出VT中的图形结构模型,在MST中使用基于子图同构的匹配算法来搜索与图形结构模型匹配的数据结构片段,最后输出源数据可生成的图形种类及MST中的匹配片段;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"12\"\u003E\u003Cp class=\"claim-text\"\u003E1.4、图像生成:根据所属1.3输出的图形种类及MST中的匹配片段,将其按照VT解析器提取出的映射关系通过映射处理器来自动化生成可视化图形。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"13\"\u003E\u003Cp class=\"claim-text\"\u003E3.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第二步的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"14\"\u003E\u003Cp class=\"claim-text\"\u003E2.1、根节点:MDT的根节点,即MDT的起始节点;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"15\"\u003E\u003Cp class=\"claim-text\"\u003E2.2、索引节点:代表JSON数据中每一个关键字KEY,但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"16\"\u003E\u003Cp class=\"claim-text\"\u003E2.3、数据节点:代表JSON数据中最内层的“键-值”对,存储为叶子节点;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"17\"\u003E\u003Cp class=\"claim-text\"\u003E所述2.1中,所述根节点内包含以下信息:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"18\"\u003E\u003Cp class=\"claim-text\"\u003E2.1.1、星标isMark:记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(1)(2),isMark的数据类型为数字NUMBER,若JSON数据中“键-值”对中的值VALUE为数组ARRAY,则isMark=1,否则isMark=0;“#”为数据类型定义符,“::=”为赋值符,〖A→condition⊕\u003CB\u003E:\u003CC\u003E〗表示若A符合条件condition,则该式值为B,否则该式值为C;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"19\"\u003E\u003Cp class=\"claim-text\"\u003E(1)、“isMark”#\u003CNUMBER\u003E(2)、“isMark”::=〖“VALUE”→ARRAY⊕\u003C1\u003E:\u003C0\u003E〗\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"20\"\u003E\u003Cp class=\"claim-text\"\u003E2.1.2、元素数量arrayNum:若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为数字NUMBER类型,若JSON数据中“键-值”对中的值VALUE为ARRAY,则arrayNum等于VALUE数组的长度,否则arrayNum=0;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"21\"\u003E\u003Cp class=\"claim-text\"\u003E(3)、“arrayNum”#\u003CNUMBER\u003E(4)、“arrayNum”::=〖“VALUE”→ARRAY⊕\u003CARRAY.length\u003E:\u003C0\u003E〗所述2.2中,所述索引节点内包含以下信息:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"22\"\u003E\u003Cp class=\"claim-text\"\u003E2.2.1、节点名称name:name的数据类型为字符串STRING,name属性值为JSON数据中“键-值”对中的关键字KEY;name形式化定义表述如(5)(6);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"23\"\u003E\u003Cp class=\"claim-text\"\u003E(5)、“name”#\u003CSTRING\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"24\"\u003E\u003Cp class=\"claim-text\"\u003E(6)、“name”::=\u003CKEY\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"25\"\u003E\u003Cp class=\"claim-text\"\u003E2.2.2、节点值类型vType:vType是JSON数据中“键-值”对中的值VALUE的数据类型,属性值为对象OBJECT、数组ARRAY、字符串STRING、数字NUMBER、TRUE、FALSE之一;vType形式化定义表述如(7);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"26\"\u003E\u003Cp class=\"claim-text\"\u003E(7)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"27\"\u003E\u003Cp class=\"claim-text\"\u003E2.2.3、星标isMark:记录JSON数据中,以当前节点名称name作为关键字的“键-值”对中的值VALUE是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述同步骤\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"28\"\u003E\u003Cp class=\"claim-text\"\u003E2.1.1中的(1)(2);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"29\"\u003E\u003Cp class=\"claim-text\"\u003E2.2.4、元素数量arrayNum:若当前节点的isMark为1,则记录“键-值”对中的值VALUE的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述同步骤\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"30\"\u003E\u003Cp class=\"claim-text\"\u003E2.1.2中的(3)(4);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"31\"\u003E\u003Cp class=\"claim-text\"\u003E所述2.3中,所述数据节点内包含以下信息:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"32\"\u003E\u003Cp class=\"claim-text\"\u003E2.3.1、节点名称name:保存JSON数据中“键-值”对中的关键字KEY,数据类型为字符串STRING;name形式化定义表述同步骤2.2.1中的(5)(6);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"33\"\u003E\u003Cp class=\"claim-text\"\u003E2.3.2、节点值nValue:nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值VALUE;nValue形式化定义表述如(8)(9);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"34\"\u003E\u003Cp class=\"claim-text\"\u003E(8)、“nValue”#\u003CSTRING\u003E(9)、“nValue”::=\u003CVALUE\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"35\"\u003E\u003Cp class=\"claim-text\"\u003E2.3.3、节点类型type:保存JSON数据中“键-值”对中的值VALUE的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(10);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"36\"\u003E\u003Cp class=\"claim-text\"\u003E(10)、“type”::=[“str”|“num”|NULL]。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"37\"\u003E\u003Cp class=\"claim-text\"\u003E4.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第三步的步骤如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"38\"\u003E\u003Cp class=\"claim-text\"\u003E3.1、创建一棵根节点为TRoot的MDT,TRoot是起始节点,根节点的深度level默认为1;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"39\"\u003E\u003Cp class=\"claim-text\"\u003E3.2、读取JSON数据集ds,如果是首次读取ds,设置ds的第一个元素为当前元素,元素包括关键字KEY及其值VALUE;否则设置ds的下一个元素为当前元素;若JSON数据最外层就是ARRAY,则TRoot的isMark=1,元素数量arrayNum为ARRAY元素个数。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"40\"\u003E\u003Cp class=\"claim-text\"\u003E5.如权利要求4所述的基于子图同构的web数据自动可视化方法,其特征在于,所述步骤3.2的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"41\"\u003E\u003Cp class=\"claim-text\"\u003E3.2.1、若VALUE的数据类型非OBJECT,同时非ARRAY,创建深度为level+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤3.2;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"42\"\u003E\u003Cp class=\"claim-text\"\u003E3.2.2、若VALUE的数据类型为ARRAY,创建深度level’=level+1的索引节点,节点名称name为关键字KEY,节点值类型vType为ARRAY,isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"43\"\u003E\u003Cp class=\"claim-text\"\u003E3.2.2.1、若所述3.2.2中的VALUE数组的元素不是OBJECT类型,则创建level”=level’+1的数据节点,节点名称name为关键字KEY,节点值nValue为值VALUE,节点类型type为值VALUE的数据类型;完成后跳转至步骤3.2;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"44\"\u003E\u003Cp class=\"claim-text\"\u003E3.2.2.2、若所述3.2.2中的VALUE数组的元素是OBJECT类型,则创建level”=level’+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型;若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"45\"\u003E\u003Cp class=\"claim-text\"\u003E3.2.2.3、将步骤3.2.2.2中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"46\"\u003E\u003Cp class=\"claim-text\"\u003E3.2.3、若VALUE的数据类型为OBJECT,创建深度level’=level+1的索引节点,节点名称name为每个OBJECT元素中的关键字KEY,节点值类型vType为每个OBJECT元素中的值VALUE的数据类型;若当前vType为ARRAY,则isMark=1,元素数量arrayNum为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"47\"\u003E\u003Cp class=\"claim-text\"\u003E3.2.4、将步骤3.2.3中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"48\"\u003E\u003Cp class=\"claim-text\"\u003E6.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第四步的步骤如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"49\"\u003E\u003Cp class=\"claim-text\"\u003E4.1、从level=1的TRoot开始,按广度优先策略,按层遍历MDT的根节点与索引节点;广度优先策略将按level逐层遍历MDT,从level=1的第一层开始遍历,当level层的节点遍历完成后,再继续遍历level+1层的节点;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"50\"\u003E\u003Cp class=\"claim-text\"\u003E4.2、将MDT的TRoot存入遍历队列;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"51\"\u003E\u003Cp class=\"claim-text\"\u003E4.3、按遍历队列顺序,读取每个节点的isMark属性;过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"52\"\u003E\u003Cp class=\"claim-text\"\u003E4.3.1、若遍历到的节点的isMark属性值为1,则保留当前节点的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤4.3.4;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"53\"\u003E\u003Cp class=\"claim-text\"\u003E4.3.2、若遍历到的节点的isMark属性值为0,则不进行任何操作,跳转至步骤4.3.4;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"54\"\u003E\u003Cp class=\"claim-text\"\u003E4.3.3、若遍历到的节点为数据节点,将当前节点从遍历队列中删除,跳转至步骤4.3;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"55\"\u003E\u003Cp class=\"claim-text\"\u003E4.3.4、将当前遍历到的节点的子节点加入遍历队列,并将当前节点从遍历队列中删除,再跳转至步骤4.3;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"56\"\u003E\u003Cp class=\"claim-text\"\u003E4.4、当遍历队列中全部为数据节点时或遍历队列为空时,停止遍历,结束方法;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"57\"\u003E\u003Cp class=\"claim-text\"\u003E4.5、输出剪枝后的MDT。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"58\"\u003E\u003Cp class=\"claim-text\"\u003E7.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第五步的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"59\"\u003E\u003Cp class=\"claim-text\"\u003E5.1、定义VT包括基础属性BASICATTRIBUTE和可视结构DVSCHEMA两个部分,形式化定义如(11),其中BASICATTRIBUTE保存了图形标题和副标题;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"60\"\u003E\u003Cp class=\"claim-text\"\u003E(11)、VisualModel::=\u003CBASICATTRIBUTE\u003E\u003CDVSCHEMA\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"61\"\u003E\u003Cp class=\"claim-text\"\u003E5.2、BASICATTRIBUTE包括三个属性:标题title、子标题subtitle、属性attributes,形式化定义如(12),title用于保存最终生成的可视化图形的标题,subtitle用于保存最终生成的可视化图形的子标题,attributes用于保存最终生成的可视化图形的位置、颜色组合、字体、字号设置参数;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"62\"\u003E\u003Cp class=\"claim-text\"\u003E(12)、BASICATTRIBUTE::=\u003Ctitle\u003E\u003Csubtitle\u003E\u003Cattributes\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"63\"\u003E\u003Cp class=\"claim-text\"\u003E5.3、BASICATTRIBUTE根据图形所需的数据类型、图形数据结构、图形维度将常见的可视化图形归纳为四种基础类别:一般图形General、拓扑图Topology、地图Map、文本图形Text,形式化定义如(13);\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"64\"\u003E\u003Cp class=\"claim-text\"\u003E(13)、DVSCHEMA::=\u003CGeneral\u003E\u003CTopology\u003E\u003CMap\u003E\u003CText\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"65\"\u003E\u003Cp class=\"claim-text\"\u003E5.4、步骤5.3中的四种基础类别下属均分别包含两个属性:图形类型VType和图形结构StructModel,VType保存了该类别所属图形种类,StructModel保存了该类别所属图形的可视化结构,形式化定义如(14),“A::B”表示“A包含了属性B”;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"66\"\u003E\u003Cp class=\"claim-text\"\u003E(14)、DVSCHEMA::=\u003CGeneral\u003E\u003CTopology\u003E\u003CMap\u003E\u003CText\u003E::\u003CVType\u003E\u003CStructModel\u003E所述5.4中,四种基础类别的VType属性的所属图形如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"67\"\u003E\u003Cp class=\"claim-text\"\u003E5.4.1、General包括柱状图BarChart、折线图LineChart、饼图PieChart、雷达图RadarChart、散点图ScatterChart;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"68\"\u003E\u003Cp class=\"claim-text\"\u003E5.4.2、Topology包括网络图NetworkChart、树图TreeMap、面积树图TreeMapChart;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"69\"\u003E\u003Cp class=\"claim-text\"\u003E5.4.3、Map包括地区地图AreaMapChart、国家地图CountryMapChart、世界地图WorldMapChart;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"70\"\u003E\u003Cp class=\"claim-text\"\u003E5.4.4、Text包括词云WorldCloudChart;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"71\"\u003E\u003Cp class=\"claim-text\"\u003E5.5、步骤5.4中四种基础类别均有各自的映射关系Mapping,描述了各类图形的数据结构、数据维度、图形结构关系、数据映射位置信息;根据Mapping信息并结合图形的数据结构,可以抽象出各类图形的可视化结构StructModel,步骤三中所生成的MDT将与StructModel进行匹配,来判断REST API的返回数据能够生成何种可视化图形。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"72\"\u003E\u003Cp class=\"claim-text\"\u003E8.如权利要求7所述的基于子图同构的web数据自动可视化方法,其特征在于,所述步骤5.5的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"73\"\u003E\u003Cp class=\"claim-text\"\u003E5.5.1、General类型中的图形通常用于表示二维数据或三维数据,可用二元组(XAxis,YAxis)或三元组(XAxis,YAxis,ZAxis)来表示信息,此类图形的Mapping结构如(15),其中LegendName表示图例名称,以ARRAY类型来存储各分组信息;根据Mapping结构可抽象出基础StructModel的结构如(16),StructModel的子节点为临时根节点Root,Root包含两个子节点:键值对K_V与图例节点LegendNode;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"74\"\u003E\u003Cp class=\"claim-text\"\u003E(15)、Mapping::=\u003CXAxis,YAxis,[ZAxis]\u003E\u003CLegendName\u003E(16)、StructModel::=\u003CRoot::\u003CK_V\u003E\u003CLegendNode\u003E\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"75\"\u003E\u003Cp class=\"claim-text\"\u003E5.5.2、Topology类型中的图形通常用于表示拓扑关系数据,树图与面积树图可用嵌套的键值对{key:value,children:{key:value}}来表示属性结构,Mapping结构如(17);网络图可用节点集合Nodes和边集合Links来表示图结构,Mapping结构如(18),其中source表示一条边link的起始节点,target表示该条边link的指向节点;根据Mapping结构可抽象出基础StructModel的结构如(19),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含两个子节点:键值对K_V和孩子节点children,children的子结构为键值对K_V;Root2包含两个子节点:节点集合Nodes和边集合Links,节点集合的子节点为关键字key和值value,其中value为空,边集合的子节点为起点source和目标target;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"76\"\u003E\u003Cp class=\"claim-text\"\u003E(17)、Mapping::=\u003CK_V\u003E\u003Cchildren::\u003CK_V\u003E\u003E(18)、Mapping::=\u003CNodes::\u003Ckey,[value]\u003E\u003CLinks::\u003Csource\u003E\u003Ctarget\u003E\u003E(19)、StructModel::=\u003CRoot1::\u003CK_V\u003E\u003Cchildren::\u003CK_V\u003E\u003E\u003E\u003CRoot2::\u003CNodes::\u003Ckey,[value]\u003E,\u003CLinks::\u003Csource\u003E\u003Ctarget\u003E\u003E\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"77\"\u003E\u003Cp class=\"claim-text\"\u003E5.5.3、Map类型中的图形用于表示地图信息,用键值对数组[{PlaceName:value}]或三元组数组[{lng,lat,value}]来表示地图信息,此类图形的Mapping结构如(20),其中PlaceName表示地名,lng表示纬度,lat表示经度;根据Mapping结构可抽象出基础StructModel的结构如(21),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含子子节点键值对K_V;Root2包含了三个子节点:经度lat,纬度lng,数值value;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"78\"\u003E\u003Cp class=\"claim-text\"\u003E(20)、Mapping::=\u003CData1::\u003CPlaceName\u003E\u003Cvalue\u003E\u003E\u003CData2::\u003Clng\u003E\u003Clat\u003E\u003Cvalue\u003E\u003E(21)、StructModel::=\u003CRoot1::\u003CK_V\u003E\u003E,\u003CRoot2::\u003Clng\u003E,\u003Clat\u003E,\u003Cvalue\u003E\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"79\"\u003E\u003Cp class=\"claim-text\"\u003E5.5.4、Text类型中的图形常用二元组(Keyword,frequency)来表示关键字频率,此类图形的Mapping结构如(22),其中Keyword为文本中提取出的词汇,frequency表示该词汇在文本中的出现频率;根据Mapping结构可抽象出基础StructModel的结构如(23),StructModel的子节点为临时根节点Root,Root包含了键值对K_V;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"80\"\u003E\u003Cp class=\"claim-text\"\u003E(22)、Mapping::=\u003CKeyword\u003E\u003Cfrequency\u003E(23)、StructModel::=\u003CRoot::\u003CK_V\u003E\u003E。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"81\"\u003E\u003Cp class=\"claim-text\"\u003E9.如权利要求1或2所述的基于子图同构的web数据自动可视化方法,其特征在于,所述第六步的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"82\"\u003E\u003Cp class=\"claim-text\"\u003E6.1、定义元结构树MST,包括子树根节点STRoot、子结构Substruct,形式化定义如(24),MST用于保存降维后的MDT;其中子结构Substruct由引导节点GNode和数据节点LNode两部分构成,形式化定义如(25);根节点STRoot内包含的信息同2.1.1至2.1.2;引导节点GNode内包含的信息同2.2.1至2.2.4;叶子节点LNode内包含的信息同2.3.1至2.3.3;同时用深度(level)来表示节点在树结构中的层数,STRoot默认为第一层,即level=1;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"83\"\u003E\u003Cp class=\"claim-text\"\u003E(24)、MST::=\u003Csubtree_root\u003E\u003CSubstruct\u003E(25)、Substruct::=\u003Cguide_node\u003E\u003Cleaf_node\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"84\"\u003E\u003Cp class=\"claim-text\"\u003E6.2、解析VT中四种基础类别的StructModel,提取每种StructModel中的临时根节点及其子结构,每一个临时根节点及其子结构构成的树结构片段将作为查询子图,根据步骤\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"85\"\u003E\u003Cp class=\"claim-text\"\u003E5.5.1至5.5.4可以提取出六个查询子图:General类型的StructModel的下属Root为起点的子结构,Topology类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,Map类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,Text类型的StructModel的下属Root为起点的子结构;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"86\"\u003E\u003Cp class=\"claim-text\"\u003E6.3、定义基于子图同构的匹配方法Match(MST),以MST作为输入,将步骤6.2中的六个查询子图用StructModelk表示,与每个StructModelk同属于一个大类,即General、Topology、Map、Text之一的VType用VTypek表示;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"87\"\u003E\u003Cp class=\"claim-text\"\u003E6.4、基于子图同构的降维匹配算法通过对MDT进行降维操作生成MST后,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST)进行自动化匹配,将MDT作为输入,最后输出源数据可生成的图形种类及MST中的匹配片段;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"88\"\u003E\u003Cp class=\"claim-text\"\u003E6.5、根据Match(MST)方法输出的匹配片段从源数据中提取数据,并将数据根据Mapping结构映射到输出的对应类型的图形结构中,从而生成可视化图形。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"89\"\u003E\u003Cp class=\"claim-text\"\u003E10.如权利要求9所述的基于子图同构的web数据自动可视化方法,其特征在于,所述步骤6.3的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"90\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.1、按照广度优先策略,按层遍历MST,将MST的节点从STRoot开始,按层数从小到大的顺序,将STRoot和所有GNode存入遍历队列Q;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"91\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.2、设置节点s为StructModelk的根节点;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"92\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.3、按遍历队列Q的顺序,将当前Q中遍历到的节点xi与节点s进行比较,判断xi与s的isMark属性值是否相等;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"93\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.3.1、若xi与s的isMark属性值相等,将xi加入集合P,设置i=i+1,跳转至步骤\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"94\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.3;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"95\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.3.2、若xi与s的isMark属性值不相等,设置i=i+1,跳转至步骤6.3.3;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"96\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.4、当Q遍历完成后,遍历集合P中的节点pj,判断pj与s的父子节点关系是否一致;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"97\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.4.1、若pj与s的父子节点关系不一致,设置j=j+1,跳转至步骤6.3.4;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"98\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.4.2、若pj与s的父子节点关系一致,将pi加入集合M,跳转至步骤6.3.5;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"99\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.5、判断集合M与StructModelk的结构是否一致;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"100\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.5.1、若M与StructModelk的结构一致,输出集合M和StructModelk对应的VTypek;清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.2;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"101\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.5.2、若M与StructModelk的结构不一致,将s设置为它在StructModelk中的下一个节点,清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.3;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"102\"\u003E\u003Cp class=\"claim-text\"\u003E6.3.6、当六个查询子图均完成查询后,结束方法Match(MST),输出源数据可生成的图形种类VTypek及MST中匹配片段的集合M;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"103\"\u003E\u003Cp class=\"claim-text\"\u003E所述步骤6.4的过程如下:\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"104\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.1、按照广度优先策略,按层遍历MDT,将MDT的节点从TRoot开始,按层数从小到大的顺序,将TRoot和所有INode存入遍历队列L;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"105\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.2、按遍历队列L的顺序,对当前遍历到的节点ma的isMark属性和m的子节点的type属性进行判断,是否符合isMark=1且type=”num”;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"106\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.2.1、若isMark=1且type=”num”,将ma加入集合S,设置a=a+1,跳转至步骤6.4.2;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"107\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.2.2、若不符合isMark=1且type=”num”,设置a=a+1,跳转至步骤6.4.2;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"108\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.3、当L遍历完成后,按集合S中节点加入顺序的逆序来遍历集合S,当前遍历到的节点用nb表示;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"109\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.4、如果在S中没有其他节点与nb有相同的父节点,将nb和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将nb从集合S中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"110\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.5、如果在S中存在其他节点与nb有相同的父节点,将nb加入集合U;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"111\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.6、按顺序遍历集合U,对遍历到的节点uc的arrayNum属性值进行判断;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"112\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.6.1、若arrayNum\u003E2,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将uc从集合U中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"113\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.6.2、若arrayNum\u003C=2,在U中查找出其他的arrayNum\u003C=2节点d,将uc的父节点、uc、d、uc的子节点、d的子节点存储为总层数为3的临时子树subtree,若subtree与Topology类中StructModel的两个子结构之一结构相同,则将该subtree存入MST,以uc的父节点为STRoot,再从MDT中剪除subtree,并将nb和d从集合U与S中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cdiv num=\"114\"\u003E\u003Cp class=\"claim-text\"\u003E6.4.6.3、若arrayNum\u003C=2,在U中没有其他的arrayNum\u003C=2节点,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将uc从集合U中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E",descriptionHTML:"\u003Ch3 class=\"subhead\"\u003E基于子图同构的web数据自动可视化方法\u003C\u002Fh3\u003E\u003Ch3 class=\"sub-head\"\u003E技术领域\u003C\u002Fh3\u003E\u003Cdiv\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0001] 本发明涉及一种基于子图同构的web数据自动可视化方法。\u003C\u002Fdiv\u003E\u003Ch3 class=\"sub-head\"\u003E背景技术\u003C\u002Fh3\u003E\u003Cdiv\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0002] REST(Representational State Transfer)架构风格于2000年发布于国际会议ICSE上,它是一种Web体系结构的抽象模型,用于指导重新设计和定义超文本传输协议和统\u003Cbr\u003E一资源标识符。至今仍然能够根据这种架构风格的应用来了解万维网的工作方式与原理,\u003Cbr\u003E这对于大规模软件架构的理解与发展有重要意义。Roy T.Fielding博士提出REST架构风格\u003Cbr\u003E的论文在谷歌学术上统计已经被引用超过7000次,发布于ICSE\u002FTOIT的论文被引用超过\u003Cbr\u003E2000次。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0003] REST服务的流行使得网络上出现了大量的轻量级数据服务,并持续保持爆炸性指数增长,国际上网站上也出现了大量服务供应商,致力于网络服务的集中供应与质量保障。\u003Cbr\u003E大型在线web服务网站ProgrammableWeb聚集了各个领域大量的API信息,目前其收集的API\u003Cbr\u003E数量已超过两万,其中REST架构风格的服务占80%以上;各大网络科技公司也有自己的API\u003Cbr\u003E公开平台,如:Google、YouTube、Facebook、百度、阿里巴巴;还有许多个人开发的API公布在\u003Cbr\u003EGitHub和个人BLOG上。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0004] ProgrammableWeb所收集的服务中,响应格式种类繁多,其中以JSON与XML格式为主。XML(可扩展标记语言)是最古老的数据格式之一。它由W3C(万维网联盟)定义,并基于较\u003Cbr\u003E旧的SGML(标准通用标记语言)格式。在XML中,数据使用元素和属性进行结构化。JSON\u003Cbr\u003E(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,同时\u003Cbr\u003E也易于机器解析和生成。JSON采用完全独立于语言的文本格式,是一种理想的数据交换语\u003Cbr\u003E言。相比之下,XML有大量的冗余元素,重复的元素名称导致数据体量增大。JSON则没有重复\u003Cbr\u003E元素名称所带来的数据冗余,数据传输速率更高,解析效率与查找效率都高于XML。近年来\u003Cbr\u003E开发者更倾向于使用JSON作为数据响应格式。在ProgrammableWeb收集的REST服务中,响应\u003Cbr\u003E格式支持JSON的服务占据了90%以上的比例。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0005] 多样化的服务催生了巨量的数据信息,而数据信息创造的真正价值在于数据分析。数据可视化可以通过交互式可视化界面及数据-图像转换技术来辅助用户对数据进行\u003Cbr\u003E分析理解。研究人员研发了多种可视化平台,试图实现数据自动或半自动可视化。Roth提出\u003Cbr\u003E的SAGE是经典的可视化设计系统,可以根据数据的特性,在用户指定相关约束的情况下,自\u003Cbr\u003E动生成可视化;Satyanarayan提出的Lyra系统在数据管道中选择数据区域后,根据用户选\u003Cbr\u003E定的可视化图形及参数实现数据可视化;Ren提出的iVisDesigner系统提供了统一界面进\u003Cbr\u003E行交互式可视化创建、编辑操作,由固定模式定义的数据集在转换为内部元素后用于可视\u003Cbr\u003E化映射;Viegas设计的Many Eyes在用户上传数据后,先指定可视化方法,并在此基础上进\u003Cbr\u003E行各种配置,最终生成交互式可视化结果。在上述可视化系统中,为了尽可能实现数据与图\u003Cbr\u003E形的自动化匹配,都对数据结构与格式有固定的要求。数据结构与可视图形结构的匹配问\u003Cbr\u003E题可以抽象为子图同构问题,现已有多种算法针对该问题提出了解决方案。Ullmann算法是\u003Cbr\u003E一种深度递归算法,也是第一个行之有效的子图同构搜索算法。该算法建立了一个部分匹\u003Cbr\u003E配结果集,通过不断地增加或删除其中的元素来查找确定正确的匹配结果。近年来还有很\u003Cbr\u003E多算法在Ullmann算法的理念基础上进行改良,得到更有效的子图同构算法。VF2算法和\u003Cbr\u003EGraphQL算法通过建立剪枝规则来剪除不符合条件的候选节点,从而减小候选集的大小;\u003Cbr\u003EQuickSI算法尝试尽可能早访问具有不常见标签的顶点和不常见的相邻边标签的顶点;\u003Cbr\u003EGADDI算法结合相邻子距(the neighboring discriminating substructure(NDS)\u003Cbr\u003Edistance)理念,设计了独特的剪枝规则来缩小候选集的大小;SPath算法通过匹配每个调\u003Cbr\u003E用的路径来最小化递归树的深度,从而提高查找效率。现有的可视化系统虽然不同程度上\u003Cbr\u003E化简了数据可视化的操作,但是仍然需要用户参与指导,尤其对于复杂数据需要手工编排\u003Cbr\u003E以保障更好的可视化效果;没有匹配算法的支持令成图的结果限制于人工设置的范围内,\u003Cbr\u003E无法充分体现自动可视化的优势。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Ch3 class=\"sub-head\"\u003E发明内容\u003C\u002Fh3\u003E\u003Cdiv\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0006] 为了尽可能实现Web数据的自动可视化,本发明提出了一种基于子图同构的web数据自动可视化方法,通过对JSON数据进行树形结构建模及对常见可视化图形进行结构建模\u003Cbr\u003E来构建标准化通用模型,并基于子图同构算法,给出了一种改进的降维匹配算法将模型进\u003Cbr\u003E行自动化匹配,以实现数据的自动可视化。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0007] 本发明所采用的技术方案是:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0008] 一种基于子图同构的web数据自动可视化方法,所述方法包括以下步骤:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0009] 第一步:构建服务数据可视化建模与匹配方法的架构,包括三个模块:数据建模(Data Modeling)、图形建模(Graphics Modeling)、降维匹配(Dimensionality-reduction \u003Cbr\u003EMatching);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0010] 第二步:定义元数据树(Metadata_Tree,简写为MDT),包括根节点(Tree_Root,简写为TRoot)、索引节点(Index_Node,简写为INode)、数据节点(Data_Node,简写为DNode),\u003Cbr\u003E同时用深度(level)来表示节点在树结构中的层数,根节点默认为第一层,即level=1;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0011] 第三步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0012] 第四步:由于JSON数据集中可能存在批量数据,批量数据通常以相同的数据结构形式存在,在数据集中常用数组的形式表现。若是用户的对于JSON数据分析的重点不在于\u003Cbr\u003E数据的定位、查询,而是针对数据结构的分析,在上述JSON数据解析建模的方法基础上,可\u003Cbr\u003E以通过剪枝的方法,保留基本的数据结构信息,剪除相同的重复数据结构,缩小模型的体\u003Cbr\u003E量,但仍然保留基础的数据结构,降低JSON数据结构所带来的查询开销;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0013] 第五步:对可视化图形进行分类,归纳总结各类图形的属性及结构特征,通过建模创建一种可视模型树(Visualization Tree,简称VT),来形式化地表述各类图形信息;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0014] 第六步:子图同构是一个在查询图中查找查询子图,判断查询图中是否包含了查询子图的问题;本步骤中先用降维方法对MDT进行降维操作,生成元结构树\u003Cbr\u003E(MetaStructure_Tree,简称MST),再将可视模型树VT与MST进行匹配查询,调用基于子图同\u003Cbr\u003E构的匹配方法查找MST中与VT的各个StructModel匹配的片段,并根据Mapping信息进行数\u003Cbr\u003E据映射,生成可视化图形。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0015] 进一步,所述第一步的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0016] 1.1、数据建模:从Internet获取的REST服务经解析器(REST Service Parser)解析后进行注册,存储于缓存cache或数据库Database中,自动调用后所获取的基于JSON的\u003Cbr\u003EREST服务数据,通过服务数据建模(Service Data Modeling)将服务数据转变为标准化模\u003Cbr\u003E型,并抽取出主要数据结构生成元数据树MDT;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0017] 1.2、图形建模:对多种配置型可视化工具所支持的图形进行数据结构分析与归纳(Structural Analysis),整理出主要图形的通用数据结构及数据映射关系,再根据上述信\u003Cbr\u003E息进行可视化图形建模(Visual Graphics Modeling),创建描述性可视模型——\u003Cbr\u003EVisualModel Tree(简称VT);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0018] 1.3、降维匹配:调取数据建模所生成的MDT,通过降维算法(Procedure DimReduction)对其进行结构降维,获得包含源数据基础数据结构的元结构树MST,然后通\u003Cbr\u003E过VT解析器(VT Parser)提取出VT中的图形结构模型(Structure Model of VT),在MST中\u003Cbr\u003E使用基于子图同构的匹配算法(Procedure Match)来搜索与图形结构模型匹配的数据结构\u003Cbr\u003E片段,最后输出源数据可生成的图形种类(VType Array)及MST中的匹配片段(Matched \u003Cbr\u003Esubstructure);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0019] 1.4、图像生成:根据所属1.3输出的图形种类及MST中的匹配片段,将其按照VT解析器提取出的映射关系(Mapping Model of VT)通过映射处理器(Mapping Parser)来自动\u003Cbr\u003E化生成可视化图形(Visual Graphics);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0020] 再进一步,所述第二步的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0021] 2.1、根节点:MDT的根节点,即MDT的起始节点;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0022] 2.2、索引节点:代表JSON数据中每一个关键字(KEY),但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0023] 2.3、数据节点:代表JSON数据中最内层的“键-值”对,存储为叶子节点。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0024] 所述2.1中,所述根节点内包含以下信息:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0025] 2.1.1、星标(isMark):记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(1)(2),isMark的数据类型为数字(NUMBER),若\u003Cbr\u003EJSON数据中“键-值”对中的值(VALUE)为数组(ARRAY),则isMark=1,否则isMark=0;“#”为\u003Cbr\u003E数据类型定义符,“::=”为赋值符,〖A→condition⊕\u003CB\u003E:\u003CC\u003E〗表示若A符合条件\u003Cbr\u003Econdition,则该式值为B,否则该式值为C;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0026] (1)、“isMark”#\u003CNUMBER\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0027] (2)、“isMark”::=〖“VALUE”→ARRAY⊕\u003C1\u003E:\u003C0\u003E〗\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0028] 2.1.2、元素数量(arrayNum):若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为\u003Cbr\u003E数字(NUMBER)类型,若JSON数据中“键-值”对中的值(VALUE)为ARRAY,则arrayNum等于\u003Cbr\u003EVALUE数组的长度,否则arrayNum=0;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0029] (3)、“arrayNum”#\u003CNUMBER\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0030] (4)、\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0031] 所述2.2中,所述索引节点内包含以下信息:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0032] 2.2.1、节点名称(name):name的数据类型为字符串(STRING),name属性值为JSON数据中“键-值”对中的关键字(KEY);name形式化定义表述如(5)(6);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0033] (5)、“name”#\u003CSTRING\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0034] (6)、“name”::=\u003CKEY\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0035] 2.2.2、节点值类型(vType):vType是JSON数据中“键-值”对中的值(VALUE)的数据类型,属性值为对象(OBJECT)、数组(ARRAY)、字符串(STRING)、数字(NUMBER)、TRUE、FALSE\u003Cbr\u003E之一;vType形式化定义表述如(7);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0036] (7)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0037] 2.2.3、星标(isMark):记录JSON数据中,以当前节点名称(name)作为关键字的“键-值”对中的值(VALUE)是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义\u003Cbr\u003E表述同步骤2.1.1中的(1)(2);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0038] 2.2.4、元素数量(arrayNum):若当前节点的isMark为1,则记录“键-值”对中的值(VALUE)的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述\u003Cbr\u003E同步骤2.1.2中的(3)(4)\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0039] 所述2.3中,所述数据节点内包含以下信息:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0040] 2.3.1、节点名称(name):保存JSON数据中“键-值”对中的关键字(KEY),数据类型为字符串(STRING);name形式化定义表述同步骤2.2.1中的(5)(6);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0041] 2.3.2、节点值(nValue):nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值(VALUE);nValue形式化定义表述如(8)(9);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0042] (8)、“nValue”#\u003CSTRING\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0043] (9)、“nValue”::=\u003CVALUE\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0044] 2.3.3、节点类型(type):保存JSON数据中“键-值”对中的值(VALUE)的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类\u003Cbr\u003E型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(10);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0045] (10)、“type”::=[“str”|“num”|NULL]。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0046] 更进一步,所述第三步的步骤如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0047] 3.1、创建一棵根节点为TRoot的MDT,TRoot是起始节点,根节点的深度(level)默认为1;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0048] 3.2、读取JSON数据集ds,如果是首次读取ds,设置ds的第一个元素为当前元素,元素包括关键字(KEY)及其值(VALUE);否则设置ds的下一个元素为当前元素;若JSON数据最\u003Cbr\u003E外层就是ARRAY,则TRoot的isMark=1,元素数量(arrayNum)为ARRAY元素个数。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0049] 优选的,所述步骤3.2的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0050] 3.2.1、若VALUE的数据类型非OBJECT,同时非ARRAY,创建深度为level+1的数据节点,节点名称(name)为关键字(KEY),节点值(nValue)为值(VALUE),节点类型(type)为值\u003Cbr\u003E(VALUE)的数据类型;完成后跳转至步骤3.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0051] 3.2.2、若VALUE的数据类型为ARRAY,创建深度level’=level+1的索引节点,节点名称(name)为关键字(KEY),节点值类型(vType)为ARRAY,isMark=1,元素数量(arrayNum)\u003Cbr\u003E为当前VALUE数组中的元素个数;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0052] 3.2.2.1、若所述3.2.2中的VALUE数组的元素不是OBJECT类型,则创建level”=level’+1的数据节点,节点名称(name)为关键字(KEY),节点值(nValue)为值(VALUE),节点\u003Cbr\u003E类型(type)为值(VALUE)的数据类型;完成后跳转至步骤3.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0053] 3.2.2.2、若所述3.2.2中的VALUE数组的元素是OBJECT类型,则创建level”=level’+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字(KEY),节点值类型\u003Cbr\u003E(vType)为每个OBJECT元素中的值(VALUE)的数据类型。若当前vType为ARRAY,则isMark=\u003Cbr\u003E1,元素数量(arrayNum)为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark\u003Cbr\u003E=0,arrayNum=0;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0054] 3.2.2.3、将步骤3.2.2.2中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0055] 3.2.3、若VALUE的数据类型为OBJECT,创建深度level’=level+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字(KEY),节点值类型(vType)为每个OBJECT元素\u003Cbr\u003E中的值(VALUE)的数据类型。若当前vType为ARRAY,则isMark=1,元素数量(arrayNum)为当\u003Cbr\u003E前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0056] 3.2.4、将步骤3.2.3中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0057] 所述第四步的步骤如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0058] 4.1、从level=1的TRoot开始,按广度优先策略,按层遍历MDT的根节点与索引节点;广度优先策略将按level逐层遍历MDT,从level=1的第一层开始遍历,当level层的节\u003Cbr\u003E点遍历完成后,再继续遍历level+1层的节点;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0059] 4.2、将MDT的TRoot存入遍历队列;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0060] 4.3、按遍历队列顺序,读取每个节点的isMark属性;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0061] 4.3.1、若遍历到的节点的isMark属性值为1,则保留当前节点的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤4.3.4;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0062] 4.3.2、若遍历到的节点的isMark属性值为0,则不进行任何操作,跳转至步骤4.3.4;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0063] 4.3.3、若遍历到的节点为数据节点,将当前节点从遍历队列中删除,跳转至步骤4.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0064] 4.3.4、将当前遍历到的节点的子节点加入遍历队列,并将当前节点从遍历队列中删除,再跳转至步骤4.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0065] 4.4、当遍历队列中全部为数据节点时或遍历队列为空时,停止遍历,结束方法;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0066] 4.5、输出剪枝后的MDT。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0067] 所述第五步的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0068] 5.1、定义VT包括基础属性(BASICATTRIBUTE)和可视结构(DVSCHEMA)两个部分,形式化定义如(11),其中BASICATTRIBUTE保存了图形标题、副标题及其他文本样式的通用信\u003Cbr\u003E息;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0069] (11)、VisualModel::=\u003CBASICATTRIBUTE\u003E\u003CDVSCHEMA\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0070] 5.2、BASICATTRIBUTE包括三个属性:标题(title)、子标题(subtitle)、属性(attributes),形式化定义如(12),title用于保存最终生成的可视化图形的标题,\u003Cbr\u003Esubtitle用于保存最终生成的可视化图形的子标题,attributes用于保存最终生成的可视\u003Cbr\u003E化图形的位置、颜色组合、字体、字号设置参数;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0071] (12)、BASICATTRIBUTE::=\u003Ctitle\u003E\u003Csubtitle\u003E\u003Cattributes\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0072] 5.3、BASICATTRIBUTE根据图形所需的数据类型、图形数据结构、图形维度将常见的可视化图形归纳为四种基础类别:一般图形(General)、拓扑图(Topology)、地图(Map)、\u003Cbr\u003E文本图形(Text),形式化定义如(13);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0073] (13)、DVSCHEMA::=\u003CGeneral\u003E\u003CTopology\u003E\u003CMap\u003E\u003CText\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0074] 5.4、步骤5.3中的四种基础类别下属均分别包含两个属性:图形类型(VType)和图形结构(StructModel),VType保存了该类别所属图形种类,StructModel保存了该类别所属\u003Cbr\u003E图形的基本可视化结构,形式化定义如(14),“A::B”表示“A包含了属性B”;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0075] (14)、DVSCHEMA::=\u003CGeneral\u003E\u003CTopology\u003E\u003CMap\u003E\u003CText\u003E::\u003CVType\u003E\u003CStructModel\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0076] 所述5.4中,四种基础类别的VType属性的所属图形如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0077] 5.4.1、General包括柱状图(BarChart)、折线图(LineChart)、饼图(PieChart)、雷达图(RadarChart)、散点图(ScatterChart);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0078] 5.4.2、Topology包括网络图(NetworkChart)、树图(TreeMap)、面积树图(TreeMapChart);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0079] 5.4.3、Map包括地区地图(AreaMapChart)、国家地图(CountryMapChart)、世界地图(WorldMapChart);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0080] 5.4.4、Text包括词云(WorldCloudChart);\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0081] 5.5、步骤5.4中四种基础类别均有各自的映射关系(Mapping),描述了各类图形的数据结构、数据维度、图形结构关系、数据映射位置信息;根据Mapping信息并结合图形的数\u003Cbr\u003E据结构,可以抽象出各类图形的基本可视化结构StructModel,步骤三中所生成的MDT将与\u003Cbr\u003EStructModel进行匹配,来判断REST API的返回数据能够生成何种可视化图形。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0082] 所述步骤5.5的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0083] 5.5.1、General类型中的图形通常用于表示二维数据或三维数据,可用二元组(XAxis,YAxis)或三元组(XAxis,YAxis,ZAxis)来表示信息,此类图形的Mapping结构如\u003Cbr\u003E(15),其中LegendName表示图例名称,以ARRAY类型来存储各分组信息;根据Mapping结构可\u003Cbr\u003E抽象出基础StructModel的结构如(16),StructModel的子节点为临时根节点Root,Root包\u003Cbr\u003E含两个子节点:键值对K_V与图例节点LegendNode;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0084] (15)、Mapping::=\u003CXAxis,YAxis,[ZAxis]\u003E\u003CLegendName\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0085] (16)、StructModel::=\u003CRoot::\u003CK_V\u003E\u003CLegendNode\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0086] 5.5.2、Topology类型中的图形通常用于表示拓扑关系数据,树图与面积树图可用嵌套的键值对{key:value,children:{key:value}}来表示属性结构,Mapping结构如(17);\u003Cbr\u003E网络图可用节点集合(Nodes)和边集合(Links)来表示图结构,Mapping结构如(18),其中\u003Cbr\u003Esource表示一条边link的起始节点,target表示该条边link的指向节点;根据Mapping结构\u003Cbr\u003E可抽象出基础StructModel的结构如(19),StructModel有两个子结构,Root1和Root2分别\u003Cbr\u003E为两个子结构的临时根节点,Root1包含两个子节点:键值对K_V和孩子节点children,\u003Cbr\u003Echildren的子结构为键值对K_V;Root2包含两个子节点:节点集合Nodes和边集合Links,节\u003Cbr\u003E点集合的子节点为关键字key和值value,其中value可能为空,边集合的子节点为起点\u003Cbr\u003Esource和目标target;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0087] (17)、Mapping::=\u003CK_V\u003E\u003Cchildren::\u003CK_V\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0088] (18)、Mapping::=\u003CNodes::\u003Ckey,[value]\u003E\u003CLinks::\u003Csource\u003E\u003Ctarget\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0089] (19)、StructModel::=\u003CRoot1::\u003CK_V\u003E\u003Cchildren::\u003CK_V\u003E\u003E\u003E\u003CRoot2::\u003CNodes::\u003Ckey,[value]\u003E,\u003CLinks::\u003Csource\u003E\u003Ctarget\u003E\u003E\u003E\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0090] 5.5.3、Map类型中的图形通常用于表示地图信息,用键值对数组[{PlaceName:value}]或三元组数组[{lng,lat,value}]来表示地图信息,此类图形的Mapping结构如\u003Cbr\u003E(20),其中PlaceName表示地名,lng表示纬度,lat表示经度;根据Mapping结构可抽象出基\u003Cbr\u003E础StructModel的结构如(21),StructModel有两个子结构,Root1和Root2分别为两个子结\u003Cbr\u003E构的临时根节点,Root1包含子子节点键值对K_V;Root2包含了三个子节点:经度lat,纬度\u003Cbr\u003Elng,数值value;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0091] (20)、Mapping::=\u003CData1::\u003CPlaceName\u003E\u003Cvalue\u003E\u003E\u003CData2::\u003Clng\u003E\u003Clat\u003E\u003Cvalue\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0092] (21)、StructModel::=\u003CRoot1::\u003CK_V\u003E\u003E,\u003CRoot2::\u003Clng\u003E,\u003Clat\u003E,\u003Cvalue\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0093] 5.5.4、Text类型中的图形常用二元组(Keyword,frequency)来表示关键字频率,此类图形的Mapping结构如(22),其中Keyword为文本中提取出的词汇,frequency表示该词\u003Cbr\u003E汇在文本中的出现频率;根据Mapping结构可抽象出基础StructModel的结构如(23),\u003Cbr\u003EStructModel的子节点为临时根节点Root,Root包含了键值对K_V;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0094] (22)、Mapping::=\u003CKeyword\u003E\u003Cfrequency\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0095] (23)、StructModel::=\u003CRoot::\u003CK_V\u003E\u003E。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0096] 所述第六步的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0097] 6.1、定义元结构树(MST),包括子树根节点(subtree_root,简称STRoot)、子结构(Substruct),形式化定义如(24),MST用于保存降维后的MDT;其中子结构Substruct由引导\u003Cbr\u003E节点(guide_node,简称GNode)和数据节点(leaf_node,简称LNode)两部分构成,形式化定\u003Cbr\u003E义如(25);根节点STRoot内包含的信息同2.1.1至2.1.2;引导节点GNode内包含的信息同\u003Cbr\u003E2.2.1至2.2.4;叶子节点LNode内包含的信息同2.3.1至2.3.3;同时用深度(level)来表示\u003Cbr\u003E节点在树结构中的层数,STRoot默认为第一层,即level=1;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0098] (24)、MST::=\u003Csubtree_root\u003E\u003CSubstruct\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0099] (25)、Substruct::=\u003Cguide_node\u003E\u003Cleaf_node\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0100] 6.2、解析VT中四种基础类别的StructModel,提取每种StructModel中的临时根节点及其子结构,每一个临时根节点及其子结构构成的树结构片段将作为查询子图,根据步\u003Cbr\u003E骤5.5.1至5.5.4可以提取出六个查询子图:General类型的StructModel的下属Root为起点\u003Cbr\u003E的子结构,Topology类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,\u003Cbr\u003EMap类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,Text类型的\u003Cbr\u003EStructModel的下属Root为起点的子结构;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0101] 6.3、定义基于子图同构的匹配方法Match(MST),以MST作为输入,将步骤6.2中的六个查询子图用StructModelk表示,与每个StructModelk同属于一个大类(General、\u003Cbr\u003ETopology、Map、Text之一)的VType用VTypek表示;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0102] 6.4、基于子图同构的降维匹配算法通过对MDT进行降维操作生成MST后,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST)进行自动化匹配,将MDT作为输入,最后\u003Cbr\u003E输出源数据可生成的图形种类及MST中的匹配片段;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0103] 6.5、根据Match(MST)方法输出的匹配片段从源数据中提取数据,并将数据根据Mapping结构映射到输出的对应类型的图形结构中,从而生成可视化图形。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0104] 所述步骤6.3的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0105] 6.3.1、按照广度优先策略,按层遍历MST,将MST的节点从STRoot开始,按层数从小到大的顺序,将STRoot和所有GNode存入遍历队列Q;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0106] 6.3.2、设置节点s为StructModelk的根节点;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0107] 6.3.3、按遍历队列Q的顺序,将当前Q中遍历到的节点xi与节点s进行比较,判断xi与s的isMark属性值是否相等;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0108] 6.3.3.1、若xi与s的isMark属性值相等,将xi加入集合P,设置i=i+1,跳转至步骤6.3.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0109] 6.3.3.2、若xi与s的isMark属性值不相等,设置i=i+1,跳转至步骤6.3.3;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0110] 6.3.4、当Q遍历完成后,遍历集合P中的节点pj,判断pj与s的父子节点关系是否一致;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0111] 6.3.4.1、若pj与s的父子节点关系不一致,设置j=j+1,跳转至步骤6.3.4;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0112] 6.3.4.2、若pj与s的父子节点关系一致,将pi加入集合M,跳转至步骤6.3.5;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0113] 6.3.5、判断集合M与StructModelk的结构是否一致;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0114] 6.3.5.1、若M与StructModelk的结构一致,输出集合M和StructModelk对应的VTypek;清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0115] 6.3.5.2、若M与StructModelk的结构不一致,将s设置为它在StructModelk中的下一个节点,清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0116] 6.3.6、当六个查询子图均完成查询后,结束方法Match(MST),输出源数据可生成的图形种类(VTypek)及MST中匹配片段的集合M;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0117] 所述步骤6.4的过程如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0118] 6.4.1、按照广度优先策略,按层遍历MDT,将MDT的节点从TRoot开始,按层数从小到大的顺序,将TRoot和所有INode存入遍历队列L;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0119] 6.4.2、按遍历队列L的顺序,对当前遍历到的节点ma的isMark属性和m的子节点的type属性进行判断,是否符合isMark=1且type=”num”;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0120] 6.4.2.1、若isMark=1且type=”num”,将ma加入集合S,设置a=a+1,跳转至步骤6.4.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0121] 6.4.2.2、若不符合isMark=1且type=”num”,设置a=a+1,跳转至步骤6.4.2;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0122] 6.4.3、当L遍历完成后,按集合S中节点加入顺序的逆序来遍历集合S,当前遍历到的节点用nb表示;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0123] 6.4.4、如果在S中没有其他节点与nb有相同的父节点,将nb和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将nb\u003Cbr\u003E从集合S中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤\u003Cbr\u003E6.5;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0124] 6.4.5、如果在S中存在其他节点与nb有相同的父节点,将nb加入集合U;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0125] 6.4.6、按顺序遍历集合U,对遍历到的节点uc的arrayNum属性值进行判断;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0126] 6.4.6.1、若arrayNum\u003E2,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将uc从集合U中删除,调用步骤\u003Cbr\u003E6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0127] 6.4.6.2、若arrayNum\u003C=2,在U中查找出其他的arrayNum\u003C=2节点d,将uc的父节点、uc、d、uc的子节点、d的子节点存储为总层数为3的临时子树subtree,若subtree与\u003Cbr\u003ETopology类中StructModel的两个子结构之一结构相同,则将该subtree存入MST,以uc的父\u003Cbr\u003E节点为STRoot,再从MDT中剪除subtree,并将nb和d从集合U与S中删除,调用步骤6.3中定义\u003Cbr\u003E的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0128] 6.4.6.3、若arrayNum\u003C=2,在U中没有其他的arrayNum\u003C=2节点,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除\u003Cbr\u003Esubtree,并将uc从集合U中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match\u003Cbr\u003E(MST),跳转至步骤6.5。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0129] 本发明的有益效果表现在:本方法能够智能地理解服务响应的JSON数据,对其进行树形结构建模,生成标准化数据结构,无需人工对数据格式进行编排,也无需预先设置数\u003Cbr\u003E据模板;自动构建的数据模型可与常用的可视化图形模型——可视模型树VT进行匹配,在\u003Cbr\u003E匹配过程中使用基于子图同构的降维匹配算法能够缩减查询图体量,减小查询范围,匹配\u003Cbr\u003E过程中优化了候选集,剪除不符合候选条件的节点,达到了优化自动查找匹配结构过程的\u003Cbr\u003E目的,提高了查询效率,降低查询开销与成本;在自动可视化整体过程中减少了人工编辑操\u003Cbr\u003E作,化简数据可视化流程。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Ch3 class=\"sub-head\"\u003E附图说明\u003C\u002Fh3\u003E\u003Cdiv\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0130] 图1示出了web数据可视化建模与匹配方法的架构图\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0131] 图2示出了2018世界杯REST API所返回的JSON数据结构图。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0132] 图3示出了JSON数据转化的树形结构图。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0133] 图4示出了JSON数据剪枝后的树形结构图。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0134] 图5示出了可视模型树VT的结构图\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0135] 图6示出了基于子图同构的web数据自动可视化系统功能模块图\u003C\u002Fdiv\u003E\u003Ch3 class=\"sub-head\"\u003E具体实施方式\u003C\u002Fh3\u003E\u003Cdiv\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0136] 下面结合附图对本发明作进一步描述。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0137] 参照图1~图5,一种基于子图同构的web数据自动可视化方法,包括以下步骤:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0138] 第一步:构建服务数据可视化建模与匹配方法的架构,参照图1,包括三个模块:数据建模(Data Modeling)、图形建模(Graphics Modeling)、降维匹配(Dimensionality-\u003Cbr\u003Ereduction Matching)。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0139] 1.1、数据建模:从Internet获取的REST服务经解析器(REST Service Parser)解析后进行注册,存储于缓存cache或数据库Database中,自动调用后所获取的基于JSON的\u003Cbr\u003EREST服务数据,通过服务数据建模(Service Data Modeling)将服务数据转变为标准化模\u003Cbr\u003E型,并抽取出主要数据结构生成元数据树MDT;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0140] 1.2、图形建模:对多种配置型可视化工具所支持的图形进行数据结构分析与归纳(Structural Analysis),整理出主要图形的通用数据结构及数据映射关系,再根据上述信\u003Cbr\u003E息进行可视化图形建模(Visual Graphics Modeling),创建描述性可视模型——\u003Cbr\u003EVisualModel Tree(简称VT);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0141] 1.3、降维匹配:调取数据建模所生成的MDT,通过降维算法(Procedure DimReduction)对其进行结构降维,获得包含源数据基础数据结构的元结构树MST,然后通\u003Cbr\u003E过VT解析器(VT Parser)提取出VT中的图形结构模型(Structure Model of VT),在MST中\u003Cbr\u003E使用基于子图同构的匹配算法(Procedure Match)来搜索与图形结构模型匹配的数据结构\u003Cbr\u003E片段,最后输出源数据可生成的图形种类(VType Array)及MST中的匹配片段(Matched \u003Cbr\u003Esubstructure)。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0142] 1.4、图像生成:根据所属1.3输出的图形种类及MST中的匹配片段,将其按照VT解析器提取出的映射关系(Mapping Model of VT)通过映射处理器(Mapping Parser)来自动\u003Cbr\u003E化生成可视化图形(Visual Graphics)。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0143] 第二步:定义元数据树(Metadata_Tree,简写为MDT),包括根节点(Tree_Root,简写为TRoot)、索引节点(Index_Node,简写为INode)、数据节点(Data_Node,简写为DNode),\u003Cbr\u003E同时用深度(level)来表示节点在树结构中的层数,根节点默认为第一层,即level=1;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0144] 2.1、根节点:MDT的根节点,即MDT的起始节点;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0145] 2.2、索引节点:代表JSON数据中每一个关键字(KEY),但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0146] 2.3、数据节点:代表JSON数据中最内层的“键-值”对,存储为叶子节点;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0147] 所述2.1中,所述根节点内包含以下信息:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0148] 2.1.1、星标(isMark):记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(1)(2),isMark的数据类型为数字(NUMBER),若\u003Cbr\u003EJSON数据中“键-值”对中的值(VALUE)为数组(ARRAY),则isMark=1,否则isMark=0;“#”为\u003Cbr\u003E数据类型定义符,“::=”为赋值符,〖A→condition⊕\u003CB\u003E:\u003CC\u003E〗表示若A符合条件\u003Cbr\u003Econdition,则该式值为B,否则该式值为C;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0149] (1)、“isMark”#\u003CNUMBER\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0150] (2)、“isMark”::=〖“VALUE”→ARRAY⊕\u003C1\u003E:\u003C0\u003E〗\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0151] 2.1.2、元素数量(arrayNum):若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(3)(4),arrayNum属性值为\u003Cbr\u003E数字(NUMBER)类型,若JSON数据中“键-值”对中的值(VALUE)为ARRAY,则arrayNum等于\u003Cbr\u003EVALUE数组的长度,否则arrayNum=0;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0152] (3)、“arrayNum”#\u003CNUMBER\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0153] (4)、“arrayNum”::=〖“VALUE”→ARRAY⊕\u003CARRAY.length\u003E:\u003C0\u003E〗\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0154] 所述2.2中,所述索引节点内包含以下信息:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0155] 2.2.1、节点名称(name):name的数据类型为字符串(STRING),name属性值为JSON数据中“键-值”对中的关键字(KEY);name形式化定义表述如(5)(6);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0156] (5)、“name”#\u003CSTRING\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0157] (6)、“name”::=\u003CKEY\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0158] 2.2.2、节点值类型(vType):vType是JSON数据中“键-值”对中的值(VALUE)的数据类型,属性值为对象(OBJECT)、数组(ARRAY)、字符串(STRING)、数字(NUMBER)、TRUE、FALSE\u003Cbr\u003E之一;vType形式化定义表述如(7);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0159] (7)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0160] 2.2.3、星标(isMark):记录JSON数据中,以当前节点名称(name)作为关键字的“键-值”对中的值(VALUE)是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义\u003Cbr\u003E表述同步骤2.1.1中的(1)(2);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0161] 2.2.4、元素数量(arrayNum):若当前节点的isMark为1,则记录“键-值”对中的值(VALUE)的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述\u003Cbr\u003E同步骤2.1.2中的(3)(4)\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0162] 所述2.3中,所述数据节点内包含以下信息:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0163] 2.3.1、节点名称(name):保存JSON数据中“键-值”对中的关键字(KEY),数据类型为字符串(STRING);name形式化定义表述同步骤2.2.1中的(5)(6);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0164] 2.3.2、节点值(nValue):nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值(VALUE);nValue形式化定义表述如(8)(9);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0165] (8)、“nValue”#\u003CSTRING\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0166] (9)、“nValue”::=\u003CVALUE\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0167] 2.3.3、节点类型(type):保存JSON数据中“键-值”对中的值(VALUE)的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类\u003Cbr\u003E型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(10);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0168] (10)、“type”::=[“str”|“num”|NULL]\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0169] 第三步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模,步骤如下:\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0170] 3.1、创建一棵根节点为TRoot的MDT,TRoot是起始节点,根节点的深度(level)默认为1;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0171] 3.2、读取JSON数据集ds,如果是首次读取ds,设置ds的第一个元素为当前元素,元素包括关键字(KEY)及其值(VALUE);否则设置ds的下一个元素为当前元素;若JSON数据最\u003Cbr\u003E外层就是ARRAY,则TRoot的isMark=1,元素数量(arrayNum)为ARRAY元素个数;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0172] 3.2.1、若VALUE的数据类型非OBJECT,同时非ARRAY,创建深度为level+1的数据节点,节点名称(name)为关键字(KEY),节点值(nValue)为值(VALUE),节点类型(type)为值\u003Cbr\u003E(VALUE)的数据类型;完成后跳转至步骤3.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0173] 3.2.2、若VALUE的数据类型为ARRAY,创建深度level’=level+1的索引节点,节点名称(name)为关键字(KEY),节点值类型(vType)为ARRAY,isMark=1,元素数量(arrayNum)\u003Cbr\u003E为当前VALUE数组中的元素个数;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0174] 3.2.2.1、若所述3.2.2中的VALUE数组的元素不是OBJECT类型,则创建level”=level’+1的数据节点,节点名称(name)为关键字(KEY),节点值(nValue)为值(VALUE),节点\u003Cbr\u003E类型(type)为值(VALUE)的数据类型;完成后跳转至步骤3.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0175] 3.2.2.2、若所述3.2.2中的VALUE数组的元素是OBJECT类型,则创建level”=level’+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字(KEY),节点值类型\u003Cbr\u003E(vType)为每个OBJECT元素中的值(VALUE)的数据类型。若当前vType为ARRAY,则isMark=\u003Cbr\u003E1,元素数量(arrayNum)为当前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark\u003Cbr\u003E=0,arrayNum=0;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0176] 3.2.2.3、将步骤3.2.2.2中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0177] 3.2.3、若VALUE的数据类型为OBJECT,创建深度level’=level+1的索引节点,节点名称(name)为每个OBJECT元素中的关键字(KEY),节点值类型(vType)为每个OBJECT元素\u003Cbr\u003E中的值(VALUE)的数据类型。若当前vType为ARRAY,则isMark=1,元素数量(arrayNum)为当\u003Cbr\u003E前VALUE数组中的元素个数;若当前vType不为ARRAY,则isMark=0,arrayNum=0;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0178] 3.2.4、将步骤3.2.3中VALUE数组作为新的JSON数据集ds’,跳转至步骤3.2。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0179] 第四步:由于JSON数据集中可能存在批量数据,批量数据通常以相同的数据结构形式存在,在数据集中常用数组的形式表现。若是用户的对于JSON数据分析的重点不在于\u003Cbr\u003E数据的定位、查询,而是针对数据结构的分析,在上述JSON数据解析建模的方法基础上,可\u003Cbr\u003E以通过剪枝的方法,保留基本的数据结构信息,剪除相同的重复数据结构,缩小模型的体\u003Cbr\u003E量,但仍然保留基础的数据结构,降低JSON数据结构所带来的查询开销,方法步骤如下:\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0180] 4.1、从level=1的TRoot开始,按广度优先策略,按层遍历MDT的根节点与索引节点;广度优先策略将按level逐层遍历MDT,从level=1的第一层开始遍历,当level层的节\u003Cbr\u003E点遍历完成后,再继续遍历level+1层的节点;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0181] 4.2、将MDT的TRoot存入遍历队列;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0182] 4.3、按遍历队列顺序,读取每个节点的isMark属性;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0183] 4.3.1、若遍历到的节点的isMark属性值为1,则保留当前节点的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤4.3.4;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0184] 4.3.2、若遍历到的节点的isMark属性值为0,则不进行任何操作,跳转至步骤4.3.4;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0185] 4.3.3、若遍历到的节点为数据节点,将当前节点从遍历队列中删除,跳转至步骤4.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0186] 4.3.4、将当前遍历到的节点的子节点加入遍历队列,并将当前节点从遍历队列中删除,再跳转至步骤4.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0187] 4.4、当遍历队列中全部为数据节点时或遍历队列为空时,停止遍历,结束方法;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0188] 4.5、输出剪枝后的MDT。\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0189] 第五步:参照图5,对可视化图形进行分类,归纳总结各类图形的属性及结构特征,通过建模创建一种可视模型树(Visualization Tree,简称VT),来形式化地表述各类图形\u003Cbr\u003E信息。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0190] 5.1、定义VT包括基础属性(BASICATTRIBUTE)和可视结构(DVSCHEMA)两个部分,形式化定义如(11),其中BASICATTRIBUTE保存了图形标题、副标题及其他文本样式的通用信\u003Cbr\u003E息;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0191] (11)、VisualModel::=\u003CBASICATTRIBUTE\u003E\u003CDVSCHEMA\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0192] 5.2、BASICATTRIBUTE包括三个属性:标题(title)、子标题(subtitle)、属性(attributes),形式化定义如(12),title用于保存最终生成的可视化图形的标题,\u003Cbr\u003Esubtitle用于保存最终生成的可视化图形的子标题,attributes用于保存最终生成的可视\u003Cbr\u003E化图形的位置、颜色组合、字体、字号设置参数;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0193] (12)、BASICATTRIBUTE::=\u003Ctitle\u003E\u003Csubtitle\u003E\u003Cattributes\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0194] 5.3、BASICATTRIBUTE根据图形所需的数据类型、图形数据结构、图形维度将常见的可视化图形归纳为四种基础类别:一般图形(General)、拓扑图(Topology)、地图(Map)、\u003Cbr\u003E文本图形(Text),形式化定义如(13);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0195] (13)、DVSCHEMA::=\u003CGeneral\u003E\u003CTopology\u003E\u003CMap\u003E\u003CText\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0196] 5.4、步骤5.3中的四种基础类别下属均分别包含两个属性:图形类型(VType)和图形结构(StructModel),VType保存了该类别所属图形种类,StructModel保存了该类别所属\u003Cbr\u003E图形的基本可视化结构,形式化定义如(14),“A::B”表示“A包含了属性B”;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0197] (14)、DVSCHEMA::=\u003CGeneral\u003E\u003CTopology\u003E\u003CMap\u003E\u003CText\u003E::\u003CVType\u003E\u003CStructModel\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0198] 所述5.4中,四种基础类别的VType属性的所属图形如下:\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0199] 5.4.1、General包括柱状图(BarChart)、折线图(LineChart)、饼图(PieChart)、雷达图(RadarChart)、散点图(ScatterChart);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0200] 5.4.2、Topology包括网络图(NetworkChart)、树图(TreeMap)、面积树图(TreeMapChart);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0201] 5.4.3、Map包括地区地图(AreaMapChart)、国家地图(CountryMapChart)、世界地图(WorldMapChart);\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0202] 5.4.4、Text包括词云(WorldCloudChart);\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0203] 5.5、步骤5.4中四种基础类别均有各自的映射关系(Mapping),描述了各类图形的数据结构、数据维度、图形结构关系、数据映射位置信息;根据Mapping信息并结合图形的数\u003Cbr\u003E据结构,可以抽象出各类图形的基本可视化结构StructModel,步骤三中所生成的MDT将与\u003Cbr\u003EStructModel进行匹配,来判断REST API的返回数据能够生成何种可视化图形;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0204] 5.5.1、General类型中的图形通常用于表示二维数据或三维数据,可用二元组(XAxis,YAxis)或三元组(XAxis,YAxis,ZAxis)来表示信息,此类图形的Mapping结构如\u003Cbr\u003E(15),其中LegendName表示图例名称,以ARRAY类型来存储各分组信息;根据Mapping结构可\u003Cbr\u003E抽象出基础StructModel的结构如(16),StructModel的子节点为临时根节点Root,Root包\u003Cbr\u003E含两个子节点:键值对K_V与图例节点LegendNode;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0205] (15)、Mapping::=\u003CXAxis,YAxis,[ZAxis]\u003E\u003CLegendName\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0206] (16)、StructModel::=\u003CRoot::\u003CK_V\u003E\u003CLegendNode\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0207] 5.5.2、Topology类型中的图形通常用于表示拓扑关系数据,树图与面积树图可用嵌套的键值对{key:value,children:{key:value}}来表示属性结构,Mapping结构如(17);\u003Cbr\u003E网络图可用节点集合(Nodes)和边集合(Links)来表示图结构,Mapping结构如(18),其中\u003Cbr\u003Esource表示一条边link的起始节点,target表示该条边link的指向节点;根据Mapping结构\u003Cbr\u003E可抽象出基础StructModel的结构如(19),StructModel有两个子结构,Root1和Root2分别\u003Cbr\u003E为两个子结构的临时根节点,Root1包含两个子节点:键值对K_V和孩子节点children,\u003Cbr\u003Echildren的子结构为键值对K_V;Root2包含两个子节点:节点集合Nodes和边集合Links,节\u003Cbr\u003E点集合的子节点为关键字key和值value,其中value可能为空,边集合的子节点为起点\u003Cbr\u003Esource和目标target;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0208] (17)、Mapping::=\u003CK_V\u003E\u003Cchildren::\u003CK_V\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0209] (18)、Mapping::=\u003CNodes::\u003Ckey,[value]\u003E\u003CLinks::\u003Csource\u003E\u003Ctarget\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0210] (19)、StructModel::=\u003CRoot1::\u003CK_V\u003E\u003Cchildren::\u003CK_V\u003E\u003E\u003E\u003CRoot2::\u003CNodes::\u003Ckey,[value]\u003E,\u003CLinks::\u003Csource\u003E\u003Ctarget\u003E\u003E\u003E\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0211] 5.5.3、Map类型中的图形通常用于表示地图信息,用键值对数组[{PlaceName:value}]或三元组数组[{lng,lat,value}]来表示地图信息,此类图形的Mapping结构如\u003Cbr\u003E(20),其中PlaceName表示地名,lng表示纬度,lat表示经度;根据Mapping结构可抽象出基\u003Cbr\u003E础StructModel的结构如(21),StructModel有两个子结构,Root1和Root2分别为两个子结\u003Cbr\u003E构的临时根节点,Root1包含子子节点键值对K_V;Root2包含了三个子节点:经度lat,纬度\u003Cbr\u003Elng,数值value;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0212] (20)、Mapping::=\u003CData1::\u003CPlaceName\u003E\u003Cvalue\u003E\u003E\u003CData2::\u003Clng\u003E\u003Clat\u003E\u003Cvalue\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0213] (21)、StructModel::=\u003CRoot1::\u003CK_V\u003E\u003E,\u003CRoot2::\u003Clng\u003E,\u003Clat\u003E,\u003Cvalue\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0214] 5.5.4、Text类型中的图形常用二元组(Keyword,frequency)来表示关键字频率,此类图形的Mapping结构如(22),其中Keyword为文本中提取出的词汇,frequency表示该词\u003Cbr\u003E汇在文本中的出现频率;根据Mapping结构可抽象出基础StructModel的结构如(23),\u003Cbr\u003EStructModel的子节点为临时根节点Root,Root包含了键值对K_V;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0215] (22)、Mapping::=\u003CKeyword\u003E\u003Cfrequency\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0216] (23)、StructModel::=\u003CRoot::\u003CK_V\u003E\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0217] 第六步:子图同构是一个在查询图中查找查询子图,判断查询图中是否包含了查询子图的问题;本步骤中用降维方法对MDT进行降维操作,生成元结构树(MetaStructure_\u003Cbr\u003ETree,简称MST),再将可视模型树VT与MST进行匹配查询,调用基于子图同构的匹配方法查\u003Cbr\u003E找MST中与VT的各个StructModel匹配的片段,并根据Mapping信息进行数据映射,生成可视\u003Cbr\u003E化图形;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0218] 6.1、定义元结构树(MST),包括子树根节点(subtree_root,简称STRoot)、子结构(Substruct),形式化定义如(24),MST用于保存降维后的MDT;其中子结构Substruct由引导\u003Cbr\u003E节点(guide_node,简称GNode)和数据节点(leaf_node,简称LNode)两部分构成,形式化定\u003Cbr\u003E义如(25);根节点STRoot内包含的信息同2.1.1至2.1.2;引导节点GNode内包含的信息同\u003Cbr\u003E2.2.1至2.2.4;叶子节点LNode内包含的信息同2.3.1至2.3.3;同时用深度(level)来表示\u003Cbr\u003E节点在树结构中的层数,STRoot默认为第一层,即level=1;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0219] (24)、MST::=\u003Csubtree_root\u003E\u003CSubstruct\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0220] (25)、Substruct::=\u003Cguide_node\u003E\u003Cleaf_node\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0221] 6.2、解析VT中四种基础类别的StructModel,提取每种StructModel中的临时根节点及其子结构,每一个临时根节点及其子结构构成的树结构片段将作为查询子图,根据步\u003Cbr\u003E骤5.5.1至5.5.4可以提取出六个查询子图:General类型的StructModel的下属Root为起点\u003Cbr\u003E的子结构,Topology类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,\u003Cbr\u003EMap类型的StructModel的下属分别以Root1和Root2为起点的两个子结构,Text类型的\u003Cbr\u003EStructModel的下属Root为起点的子结构;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0222] 6.3、定义基于子图同构的匹配方法Match(MST),以MST作为输入,将步骤6.2中的六个查询子图用StructModelk表示,与每个StructModelk同属于一个大类(General、\u003Cbr\u003ETopology、Map、Text之一)的VType用VTypek表示;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0223] 6.3.1、按照广度优先策略,按层遍历MST,将MST的节点从STRoot开始,按层数从小到大的顺序,将STRoot和所有GNode存入遍历队列Q;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0224] 6.3.2、设置节点s为StructModelk的根节点;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0225] 6.3.3、按遍历队列Q的顺序,将当前Q中遍历到的节点xi与节点s进行比较,判断xi与s的isMark属性值是否相等;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0226] 6.3.3.1、若xi与s的isMark属性值相等,将xi加入集合P,设置i=i+1,跳转至步骤6.3.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0227] 6.3.3.2、若xi与s的isMark属性值不相等,设置i=i+1,跳转至步骤6.3.3;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0228] 6.3.4、当Q遍历完成后,遍历集合P中的节点pj,判断pj与s的父子节点关系是否一致;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0229] 6.3.4.1、若pj与s的父子节点关系不一致,设置j=j+1,跳转至步骤6.3.4;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0230] 6.3.4.2、若pj与s的父子节点关系一致,将pi加入集合M,跳转至步骤6.3.5;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0231] 6.3.5、判断集合M与StructModelk的结构是否一致;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0232] 6.3.5.1、若M与StructModelk的结构一致,输出集合M和StructModelk对应的VTypek;清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0233] 6.3.5.2、若M与StructModelk的结构不一致,将s设置为它在StructModelk中的下一个节点,清空集合P,设置k=k+1,设置xi为Q的第一个节点,跳转至步骤6.3.3;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0234] 6.3.6、当六个查询子图均完成查询后,结束方法Match(MST),输出源数据可生成的图形种类(VTypek)及MST中匹配片段的集合M;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0235] 6.4、基于子图同构的降维匹配算法通过对MDT进行降维操作生成MST后,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST)进行自动化匹配,将MDT作为输入,最后\u003Cbr\u003E输出源数据可生成的图形种类及MST中的匹配片段;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0236] 6.4.1、按照广度优先策略,按层遍历MDT,将MDT的节点从TRoot开始,按层数从小到大的顺序,将TRoot和所有INode存入遍历队列L;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0237] 6.4.2、按遍历队列L的顺序,对当前遍历到的节点ma的isMark属性和m的子节点的type属性进行判断,是否符合isMark=1且type=”num”;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0238] 6.4.2.1、若isMark=1且type=”num”,将ma加入集合S,设置a=a+1,跳转至步骤6.4.2;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0239] 6.4.2.2、若不符合isMark=1且type=”num”,设置a=a+1,跳转至步骤6.4.2;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0240] 6.4.3、当L遍历完成后,按集合S中节点加入顺序的逆序来遍历集合S,当前遍历到的节点用nb表示;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0241] 6.4.4、如果在S中没有其他节点与nb有相同的父节点,将nb和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将nb\u003Cbr\u003E从集合S中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤\u003Cbr\u003E6.5;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0242] 6.4.5、如果在S中存在其他节点与nb有相同的父节点,将nb加入集合U;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0243] 6.4.6、按顺序遍历集合U,对遍历到的节点uc的arrayNum属性值进行判断;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0244] 6.4.6.1、若arrayNum\u003E2,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除subtree,并将uc从集合U中删除,调用步骤\u003Cbr\u003E6.3中定义的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0245] 6.4.6.2、若arrayNum\u003C=2,在U中查找出其他的arrayNum\u003C=2节点d,将uc的父节点、uc、d、uc的子节点、d的子节点存储为总层数为3的临时子树subtree,若subtree与\u003Cbr\u003ETopology类中StructModel的两个子结构之一结构相同,则将该subtree存入MST,以uc的父\u003Cbr\u003E节点为STRoot,再从MDT中剪除subtree,并将nb和d从集合U与S中删除,调用步骤6.3中定义\u003Cbr\u003E的基于子图同构的匹配方法Match(MST),跳转至步骤6.5;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0246] 6.4.6.3、若arrayNum\u003C=2,在U中没有其他的arrayNum\u003C=2节点,将uc和它的子结构存储为临时子树subtree,将subtree加入MST,作为STRoot的子结构,再从MDT中剪除\u003Cbr\u003Esubtree,并将uc从集合U中删除,调用步骤6.3中定义的基于子图同构的匹配方法Match\u003Cbr\u003E(MST),跳转至步骤6.5;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0247] 6.5、根据Match(MST)方法输出的匹配片段从源数据中提取数据,并将数据根据Mapping结构映射到输出的对应类型的图形结构中,从而生成可视化图形。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0248] 实例:图2示出了2018世界杯REST API所返回的JSON数据结构图。World Cup in JSON API的供应商为Software For Good,这是一个体育类的API,它的发布主页为http:\u002F\u002F\u003Cbr\u003Eworldcup.sfg.io,文档主页URL为https:\u002F\u002Fgithub.com\u002Festiens\u002Fworld_cup_json。在所示\u003Cbr\u003EJSON数据结构中展示了2018世界杯第一场比赛信息,fifa_id标注了比赛的ID,weather包\u003Cbr\u003E含了比赛当天的比赛地区的天气信息,attendance表示该场比赛的观众人数,officials包\u003Cbr\u003E含了该场比赛的工作人员名单,home_team和away_team介绍了该场比赛两支对阵队伍的信\u003Cbr\u003E息,home_team_events和away_team_events包含了比赛中对阵双方的判、罚事件,home_\u003Cbr\u003Eteam_statistics和away_team_statistics包含了在该场比赛中对阵队伍的比赛数据统计\u003Cbr\u003E信息。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0249] 图3是基于我们的方法步骤二得到的JSON数据转化的树形结构图。图中tree_root为MDT的根节点(TRoot),index_node为索引节点(INode),data_node为数据节点(DNode)。\u003Cbr\u003E在level为1的根节点TRoot下,level=2的每一个INode都包含了一场比赛的信息,下层的\u003Cbr\u003E每一个节点代表一个属性和它的值。其中,level=3的home_team_statistics属性,包含了\u003Cbr\u003Eon_target、off_target、blocked、offsides属性,则在home_team_statistics节点下创建\u003Cbr\u003Elevel=4的on_target、off_target、blocked、offsides节点作为DNode。在图2的MDT中,\u003Cbr\u003ETRoot的属性isMark=1,因为2018世界杯的64场比赛信息以数组形式返回;除根节点外,有\u003Cbr\u003E子节点的节点为索引节点,即JSON数据中,VALUE为ARRAY类型或OBJECT类型的节点均为索\u003Cbr\u003E引节点;MDT中的叶子节点为数据节点,即JSON数据中,VALUE不为ARRAY类型,也不为OBJECT\u003Cbr\u003E类型的节点均为数据节点。图2展示的就是2018世界杯JSON数据的树形模型。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0250] 图4示出了JSON数据剪枝后的树形结构图。“比赛1”至“比赛64”的信息以数组形式返回,即TRoot的isMark属性值为1。每一场比赛数据中都包含了相同的属性,即每场比赛数\u003Cbr\u003E据的子结构是一致的,只需保留一场比赛的信息结构,就能知道所有比赛的信息结构,所以\u003Cbr\u003E保留“比赛1”分支,剪除其余分支信息。在“比赛1”分支下的home_team_event属性中,每一\u003Cbr\u003E事件都作为一个数组元素,每个事件都包含了id、type_of_event、player、time四个属性,\u003Cbr\u003E只需保留一个数组元素,就能知道所有事件的信息结构,所以保留第一个事件的分支,剪除\u003Cbr\u003E其余分支信息。依次对于所有isMark=1的节点都进行如步骤三的剪枝,就能获得化简后的\u003Cbr\u003EMDT。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0251] 使用本方法能够生成2018世界杯数据的多种图形,如第一轮小组赛信息汇总的柱状图:横轴为attempts_on_goal、on_target、off_target、blocked、wookwork、corners、\u003Cbr\u003Eoffsides、ball_possession、pass_accuracy、distance_covered、balls_recovered、\u003Cbr\u003Etackles、clearances、yellow_cards、red_cards、fouls_committed,纵轴为数值,图例为参\u003Cbr\u003E赛的32个国家的名称,此柱状图可以表现出各个国家队在各个指标中的表现情况,并能明\u003Cbr\u003E显地对比国家间的水平;也能够生成半决赛信息汇总的饼图:图例为参加半决赛的法国、英\u003Cbr\u003E格兰、比利时、克罗地亚,其中八张饼图的比较指标为:射门次数、进球数、铲球次数、抢断次\u003Cbr\u003E数、传球准确率、守门成功次数,每张图中根据国家对应的图例颜色占比的大小,可以了解\u003Cbr\u003E每支队伍在该方面的表现情况;还能够生成决赛信息汇总的雷达图:极轴为attempts_on_\u003Cbr\u003Egoal、on_target、off_target、blocked、offsides、corners、ball_possession、pass_\u003Cbr\u003Eaccuracy、distance_covered、balls_recovered、tackles、clearances、fouls_committed,\u003Cbr\u003E图例为法国和克罗地亚,此雷达图可以表现出两支队伍在各个指标中的能力分布情况,法\u003Cbr\u003E国队的守门员在防守上非常出色,克罗地亚队在进攻射门上非常猛烈。\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0252] 图6示出了基于子图同构的web数据自动可视化系统功能模块图。可视化系统功能模块说明如下:\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0253] (1)可视化平台PC端\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0254] (1.1)用户端\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0255] (1.1.1)WEB服务查看:用户可对平台上现有的所有WEB服务信息进行查看,选择符合需求的服务;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0256] (1.1.2)WEB服务调用:用户根据需求选择服务后,查看供应商提供的使用协议及资费要求,若同意使用规则并支付资费后,页面将显示WEB服务的授权,用户在页面上选择\u003Cbr\u003E“调用”即可;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0257] (1.1.3)可视化参数设置:用户在页面上设置可视化图形的标题、副标题、文本样式信息,并确认调用;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0258] (1.1.4)可视化结果查看:在可视化结果页面用户可查看调用的服务所生成的所有可视化图像,并提供下载功能;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0259] (1.2)供应商端\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0260] (1.2.1)WEB服务列表:供应商可对平台上现有的所有WEB服务信息进行查看,并可以对自己上传的WEB服务进行增删改查;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0261] (1.2.2)WEB服务上传:供应商在页面上填写WEB服务信息、使用协议、调用方法及密钥、授权要求及方法,还有其他备注信息后,可以上传WEB服务,待管理员审核完成后,新\u003Cbr\u003E上传的服务将发布于用户端;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0262] (1.2.3)WEB服务测试:供应商可对自己上传的通过审核的WEB服务进行在线测试,确定服务的可用性及正确性;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0263] (1.3)管理员端\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0264] (1.3.1)WEB服务管理:管理员可对平台上的所有WEB服务信息进行增删改查;对新上传的服务进行服务信息、服务内容及安全性检查,对符合要求与规范条例的服务予以发\u003Cbr\u003E布;对通过审核的服务进行服务注册,并配置在线调用方法;查看平台上所有的服务使用情\u003Cbr\u003E况,确保所有服务的正常使用;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0265] (1.3.2)可视化结果管理:管理员可以对平台上所有使用可视化功能使用结果的反馈意见进行管理,及时了解平台性能效果及可视化结果的使用情况;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0266] (1.3.3)用户\u002F供应商管理:对用户及供应商的信息及资质权限进行管理;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0267] (2)可视化服务器\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0268] (2.1)WEB服务注册:在服务器上注册WEB服务,存储服务信息;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0269] (2.2)WEB服务监控:监控记录WEB服务的每一次调用信息、使用情况、调用者信息;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0270] (2.3)数据建模:存储自动化调用的WEB服务所返回的JSON数据,并对其\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0271] 进行数据建模生成MDT;\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0272] (2.4)可视化图形建模:对常用可视化图形进行建模,归纳总结各类图形的属性及结构特征;当有新图形纳入可视化结构时,更新可视化模型;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0273] (2.5)自动化匹配:使用基于子图同构的降维匹配算法对数据模型及可视化模型进行自动化匹配,查找匹配数据片段及可生成的可视化图形结构;\u003Cbr\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"sub-text\"\u003E[0274] (2.6)自动化映射成图:根据匹配的数据片段提取源数据片段并进行数据编排,根据Mapping结构将编排好的数据映射至可视化图形中,返回最终生成的可视化图形信息至\u003Cbr\u003E前端页面生成图像。\u003Cbr\u003E\u003C\u002Fdiv\u003E",importantProductList:k,platformSupports:[],collection:a},recommentList1:k}],fetch:{},error:l,state:{sUrl:"http:\u002F\u002F10.98.8.16:9082",sUrlNB:"http:\u002F\u002F10.105.104.40",url:"http:\u002F\u002Ftrade.9235.net\u002F",ryToken:b,uuid:b,nickName:b,imShow:a,counter:d,appkey:"tdrvipkstyst5",token:b,flag:b,once:a,init:a,connect:a,imgUrl:b,people:{},mini:f,isLoggedIn:f,loadingCount:d,isNew:a,freshen:a,poolMsg:[],signIn:"1",mCharge:a,memberPrice:d,searchKey:b,isSearch:a,searchKey1:b,isSearch1:a,searchKey2:b,isSearch2:a,searchKey3:b,isSearch3:a,headerKey:b,selBtn:"sell",channel:b,domain:{},mpath:[f,a,a,a],sellFilter:{},user:{user:{},connectCode:b,token:b,roleRight:b},userFeedback:{},common:{},order:{userInfo:{},patentInfo:{},firstAddr:{},addressList:[],generalPoint:b,vatPoint:b,invoiceList:[],normalList:[],specialList:[]},home:{countInfo:{},elitePtentList:[],questionList:[],sellList:[],purchaseList:[]},product:{userInfo:{},productCount:b,demandCount:b,info:{},price:b,recommentList:[],recommentList1:[],productInfo:{}},purchase:{recommentList:[],domainList:[],data:[]},online:{recommentList:[],domainList:[],patentList:[]},operation:{resList:[],information:{},domainList:[],patentList:[],data:[],userList:[],total:b},operation1:{resList:[],information:{},domainList:[]},payment:{},authentication:{},wallet:{},patentCollect:{},patentProduct:{},patentDemand:{},patentOrder:{},myPurchase:{},fee:{},article:{},newManage:{},contact:{},member:{},colleage:{},tech:{token:b},newsGroup:{},nb:{xxx:{},domainList:[]},nbUser:{isLogin:a,token:b,userInfo:{}},nbUserPatent:{}},serverRendered:f,routePath:"\u002Fsell\u002Fdetail\u002F2019102014660",config:{_app:{basePath:"\u002F",assetsPath:"\u002F_nuxt\u002F",cdnURL:l}}}}(false,"",2,0,1,true,"基于子图同构的web数据自动可视化方法","一种基于子图同构的web数据自动可视化方法,包括以下步骤:第一步:构建服务数据可视化建模与匹配方法的架构;第二步:定义元数据树MDT;第三步:读取调用的REST API所返回的JSON数据,将JSON数据集ds作为建模算法的输入,对ds进行树形结构建模;第四步:通过剪枝的方法,保留基本的数据结构信息;第五步:对可视化图形进行分类;第六步:先用降维方法对MDT进行降维操作,生成元结构树MST,再进行匹配查询,调用基于子图同构的匹配方法查找MST中与VT的各个StructModel匹配的片段,并根据Mapping信息进行数据映射生成可视化图形。本发明将模型进行自动化匹配,以实现数据的自动可视化。","浙江工业大学",26400,Array(4),null));</script><script src="/_nuxt/8d5c6bc.js" defer></script><script src="/_nuxt/d87c624.js" defer></script><script src="/_nuxt/777642b.js" defer></script><script src="/_nuxt/1ff4caa.js" defer></script><script src="/_nuxt/5a729b1.js" defer></script><script src="/_nuxt/80d3798.js" defer></script><script src="/_nuxt/53d03d1.js" defer></script><script src="/_nuxt/59a46af.js" defer></script> </body> </html>