graph - SPARQL 查询以根据属性值比较从不同的图创建合并图
问题描述
我有三个图形数据模型,节点在三个图形中以不同的方式表示相同的物理实体。
图 G1,其中泵 P1的类型为CentrifugalPumpType
正如您在上面的三幅图中所看到的,相同的 Pump 正在以不同的方式建模。但是,有一种方法可以确定它们是否确实是同一个泵。在第一个图 (G1) 和第二个图 (G2) 之间,可以根据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" .
请原谅我可能犯的语法错误。
解决方案
推荐阅读
- pandas - 柱子
有 dtype 对象,不能对这个 dtype 使用方法“nsmallest” - gradle - 仅在没有检查任务的情况下运行 Detekt 任务才会失败
- python - 如何在python中使用正则表达式从包含日期的文件名中提取字符串?
- jupyter-notebook - 如何将 Rmd 文档转换为 jupyter notebook
- ssl - 无法使用 Keycloak 和 OpenLDAP 进行相互身份验证
- mysql - Jenkins 的复杂 SQL 查询
- java - 如何在犀牛中抛出java异常
- html - 有没有办法在一个内联元素之前添加一个填充,如果该元素在新行上,则该元素会被忽略?
- c++ - 这个模板专业化还是声明(或完全是其他东西)?
- javascript - 浮动:正确的顺序是混乱