sparql & jena

44
SPARQL & JENA

Upload: junior

Post on 08-Jan-2016

99 views

Category:

Documents


2 download

DESCRIPTION

SPARQL & JENA. Γενικά. JENA : Είναι ένα java framework για τη δημιουργία semantic web Εφαρμογών. Μπορεί να Χρησιμοποιηθει για να δουλέψουμε σε RDF/RDFS , OWL , για να κάνουμε storage , inference και για ερωτήσεις ( queries ) μέσω της SPARQL. Γενικά. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SPARQL & JENA

SPARQL & JENA

Page 2: SPARQL & JENA

Γενικά

• JENA : Είναι ένα java framework για τη δημιουργία semantic web Εφαρμογών.

• Μπορεί να Χρησιμοποιηθει για να δουλέψουμε σε RDF/RDFS , OWL , για να κάνουμε storage , inference και για ερωτήσεις ( queries ) μέσω της SPARQL.

Page 3: SPARQL & JENA

Γενικά

• SPARQL : Είναι μία query language που μας επιτρέπει να κάνουμε ερωτήσεις σε δεδομένα του semantic web. Είναι για το semantic web ότι και η SQL για τις σχεσιακές βάσεις δεδομένων.

Page 4: SPARQL & JENA

Part I: SPARQLBasics [5–9]

Query Structure [ 10 ]

Prefix [11–12]

Select [13–15]

From [16–19]

Where [20–27]

Modifiers [28–31]

Links [32]

Σύντομη περιγραφή της SPARQL

Περιγραφή της δομής ενός SPARQL query

Επεξήγηση των SPARQL query prefixes

Επεξήγηση των Select – Select Distinct

Επεξήγηση των FROM – FROM NAME – Default & Named Graphs

Επεξήγηση των WHERE – FILTERS – OPTIONAL - UNION

Επεξήγηση των LIMIT – OFFSET – ORDER BY

Περιεχόμενα

Χρήσιμοι σύνδεσμοι για τη SPARQL

Page 5: SPARQL & JENA

SPARQL – Basics

• H SPARQL κάνει ερωτήσεις σε τριπλέτες rdf. Ρωτάμε δηλαδή πάνω σε δεδομένα της μορφής subject – predicate - object χρησιμοποιώντας μεταβλητές όπου θέλουμε να πάρουμε απαντήσεις.

Πχ. select ?x where{ ex1:company ex1:hasEmployee ?x }

• Το “?” είναι το αναγνωριστικό των μεταβλητών ( Πχ ?x,?y, ?temp1 , ?_temp )

Page 6: SPARQL & JENA

SPARQL – Basics

• Ολες οι τριπλέτες σε ένα SPARQL query χωρίζοντε μεταξύ τους με “.” .

Πχ. select ?x where{

ex1:company ex1:hasEmployee ?x. ?x ex1:employeeName “JOHN”

}

Page 7: SPARQL & JENA

SPARQL – Basics

• Όταν 2 ή περισσότερες τριπλέτες μοιράζοντε το ίδιο subject τότε μπορούμε να το παραλείψουμε χρησιμοποιώντας “;”

Πχ. select ?x where{

?x rdf:type ex1:Company ; ex:companyName “C1” ;

ex:hasEmail “[email protected]” }

Page 8: SPARQL & JENA

SPARQL – Basics

• To keyword “a” της SPARQL χρησιμοποιείται για να δούμε τον τύπο ενός αντικειμένου (την κλάση του). Ουσιαστικά είναι μια συντομογραφία για το rdf:type.

Πχ. select ?x where{

?x a ex1:Company }

Page 9: SPARQL & JENA

SPARQL – Basics

• Σε μία τριπλέτα δεδομένων του Rdf δεν είναι απραίτητο να δηλώνεται το subject ή το object. Αντί αυτων έχουμε τα λεγόμενα BLANK NODES . Μπορούμε δηλαδή να έχουμε δεδομένα της μορφής subject – predicate ή predicate object

( πχ “ :blank node employeeName “george” )

Page 10: SPARQL & JENA

SPARQL – Query Structure

• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.

• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.

Page 11: SPARQL & JENA

SPARQL - Prefix

• Για να μην χρειάζεται να γράφουμε ολόκληρα τα URIs ,όταν γράφουμε ένα query , χρησιμοποιούμε Prefixes στην αρχή του query.

• Μερικά σημαντικά URIs και τα prefixes που χρησιμοποιούμε : PREFIX owl:<http://www.w3.org/2002/07/owl#> PREFIX xsd:<http://www.w3.org/2001/XMLSchema> PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX time:<http://www.w3.org/2006/time#>

Page 12: SPARQL & JENA

SPARQL - Prefix

