SlideShare ist ein Scribd-Unternehmen logo
1 von 26
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

Weitere ähnliche Inhalte

Was ist angesagt?

PHP Technical Questions
PHP Technical QuestionsPHP Technical Questions
PHP Technical QuestionsPankaj Jha
 
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Scott Wlaschin
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented ProgrammingScott Wlaschin
 
A Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOA Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOJorge Vásquez
 
Handling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMHandling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMMin-Yih Hsu
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuerymanugoel2003
 
What's New in Spring Boot 2.5
What's New in Spring Boot 2.5What's New in Spring Boot 2.5
What's New in Spring Boot 2.5ikeyat
 
Testes pythonicos com pytest
Testes pythonicos com pytestTestes pythonicos com pytest
Testes pythonicos com pytestviniciusban
 
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingJohn De Goes
 
The Power of Composition
The Power of CompositionThe Power of Composition
The Power of CompositionScott Wlaschin
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScriptNascenia IT
 
Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)Scott Wlaschin
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit TestingMike Lively
 
Arrays in Java | Edureka
Arrays in Java | EdurekaArrays in Java | Edureka
Arrays in Java | EdurekaEdureka!
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 

Was ist angesagt? (20)

PHP Technical Questions
PHP Technical QuestionsPHP Technical Questions
PHP Technical Questions
 
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented Programming
 
A Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIOA Prelude of Purity: Scaling Back ZIO
A Prelude of Purity: Scaling Back ZIO
 
Handling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMHandling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVM
 
jQuery na Prática!
jQuery na Prática!jQuery na Prática!
jQuery na Prática!
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
What's New in Spring Boot 2.5
What's New in Spring Boot 2.5What's New in Spring Boot 2.5
What's New in Spring Boot 2.5
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Testes pythonicos com pytest
Testes pythonicos com pytestTestes pythonicos com pytest
Testes pythonicos com pytest
 
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
 
The Power of Composition
The Power of CompositionThe Power of Composition
The Power of Composition
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)Functional Programming Patterns (NDC London 2014)
Functional Programming Patterns (NDC London 2014)
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
 
Vector
VectorVector
Vector
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Arrays in Java | Edureka
Arrays in Java | EdurekaArrays in Java | Edureka
Arrays in Java | Edureka
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 

Andere mochten auch

Jena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for JavaJena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for JavaAleksander Pohl
 
An Introduction to the Jena API
An Introduction to the Jena APIAn Introduction to the Jena API
An Introduction to the Jena APICraig Trim
 
Database-to-Ontology Mapping Generation for Semantic Interoperability
Database-to-Ontology Mapping Generation for Semantic InteroperabilityDatabase-to-Ontology Mapping Generation for Semantic Interoperability
Database-to-Ontology Mapping Generation for Semantic InteroperabilityRaji Ghawi
 
Twinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query ToolTwinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query ToolLeigh Dodds
 
Understanding Mobile Phone Requirements
Understanding Mobile Phone RequirementsUnderstanding Mobile Phone Requirements
Understanding Mobile Phone Requirementschenjennan
 
Rdf And Rdf Schema For Ontology Specification
Rdf And Rdf Schema For Ontology SpecificationRdf And Rdf Schema For Ontology Specification
Rdf And Rdf Schema For Ontology Specificationchenjennan
 
Selecting with SPARQL
Selecting with SPARQLSelecting with SPARQL
Selecting with SPARQLostephens
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Semantic Technologies and Triplestores for Business Intelligence
Semantic Technologies and Triplestores for Business IntelligenceSemantic Technologies and Triplestores for Business Intelligence
Semantic Technologies and Triplestores for Business IntelligenceMarin Dimitrov
 
Triplestore and SPARQL
Triplestore and SPARQLTriplestore and SPARQL
Triplestore and SPARQLLino Valdivia
 
OWL-XML-Summer-School-09
OWL-XML-Summer-School-09OWL-XML-Summer-School-09
OWL-XML-Summer-School-09Duncan Hull
 
Diseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQLDiseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQLCarlos Casamayor
 
RuleML 2015: Ontology Reasoning using Rules in an eHealth Context
RuleML 2015: Ontology Reasoning using Rules in an eHealth ContextRuleML 2015: Ontology Reasoning using Rules in an eHealth Context
RuleML 2015: Ontology Reasoning using Rules in an eHealth ContextRuleML
 
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...RuleML
 
정부3.0과직접민주주의
정부3.0과직접민주주의정부3.0과직접민주주의
정부3.0과직접민주주의Min Hwa Lee
 
WebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPediaWebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPediaKatrien Verbert
 

