1

我正在尝试制定一个 SPARQL 查询,如果不存在,它将创建一个带有 ID 的新图。如果确实存在,则查询应返回“Graph Exist”。

我正在使用带有 SPARQL 查询的 RDF4J。

PREFIX  app:  <http://www.example.com/ont#>

CREATE GRAPH <http://www.example.com/ont#books>;
SELECT{
    ASK WHERE { GRAPH <http://www.example.com/ont#books> { ?s ?p ?o } }
    str("Graph exists!").

}

不接受SELECT是因为CREATE GRAPH

4

1 回答 1

2

您不能以这种方式组合更新和查询。分号分隔的 SPARQL 操作序列只能包含更新操作。

此外,如果图已经存在,则CREATE GRAPH操作本身将返回错误。只需执行:

CREATE GRAPH <http://www.example.com/ont#books>

如果图已经存在,则操作将返回错误。

最后:大多数 RDF4J 数据库实现不记录空图。这意味着该CREATE GRAPH操作在大多数情况下是无操作的:如果您尝试创建的图已经存在(也就是说,有使用该命名图的语句),它会给出错误,否则它只是返回一个 OK 并且实际上并没有做任何事情。

要在 RDF4J 中实际创建命名图,您必须向其中添加语句,例如:

 INSERT DATA { GRAPH <http://www.example.com/ont#books> { <ex:s1> <ex:p1> <ex:o1> } }

如果您想在插入之前检查图表是否不存在(这样它就不会意外添加到现有图表中),您可以使用如下更新序列:

 CREATE GRAPH <http://www.example.com/ont#books> ;
 INSERT DATA { GRAPH <http://www.example.com/ont#books> { <ex:s1> <ex:p1> <ex:o1> } }

如果图已经存在,CREATE则将失败并且序列的其余部分将被中止。

于 2019-10-08T23:42:52.923 回答