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