WebTech Tutorial Querying DBPedia
Upcoming SlideShare
Loading in...5
×
 

WebTech Tutorial Querying DBPedia

on

  • 2,265 views

 

Statistics

Views

Total Views
2,265
Slideshare-icon Views on SlideShare
2,264
Embed Views
1

Actions

Likes
5
Downloads
64
Comments
0

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    WebTech Tutorial Querying DBPedia WebTech Tutorial Querying DBPedia Presentation Transcript

    • 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-eclipsehelloworld/
    • 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
    • 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()); } 03/28/11
    • 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
    • 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()); } 03/28/11
    • 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-phpenvironment-mac-os.html Windows: https://netbeans.org/kb/docs/php/configure-phpenvironment-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
    • k.verbert@tue.nl n.v.stash@tue.nl g.l.fletcher@tue.nl 03/28/11
    • Sources •  Konstantinos Tzonas. The Jena RDF Framework.