SlideShare una empresa de Scribd logo
1 de 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

Más contenido relacionado

La actualidad más candente

Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentationguest11106b
 
Advance OOP concepts in Python
Advance OOP concepts in PythonAdvance OOP concepts in Python
Advance OOP concepts in PythonSujith Kumar
 
Defending against Java Deserialization Vulnerabilities
 Defending against Java Deserialization Vulnerabilities Defending against Java Deserialization Vulnerabilities
Defending against Java Deserialization VulnerabilitiesLuca Carettoni
 
Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016
Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016
Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016Christian Schneider
 
Functional Programming In JS
Functional Programming In JSFunctional Programming In JS
Functional Programming In JSDamian Łabas
 
Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++Guneesh Basundhra
 
Hibernate
HibernateHibernate
HibernateAjay K
 
Refactoring Functional Type Classes
Refactoring Functional Type ClassesRefactoring Functional Type Classes
Refactoring Functional Type ClassesJohn De Goes
 
The Terror-Free Guide to Introducing Functional Scala at Work
The Terror-Free Guide to Introducing Functional Scala at WorkThe Terror-Free Guide to Introducing Functional Scala at Work
The Terror-Free Guide to Introducing Functional Scala at WorkJorge Vásquez
 
Why functional programming and category theory strongly matters
Why functional programming and category theory strongly mattersWhy functional programming and category theory strongly matters
Why functional programming and category theory strongly mattersPiotr Paradziński
 
Resource Bundle
Resource BundleResource Bundle
Resource BundleSunil OS
 
Faza de testare (II)
Faza de testare (II)Faza de testare (II)
Faza de testare (II)Florin Leon
 
Exception Handling
Exception HandlingException Handling
Exception HandlingSunil OS
 

La actualidad más candente (20)

Hibernate in Action
Hibernate in ActionHibernate in Action
Hibernate in Action
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 
Java AWT
Java AWTJava AWT
Java AWT
 
Advance OOP concepts in Python
Advance OOP concepts in PythonAdvance OOP concepts in Python
Advance OOP concepts in Python
 
Defending against Java Deserialization Vulnerabilities
 Defending against Java Deserialization Vulnerabilities Defending against Java Deserialization Vulnerabilities
Defending against Java Deserialization Vulnerabilities
 
Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016
Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016
Serial Killer - Silently Pwning your Java Endpoints // OWASP BeNeLux Day 2016
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
Collada Reference Card 1.4
Collada Reference Card 1.4Collada Reference Card 1.4
Collada Reference Card 1.4
 
Collections framework in java
Collections framework in javaCollections framework in java
Collections framework in java
 
Functional Programming In JS
Functional Programming In JSFunctional Programming In JS
Functional Programming In JS
 
Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++
 
Hibernate
HibernateHibernate
Hibernate
 
Refactoring Functional Type Classes
Refactoring Functional Type ClassesRefactoring Functional Type Classes
Refactoring Functional Type Classes
 
The Terror-Free Guide to Introducing Functional Scala at Work
The Terror-Free Guide to Introducing Functional Scala at WorkThe Terror-Free Guide to Introducing Functional Scala at Work
The Terror-Free Guide to Introducing Functional Scala at Work
 
Why functional programming and category theory strongly matters
Why functional programming and category theory strongly mattersWhy functional programming and category theory strongly matters
Why functional programming and category theory strongly matters
 
Java Collections Framework
Java Collections FrameworkJava Collections Framework
Java Collections Framework
 
Resource Bundle
Resource BundleResource Bundle
Resource Bundle
 
Jena Programming
Jena ProgrammingJena Programming
Jena Programming
 
Faza de testare (II)
Faza de testare (II)Faza de testare (II)
Faza de testare (II)
 
Exception Handling
Exception HandlingException Handling
Exception Handling
 

Destacado

An Introduction to the Jena API
An Introduction to the Jena APIAn Introduction to the Jena API
An Introduction to the Jena APICraig Trim
 
070517 Jena
070517 Jena070517 Jena
070517 Jenayuhana
 
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
 
Web Sémantique — Linked Data
Web Sémantique — Linked DataWeb Sémantique — Linked Data
Web Sémantique — Linked DataKlee Group
 

Destacado (20)

An Introduction to the Jena API
An Introduction to the Jena APIAn Introduction to the Jena API
An Introduction to the Jena API
 
070517 Jena
070517 Jena070517 Jena
070517 Jena
 
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
 
Web Sémantique — Linked Data
Web Sémantique — Linked DataWeb Sémantique — Linked Data
Web Sémantique — Linked Data
 
SPARQL Tutorial
SPARQL TutorialSPARQL Tutorial
SPARQL Tutorial
 

Similar a 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
 

Similar a 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
 

Más de 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
 

Más de 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
 

Último

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
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
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
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
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
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
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
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
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
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
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
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
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 

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