ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ RDF - RDFS Αναπαράσταση Γνώσης στον Παγκόσμιο Ιστό http://aigroup.ceid.upatras.gr/index.php/el/krweb
Ανεπάρκεια της XML <teaches>Java</teaches> </lecturer> <course name=“Java”> Δεν παρέχει τρόπο καθορισμού της σημασιολογίας των δεδομένων <lecturer>John Hatzis </lecturer> </course> Παράδειγμα <teachingOffering><lecturer>John Hatzis </lecturer><course>Java</course></teachingOffering> «Ο John Hatzis είναι ο διδάσκων του μαθήματος Java» Μπορεί να αναπαρασταθεί με τουλάχιστον τρεις διαφορετικούς τρόπους που δεν στηρίζονται σε μια «κοινή ερμηνεία» περί ένθεσης: <lecturer name=“JohnHatzis”>
RDF - Θεμελιώδεις Έννοιες Πόροι (Resources) Ιδιότητες (Properties) Τιμές ιδιοτήτων (Property values) Προτάσεις (Statements)
RDF Triples (Statements) Ο Γιάννης διδάσκει το μάθημα Σημασιολογικός Ιστός. Πρέπει πρώτα να βρούμε τις οντότητες ή πόρους (Resources) και τις σχέσεις μεταξύ τους (Properties) σε μορφή Υ-Ρ-Α (Υποκείμενο-Ρήμα-Αντικείμενο). Η μορφή αυτή ονομάζεται πρόταση (Statement) ή τριπλέτα (triple). Εδώ έχουμε: Υ: Γιάννης (John) Ρ: διδάσκει το μάθημα (teaches_course) Α: Σημασιολογικός Ιστός (Semantic Web) John teaches_course Semantic Web
RDF Triples (Statements) Το Υ είναι πάντα resource, ένα αντικείμενο δηλαδή από το οποίο μπορούν να ξεκινούν σχέσεις και ενέργειες (John teaches_course, John has_name). Το Α μπορεί να είναι είτε resource είτε datatype (ή Literal): integer, string κ.α.). Από τα datatypes δεν ξεκινούν σχέσεις (σκεφτείτε τη σχέση ως γράφο). Μπορούσαμε στο παράδειγμά μας να θωρήσουμε ότι το “Semantic Web” είναι παρά ένα απλό όνομα μαθήματος, οπότε μπορούσαμε να το θεωρήσουμε τύπου string. Βέβαια, εδώ πιο ασφαλές είναι να το θεωρήσουμε ως resource, οπότε αν θέλουμε αργότερα μπορούμε να του προσδώσουμε ιδιότητες, όπως το όνομά του, οι ώρα που γίνεται κ.α. και να επεκτείνουμε το σχήμα. John teaches_course Semantic Web Στους γράφους αναπαράστασης λοιπόν, τα resources αναπαρίστανται με κύκλο, τα predicates (ιδιότητες) με βέλος και τα datatypes με κουτί.
RDF Triples (Statements) Αλφαριθμητικό - Literal John teaches_course Semantic Web Οντότητα -Resouce John teaches_course Semantic Web Στους γράφους αναπαράστασης λοιπόν, τα resources αναπαρίστανται με κύκλο, τα predicates (ιδιότητες) με βέλος και τα datatypes με κουτί.
RDF Triples (Statements) John teaches_course Semantic Web John teaches_course Semantic Web (Resource Only) (Resource or Literal) Subject Predicate Object Statement
RDF Triples (Statements) John teaches_course Semantic Web Η πληροφορία αυτή αρκεί για να γράψουμε το RDF έγγραφο: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:uni="http://www.mydomain.org/uni-ns/"> <rdf:Description rdf:about="http://www.mydomain.org/uni-ns/John"> <uni:teaches_course rdf:resource="http://www.mydomain.org/uni-ns/Semantic_Web"/> </rdf:Description> </rdf:RDF>
RDF Triples (Statements) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:uni="http://www.mydomain.org/uni-ns/"> <rdf:Description rdf:about="http://www.mydomain.org/uni-ns/John"> <uni:teaches_course rdf:resource="http://www.mydomain.org/uni-ns/Semantic_Web"/> </rdf:Description> </rdf:RDF> Είναι τα namespaces για τα RDF (π.χ. about, resource) και XML (π.χ. integer, string) στοιχεία που εμφανίζονται στο έγγραφο.
RDF Triples (Statements) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:uni="http://www.mydomain.org/uni-ns/"> <rdf:Description rdf:about="http://www.mydomain.org/uni-ns/John"> <uni:teaches_course rdf:resource="http://www.mydomain.org/uni-ns/Semantic_Web"/> </rdf:Description> </rdf:RDF> Είναι το namespace που ορίζουμε για να κάνουμε μοναδικές τις σχέσεις και τις οντότητές μας, βάζοντάς τους το πρόθεμα uni: uni:teaches_course http://www.mydomain.org/uni-ns/teaches_course
RDF Triples (Statements) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:uni="http://www.mydomain.org/uni-ns/"> <rdf:Description rdf:about="http://www.mydomain.org/uni-ns/John"> <uni:teaches_course rdf:resource="http://www.mydomain.org/uni-ns/Semantic_Web"/> </rdf:Description> </rdf:RDF> Έναρξη του statement με το Description και ορισμός του Υποκειμένου: John. Συνδέοντάς το με το namespace κάνουμε μοναδική την οντότητα αυτή.
RDF Triples (Statements) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:uni="http://www.mydomain.org/uni-ns/"> <rdf:Description rdf:about="http://www.mydomain.org/uni-ns/John"> <uni:teaches_course rdf:resource="http://www.mydomain.org/uni-ns/Semantic_Web"/> </rdf:Description> </rdf:RDF> Ορισμός του κατηγορήματος (predicate, ιδιότητα)
RDF Triples (Statements) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:uni="http://www.mydomain.org/uni-ns/"> <rdf:Description rdf:about="http://www.mydomain.org/uni-ns#John"> <uni:teaches_course rdf:resource="http://www.mydomain.org/uni-ns/Semantic_Web"/> </rdf:Description> </rdf:RDF> Ορισμός του αντικειμένου ως μια οντότητα Χρησιμοποιώντας τον τρόπο αυτόν γραφής και το resource, δηλώνουμε ότι το “Semantic_Web” είναι ένα αντικείμενο-οντότητα. Έτσι μπορούμε να το περιγράψουμε παραπάνω κάπου αλλού Θα μπορούσαμε να θεωρήσουμε το “Semantic_Web” απλά ως string (literal) Σε αυτή την περίπτωση θα δηλώναμε απλά: <uni:teaches_course>Semantic Web< /uni:teaches_course> Ορισμός του αντικειμένου ως ένα αλφαριθμητικό
RDF Triples (Statements) Γενικά, ο τρόπος που θα αναπαραστήσουμε την πληροφορία είναι και προσωπικό ζήτημα. Το προηγούμενο παράδειγμα θα μπορούσε να αναπαρασταθεί ως εξής: Ο Γιάννης διδάσκει το μάθημα Σημασιολογικός Ιστός. teaches John course has_name Semantic Web
RDF Triples (Γράφος) http://www.w3.org/RDF/Validator/ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:books="http://www.mydomain.org/books/"> <rdf:Description rdf:about=" http://www.mydomain.org/books/book012"> <rdf:type rdf:resource="books:Book"/> <books:title> Artificial Intelligence</books:title> <books:isbn > 978123478</books:isbn> <books:author rdf:resource ="http://www.mydomain.org/books/author12"/> </rdf:Description> <rdf:Description rdf:about="http://www.mydomain.org/books/author12"> <books:authorName >Henry Wise</books:authorName> </rdf:RDF> http://www.w3.org/RDF/Validator/
RDF Triples (Γράφος) http://www.w3.org/RDF/Validator/ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:books="http://www.mydomain.org/books#"> <rdf:Description rdf:about=" http://www.mydomain.org/books /book012"> <rdf:type rdf:resource="books:Book"/> <books:title > Artificial Intelligence</books:title> <books:isbn > 978123478</books:isbn> <books:author rdf:resource ="http://www.mydomain.org/books/author12"/> </rdf:Description> <rdf:Description rdf:about="http://www.mydomain.org/books/author12"> <books:authorName > Henry Wise</books:authorName> </rdf:RDF> http://www.w3.org/RDF/Validator/
RDF Triples (Γράφος) http://www.w3.org/RDF/Validator/ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:books="http://www.mydomain.org/books#"> <rdf:Description rdf:about=" http://www.mydomain.org/books /book012"> <rdf:type rdf:resource="books:Book"/> <books:title > Artificial Intelligence</books:title> <books:isbn > 978123478</books:isbn> <books:author rdf:resource ="http://www.mydomain.org/books/author12"/> </rdf:Description> <rdf:Description rdf:about="http://www.mydomain.org/books/author12"> <books:authorName > Henry Wise</books:authorName> </rdf:RDF> http://www.w3.org/RDF/Validator/
“Internal” nodes Σκεφτείτε την παρακάτω πρόταση: Το μάθημα Semantic Web διδάσκεται από «κάποιον» που έχει όνομα Γιάννης και μένει στην Πάτρα. Μέχρι τώρα. Οι κόμβοι (nodes) γίνονταν identified με ένα URI. Όμως ποιό είναι το URI του «κάποιος»; Blank or Anonymous Node http://.../uni-ns#Semantic_WEB uni:teacher uni:name uni:lives_in John Patra
Μια λύση: Δημιουργία νέου URI <rdf:Description rdf:about="http://.../uni-ns#Semantic_WEB"> <uni:teacher rdf:resource="urn:uuid:f60ffb40-307d-…"/> </rdf:Description> <rdf:Description rdf:about="urn:uuid:f60ffb40-307d-…"> <uni:name>John</uni:name> <uni:lives_in >Patra</ uni:lives_in > To resource αυτό είναι «ορατό» στο Web
Internal identifier (“blank nodes”) <rdf:Description rdf:about="http://.../uni-ns#Semantic_WEB"> <uni:teacher rdf:nodeID="A234"/> </rdf:Description> <rdf:Description rdf:nodeID="A234"/> <uni:name>John</uni:name> <uni:lives_in >Patra</ lives_in> Ο κενός κόμβος A234 είναι αόρατος από έξω (δεν είναι αληθινό URI!). Είναι ένας εσωτερικός identifier για ένα resource
Blank nodes: the system can do it <rdf:Description rdf:about="http://.../uni-ns#Semantic_WEB"> <uni:teacher> <rdf:Description > <uni:name>John</uni:name> <uni:lives_in >Patra</ uni:lives_in > </rdf:Description> </uni:teacher> Η δήλωση είναι ισοδύναμη με της προηγούμενης διαφάνειας Η δήλωση γίνεται Inline μέσα στο αρχικό statement και αφήνεται στο σύστημα η δημιουργία του κενού κόμβου, αφού δε μας ενδιαφέρει το όνομά του (label)
Wikipedia says that Tolkien wrote “Silmarillion“ Reification Statements about statements H RDF επιτρέπει την μετατροπή μιας πρότασης σε πόρο: Wikipedia says that Tolkien wrote “Silmarillion“ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:a="http://description.org/schema/"> <rdf:Description rdf:about=“http://mydomain/Statement1"> <rdf:subject rdf:resource="http://.../#Tolkien" /> <rdf:predicate rdf:resource="http://description.org/schema/Writer" /> <rdf:object> Silmarilion </rdf:object> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement" /> </rdf:Description>
Reification H Wikipedia λέει ότι ισχύει το «Statement1» <rdf:Description rdf:about=“Wikipedia"> <a:says rdf:resource="http://mydomain/Statement1"/> </rdf:Description> </rdf:RDF> H Wikipedia λέει ότι ισχύει το «Statement1»
Containers <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:uni="http://www.mydomain.org/uni-ns#"> <rdf:Description rdf:about=" http://www.mydomain.org/uni-ns# John"> <uni:teaches> <rdf:Bag> <rdf:li rdf:resource=" http://www.mydomain.org/uni-ns# CIT1112"/> <rdf:li rdf:resource=" http://www.mydomain.org/uni-ns# CIT3116"/> </rdf:Bag> </ uni:teaches > </uni:lecturer> </rdf:Description> </rdf:RDF> Bag: Δεν μας ενδιαφέρει η σειρά. Επιτρέπονται διπλότυπα αντικείμενα. Seq: Συγκεκριμένη Σειρά. Επιτρέπονται διπλότυπα αντικείμενα. Alt: Εναλλακτικές τιμές.
Containers uni:John rdf:bag uni:teaches rdf:type rdf:_1 rdf:_2 rdf:bag uni: CIT1112 uni:CIT3116
RDFS
RDF vs RDFS Η RDF περιγράφει συγκεκριμένους πόρους και (προτασιακές) σχέσεις μεταξύ τους Αλλά δεν περιγράφει τύπους πόρων (δηλ. γενικές έννοιες) και τις σχέσεις τους περιγράφει τύπους σχέσεων και τις σχέσεις τους καθορίζει σημασιολογία σχέσεων Αυτά παρέχονται από την RDFS
Classes, resources, … rdf:type #novel rdfs:Class “Hyperion is a novel” <rdf:Description rdf:about="http://mybooks/Hyperion"> <rdf:type rdf:resource=" http://mybooks/novel "/> </rdf:Description> <rdf:Description rdf:about="http://mybooks/novel"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> http://mybooks/Hyperion rdf:type #novel rdf:type rdfs:Class
Classes, resources, … #novel #book “subclassing”: all instances of one are also the instances of the other (“every novel is a book”) <rdf:Description rdf:about="http://mybooks/Hyperion"> <rdf:type rdf:resource="books:novel"/> </rdf:Description> <rdf:Description rdf:about="http://mybooks/novel"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> <rdfs:subClassOf rdf:resource=“http://mybooks/book"/> </rdf:Description> <rdf:Description rdf:about="http://mybooks/book"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> http://mybooks/Hyperion rdf:type #novel rdfs:subClassOf #book
Inferred properties http://mybooks/Hyperion rdf:type #novel rdfs:subClassOf rdf:type #book Βλέπουμε μια καινούρια σχέση, η οποία δεν υπήρχε στα αρχικά RDF δεδομένα, αλλά μπορεί να εξαχθεί βάσει των RDFS κανόνων. Τα RDFS περιβάλλοντα που διαθέτουν μηχανή συμπερασμού (Inference Engine) επιστρέφουν και αυτήν την τριπλέτα/πρόταση.
Abbreviated <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:base="http://www.animals.fake/animals#"> <rdf:Description rdf:ID="animal"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="horse"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> <rdfs:subClassOf rdf:resource="#animal"/> </rdf:Description> </rdf:RDF> <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:base="http://www.animals.fake/animals#"> <rdfs:Class rdf:ID="animal" /> <rdfs:Class rdf:ID="horse"> <rdfs:subClassOf rdf:resource="#animal"/> </rdfs:Class> </rdf:RDF>
Properties Ας δούμε πώς εφαρμόζονται τα properties range και domain (ορίζονται στον RDFS χώρο): rdfs:domain :Καθορίζει το πεδίο ορισμού μιας ιδιότητας P και δηλώνει ότι όλοι οι πόροι που έχουν την ιδιότητα P είναι στιγμιότυπα των κλάσεων του πεδίου ορισμού. rdfs:range :Καθορίζει το σύνολο τιμών μιας ιδιότητας P και δηλώνει ότι οι τιμές της ιδιότητας P είναι στιγμιότυπα των κλάσεων του συνόλου τιμών. <rdf:Property rdf:about="http://www.mydomain.org/title"> <rdfs:domain rdf:resource="http://www.mydomain.org/Fiction"/> <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema/Literal"/> </rdf:Property>
Properties Αν για κάποιον πόρο δηλώσετε την ιδιότητα title: <rdf:Property rdf:about="http://www.mydomain.org/title"> <rdfs:domain rdf:resource="http://www.mydomain.org/Fiction"/> <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema/Literal"/> </rdf:Property> Αν για κάποιον πόρο δηλώσετε την ιδιότητα title: <rdf:Description rdf:about=“www.mydomain.org/book21”> <title>Hyperion</title> </rdf:Description> Αν το σύστημα διαθέτει μηχανή συμπερασμού, μπορεί να συμπεράνει ότι ο πόρος αυτός είναι τύπου Fiction και να προσθέσει το παρακάτω statement: <rdf:Description rdf:about=“www.mydomain.org/book21”> <rdf:type rdf:resource=“http://www.mydomain.org/Fiction“> </rdf:Description>
Προσοχή Δοκιμάστε τη χρήση των ID και about (προτείνεται χρήση του about) Να δηλώνετε πάντα τα namespaces Δοκιμάζετε ότι κάνετε να το βλέπετε και να το ελέγχετε με τον http://www.w3.org/RDF/Validator/