java and sparql

26
Processing SPARQL Queries using Java Raji GHAWI 26/01/2009 ARQ - A SPARQL Processor for Jena

Upload: raji-ghawi

Post on 21-Nov-2014

2.533 views

Category:

Technology


2 download

DESCRIPTION

tutorial about processing SPARQL1.0 queries using Java and ARQ of Jena.

TRANSCRIPT

Page 1: Java and SPARQL

Processing SPARQL Queries using Java

Raji GHAWI

26/01/2009

ARQ - A SPARQL Processor for Jena

Page 2: Java and SPARQL

2

Outline

Query Execution

Query Analysis

26/01/2009

Page 3: Java and SPARQL

1. Query Execution

Page 4: Java and SPARQL

4

Read a file into a model

String fileName = "../univ.owl";// Model model = ModelFactory.createDefaultModel();OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);

try { File file = new File(fileName); FileReader reader = new FileReader(file); model.read(reader,null);} catch (Exception e) { e.printStackTrace();}

Query Execution

26/01/2009

Page 5: Java and SPARQL

5

Put the query as a string

String sparqlQuery = "PREFIX my:<http://www.something.com/myontology#>\n" + "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + "\n" + "SELECT ?stud ?dip \n" + "WHERE {\n" + " ?stud my:enrolledIn ?dip.\n" + "} ";

PREFIX my:<http://www.something.com/myontology#>PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?stud ?dipWHERE { ?stud my:enrolledIn ?dip.}

Query Execution

26/01/2009

Page 6: Java and SPARQL

6

Execute the Query

Query query = QueryFactory.create(sparqlQuery);

QueryExecution qe = QueryExecutionFactory.create(query, model);

ResultSet results = qe.execSelect();

a single execution of a query

encapsulates a parsed query

read a textual query from a String

Query Execution

26/01/2009

Page 7: Java and SPARQL

7

Print Query Results

ResultSetFormatter.out(System.out, results, query);

-----------------------------------| stud | dip |===================================| my:Simon_Thevenin | my:M2_BDIA || my:Raji_Ghawi | my:Doctorat || my:Kamel_Boulil | my:M2_BDIA |-----------------------------------

output

textual format standard output

result set

Query Execution

26/01/2009

Page 8: Java and SPARQL

8

<?xml version="1.0"?><sparql xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xs="http://www.w3.org/2001/XMLSchema#" xmlns="http://www.w3.org/2005/sparql-results#" > <head> <variable name="stud"/> <variable name="dip"/> </head> <results ordered="false" distinct="false"> <result> <binding name="stud"> <uri>http://www.something.com/myontology#Simon_Thevenin</uri> </binding> <binding name="dip"> <uri>http://www.something.com/myontology#M2_BDIA</uri> </binding> </result> <result> <binding name="stud"> <uri>http://www.something.com/myontology#Raji_Ghawi</uri> </binding> <binding name="dip"> <uri>http://www.something.com/myontology#Doctorat</uri> </binding> </result> <result> <binding name="stud"> <uri>http://www.something.com/myontology#Kamel_Boulil</uri> </binding> <binding name="dip"> <uri>http://www.something.com/myontology#M2_BDIA</uri> </binding> </result> </results></sparql>

output

ResultSetFormatter.outputAsXML(System.out, results);

XML format

26/01/2009

Page 9: Java and SPARQL

9

Save Query Results to String

MyOutputStream myOutput = new MyOutputStream();ResultSetFormatter.out(myOutput, results, query);String sparqlResults = myOutput.getString();

class MyOutputStream extends OutputStream { StringBuffer buf;

public MyOutputStream(){ buf = new StringBuffer(); }

public void write(int character) throws IOException { buf.append((char) character); }

public String getString() { return buf.toString(); }}

Query Execution

26/01/2009

Page 10: Java and SPARQL

10

Retrieve Query Solutions

ResultSet results = qe.execSelect();List vars = results.getResultVars();