Andere mochten auch (20)

Java and OWL
Java and OWLJava and OWL
Java and OWL
 
Jena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for JavaJena – A Semantic Web Framework for Java
Jena – A Semantic Web Framework for Java
 
An Introduction to the Jena API
An Introduction to the Jena APIAn Introduction to the Jena API
An Introduction to the Jena API
 
Jena Programming
Jena ProgrammingJena Programming
Jena Programming
 
Database-to-Ontology Mapping Generation for Semantic Interoperability
Database-to-Ontology Mapping Generation for Semantic InteroperabilityDatabase-to-Ontology Mapping Generation for Semantic Interoperability
Database-to-Ontology Mapping Generation for Semantic Interoperability
 
Twinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query ToolTwinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query Tool
 
Understanding Mobile Phone Requirements
Understanding Mobile Phone RequirementsUnderstanding Mobile Phone Requirements
Understanding Mobile Phone Requirements
 
Rdf And Rdf Schema For Ontology Specification
Rdf And Rdf Schema For Ontology SpecificationRdf And Rdf Schema For Ontology Specification
Rdf And Rdf Schema For Ontology Specification
 
Selecting with SPARQL
Selecting with SPARQLSelecting with SPARQL
Selecting with SPARQL
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Semantic Technologies and Triplestores for Business Intelligence
Semantic Technologies and Triplestores for Business IntelligenceSemantic Technologies and Triplestores for Business Intelligence
Semantic Technologies and Triplestores for Business Intelligence
 
Linked Data on the BBC
Linked Data on the BBCLinked Data on the BBC
Linked Data on the BBC
 
Triplestore and SPARQL
Triplestore and SPARQLTriplestore and SPARQL
Triplestore and SPARQL
 
OWL-XML-Summer-School-09
OWL-XML-Summer-School-09OWL-XML-Summer-School-09
OWL-XML-Summer-School-09
 
Diseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQLDiseño de Ontologías: Protégé - OWL: SPARQL
Diseño de Ontologías: Protégé - OWL: SPARQL
 
RuleML 2015: Ontology Reasoning using Rules in an eHealth Context
RuleML 2015: Ontology Reasoning using Rules in an eHealth ContextRuleML 2015: Ontology Reasoning using Rules in an eHealth Context
RuleML 2015: Ontology Reasoning using Rules in an eHealth Context
 
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...
Challenge@RuleML2015 Transformation and aggregation preprocessing for top-k r...
 
정부3.0과직접민주주의
정부3.0과직접민주주의정부3.0과직접민주주의
정부3.0과직접민주주의
 
Learning sparql 2012 12
Learning sparql 2012 12Learning sparql 2012 12
Learning sparql 2012 12
 
WebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPediaWebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPedia
 

Ähnlich wie Java and SPARQL

Selenium Webdriver with data driven framework
Selenium Webdriver with data driven frameworkSelenium Webdriver with data driven framework
Selenium Webdriver with data driven frameworkDavid Rajah Selvaraj
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습DoHyun Jung
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVMRafael Winterhalter
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownpartsBastian Feder
 
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnit
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnitinternational PHP2011_Bastian Feder_The most unknown Parts of PHPUnit
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnitsmueller_sandsmedia
 
Soundreader.classpathSoundreader.project Soundre.docx
Soundreader.classpathSoundreader.project  Soundre.docxSoundreader.classpathSoundreader.project  Soundre.docx
Soundreader.classpathSoundreader.project Soundre.docxwhitneyleman54422
 
Android Automated Testing
Android Automated TestingAndroid Automated Testing
Android Automated Testingroisagiv
 
Generating characterization tests for legacy code
Generating characterization tests for legacy codeGenerating characterization tests for legacy code
Generating characterization tests for legacy codeJonas Follesø
 
Exceptions and errors in Java
Exceptions and errors in JavaExceptions and errors in Java
Exceptions and errors in JavaManuela Grindei
 
Unsafe JAX-RS: Breaking REST API
Unsafe JAX-RS: Breaking REST APIUnsafe JAX-RS: Breaking REST API
Unsafe JAX-RS: Breaking REST APIMikhail Egorov
 
Core Php Component Presentation
Core Php Component PresentationCore Php Component Presentation
Core Php Component PresentationJohn Coonen
 
Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8PrinceGuru MS
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownpartsBastian Feder
 

Ähnlich wie Java and SPARQL (20)

Selenium Webdriver with data driven framework
Selenium Webdriver with data driven frameworkSelenium Webdriver with data driven framework
Selenium Webdriver with data driven framework
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습
 
