SlideShare a Scribd company logo
Processing SPARQL Queries using Java
ARQ - A SPARQL Processor for Jena

Raji GHAWI
26/01/2009
Outline



Query Execution



Query Analysis

26/01/2009

2
1. Query Execution
Query Execution
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();
}

26/01/2009

4
Query Execution
Put the query as a string

PREFIX my:<http://www.something.com/myontology#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?stud ?dip
WHERE {
?stud
my:enrolledIn
}

?dip.

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" +
"} ";

26/01/2009

5
Query Execution
Execute the Query

encapsulates a parsed query

read a textual query from a String
Query query = QueryFactory.create(sparqlQuery);
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet results = qe.execSelect();

a single execution of a query

26/01/2009

6
Query Execution
Print Query Results

result set

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

textual format

standard output

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

26/01/2009

output

7
XML format
ResultSetFormatter.outputAsXML(System.out, results);

26/01/2009

<?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

8
Query Execution
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();
}
}
26/01/2009

9
Query Execution
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());
}
}

--------stud
dip
--------stud
dip
--------stud
dip
26/01/2009

output

solution --------http://www.something.com/myontology#Guillermo_Gomez
http://www.something.com/myontology#These
solution --------http://www.something.com/myontology#Elie_Raad
http://www.something.com/myontology#M2-BDIA
solution --------http://www.something.com/myontology#Raji_Ghawi
http://www.something.com/myontology#M2-BDIA

10
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);
}
}
--------stud
dip
--------stud
dip
--------stud
dip
26/01/2009

solution --------my:Guillermo_Gomez
my:These
solution --------my:Elie_Raad
my:M2-BDIA
solution --------my:Raji_Ghawi
my:M2-BDIA

output

11
2. Query Analysis
Query Analysis

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').
}

26/01/2009

13
Query Analysis
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" +
"} ";

26/01/2009

14
Query Analysis
Create the Query

Query query = QueryFactory.create(sparqlQuery);
System.out.println("---------- Query
System.out.println(query);

----------");

output

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

15
Query Analysis
Prefix Mapping

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);
}

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

26/01/2009

output

16
Query Analysis
Retrieve Result Variables

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);
}

------ Result Variables -----stud
modName

output

query.isQueryResultStar()
query.isDistinct()
26/01/2009

17
Query Analysis
Retrieve All Variables

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

------- All Variables -------stud
dip
mod
modName

26/01/2009

output

18
Query Analysis
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();
}
}

26/01/2009

19
Query Analysis
ElementOptional
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++){
// ....
}

26/01/2009

20
Query Analysis
ElementFilter
ElementFilter elf = (ElementFilter) elem;
Iterator iter = elf.varsMentioned().iterator();
// ....
Expr expr = elf.getConstraint().getExpr();
// ....

26/01/2009

21
Query Analysis
Expr

E_LogicalAnd
E_LogicalOr
E_Equals
E_NotEquals
E_LessThan
E_LessThanOrEqual
E_GreaterThan
E_GreaterThanOrEqual
E_LogicalNot

getLeft()
getRight()

getSubExpr()

E_Regex
NodeVar
if (expr instanceof E_LogicalAnd) {
getVarName()
E_LogicalAnd and = (E_LogicalAnd) expr;
NodeValueInteger
Expr left = and.getLeft();
NodeValueFloat
Expr right = and.getRight();
asString()
NodeValueDecimal
//
NodeValueString
} 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();
// .. ..
}
26/01/2009

22
Query Analysis
ElementTriplePattern
ElementTriplePattern etp = (ElementTriplePattern) elem;
Triple triple = etp.getTriple();
Node subject = triple.getSubject();
Node predicate = triple.getPredicate();
Node object = triple.getObject();






SELECT ?stud ?dip
WHERE {
?stud
my:enrolledIn
?dip
my:diplomaName
}

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

Subject
Variable
26/01/2009

URI

Predicate

?dip.
"BDIA".

Object
Literal
23
Subject

Predicate

Object

URI

Literal
Variable

26/01/2009

24
Query Analysis
OrderBy

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();
// ....
}
}
}

26/01/2009

25
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

26

More Related Content

PPTX
Java and OWL
PPT
Kelompok 9 #sertifikasi software &amp; database development
PDF
Đề thi Access mới nhất 2014 - Part 2
PDF
Jena – A Semantic Web Framework for Java
KEY
JSON-LD and MongoDB
ODP
CKAN 技術介紹 (基礎篇)
PDF
Acercádonos a Dart
Java and OWL
Kelompok 9 #sertifikasi software &amp; database development
Đề thi Access mới nhất 2014 - Part 2
Jena – A Semantic Web Framework for Java
JSON-LD and MongoDB
CKAN 技術介紹 (基礎篇)
Acercádonos a Dart

What's hot (8)

