1 / 44

SPARQL & JENA

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

junior
Télécharger la présentation

SPARQL & JENA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SPARQL& JENA

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

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

  4. Περιεχόμενα Part I:SPARQL Basics [5–9] Query Structure [ 10 ] Prefix [11–12] Select [13–15] From [16–19] Where [20–27] Modifiers [28–31] Links [32] Σύντομη περιγραφή της SPARQL Περιγραφή της δομής ενός SPARQLquery Επεξήγηση των SPARQLqueryprefixes Επεξήγηση των Select – Select Distinct Επεξήγηση των FROM – FROM NAME – Default & Named Graphs Επεξήγηση των WHERE – FILTERS – OPTIONAL - UNION Επεξήγηση των LIMIT – OFFSET – ORDER BY Χρήσιμοι σύνδεσμοι για τη SPARQL

  5. SPARQL – Basics • H SPARQL κάνει ερωτήσεις σε τριπλέτες rdf. Ρωτάμε δηλαδή πάνω σε δεδομένα της μορφής subject – predicate - objectχρησιμοποιώντας μεταβλητές όπου θέλουμε να πάρουμε απαντήσεις. Πχ.select ?x where{ ex1:company ex1:hasEmployee ?x } • Το “?” είναι το αναγνωριστικό των μεταβλητών ( Πχ ?x,?y, ?temp1 , ?_temp)

  6. SPARQL – Basics • Ολες οι τριπλέτες σε ένα SPARQL query χωρίζοντε μεταξύ τους με “.” . Πχ.select ?x where{ ex1:company ex1:hasEmployee ?x. ?x ex1:employeeName “JOHN” }

  7. SPARQL – Basics • Όταν 2 ή περισσότερες τριπλέτες μοιράζοντε το ίδιο subject τότε μπορούμε να το παραλείψουμε χρησιμοποιώντας “;” Πχ.select ?x where{ ?xrdf:type ex1:Company ; ex:companyName “C1” ; ex:hasEmail “C1@yahoo.gr” }

  8. SPARQL – Basics • To keyword “a”της SPARQL χρησιμοποιείται για να δούμε τον τύπο ενός αντικειμένου (την κλάση του). Ουσιαστικά είναι μια συντομογραφία για το rdf:type. Πχ.select ?x where{ ?xa ex1:Company }

  9. SPARQL – Basics • Σε μία τριπλέτα δεδομένων του Rdf δεν είναι απραίτητο να δηλώνεται το subject ή το object. Αντί αυτων έχουμε τα λεγόμενα BLANK NODES . Μπορούμεδηλαδή να έχουμε δεδομένα της μορφής subject – predicate ή predicate object ( πχ “:blank node employeeName “george” )

  10. 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.

  11. SPARQL - Prefix 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#> Για να μην χρειάζεται να γράφουμε ολόκληρα τα URIs ,όταν γράφουμε ένα query, χρησιμοποιούμε Prefixes στην αρχή του query. Μερικά σημαντικά URIs και τα prefixes που χρησιμοποιούμε :

  12. SPARQL - Prefix Query χωρίς 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 }

  13. SPARQL - 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 } Επιστρέφει πάντα όλες τις μεταβλητές! Με το SELECT επιλέγουμε το υποσύνολο που θέλουμε από τα δεδομένα που επιστρέφει η απάντηση. Πχ :

  14. SPARQL - Select Distinct Company1 hasEmail “c1@yahoo.com” Company1 hasEmail “Company1@yahoo.com” Company1 hasEmail “Comp1@yahoo.com” To distinct το χρησιμοποιούμε για να εξαλείψουμε την εμφάνιση του ίδιου αποτελέσματος περισσότερες από μία φορές στη λύση. Πχ. Εστω ότι τα δεδομένα μας είναι:

  15. SPARQL - Select Distinct SELECT ?x where { ?x ex:hasEmail ?y } {Company1} , {Company1} , {Company1} SELECT DISTINCT ?x where { ?x ex:hasEmail ?y } {Company1} Εάν ρωτήσουμε με το query : Τα αποτελέσματα που θα πάρουμε θα είναι : Ενώ αν ρωτήσουμε με : Θα πάρουμε :

  16. SPARQL - From Στο FROMεπιλέγουμε το dataSetπάνω στο οποίο θέλουμε να ρωτήσουμε. Όταν δεν καθορίζουμε datasets τότε ρωτάμε στο default dataSet (ένας γράφος). Η SPARQL μας δίνει τη δυνατότητα να ρωτήσουμε στο default datasetκαι σε ένα σύνολο από named graphsπου καθορίζονται από το URIτους.

  17. SPARQL – Default Graph PREFIX ex: <http://example.org/companies/ex1/> SELECT ?cname FROM <http://example.org/companies> WHERE { ?x ex:companyName ?cname } Καθορίζουμε το default graph :

  18. SPARQL – 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 } } Χρησιμοποιώντας named graphs :

  19. SPARQL – Named Graphs 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) . } Παράδειγμα 2 :

  20. SPARQL - WHERE Select ?x where { ?x ?y ?z } triplets Filters Optional path expressions Unions Το WHERE keyword είναι optional !

  21. SPARQL - Filters Πχ.SELECT ?x , ?y WHERE{ ?xex:takesSalary?y FILTER( ?y > 1000 ) } Tα filters χρησιμοποιούντε μέσα στο where clause για να εξαλείψουμε , χρησιμοποιώντας λογικές παραστάσεις, ανεπιθύμητα αποτελέσματα.

  22. SPARQL - Filters Logical: !, &&, || Math: +, -, *, / Comparison: =, !=, >, <, ... SPARQL tests: isURI, isBlank, isLiteral, bound SPARQL accessors: str, lang, datatype Other: sameTerm, langMatches, regex

  23. SPARQL - Filters • FILTER ( langMatches( lang( ?employeeName ) , "EN")) • FILTER ( ?date > “”01-02-2004”” ^^xsd:date&& ?date < “0-03-2004””^^xsd:date ) • FILTER ( REGEX( ?name , “”opoulos” ) EXAMPLES :

  24. SPARQL – Optional Path Expressions Χρησιμοποιείται όταν θέλουμε να ανζητήσουμε προαιρετικά κάποια δεδομένα. ΠΑΡΑΔΕΙΓΜΑ : ΄Εστω ότι θέλουμε να πάρουμε τα δεδομένα όλων τωνεργαζομένων (employees) που δουλεύουν σε μια εταιρία ( Company1 )

  25. SPARQL – Optional Path Expressions SELECT DISTINCT ?name , ?phone ?email WHERE{ ?employeeex:worksforex:company1; ex:employeeName ?name; ex:employeePhone ?phone; ex:employeeEmail ?email } Αυτός είναι ένας ΛΑΘΟΣ τρόπος να ζητάμε δεδομένα γιατί σε περίπτωση που κάποιος Υπάλληλος δεν έχει κάποιο από τα στοιχεία που ζητάμε τότε δεν θα επιστραφεί στην απάντηση! Πχ αν ένας υπάλληλος δεν έχει email τότε το αποτέλεσμα αυτό “κόβεται”. Εμείς όμως θέλουμε όλους τους υπαλλήλους της εταιρίας. Η λύση είναι η χρήση του optional.

  26. SPARQL – Optional Path Expressions SELECT DISTINCT ?name , ?phone ?email WHERE{ ?employeeex:worksforex:company1; ex:employeeName ?name. optional {?employee ex:employeePhone ?phone } optional {?employee ex:employeeEmail ?email } } Αυτός είναι oΣΩΣΤΟΣ τρόπος. - Το Optional Μπορεί να χρησιμοποιηθεί και σε Nested queries: Πχ optional { optional { } } κτλ κτλ.

  27. SPARQL - Union Πχ.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 } } Το UNIONτο χρησιμοποιούμε για να πάρουμε την ένωση από κάποια set αποτελεσμάτων.

  28. SPARQL – MODIFIERS Χρησιμοποιούμε MODIFIERS για να καθορίσουμε/επιλέξουμε το υποσύνολο των αποτελεσμάτων που θέλουμε στην απάντηση. Βασικοί MODIFIERS : LIMIT – ORDER BY – OFFSET

  29. SPARQL - Limit Πχ.SELECT DISTINCT ?x WHERE{ ?xaex1:Company } LIMIT 50 Το LIMITτο χρησιμοποιούμε για να περιορίσουμε τον αριθμό των αποτελεσμάτων που θα επιστραφούν.

  30. SPARQL - OrderBy Πχ.SELECT DISTINCT ?x , ?y WHERE{ ?xex:takesSalary?y } ORDER BY DESC ( ?y ) LIMIT 50 To ORDER BY χρησιμοποιείται για να ταξινομήσουμε τα αποτελέσματα (με βάση μια μεταβλητή ) με αύξουσα (ASC) ή φθίνουσα(DESC) σειρά.

  31. SPARQL - Offset • To OFFSET χρησιμοποιείται σε συνδιασμό με τα LIMIT και ORDER BY για να επιλέξουμε το υποσύνολο των αποτελεσμάτων που θέλουμε. Πχ.SELECT DISTINCT ?x , ?y WHERE{ ?xex:takesSalary?y } ORDER BY DESC( ?y ) LIMIT 50 OFFSET 20

  32. 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

  33. Part IΙ:JENA Περιεχόμενα Basics [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

  34. JENA - Basics To framework της JENA περιλαμβάνει : Ένα RDF API Eνα OWL API Δυνατότητα αποθήκευσης τόσο στη μνήμη όσο και στο δίσκο. Δυνατότητες Reasoning SPARQL query engine

  35. JENA – Loading an Ontology Simple ontology Loader : 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 model model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL); // read the file model.read( ont ); }

  36. JENA – Loading an Ontology Loading an Ontology With Pellet Reasoner. 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); }

  37. JENA – Reading & Writing Data Reading the Classes from the Model : publicvoid readClasses(){ ExtendedIterator<OntClass> iter = ontoModel.listClasses(); while(iter.hasNext()){ OntClass ontClass = iter.next(); System.out.println("CLASS : "+ontClass.getLocalName()); } } Reading the Instances of a Class from the Model : OntClass newClass = model.getOntClass( classUrl ); Iterator instances = newClass.listInstances();

  38. JENA – Reading & Writing Data Reading the Datatype & Object Properties from the Model : publicvoid 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() ); } }

  39. JENA – Reading & Writing Data Reading Statements : 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-OBJECT Property 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()); } }

  40. JENA – Reading & Writing Data Writing : Adding Statements to the model. . . . 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");

  41. JENA – Inference How to use the Pellet reasoner : [ Using the Ontology Loader from slide 37 ] // Creating the model using Pellet ontModel = 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();

  42. 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();

  43. JENA – Links The JENA Framework : http://jena.sourceforge.net/ TUTORIAL για αρχάριους. Πως περνάμε τις βιβλιοθήκες της JENA στο Eclipse: http://www.iandickinson.me.uk/articles/jena-eclipse-helloworld/ IBM JENA Tutorial http://www.ibm.com/developerworks/xml/library/j-jena/

More Related