Interrogare i dati catalografici del CoBiS LOD con SPARQL

Dopo aver raccontato le scelte ontologiche per la descrizione del progetto nell’articolo le ontologie e la struttura dei dati catalografici del CoBiS LOD, l’obiettivo è apprendere come è possibile scoprire la struttura dell’ontologia nello specifico interrogando con il linguaggio SPARQL l’endpoint  del CoBiS a partire da nessuna informazione di base. 

Cos’è SPARQL

SPARQL (SPARQL Protocol and RDF Query Language) è un linguaggio di interrogazione che permette di estrarre informazioni, rappresentate tramite il Resource Description Framework (RDF), da una base di conoscenza distribuita sul Web.

Le informazioni sono descritte tramite triple che seguono una struttura soggetto-predicato-oggetto.

Per interrogare i dati è necessario tradurre la domanda in un linguaggio macchina e inserire istruzioni che seguono questa sintassi tripartita per la descrizione dei concetti e delle loro relazioni.

Ad esempio, per tradurre all’elaboratore “quali sono tutte le classi del grafo?” è necessario scrivere la domanda in questo modo:

SELECT distinct ?o

WHERE {?s rdf:type ?o .}

Le istruzioni inserite seguono la forma tripartita soggetto – predicato – oggetto (?s ?p ?o) e la proprietà generica rdf:type permette di esplorare il grafo facendo conoscere all’utente, che non conosce l’ontologia, la tipologia a cui appartengono i dati conservati. Come si imposta una query?

Struttura di una query SPARQL

Una query è composta da tre parti: prefix, select, where.

struttura queryCome prima cosa vanno espressi per esteso gli IRI dei prefissi delle ontologie utilizzate per descrivere le risorse. 

Nella SELECT si inserisce la domanda con le informazioni che si vogliono ottenere sotto forma di variabili: nel caso dell’immagine, inserire la variabile ?p equivale alla domanda “quali sono tutte le proprietà che legano una risorsa a un valore?”. 

Invece, nella WHERE si inseriscono le informazioni sulla natura dei dati da cercare e quindi le istruzioni che permettono di navigare il grafo: nel caso del nostro esempio, si chiede di cercare tra tutte le proprietà che riguardano però le risorse che appartengono alla tipologia Work (livello opera dell’ontologia).

Attraverso le indicazioni inserite la query fornisce le specifiche informazioni richieste: tutte le proprietà che mettono in relazione una risorsa di tipo Work (opera, il livello più astratto dell’ontologia) con i relativi valori.

Di seguito, gli esempi di query e le immagini proposte aiutano a capire come si relazionano i diversi livelli tra loro a partire dal Work (opera): per ogni livello dell’ontologia scelta (le classi Work, Instance, Item), la query richiede di mostrare le proprietà che collegano le risorse di quella classe ai propri dati. 

Ad esempio, volendo tradurre la domanda “quali sono le proprietà che riguardano le relazioni degli elementi di tipo Work?” si può scrivere:
work

SELECT distinct ?p 

WHERE {?work rdf:type bf2:Work .

       ?work ?p ?o . }

Vai ai risultati per scoprire tutte le proprietà della classe Work.

Non conoscendo gli elementi della classe Work, nè le proprietà che li legano ad altre informazioni, impostando questa query, si chiede di visualizzare come risultati le proprietà senza valori multipli (distinct) inserendo nella SELECT la variabile ?p; invece, nella WHERE si sta specificando di cercare tra tutti gli elementi (associati alla variabile ?work) di tipo Work (rdf:type bf2:Work), senza ulteriori indicazioni sui dati da cercare (?work ?p ?o).

instanceInvece, volendo conoscere tutte le proprietà che riguardano la classe Agenti di tipo Persona:

SELECT distinct ?p 

WHERE {?s rdf:type bf2:Person.

       ?s ?p ?o . }

Vai ai risultati per scoprire tutte le proprietà.

Per tradurre in linguaggio macchina la domanda “quali sono le proprietà che caratterizzano le relazioni degli elementi di tipo Instance?”:
agent

SELECT distinct ?p 

WHERE {?instance rdf:type bf2:Instance .

       ?instance ?p ?o . }

Vai ai risultati per scoprire tutte le proprietà di una edizione.

Modificando il valore bf2:Instance della tripla con bf2:Item si possono ottenere tutte le proprietà relative agli elementi di tipo Item.
item

SELECT distinct ?p 

WHERE {?item rdf:type bf2:Item .

       ?item ?p ?o . }

Vai ai risultati per scoprire tutte le proprietà della classe item.

Con la concatenazione di triple è possibile descrivere informazioni complesse che possono essere esplorate navigando il grafo; infatti, con i prossimi articoli si approfondiranno i dati del catalogo con l’impostazione di query SPARQL specifiche per il dominio bibliografico.

Per saperne di più continuate a seguire il sito del CoBiS e i canali social.