一种基于领域本体的语义工作流索引构造及检索方法转让专利

申请号 : CN201910754733.7

文献号 : CN110457490B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙晋永赵响

申请人 : 桂林电子科技大学

摘要 :

本发明公开了一种基于领域本体的语义工作流索引构造和检索方法,步骤为:1)建立语义工作流的领域任务本体和领域数据本体;2)构造语义工作流的结构特征索引:一步路径索引、数据‑工作流索引、数据‑任务索引和两步路径索引,并设计基于各索引的检索方法;3)构造语义工作流的行为特征索引:任务因果关系索引、任务并行关系索引、任务互斥关系索引和任务循环关系索引,并设计基于各索引的检索方法。4)在新语义工作流加入时,增量构造语义工作流索引;在删除语义工作流时,动态删除旧语义工作流的索引项。该方法可以提高语义工作流的检索速度和准确性,为语义工作流重用提供良好的支持,为语义工作流库的组织和管理方法提供理论依据。

权利要求 :

1.一种基于领域本体的语义工作流索引构造及检索方法,其特征在于,包括如下步骤:

1)建立语义工作流的领域任务本体和领域数据本体;

2)构造语义工作流的结构特征索引SWStructIndex及其检索方法,索引SWStructIndex包括一步路径索引Path1Index、数据‑工作流索引DataIndex、数据‑任务索引DataTaskIndex和两步路径索引Path2Index;

3)构造语义工作流的行为特征索引SWBebavIndex及其检索方法,索引SWBebavIndex包括任务因果关系索引CasualIndex、任务互斥关系索引ExclusiveIndex、任务并行关系索引ParalellIndex和任务循环关系索引LoopIndex;

4)当与控制流、数据流相关的多个查询条件组合时,检索方法为:首先,执行满足控制流或数据流相关的每个查询条件的语义工作流或任务集合检索任务;然后,计算所有查询结果集的交集作为最终结果集返回;

5)更新语义工作流的结构和行为特征索引:当一个新语义工作流加入语义工作流库时,结构特征索引SWStructIndex和行为特征索引SWBebavIndex均可以增量构造;当从语义工作流库中删除语义工作流时,先记录该工作流,待被删除的语义工作流达到设定数量后,一次将它们涉及的索引项删除或更新;

步骤2)中,所述的一步路径索引Path1Index,索引项的形式为(task,S1),其中task为任务节点,S1为包含task的语义工作流集合;

一步路径索引Path1Index的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的任务节点集合TS;然后,若某任务节点task∈TS在索引Path1Index中不存在,则先新建一个索引项(task,S1),将SW的ID加入集合S1中;若task已存在,则直接将SW的ID加入task对应索引项的集合S1中;遍历SW的任务节点集合TS、语义工作流库SWC,建立索引Path1Index;

将索引Path1Index存储为(task.hashcode,S1.pointer),其中task.hashcode为一步路径或任务节点task的语义描述的哈希值,S1.pointer指向语义工作流集合S1的存储位置;

一步路径索引Path1Index的检索方法为:对于给定的查询任务节点qtask,若qtask在索引Path1Index中已存在,则直接返回qtask对应索引项的集合S1;若qtask在索引中不存在,说明在语义工作流库SWC中不存在包含qtask的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域任务本体中查询qtask的语义描述对应概念C的直接子概念C1,然后获取包含C1对应任务节点的语义工作流集合,遍历概念C的所有直接子概念得到多个这样的集合,最后计算这些集合的并集作为S1返回;

所述的数据‑工作流索引DataIndex,包括输入数据‑工作流索引DataInIndex和输出数据‑工作流索引DataOutIndex两种;

i)输入数据‑工作流索引DataInIndex的索引项形式为(dataIn,S2),其中dataIn为语义工作流的输入数据对象,S2为输入数据对象集合包含dataIn的语义工作流集合;

输入数据‑工作流索引DataInIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输入数据对象集合DSIn;然后,若dataIn∈DSIn在索引DataInIndex中不存在,则新建一个索引项(dataIn,S2),将SW的ID加入集合S2中,若dataIn已存在,则直接将SW的ID加入S2,遍历SW的输入数据对象集合DSIn、语义工作流库SWC,建立索引DataInIndex;将索引DataInIndex存储为(dataIn.hashcode,S2.pointer),其中dataIn.hashcode为数据对象dataIn的语义描述的哈希值,S2.pointer指向语义工作流集合S2的存储位置;

输入数据‑工作流索引DataInIndex的检索方法为:对于给定的查询数据节点qdataIn,若qdataIn在索引DataInIndex中已存在,则直接返回qdataIn对应索引项的集合S2;若qdataIn在索引中不存在,说明SWC中不存在输入数据对象集合包含qdataIn的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据本体中查询qdataIn的语义描述对应概念C的直接子概念C1,然后获取输入数据对象集合包含C1对应任务节点的语义工作流集合,遍历概念C的所有直接子概念得到多个这样的集合,最后计算这些集合的并集作为S2返回;

ii)输出数据‑工作流索引DataOutIndex的索引项形式为(dataOut,S3),其中dataOut为语义工作流的输出数据对象,S3为输出数据对象集合包含dataOut的语义工作流集合;

输出数据‑工作流索引DataOutIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输出数据对象节点集合DSOut;然后,若dataOut∈DSOut在索引DataOutIndex中不存在,则新建一个索引项(dataOut,S3),将SW的ID加入集合S3中,若dataOut已存在,则直接将SW的ID加入S3;遍历集合DSOut、语义工作流库SWC,建立索引DataOutIndex;将索引DataOutIndex存储为(dataOut.hashcode,S3.pointer),其中dataOut.hashcode为数据对象dataOut的语义描述的哈希值,S3.pointer指向语义工作流集合S3的存储位置;

输出数据‑工作流索引DataOutIndex的检索方法为:对于给定的查询数据节点qdataOut,若qdataOut在索引DataOutIndex中已存在,则直接返回qdataOut对应索引项的集合S3;若qdataOut在索引中不存在,说明SWC中不存在输出数据对象集合包含qdataOut的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据本体中查询qdataOut的语义描述对应概念C的直接子概念C1,获取输出数据对象集合包含C1对应任务节点的语义工作流集合;遍历概念C的所有直接子概念得到多个这样的集合,最后计算这些集合的并集作为S3返回;

