我正在尝试制定一个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
答案 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
将失败,其余序列将中止。