Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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
Sparql 从两个命名图插入?_Sparql_Graphdb_Named Graphs - Fatal编程技术网

Sparql 从两个命名图插入?

Sparql 从两个命名图插入?,sparql,graphdb,named-graphs,Sparql,Graphdb,Named Graphs,我正在寻找一种简单的方法,从两个或多个命名图(而不是整个未命名的默认图)插入三元组到另一个命名图中。我用的是GraphDB 我想这可以通过在WHERE部分多次写出相同的查询来实现,用多个图形规范包装,然后将它们联合在一起,但是我的WHERE很长,我不希望多次写出它们 假设我加载了如下数据: INSERT DATA { GRAPH <http://example.com/ngA> { <http://example.com/person1> <http:/

我正在寻找一种简单的方法,从两个或多个命名图(而不是整个未命名的默认图)插入三元组到另一个命名图中。我用的是GraphDB

我想这可以通过在WHERE部分多次写出相同的查询来实现,用多个图形规范包装,然后将它们联合在一起,但是我的WHERE很长,我不希望多次写出它们

假设我加载了如下数据:

INSERT DATA {
  GRAPH <http://example.com/ngA> {
    <http://example.com/person1> <http://example.com/name> "Arthur" .
  }
  GRAPH <http://example.com/ngB> {
    <http://example.com/person1> <http://example.com/name> "Brian" .
  }
  GRAPH <http://example.com/ngC> {
    <http://example.com/person1> <http://example.com/name> "Charlie" .
  }
}
INSERT {
  GRAPH <http://example.com/ngZ> {
    ?s <http://example.com/moniker> ?o .
  }
}
WHERE
  { ?s  <http://example.com/name>  ?o }
如果我想将这些三元组从指定的图复制到另一个图中呢

当我尝试验证时,GraphDB 8.3和sparql.org验证程序中出现了一个错误

INSERT {
  GRAPH <http://example.com/ngZ> {
    ?s <http://example.com/moniker> ?o .
  }
}
WHERE
  { SELECT  *
FROM <http://example.com/ngA>
FROM <http://example.com/ngB>
WHERE
  { ?s  <http://example.com/name>  ?o } }
请尝试以下查询:

PREFIX ex: <http://example.com/>

INSERT {
  GRAPH ex:ngZ { ?s ex:moniker ?o }
}
WHERE {
  GRAPH ?g { ?s ex:name ?o }  
  FILTER (?g IN ( ex:ngA, ex:ngB ) )
}
然后:

PREFIX ex: <http://example.com/>

SELECT * 
FROM NAMED ex:ngZ
WHERE { 
    GRAPH ?g { ?s ?p ?o }
} LIMIT 100 
这是你需要的吗

顺便说一句,存在使用时要小心!和

尝试此查询:

PREFIX ex: <http://example.com/>

INSERT {
  GRAPH ex:ngZ { ?s ex:moniker ?o }
}
WHERE {
  GRAPH ?g { ?s ex:name ?o }  
  FILTER (?g IN ( ex:ngA, ex:ngB ) )
}
然后:

PREFIX ex: <http://example.com/>

SELECT * 
FROM NAMED ex:ngZ
WHERE { 
    GRAPH ?g { ?s ?p ?o }
} LIMIT 100 
这是你需要的吗


顺便说一句,存在使用时要小心!和

谢谢,@Stanislav Kralin

想想看,这也行得通:

PREFIX ex: <http://example.com/>
INSERT {
    GRAPH ex:ngZ {
        ?s ex:moniker ?o 
    }
}
WHERE {
    values ?g {
        ex:ngA ex:ngB 
    }
    GRAPH ?g {
        ?s ex:name ?o 
    }  
}

谢谢,@Stanislav Kralin

想想看,这也行得通:

PREFIX ex: <http://example.com/>
INSERT {
    GRAPH ex:ngZ {
        ?s ex:moniker ?o 
    }
}
WHERE {
    values ?g {
        ex:ngA ex:ngB 
    }
    GRAPH ?g {
        ?s ex:name ?o 
    }  
}
提供使用和使用类似于“从”和“从中命名”查询的“命名”:

USING和USING NAMED子句会影响在计算WHERE子句时使用的RDF数据集。这与FROM和FROM命名子句描述数据集的方式相同

您可以将需求表示为更新,如下所示:

INSERT {
  GRAPH <http://example.com/ngZ> {
    ?s <http://example.com/moniker> ?o .
  }
}
USING <http://example.com/ngA>
USING <http://example.com/ngB>
WHERE
  {  ?s  <http://example.com/name>  ?o }
还要注意,根据,子查询不允许dataset子句。这就是SPARQL解析器拒绝您的查询的原因。

提供了使用和使用类似于FROM和FROM in命名查询的命名查询:

USING和USING NAMED子句会影响在计算WHERE子句时使用的RDF数据集。这与FROM和FROM命名子句描述数据集的方式相同

您可以将需求表示为更新,如下所示:

INSERT {
  GRAPH <http://example.com/ngZ> {
    ?s <http://example.com/moniker> ?o .
  }
}
USING <http://example.com/ngA>
USING <http://example.com/ngB>
WHERE
  {  ?s  <http://example.com/name>  ?o }
还要注意,根据,子查询不允许dataset子句。这就是SPARQL解析器拒绝您的查询的原因