所述的数据‑任务索引DataTaskIndex,包括输入数据‑任务索引DataInTaskIndex和输出数据‑任务索引DataOutTaskIndex两种;

i)索引DataInTaskIndex的索引项形式为(dataIn,TS1),其中dataIn为语义工作流的输入数据对象,TS1的形式为{(task,SW)},为输入数据对象集合包含dataIn的任务节点task及其所属语义工作流SW的集合;

数据‑任务索引DataTaskIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输入数据对象集合DSIn;然后,若dataIn∈DSIn在索引DataInTaskIndex中不存在,则新建一个索引项(dataIn,TS1),将SW中消耗dataIn的每个任务节点task的ID标识taskID加入集合TS1中,若dataIn已存在,则直接SW中消耗dataIn的每个任务节点task的ID标识taskID加入TS1;遍历SW的输入数据对象集合DSIn、语义工作流库SWC,建立索引DataInTaskIndex;将索引DataInTaskIndex存储为(dataIn.hashcode,TS1.pointer),其中dataIn.hashcode为数据对象dataIn的语义描述的哈希值,TS1.pointer指向任务节点集合TS1的存储位置;

数据‑任务索引DataTaskIndex的检索方法为:对于查询数据对象qdataIn,若qdataIn在索引DataInTaskIndex中已存在,则直接返回qdataIn对应索引项的任务节点集合TS1;若qdataIn在索引中不存在,说明SWC中不存在输入数据对象集合包含qdataIn的任务节点,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据本体中查询qdataIn的语义描述对应概念C的直接子概念C1,然后获取输入数据对象集合包含C1所指代数据对象的任务节点集合;遍历概念C的所有直接子概念得到多个这样的集合,最后计算这些集合的并集作为TS1返回;

ii)索引DataOutTaskIndex的索引项形式为(dataOut,TS2),其中dataOut为语义工作流的输出数据对象,TS2的形式为{(task,SW)},为输出数据对象集包含dataOut的任务节点task及其所属语义工作流SW的集合;

索引DataOutTaskIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输出数据对象节点集合DSOut;然后,若dataOut∈DSOut在索引DataOutTaskIndex中不存在,则新建一个索引项(dataOut,TS2),将SW中生成dataOut的任务节点task的ID标识taskID加入集合TS2中,若dataOut已存在,则直接将SW中生成dataOut的任务节点task的ID标识taskID加入TS2;遍历集合DSOut、语义工作流库SWC,建立索引DataOutTaskIndex;将索引DataOutTaskIndex存储为(dataOut.hashcode,TS2.pointer),其中dataOut.hashcode为数据对象dataOut的语义描述的哈希值,TS2.pointer指向任务节点集合TS2的存储位置;

索引DataOutTaskIndex的检索方法为:对于给定的查询数据对象qdataOut,若qdataOut在索引DataOutTaskIndex中已存在,则直接返回qdataOut对应索引项的任务节点集合TS2;若qdataOut在索引中不存在,说明SWC中不存在输出数据对象集合包含qdataOut的任务节点,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据本体中查询qdataOut的语义描述对应概念C的直接子概念C1,然后获取输出数据对象集合包含C1所指代数据对象的任务节点集合;遍历概念C的所有直接子概念得到多个这样的集合,最后计算这些集合的并集作为TS2返回;

所述的两步路径索引Path2Index,索引项形式为(,S4),其中为任务节点task1,task2组成的两步路径“task1→task2”的序偶形式,S4为语义工作流对应的语义标注图的某一路径上包含路径“task1→task2”的语义工作流集合;

两步路径索引Path2Index的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW对应语义标注图中的所有相邻任务节点对集合TA,然后,若ta∈TA在索引Path2Index中不存在,则先新建一个索引项(,S4),将SW的ID加入集合S4,若ta已存在,则直接将SW的ID加入S4;遍历SW的集合TA,以及SWC中的所有语义工作流,构建索引Path2Index;

将索引Path2Index存储为(.hashcode,S4.pointer),其中.hashcode为两步路径的语义描述的哈希值,S4.pointer指向语义工作流S4的存储位置;

两步路径索引Path2Index的检索方法为:对于查询相邻任务节点对,若路径在索引Path2Index中已存在,则直接返回对应索引项的集合S4;若路径不存在,说明在SWC中不存在包含路径的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务节点两步路径的语义工作流集合,最后计算这些集合的并集作为S4返回;

步骤3)中,所述的任务因果关系索引CasualIndex,索引项的形式为(,S5),其中为具有因果关系的任务节点task1,task2组成的序偶,S5为包含此序偶的语义工作流集合;

任务因果关系索引CasualIndex的构造方法:首先,对于语义工作流库SWC中的某语义工作流SW,使用完全前缀展开法和最近公共前驱法计算SW的任务因果关系序偶集合TC,然后,若tc∈TC在索引CasualIndex中不存在,则先新建一个索引项(,S5),将SW的ID加入集合S5中;若tc已存在,则直接将SW的ID加入S5;遍历SW的集合TC,语义工作流库SWC,建立索引CasualIndex,将索引CasualIndex存储为(.hashcode,S5.pointer),其中.hashcode为任务因果关系的语义描述的哈希值,S5.pointer指向语义工作流集合S5的存储位置;

任务因果关系索引CasualIndex的检索方法为:对于查询任务因果关系,若在索引CasualIndex中已存在,则直接返回对应索引项的集合S5,若在索引中不存在,说明SWC中不存在包含因果任务节点对的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务因果关系的语义工作流集合,最后计算这些集合的并集作为S5返回;

所述的任务并行关系索引ParalellIndex,索引项的形式为(,S6),其中为具有并行关系的任务节点task1,task2组成的序偶,S6为包含此序偶的语义工作流集合;

任务并行关系索引ParalellIndex的构造方法为:首先,对于语义工作流库SWC中的语义工作流SW,使用完全前缀展开法和最近公共前驱法计算SW的任务并行关系集合TP;然后,若tp∈TP在索引ParalellIndex中不存在,则先新建一个索引项(,S6),将SW的ID加入集合S6中;若tp已存在,则直接将SW的ID加入S6;遍历SW的集合TP,语义工作流库SWC,建立索引ParalellIndex;将索引ParalellIndex存储为(.hashcode,S6.pointer),其中.hashcode为任务并行关系的语义描述的哈希值,S6.pointer指向语义工作流集合S6的存储位置;

任务并行关系索引ParalellIndex的检索方法为:对于查询任务并行关系,若在索引ParalellIndex中已存在,则直接返回对应索引项的集合S6,若在索引中不存在,说明SWC中不存在包含并行任务节点对的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务并行关系的语义工作流集合,最后计算这些集合的并集作为S6返回;

所述的任务互斥关系索引ExclusiveIndex,索引项的形式为(,S7),其中为具有互斥关系的任务节点task1,task2组成的序偶,S7为包含此序偶的语义工作流集合;

任务互斥关系索引ExclusiveIndex的构造方法为:首先,对于语义工作流库SWC中的某语义工作流SW,使用完全前缀展开法和最近公共前驱法计算SW的任务互斥关系集合TE;然后,若te∈TE在索引ExclusiveIndex中不存在,则先新建一个索引项(,S7),将SW的ID加入集合S7中,若te已存在,则直接将SW的ID加入S7;遍历SW的集合TE,语义工作流库SWC,建立索引ExclusiveIndex;将索引ExclusiveIndex存储为(.hashcode,S7.pointer),其中.hashcode为任务互斥关系的语义描述的哈希值,S7.pointer指向语义工作流集合S7的存储位置;

任务互斥关系索引ExclusiveIndex的检索方法为:对于查询任务互斥关系,若在索引ExclusiveIndex中已存在,则直接返回对应索引项的集合S7,若在索引中不存在,说明SWC中不存在包含互斥任务节点对的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务互斥关系的语义工作流集合,最后计算这些集合的并集作为S7返回;

所述的任务循环关系索引LoopIndex,索引项的形式为(,S8),其中为具有循环关系的任务节点task1,task2组成的序偶,S8为包含此序偶的语义工作流集合;

任务循环关系索引LoopIndex的构造方法为:首先,对于语义工作流库SWC中的语义工作流SW,使用完全前缀展开法、最近公共前驱法和循环结构判断法计算SW的任务循环关系集合TL;然后,若tl∈TL在索引LoopIndex中不存在,则先新建一个索引项(,S8),将SW的ID加入集合S8中,若tl已存在,则直接将SW的ID加入S8;遍历SW的集合TL,语义工作流库SWC,建立索引LoopIndex;将索引LoopIndex存储为(.hashcode,S8.pointer),其中.hashcode为任务循环关系的语义描述的哈希值,S8.pointer指向语义工作流集合S8的存储位置;

任务循环关系索引LoopIndex的检索方法为:对于查询任务循环关系,若在索引LoopIndex中已存在,则直接返回对应索引项的集合S8;若在索引中不存在,说明SWC中不存在包含循环任务节点对的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务循环关系的语义工作流集合,最后计算这些集合的并集作为S8返回。

2.根据权利要求1所述的一种基于领域本体的语义工作流索引构造及检索方法,其特征在于,步骤1)中,具体是将语义工作流库中的语义工作流任务节点的语义描述看作与任务相关的概念,利用概念间的包含关系,构建任务本体的层次结构,建立领域任务本体;将语义工作流的数据对象节点的语义描述看作与数据对象相关的概念,利用概念间的包含关系,构建数据本体的层次结构,建立领域数据本体。

说明书 :

一种基于领域本体的语义工作流索引构造及检索方法

技术领域

[0001] 本发明涉及业务过程管理技术领域,具体涉及一种基于领域本体的语义工作流索引构造及检索方法。

背景技术

[0002] 业务过程的质量和运行效率是现代企业和组织在竞争中保持优势的关键因素。业务过程管理(Business process management,BPM)研究关注企业和组织的业务过程管理、
分析、控制与改进,以提高业务处理效率,改进产品质量,提高服务水平。而业务过程管理技
术可以被用于快速构建和更新过程感知信息系统,是现代企业和组织的信息系统的共性基
础性技术。
[0003] 语义工作流是一种基于领域知识的工作流,为业务工作流管理(Business workflow management,BWM)提供了充足的语义和数据或资源信息。它同时包含控制流和数
据流,适于建模以控制流为中心,且兼顾数据流的业务过程。与传统工作流相比,语义工作
流更适合建模工业环境中的生成制造过程,可以为工业大数据系统软件的开发及运行提供
一定的基础支持。目前,语义工作流的应用已经涵盖了业务过程、电子商务、医疗、软件开
发、科学分析和工业生产制造等领域。
[0004] 随着各领域使用的语义工作流模型的大量增加,为了重用或重构业务过程而进行的相似语义工作流检索成为业务过程管理中的常见场景。如何提高相似语义工作流的检索
效率是必须要解决的问题。
[0005] Bergmann等人将基于语义标注有向图结构匹配的相似性方法用于相似语义工作流检索,该方法采用遍历语义工作流库的方式进行检索,计算量较大,对于小规模工作流
库,该方法可以得出满意的检索性能,对于规模较大的语义工作流库,实际上是不可行的。
Forbus等人提出一种用于相似性检索的MAC/FAC(Many are called but few are chosen)
模型。该模型由两个阶段构成:MAC阶段使用计算量较小的非结构匹配算法从项目池中过滤
出候选项目集;FAC阶段使用结构匹配算法从候选项目集中找出最匹配的项目。近年来,许
多系统都使用了这种两阶段检索方法。在图数据库领域应用这种方法成为一个趋势,比如
Graphgrep,G‑Hash,Periscope/GQ和gIndex,Fg‑Index等。但语义工作流所对应的语义标注
有向图是稀疏图,其中的频繁子图并不多,并且频繁子图不能覆盖所有的工作流模型。从而
图索引的检索技术不能直接用于相似语义工作流检索。
[0006] Jin等人构造基于标签Petri网的过程模型集的变迁路径索引LnP(n为路径长度),提出了两阶段的精确过程模型检索方法。Bergmann等人提出了基于MAC/FAC模型的两阶段
相似语义工作流检索方法。MAC阶段基于语义工作流的语义特征和语法特征进行过滤,FAC
阶段使用图检索方法选出最匹配的语义工作流。接着,Kendall‑Morwick等人在MAC阶段建
立路径索引:Path‑k(k为路径长度)进行语义工作流过滤。Müller等人使用聚类方法建立索
引结构,提出了基于排队的检索算法。Müller等人提出了用于POCBR的相似语义工作流检索
语言POQL,可以表达泛化的检索项目。以上检索方法仅关注业务过程模型或语义工作流的
结构特征,没有考虑它们的执行行为,因而检索结果集的准确性有待提高。
[0007] Jin等人构造了基于标签Petri网的过程模型集的行为特征索引TARIndex,提出了两阶段的相似过程模型检索方法。该方法关注了业务过程模型的执行行为,但不能区分循
环和顺序结构。Weidlich等人指出在过程模型检索的一致性检查中应该考虑业务过程的数
据和资源。由于标签Petri网不含数据流并引入领域知识,故针对标签Petri网的过程模型
检索方法不能直接用于相似语义工作流检索。
[0008] 其他专门用于相似语义工作流检索的研究有:Gil等人使用语义信息来增强科学工作流的组件和数据使其成为语义工作流,提出了针对给定组件和数据属性从工作流库检
索匹配科学工作流的方法。该方法基于包含关系确定数据、组件等属性间的匹配,进而获得
匹配工作流;提高了匹配科学工作流的检索准确性。
[0009] 因而,现有的语义工作流的检索和索引方法并不能完全解决语义工作流的检索问题,比如它们无法处理语义工作流中数据‑工作流或任务节点、任务循环关系检索等问题。
于是针对提高语义工作流检索效率这一需求,本发明提出了一种基于领域本体语义工作流
的索引构造及检索方法。

