Αναπαρασταση Γνώσης στον Παγκόσμιο Ιστό RDF - RDFS http://aigroup.ceid.upatras.gr/index.php/el/krweb
RDF
Ανεπάρκεια της XML Η XML είναι Μετα-γλώσσα ορισμού σήμανσηςγια ανταλλαγή δεδομένων και μετα-δεδομένων μεταξύ εφαρμογών <lecturer name=“JohnHatzis”> <teaches>Java</teaches> </lecturer> Δεν παρέχει τρόπο καθορισμού της σημασιολογίας των δεδομένων <course name=“Java”> <lecturer>John Hatzis </lecturer> Παράδειγμα </course> «Ο John Hatzis είναι ο διδάσκων του μαθήματος Java» <teachingOffering><lecturer>John Hatzis </lecturer><course>Java</course> </teachingOffering> Μπορεί να αναπαρασταθεί με τουλάχιστον τρεις διαφορετικούς τρόπους που δεν στηρίζονται σε μια «κοινή ερμηνεία» περί ένθεσης:
Θεμελιώδεις Έννοιες Πόροι (Resources) Ιδιότητες (Properties) Τιμές ιδιοτήτων (Property values) Προτάσεις (Statements)
RDF Triples (Statements) Ο Γιάννης διδάσκει το μάθημα Σημασιολογικός Ιστός. Πρέπει πρώτα να βρούμε τις οντότητες ή αντικείμενα (resources) και τις σχέσεις μεταξύ τους (properties) σε μορφή Υ-Ρ-Α (Υποκείμενο-Ρήμα- Αντικείμενο). Η μορφή αυτή ονομάζεται τριπλέτα (triple). Εδώ έχουμε: Υ: Γιάννης (John) Ρ: διδάσκει το μάθημα (teaches_course) Α: Σημασιολογικός Ιστός (Semantic Web) John teaches_course Semantic Web
RDF Triples (Statements) Παρατήρηση: Το Υ είναι πάντα resource, ένα αντικείμενο δηλαδή από το οποίο μπορούν να ξεκινούν σχέσεις και ενέργειες (John teaches_course, John has_name). Το Α μπορεί να είναι είτε resource είτε datatype (integer, string κ.α.). Από τα datatypes δεν ξεκινούν σχέσεις (σκεφτείτε τη σχέση ως γράφο). Μπορούσαμε στο παράδειγμά μας να θωρήσουμε ότι το “Semantic Web” είναι παρά ένα απλό όνομα μαθήματος, οπότε μπορούσαμε να το θεωρήσουμε τύπου string. Βέβαια, εδώ πιο ασφαλές είναι να το θεωρήσουμε ως resource, οπότε αν θέλουμε αργότερα μπορούμε να του προσδώσουμε ιδιότητες, όπως το όνομά του, οι ώρα που γίνεται κ.α. και να επεκτείνουμε το σχήμα. John teaches_course Semantic Web Στους γράφους αναπαράστασης λοιπόν, τα resources αναπαρίστανται με κύκλο, τα predicates (ιδιότητες) με βέλος και τα datatypes με κουτί.
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>
RDF Triples (Statements) Επεξήγηση: 1) xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" Είναι τα namespaces για τα RDF (π.χ. about, resource) και XML (π.χ. integer, string) στοιχεία που εμφανίζονται στο έγγραφο 2) xmlns:uni=http://www.mydomain.org/uni-ns# Είναι το namespace που ορίζουμε για να κάνουμε μοναδικές τις σχέσεις και τις οντότητές μας, βάζοντάς τους το πρόθεμα uni: 3) <rdf:Description rdf:about="http://www.mydomain.org/uni-ns#John"> Έναρξη του statement με το Desrciption καιορισμός του Υποκειμένου, John. Συνδέοντάς το με το namespace κάνουμε μοναδική την οντότητα αυτή.
RDF Triples (Statements) 4) uni:teaches_course Ορισμός του κατηγορήματος (predicate, ιδιότητα) 5) rdf:resource=http://www.mydomain.org/uni-ns#Semantic_Web Ορισμός του αντικειμένου. Χρησιμοποιώντας τον τρόπο αυτόν γραφής και το resource, δηλώνουμε ότι το Semantic_Web είναι ένα αντικείμενο. Έτσι μπορούμε να το περιγράψουμε παραπάνω κάπου αλλού. Θα μπορούσαμε να θεωρήσουμε το Semantic_Web απλά ως string (literal) Οπότε αντί της δήλωσης <uni:teaches_course rdf:resource="http://www.mydomain.org/uni- ns#Semantic_Web"/> Θα είχαμε <uni:teaches_course>Semantic Web< /uni:teaches_course>
RDF Triples (Statements) Γενικά, ο τρόπος που θα αναπαραστήσουμε την πληροφορία είναι και προσωπικό ζήτημα. Το προηγούμενο παράδειγμα θα μπορούσε να αναπαρασταθεί ως εξής: teaches John course has_name Semantic Web
“Internal” nodes Σκεφτείτε το ακόλουθο statement: Ο καθηγητής είναι «κάποιος» που έχει όνομα και διεύθυνση. Μέχρι τώρα. Οι κόμβοι (nodes) γίνονταν indentified με ένα URI. Όμως ποιό είναι το URI του «κάποιος»; http://.../uni-ns#Semantic_WEB http://.../uni-ns#Semantic_WEB uni:teacher uni:name uni:address 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:address >Patra</ uni:address > To resource αυτό είναι «ορατό» στο Web Χρειάζεται προσοχή κατά τη δημιουργία unique URI-s
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:address >Patra</ uni:address > Η σύνταξη είναι serialization dependent Ο κενός κόμβος 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:address >Patra</ uni:address > </rdf:Description> Η δήλωση γίνεται Inline μέσα στο αρχικό statement και αφήνεται στο σύστημα η δημιουργία του κενού κόμβου, αφού δε μας ενδιαφέρει το όνομά του (label)
Reification Statements about statements H RDFεπιτρέπει την μετατροπή μιας πρότασης σε πόρο Wikipedia says that Tolkien wrote “Silmarilion“ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:a="http://description.org/schema/"> <rdf:Description rdf:about="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 <rdf:Description rdf:about=“Wikipedia"> <a:believes rdf:resource="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>
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Παρέχει τα 2, 3 και 4.
Classes, resources, … Σκεφτείτε γνωστές και παραδοσιακές οντολογίες ή ταξινομήσεις: όρος “novel” “every novel is a fiction” “The Glass Palace is a novel” etc. Η RDFS ορίζει resources και classes: Τα πάντα στην RDF είναι “resource” Οι “classes” είναι επίσης resources, αλλά… …είναι επίσης συλλογές πιθανών resources (i.e., “individuals”) “fiction”, “novel”, …
Classes, resources, … Καθορίζονται σχέσεις μεταξύ classes/resources: “≪The Glass Palace≫ is a novel” Και για να είμαστε πιο ακριβείς: “≪http://.../000651409X≫ is a novel” “subclassing”: all instances of one are also the instances of the other (“every novel is a fiction”) Το RDFS δημιουργεί αυτές τις σχέσεις σε RDF
Classes, resources in RDF(S) Schema: <rdf:Description rdf:ID="Novel"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> Rdf: <rdf:Description rdf:about="http://…/isbn/000651409X"> <rdf:type rdf:resource="http://…/bookSchema.rdf#Novel"/> http://.../000651409X rdf:type #Novel rdf:type rdfs:Class
Inferred properties Βλέπουμε μια καινούρια σχέση, η οποία δεν υπήρχε στα αρχικά RDF δεδομένα, αλλά μπορεί να διεξαχθεί βάσει των RDFS κανόνων Τα RDFS περιβάλλοντα επιστρέφουν και αυτήν την τριπλέτα http://.../000651409X rdf:type #Novel rdf:type rdf:type rdfs:Class
Properties Ας δουμε πώς εφαρμόζονται τα properties range και domain (ορίζονται στον RDFS χώρο): rdfs:domain :Καθορίζει το πεδίο ορισμού μιας ιδιότητας Pκαι δηλώνει ότι όλοι οι πόροι που έχουν την ιδιότητα P είναι στιγμιότυπα των κλάσεων του πεδίου ορισμού. rdfs:range :Καθορίζει το σύνολο τιμών μιας ιδιότητας Pκαι δηλώνει ότι οι τιμές της ιδιότητας P είναι στιγμιότυπα των κλάσεων του συνόλου τιμών. <rdf:Property rdf:ID="title"> <rdfs:domain rdf:resource="#Fiction"/> <rdfs:range rdf:resource="http://...#Literal"/> </rdf:Property>
Προσοχή Δοκιμάστε τη χρήση των ID και about (προτείνεται χρήση του about) Να δηλώνετε πάντα τα namespaces Δοκιμάζετε ο,τι κάνετε να το βλέπετε και να το ελέγχετε με τον http://www.w3.org/RDF/Validator/