PDF
Kriptografi - Kriptanalisis
PPT
RDFS In A Nutshell V1
PDF
Jpa 잘 (하는 척) 하기
PDF
Bài giảng logic bậc nhất first order logic
PDF
Taller de MySQL (DDL)
PDF
Curso de Java (Parte 2)
PDF
Modul PBO Bab-10 - Event & Exception Handling
PDF
Route 路由控制
Kriptografi - Kriptanalisis
RDFS In A Nutshell V1
Jpa 잘 (하는 척) 하기
Bài giảng logic bậc nhất first order logic
Taller de MySQL (DDL)
Curso de Java (Parte 2)
Modul PBO Bab-10 - Event & Exception Handling
Route 路由控制
Ad

Viewers also liked (20)

PDF
An Introduction to the Jena API
PPTX
Jena Programming
PPT
070517 Jena
PPT
Database-to-Ontology Mapping Generation for Semantic Interoperability
PPT
Twinkle: A SPARQL Query Tool
PPT
Understanding Mobile Phone Requirements
PPT
Rdf And Rdf Schema For Ontology Specification
PDF
Selecting with SPARQL
PDF
Rest web services com Java
PDF
Semantic Technologies and Triplestores for Business Intelligence
PDF
Linked Data on the BBC
PPTX
Triplestore and SPARQL
PPT
OWL-XML-Summer-School-09
PDF
Diseño de Ontologías: Protégé - OWL: SPARQL
PDF
RuleML 2015: Ontology Reasoning using Rules in an eHealth Context
PDF
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...
PDF
정부3.0과직접민주주의
PDF
Learning sparql 2012 12
PDF
WebTech Tutorial Querying DBPedia
PPTX
Web Sémantique — Linked Data
An Introduction to the Jena API
Jena Programming
070517 Jena
Database-to-Ontology Mapping Generation for Semantic Interoperability
Twinkle: A SPARQL Query Tool
Understanding Mobile Phone Requirements
Rdf And Rdf Schema For Ontology Specification
Selecting with SPARQL
Rest web services com Java
Semantic Technologies and Triplestores for Business Intelligence
Linked Data on the BBC
Triplestore and SPARQL
OWL-XML-Summer-School-09
Diseño de Ontologías: Protégé - OWL: SPARQL
RuleML 2015: Ontology Reasoning using Rules in an eHealth Context
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...
정부3.0과직접민주주의
Learning sparql 2012 12
WebTech Tutorial Querying DBPedia
Web Sémantique — Linked Data
Ad

Similar to Java and SPARQL (20)

PPTX
Sparql
PPTX
SPARQL
PPT
Jena framework
PPTX
What;s Coming In SPARQL2?
PPTX
4 sw architectures and sparql
PPTX
SWT Lecture Session 4 - SW architectures and SPARQL
PPTX
SPARQL Cheat Sheet
PPTX
Strategies for Processing and Explaining Distributed Queries on Linked Data
PDF
CliqueSquare processing
PPT
Semantic Web
PPT
Semantic Web
ODP
Fast, Faster and Super-Fast Queries
PDF
final_copy_camera_ready_paper (7)
PPTX
High-performance model queries
PDF
Querydsl fin jug - june 2012
PPTX
SPARQL introduction and training (130+ slides with exercices)
PPTX
Semantic web meetup – sparql tutorial
PPT
Querying the Semantic Web with SPARQL
PDF
Querydsl overview 2014
PDF
Solr Query Parsing
Sparql
SPARQL
Jena framework
What;s Coming In SPARQL2?
4 sw architectures and sparql
SWT Lecture Session 4 - SW architectures and SPARQL
SPARQL Cheat Sheet
Strategies for Processing and Explaining Distributed Queries on Linked Data
CliqueSquare processing
Semantic Web
Semantic Web
Fast, Faster and Super-Fast Queries
final_copy_camera_ready_paper (7)
High-performance model queries
Querydsl fin jug - june 2012
SPARQL introduction and training (130+ slides with exercices)
Semantic web meetup – sparql tutorial
Querying the Semantic Web with SPARQL
Querydsl overview 2014
Solr Query Parsing

More from Raji Ghawi (9)

PPTX
Database Programming Techniques
PPTX
Java and XML Schema
PPTX
Java and XML
PPTX
XQuery
PPTX
XPath
PPT
Ontology-based Cooperation of Information Systems
PPT
OWSCIS: Ontology and Web Service based Cooperation of Information Sources
PPT
Coopération des Systèmes d'Informations basée sur les Ontologies
PPT
Building Ontologies from Multiple Information Sources
Database Programming Techniques
Java and XML Schema
Java and XML
XQuery
XPath
Ontology-based Cooperation of Information Systems
OWSCIS: Ontology and Web Service based Cooperation of Information Sources
Coopération des Systèmes d'Informations basée sur les Ontologies
Building Ontologies from Multiple Information Sources

Recently uploaded (20)

PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Approach and Philosophy of On baking technology
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Unlocking AI with Model Context Protocol (MCP)
Empathic Computing: Creating Shared Understanding
Programs and apps: productivity, graphics, security and other tools
Approach and Philosophy of On baking technology
MYSQL Presentation for SQL database connectivity
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Mobile App Security Testing_ A Comprehensive Guide.pdf
Spectroscopy.pptx food analysis technology
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Spectral efficient network and resource selection model in 5G networks
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
A comparative analysis of optical character recognition models for extracting...
NewMind AI Weekly Chronicles - August'25-Week II
Assigned Numbers - 2025 - Bluetooth® Document
Group 1 Presentation -Planning and Decision Making .pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?

