📄 ontdocumentmanager.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 10 Feb 2003
* Filename $RCSfile: OntDocumentManager.java,v $
* Revision $Revision: 1.59 $
* Release status $State: Exp $
*
* Last modified on $Date: 2007/01/15 10:36:25 $
* by $Author: ian_dickinson $
*
* (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* (see footer for full conditions)
* ****************************************************************************/
// Package
///////////////
package com.hp.hpl.jena.ontology;
// Imports
///////////////
import java.io.*;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xerces.util.XMLChar;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.util.*;
import com.hp.hpl.jena.vocabulary.OntDocManagerVocab;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.shared.*;
import com.hp.hpl.jena.shared.impl.PrefixMappingImpl;
/**
* <p>
* Provides services for managing ontology documents, including loading imported
* documents, and locally caching documents from resolvable URL's to improve
* load performance. This class now delegates some of the responsibility for
* resolving URI's and caching models to {@link com.hp.hpl.jena.util.FileManager FileManager}.
* By default, OntDocumentManager will use a copy of the
* singleton global FileManager. Alternatively, a specific <code>FileManager</code>
* can be given to a document manager instance to use when resolving URI's and file paths.
* Note that the default behaviour is to hold a <strong>copy</strong> of the global file
* manager. In order to ensure that the document manager directly uses the global
* file manager (e.g. so that document manager sees updates to the location mappings
* held by the file manager), use the {@link #setFileManager(FileManager)} method. For
* example:
* </p>
* <pre>OntDocumentManager dm = OntDocumentManager.getInstance();
* dm.setFileManager( FileManager.get() );</pre>
* <p>Note that in Jena 2.3, we have deprecated the capability of the document manager
* to store a table of known prefixes, and a table mapping document URI's to ontology language
* types. <strong>The intention is to remove both of these capabilities from
* Jena 2.4 onwards</strong>. If this change would be problematic, please send email to the
* <a href="http://groups.yahoo.com/group/jena-dev">Jena support
* list</a>.</p>
* @author Ian Dickinson, HP Labs
* (<a href="mailto:Ian.Dickinson@hp.com" >email</a>)
* @version CVS $Id: OntDocumentManager.java,v 1.59 2007/01/15 10:36:25 ian_dickinson Exp $
*/
public class OntDocumentManager
{
// Constants
////////////////////////////////////
/** The default path for searching for the metadata on locally cached ontologies */
public static final String DEFAULT_METADATA_PATH = "file:ont-policy.rdf;file:etc/ont-policy.rdf";
/** Namespace for ontology metadata resources and properties */
public static final String NS = "http://jena.hpl.hp.com/schemas/2003/03/ont-manager#";
/** The anchor char is added to the end of namespace prefix expansions */
public static final String ANCHOR = "#";
/** rdf:type for ontology specification nodes in meta-data file */
public static final Resource ONTOLOGY_SPEC = OntDocManagerVocab.OntologySpec;
/** Represents the public URI of an ontology; also used to derive the namespace */
public static final Property PUBLIC_URI = OntDocManagerVocab.publicURI;
/** Represents the alternative local copy of the public ontology; assumed to be resolvable, hence URL not URI */
public static final Property ALT_URL = OntDocManagerVocab.altURL;
/** Represents the standard prefix for this namespace */
public static final Property PREFIX = OntDocManagerVocab.prefix;
/** Represents the ontology language used to encode the ontology */
public static final Property LANGUAGE = OntDocManagerVocab.language;
/** rdf:type for document manager policy nodes */
public static final Resource DOC_MGR_POLICY = OntDocManagerVocab.DocumentManagerPolicy;
/** Defines boolean policy choice of caching loaded models */
public static final Property CACHE_MODELS = OntDocManagerVocab.cacheModels;
/** Defines boolean policy choice of loading the imports closure */
public static final Property PROCESS_IMPORTS = OntDocManagerVocab.processImports;
/** Specifies the URI of an ontology that we do not want to import, even if processImports is true. */
public static final Property IGNORE_IMPORT = OntDocManagerVocab.ignoreImport;
/** The policy property for including the pre-declared namespace prefixes in a model. */
public static final Property USE_DECLARED_NS_PREFIXES = OntDocManagerVocab.useDeclaredNsPrefixes;
// Static variables
//////////////////////////////////
/** Default document manager instance */
private static OntDocumentManager s_instance = null;
/** Log for this class */
private static Log log = LogFactory.getLog( OntDocumentManager.class );
// Instance variables
//////////////////////////////////
/** The search path for metadata */
protected String m_searchPath = DEFAULT_METADATA_PATH;
/** FileManager instance that provides location resolution service - defaults to global instance */
protected FileManager m_fileMgr;
/** Flag to indicate we're using a copy of the global file manager */
protected boolean m_usingGlobalFileMgr = false;
/** Mapping of public public URI's to language resources */
protected Map m_languageMap = new HashMap();
/** Flag: process the imports closure */
protected boolean m_processImports = true;
/** List of URI's that will be ignored when doing imports processing */
protected Set m_ignoreImports = new HashSet();
/** Default prefix mapping to use to seed all models */
protected PrefixMapping m_prefixMap = new PrefixMappingImpl();
/** Flag to control whether we include the standard prefixes in generated models - default true. */
protected boolean m_useDeclaredPrefixes = true;
/** The URL of the policy file that was loaded, or null if no external policy file has yet been loaded */
protected String m_policyURL;
/** Optional handler for failed read */
protected ReadFailureHandler m_rfHandler;
/** Read hook that can intercept the process of reading a file or URL */
protected ReadHook m_readHook = new DefaultReadHook();
// Constructors
//////////////////////////////////
/**
* <p>
* Initialise a document manager by searching the default path for ontology
* metadata about known ontologies cached locally.
* </p>
*/
public OntDocumentManager() {
this( DEFAULT_METADATA_PATH );
}
/**
* <p>
* Initialise a document manager by searching the given path for ontology
* metadata about known ontologies cached locally.
* </p>
*
* @param path The search path to search for initial metadata, which will
* also replace the current search path for this document manager. Use
* null to prevent loading of any initial ontology metadata. The path is a series
* of URL's, separated by a semi-colon (;).
*/
public OntDocumentManager( String path ) {
this( null, path );
}
/**
* <p>
* Initialise a document manager by with the given FileManager, and
* then searching the given path for ontology
* metadata about known ontologies cached locally.
* </p>
*
* @param path The search path to search for initial metadata
* @see #OntDocumentManager(String)
*/
public OntDocumentManager( FileManager fileMgr, String path ) {
setFileManager( fileMgr );
setDefaults();
m_searchPath = (path == null) ? "" : path;
initialiseMetadata( m_searchPath );
}
/**
* <p>Initialise a document manager with the given configuration model. This model
* is used in place of any model that might be
* found by searching the meta-data search path. Uses the default file manager,
* i.e. a copy of the global file manager.</p>
* @param config An RDF model containing configuration information for this document manager.
*/
public OntDocumentManager( Model config ) {
this( null, config );
}
/**
* <p>Initialise a document manager with the given configuration model. This model
* is used in place of any model that might be
* found by searching the meta-data search path.</p>
* @param fileMgr A file manager to use when locating source files for ontologies
* @param config An RDF model containing configuration information for this document manager.
*/
public OntDocumentManager( FileManager fileMgr, Model config ) {
// we don't need to reset first since this is a new doc mgr
setFileManager( fileMgr );
setDefaults();
configure( config, false );
}
// External signature methods
//////////////////////////////////
/**
* <p>
* OntDocumentManager is not a singleton, but a global default instance is available
* for applications where a single shared document manager is sufficient.
* </p>
*
* @return The default, global instance of a document manager
*/
public static OntDocumentManager getInstance() {
if (s_instance == null) {
s_instance = new OntDocumentManager();
}
return s_instance;
}
/**
* <p>Answer the file manager instance being used by this document manager.</p>
* @return This object's file manager
*/
public FileManager getFileManager() {
return m_fileMgr;
}
/**
* Replace the existing ReadHook with the given value. The previous read
* hook is returned.
* @param hook The new read hook
* @return The old read hook
* @exception IllegalArgumentException if the new read hook is null
*/
public ReadHook setReadHook( ReadHook hook ) {
if (hook == null) {
throw new IllegalArgumentException( "ReadHook cannot be null" );
}
ReadHook rh = m_readHook;
m_readHook = hook;
return rh;
}
/**
* Answer the current ReadHook for this document manager instance
* @return The read hook
*/
public ReadHook getReadHook() {
return m_readHook;
}
/**
* <p>Set the file manager used by this ODM instance to <strong>a
* copy</strong> of the global file manager (and, by extension, the
* global location mapper).</p>
*/
public void setFileManager() {
setFileManager( new FileManager( FileManager.get() ) );
m_usingGlobalFileMgr = true;
}
/**
* <p>Set the file manager used by this ODM instance to <strong>a
* copy</strong> of the global file manager (and, by extension, the
* global location mapper).</p>
* @param fileMgr The new file manager
*/
public void setFileManager( FileManager fileMgr ) {
if (fileMgr == null) {
// use default fm
setFileManager();
}
else {
m_fileMgr = fileMgr;
m_usingGlobalFileMgr = false;
}
}
/**
* <p>
* Answer the path used to search for the ontology metadata to load. The format is
* a ';' separated list of URI's. The first URI on the path that is readable is
* taken to be the location of the local ontology metadata.
* </p>
*
* @return The ontology metadata search path, as a string.
*/
public String getMetadataSearchPath() {
return m_searchPath;
}
/**
* <p>
* Change the search path for loading ontology metadata to the given path. If
* <code>replace</code> is true, any existing mappings are removed before the
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -