SPARQL 查询基于属性值比较从不同的图创建合并图

问题描述

我有三个图数据模型,其中的节点在三个图中以不同的方式表示相同的物理实体。

图形 G1,其中 Pump P1 的类型为 CentrifugalPumpType

Graph G1

图 G2,其中 Pump P2 的类型为 PADIMType

Graph G2

图 G3,其中 Pump P3 的类型为 PumpType

Graph G3

正如您在以上三张图中所看到的,同一个 Pump 正在以不同的方式建模。但是,有一种方法可以确定它们是否确实是同一个泵。在第一个图 (G​​1) 和第二个图 (G​​2) 之间,可以根据 TagNameAssignmentClass 属性(来自 G1 图)与 SignalTag 的值进行比较> 属性(来自 G2 图表),在本例中它们都具有值“P1612-A”。与 G2 和第三个图 (G​​3) 相似,可以在 G2 和 G3 的 Manufacturer 属性(在示例中它们具有相同的值“XYZ”)和各自的 SerialNumber 之间进行比较 来自 G2 和 G3 的属性((在示例中它们具有相同的值“1234”)。所有这些属性都是代表所有三个中相同泵(P1、P2 和 P3)的节点的直接或间接属性模型。合并的目的是实际合并三个模型中代表泵的节点。合并后的图将如下所示:

Merged Graph

我是这种新思维方式的完全新手,我浏览了所有基本的 SPARQL 教程,但是我尝试编写的这个查询对于我目前对 SPARQL 的理解水平来说太复杂了。如果有人能帮忙就太好了!字符串文字只是为了解释我的意思,我不想在我的查询中提及字符串文字,而是我只想直接比较我提到的属性而不提及它是什么文字值。

编辑 1:我被要求创建一个最小的可重现示例,因此在删除不必要的属性并进一步简化目标后尝试:

所以Graph G1数据集如下:

@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-Syntax-ns> .
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix eg1:    <http://www.myexample1.com> . 

eg1:PumpP1
    rdf:type eg1:CentrifugalPumpType ;
    has_property  eg1:DifferentialPressure ;
    has_property  eg1:TagNameAssignmentClass .

eg1:TagNameAssignmentClass
    rdf:value "P1612-A" . 

Graph G2 Dataset如下:

@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-Syntax-ns> .
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix eg2:    <http://www.myexample2.com> . 
    
eg2:PumpP2
    rdf:type   eg2:PADIMType ;
    has_property  eg2:SignalSet ;
    has_property  eg2:Manufacturer ;
    has_property  eg2:SerialNumber .

eg2:Manufacturer
    rdf:value "XYZ" .

eg2:SerialNumber
    rdf:value "1234" .

eg2:SignalSet
    has_property eg2:SignalS1 .

eg2:SignalS1
    has_property eg2:SignalTag .

eg2:SignalTag
    rdf:value "P1612-A" .

Graph G3 数据集可能如下所示:

@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-Syntax-ns> .
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix eg3:    <http://www.myexample3.com> . 
    
eg3:PumpP3
    rdf:type   eg3:PumpType ;
    has_property  eg3:Identification ;
    has_property  eg3:Ports .

eg3:Identification
    has_property  eg3:Manufacturer ;
    has_property  eg3:SerialNumber .

eg3:Manufacturer
    rdf:value "XYZ" .

eg3:SerialNumber
    rdf:value "1234" .

合并后的预期图形可能如下所示:

@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-Syntax-ns> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix eg1:   <http://www.myexample1.com> .
@prefix eg2:   <http://www.myexample2.com> .
@prefix eg3:   <http://www.myexample3.com> . 
@prefix mg:    <http://www.mymergeexample.com> .
    
mg:PumpP
    rdf:type   eg1:CentrifugalPumpType ;
    rdf:type   eg2:PADIMType ;
    rdf:type   eg3:PumpType ;
    has_property  eg1:DifferentialPressure ;
    has_property  eg1:TagNameAssignmentClass ;
    has_property  eg2:Manufacturer ;
    has_property  eg2:SerialNumber ;
    has_property  eg2:SignalSet ;
    has_property  eg3:Identification ;
    has_property  eg3:Ports .

eg1:TagNameAssignmentClass
    rdf:value "P1612-A" .

eg2:Manufacturer
    rdf:value "XYZ" .

eg2:SerialNumber
    rdf:value "1234" .

eg2:SignalSet
    has_property eg2:SignalS1 .

eg2:SignalS1
    has_property eg2:SignalTag .

eg2:SignalTag
    rdf:value "P1612-A" .

eg3:Identification
    has_property  eg3:Manufacturer ;
    has_property  eg3:SerialNumber .

eg3:Manufacturer
    rdf:value "XYZ" .

eg3:SerialNumber
    rdf:value "1234" .

请原谅我可能犯过的语法错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...