while(results.hasNext()) { QuerySolution qs = results.nextSolution(); System.out.println("--------- solution ---------");

for (int i = 0; i < vars.size(); i++) { String var = vars.get(i).toString(); RDFNode node = qs.get(var); System.out.println(var + "\t" + node.toString()); }}

--------- solution ---------stud http://www.something.com/myontology#Guillermo_Gomezdip http://www.something.com/myontology#These--------- solution ---------stud http://www.something.com/myontology#Elie_Raaddip http://www.something.com/myontology#M2-BDIA--------- solution ---------stud http://www.something.com/myontology#Raji_Ghawidip http://www.something.com/myontology#M2-BDIA

output

Query Execution

26/01/2009

Page 11: Java and SPARQL

11

ResultSet results = qe.execSelect();List vars = results.getResultVars(); PrefixMapping pm = query.getPrefixMapping();

while (results.hasNext()) { QuerySolution qs = results.nextSolution(); System.out.println("--------- solution ---------"); for (int i = 0; i < vars.size(); i++) { String var = vars.get(i).toString(); RDFNode node = qs.get(var); String text = ""; if(node.isURIResource()){ text = pm.shortForm(node.asNode().getURI()); } else { text = node.toString(); } System.out.println(var+"\t"+text); }}

--------- solution ---------stud my:Guillermo_Gomezdip my:These--------- solution ---------stud my:Elie_Raaddip my:M2-BDIA--------- solution ---------stud my:Raji_Ghawidip my:M2-BDIA

output

26/01/2009

Page 12: Java and SPARQL

2. Query Analysis

Page 13: Java and SPARQL

13

PREFIX my:<http://www.something.com/myontology#>PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?stud ?modName WHERE {

?stud rdf:type my:Student .?stud my:enrolledIn ?dip .?dip my:hasModule ?mod .?mod my:moduleName ?modName.FILTER (?modName='Databases').

}

Query Analysis

26/01/2009

Page 14: Java and SPARQL

14

Put the Query in a String

String sparqlQuery = "PREFIX my:<http://www.something.com/myontology#>\n" + "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + "\n" + "SELECT ?stud ?modName \n" + "WHERE {\n" + " ?stud rdf:type my:Student .\n" + " ?stud my:enrolledIn ?dip .\n" + " ?dip my:hasModule ?mod .\n" + " ?mod my:moduleName ?modName.\n" + " FILTER(?modName='Databases').\n" + "} ";

Query Analysis

26/01/2009

Page 15: Java and SPARQL

15

Create the Query

Query query = QueryFactory.create(sparqlQuery);

System.out.println("---------- Query ----------");System.out.println(query);

---------- Query ----------PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX my: <http://www.something.com/myontology#>SELECT ?stud ?modNameWHERE { ?stud my:enrolledIn ?dip ; rdf:type my:Student ; my:enrolledIn ?dip . ?dip my:hasModule ?mod . ?mod my:moduleName ?modName . FILTER ( ?modName = "Databases" ) }

output

Query Analysis

26/01/2009

Page 16: Java and SPARQL

16

Prefix Mapping

------ Prefix Mapping ------rdf http://www.w3.org/1999/02/22-rdf-syntax-ns#my http://www.something.com/myontology#

output

System.out.println("------ Prefix Mapping ------");Map map = query.getPrefixMapping().getNsPrefixMap();

Iterator pmIter= map.entrySet().iterator();while (pmIter.hasNext()) { Entry ent = (Entry) pmIter.next(); String prefix = ent.getKey().toString(); String namespace = ent.getValue().toString(); System.out.println(prefix+"\t"+namespace);}

Query Analysis

26/01/2009

Page 17: Java and SPARQL

17

Retrieve Result Variables

------ Result Variables ------studmodName

output

System.out.println("------ Result Variables ------");List varList = query.getResultVars();for (int i = 0; i < varList.size(); i++) { String var = varList.get(i).toString(); System.out.println(var);}

query.isQueryResultStar()

query.isDistinct()

Query Analysis

26/01/2009