Java and SPARQL

  • 1. Processing SPARQL Queries using Java ARQ - A SPARQL Processor for Jena Raji GHAWI 26/01/2009
  • 4. Query Execution 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(); } 26/01/2009 4
  • 5. Query Execution Put the query as a string PREFIX my:<http://www.something.com/myontology#> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?stud ?dip WHERE { ?stud my:enrolledIn } ?dip. 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" + "} "; 26/01/2009 5
  • 6. Query Execution Execute the Query encapsulates a parsed query read a textual query from a String Query query = QueryFactory.create(sparqlQuery); QueryExecution qe = QueryExecutionFactory.create(query, model); ResultSet results = qe.execSelect(); a single execution of a query 26/01/2009 6
  • 7. Query Execution Print Query Results result set ResultSetFormatter.out(System.out, results, query); textual format standard output ----------------------------------| stud | dip | =================================== | my:Simon_Thevenin | my:M2_BDIA | | my:Raji_Ghawi | my:Doctorat | | my:Kamel_Boulil | my:M2_BDIA | ----------------------------------- 26/01/2009 output 7
  • 8. XML format ResultSetFormatter.outputAsXML(System.out, results); 26/01/2009 <?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 8
  • 9. Query Execution 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(); } } 26/01/2009 9
  • 10. Query Execution 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()); } } --------stud dip --------stud dip --------stud dip 26/01/2009 output solution --------http://www.something.com/myontology#Guillermo_Gomez http://www.something.com/myontology#These solution --------http://www.something.com/myontology#Elie_Raad http://www.something.com/myontology#M2-BDIA solution --------http://www.something.com/myontology#Raji_Ghawi http://www.something.com/myontology#M2-BDIA 10
  • 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); } } --------stud dip --------stud dip --------stud dip 26/01/2009 solution --------my:Guillermo_Gomez my:These solution --------my:Elie_Raad my:M2-BDIA solution --------my:Raji_Ghawi my:M2-BDIA output 11
  • 13. Query Analysis 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'). } 26/01/2009 13
  • 14. Query Analysis 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" + "} "; 26/01/2009 14
  • 15. Query Analysis Create the Query Query query = QueryFactory.create(sparqlQuery); System.out.println("---------- Query System.out.println(query); ----------"); output ---------- Query ---------PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX my: <http://www.something.com/myontology#> SELECT ?stud ?modName WHERE { ?stud my:enrolledIn ?dip ; rdf:type my:Student ; my:enrolledIn ?dip . ?dip my:hasModule ?mod . ?mod my:moduleName ?modName . FILTER ( ?modName = "Databases" ) } 26/01/2009 15
  • 16. Query Analysis Prefix Mapping 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); } ------ Prefix Mapping -----rdf http://www.w3.org/1999/02/22-rdf-syntax-ns# my http://www.something.com/myontology# 26/01/2009 output 16
  • 17. Query Analysis Retrieve Result Variables 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); } ------ Result Variables -----stud modName output query.isQueryResultStar() query.isDistinct() 26/01/2009 17
  • 18. Query Analysis Retrieve All Variables System.out.println("------- All Variables --------"); Iterator varIter = query.getQueryBlock().varsMentioned().iterator(); while(varIter.hasNext()){ String var = varIter.next().toString(); System.out.println(var); } ------- All Variables -------stud dip mod modName 26/01/2009 output 18
  • 19. Query Analysis 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(); } } 26/01/2009 19
  • 20. Query Analysis ElementOptional 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++){ // .... } 26/01/2009 20
  • 21. Query Analysis ElementFilter ElementFilter elf = (ElementFilter) elem; Iterator iter = elf.varsMentioned().iterator(); // .... Expr expr = elf.getConstraint().getExpr(); // .... 26/01/2009 21
  • 22. Query Analysis Expr E_LogicalAnd E_LogicalOr E_Equals E_NotEquals E_LessThan E_LessThanOrEqual E_GreaterThan E_GreaterThanOrEqual E_LogicalNot getLeft() getRight() getSubExpr() E_Regex NodeVar if (expr instanceof E_LogicalAnd) { getVarName() E_LogicalAnd and = (E_LogicalAnd) expr; NodeValueInteger Expr left = and.getLeft(); NodeValueFloat Expr right = and.getRight(); asString() NodeValueDecimal // NodeValueString } 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(); // .. .. } 26/01/2009 22
  • 23. Query Analysis ElementTriplePattern ElementTriplePattern etp = (ElementTriplePattern) elem; Triple triple = etp.getTriple(); Node subject = triple.getSubject(); Node predicate = triple.getPredicate(); Node object = triple.getObject();    SELECT ?stud ?dip WHERE { ?stud my:enrolledIn ?dip my:diplomaName } boolean isURI() boolean isLiteral() boolean isVariable() Subject Variable 26/01/2009 URI Predicate ?dip. "BDIA". Object Literal 23
  • 25. Query Analysis OrderBy 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(); // .... } } } 26/01/2009 25
  • 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 26