Prof. Massimo Ruffolo Ing. Maurizio Colica Capitolo 4 RDF: Resource Description Framework Introduzione Classi e Istanze Proprietà RDF: Resource Description Framework Introduzione RDF: Resource Description Framework The Resource Description Framework (RDF) è uno standard W3C per la descrizione delle risorse Web, in termini di titolo, autore, data modifica, e copyright. Cos’è RDF? RDF sta per Resource Description Framework RDF è una piattaforma per la descrizione delle risorse sul web RDF è costituito da un modello dei dati e da una sintassi separate l’una dall’altra RDF può essere interpretato da un computer RDF non è nato per essere letto dall’uomo RDF è scritto in XML RDF fa parte delle attività del W3C per il “Web Semantico” RDF è una “W3C Recommendation“ RDF – Esempi d’uso Descrizione di proprietà di oggetti in vendita come prezzo e disponibilità Descrizione di informazioni relative a Pagine Web: autore,modifica,copyright Descrizione dei contenuti e classificazione di immagini sul web Descrizione di contenuti per facilitare il compito dei motori di ricerca Descrizione di librerie digitali RDF è disegnato per essere interpretato da un pc RDF è stato disegnato per essere di facile interpretazione da parte di applicazioni che si occupano di trattare contenuti. RDF non è stato disegnato per essere visualizzato sul web RDF è scritto in XML Il linguaggio XML usato da RDF è chiamato RDF/XML. Usando XML, le informazioni RDF possono essere facilmente scambiate fra computer che utilizzino differenti piattaforme e differenti linguaggi di programmazione. RDF ed il “Web Semantico" Il linguaggio RDF fa parte del W3C's Semantic Web Activity. W3C's "Semantic Web Vision" mira ad un futuro in cui: Le risorse web siano esattamente descritte Le risorse Web possano essere estratte e catalogate direttamente da un calcolatore Le applicazioni possano automaticamente incamerare e consumare contenuti eterogenei distribuiti sul web. RDF è un W3C Recommandation RDF è diventato un W3C Recommendation nel Febbraio 2004. Un “W3C Recommendation” è considerato all’interno della comunità internazionale come uno standard. Un W3C Recommendation è una specifica di un linguaggio del quale W3C dopo un attenta revisione ne dichiara la validità come standard. La W3C Specification per RDF si trova a questo link: http://www.w3.org/RDF/ RDF Risorse, Proprietà, e valori di Proprietà RDF identifica gli oggetti attraverso una URI e descrive tali oggetti attraverso le proprietà Una Risorsa è tutto ciò che è identificato da un Uri. Es. "http://www.w3schools.com/RDF" Una proprietà è una risorsa cui viene associato un nome come “mail” ,“name” Il valore di una proprietà esprime il valore che una proprietà di una risorsa può assumere. Il valore di una proprietà può essere un’altra risorsa. RDF Risorse, Proprietà, e valori di Proprietà: un esempio. L’RDF seguente descrive ad esempio la risorsa "http://www.unical.it/employee/mcolica": Notate come nell’esempio non è stato considerato alcun Namespace Esempio Visivo Soggetto Predicato http://www.unical.it Oggetto homepage http://www.unical.it/employee/mcolica author mcolica RDF Asserzioni La combinazione di una risorsa, una proprietà ed un valore di proprietà si chiama asserzione. In un asserzione la risorsa viene chiamata Soggetto, la proprietà Predicato ed il valore Oggetto. Nell’esempio precedente: Asserzione: “L’autore di http://www.unical.it/employee/mcolica è Maurizio Colica". Il soggetto è: http://www.unical.it/employee/mcolica Il predicato è: author L’oggetto è: Maurizio Colica Assrezione: “L’homePage di http://www.unical.it/employee/mcolica è http://www.unical.it ". Soggetto: http://www.unical.it/employee/mcolica Predicato: homepage Oggetto: http://www.unical.it RDF Esempio Collezione di CD: Title Artist Country Company Pearl Days Elisa Italia Columbia 12 euro 2006 Robbie Williams Misunders tood UK CBS Records 18 euro 2001 ... Price Year RDF Esempio: Rappresentazione Grafica Elisa artist company Columbia http:// www.mp3.it/cd/Pearl Days price 12 euro year 2006 RDF Esempi RDF Esempi La prima linea è la dichiarazione XML. Segue la root di un documento RDF: <rdf:RDF>. Il xmlns:rdf namespace, specifica che all’interno del documento tutto ciò che porta il prefisso rdf fa riferimento al namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#". Il xmlns:cd namespace, specifica che all’interno del documento tutto ciò che porta il prefisso cd fa riferimento al namespace http://www.mp3.it/cd#“ . Il tag <rdf:Description> specifica la descrione della risorsa identificata dall’attibuto rdf:about. Gli elementi: <cd:artist>, <cd:country>, <cd:company>, etc. sono proprietà della risorsa. L’elemento <rdf:RDF> <rdf:RDF> è la root di qualsiasi documento RDF e lo identifica: in esso può essere contenuto il riferimento al namesapce RDF <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdfsyntax-ns#"> [descrizioni delle risorse] </rdf:RDF> L’ elemento <rdf:Description> L’ <rdf:Description> identifica una risorsa ed i suoi attributi L’ <rdf:Description> contiene elementi che descrivono le sue proprietà Gli elementi, artist, country, company, price, e year, sono definiti nel namespace http://www.mp3.it/cd#. Questo namespace non ha nulla a che fare con RDF . RDF definisce solo l’infrastruttura. Proprietà come Attributi Le proprietà possono essere rappresentate come attributi Proprietà come Risorse I valori di proprietà possono essere espressi come risorse: La proprietà artista non ha un valore ma un riferimento ad un’altra risorsa. Proprietà come Risorse name http:// www.mp3.it/artist/Elisa artist company Columbia http:// www.mp3.it/cd/Pearl Days price 12 euro year 2006 Elisa RDF Elementi contenitori RDF containers: sono usati per descrivere gruppi di cose. Ad esempio per elencare gli autori di un disco o di una canzone. Per descrivere questi gruppi si usano i tag: <Bag>, <Seq>, e <Alt>. L’elemento <rdf:Bag> Rappresenta una lista di valori non ordinata. Può contenere valori duplicati. Esempio rdf:Bag http:// www.mp3.it/song/Ostacoli del cuore rdf:Bag cd:artist rdf:type rdf:_1 Elisa rdf:_2 Ligabue L’elemento <rdf:Seq> Rappresenta un lista di valori ordinata Può contenere valori duplicati. Esempio rdf:Seq http:// www.mp3.it/cd/Pearl Days rdf:Seq cd:song rdf:type 01 Stay rdf:_1 rdf:_2 rdf:_3 02 Gli Ostacoli del cuore .... L’elemento <rdf:Alt> Rappresenta una lista di alternative Esempio rdf:Alt http:// www.mp3.it/song/Ostacoli del cuore rdf:Alt cd:format rdf:type CD rdf:_1 rdf:_2 rdf:_3 Disco MC RDF Terms Una lista di valori in RDF si chiamano membri. Quindi: Un contenitore è una risorsa che contiene altri oggetti Gli oggetti contenuti si chiamano membri. RDF Collections RDF collections sono usati per descrivere gruppi che contengono solo gli elementi specificati. L’attributo rdf:parseType="Collection" Un container dice che una risorsa contiene alcuni membri ma tale affermazione non è chiusa: può contenerne anche altri. RDF collections è usato per esprimere liste chiuse Una collezione è descritta dall’attibuto rdf:parseType="Collection". Example RDF Schema (RDFS) RDF Schema (RDFS) è un estensione di RDF. RDF Schema e Classi RDF descrive risorse tramite classi, proprietà e valori. RDF ha bisogno di definire delle classi e proprietà specifiche per un applicazione Queste classi devono essere definite usando un estensione di RDF Tale estensione è RDF Schema RDF Schema (RDFS) RDF Schema non ha classi predefinite. RDF Schema fornisce la piattaforma per desrcivere nuovi tipi di classi. Le classi in RDF Schema sono simili alle classi di un linguaggio di programmazione ad oggetti. In RDF si possono rappresentare le risorse come istanze di classi e definire sottoclassi e tipi. RDFS Esempi Classi e Sotto classi: La classe horse viene dichiarata come sottoclasse della classe Animal. Esempio Abbreviato RDFS Class è sotto classe della classe rdf:Resource. Per questo motivo possiamo evitare di usare rdf:Description rdf:type ed usare direttamente rdf:class RDF Classi e Proprietà Namespace prefix:'rdfs' URI:'http://www.w3.org/2000/01/rdf-schema#' Le risorse possono essere istanze di una o più classi La classe è indicata tramite l’attibuto rdf:type property La risorsa http://www.unical.it/students/Maurizio è rdf:type Student La risorsa http://www.unicla.it/students/Maurizio è rdf:type Person Student è rdfs:subClassOf Person Le proprietà vengono definite in funzione della classe di risorse su cui si applicano RDF Classi rdfs:Resource – le risorse sono istanze di questa classe rdf:Property – le proprietà sono istanze di questa classe. rdfs:Class – una classe dei linguaggi object oriented. RDF Proprietà rdf:type – indica che una risorsa è del tipo della classe che viene specificata rdfs:subClassOf – indica la relazione classe/sottoclasse fra due classi rdfs:subPropertyOf – indica che una proprietà e specializzazione di un’altra. rdfs:seeAlso – specifica che la risorsa è anche descritta in altre parti rdfs:isDefinedBy – indica la risorsa “soggetto dell’asserzione” ovvero chi ha fatto l’asserzione RDF Constraints rdfs:range Indica la classe dei valori ammissibili di una proprietà. rdfs:range è una classe rdf:Class rdfs:domain Indica Se la classe cui la proprietà si applica. non è specificata indica che quella proprietà può essere usata su qualsiasi classe. Domain e Range Legame tra classi e proprietà RDF(S) fornisce anche un vocabolario per descrivere come ci si aspetta che proprietà e classi si combinino tra di loro Proprietà predefinite rdfs:domain ed rdfs:range http://www.w3.org/1999/02/22-rdf-syntax-ns#Property rdf:type rdfs:domain http:// www.mp3.it/cd/#singer http:// www.mp3.it/cd/#Song rdfs:range http:// www.mp3.it/cd/#Artist RDF Documentation rdfs:comment – testo libero rdfs:label – Riporta informazioni sulla versione di una risorsa RDF Schema Esempio (1) RDF Schema Esempio (2) RDF Schema Esempio (3) Istanze – classi – metaclassi rdfs:subClassOf rdfs:Resource rdfs:Class rdf:type rdf:type rdf:type terms:Person terms:Course rdfs:subClassOf terms:Students rdf:type Massimo Mario terms:name people:Bianchi terms:name terms:Teacher rdf:type terms:teacher people:Ruffolo course:BDSIW Reasoning rdfs:subClassOf rdfs:Resource rdfs:Class rdf:type rdf:type rdf:type terms:Person rdfs:subClassOf rdfs:subClassOf terms:Students rdf:type Massimo Mario terms:Course rdf:type terms:name people:Bianchi terms:name terms:Teacher rdf:type terms:teacher people:Ruffolo course:BDSIW Modello generale rdfs:Resource terms:… rdfs:subClassOf rdf:type rdfs:Class rdfs:subClassOf terms:… rdf:type terms:… rdf:domain terms:… rdfs:range terms:… rdfs:Property rdf:type RDF Schema Esempio (4) Interrogazione di file RDF SPARQL, linguaggio di interrogazione dell' RDF asceso da qualche mese al rango di W3C Candidate Recommendation, è stato accolto entusiasticamente come l'agognato ultimo tassello per l'edificazione del Web semantico SPARQL Sintassi Turtle SPARQL adotta la sintassi Turtle, un'estensione di N-Triples, alternativa estremamente sintetica e intuitiva al tradizionale RDF/XML. Si considerino le seguenti triple RDF, che saranno utilizzate nel corso della lezione come riferimento per le query d'esempio: RDF File cd.rdf Query SPARQL PREFIX cd: <http://example.org/cd/> SELECT ?title ?artist ?year FROM <cd.rdf> WHERE {?title cd:artist ?artist. ?title cd:year ?year . } Risultato Title Artist Year Pearl Days Elisa 2006 Restituisce tutte le risorse per le quali sia specificato sia l’artista che l’anno Clausola OPTIONAL PREFIX cd: <http://example.org/cd/> SELECT ?title ?artist ?year FROM <cd.rdf> WHERE { ?title cd:artist ?artist. OPTIONAL {?title cd:year ?year.} } Risultato Title Artist Year Pearl Days Elisa 2006 Misunderstood Robbie Williams Restituisce tutte le risorse per le quali sia specificato l’artista e opzionalmente l’anno Clausola UNION PREFIX cd: <http://example.org/cd/> SELECT ?title ?artist ?price ?year FROM <cd.rdf> WHERE { {?title cd:year ?year.} UNION {?title cd:price ?price.} } Risultato Title Artist Pearl Days Elisa Robbie Misunderstood Williams Price Year 2006 18 euro Restituisce tutte le risorse per le quali sia specificato o il prezzo o l’anno. Clausola FILTER PREFIX cd: <http://example.org/cd/> SELECT ?title ?artist ?price ?year FROM <cd.rdf> WHERE { {?title cd:year ?year.} FILTER (?year > 2005) } Risultato Title Artist Pearl Days Elisa Price Year 2006 Restituisce tutte le risorse per le quali l’attributo anno è maggiore di 2005. Clausola FILTER con REGEX PREFIX cd: <http://example.org/cd/> SELECT ?title ?artist FROM <cd.rdf> WHERE { {?title cd:artist ?artist.} FILTER regex(?artist, “^el”, “i” ) } Risultato Title Artist Pearl Days Elisa Restituisce tutte le risorse per le quali l’attributo artist comincia per “el” ignorando la distinzione fra maiuscole e minuscole. Costrutti speciali SELECT DISTINCT ?title ?artist ORDER BY DESC(?autore) LIMIT 10 OFFSET 10 Esempio 2: Human Ontology (Classes) Animal rdfs:subClassOf rdfs:subClassOf rdfs:subClassOf Male Person Female rdfs:subClassOf rdfs:subClassOf rdfs:subClassOf rdfs:subClassOf rdfs:subClassOf rdfs:subClassOf Man Lecturer Researcher Woman Esempio 2: Human Ontology (ObjectProperty) rdfs:domain Animal hasAncestor rdfs:subPropertyOf Animal rdfs:range hasParent rdfs:range Female rdfs:range hasMother hasFather rdfs:subPropertyOf rdfs:domain rdfs:subPropertyOf rdfs:domain Animal hasSister Male Animal hasBrother rdfs:range rdfs:domain Female rdfs:range rdfs:domain Person hasFriend Male Person hasSpouse rdfs:range Person rdfs:range Person Esempio 2: Human Ontology (DataType Property) rdfs:domain rdfs:domain Person Animal shirtSize age rdfs:range Integer rdfs:range rdfs:domain Integer rdfs:domain Person trouserssize Person name rdfs:range Integer rdfs:range String Istanze isA Lecturer isA Eve isA Man Harry hasFriend isA hasChild Person hasSpouse John hasSpouse hasFriend age Alice David 14 hasFriend shoeSize Sophie isA 37 hasFather hasFriend Gastone Researcher Mark age 16 shoeSize 39 hasChild Jack (…) Query su Classi SELECT ?x WHERE { ?x rdf:type rdfs:Class } X Animal Male Person Female man Lecturer Researcher Woman Sussunzioni SELECT ?x ?y WHERE { ?x rdfs:subClassOf ?y } X Male Person Female Man Man Man Woman Woman Woman Lecturer Lecturer … Y Animal Animal Animal Animal Male Person Animal Female Person Animal Person … Proprietà: Persone Sposate SELECT ?x ?y WHERE { ?x humans:hasSpouse ?y } X Harry Eve Y Sophie David Uomini Sposati SELECT * WHERE { ?x humans:hasSpouse ?y . ?x rdf:type humans:Male } Answer Numero di Persone di cui Y è amico SELECT ?x ?y count(?x) as ?conteggio group ?y WHERE { ?x humans:hasFriend ?y } Y Gastone Alice John COUNT 1 2 1 Persone con almeno un parente SELECT DISTINCT ?x WHERE { { ?y humans:hasChild ?x } UNION { ?x humans:hasParent ?y } } Le persone e la loro età (se nota) SELECT ?person ?age WHERE { ?person rdf:type humans:Person OPTIONAL { ?person humans:age ?age } } Maggiorenni SELECT ?x WHERE { ?x humans:age ?age FILTER ( xsd:integer(?age) >= 18 ) } E’ Mark Maggiorenne? ASK WHERE { #Mark humans:age ?age FILTER ( xsd:integer(?age) >= 18 ) } Tutte le persone che non sono ricercatori. SELECT ?x WHERE { ?x rdf:type humans:Person OPTIONAL { ?x rdf:type ?t FILTER ( ?t = humans:Researcher ) } FILTER ( ! bound( ?t ) ) } Antenati SELECT ?x ?y WHERE { ?x humans:hasAncestor ?y } Questa query restituisce ovviamente, anche tutte le istanze delle sottoproprietà hasFather ed HasParent Bibliografia RDF/RDFS SPECIFICATION Semantic web tutorial: RDF, RDFS and SPARQL using CORESE http://www.w3.org/RDF/ http://www-sop.inria.fr/acacia/soft/corese/tutorial.php CORESE (Open Source Software per interrogare file RDF) http://www-sop.inria.fr/teams/edelweiss/wiki/wakka.php?wiki=Corese