📄 ontdocumentmanager.java
字号:
m_languageMap.remove( docURI );
}
/**
* <p>
* Answer the ontology model that results from loading the document with the
* given URI. This may be a cached model, if this document manager's policy
* is to cache loaded models. If not, or if no model is cached, the document
* will be read into a suitable model. The model will contain the imports closure
* of the ontology, if that is the current policy of this document manager.
* </p>
*
* @param uri Identifies the model to load.
* @param spec Specifies the structure of the ontology model to create
* @return An ontology model containing the statements from the ontology document.
* @see #getModel
*/
public OntModel getOntology( String uri, OntModelSpec spec ) {
// ensure consistency of document managers (to allow access to cached documents)
OntModelSpec _spec = spec;
if (_spec.getDocumentManager() != this) {
_spec = new OntModelSpec( spec );
_spec.setDocumentManager( this );
}
// cached already?
if (getFileManager().hasCachedModel( uri )) {
Model cached = getFileManager().getFromCache( uri );
if (cached instanceof OntModel) {
return (OntModel) cached;
}
else {
return ModelFactory.createOntologyModel( _spec, cached );
}
}
else {
OntModel m = ModelFactory.createOntologyModel( _spec, null );
read( m, uri, true );
// cache this model for future re-use
addModel( uri, m );
return m;
}
}
/**
* <p>
* Answer the policy flag indicating whether the imports statements of
* loaded ontologies will be processed to build a union of s.
* </p>
*
* @return True if imported models will be included in a loaded model
*/
public boolean getProcessImports() {
return m_processImports;
}
/**
* <p>
* Answer true if the models loaded by this document manager from a given
* URI will be cached, so that they can be re-used in other compound
* ontology models.
* </p>
*
* @return If true, a cache is maintained of loaded models from their URI's.
*/
public boolean getCacheModels() {
return getFileManager().getCachingModels();
}
/**
* <p>
* Set the policy flag for processing imports of loaded ontologies.
* </p>
*
* @param processImports If true, load imported ontologies during load
* @see #getProcessImports
*/
public void setProcessImports( boolean processImports ) {
m_processImports = processImports;
}
/**
* <p>
* Set the policy flag that indicates whether loaded models are cached by URI
* </p>
*
* @param cacheModels If true, models will be cached by URI
* @see #getCacheModels()
*/
public void setCacheModels( boolean cacheModels ) {
getFileManager().setModelCaching( cacheModels );
}
/**
* <p>Add the given URI to the set of URI's we ignore in imports statements</p>
* @param uri A URI to ignore when importing
*/
public void addIgnoreImport( String uri ) {
m_ignoreImports.add( uri );
}
/**
* <p>Remove the given URI from the set of URI's we ignore in imports statements</p>
* @param uri A URI to ignore no longer when importing
*/
public void removeIgnoreImport( String uri ) {
m_ignoreImports.remove( uri );
}
/**
* <p>Answer an iterator over the set of URI's we're ignoring</p>
* @return An iterator over ignored imports
*/
public Iterator listIgnoredImports() {
return m_ignoreImports.iterator();
}
/**
* <p>Answer true if the given URI is one that will be ignored during imports </p>
* @param uri A URI to test
* @return True if uri will be ignored as an import
*/
public boolean ignoringImport( String uri ) {
return m_ignoreImports.contains( uri );
}
/**
* <p>
* Remove all entries from the model cache
* </p>
*/
public void clearCache() {
getFileManager().resetCache();
}
/**
* <p>
* Inspect the statements in the graph expressed by the given model, and load
* into the model any imported documents. Imports statements are recognised according
* to the model's language profile. An occurs check allows cycles of importing
* safely. This method will do nothing if the {@linkplain #getProcessImports policy}
* for this manager is not to process imports. If the {@linkplain #getCacheModels cache policy}
* for this doc manager allows, models will be cached by URI and re-used where possible.
* </p>
*
* @param model An ontology model whose imports are to be loaded.
*/
public void loadImports( OntModel model ) {
if (m_processImports) {
List readQueue = new ArrayList();
// add the imported statements from the given model to the processing queue
queueImports( model, readQueue, model.getProfile() );
loadImports( model, readQueue );
}
}
/**
* <p>Add the given model from the given URI as an import to the given model. Any models imported by the given
* URI will also be imported.</p>
*
* @param model A model to import into
* @param uri The URI of a document to import
*/
public void loadImport( OntModel model, String uri ) {
if (m_processImports) {
List readQueue = new ArrayList();
readQueue.add( uri );
loadImports( model, readQueue );
}
}
/**
* <p>Remove from the given model the import denoted by the given URI.</p>
*
* @param model A model
* @param uri The URI of a document to no longer import
*/
public void unloadImport( OntModel model, String uri ) {
if (m_processImports) {
List unloadQueue = new ArrayList();
unloadQueue.add( uri );
unloadImports( model, unloadQueue );
}
}
/**
* <p>Answer the URL of the most recently loaded policy URL, or null
* if no document manager policy has yet been loaded since the metadata
* search path was last set.</p>
* @return The most recently loaded policy URL or null.
*/
public String getLoadedPolicyURL() {
return m_policyURL;
}
// Internal implementation methods
//////////////////////////////////
/**
* <p>Load all of the imports in the queue</p>
* @param model The model to load the imports into
* @param readQueue The queue of imports to load
*/
protected void loadImports( OntModel model, List readQueue ) {
while (!readQueue.isEmpty()) {
// we process the import statements as a FIFO queue
String importURI = (String) readQueue.remove( 0 );
if (!model.hasLoadedImport( importURI ) && !ignoringImport( importURI )) {
// this file has not been processed yet
loadImport( model, importURI, readQueue );
}
}
}
/**
* <p>Unload all of the imports in the queue</p>
* @param model The model to unload the imports from
* @param unloadQueue The queue of imports to unload
*/
protected void unloadImports( OntModel model, List unloadQueue ) {
while (!unloadQueue.isEmpty()) {
// we process the import statements as a FIFO queue
String importURI = (String) unloadQueue.remove( 0 );
if (model.hasLoadedImport( importURI )) {
// this import has not been unloaded yet
// look up the cached model - if we can't find it, we can't unload the import
Model importModel = getModel( importURI );
if (importModel != null) {
List imports = new ArrayList();
// collect a list of the imports from the model that is scheduled for removal
for (StmtIterator i = importModel.listStatements( null, model.getProfile().IMPORTS(), (RDFNode) null ); i.hasNext(); ) {
imports.add( i.nextStatement().getResource().getURI() );
}
// now remove the sub-model
model.removeSubModel( importModel, false );
model.removeLoadedImport( importURI );
// check the list of imports of the model we have removed - if they are not
// imported by other imports that remain, we should remove them as well
for (StmtIterator i = model.listStatements( null, model.getProfile().IMPORTS(), (RDFNode) null ); i.hasNext(); ) {
imports.remove( i.nextStatement().getResource().getURI() );
}
// any imports that remain are scheduled for removal
unloadQueue.addAll( imports );
}
}
}
model.rebind();
}
/**
* <p>Add the ontologies imported by the given model to the end of the queue.</p>
*/
protected void queueImports( Model model, List readQueue, Profile profile ) {
if (model instanceof OntModel) {
// add the imported ontologies to the queue
readQueue.addAll( ((OntModel) model).listImportedOntologyURIs() );
}
else {
// we have to do the query manually
StmtIterator i = model.listStatements( null, profile.IMPORTS(), (RDFNode) null );
while (i.hasNext()) {
// read the next import statement and add to the queue
readQueue.add( i.nextStatement().getResource().getURI() );
}
}
}
/**
* <p>
* Initialise the mappings for uri's and prefixes by loading metadata
* from an RDF model.
* </p>
*
* @param path The URI path to search for a loadable model
*/
protected void initialiseMetadata( String path ) {
// search the path for metadata about locally cached models
Model metadata = findMetadata( path );
if (metadata != null) {
processMetadata( metadata );
}
}
/**
* <p>
* Search the given path for a resolvable URI, from which we load a model
* (assuming RDF/XML).
* </p>
*
* @param configPath The path to search
* @return A model loaded by resolving an entry on the path, or null if
* no path entries succeed.
*/
protected Model findMetadata( String configPath ) {
if (configPath == null) {
return null;
}
// Make a temporary file manager to look for the metadata file
FileManager fm = new FileManager();
fm.addLocatorFile();
fm.addLocatorURL();
fm.addLocatorClassLoader( fm.getClass().getClassLoader() );
try {
String uri = null ;
InputStream in = null ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -