Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph SPARQL查询,根据属性值比较从不同的图创建合并图_Graph_Merge_Sparql_Rdf_Graphdb - Fatal编程技术网

Graph SPARQL查询,根据属性值比较从不同的图创建合并图

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”。

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

图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数据集如下所示:

@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?标签}
-祝您好运