WebTech Tutorial Querying DBPedia
-
Upload
katrien-verbert -
Category
Education
-
view
2.993 -
download
4
description
Transcript of WebTech Tutorial Querying DBPedia
Tutorial: Querying DBpedia Web Technology 2ID60 14 November 2013
Dr. Katrien Verbert Dr. ir. Natasha Stash Dr. George Fletcher
Overview
• Introduction to Jena • Setting up the environment • Querying DBpedia • Other APIs • PHP example
Jena
• Jena is a Java framework for the creation of applications for the Semantic Web
• Provides interfaces and classes for the creation and manipulation of RDF repositories
RDF concepts
Capabilities of Jena
• RDF API • Reading and writing in RDF/XML, N-Triples • In-memory and persistent storage • SPARQL query engine
RDF concepts
• The Jena RDF API contains classes and interfaces for every important aspect of the RDF specification
• They can be used in order to construct RDF graphs from scratch, or edit existent graphs
• These classes/interfaces reside in the com.hp.hpl.jena.rdf.model package
• In Jena, the Model interface is used to represent RDF graphs
• Through Model, statements can be obtained/ created/ removed etc
RDF concepts
// Create an empty model Model model = ModelFactory.createDefaultModel(); String ns = new String("http://www.example.com/example#"); // Create two Resources Resource john = model.createResource(ns + "John"); Resource jane = model.createResource(ns + "Jane"); // Create the 'hasBrother' Property declaration Property hasBrother = model.createProperty(ns, "hasBrother"); // Associate jane to john through 'hasBrother' jane.addProperty(hasBrother, john); // Create the 'hasSister' Property declaration Property hasSister = model.createProperty(ns, "hasSister"); // Associate john and jane through 'hasSister' with a Statement Statement sisterStmt = model.createStatement(john, hasSister, jane); model.add(sisterStmt);
SPARQL query processing
• Jena uses the ARQ engine for the processing of SPARQL queries • The ARQ API classes are found in com.hp.hpl.jena.query
• Basic classes in ARQ: • Query: Represents a single SPARQL query. • Dataset: The knowledge base on which queries are executed
(Equivalent to RDF Models) • QueryFactory: Can be used to generate Query objects from
SPARQL strings • QueryExecution: Provides methods for the execution of queries • ResultSet: Contains the results obtained from an executed query • QuerySolution: Represents a row of query results.
• If there are many answers to a query, a ResultSet is returned after the query is executed. The ResultSet contains many QuerySolutions
SPARQL query processing
// Prepare query string String queryString = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + "PREFIX : <http://www.example.com/onto1#>\n" + "SELECT ?married ?spouse WHERE {" + "?married rdf:type :MarriedPerson.\n" + "?married :hasSpouse ?spouse." + "}"; // Use the ontology model to create a Dataset object // Note: If no reasoner has been attached to the model, no results // will be returned (MarriedPerson has no asserted instances) Dataset dataset = DatasetFactory.create(ontModel); // Parse query string and create Query object Query q = QueryFactory.create(queryString); // Execute query and obtain result set QueryExecution qexec = QueryExecutionFactory.create(q, dataset); ResultSet resultSet = qexec.execSelect();
SPARQL query processing
// Print results while(resultSet.hasNext()) {
// Each row contains two fields: ‘married’ and ‘spouse’, // as defined in the query string QuerySolution row = (QuerySolution)resultSet.next(); RDFNode nextMarried = row.get("married"); System.out.print(nextMarried.toString()); System.out.print(" is married to "); RDFNode nextSpouse = row.get("spouse"); System.out.println(nextSpouse.toString());
}
ARQ Application API
http://jena.apache.org/documentation/query/app_api.html
Overview
• Introduction to Jena • Setting up the environment • Querying Dbpedia • Other APIs
Setting up the environment
Download Netbeans Java EE version: https://netbeans.org/downloads/
Downloading Jena
http://jena.apache.org
Download binary distribution
http://www.apache.org/dist/jena/
Getting started with Jena in Netbeans
Create a new Java project
Create a Java project
Add Jena libraries to class path
Add Jena libraries to class path
Add all jars in lib folder of Jena distribution
Add all jars in lib folder
Using Jena with Eclipse
• http://www.iandickinson.me.uk/articles/jena-eclipse-helloworld/
Tutorials
http://jena.apache.org/getting_started/
Overview
• Introduction to Jena • Setting up the environment • Querying Dbpedia • Other APIs
QueryFactory
• has various create() methods to read a textual query • these create() methods
• return a Query object, • which encapsulates a parsed query.
QueryExecutionFactory
Create a QueryExecution that will access a SPARQL service over HTTP QueryExecutionFactory.sparqlService(String service, Query query)
Querying Dbpedia
SPARQL endpoint http://dbpedia.org/sparql
Example
String service = "http://dbpedia.org/sparql"; String query = "ASK { }"; QueryExecution qe = QueryExecutionFactory.sparqlService(service,
query);
Test connection import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.sparql.engine.http.QueryExceptionHTTP;
public class QueryTest {
public static void main(String[] args) {
String service = "http://dbpedia.org/sparql";
String query = "ASK { }";
QueryExecution qe = QueryExecutionFactory.sparqlService(service, query);
try {
if (qe.execAsk()) {
System.out.println(service + " is UP");
} // end if
} catch (QueryExceptionHTTP e) {
System.out.println(service + " is DOWN");
} finally {
qe.close();
}
}
}
Example queries
http://wiki.dbpedia.org/OnlineAccess#h28-5
03/28/11
Example query: people who were born in Eindhoven
String service="http://dbpedia.org/sparql"; String query="PREFIX dbo:<http://dbpedia.org/ontology/>" + "PREFIX : <http://dbpedia.org/resource/>" + "select ?person where {?person dbo:birthPlace :Eindhoven.}"; QueryExecution qe=QueryExecutionFactory.sparqlService(service, query); ResultSet rs=qe.execSelect(); while (rs.hasNext()){ QuerySolution s=rs.nextSolution(); System.out.println(s.getResource("?person").toString()); }
Processing results
QuerySolution soln = results.nextSolution() ; RDFNode x = soln.get("varName") ; // Get a result variable by name. Resource r = soln.getResource("VarR") ; // Get a result variable - must be a resource Literal l = soln.getLiteral("VarL") ; // Get a result variable - must be a literal
03/28/11
Example
String service="http://dbpedia.org/sparql"; String query="PREFIX dbo:<http://dbpedia.org/ontology/>" + "PREFIX : <http://dbpedia.org/resource/>" + "PREFIX foaf:<http://xmlns.com/foaf/0.1/>" + "select ?person ?name where {?person dbo:birthPlace :Eindhoven." + "?person foaf:name ?name}"; QueryExecution qe=QueryExecutionFactory.sparqlService(service, query); ResultSet rs=qe.execSelect(); while (rs.hasNext()){ QuerySolution s=rs.nextSolution(); Resource r=s.getResource("?person"); Literal name=s.getLiteral("?name"); System.out.println(s.getResource("?person").toString()); System.out.println(s.getLiteral("?name").getString()); }
Example query: people who were born in Berlin before 1900
PREFIX dbo: http://dbpedia.org/ontology/ PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX : http://dbpedia.org/resource/ SELECT ?name ?birth ?death ?person WHERE { ?person dbo:birthPlace :Berlin . ?person dbo:birthDate ?birth . ?person foaf:name ?name . ?person dbo:deathDate ?death . FILTER (?birth < "1900-01-01"^^xsd:date) . } ORDER BY ?name
Other APIs
PHP: RAP – RDF h+p://www.seasr.org/wp-‐content/plugins/meandre/rdfapi-‐php/doc/
Python: RDFLib h+p://www.rdflib.net/
C: Redland h+p://librdf.org/
Installing PHP
Mac OS: https://netbeans.org/kb/docs/php/configure-php-environment-mac-os.html
Windows:
https://netbeans.org/kb/docs/php/configure-php-environment-windows.html
Create new PHP project
Install RAP
• Download at: http://wifo5-03.informatik.uni-mannheim.de/bizer/rdfapi/
• Unpack the zip file. • Include RDF API into your scripts:
• define("RDFAPI_INCLUDE_DIR", "C:/Apache/htdocs/rdf_api/api/");
• include(RDFAPI_INCLUDE_DIR . "RDFAPI.php"); • Change the constant RDFAPI_INCLUDE_DIR to the
directory in which you have unpacked the zip file.
PHP RAP: example
Sources
• Konstantinos Tzonas. The Jena RDF Framework.