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