发明内容

[0010] 本发明的目的在于针对现有的语义工作流索引的不足,提供一种基于领域本体的语义工作流索引构造及检索方法,该方法提高了语义工作流的检索效率,可以提高语义工
作流的重用质量。
[0011] 实现本发明目的的技术方案是:
[0012] 一种基于领域本体的语义工作流索引构造及检索方法,包括如下步骤:
[0013] 1)建立语义工作流的领域任务本体和领域数据本体:是将语义工作流库中的语义工作流任务节点的语义描述看作与任务相关的概念,利用概念间的包含关系,构建任务本
体的层次结构,建立领域任务本体;将语义工作流的数据对象节点的语义描述看作与数据
对象相关的概念,利用概念间的包含关系,构建数据本体的层次结构,建立领域数据本体;
[0014] 2)构造语义工作流的结构特征索引SWStructIndex及其检索方法,索引SWStructIndex包括一步路径索引Path1Index、数据‑工作流索引DataIndex、数据‑任务索
引DataTaskIndex和两步路径索引Path2Index;
[0015] 2‑1)一步路径索引Path1Index,由于每个索引项对应的路径中只有一个任务节点,故也称为任务索引;索引项的形式为(task,S1),其中task为任务节点,S1为包含task的
语义工作流集合;
[0016] 一步路径索引Path1Index的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的任务节点集合TS;然后,若某任务节点task∈TS在索引Path1Index中不存在,则先
新建一个索引项(task,S1),将SW的ID加入集合S1中;若task已存在,则直接将SW的ID加入
task对应索引项的集合S1中;遍历SW的任务节点集合TS、语义工作流库SWC,建立索引
Path1Index;在保存索引Path1Index时,不直接存储(task,S1),而是将Path1Index存储为
(task.hashcode,S1.pointer),其中task.hashcode为一步路径或任务节点task的语义描
述的哈希值,S1.pointer指向语义工作流集合S1的存储位置;
[0017] 一步路径索引Path1Index的检索方法为:对于给定的查询任务节点qtask,若qtask在索引Path1Index中已存在,则直接返回qtask对应索引项的集合S1;若qtask在索引
中不存在,说明在语义工作流库SWC中不存在包含qtask的语义工作流,则基于本体中父子
概念间的较高语义相似性,使用子概念代替父概念;先在领域任务本体中查询qtask的语义
描述对应概念C的直接子概念C1,然后获取包含C1对应任务节点的语义工作流集合,遍历概
念C的所有直接子概念得到多个这样的集合,最后计算这些集合的并集作为S1返回;
[0018] 2‑2)数据‑工作流索引DataIndex,包括输入数据‑工作流索引DataInIndex和输出数据‑工作流索引DataOutIndex两种;
[0019] i)输入数据‑工作流索引DataInIndex的索引项形式为(dataIn,S2),其中dataIn为语义工作流的输入数据对象,但不是中间数据对象(中间数据对象指由某任务节点生成,但
又因被另一任务节点消耗而不再被生成的数据对象),S2为输入数据对象集合包含dataIn的
语义工作流集合;
[0020] 输入数据‑工作流索引DataInIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输入数据对象集合DSIn;然后,若dataIn∈DSIn在索引DataInIndex中不存
在,则新建一个索引项(dataIn,S2),将SW的ID加入集合S2中,若dataIn已存在,则直接将SW的
ID加入S2,遍历SW的输入数据对象集合DSIn、语义工作流库SWC,建立索引DataInIndex;在保
存索引DataInIndex时,不直接存储(dataIn,S2),而是将DataInIndex存储为
(dataIn.hashcode,S2.pointer),其中dataIn.hashcode为数据对象dataIn的语义描述的哈
希值,S2.pointer指向语义工作流集合S2的存储位置;
[0021] 输入数据‑工作流索引DataInIndex的检索方法为:对于给定的查询数据节点qdataIn,若qdataIn在索引DataInIndex中已存在,则直接返回qdataIn对应索引项的集合S2;
若qdataIn在索引中不存在,说明SWC中不存在输入数据对象集合包含qdataIn的语义工作
流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据本
体中查询qdataIn的语义描述对应概念C的直接子概念C1,然后获取输入数据对象集合包含
C1对应任务节点的语义工作流集合,遍历概念C的所有直接子概念得到多个这样的集合,最
后计算这些集合的并集作为S2返回;
[0022] ii)输出数据‑工作流索引DataOutIndex的索引项形式为(dataOut,S3),其中dataOut为语义工作流的输出数据对象(非中间数据对象),S3为输出数据对象集合包含dataOut的语
义工作流集合;
[0023] 输出数据‑工作流索引DataOutIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输出数据对象节点集合DSOut;然后,若dataOut∈DSOut在索引DataOutIndex
中不存在,则新建一个索引项(dataOut,S3),将SW的ID加入集合S2中,若dataOut已存在,则直
接将SW的ID加入S3;遍历集合DSOut、语义工作流库SWC,建立索引DataOutIndex;在保存索引
DataOutIndex时,不直接存储(dataOut,S3),而是将索引DataOutIndex存储为
(dataOut.hashcode,S3.pointer),其中dataOut.hashcode为数据对象dataOut的语义描述的
哈希值,S3.pointer指向语义工作流集合S3的存储位置;
[0024] 输出数据‑工作流索引DataOutIndex的检索方法为:对于给定的查询数据节点qdataOut,若qdataOut在索引DataOutIndex中已存在,则直接返回qdataOut对应索引项的集合
S3;若qdataOut在索引中不存在,说明SWC中不存在输出数据对象集合包含qdataOut的语义工
作流,则基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据
本体中查询qdataOut的语义描述对应概念C的直接子概念C1,获取输出数据对象集合包含C1
对应任务节点的语义工作流集合;遍历概念C的所有直接子概念得到多个这样的集合,最后
计算这些集合的并集作为S3返回;
[0025] 2‑3)数据‑任务索引DataTaskIndex,包括输入数据‑任务索引DataInTaskIndex和输出数据‑任务索引DataOutTaskIndex两种;
[0026] i)索引DataInTaskIndex的索引项形式为(dataIn,TS1),其中dataIn为语义工作流的输入数据对象(非中间数据对象),TS1的形式为{(task,SW)},为输入数据对象集合包含
dataIn的任务节点task及其所属语义工作流SW的集合;
[0027] 数据‑任务索引DataTaskIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输入数据对象集合DSIn;然后,若dataIn∈DSIn在索引DataInTaskIndex中不存
在,则新建一个索引项(dataIn,TS1),将SW中消耗dataIn的每个任务节点task的ID标识
taskID加入集合TS1中,若dataIn已存在,则直接SW中消耗dataIn的每个任务节点task的ID标
识taskID加入TS1;遍历SW的输入数据对象集合DSIn、语义工作流库SWC,建立索引
DataInTaskIndex;在保存索引DataInTaskIndex时,不直接存储(dataIn,TS1),而是将索引
DataInTaskIndex存储为(dataIn.hashcode,TS1.pointer),其中dataIn.hashcode为数据对
象dataIn的语义描述的哈希值,TS1.pointer指向任务节点集合TS1的存储位置;
[0028] 数据‑任务索引DataTaskIndex的检索方法为:对于查询数据对象qdataIn,若qdataIn在索引DataInTaskIndex中已存在,则直接返回qdataIn对应索引项的集合TS1;若
qdataIn在索引中不存在,说明SWC中不存在输入数据对象集合包含qdataIn的任务节点,则
基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据本体中
查询qdataIn的语义描述对应概念C的直接子概念C1,然后输入数据对象集合包含C1所指代
数据对象的任务节点集合;遍历概念C的所有直接子概念得到多个这样的集合,最后计算这
些集合的并集作为TS1返回;
[0029] ii)索引DataOutTaskIndex的索引项形式为(dataOut,TS2),其中dataOut为语义工作流的输出数据对象(非中间数据对象),TS2的形式为{(task,SW)},为输出数据对象集包含
dataOut的任务节点task及其所属语义工作流SW的集合;
[0030] 索引DataOutTaskIndex的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW的输出数据对象节点集合DSOut;然后,若dataOut∈DSOut在索引DataOutTaskIndex中不存
在,则新建一个索引项(dataOut,TS2),将SW中生成dataOut的任务节点task的ID标识taskID
加入集合TS2中,若dataOut已存在,则直接将SW中生成dataOut的任务节点task的ID标识
taskID加入TS2;遍历集合DSOut、语义工作流库SWC,建立索引DataOutTaskIndex;在保存索引
DataOutTaskIndex时,不直接存储(dataOut,S3),而是将DataOutTaskIndex存储为
(dataOut.hashcode,TS2.pointer),其中dataOut.hashcode为数据对象dataOut的语义描述的
哈希值,TS2.pointer指向任务节点集合TS2的存储位置;
[0031] 索引DataOutTaskIndex的检索方法为:对于给定的查询数据对象qdataOut,若qdataOut在索引DataOutTaskIndex中已存在,则直接返回qdataOut对应索引项的集合TS2;若
qdataOut在索引中不存在,说明SWC中不存在输出数据对象集合包含qdataOut的任务节点,则
基于本体中父子概念间的较高语义相似性,使用子概念代替父概念;先在领域数据本体中
查询qdataOut的语义描述对应概念C的直接子概念C1,然后获取输出数据对象集合包含C1所
指代数据对象的任务节点集合;遍历概念C的所有直接子概念得到多个这样的集合,最后计
算这些集合的并集作为TS2返回;
[0032] 2‑4)两步路径索引Path2Index的索引项形式为(,S4),其中为任务节点task1,task2组成的两步路径“task1→task2”的序偶形式,S4为语义工作
流对应的语义标注图的某一路径上包含此路径“task1→task2”的语义工作流集合;
[0033] 两步路径索引Path2Index的构造方法为:首先,获取语义工作流库SWC中某语义工作流SW对应语义标注图(忽略控制流节点)中的所有相邻任务节点对集合TA;然后,若ta∈
TA在索引Path2Index中不存在,则先新建一个索引项(,S4),将SW的ID加入集
合S4,若ta已存在,则直接将SW的ID加入S4;遍历SW的集合TA,以及SWC中的所有语义工作流
构建,构建索引Path2Index;在保存索引Path2Index时,在索引中不直接存储(>,S4),而是将索引Path2Index存储为(.hashcode,S4.pointer),其中task2>.hashcode为两步路径的语义描述的哈希值,S4.pointer指向语义工
作流S4的存储位置;
[0034] 两步路径索引Path2Index的检索方法为:对于查询相邻任务节点对,若路径在索引Path2Index中已存在,则直接返回
对应索引项的集合S4;若路径不存在,说明在SWC中不存在包含路径<
qtask1,qtask2>的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概念代
替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子概念的
集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务节点两
步路径的语义工作流集合,最后计算这些集合的并集作为S4返回;
[0035] 3)构造语义工作流的行为特征索引SWBebavIndex及其检索方法,索引SWBebavIndex包括任务因果关系索引CasualIndex、任务互斥关系索引ExclusiveIndex、任
务并行关系索引ParalellIndex和任务循环关系索引LoopIndex;
[0036] 3‑1)任务因果关系索引CasualIndex,索引项的形式为(,S5),其中为具有因果关系的任务节点task1,task2组成的序偶,S5为包含此序偶的语义
工作流集合;
[0037] 任务因果关系索引CasualIndex的构造方法:首先,对于语义工作流库SWC中的某语义工作流SW,使用完全前缀展开法和最近公共前驱法计算SW的任务因果关系序偶集合
TC,然后,若tc∈TC在索引CasualIndex中不存在,则先新建一个索引项(,
S5),将SW的ID加入集合S5中;若tc已存在,则直接将SW的ID加入S5;遍历SW的集合TC,语义工
作流库SWC,建立索引CasualIndex,在保存索引CasualIndex时,在索引中不直接存储(<
task1,task2>,S5),而是将索引CasualIndex存储为(.hashcode,
S5.pointer),其中.hashcode为任务因果关系的语义描述的哈
希值,S5.pointer指向语义工作流集合S5的存储位置;
[0038] 任务因果关系索引CasualIndex的检索方法为:对于查询任务因果关系,若在索引CasualIndex中已存在,则直接返回
应索引项的集合S5,若在索引中不存在,说明SWC中不存在包含因果任务节
点对的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子
概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子
概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务
因果关系的语义工作流集合,最后计算这些集合的并集作为S5返回;
[0039] 3‑2)任务并行关系索引ParalellIndex,索引项的形式为(,S6),其中为具有并行关系的任务节点task1,task2组成的序偶,S6为包含此序偶的语
义工作流集合;
[0040] 任务并行关系索引ParalellIndex的构造方法为:首先,对于语义工作流库SWC中的语义工作流SW,使用完全前缀展开法和最近公共前驱法计算SW的任务并行关系集合TP;
然后,若tp∈TP在索引ParalellIndex中不存在,则先新建一个索引项(,S6),
将SW的ID加入集合S6中;若tp已存在,则直接将SW的ID加入S6;遍历SW的集合TP,语义工作流
库SWC,建立索引ParalellIndex;在保存索引ParalellIndex时,不直接存储(>,S6),而是将索引ParalellIndex存储为(.hashcode,S6.pointer),其中<
task1,task2>.hashcode为任务并行关系的语义描述的哈希值,S6.pointer指
向语义工作流集合S6的存储位置;
[0041] 任务并行关系索引ParalellIndex的检索方法为:对于查询任务并行关系,若在索引ParalellIndex中已存在,则直接返回qtask2>对应索引项的集合S6,若在索引中不存在,说明SWC中不存在包含
并行任务节点对的语义工作流,则基于本体中父子概念间的较高语义相似
性,使用子概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2
的直接子概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指
代的任务并行关系的语义工作流集合,最后计算这些集合的并集作为S6返回;
[0042] 3‑3)任务互斥关系索引ExclusiveIndex,索引项的形式为(,S7),其中为具有互斥关系的任务节点task1,task2组成的序偶,S7为包含此序偶的语
义工作流集合;
[0043] 任务互斥关系索引ExclusiveIndex的构造方法为:首先,对于语义工作流库SWC中的某语义工作流SW,使用完全前缀展开法和最近公共前驱法计算SW的任务互斥关系集合
TE;然后,若te∈TE在索引ExclusiveIndex中不存在,则先新建一个索引项(,
S7),将SW的ID加入集合S7中,若te已存在,则直接将SW的ID加入S7;遍历SW的集合TE,语义工
作流库SWC,建立索引ExclusiveIndex;在保存索引ExclusiveIndex时,不直接存储(<
task1,task2>,S7),而是将索引ExclusiveIndex存储为(.hashcode,
S7.pointer),其中.hashcode为任务互斥关系的语义描述的哈
希值,S7.pointer指向语义工作流集合S7的存储位置;
[0044] 任务互斥关系索引ExclusiveIndex的检索方法为:对于查询任务互斥关系,若在索引ExclusiveIndex中已存在,则直接返回qtask2>对应索引项的集合S7,若在索引中不存在,说明SWC中不存在包含
互斥任务节点对的语义工作流,则基于本体中父子概念间的较高语义相似
性,使用子概念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2
的直接子概念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指
代的任务互斥关系的语义工作流集合,最后计算这些集合的并集作为S7返回;
[0045] 3‑4)任务循环关系索引LoopIndex,索引项的形式为(,S8),其中为具有循环关系的任务节点task1,task2组成的序偶,S8为包含此序偶的语义
工作流集合;
[0046] 任务循环关系索引LoopIndex的构造方法为:首先,对于语义工作流库SWC中的语义工作流SW,使用完全前缀展开法、最近公共前驱法和循环结构判断法计算SW的任务循环
关系集合TL;然后,若tl∈TL在索引LoopIndex中不存在,则先新建一个索引项(task2>,S8),将SW的ID加入集合S8中,若tl已存在,则直接将SW的ID加入S8;遍历SW的集合
TL,语义工作流库SWC,建立索引LoopIndex;在保存索引LoopIndex时,不直接存储(task2>,S8),而是将索引LoopIndex存储为(.hashcode,S8.pointer),其中<
task1,task2>.hashcode为任务循环关系的语义描述的哈希值,S8.pointer指
向语义工作流集合S8的存储位置;
[0047] 任务循环关系索引LoopIndex的检索方法为:对于查询任务循环关系,若在索引LoopIndex中已存在,则直接返回对应
索引项的集合S8;若在索引中不存在,说明SWC中不存在包含循环任务节点
的语义工作流,则基于本体中父子概念间的较高语义相似性,使用子概
念代替父概念;先在领域任务本体中分别获取qtask1、qtask2的语义描述C1、C2的直接子概
念的集合CS1、CS2,然后获取包含笛卡尔积CS1×CS2中的每个概念序偶(C3,C4)指代的任务循
环关系的语义工作流集合,最后计算这些集合的并集作为S8返回;
[0048] 4)当与控制流、数据流相关的多个查询条件组合时,检索方法为:首先,执行满足控制流或数据流相关的每个查询条件的语义工作流或任务集合检索任务;然后,计算所有
查询结果集的交集作为最终结果集返回;
[0049] 5)更新语义工作流的结构和行为特征索引:当一个新语义工作流加入语义工作流库SWC时,结构特征索引SWStructIndex和行为特征索引SWBebavIndex均可以增量构造;当
从语义工作流库中删除某语义工作流时,可以先记录该工作流,待被删除的语义工作流达
到设定数量后,一次性将它们涉及的索引项删除,并更新。
[0050] 有益效果:本发明提供了一种基于领域本体的语义工作流索引构建和检索方法,该方法有如下优点:
[0051] 1.能够为用户提供满足控制流、数据流或二者组合的多种类型查询条件的语义工作流或任务检索功能;
[0052] 2.利用引入的领域本体,能够为用户提供基于语义相似性近似匹配查询条件的语义工作流或任务检索功能;
[0053] 3.提高了语义工作流的检索速度和准确率,为语义工作流重用提供了良好的支持;
[0054] 4.为高效地组织和管理语义工作流库提供了理论依据。

