📄 ontmodelspec.java
字号:
/*****************************************************************************
* Source code information
* -----------------------
* Original author Ian Dickinson, HP Labs Bristol
* Author email Ian.Dickinson@hp.com
* Package Jena 2
* Web http://sourceforge.net/projects/jena/
* Created 13-May-2003
* Filename $RCSfile: OntModelSpec.java,v $
* Revision $Revision: 1.51 $
* Release status $State: Exp $
*
* Last modified on $Date: 2007/03/08 15:24:16 $
* by $Author: chris-dollin $
*
* (c) Copyright 2002, 2003, 204, Hewlett-Packard Development Company, LP
* (see footer for full conditions)
*****************************************************************************/
// Package
///////////////
package com.hp.hpl.jena.ontology;
// Imports
///////////////
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.rdf.model.impl.*;
import com.hp.hpl.jena.reasoner.*;
import com.hp.hpl.jena.reasoner.rulesys.*;
import com.hp.hpl.jena.reasoner.rulesys.impl.WrappedReasonerFactory;
import com.hp.hpl.jena.assembler.*;
import com.hp.hpl.jena.ontology.impl.*;
import com.hp.hpl.jena.vocabulary.*;
import com.hp.hpl.jena.reasoner.transitiveReasoner.TransitiveReasonerFactory;
import com.hp.hpl.jena.shared.*;
/**
* <p>
* Encapsulates a description of the components of an ontology model, including the
* storage scheme, reasoner and language profile.
* </p>
*
* @author Ian Dickinson, HP Labs
* (<a href="mailto:Ian.Dickinson@hp.com" >email</a>)
* @version CVS $Id: OntModelSpec.java,v 1.51 2007/03/08 15:24:16 chris-dollin Exp $
*/
public class OntModelSpec extends OntModelSpecObsolete implements ModelSpec {
// Constants
//////////////////////////////////
// Static variables
//////////////////////////////////
/** A specification for OWL models that are stored in memory and do no additional entailment reasoning */
public static final OntModelSpec OWL_MEM = new OntModelSpec( ModelFactory.createMemModelMaker(), null, null, ProfileRegistry.OWL_LANG );
/** A specification for OWL models that are stored in memory and use the RDFS inferencer for additional entailments */
public static final OntModelSpec OWL_MEM_RDFS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, RDFSRuleReasonerFactory.theInstance(), ProfileRegistry.OWL_LANG );
/** A specification for OWL models that are stored in memory and use the transitive inferencer for additional entailments */
public static final OntModelSpec OWL_MEM_TRANS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, TransitiveReasonerFactory.theInstance(), ProfileRegistry.OWL_LANG );
/** A specification for OWL models that are stored in memory and use the OWL rules inference engine for additional entailments */
public static final OntModelSpec OWL_MEM_RULE_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, OWLFBRuleReasonerFactory.theInstance(), ProfileRegistry.OWL_LANG );
/** A specification for OWL models that are stored in memory and use the micro OWL rules inference engine for additional entailments */
public static final OntModelSpec OWL_MEM_MICRO_RULE_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, OWLMicroReasonerFactory.theInstance(), ProfileRegistry.OWL_LANG );
/** A specification for OWL models that are stored in memory and use the mini OWL rules inference engine for additional entailments */
public static final OntModelSpec OWL_MEM_MINI_RULE_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, OWLMiniReasonerFactory.theInstance(), ProfileRegistry.OWL_LANG );
/** A specification for OWL DL models that are stored in memory and do no additional entailment reasoning */
public static final OntModelSpec OWL_DL_MEM = new OntModelSpec( ModelFactory.createMemModelMaker(), null, null, ProfileRegistry.OWL_DL_LANG );
/** A specification for OWL DL models that are stored in memory and use the RDFS inferencer for additional entailments */
public static final OntModelSpec OWL_DL_MEM_RDFS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, RDFSRuleReasonerFactory.theInstance(), ProfileRegistry.OWL_DL_LANG );
/** A specification for OWL DL models that are stored in memory and use the transitive inferencer for additional entailments */
public static final OntModelSpec OWL_DL_MEM_TRANS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, TransitiveReasonerFactory.theInstance(), ProfileRegistry.OWL_DL_LANG );
/** A specification for OWL DL models that are stored in memory and use the OWL rules inference engine for additional entailments */
public static final OntModelSpec OWL_DL_MEM_RULE_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, OWLFBRuleReasonerFactory.theInstance(), ProfileRegistry.OWL_DL_LANG );
/** A specification for OWL Lite models that are stored in memory and do no entailment additional reasoning */
public static final OntModelSpec OWL_LITE_MEM = new OntModelSpec( ModelFactory.createMemModelMaker(), null, null, ProfileRegistry.OWL_LITE_LANG );
/** A specification for OWL Lite models that are stored in memory and use the transitive inferencer for additional entailments */
public static final OntModelSpec OWL_LITE_MEM_TRANS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, TransitiveReasonerFactory.theInstance(), ProfileRegistry.OWL_LITE_LANG );
/** A specification for OWL Lite models that are stored in memory and use the RDFS inferencer for additional entailments */
public static final OntModelSpec OWL_LITE_MEM_RDFS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, RDFSRuleReasonerFactory.theInstance(), ProfileRegistry.OWL_LITE_LANG );
/** A specification for OWL Lite models that are stored in memory and use the OWL rules inference engine for additional entailments */
public static final OntModelSpec OWL_LITE_MEM_RULES_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, OWLFBRuleReasonerFactory.theInstance(), ProfileRegistry.OWL_LITE_LANG );
/** A specification for DAML models that are stored in memory and do no additional entailment reasoning */
public static final OntModelSpec DAML_MEM = new OntModelSpec( ModelFactory.createMemModelMaker(), null, null, ProfileRegistry.DAML_LANG );
/** A specification for DAML models that are stored in memory and use the transitive reasoner for entailments */
public static final OntModelSpec DAML_MEM_TRANS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, TransitiveReasonerFactory.theInstance(), ProfileRegistry.DAML_LANG );
/** A specification for DAML models that are stored in memory and use the RDFS inferencer for additional entailments */
public static final OntModelSpec DAML_MEM_RDFS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, RDFSRuleReasonerFactory.theInstance(), ProfileRegistry.DAML_LANG );
/** A specification for DAML models that are stored in memory and use a subset of the DAML semantic model additional entailments */
public static final OntModelSpec DAML_MEM_RULE_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, DAMLMicroReasonerFactory.theInstance(), ProfileRegistry.DAML_LANG );
/** A specification for RDFS ontology models that are stored in memory and do no additional entailment reasoning */
public static final OntModelSpec RDFS_MEM = new OntModelSpec( ModelFactory.createMemModelMaker(), null, null, ProfileRegistry.RDFS_LANG );
/** A specification for RDFS ontology models that are stored in memory and use the transitive reasoner for entailments */
public static final OntModelSpec RDFS_MEM_TRANS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, TransitiveReasonerFactory.theInstance(), ProfileRegistry.RDFS_LANG );
/** A specification for RDFS ontology models that are stored in memory and use the RDFS inferencer for additional entailments */
public static final OntModelSpec RDFS_MEM_RDFS_INF = new OntModelSpec( ModelFactory.createMemModelMaker(), null, RDFSRuleReasonerFactory.theInstance(), ProfileRegistry.RDFS_LANG );
// Instance variables
//////////////////////////////////
/** The specification document manager */
protected OntDocumentManager m_docManager = null;
/** The specification reasoner */
protected Reasoner m_reasoner = null;
/** The language URI for the ontology */
protected String m_languageURI;
/** The ontology language profile */
protected Profile m_profile = null;
/** The reasoner factory for creating the reasoner on demand */
protected ReasonerFactory m_rFactory = null;
/** The ModelMaker used for creating imported models */
protected ModelMaker m_importsMaker;
/** the name of the base model in the baseModelMaker, if specified */
protected String m_baseModelName;
/** the ModelGetter which will be used - eventually - for imports */
protected ModelGetter importModelGetter;
// Constructors
//////////////////////////////////
/**
* <p>Construct a new ontology model specification with the given specification parameters</p>
* @param importsMaker The model maker, which will be used to construct stores for statements in the
* imported ontologies and the base ontology. Use null to get a default (memory) model maker.
* @param docMgr The document manager, or null for the default document manager.
* @param rFactory The factory for the reasoner to use to infer additional triples in the model, or null for no reasoner
* @param languageURI The URI of the ontology language. Required.
*/
public OntModelSpec( ModelMaker importsMaker, OntDocumentManager docMgr, ReasonerFactory rFactory, String languageURI ) {
this( ModelFactory.createMemModelMaker(), importsMaker, docMgr, rFactory, languageURI );
}
/**
* Construct a new ontology model specification from the supplied components.
* @param baseMaker the model-maker to use for the base model
* @param importsMaker the model-maker to use for imported models
* @param docMgr the document manager (null for the default manager)
* @param rFactory the reasoner (null for no reasoner)
* @param languageURI the ontology language URI (must not be null)
*/
public OntModelSpec( ModelMaker baseMaker, ModelMaker importsMaker, OntDocumentManager docMgr,
ReasonerFactory rFactory, String languageURI ) {
this( null, baseMaker, importsMaker, docMgr, rFactory, languageURI );
}
/**
* Construct a new ontology model specification from the supplied components.
* @param baseModelName the name of the model in the baseModelMaker
* @param baseMaker the model-maker to use for the base model
* @param importsMaker the model-maker to use for imported models
* @param docMgr the document manager (null for the default manager)
* @param rFactory the reasoner (null for no reasoner)
* @param languageURI the ontology language URI (must not be null)
*/
public OntModelSpec( String baseModelName, ModelMaker baseMaker,
ModelMaker importsMaker, OntDocumentManager docMgr,
ReasonerFactory rFactory, String languageURI ) {
super( baseMaker );
m_baseModelName = baseModelName;
m_importsMaker = importsMaker == null ? ModelFactory.createMemModelMaker() : importsMaker;
setDocumentManager( docMgr );
setReasonerFactory( rFactory );
if (languageURI == null) {
throw new IllegalArgumentException( "Cannot create OntModelSpec with a null ontology language" );
}
setLanguage( languageURI );
}
/**
* <p>Create one model spec as a copy of another. This is useful when what is required is similar to
* an existing spec, but with some changes. <strong>Note:</strong> this is only a shallow copy, so the
* structured objects (reasoners, document managers, etc) are not themselves copied. Thus, even after
* calling this copy constructor, making a change to the document manager in the copy specification
* will also affect the one that the copy was made from. The correct idiom is to replace the object
* before side-effecting it, e.g:
* <code><pre>
* OntModelSpec newSpec = new OntModelSpec( existingSpec );
* newSpec.setDocumentManager( new OntDocumentManager() );
* newSpec.getDocumentManager().setMetaDataSearchPath( "..." );
* </pre></code>
* @param spec
*/
public OntModelSpec( OntModelSpec spec ) {
this( spec.getBaseModelMaker(), spec.getImportModelMaker(), spec.getDocumentManager(),
spec.getReasonerFactory(), spec.getLanguage() );
}
public boolean equals( Object other )
{ return other instanceof OntModelSpec && same( (OntModelSpec) other );}
private boolean same( OntModelSpec other )
{
return
getLanguage().equals( other.getLanguage() )
&& sameReasonerFactory( other )
&& getDocumentManager().equals( other.getDocumentManager() )
&& getImportModelGetter().equals( other.getImportModelGetter() )
;
}
private boolean sameReasonerFactory( OntModelSpec other )
{
ReasonerFactory rf = getReasonerFactory();
ReasonerFactory orf = other.getReasonerFactory();
return rf == null ? orf == null : rf.equals( orf );
}
/**
* Answer the model maker used for creating imported models.
* @return The ModelMaker that is used to get or create a model used
* to hold imports to an OntModel.
*/
public ModelMaker getImportModelMaker() {
return m_importsMaker;
}
/**
* Answer the model maker used for creating base models.
*/
public ModelMaker getBaseModelMaker() {
return super.getModelMaker();
}
public ModelGetter getImportModelGetter() {
if (importModelGetter == null) importModelGetter = m_importsMaker; // fabricateModelGetter();
return importModelGetter;
}
// private ModelGetter fabricateModelGetter()
// {
// return new ModelGetter()
// {
// public Model getModel( String URL )
// {
// return m_importsMaker.hasModel( URL ) ? m_importsMaker.openModel( URL ) : null;
// }
//
// public Model getModel( String URL, ModelReader loadIfAbsent )
// {
// return m_importsMaker.hasModel( URL ) ? m_importsMaker.openModel( URL ) : createAndLoad( URL, loadIfAbsent );
// }
//
// private Model createAndLoad( String URL, ModelReader loadIfAbsent )
// {
// Model result = m_importsMaker.createModel( URL );
// return loadIfAbsent.readModel( result, URL );
// }
// };
// }
public void setImportModelGetter( ModelGetter mg ) {
importModelGetter = mg;
}
/**
* <p>Initialise an OntModelSpec from an RDF description using the JenaModelSpec vocabulary. See
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -