This document describes SPARQL Abstract Syntax Tree API. It can be used to create a query by program. The resulting ast can be executed right away by KGRAM. TBD: SPARQL Update.
SPARQL Abstract Syntax Tree with namespace manager:
ASTQuery ast = ASTQuery.create(); NSManager nsm = NSManager.create(); ast.setNSM(nsm); nsm.defNamespace("http://ns.inria.fr/schema/", "ns");
Variable:
Variable.create("?x");
URI Constant, Datatype Constant, Literal with lang
ast.createConstant("ns:John"); ast.createConstant("12", "xsd:integer", null); ast.createConstant("engineer", null, "en");
Triple:
Triple t1 = Triple.create( Variable.create("?x"), ast.createConstant("rdf:type"), Variable.create("?y"));
Body:
Exp body = BasicGraphPattern.create(); body.add(t1); ast.setBody(body);
SPARQL Statements:
BasicGraphPattern bgp = BasicGraphPattern.create(); Option.create(bgp); Source.create(graph, bgp); Minus.create(bgp); Or.create(bgp1, bgp2); bgp.add(e1); bgp.add(e2);
Filter:
Term.create("<", Variable.create("?x"), ast.createConstant("100", "xsd:integer", null)); Term.create("&&", t1, t2); Term.create("||", t1, t2); Term.create("!", t1, t2); Term.function("isBlank", Variable("?t")); // future sparql 1.0.1 Term list = Term.list(); list.add(t1); list.add(t2); Term.create("in", Variable.create("?x"), list);
Add a filter:
Term t = Term.create("&&", t1, t2); Triple triple = Triple.create(t); BasicGraphPattern bgp = BasicGraphPattern.create(); bgp.add(triple);
Select:
ast.setSelect(Variable.create("?x")); ast.setSelect(Variable.create("?sum"), Term.create("+", Variable.create("?x"), Variable.create("?y))); ast.setSelectAll(true); ast.setDistinct(true);
From:
ast.setFrom (ast.createConstant("http://www.example.org/graph")); ast.setNamed(ast.createConstant("http://www.example.org/graph"));
Construct:
ast.setConstruct(bgp);
Describe:
ast.setDescribe(Variable.create("?z"));
Ask:
ast.setResultForm(ASTQuery.QT_ASK); // future sparql 1.0.1: ast.setAsk(true);
Order by, group by:
ast.setSort(var); ast.setSort(var, true); ast.setSort(exp); ast.setSort(exp, true); ast.setGroup(var); ast.setGroup(exp, var);
Limit, offset:
ast.setMaxResult(10); // future sparql 1.0.1: ast.setLimit(10); ast.setOffset(10);
Subquery:
ASTQuery sub = ast.subCreate(); q = Query.create(sub); body.add(q);
Property Path Regex:
ast.createConstant("rdf:type"); ast.createOperator("^", regex); ast.createOperator("!", regex); ast.createOperator("+", regex); ast.createOperator("*", regex); ast.createOperator("?", regex); ast.createOperator("1", "5", regex); ast.createConditionalOrExpression ("|", regex1, regex2); ast.createConditionalAndExpression("/", regex1, regex2); // future sparql 1.0.1: ast.createOperator ("|", regex1, regex2); ast.createOperator ("/", regex1, regex2);
Property Path:
ast.createTriple(subject, ast.createProperty(regex), object);
Aggregates:
Term agg = Term.function("group_concat", Variable.create("?x")); agg.setDistinct(true); agg.setModality("; "); ast.setSelect(Variable.create("?conc"), agg);
Having:
// future sparql 1.0.1: Term exp = Term.create(">=", Variable.create("?x"), ast.createConstant("12", "xsd:integer")); ast.setHaving(exp);
Bindings:
List<Variable> lVar = new ArrayList<Variable>(); lVar.add(Variable.create("?x")); lVar.add(Variable.create("?y")); ast.setVariableBindings(lVar); List<Constant> lValue = new ArrayList<Constant>(); lValue.add(ast.createConstant("ns:John")); lValue.add(ast.createConstant("1", "xsd:integer")); ast.setValueBindings(lValue);