Resource Description Framework (RDF)
Su internet enormi quantità di documenti di testo sono collegate tra loro attraverso l'utilizzo di hyperlinks: essendo puro testo, questo pone delle difficoltà per, uomo o macchina, estrarre delle informazioni salienti, dei fatti.
RDF è un formato che genera quello che viene chiamato un database a grafo , che è una modalità diversa per la persistenza dei dati, differenziandosi dai classici database relazionali o i formati JSON o XML. Questo tipo di databse è quello che è alla base del web semantico.
Un esempio di grafo è quello che può essere descritto dalle seguenti tre affermazioni:
- Bengie è un cane
- Bonnie è un gatto
- Bengie e Bonnie sono amici
Le frecce nel diagramma precendent si chiamano proprietà, spesso vengono chiamate predicati.
RDF Data Model
Un Data Model, in Resource Description Framework (RDF), ovvero la codifica W3C per la codifica e lo scambio di metadati strutturati, è la rappresentazione di un'entità, o di un dominio.
Il modello di dati di RDF è formato da tre entità:
- Risorse: qualsiasi cosa descritta viene chiamata risorsa, e identificata da un URI (Uniform Resource Identifier)
- Proprietà: sono delle relazioni che legano tra loro risorse e risorse, o risorse e valori. Anch'esse sono identificate da un URI
- Valori: sono dei dati primitivi, come un valore intero o una stringa che contiene l'URI di una risorsa
Lo statement, o affermazione, è una tripla di tipo Soggetto – Predicato – Oggetto, dove:
- il soggetto è una risorsa
- il predicato è una proprietà
- l'oggetto è un valore, o anche un URI che punta ad un'altra risorsa
Questo modello di dati è astratto e non specifica nessun meccanismo o formato per dichiarare le entità, questo è il compito dell'RDF Schema.
Esempio di Data Model
Immaginiamo di voler rappresentare informazioni riguardanti un libro all'interno di una biblioteca digitale. In questo caso, il libro sarà la nostra "risorsa" principale.
- Risorsa (Soggetto): Un libro specifico identificato dall'URI
http://biblioteca.esempio/libri/ISBN1234567890
- Proprietà (Predicato): Alcune proprietà comuni che potremmo voler descrivere per un libro includono:
http://purl.org/dc/elements/1.1/title
per il titolo del librohttp://purl.org/dc/elements/1.1/creator
per l'autore del librohttp://purl.org/dc/elements/1.1/publishedDate
per la data di pubblicazionehttp://purl.org/dc/elements/1.1/language
per la lingua del testo
- Valori (Oggetto): Per ciascuna delle proprietà sopra elencate, assegneremo un valore corrispondente. Ad esempio:
- Per il titolo: "Le avventure di Pinocchio" (una stringa)
- Per l'autore: "Carlo Collodi" (una stringa)
- Per la data di pubblicazione: "1883" (un valore intero o una stringa, a seconda della rappresentazione scelta)
- Per la lingua: "Italiano" (una stringa)
Quindi, per rappresentare queste informazioni in RDF, creeremmo le seguenti triple:
- (
http://biblioteca.esempio/libri/ISBN1234567890
,http://purl.org/dc/elements/1.1/title
, "Le avventure di Pinocchio") - (
http://biblioteca.esempio/libri/ISBN1234567890
,http://purl.org/dc/elements/1.1/creator
, "Carlo Collodi") - (
http://biblioteca.esempio/libri/ISBN1234567890
,http://purl.org/dc/elements/1.1/publishedDate
, "1883") - (
http://biblioteca.esempio/libri/ISBN1234567890
,http://purl.org/dc/elements/1.1/language
, "Italiano")
Esempio in formato RDF (XML)
Il modello RDF è rappresentabile da un grafo orientato i cui nodi sono risorse o valori, e i cui archi sono le proprietà.
Qui sotto si trova un esempio di RDF, nel formato XML:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:feature="https://www.linkeddatatools.com/clothing-features#"> <rdf:Description rdf:about="https://www.linkeddatatools.com/clothes#t-shirt"> <feature:size>12</feature:size> <feature:color rdf:resource="https://www.linkeddatatools.com/colors#white"/> </rdf:Description> </rdf:RDF>
La parte del tag <rdf:Description></rdf:Description> e di ciò che vi è incluso è la tripla RDF, visualizzata nell'immagine in basso:
Ontologie, RDF Schema e OWL
Le ontologie permettono di definire relazioni tra entità all'interno di un vocabolario predefinito. Questo ha numerosi vantaggi tra i quali quello di permettere un interscambio dei dati nel momento in cui due fonti si rifanno a una stessa ontologia di base.
Le ontologie RDF possono essere scritte utilizzando due sintassi: RDFS e OWL.
Un esempio di OWL è il seguente:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <owl:Ontology rdf:about="https://www.linkeddatatools.com/plants"> <dc:title>The LinkedDataTools.com Example Plant Ontology</dc:title> <dc:description>An example ontology written for the LinkedDataTools.com RDFS & OWL introduction tutorial</dc:description> </owl:Ontology> <owl:Class rdf:about="https://www.linkeddatatools.com/plants#planttype"> <rdfs:label>The plant type</rdfs:label> <rdfs:comment>The class of plant types.</rdfs:comment> </owl:Class> </rdf:RDF>
E' interessante notare che sulla linea 5 si stabilisce che il namespace dc è importato dai Dublin Core Metadata Initiative, il namespace owl da http://www.w3.org/2002/07/owl: questo aggiunge termini al vocabolario base.
RDF vs RDFS
La differenza principale con RDF è che OWL sta effettivamente specificando i metadati, cioè l'ontologia, e non le reali istanze delle classi. Da notare che stiamo definendo l'ontologia in RDF, cioè l'ontologia stessa è un documento RDF.
RDF è il concetto di descrivere le cose utilizzando delle triple. RDF è anche un vocabolario, specificato a questo URL, che permette di descrivere entità, mentre RDFS è un vocabolario per creare/definire classi.
Esempio completo
In questo esempio vengono definite tre classi con OWL:
- planttype
- flowers come sottoclasse di planttype
- shrubs come sottoclasse di planttype
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:plants="https://www.linkeddatatools.com/plants#"> <owl:Class rdf:about="https://www.linkeddatatools.com/plants#planttype"> <rdfs:label>The plant type</rdfs:label> <rdfs:comment>The class of all plant types.</rdfs:comment> </owl:Class> <owl:Class rdf:about="https://www.linkeddatatools.com/plants#flowers"> <rdfs:subClassOf rdf:resource="https://www.linkeddatatools.com/plants#planttype"/> <rdfs:label>Flowering plants</rdfs:label> <rdfs:comment>Flowering plants, also known as angiosperms.</rdfs:comment> </owl:Class> <owl:Class rdf:about="https://www.linkeddatatools.com/plants#shrubs"> <rdfs:subClassOf rdf:resource="https://www.linkeddatatools.com/plants#planttype"/> <rdfs:label>Shrubbery</rdfs:label> <rdfs:comment>Shrubs, a type of plant which branches from the base.</rdfs:comment> </rdf:RDF>
Infine, viene istanziata con RDF una'istanza, "magnolia", di tipo flowers e con la proprietà "family", un'orchidea, e una proprietà "similarlyPopularTo". Per la spiegazione dell'esempio completo si veda questo link.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:plants="https://www.linkeddatatools.com/plants#"> <owl:DatatypeProperty rdf:about="https://www.linkeddatatools.com/plants#family"/> <owl:ObjectProperty rdf:about="https://www.linkeddatatools.com/plants#similarlyPopularTo"/> <rdf:Description rdf:about="https://www.linkeddatatools.com/plants#orchid"> <rdf:type rdf:resource="https://www.linkeddatatools.com/plants#flowers"/> <plants:family>Orchidaceae</plants:family> <plants:similarlyPopularTo rdf:resource="https://www.linkeddatatools.com/plants#magnolia"/> </rdf:Description> <rdf:Description rdf:about="https://www.linkeddatatools.com/plants#magnolia"> <rdf:type rdf:resource="https://www.linkeddatatools.com/plants#flowers"/> <plants:family>Magnoliaceae</plants:family> <plants:similarlyPopularTo rdf:resource="https://www.linkeddatatools.com/plants#orchid"/> </rdf:Description> </rdf:RDF>
Link
https://www.linkeddatatools.com/introducing-rdf/