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.
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