首页 > 解决方案 > SPARQL 查询以根据属性值比较从不同的图创建合并图

问题描述

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

图 G1,其中泵 P1的类型为CentrifugalPumpType 图 G1

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

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

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

对于这种新的思维方式,我完全是新手,我浏览了所有基本的 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" .

图 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" .

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

标签: graphmergesparqlrdfgraphdb

解决方案


推荐阅读