我试图使用rdf4j文档:https://rdf4j.org/documentation/tutorials/sparqlbuilder/构建一个SPARQL查询
我是java的新手(还有堆栈溢出,如果写得不好,很抱歉),但我想我已经包括了正确的开始步骤。我实例化了一个select查询、一个前缀和一个变量,方法如下:
SelectQuery draftQuery = Queries.SELECT();
Prefix default = SparqlBuilder.prefix("dc", Rdf.iri("url"));
Variable draftCount = SparqlBuilder.var("draftCount");url已被正确的前缀替换
我试图编写的查询是: SELECT ?x其中{ :team_1 :draftCount ?x},但是?x没有rdf:type,它只是一个附加到:draftCount的值。我不知道如何将它写成java中的SPARQL查询,因为根据我在文档中的理解,示例包括了产品在哪里是一本书,产品有rdf:type " book“。我不想查询多个变量(例如,:team_1 ?x ?y),因为还有附加到团队的其他三元组,我想分别查询它们。我希望稍后有另一个类似的SPARQL查询,但SELECT ?x在其中{ :team_1 :completedCount },
如何编写此查询?到目前为止,这就是我所拥有的:
draftQuery.prefix(default).select(draftCount)发布于 2021-04-07 00:30:31
您取得了一个良好的开端,但是您将变量和IRIs混为一谈::team_1和:draftCount是查询中的IRIs,而不是变量。只有?x是一个变量。由于您正在为您的IRs使用默认名称空间,所以只需为默认名称空间创建一个Prefix对象,如下所示:
Prefix defaultNs = SparqlBuilder.prefix(Rdf.iri("http://example.org/"));然后您可以使用它来创建用于查询的Iri对象,如下所示:
Iri team1 = defaultNs.iri("team_1");若要使用rdf:type方法添加SparqlBuilder以外的关系,请使用.has方法。
将所有这些放在一起,以生成这个SPARQL查询字符串:
PREFIX: <http://example.org/>
SELECT ?x WHERE { :team_1 :draftCount ?x}你这样做:
Prefix defaultNs = SparqlBuilder.prefix(Rdf.iri("http://example.org/"));
Iri team_1 = defaultNs.iri("team_1"), draftCount = defaultNs.iri("draftCount");
Variable x = SparqlBuilder.var("x");
SelectQuery query = Queries.SELECT()
.prefix(defaultNs)
.select(x)
.where(team_1.has(draftCount, x));
System.out.println(query.getQueryString());https://stackoverflow.com/questions/66967498
复制相似问题