Package pellet

Source Code of pellet.PelletModularity

// Copyright (c) 2006 - 2008, Clark & Parsia, LLC. <http://www.clarkparsia.com>
// 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: licensing@clarkparsia.com

package pellet;

import static pellet.PelletCmdOptionArg.REQUIRED;

import java.util.HashSet;
import java.util.Set;

import org.semanticweb.owlapi.io.RDFXMLOntologyFormat;
import org.semanticweb.owlapi.io.SystemOutDocumentTarget;
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 uk.ac.manchester.cs.owlapi.modularity.ModuleType;

import com.clarkparsia.modularity.ModularityUtils;
import com.clarkparsia.owlapiv3.OntologyUtils;
import com.clarkparsia.pellet.owlapiv3.OWLAPILoader;


/**
* <p>
* Title: PelletModularity
* </p>
* <p>
* Description:
* </p>
* <p>
* Copyright: Copyright (c) 2008
* </p>
* <p>
* Company: Clark & Parsia, LLC. <http://www.clarkparsia.com>
* </p>
*
* @author Markus Stocker
*/
public class PelletModularity extends PelletCmdApp {

  private OWLAPILoader  loader;
  private ModuleType    moduleType;
  private String[]     entityNames;

  public PelletModularity() {
  }

  @Override
  public String getAppCmd() {
    return "pellet modularity " + getMandatoryOptions() + "[options] <file URI>...";
  }

  @Override
  public String getAppId() {
    return "PelletModularity: Extract ontology modules for classes and write it to the STDOUT";
  }

  @Override
  public PelletCmdOptions getOptions() {
    PelletCmdOptions options = getGlobalOptions();

    options.add( getIgnoreImportsOption() );
   
    PelletCmdOption option = new PelletCmdOption( "signature" );
    option.setShortOption( "s" );
    option.setType( "Space separated list" );
    option.setDescription( "One or more entity URI(s) or local name(s) to be extracted as a module. Example: \"Animal Wildlife Rainforest\"" );
    option.setIsMandatory( true );
    option.setArg( REQUIRED );
    options.add( option );

    option = new PelletCmdOption( "type" );
    option.setShortOption( "t" );
    option.setType( "lower| upper | upper-of-lower | lower-of-upper" );
    option.setDefaultValue( "lower" );
    option.setDescription( "The type of the module that will be extracted. See http://bit.ly/ontology-module-types for an explanation of the module types." );
    option.setIsMandatory( false );
    option.setArg( REQUIRED );
    options.add( option );
   
    return options;
  }

  @Override
  public void run() {
    loadEntityNames();
    loadModuleType();
    loadOntology();
    extractModule();
  }

  private void loadOntology() {
    loader = (OWLAPILoader) getLoader( "OWLAPIv3" );
    getKB();
  }
 
  private void loadEntityNames() {
    String signature = options.getOption( "signature" ).getValueAsString();

    if( signature == null )
      throw new PelletCmdException( "No signature provided" );

    entityNames = signature.split( " " );

    if( entityNames.length == 0 )
      throw new PelletCmdException( "No signature provided" );
  }
 
  private void loadModuleType() {
    String type = options.getOption( "type" ).getValueAsString();
   
    if( type.equalsIgnoreCase( "lower" ) ) {
      moduleType = ModuleType.TOP;
    }
    else if( type.equalsIgnoreCase( "upper" ) ) {
      moduleType = ModuleType.BOT;
    }
    else if( type.equalsIgnoreCase( "upper-of-lower" ) ) {
      moduleType = ModuleType.BOT_OF_TOP;
    }
    else if( type.equalsIgnoreCase( "lower-of-upper" ) ) {
      moduleType = ModuleType.TOP_OF_BOT;
    }
    else {
      throw new PelletCmdException( "Unknown module type: " + type );
    }
  }

  private void extractModule() {
    Set<OWLEntity> entities = new HashSet<OWLEntity>();
    for( String entityName : entityNames ) {
      OWLEntity entity = OntologyUtils.findEntity( entityName, loader.getAllOntologies() );
     
      if( entity == null )
        throw new PelletCmdException( "Entity not found in ontology: " + entityName );

      entities.add( entity );
    }

    Set<OWLAxiom> module = ModularityUtils.extractModule( loader.getOntology(), entities, moduleType );

    try {
      OWLOntology moduleOnt = loader.getManager().createOntology( module );
      loader.getManager().saveOntology( moduleOnt, new RDFXMLOntologyFormat(),
          new SystemOutDocumentTarget() );
    } catch( OWLException e ) {
      throw new RuntimeException( e );
    }
  }
}
TOP

Related Classes of pellet.PelletModularity

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.