SELECT ?x WHERE{<http://example.org/book#book1> <http://example.org/book#hasWriter> ?x}

Query με prefix :

PREFIX book: <http://example.org/book#> SELECT ?x WHERE{ book:book1 book:hasWriter ?x}

Query χωρίς prefix :

Page 13: SPARQL & JENA

SPARQL - Select

• Με το SELECT επιλέγουμε το υποσύνολο που θέλουμε από τα δεδομένα που επιστρέφει η απάντηση.

• Πχ :1) SELECT ?x WHERE { ?x ex1:hasEmployee ?y } Θα επιτρέψει μόνο τη χ μεταβλητή ( Πχ { Company1 } ,

{ Company2 } )2) SELECT ?x , ?y WHERE { ?x ex1:hasEmployee ?y } Θα επιστρέψει και τις δύο μεταβλητές χ,y ( Πχ { Company1,Employee1 } , { Company2,Employee2 }3) SELECT * WHERE { ?x ex1:hasEmployee ?y } Επιστρέφει πάντα όλες τις μεταβλητές!

Page 14: SPARQL & JENA

SPARQL - Select Distinct

• To distinct το χρησιμοποιούμε για να εξαλείψουμε την εμφάνιση του ίδιου αποτελέσματος περισσότερες από μία φορές στη λύση.

• Πχ. Εστω ότι τα δεδομένα μας είναι:

Company1 hasEmail “[email protected]”Company1 hasEmail “[email protected]”Company1 hasEmail “[email protected]

Page 15: SPARQL & JENA

SPARQL - Select Distinct

• Εάν ρωτήσουμε με το query :

Τα αποτελέσματα που θα πάρουμε θα είναι :

Ενώ αν ρωτήσουμε με :

Θα πάρουμε :

SELECT ?x where { ?x ex:hasEmail ?y }

{Company1} , {Company1} , {Company1}

SELECT DISTINCT ?x where { ?x ex:hasEmail ?y }

{Company1}

Page 16: SPARQL & JENA

SPARQL - From

• Στο FROM επιλέγουμε το dataSet πάνω στο οποίο θέλουμε να ρωτήσουμε.

• Όταν δεν καθορίζουμε datasets τότε ρωτάμε στο default dataSet (ένας γράφος).

• Η SPARQL μας δίνει τη δυνατότητα να ρωτήσουμε στο default dataset και σε ένα σύνολο από named graphs που καθορίζονται από το URI τους.

Page 17: SPARQL & JENA

SPARQL – Default Graph

• Καθορίζουμε το default graph :

PREFIX ex: <http://example.org/companies/ex1/> SELECT ?cname FROM <http://example.org/companies> WHERE { ?x ex:companyName ?cname }

Page 18: SPARQL & JENA

SPARQL – Named Graphs

• Χρησιμοποιώντας named graphs :

PREFIX ex: <http://example.org/companies/ex1/> SELECT ?src ?cname FROM <http://example.org/companies.rdf> FROM NAMED <http://example.org/ex1/> FROM NAMED <http://example.org/ex2/>

WHERE { GRAPH ?src { ?x ex:companyName ?cname } }

Page 19: SPARQL & JENA

SPARQL – Named Graphs

• Παράδειγμα 2 :

SELECT DISTINCT ?person WHERE {

?person ex:name ?name . GRAPH ?g1 { ?person a foaf:Person } GRAPH ?g2 { ?person a foaf:Person } GRAPH ?g3 { ?person a foaf:Person }

FILTER( ?g1 != ?g2 && ?g1 != ?g3 && ?g2 != ?g3) . }

Page 20: SPARQL & JENA

SPARQL - WHERE

• triplets• Filters• Optional path expressions • Unions • Το WHERE keyword είναι optional !

Select ?x where { ?x ?y ?z }

Page 21: SPARQL & JENA

SPARQL - Filters

• Tα filters χρησιμοποιούντε μέσα στο where clause για να εξαλείψουμε , χρησιμοποιώντας λογικές παραστάσεις, ανεπιθύμητα αποτελέσματα. Πχ. SELECT ?x , ?y

WHERE{ ?x ex:takesSalary ?y

FILTER( ?y > 1000 ) }

Page 22: SPARQL & JENA

SPARQL - Filters

• Logical: !, &&, || • Math: +, -, *, / • Comparison: =, !=, >, <, ... • SPARQL tests: isURI, isBlank, isLiteral,

bound • SPARQL accessors: str, lang, datatype • Other: sameTerm, langMatches, regex

Page 23: SPARQL & JENA

SPARQL - Filters

• EXAMPLES :

•FILTER ( langMatches( lang( ?employeeName ) , "EN"))

•FILTER ( ?date > “”01-02-2004”” ^^xsd:date && ?date < “0-03-2004””^^xsd:date )