Data shapes-test-suite
Data shapes-test-suiteData shapes-test-suite
Data shapes-test-suite
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVM
 
Introduzione al TDD
Introduzione al TDDIntroduzione al TDD
Introduzione al TDD
 
Good Practices On Test Automation
Good Practices On Test AutomationGood Practices On Test Automation
Good Practices On Test Automation
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
 
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnit
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnitinternational PHP2011_Bastian Feder_The most unknown Parts of PHPUnit
international PHP2011_Bastian Feder_The most unknown Parts of PHPUnit
 
Soundreader.classpathSoundreader.project Soundre.docx
Soundreader.classpathSoundreader.project  Soundre.docxSoundreader.classpathSoundreader.project  Soundre.docx
Soundreader.classpathSoundreader.project Soundre.docx
 
Junit_.pptx
Junit_.pptxJunit_.pptx
Junit_.pptx
 
Android Automated Testing
Android Automated TestingAndroid Automated Testing
Android Automated Testing
 
Generating characterization tests for legacy code
Generating characterization tests for legacy codeGenerating characterization tests for legacy code
Generating characterization tests for legacy code
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
 
Java 104
Java 104Java 104
Java 104
 
Exceptions and errors in Java
Exceptions and errors in JavaExceptions and errors in Java
Exceptions and errors in Java
 
SPARQLing cocktails
SPARQLing cocktailsSPARQLing cocktails
SPARQLing cocktails
 
Unsafe JAX-RS: Breaking REST API
Unsafe JAX-RS: Breaking REST APIUnsafe JAX-RS: Breaking REST API
Unsafe JAX-RS: Breaking REST API
 
Core Php Component Presentation
Core Php Component PresentationCore Php Component Presentation
Core Php Component Presentation
 
Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
 

Mehr von Raji Ghawi

Database Programming Techniques
Database Programming TechniquesDatabase Programming Techniques
Database Programming TechniquesRaji Ghawi
 
Java and XML Schema
Java and XML SchemaJava and XML Schema
Java and XML SchemaRaji Ghawi
 
Ontology-based Cooperation of Information Systems
Ontology-based Cooperation of Information SystemsOntology-based Cooperation of Information Systems
Ontology-based Cooperation of Information SystemsRaji Ghawi
 
OWSCIS: Ontology and Web Service based Cooperation of Information Sources
OWSCIS: Ontology and Web Service based Cooperation of Information SourcesOWSCIS: Ontology and Web Service based Cooperation of Information Sources
OWSCIS: Ontology and Web Service based Cooperation of Information SourcesRaji Ghawi
 
Coopération des Systèmes d'Informations basée sur les Ontologies
Coopération des Systèmes d'Informations basée sur les OntologiesCoopération des Systèmes d'Informations basée sur les Ontologies
Coopération des Systèmes d'Informations basée sur les OntologiesRaji Ghawi
 
Building Ontologies from Multiple Information Sources
Building Ontologies from Multiple Information SourcesBuilding Ontologies from Multiple Information Sources
Building Ontologies from Multiple Information SourcesRaji Ghawi
 

Mehr von Raji Ghawi (10)

Database Programming Techniques
Database Programming TechniquesDatabase Programming Techniques
Database Programming Techniques
 
Java and XML Schema
Java and XML SchemaJava and XML Schema
Java and XML Schema
 
Java and XML
Java and XMLJava and XML
Java and XML
 
SPARQL
SPARQLSPARQL
SPARQL
 
XQuery
XQueryXQuery
XQuery
 
XPath
XPathXPath
XPath
 
Ontology-based Cooperation of Information Systems
Ontology-based Cooperation of Information SystemsOntology-based Cooperation of Information Systems
Ontology-based Cooperation of Information Systems
 
OWSCIS: Ontology and Web Service based Cooperation of Information Sources
OWSCIS: Ontology and Web Service based Cooperation of Information SourcesOWSCIS: Ontology and Web Service based Cooperation of Information Sources
OWSCIS: Ontology and Web Service based Cooperation of Information Sources
 
Coopération des Systèmes d'Informations basée sur les Ontologies
Coopération des Systèmes d'Informations basée sur les OntologiesCoopération des Systèmes d'Informations basée sur les Ontologies
Coopération des Systèmes d'Informations basée sur les Ontologies
 
Building Ontologies from Multiple Information Sources
Building Ontologies from Multiple Information SourcesBuilding Ontologies from Multiple Information Sources
Building Ontologies from Multiple Information Sources
 

Kürzlich hochgeladen

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 

Kürzlich hochgeladen (20)

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 

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