Jena: un framework per il Semantic Web per Java

Jena: un framework per il Semantic Web per Java

Nel seguente articolo abbiamo dato una definizione preliminare di cosa dia il Semantic Web, in questo post vedremo invece una delle tecnologie abilitanti: il framework Jena.Si tratta di un progetto open source, che ha beneficiato dell'apporto di professionalità offerto dai laboratori HP. Jena è stato inizialmente sviluppato per la realizzazione di applicazioni, che supportassero RDF e RDFS, ma successivamente esteso verso i linguaggi per le ontologie tra i quali DAML+OIL e OWL.

Configurazione di Liferay per database MySql
Creare un file eseguibile .exe per le applicazioni Java con Launch4j
JasperReports: una libreria Java per creare Report

Nel seguente articolo abbiamo dato una definizione preliminare di cosa sia il Semantic Web, in questo post vedremo invece una delle tecnologie abilitanti: il framework Jena.

Si tratta di un progetto open source, che ha beneficiato dell’apporto di professionalità offerto dai laboratori HP. Jena è stato inizialmente sviluppato per la realizzazione di applicazioni, che supportassero RDF e RDFS, ma successivamente esteso verso i linguaggi per le ontologie tra i quali DAML+OIL e OWL.

Principalmente il framework permette e contiene:

  • RDF API;
  • la lettura e scrittura RDF in RDF/XML, N3 e N-Triples;
  • OWL API;
  • la memorizzazione persistente e In-Memory;
  • un motore di query SPARQL

Ci sono vari tipi di linguaggi per le Ontologie che vanno dal più espressivo, l’OWL Full a quello più semplice RDFS, il framework Jena mira a fornire, tramite l’Ontology API, una interfaccia di programmazione coerente, indipendentemente dal linguaggio utilizzato. Ciò è realizzato mettendo a disposizione una interfaccia comune a tutte le tipologie di linguaggio, l’interfaccia OntModel.

Per poter creare un modello di ontologia utilizziamo il metodo createDefaultModel() di ModelFactory:


Model m = ModelFactory.createDefaultModel();

Così facendo creiamo una ontologia con i valori di default, cioè di tipo Owl Full, persistente in memoria ( e non su un DB) e con inferenza limitata a RDFS (solo gerarchie di tipo sottoclasse e sottoproprietà).

Per cambiare queste impostazioni, possiamo passare come parametro del metodo un modello:


OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );

Possiamo anche specificare solo il linguaggio che vogliamo utilizzare lasciando il resto come default, passando al ModelFactory l’URI String del linguaggio, come riportato in tabella:

LINGUAGGIOURI
RDFShttp://www.w3.org/2000/01/rdf-schema#
DAML+OILhttp://www.daml.org/2001/03/daml+oil#
OWL FULLhttp://www.w3.org/2002/07/owl#
OWL DLhttp://www.w3.org/TR/owl-features/#term_OWLDL
OWL LITEhttp://www.w3.org/TR/owl-features/#term_OWLLite

Esiste comunque una classe ProfileRegistry che ha delle costanti definite con queste URI:

OntModel m = ModelFactory.createOntologyModel( ProfileRegistry.DAML_LANG );

Istanziato il modello possiamo leggere ed importare una ontologia utilizzando il metodo read di OntModel:

// Creiamo il modello e passiamogli l'URL dell'ontologia da leggere
String SOURCE = "http://www.eswc2006.org/technologies/ontology";
OntModel base = ModelFactory.createOntologyModel( OWL_MEM );
base.read( SOURCE, "RDF/XML" );

Come secondo parametro abbiamo fissato il linguaggio utilizzato nell’ontologia.

Ottenuto il modello possiamo recuperare le classi utilizzando il metodo getOntClass ed il namespace della nostra ontologia:

String SOURCE = "http://www.eswc2006.org/technologies/ontology#";
OntClass paper = m.getOntClass( NS + "Paper" );

Per creare invece una nuova classe:

OntClass bestPaper = m.createClass( NS + "BestPaper" );

Possiamo inoltre interrogare la nostra classe per conoscere tutte le sue sottoclassi:

OntClass artefact = m.getOntClass( NS + "Artefact" );
for (Iterator i = artefact.listSubClasses(); i.hasNext(); ) {
OntClass c = (OntClass) i.next();
System.out.println( c.getURI() );
}

COMMENTS

WORDPRESS: 0