SPARQL创建图(如果尚不存在)

时间:2019-10-08 14:18:35

标签: graph sparql rdf4j

我正在尝试制定一个SPARQL查询,该查询将创建一个具有ID(如果尚不存在)的新图形。如果确实存在,查询应返回“ Graph Exist”。

我正在将RDF4J与SPARQL查询一起使用。

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

1 个答案:

答案 0 :(得分: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将失败,其余序列将中止。