Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεXena Traino Τροποποιήθηκε πριν 9 χρόνια
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 Περιγραφή της δομής ενός SPARQL query Επεξήγηση των SPARQL query prefixes Επεξήγηση των 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{ ?x rdf:type ex1:Company ; ex:companyName “C1” ; ex:hasEmail “C1@yahoo.gr” }
8
SPARQL – Basics To keyword “a” της SPARQL χρησιμοποιείται για να δούμε τον τύπο ενός αντικειμένου (την κλάση του). Ουσιαστικά είναι μια συντομογραφία για το rdf:type. Πχ. select ?x where{ ?x a 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.
11
SPARQL - Prefix Για να μην χρειάζεται να γράφουμε ολόκληρα τα URIs,όταν γράφουμε ένα query, χρησιμοποιούμε Prefixes στην αρχή του query. Μερικά σημαντικά URIs και τα prefixes που χρησιμοποιούμε : PREFIX owl: http://www.w3.org/2002/07/owl# PREFIX xsd: PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema# PREFIX rdf: PREFIX time:
12
SPARQL - Prefix SELECT ?x WHERE{ ?x } Query με prefix : PREFIX book: SELECT ?x WHERE{ book:book1 book:hasWriter ?x } Query χωρίς prefix :
13
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 } Επιστρέφει πάντα όλες τις μεταβλητές!
14
SPARQL - Select Distinct To distinct το χρησιμοποιούμε για να εξαλείψουμε την εμφάνιση του ίδιου αποτελέσματος περισσότερες από μία φορές στη λύση. Πχ. Εστω ότι τα δεδομένα μας είναι: Company1 hasEmail “c1@yahoo.com”c1@yahoo.com Company1 hasEmail “Company1@yahoo.com”Company1@yahoo.com Company1 hasEmail “Comp1@yahoo.com”
15
SPARQL - Select Distinct Εάν ρωτήσουμε με το query : Τα αποτελέσματα που θα πάρουμε θα είναι : Ενώ αν ρωτήσουμε με : Θα πάρουμε : SELECT ?x where { ?x ex:hasEmail ?y } {Company1}, {Company1}, {Company1} SELECT DISTINCT ?x where { ?x ex:hasEmail ?y } {Company1}
16
SPARQL - From Στο FROM επιλέγουμε το dataSet πάνω στο οποίο θέλουμε να ρωτήσουμε. Όταν δεν καθορίζουμε datasets τότε ρωτάμε στο default dataSet (ένας γράφος). Η SPARQL μας δίνει τη δυνατότητα να ρωτήσουμε στο default dataset και σε ένα σύνολο από named graphs που καθορίζονται από το URI τους.
17
SPARQL – Default Graph Καθορίζουμε το default graph : PREFIX ex: SELECT ?cname FROM WHERE { ?x ex:companyName ?cname }
18
SPARQL – Named Graphs Χρησιμοποιώντας named graphs : PREFIX ex: SELECT ?src ?cname FROM FROM NAMED WHERE { GRAPH ?src { ?x ex:companyName ?cname }
19
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). }
20
SPARQL - WHERE triplets Filters Optional path expressions Unions Το WHERE keyword είναι optional ! Select ?x where { ?x ?y ?z }
21
SPARQL - Filters Tα filters χρησιμοποιούντε μέσα στο where clause για να εξαλείψουμε, χρησιμοποιώντας λογικές παραστάσεις, ανεπιθύμητα αποτελέσματα. Πχ. SELECT ?x, ?y WHERE{ ?x ex:takesSalary ?y FILTER( ?y > 1000 ) }
22
SPARQL - Filters Logical: !, &&, || Math: +, -, *, / Comparison: =, !=, >, <,... SPARQL tests: isURI, isBlank, isLiteral, bound SPARQL accessors: str, lang, datatype Other: sameTerm, langMatches, regex
23
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” )
24
SPARQL – Optional Path Expressions Χρησιμοποιείται όταν θέλουμε να ανζητήσουμε προαιρετικά κάποια δεδομένα. ΠΑΡΑΔΕΙΓΜΑ : ΄Εστω ότι θέλουμε να πάρουμε τα δεδομένα όλων των εργαζομένων (employees) που δουλεύουν σε μια εταιρία ( Company1 )
25
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.
26
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 { } } κτλ κτλ.
27
SPARQL - Union Το UNION το χρησιμοποιούμε για να πάρουμε την ένωση από κάποια set αποτελεσμάτων. Πχ. PREFIX ex1: PREFIX ex2: SELECT ?name WHERE { { ?employee ex1:employeeName ?name } UNION { ?employee ex2:employeeName ?name } }
28
SPARQL – MODIFIERS Χρησιμοποιούμε MODIFIERS για να καθορίσουμε/επιλέξουμε το υποσύνολο των αποτελεσμάτων που θέλουμε στην απάντηση. Βασικοί MODIFIERS : LIMIT – ORDER BY – OFFSET
29
SPARQL - Limit Το LIMIT το χρησιμοποιούμε για να περιορίσουμε τον αριθμό των αποτελεσμάτων που θα επιστραφούν. Πχ. SELECT DISTINCT ?x WHERE{ ?x a ex1:Company } LIMIT 50
30
SPARQL - Order By To ORDER BY χρησιμοποιείται για να ταξινομήσουμε τα αποτελέσματα (με βάση μια μεταβλητή ) με αύξουσα (ASC) ή φθίνουσα(DESC) σειρά. Πχ. SELECT DISTINCT ?x, ?y WHERE{ ?x ex:takesSalary ?y } ORDER BY DESC ( ?y ) LIMIT 50
31
SPARQL - Offset To OFFSET χρησιμοποιείται σε συνδιασμό με τα LIMIT και ORDER BY για να επιλέξουμε το υποσύνολο των αποτελεσμάτων που θέλουμε. Πχ. SELECT DISTINCT ?x, ?y WHERE{ ?x ex:takesSalary ?y } ORDER BY DESC ( ?y ) LIMIT 50 OFFSET 20
32
SPARQL – Usefull Links SPARQL W3C : http://www.w3.org/TR/rdf-sparql- query/http://www.w3.org/TR/rdf-sparql- query/ SPARQL TUTORIAL S : http://www.cambridgesemantics.com/2008/09/spar ql-by-example/ http://www.cambridgesemantics.com/2008/09/spar ql-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 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 ); } Simple ontology Loader :
36
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.
37
JENA – Reading & Writing Data public void readClasses(){ ExtendedIterator 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 :
38
JENA – Reading & Writing Data public void readProperties(){ ExtendedIterator iter = ontoModel.listDatatypeProperties(); ExtendedIterator 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 :
39
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-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()); } Reading Statements :
40
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.
41
JENA – Inference // 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(); How to use the Pellet reasoner : [ Using the Ontology Loader from slide 37 ]
42
JENA – Executing a Query // Create a new query String queryString =“PREFIX 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 results ResultSetFormatter.out(System.out, results, query); // Important – free up resources used running the query qe.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/
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.