Page 18: Java and SPARQL

18

Retrieve All Variables

------- All Variables --------studdipmodmodName

output

System.out.println("------- All Variables --------");Iterator varIter = query.getQueryBlock().varsMentioned().iterator();while(varIter.hasNext()){ String var = varIter.next().toString(); System.out.println(var);}

Query Analysis

26/01/2009

Page 19: Java and SPARQL

19

Fetch Query Elements

ElementGroup eg = (ElementGroup) query.getQueryBlock().getPatternElement();List elemList = eg.getElements();

for(int i=0; i<elemList.size(); i++){ Element elem = (Element) elemList.get(i); try{ if (elem instanceof ElementOptional) { ElementOptional elOp = (ElementOptional) elem; // .... } else if (elem instanceof ElementFilter) { ElementFilter elf = (ElementFilter) elem; // .... } else if (elem instanceof ElementTriplePattern) { ElementTriplePattern etp = (ElementTriplePattern) elem; // .... } } catch(ClassCastException e){ e.printStackTrace(); }}

Query Analysis

26/01/2009

Page 20: Java and SPARQL

20

ElementOptional elOp = (ElementOptional) elem;

Iterator iter = elOp.varsMentioned().iterator();// ....

ElementGroup newElemGrp = (ElementGroup) elOp.getElement();List elemList = eg.getElements();

for(int i=0; i<elemList.size(); i++){ // ....}

Query Analysis

ElementOptional

26/01/2009

Page 21: Java and SPARQL

21

ElementFilter elf = (ElementFilter) elem;

Iterator iter = elf.varsMentioned().iterator();// ....

Expr expr = elf.getConstraint().getExpr();// ....

Query Analysis

ElementFilter

26/01/2009

Page 22: Java and SPARQL

22

Query Analysis

Expr

if (expr instanceof E_LogicalAnd) { E_LogicalAnd and = (E_LogicalAnd) expr; Expr left = and.getLeft(); Expr right = and.getRight(); //} else if (expr instanceof E_LogicalOr) { // .. ..} // .. ..else if (expr instanceof E_Regex) { E_Regex re = (E_Regex) expr; String pattern = ((NodeValueString) re.getPattern()).asString(); String varName = re.getRegexExpr().getVarName().toString(); // .. ..}

E_LogicalAndE_LogicalOrE_EqualsE_NotEqualsE_LessThanE_LessThanOrEqualE_GreaterThanE_GreaterThanOrEqual

E_LogicalNot

E_Regex

NodeVar

NodeValueIntegerNodeValueFloatNodeValueDecimalNodeValueString...

getSubExpr()

getLeft()getRight()

getVarName()

asString()

26/01/2009

Page 23: Java and SPARQL

23

ElementTriplePattern etp = (ElementTriplePattern) elem;

Triple triple = etp.getTriple();

Node subject = triple.getSubject();Node predicate = triple.getPredicate();Node object = triple.getObject();

Query Analysis

ElementTriplePattern

boolean isURI() boolean isLiteral() boolean isVariable()

SELECT ?stud ?dipWHERE { ?stud my:enrolledIn ?dip. ?dip my:diplomaName "BDIA". }

URI LiteralVariable

Subject Predicate Object

26/01/2009

Page 24: Java and SPARQL

24

Variable

Literal

URI

ObjectPredicateSubject

26/01/2009

Page 25: Java and SPARQL

25

if(query.getOrderBy() != null){ Iterator orderBy = query.getOrderBy().iterator(); while (orderBy.hasNext()) { SortCondition sc = (SortCondition) orderBy.next(); Expr exp = sc.getExpression(); if(exp.isVariable()){ String obv = exp.getVarName(); // .... } }}

Query Analysis

OrderBy

26/01/2009

Page 26: Java and SPARQL

26

References

ARQ - A SPARQL Processor for Jena http://jena.sourceforge.net/ARQ/

Search RDF data with SPARQL http://www.ibm.com/developerworks/xml/library/j-sparql

26/01/2009