•FILTER ( REGEX( ?name , “”opoulos” )

Page 24: SPARQL & JENA

SPARQL – Optional Path Expressions

• Χρησιμοποιείται όταν θέλουμε να ανζητήσουμε προαιρετικά κάποια δεδομένα.

ΠΑΡΑΔΕΙΓΜΑ :• ΄Εστω ότι θέλουμε να πάρουμε τα

δεδομένα όλων των εργαζομένων (employees) που δουλεύουν σε μια εταιρία ( Company1 )

Page 25: SPARQL & JENA

SPARQL – Optional Path Expressions

SELECT DISTINCT ?name , ?phone ?email WHERE{

?employee ex:worksfor ex:company1; ex:employeeName ?name; ex:employeePhone ?phone; ex:employeeEmail ?email }

Αυτός είναι ένας ΛΑΘΟΣ τρόπος να ζητάμε δεδομένα γιατί σε περίπτωση που κάποιοςΥπάλληλος δεν έχει κάποιο από τα στοιχεία που ζητάμε τότε δεν θα επιστραφεί στηναπάντηση! Πχ αν ένας υπάλληλος δεν έχει email τότε το αποτέλεσμα αυτό “κόβεται”.Εμείς όμως θέλουμε όλους τους υπαλλήλους της εταιρίας. Η λύση είναι η χρήση του optional.

Page 26: SPARQL & JENA

SPARQL – Optional Path Expressions

SELECT DISTINCT ?name , ?phone ?email WHERE{

?employee ex:worksfor ex:company1; ex:employeeName ?name. optional { ?employee ex:employeePhone ?phone } optional { ?employee ex:employeeEmail ?email } }

Αυτός είναι o ΣΩΣΤΟΣ τρόπος.

- Το Optional Μπορεί να χρησιμοποιηθεί και σε Nested queries:Πχ optional { optional { } } κτλ κτλ.

Page 27: SPARQL & JENA

SPARQL - Union

• Το UNION το χρησιμοποιούμε για να πάρουμε την ένωση από κάποια set αποτελεσμάτων.

Πχ. PREFIX ex1: <http://example.org/company1/employees> PREFIX ex2: <http://example.org/company2/employees> SELECT ?name WHERE { { ?employee ex1:employeeName ?name } UNION { ?employee ex2:employeeName ?name } }

Page 28: SPARQL & JENA

SPARQL – MODIFIERS

• Χρησιμοποιούμε MODIFIERS για να καθορίσουμε/επιλέξουμε το υποσύνολο των αποτελεσμάτων που θέλουμε στην απάντηση.

• Βασικοί MODIFIERS :• LIMIT – ORDER BY – OFFSET

Page 29: SPARQL & JENA

SPARQL - Limit

• Το LIMIT το χρησιμοποιούμε για να περιορίσουμε τον αριθμό των αποτελεσμάτων που θα επιστραφούν.

Πχ. SELECT DISTINCT ?x WHERE{

?x a ex1:Company } LIMIT 50

Page 30: SPARQL & JENA

SPARQL - Order By

• To ORDER BY χρησιμοποιείται για να ταξινομήσουμε τα αποτελέσματα (με βάση μια μεταβλητή ) με αύξουσα (ASC) ή φθίνουσα(DESC) σειρά.

Πχ. SELECT DISTINCT ?x , ?y WHERE{

?x ex:takesSalary ?y } ORDER BY DESC ( ?y ) LIMIT 50

Page 31: SPARQL & JENA

SPARQL - Offset

• To OFFSET χρησιμοποιείται σε συνδιασμό με τα LIMIT και ORDER BY για να επιλέξουμε το υποσύνολο των αποτελεσμάτων που θέλουμε.

Πχ. SELECT DISTINCT ?x , ?y WHERE{

?x ex:takesSalary ?y } ORDER BY DESC ( ?y ) LIMIT 50 OFFSET 20

Page 32: SPARQL & JENA

SPARQL – Usefull Links

• SPARQL W3C : http://www.w3.org/TR/rdf-sparql-query/

• SPARQL TUTORIALS : http://www.cambridgesemantics.com/2008/09/sparql-by-example/

• http://linkeddatatools.com/querying-semantic-data

Page 33: SPARQL & JENA

Part IΙ: JENABasics [34]

Loading an Ontology [35-36]

Reading & writing Ontology Data [37–40]

Inference [41]

Executing Queries [42]

Links [43]

Σύντομη περιγραφή των δυνατοτήτων της JENA

Πως φορτώνουμε μια οντολογία ( με reasoner ή χωρίς )

Πως διαβάζουμε και γράφουμε δεδομένα σε μια Οντολογία( classes , properties , statements κτλ )

Πως καλούμε ένα reasoner ( Παράδειγμα Pellet )

Πως εκτελούμε ένα SPARQL query μέσω JENA

Περιεχόμενα

Χρήσιμοι σύνδεσμοι για τη JENA

Page 34: SPARQL & JENA

JENA - Basics

To framework της JENA περιλαμβάνει :

• Ένα RDF API• Eνα OWL API• Δυνατότητα αποθήκευσης τόσο στη μνήμη

όσο και στο δίσκο.

• Δυνατότητες Reasoning

• SPARQL query engine

Page 35: SPARQL & JENA

JENA – Loading an Ontology

public OntologyLoader(String fileName) { // ontology that will be used String ontologyUrl;

setOntologyUrl("file:///" + fileName);// the third slash is needed for windows xp

// create an empty ontology modelmodel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL); // read the file model.read( ont );

}

Simple ontology Loader :

Page 36: SPARQL & JENA

JENA – Loading an Ontology

public OntologyLoader(String fileName) { private String uri = ""; private String ontologyUrl; private String fileName; private OntModel ontModel; private OntDocumentManager dm;

setOntologyUrl("file:///" + fileName);// the third slash is needed for windows xp

OntModel base = ModelFactory.createOntologyModel(); //empty model dm = base.getDocumentManager();// used in this class dm.addAltEntry(uri, ontologyUrl);// used in this class base.read(uri); ontModel = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC,base); }

Loading an Ontology With Pellet Reasoner.

Page 37: SPARQL & JENA

JENA – Reading & Writing Data

public void readClasses(){

ExtendedIterator<OntClass> iter = ontoModel.listClasses(); while(iter.hasNext()){ OntClass ontClass = iter.next(); System.out.println("CLASS : "+ontClass.getLocalName()); } }

Reading the Classes from the Model :

OntClass newClass = model.getOntClass( classUrl );Iterator instances = newClass.listInstances();

Reading the Instances of a Class from the Model :

Page 38: SPARQL & JENA

JENA – Reading & Writing Data

public void readProperties(){

ExtendedIterator<DatatypeProperty> iter = ontoModel.listDatatypeProperties(); ExtendedIterator<ObjectProperty> iter2 = ontoModel.listObjectProperties();

while(iter.hasNext()){ DatatypeProperty dataProperty = iter.next(); System.out.println( dataProperty.getLocalName() ); }while(iter.hasNext()){ ObjectProperty objProperty = iter.next(); System.out.println( objectProperty.getLocalName() ); }}

Reading the Datatype & Object Properties from the Model :

Page 39: SPARQL & JENA

JENA – Reading & Writing Data

Public void readAllStatements(OntModel model){ StmtIterator iter; Statement stmt; iter = model.listStatements(); while (iter.hasNext()) { stmt = iter.next(); // Using the statement to read SUBJECT-PREDICATE-OBJECTProperty predicate; Resource subject; RDFNode obj; subject = stmt.getSubject(); System.out.println("Subject = " + subject.getURI()); predicate = stmt.getPredicate(); System.out.println("Predicate = "+predicate.getLocalName()); obj = stmt.getObject(); System.out.println("Object = " + obj.toString()); }}

Reading Statements :

Page 40: SPARQL & JENA

JENA – Reading & Writing Data

. . . Model model; String namespace = "http://www.example.org"; . . .

Resource res = model.createResource("http://www.example.com/companies#Company1") Property property1 = model.createProperty(namespace, “numOfEmployees");res.addProperty(property1 , 25); Property property2 = model.createProperty(namespace, “Location")res.addProperty( property2 , “Athens");

Writing : Adding Statements to the model.

Page 41: SPARQL & JENA

JENA – Inference

// Creating the model using PelletontModel = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC,base);

// Creating a new Pellet reasoner PelletInfGraph reasoner; reasoner = (PelletInfGraph) ontModel.getGraph();

// Calling the reasoner whenever needed Reasoner.clasify(); Reasoner.realize();

How to use the Pellet reasoner : [ Using the Ontology Loader from slide 37 ]

Page 42: SPARQL & JENA

JENA – Executing a Query

// Create a new queryString queryString =“PREFIX ex1: <http://example.org/ex1/> ” + “SELECT ?x ” +

“WHERE {” +“ ?x ex1:employeeName \”John\” }”;

Query query = QueryFactory.create(queryString);

// Execute the query and obtain results. model is an OntModel.QueryExecution qe = QueryExecutionFactory.create(query, model);ResultSet results = qe.execSelect();

// Output query resultsResultSetFormatter.out(System.out, results, query);

// Important – free up resources used running the queryqe.close();

Page 43: SPARQL & JENA

JENA – Links

The JENA Framework :http://jena.sourceforge.net/

TUTORIAL για αρχάριους. Πως περνάμε τις βιβλιοθήκες της JENA στο Eclipse :http://www.iandickinson.me.uk/articles/jena-eclipse-helloworld/

IBM JENA Tutorialhttp://www.ibm.com/developerworks/xml/library/j-jena/

Page 44: SPARQL & JENA