Graph SPARQL查询,根据属性值比较从不同的图创建合并图
我有三个图形数据模型,其中节点在三个图形中以不同的方式表示相同的物理实体 图G1,其中泵P1为离心泵类型 图G2,其中泵P2为PADIMType类型 图G3,其中泵P3为PumpType类型 从以上三张图中可以看出,同一台泵的建模方式不同。然而,有一种方法可以确定它们是否确实是同一个泵。在第一个图(G1)和第二个图(G2)之间,可以根据TagNameAssignmentClass属性(来自G1图)和SignalTag属性(来自G2图)的值进行比较,在本例中,它们都具有值“P1612-A”。与G2和第三个图形(G3)类似,可以在G2和G3的制造商属性(在示例中,它们具有相同的值“XYZ”)和G2和G3的相应序列号属性(在示例中,它们具有相同的值“1234”)之间进行比较。所有这些属性都是在所有三个模型中表示相同泵(P1、P2和P3)的节点的直接或间接属性。合并的目的是实际合并三个模型中表示泵的节点。合并后的图形将如下所示: 对于这种新的思维方式,我是一个完全的新手,我已经阅读了所有的基本SPARQL教程,但是我正在尝试编写的这个查询对于我目前对SPARQL的理解水平来说太复杂了。如果有人能帮上忙,那就太好了!字符串文字只是为了解释我的意思,我不是指to在我的查询中提到字符串文字,而我只想直接比较我提到的属性,而不提及文字值 编辑1:我被要求创建一个最小的可复制示例,因此在删除不必要的属性并进一步简化目标后,这里是一个尝试: 因此,图G1数据集如下所示:Graph SPARQL查询,根据属性值比较从不同的图创建合并图,graph,merge,sparql,rdf,graphdb,Graph,Merge,Sparql,Rdf,Graphdb,我有三个图形数据模型,其中节点在三个图形中以不同的方式表示相同的物理实体 图G1,其中泵P1为离心泵类型 图G2,其中泵P2为PADIMType类型 图G3,其中泵P3为PumpType类型 从以上三张图中可以看出,同一台泵的建模方式不同。然而,有一种方法可以确定它们是否确实是同一个泵。在第一个图(G1)和第二个图(G2)之间,可以根据TagNameAssignmentClass属性(来自G1图)和SignalTag属性(来自G2图)的值进行比较,在本例中,它们都具有值“P1612-A”。
@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" .
@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" .
@前缀rdf:。
@前缀rdfs:。
@前缀eg1:。
泵1
rdf:eg1型:离心泵型;
具有_特性eg1:压差;
具有属性eg1:TagNameAssignmentClass。
eg1:TagNameAssignmentClass
rdf:值“P1612-A”。
Graph G2数据集如下所示:
@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" .
@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" .
@前缀rdf:。
@前缀rdfs:。
@前缀eg2:。
泵2
rdf:eg2型:PADIMType;
具有_属性eg2:信号集;
具有_属性eg2:制造商;
具有_属性eg2:SerialNumber。
制造商
rdf:值“XYZ”。
序列号
rdf:值“1234”。
信号集
具有_属性eg2:信号1。
信号1
具有_属性eg2:SignalTag。
信号标签
rdf:值“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" .
@前缀rdf:。
@前缀rdfs:。
@前缀eg3:。
泵3
rdf:eg3型:泵型;
具有_属性eg3:标识;
具有_属性eg3:端口。
eg3:识别
具有_属性eg3:制造商;
具有_属性eg3:SerialNumber。
制造商
rdf:值“XYZ”。
序列号
rdf:值“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" .
@前缀rdf:。
@前缀rdfs:。
@前缀eg1:。
@前缀eg2:。
@前缀eg3:。
@前缀mg:。
mg:PumpP
rdf:eg1型:离心泵型;
rdf:eg2型:PADIMType;
rdf:eg3型:泵型;
具有_特性eg1:压差;
具有属性eg1:TagNameAssignmentClass;
具有_属性eg2:制造商;
具有_属性eg2:序列号;
具有_属性eg2:信号集;
具有_属性eg3:标识;
具有_属性eg3:端口。
eg1:TagNameAssignmentClass
rdf:值“P1612-A”。
制造商
rdf:值“XYZ”。
序列号
rdf:值“1234”。
信号集
具有_属性eg2:信号1。
信号1
具有_属性eg2:SignalTag。
信号标签
rdf:值“P1612-A”。
eg3:识别
具有_属性eg3:制造商;
具有_属性eg3:SerialNumber。
制造商
rdf:值“XYZ”。
序列号
rdf:值“1234”。
请原谅语法错误,以防我有任何错误。@StanislavKralin感谢您的评论,我已经在我的示例中为图形添加了rdf数据集。我希望这有助于进一步和更清楚地解释目标您的数据目前只是“错误”.Triples,如
eg3:PumpP3 rdf:Property eg3:Identification
或eg2:SerialNumber rdfs:Literal“1234”.
没有意义。这不是必须使用RDF的方式。RDF:Property
或rdfs:Literal
是RDF类,因此仅位于三元组的object位置以表示主语的类型。如果要添加有关eg3:PumpP3
的数据,则可以使用谓词位置的属性,如eg3:Pump>P3 eg2:序列号“1234”.
因此,目前,您的示例数据非常不可用,您应该首先修复此问题。老实说,我不确定您要用例如eg3:PumpP3:rdf:Property eg3:Identification
来表示什么,然后是eg3:Identification rdf:Property eg3:Manufacturer;rdf:Property eg3:SerialNumber.
这表示什么它应该更像eg3:PumpP3 rdf:type eg3:PumpType;eg3:Identification[eg3:Manufacturer“XYZ”;eg3:SerialNumber“1234”]。
总之,匹配G1和G2的启动SPARQL查询是select?pumpG1?pumpG2,其中{graph:G1{?pumpG1:具有_属性?标记分配。?标记分配rdf:value?标记}图形:g2{pumpG2:has_属性?信号集。?信号集:has_属性?信号。?信号:has_属性?信号标签。?信号标签rdf:value?标签}
-祝您好运