All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.clarkparsia.modularity.io.ModuleExtractorPersistence Maven / Gradle / Ivy

There is a newer version: 2.3.6-ansell
Show newest version
// Copyright (c) 2006 - 2008, Clark & Parsia, LLC. 
// This source code is available under the terms of the Affero General Public
// License v3.
//
// Please see LICENSE.txt for full license terms, including the availability of
// proprietary exceptions.
// Questions, comments, or requests for clarification: [email protected]

package com.clarkparsia.modularity.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.mindswap.pellet.utils.MultiValueMap;
import org.semanticweb.owlapi.formats.OWLXMLOntologyFormat;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLEntity;
import org.semanticweb.owlapi.model.OWLException;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;

import com.clarkparsia.owlapiv3.OWL;

/**
 * 

* Title: *

*

* Description: *

*

* Copyright: Copyright (c) 2009 *

*

* Company: Clark & Parsia, LLC. *

* * Provides methods that serialize and deserialize AbstractModuleExtractor * * @author Blazej Bulka */ public class ModuleExtractorPersistence { public static final Logger log = Logger.getLogger( ModuleExtractorPersistence.class .getName() ); /** * Saves the axioms from the ModuleExtractor in the form of an ontology containing these axioms. * * @param axioms the axioms to be saved * @param outputStream the output stream where the axioms should be saved * @throws IOException if an error occurs during the save process */ public static void saveAxioms( Collection axioms, OutputStream outputStream ) throws IOException { try { OWLOntology ontology = OWL.Ontology( axioms ); OWL.manager.saveOntology( ontology, new OWLXMLOntologyFormat(), outputStream ); outputStream.flush(); OWL.manager.removeOntology( ontology ); } catch( OWLException e ) { log.log( Level.SEVERE, "A problem occurred during creation or saving the ontology with axioms for the ModuleExtractor", e ); throw new IOException( "A problem occurred during creation or saving the ontology with axioms for the ModuleExtractor" ); } } private static final String MODULE_BEGIN_KEYWORD = "MODULE"; private static final String MODULE_END_KEYWORD = "END"; private static final String CLASS_KEYWORD = "class"; private static final String DATA_TYPE_KEYWORD = "datatype"; private static final String INDIVIDUAL_KEYWORD = "individual"; private static final String DATA_PROPERTY_KEYWORD = "dataproperty"; private static final String OBJECT_PROPERTY_KEYWORD = "objectproperty"; private static String getTypeKeywordForEntity( OWLEntity owlEntity ) throws IllegalArgumentException { if( owlEntity.isOWLClass() ) { return CLASS_KEYWORD; } else if ( owlEntity.isOWLDatatype() ) { return DATA_TYPE_KEYWORD; } else if ( owlEntity.isOWLNamedIndividual() ) { return INDIVIDUAL_KEYWORD; } else if ( owlEntity.isOWLDataProperty() ) { return DATA_PROPERTY_KEYWORD; } else if ( owlEntity.isOWLObjectProperty() ) { return OBJECT_PROPERTY_KEYWORD; } throw new IllegalArgumentException( "Unrecognized type of OWLEntity: " + owlEntity.getClass() ); } private static String getModuleBegin( OWLEntity module ) { StringBuffer result = new StringBuffer( MODULE_BEGIN_KEYWORD ); result.append( " " ); result.append( getTypeKeywordForEntity( module ) ); result.append( " " ); result.append( module.getIRI() ); return result.toString(); } private static String getModuleMember( OWLEntity member ) { return getTypeKeywordForEntity( member ) + " " + member.getIRI(); } private static String getModuleEnd() { return MODULE_END_KEYWORD; } /** * Saves the information about modules from ModuleExtractor to an output stream as an ontology of modules annotated with URIs of the OWL entities * that belong to the respective modules. * * @param modules the modules to be saved * @param outputStream the output stream where the data should be saved * @throws IOException if an error should occur during the save process */ public static void saveModules( MultiValueMap modules, OutputStream outputStream ) throws IOException { PrintWriter pw = new PrintWriter( outputStream ); for ( Entry> entry : modules.entrySet() ) { OWLEntity entity = entry.getKey(); Set module = entry.getValue(); pw.println( getModuleBegin( entity ) ); for( OWLEntity member : module ) { pw.println( getModuleMember( member ) ); } pw.println( getModuleEnd() ); } pw.flush(); } public static OWLOntology loadAxiomOntology( InputStream inputStream ) throws IOException { try { return OWL.manager.loadOntologyFromOntologyDocument( inputStream ); } catch( OWLOntologyCreationException e ) { log.log( Level.SEVERE, "Unable to create an ontology", e ); throw new IOException( "Unable to create an ontology" ); } } /** * Loads the ontology with axioms (for ModuleExtractor) from an input stream. * * @param inputStream the input stream from which to load the ontology. * @return the collection of axioms read from the ontology * @throws IOException if an error should occur during the read operation */ public static Collection loadAxioms( InputStream inputStream ) throws IOException { return loadAxiomOntology( inputStream ).getAxioms(); } private static OWLEntity createEntity( String type, String entityIRI ) { if ( CLASS_KEYWORD.equals( type ) ) { return OWL.Class( entityIRI ); } else if ( DATA_TYPE_KEYWORD.equals( type ) ) { return OWL.Datatype( entityIRI ); } else if ( INDIVIDUAL_KEYWORD.equals( type ) ) { return OWL.Individual( entityIRI ); } else if ( DATA_PROPERTY_KEYWORD.equals( type ) ) { return OWL.DataProperty( entityIRI ); } else if ( OBJECT_PROPERTY_KEYWORD.equals( type ) ) { return OWL.ObjectProperty( entityIRI ); } throw new IllegalArgumentException( "Unrecognized type of OWLEntity in module " + type); } private static OWLEntity readModuleInformation( String moduleBeginLine ) throws IOException { StringTokenizer tokenizer = new StringTokenizer( moduleBeginLine ); if( !tokenizer.hasMoreElements() ) { throw new IOException( "Premature end of line; module " + MODULE_BEGIN_KEYWORD + " expected: " + moduleBeginLine); } tokenizer.nextToken(); // discard the MODULE_BEGIN_KEYWORD if( !tokenizer.hasMoreElements() ) { throw new IOException( "Premature end of line; entity type information expected: " + moduleBeginLine); } String entityType = tokenizer.nextToken(); if( !tokenizer.hasMoreElements() ) { throw new IOException( "Premature end of line; module URI expected: " + moduleBeginLine); } String iriString = tokenizer.nextToken(); if( tokenizer.hasMoreElements() ) { throw new IOException( "Trailing tokens on the line: " + moduleBeginLine ); } return createEntity( entityType, iriString ); } private static OWLEntity readModuleMember( String memberLine ) throws IOException { StringTokenizer tokenizer = new StringTokenizer( memberLine ); if( !tokenizer.hasMoreElements() ) { throw new IOException( "Premature end of line; entity type information expected: " + memberLine); } String entityType = tokenizer.nextToken(); if( !tokenizer.hasMoreElements() ) { throw new IOException( "Premature end of line; module member URI expected: " + memberLine); } String iriString = tokenizer.nextToken(); if( tokenizer.hasMoreElements() ) { throw new IOException( "Trailing tokens on the line: " + memberLine ); } return createEntity( entityType, iriString ); } private static boolean readModule( LineNumberReader lnr, MultiValueMap modules ) throws IOException { String line = null; line = lnr.readLine(); if ( line == null ) { return false; } if ( !line.startsWith( MODULE_BEGIN_KEYWORD )) { throw new IOException( "Invalid information in the module file (line " + lnr.getLineNumber() + "). " + MODULE_BEGIN_KEYWORD + " expected." ); } OWLEntity module = readModuleInformation( line.trim() ); boolean endOfModuleReached = false; Set members = new HashSet(); while( ( line = lnr.readLine() ) != null ) { if ( line.startsWith( MODULE_END_KEYWORD )) { endOfModuleReached = true; break; } members.add( readModuleMember( line.trim() )); } if ( !endOfModuleReached ) { throw new IOException( "Premature end of file; module information not terminated." ); } modules.put( module, members ); return true; } /** * Reads information about the modules from the input stream that has the information stored in a form of ontology. * * @param inputStream the input stream from which the ontology should be read * @return the read information about the modules * @throws IOException if an error occurs during the read process. */ public static MultiValueMap loadModules( InputStream is ) throws IOException { MultiValueMap modules = new MultiValueMap(); LineNumberReader lnr = new LineNumberReader( new InputStreamReader( is ) ); while ( readModule( lnr, modules ) ) { // nothing to do } return modules; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy