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.

Configuriamo Liferay IDE e creiamo una Portlet di esempio
Tutorial Apache POI: scriviamo e leggiamo un documento Word
Sviluppare un’applicazione web Ajax con Java ed Ext JS

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:

LINGUAGGIO URI
RDFS http://www.w3.org/2000/01/rdf-schema#
DAML+OIL http://www.daml.org/2001/03/daml+oil#
OWL FULL http://www.w3.org/2002/07/owl#
OWL DL http://www.w3.org/TR/owl-features/#term_OWLDL
OWL LITE http://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
DISQUS: 0