使用rdf4j构造sparql查询

使用rdf4j构造sparql查询,sparql,rdf4j,Sparql,Rdf4j,我正在尝试使用rdf4j文档构造SPARQL查询: 我是java新手(stackoverflow,如果写得不好,很抱歉),但我认为我已经包括了正确的开始步骤。我以以下方式实例化了一个select查询、一个前缀和一个变量: SelectQuery draftQuery = Queries.SELECT(); Prefix default = SparqlBuilder.prefix("dc", Rdf.iri("url")); V

我正在尝试使用rdf4j文档构造SPARQL查询:

我是java新手(stackoverflow,如果写得不好,很抱歉),但我认为我已经包括了正确的开始步骤。我以以下方式实例化了一个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?x}

如何编写此查询?这就是我到目前为止所做的:

    draftQuery.prefix(default).select(draftCount)

您取得了一个良好的开端,但您混淆了变量和IRI:
:team_1
:draftCount
是查询中的IRI,而不是变量。只有
?x
是一个变量。由于您使用的是IRs的默认名称空间,因此只需为默认名称空间创建一个
前缀
对象,如下所示:

Prefix defaultNs=SparqlBuilder.Prefix(Rdf.iri(“http://example.org/"));
然后您可以使用它来创建
Iri
对象,以便在查询中使用,如下所示:

Iri team1=defaultNs.Iri(“team_1”);
要使用SparqlBuilder添加非
rdf:type
的关系,请使用
.has
方法

将它们放在一起,生成这个SPARQL查询字符串:

PREFIX: <http://example.org/>
SELECT ?x WHERE { :team_1 :draftCount ?x}

我不确定你到底想要什么,但从我的角度来看,这本教程相当不错。为什么您没有完全按照第一个示例所示进行操作?为什么您认为
draftCount
是一个变量?在您的查询
中选择?x,其中{:team_1:draftCount?x}
它是否是RDF谓词?我的意思是,它被称为
:draftCount
,这显然是一个前缀URI。