ARQ从头开始查询

Ajs*_*shk 5 sparql jena arq

基于http://openjena.org/wiki/ARQ/Manipulating_SPARQL_using_ARQ,我在语法或代数中从头开始构建查询时遇到问题

例如,我有以下查询

 SELECT  (count(?instance) AS ?count)
 WHERE
 { ?instance <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
  <http://data.linkedmdb.org/resource/movie/film> }


(project (?count)
  (extend ((?count ?.0))
    (group () ((?.0 (count ?instance)))
      (bgp (triple ?instance <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.linkedmdb.org/resource/movie/film>))))) 
Run Code Online (Sandbox Code Playgroud)

任何人都可以用一个如何从头开始构建上述查询的示例代码来指导我吗?我试图在语法上构建它,但没有知道如何对上面的聚合进行别名.

如果任何人至少可以指导我在投影中包含其别名的聚合,那将是非常好的.

谢谢,啊

Jos*_*lor 4

我通常不会通过代码构建查询,因为我只能解析查询字符串,或使用参数化 SPARQL 查询,但这里是使用 API 重建查询的方式。我在这里使用的大多数方法都是通过探索 Eclipse 中的自动完成选项以及查看 Javadoc 找到的。

import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.sparql.core.Var;
import com.hp.hpl.jena.sparql.expr.ExprAggregator;
import com.hp.hpl.jena.sparql.expr.ExprVar;
import com.hp.hpl.jena.sparql.expr.aggregate.AggCountVar;
import com.hp.hpl.jena.sparql.syntax.ElementTriplesBlock;
import com.hp.hpl.jena.vocabulary.RDF;

public class QueryBuilding {
    public static void main(String[] args) {
        // Create the query and make it a SELECT query.
        final Query query = QueryFactory.create();
        query.setQuerySelectType();

        // Set the projection expression.
        final ExprVar instance = new ExprVar( "instance" );
        query.getProject().add( Var.alloc( "count" ), new ExprAggregator( instance.asVar(), new AggCountVar( instance )));

        // Construct the triples pattern and add it.
        final ElementTriplesBlock triples = new ElementTriplesBlock();
        final Node film = Node.createURI( "http://data.linkedmdb.org/resource/movie/film" );
        triples.addTriple( new Triple( instance.getAsNode(), RDF.type.asNode(), film ));
        query.setQueryPattern( triples );

        // Show the query 
        System.out.println( query );
    }
}
Run Code Online (Sandbox Code Playgroud)

输出(即打印的查询)如下。它与您的查询相同,以一些空白位置和换行符为模。

SELECT  (count(?instance) AS ?count)
WHERE
  { ?instance  <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>  <http://data.linkedmdb.org/resource/movie/film> .}
Run Code Online (Sandbox Code Playgroud)