Il progetto tratta la ricerca sui formati di metadatazione standardizzata per videoclip digitali e costruzione di un'ontologia che permetta la ricerca e descrizione semantica di un videoclip di un evento sportivo di tipo motoristico, in particolare MotoGP. Successivamente la realizzazione di un'applicazione con il framework JENA che faccia una ricerca SPARQL in due dataset remoti, in particolare il dataset Dorna (Fornito da terzi, vedi Dorna.json) e il dataset DBPedia. Ed infine, sempre con quest'ultima applicazione, la popolazione dell'ontologia precedentemente creata con il dataset di individui appena estratto.
Per questo progetto sono state prese le seguenti scelte architetturali:
- Protégé: per la creazione e l'annotazione dell'ontologia
- Apache Jena: framework utilizzato per l'implementazione dell'applicazione di ricerca e popolamento dell'ontologia (Java).
- Fuseki: Java SPARQL web server per la visualizzazione dei dati dell'ontologia appena popolata.
-
Homework.java: contiene il processo principale dell'applicazione:
- Importazione dell'ontologia creata,
- Data ingestion da JSON Dorna e DBPedia tramite ricerca SPARQL,
- Creazione di individui descritti dalle proprietà appena estratte,
- Popolamento dell'ontologia ed esportazione in formato RDF,
- Aggiuta degli individui su web server Fuseki.
-
Functions.java: contiene le funzioni generalizzate per:
- Creazione modello con framework Jena
- Generazione di query SPARQL per interrogare un determinato dataset specifico
- Creazione individui con specifiche proprietà
- Mapping di dati
- Aggiunta di individui su web server Fuseki
Come precedentemente spiegato il file Functions.java contiene funzioni generalizzate che interrogano uno specifico dataset. In questo caso il progetto contiene unicamente il collegamento al dataset DBPedia. Per aggiungere un dataset bisogna specificare il comportamento modificando le seguenti funzioni:
public static String GetSourceQuery(String source, String className)
Questa funzione permette di creare query specifiche per specifici dataset. L'implementazione corrente presenta la query sui rider sul dataset DBPedia, così fatta:
case "dbpedia":
switch(className) {
case "rider":
return GetSourceQueryPrefix(source) +
"SELECT ?name ?bd ?team ?bikeNumber {\r\n" +
"dbpedia:%s dbpedia-owl:birthDate ?bd .\r\n" +
"dbpedia:%s foaf:name ?name .\r\n" +
"dbpedia:%s dbp:bikeNumber ?bikeNumber .\r\n" +
"dbpedia:%s dbpedia-owl:team ?team .\r\n" +
"}";
default:
return "";
}
E' possibile aggiungere una query su una determinata classe aggiungendo un case all'interno dello switch del dataset generato. E' inoltre possibile aggiungere query su classi di altri dataset specificando la nuova sorgente nello switch(source)
.
public static String GetSourceQueryPrefix(String source)
Questa funzione ritona i prefissi SPARQL necessari al corretto funzionamento delle query descritte nella funzione precedente. Aggiungendo un dataset è necessario aggiungere un case specifico allo switch interno alla funzione.
Il codice presenta una documentazione XML al suo interno con la spiegazione di ogni funzione nello specifico (Consultare i file Homework.java e Functions.java).