微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?