Διαχείριση και Εξόρυξη Γνώσης Knowledge Management and Data Mining Γεώργιος Βούρος Γεώργιος Σαντιπαντάκης (gsant@unipi.gr)
Περιεχόμενα Ανασκόπηση Παραδείγματα RDF/RDFS στο Protégé Εισαγωγή στην SPARQL
Ανασκόπηση (Τριπλέτα)
RDFS Ιδιότητες πηγή: RDF Schema 1.1 (https://www.w3.org/TR/rdf-schema/ )
rdf:type
rdfs:Class rdfs:Class: Προσδιορίζει σύνολο ομοειδών οντοτήτων (οντότητες που μοιράζονται τις ίδιες ιδιότητες/χαρακτηριστικά) Για παράδειγμα: msc:Surgeon rdf:type rdfs:Class. msc:Staff rdf:type rdfs:Class. msc:Physician rdf:type rdfs:Class. msc:Patient rdf:type rdfs:Class.
rdfs:subClassOf rdfs:subClassOf: αφορά κλάσεις και δηλώνει σχέση υπαγωγής (κλάσης υπο-κλάσης). Κάθε στοιχείο της υπο-κλάσης είναι ταυτόχρονα και στοιχείο της κλάσης. Για παράδειγμα: (RDFS) msc:Pregnant rdfs:subClassOf msc:Female . msc:FemalePatient rdfs:subClassOf msc:Female. (RDF) msc:maria rdf:type msc:Pregnant . Τι σημαίνει : «Αν x βρίσκεται στο Α και το Α είναι υποσύνολο του Β, τότε το x ανήκει και στο B.»
rdfs:subPropertyOf rdfs:subPropertyOf: αφορά ιδιότητες (properties) και δηλώνει εξειδίκευση ιδιότητας: η περισσότερο εξειδικευμένη ιδιότητα είναι rdfs:subPropertyOf της γενικότερης. Τι σημαίνει: «Αν x P y και P subPropertyOf R, τότε ισχύει και x R y.» Για παράδειγμα: msc:hasChild rdfs:subPropertyOf msc:hasOfspring . msc:hasOfspring rdfs:subPropertyOf msc:BloodRelated . msc:BloodRelated rdfs:subPropertyOf msc:hasKin .
rdfs:subPropertyOf Παράδειγμα: :freeLancesTo rdfs:subPropertyOf :contractsTo. :indirectlyContractsTo rdfs:subPropertyOf :contractsTo. :isEmployedBy rdfs:subPropertyOf :worksFor. :contractsTo rdfs:subPropertyOf :worksFor. Τί συμπεράσματα μπορούν να βγούν αν δώσουμε τις τριπλέτες: (RDF) msc:Marcus msc:contractsTo msc:UOA. msc:Spence msc:indirectlyContractsTo msc:UniPi. msc:Peter msc:isEmployedBy msc:NTUA .
rdfs:domain/rdfs:range rdfs:domain: Αφορά ένα property και δηλώνει την κλάση των subjects στις τριπλέτες όπου το property αυτό θα χρησιμοποιείται ως predicate . rdfs:range: Αφορά ένα property και δηλώνει την κλάση των objects στις τριπλέτες όπου το property αυτό θα χρησιμοποιείται ως predicate . «Αν P rdfs:domain C και x P y, τότε x ανήκει στο C.» «Αν P rdfs:range D και x P y, τότε y ανήκει στο D.» Συμπληρώστε τα κενά: :suffersFromDisease ______ msc:Patient . :suffersFromDisease ______ msc:Disease .
Παράδειγμα Έστω, msc:PulmonaryPatient είναι ασθενείς της πνευμονολογικής κλινικής, msc:Injured ασθενείς της ορθοπεδικής κλινικής και msc:HeartPatient ασθενείς της καρδιολογικής κλινικής. Τί πρέπει να προσθέσουμε, ώστε να προκύπτουν τύποι ασθενών στις αντίστοιχες υπο-κλάσεις; Ποιά άλλα συμπεράσματα προκύπτουν; Πως θα κατηγοριοποιήσουμε αυτόματα τους γιατρούς (Doctor);
Τομή συνόλων (Set intersection) Παράδειγμα: (RDFS) msc:Surgeon rdfs:subClassOf msc:Staff. msc:Surgeon rdfs:subClassOf msc:Physician. (RDF) msc:Kildare rdf:type msc:Surgeon.
Ένωση συνόλων (Set Union) Πως μπορούμε να εκφράσουμε ότι η ένωση δύο κλάσεων (συνόλων) A, B είναι υποκλάση μιας τρίτης C; Για κάθε πόρο x που ανήκει είτε στην Α ή στην Β, συνάγεται ότι ανήκει επίσης στην C.
URIs/Literals
SPARQL Η SPARQL χρησιμοποιείται για την δημιουργία ερωτημάτων προς RDF δεδομένα. Το βασικό στοιχείο των SPARQL ερωτημάτων είναι ο πρότυπος γράφος (graph patterns): αποτελείται από πρότυπες τριπλέτες (triple pattern), οι οποίες μπορούν να έχουν σε οποιαδήποτε από τις τρείς θέσεις θέματος, κατηγορήματος και αντικειμένου μεταβλητές. Οι μεταβλητές εμφανίζονται ως σύμβολα στα οποία προηγείται ένα ερωτηματικό "?". SPARQL Specification: https://www.w3.org/TR/sparql11-query/
SPARQL Πρότυπη τριπλέτα Παραδείγματα: ?p msc:attendedBy msc:dimou . msc:panos ?r "Άσθμα" . msc:bill msc:hasPulmonaryD ?disease . ?p msc:attendedBy ?d. ?s ?p ?o . Τα αποτελέσματα ενός ερωτήματος μπορούν να επιστραφούν με διάφορους τρόπους. Τα ερωτήματα SPARQL μπορούν να χρησιμοποιηθούν και στην OWL.
SPARQL Πρότυπη τριπλέτα Τα αποτελέσματα του ερωτήματος είναι τιμές τις οποίες πρέπει να πάρουν οι μεταβλητές, ώστε τα πρότυπα να ταιριάξουν με τριπλέτες στα δεδομένα. Για παράδειγμα: (RDF) msc:nikos msc:attendedBy msc:manos . Πρότυπες τριπλέτες: msc:nikos msc:attendedBy ?who . ?var msc:attendedBy msc:manos .
SPARQL Πρότυπος Γράφος Πρότυπος γράφος: ένα σύνολο προτύπων τριπλετών όπου κάθε μεταβλητή που εμφανίζεται σε δύο ή περισσότερες τριπλέτες πρέπει να ταιριάζει με τον ίδιο πόρο στο γράφο. Οι πρότυποι γράφοι δίνονται ως μια λίστα από πρότυπες τριπλέτες που εσωκλείονται σε αγκύλες, { και }.
SPARQL Πρότυπος Γράφος Παράδειγμα: {?patient msc:regDate "2/4/2016" . ?patient msc:attendedBy msc:dimou.} {?patient msc:hasInjury ?d . ?patient msc:attendedBy ?doctor.}
Ανατομία του ερωτήματος SPARQL PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX msc: <http://www.myExample.gr/dataset#> SELECT ?title WHERE { ?x rdf:type msc:SomeClass . ?dataset rdf:title ?title . FILTER(…) } Group By … Having … Order By … Limit … Offset … Bindings … Ορισμός Προθεμάτων Τύπος Ερωτήματος Μεταβλητές (τί θέλουμε να βρούμε) Πρότυπος γράφος (οι πρότυπες τριπλέτες που πρέπει να ικανοποιηθούν) και φίλτρα στις τιμές Προαιρετικοί τελεστές στα αποτελέσματα Περισσότερα προθέματα στο http://prefix.cc
Τύποι ερωτημάτων SPARQL SELECT Επιστρέφει σε πίνακα τα αποτελέσματα X, Y, κλπ. που ικανοποιούν τον πρότυπο γράφο CONSTRUCT Εντοπίζει τα X, Y, κλπ. που ικανοποιούν τον πρότυπο γράφο και τα τοποθετεί σε νέο πρότυπο γράφο για την κατασκευή RDF τριπλετών (γράφου). DESCRIBE Εντοπίζει τριπλέτες που παρέχουν πληροφορία για συγκεκριμένους πόρους ASK Εξετάζει αν υπάρχουν X, Y, κλπ. στα δεδομένα, τέτοια ώστε να ικανοποιούν τον πρότυπο γράφο. Επιστρέφει yes ή no
SPARQL (SELECT) SELECT ?city WHERE { ?hospital msc:LocatedIn ?city } versus: SELECT DISTINCT ? city WHERE {
SPARQL (SELECT) Παράδειγμα: Ποιοί γιατροί με ειδικεύονται σε εσωτερικά όργανα (πνεύμονες, καρδιά κλπ): SELECT ?doctor WHERE { {?patient msc:hasPulmonaryD ?disease . ?patient msc:attendedBy ?doctor. } UNION {?p msc:hasHeartDisease ?disease . ?p msc:attendedBy ?doctor} }
SPARQL (SELECT) SELECT ?student WHERE { ?student msc:studies msc:CS901 MINUS {?student msc:studies msc:MED101} } A MINUS B: Ικανοποιεί το Α και το Β, και επιστρέφει μόνο τα αποτελέσματα που προκύπτουν από το A αλλά όχι το B
SPARQL (SELECT) SELECT ?student ?book WHERE { ?student msc:studies msc:CS901 OPTIONAL {?student msc:checkedOut ?book} } A OPTIONAL {B}: Επιστρέφει τα αποτελέσματα του Α και όποια από το Β, ικανοποιούνται
SPARQL (FILTERS) SELECT * WHERE { Τα φίλτρα (FILTERS) στην SPARQL αφαιρούν αποτελέσματα που δεν ικανοποιούν τις συνθήκες που δηλώνονται στο FILTER(…). Τα φίλτρα τοποθετούνται μέσα στον πρότυπο γράφο: SELECT * WHERE { A . B . FILTER ( ...expr... ) }
SPARQL (FILTERS)
SPARQL (CONSTRUCT) CONSTRUCT { ?student msc:studyFriend ?friend } WHERE { ?student msc:studies ?course . ?student foaf:knows ?friend . ?friend msc:studies ?course } } Εαν υπάρχουν περισσότερα από ένα αποτελέσματα, οι τριπλέτες από κάθε αποτέλεσμα συνδυάζονται.
SPARQL (ASK) Υπάρχουν φοιτητές που παρακολουθούν οποιοδήποτε μάθημα; ASK { ?student msc:studies ?course} Υπάρχουν φοιτητές που παρακολουθούν το μάθημα MED101; ASK { ?student msc:studies msc:MED101 } Ο φοιτητής 029389 παρακολουθεί το μάθημα MED101; ASK { msc:029389 msc:studies msc:MED101 } Γνωρίζει ο 029389 κάποιον που παρακολουθεί το MED101; ASK {msc:029389 foaf:knows ?x . ?x msc:studies msc:MED101 } Υπάρχει φοιτητής άνω των 30 ετών που παρακολουθεί το MED101; ASK { ?s msc:studies msc:CS909 . ?s msc:hasAge ?age . FILTER (?age > 30) }
SPARQL (ORDER BY) SELECT ?name ?module WHERE { ?student msc:studies ?course . ?student foaf:name ?name . } ORDER BY ?name SELECT ?name ?age ?student msc:hasAge ?age . ORDER BY DESC (?age) ASC (?name)
SPARQL (LIMIT) SELECT ?name ?course WHERE { ?student msc:studies ?course . ?student foaf:name ?name . } LIMIT 15
SPARQL (OFFSET) SELECT ?name ?course WHERE { ?student msc:studies ?course . ?student foaf:name ?name . } ORDER BY ?name OFFSET 5 LIMIT 3
Εργασία για το σπίτι Δοκιμάστε ερωτήματα SPARQL στα http://data.europa.eu/euodp/en/linked-data http://dbpedia.org/sparql http://wifo5-03.informatik.uni-mannheim.de/drugbank/snorql/ http://dbtune.org/musicbrainz/
SPARQL (UPDATE)
Σύνοψη Το RDF χρησιμοποιείται για να εκφράσουμε δεδομένα. Τα RDF δεδομένα εκφράζονται σε τριπλέτες: υποκείμενο (subject), κατηγόρημα (predicate), αντικείμενο (object). Το RDFS χρησιμοποιείται για να εκφράσει το σχήμα πάνω από τα δεδομένα. Η SPARQL είναι η γλώσσα που χρησιμοποιείται για την υποβολή ερωτημάτων σε δεδομένα RDF. Η SPARQL μπορεί να χρησιμοποιηθεί και για ενημέρωση (update) των RDF δεδομένων.