附图说明

[0055] 图1为语义工作流索引的构造流程图;
[0056] 图2为语义工作流索引SWIndex的结构图;
[0057] 图3为语义工作流SW1;
[0058] 图4为语义工作流SW2;
[0059] 图5为语义工作流SW3;
[0060] 图6为语义工作流SW4;
[0061] 图7为语义工作流SW5;
[0062] 图8为领域任务本体TaskOnto;
[0063] 图9为领域数据本体DataOnto。

具体实施方式

[0064] 下面结合附图和实施例对本发明内容做进一步阐述,但不是对本发明的限定。
[0065] 实施例1:
[0066] 下面以烹饪领域的5个语义工作流组成的语义工作流库SWC1为例,5个语义工作流SW1、SW2、SW3、SW4和SW5的示意图分别如图3—图7所示。一种基于领域本体的语义工作流索引
构建和检索方法,如图1所示,语义工作流索引SWIndex的结构如图2所示,包括如下步骤:
[0067] 1)构建如图8所示的烹饪领域的任务本体TaskOnto、如图9所示的数据本体DataOnto;SWC1中工作流的任务节点的语义描述来自于TaskOnto中的概念,数据对象节点
的语义描述来自于DataOnto中的概念;在说明书中,暂以任务节点的语义描述指代该节点,
数据对象节点的语义描述指代该节点;
[0068] 2)建立语义工作流库SWC1的一步路径索引Path1Index,以语义工作流SW1中的任务节点“Saute”为例,显然SW1,SW4中都包含任务节点“Saute”,则建立索引项:(“Saute”,{SW1,
SW4});再以语义工作流SW1中的任务节点“Sprinkle”为例,显然SW1,SW2,SW3,SW4,SW5均包含
任务节点“Sprinkle”,则建立索引项:(“Sprinkle”,{SW1,SW2,SW3,SW4,SW5}),使用同样的方
法建立其他索引项。
[0069] 检索示例:如果要在SWC1中检索包含任务节点“Saute”的语义工作流,由于在Path1Index中存在“Saute”的索引项,则直接返回索引项中的集合{SW1,SW4}。如果要检索包
含任务节点“Fry”的语义工作流,由于在Path1Index中不存在“Fry”的索引项,则可以返回
“Fry”在任务本体中的子节点“Saute”的索引项中的语义工作流集合{SW1,SW4},作为近似结
果集提供给用户。
[0070] 3)建立语义工作流库SWC1的数据‑工作流索引DataInIndex和DataOutIndex,首先构造DataInIndex,以语义工作流SW2中的数据对象“Salt”为例,显然SW2,SW5中包含此数据对
象,则建立DataInIndex的索引项:(“Salt”,{SW2,SW5}),使用同样的方法可建立其他索引
项;然后构造DataOutIndex,以语义工作流SW1中的数据对象“Fettuccine_pasta”为例,显然
只有SW1包含此数据对象,则建立DataOutIndex的索引项:(“Fettuccine_pasta”,{SW1}),使
用同样的方法可建立其他索引项。
[0071] 检索示例:如果要在SWC1中检索包含输入数据对象“Salt”的语义工作流,由于在DataInIndex中存在“Salt”的索引项,则直接返回索引项中的集合{SW2,SW5}。如果要检索包
含输入数据对象“Oil”的语义工作流,由于在DataInIndex中不存在“Oil”的索引项,则可以
返回“Oil”在领域数据本体中的子节点“Salad_oil”的索引项中的集合{SW2,SW5},作为近似
结果集。
[0072] 如果要在SWC1中检索包含输出数据对象“Lasagna_pasta”的语义工作流,由于在DataOutIndex中存在“Lasagna_pasta”的索引项,则直接返回索引项中的语义工作流集合
{SW2,SW5}。
[0073] 4)建立语义工作流库SWC1的数据‑任务索引DataInTaskIndex和DataOutTaskIndex,首先构造DataInTaskIndex,以语义工作流SW2中的数据对象“Salt”为例,显然SW2中的任务
节点“Toss”,SW5中的任务节点“Toss”包含数据对象“Salt”。则建立DataInTaskIndex的索引
项:(“Salt”,{(“Toss”,SW2),(“Toss”,SW5)}),使用同样的方法可建立其他索引项;然后构
造DataOutTaskIndex,以语义工作流SW1中的数据对象“Fettuccine_pasta”为例,显然只有
SW1的任务节点“Toss”和“Sprinkle”包含此数据对象。则DataOutIndex的索引项:
(“Fettuccine_pasta”,{(“Toss”,SW1),(“Sprinkle”,SW1)}),使用同样的方法可建立其他
索引项。
[0074] 检索示例:如果要在SWC1中检索包含输入数据对象“Salt”的语义工作流,由于在DataInTaskIndex中存在“Salt”的索引项,则直接返回索引项中的集合{(“Toss”,SW2),
(“Toss”,SW5)},再从中抽取出语义工作流集合{SW2,SW5}。
[0075] DataOutTaskIndex索引的检索方法类似,此处省略。
[0076] 5)建立语义工作流库SWC1的两步路径索引Path2Index,以语义工作流SW1中的路径“Cook”→“Stir”为例,显然SW1只有包含此路径,则Path2Index的索引项:(<“Cook”“,Stir”
>,{SW1}),使用同样的方法可建立其他索引项;以语义工作流SW2中的路径“Sprinkle”→
“Bake”为例,显然SW2,SW3,SW4,SW5包含此路径,则Path2Index的索引项:(<“Sprinkle”,
“Bake”>,{SW2,SW3,SW4,SW5})。
[0077] 检索示例:如果要在SWC1中检索包含路径“Sprinkle”→“Bake”的语义工作流,由于在Path2Index中存在“Sprinkle”→“Bake”的索引项,则直接返回索引项中的集合{SW2,
SW3,SW4,SW5}。如果要在SWC1中检索包含路径“Saute”→“Gather”的语义工作流,由于在
Path2Index中不存在“Saute”→“Gather”的索引项,则可以用“Gather”在领域任务本体中
的子节点“Add”来代替“Gather”,返回“Saute”→“Add”的索引项中的集合{SW1,SW4},作为近
似结果集。
[0078] 6)建立语义工作流库SWC1的任务因果关系索引CasualIndex,以语义工作流SW4中的任务因果关系<“Grate”,“Mix”>为例,显然SW4中包含此因果关系,则建立索引项:(<
“Grate”,“Mix”>,{SW4})。使用同样的方法建立其他索引项。
[0079] 检索示例:如果要在SWC1中检索包含任务因果关系<“Grate”,“Mix”>的语义工作流,由于在CasualIndex中存在任务因果关系<“Grate”,“Mix”>的索引项,则直接返回索引
项中的集合{SW4}。如果要在SWC1中检索包含任务因果关系<“Saute”,“Gather”>的语义工作
流,由于在CasualIndex中不存在<“Saute”,“Gather”>的索引项,则可以用“Gather”在任务
本体中的子节点“Add”来代替“Gather”。返回<“Saute”,“Add”>的索引项中的集合{SW1,
SW4},作为近似结果集。
[0080] 7)建立语义工作流库SWC1的任务并行关系索引ParalellIndex,以语义工作流SW2中的任务并行关系<“Grate”,“Cook”>为例,显然SW2中包含此因果关系,则ParalellIndex
的索引项:(<“Grate”,“Cook”>,{SW2});使用同样的方法建立其他索引项。
[0081] 检索示例:如果要在SWC1中检索包含任务并行关系<“Simmer”,“Mix”>的语义工作流,由于在ParalellIndex中存在<“Simmer”,“Mix”>的索引项,则直接返回索引项中的集合
{SW4}。
[0082] 8)建立语义工作流库SWC1的任务互斥关系索引ExclusiveIndex,以语义工作流SW3中的任务互斥关系<“Boil”,“Heat”>为例,显然SW3中包含此互斥关系,则ExclusiveIndex
的索引项:(<“Boil”,“Heat”>,{SW3})。使用同样的方法建立其他索引项。
[0083] 检索示例:如果要在SWC1中检索包含任务互斥关系<“Boil”,“Heat”>的语义工作流,由于在ExclusiveIndex中存在<“Boil”,“Heat”>的索引项,则直接返回索引项中的集合
{SW3}。
[0084] 9)建立语义工作流库SWC1的任务循环关系索引LoopIndex,以语义工作流SW5中的任务循环关系<“Arrange”,“Top”>为例,显然SW5中包含此任务循环关系,则建立LoopIndex
的索引项:(<“Arrange”,“Top”>,{SW5})。使用同样的方法建立其他索引项。
[0085] 检索示例:如果要在SWC1中检索包含任务循环关系<“Arrange”,“Top”>的语义工作流,由于在LoopIndex中存在<“Arrange”,“Top”>的索引项,则直接返回索引项中的集合
{SW5}。
[0086] 10)检索示例:如果要在SWC1中检索包含任务节点“Sprinkle”和输入数据对象“Spaghetti”的语义工作流,则由于Path1Index存在索引项:(“Sprinkle”,{SW1,SW2,SW3,
SW4,SW5}),易得包含任务节点“Sprinkle”的语义工作流集合A1={SW1,SW2,SW3,SW4,SW5};由
于DataInInde x存在索引项:(“Spaghetti”,{SW4}),易得包含输入数据对象“Spaghetti”的
语义工作流集合A2={SW4};由以上可得满足原检索要求的语义工作流集合A3=A1∩A2=
{SW1,SW2,SW3,SW4,SW5}∩{SW4}={SW4}。
[0087] 检索示例:如果要在SWC1中检索包含任务因果关系<“Saute”,“Gather”>和输入数据对象“Fettuccine”的语义工作流,则由于在CasualIndex中不存在<“Saute”,“Gather”>
的索引项,则可用“Gather”在任务本体中的子节点“Add”来代替“Gather”,于是返回包含任
务因果关系<“Saute”,“Add”>的索引项中的语义工作流集合A4={SW1,SW4}作为近似结果
集。由于DataInIndex中存在索引项:(“Fettuccine”,{SW1}),易得包含输入数据对象
“Fettuccine”的语义工作流集合A5={SW1};由以上可得满足原检索要求的语义工作流的近
似集合A6=A4∩A5={SW1,SW4}∩{SW1}={SW1}。