001: /******************************************************************
002: * File: OWLRuleReasonerFactory.java
003: * Created by: Dave Reynolds
004: * Created on: 12-Apr-03
005: *
006: * (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
007: * [See end of file]
008: * $Id: OWLRuleReasonerFactory.java,v 1.8 2008/01/02 12:09:44 andy_seaborne Exp $
009: *****************************************************************/package com.hp.hpl.jena.reasoner.rulesys.impl.oldCode;
010:
011: import com.hp.hpl.jena.reasoner.*;
012: import com.hp.hpl.jena.reasoner.rulesys.Util;
013: import com.hp.hpl.jena.rdf.model.*;
014: import com.hp.hpl.jena.vocabulary.*;
015:
016: /**
017: * @deprecated Obsoleted post jena2.0, replaced by
018: * {@link com.hp.hpl.jena.reasoner.rulesys.OWLFBRuleReasonerFactory}.
019: *
020: * Factory class for creating blank instances of the OWL Reasoner.
021: * <p>
022: * The reasoner can be configured using three properties (set as
023: * properties of the base reasonder URI in a configuration model). These are:
024: * <ul>
025: * <li><b>derivationLogging</b> - if set to true this causes all derivations to
026: * be recorded in an internal data structure for replay through the {@link com.hp.hpl.jena.reasoner.InfGraph#getDerivation getDerivation}
027: * method. </li>
028: * <li><b>traceOn</b> - if set to true this causes all rule firings and deduced triples to be
029: * written out to the Log at INFO level.</li>
030: * <li><b>ruleThreshold</b> - which limits the number of rules that can be fired on a single
031: * data processing stage to the given number (useful to limit infinite runaways). </li>
032: * </ul>
033: *
034: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
035: * @version $Revision: 1.8 $ on $Date: 2008/01/02 12:09:44 $
036: */
037: public class OWLRuleReasonerFactory implements ReasonerFactory {
038:
039: /** Single global instance of this factory */
040: private static ReasonerFactory theInstance = new OWLRuleReasonerFactory();
041:
042: /** Static URI for this reasoner type */
043: public static final String URI = "http://jena.hpl.hp.com/2003/OWLRuleReasoner";
044:
045: /** Cache of the capabilities description */
046: protected Model capabilities;
047:
048: /**
049: * Return the single global instance of this factory
050: */
051: public static ReasonerFactory theInstance() {
052: return theInstance;
053: }
054:
055: /**
056: * Constructor method that builds an instance of the associated Reasoner
057: * @param configuration a set of arbitrary configuration information to be
058: * passed the reasoner, encoded as RDF properties of a base configuration resource,
059: * can be null in no custom configuration is required.
060: */
061: public Reasoner create(Resource configuration) {
062: OWLRuleReasoner reasoner = new OWLRuleReasoner();
063: if (configuration != null) {
064: Boolean doLog = Util.checkBinaryPredicate(
065: ReasonerVocabulary.PROPderivationLogging,
066: configuration);
067: if (doLog != null) {
068: reasoner.setDerivationLogging(doLog.booleanValue());
069: }
070: Boolean doTrace = Util.checkBinaryPredicate(
071: ReasonerVocabulary.PROPtraceOn, configuration);
072: if (doTrace != null) {
073: reasoner.setTraceOn(doTrace.booleanValue());
074: }
075: }
076: return reasoner;
077: }
078:
079: /**
080: * Return a description of the capabilities of this reasoner encoded in
081: * RDF. This method is normally called by the ReasonerRegistry which caches
082: * the resulting information so dynamically creating here is not really an overhead.
083: */
084: public Model getCapabilities() {
085: if (capabilities == null) {
086: capabilities = ModelFactory.createDefaultModel();
087: Resource base = capabilities.createResource(getURI());
088: base
089: .addProperty(ReasonerVocabulary.nameP,
090: "OWL Rule Reasoner")
091: .addProperty(
092: ReasonerVocabulary.descriptionP,
093: "Experimental OWL reasoner.\n"
094: + "Pure forward chaining so all entailments are immediate calculated\n"
095: + "Can separate tbox and abox data if desired to reuse tbox caching or mix them.")
096: .addProperty(ReasonerVocabulary.supportsP,
097: RDFS.subClassOf).addProperty(
098: ReasonerVocabulary.supportsP,
099: RDFS.subPropertyOf).addProperty(
100: ReasonerVocabulary.supportsP, RDFS.member)
101: .addProperty(ReasonerVocabulary.supportsP,
102: RDFS.range).addProperty(
103: ReasonerVocabulary.supportsP, RDFS.domain)
104: // TODO - add OWL elements supported
105: .addProperty(ReasonerVocabulary.supportsP,
106: ReasonerVocabulary.individualAsThingP)
107: .addProperty(ReasonerVocabulary.versionP, "0.1");
108: }
109: return capabilities;
110: }
111:
112: /**
113: * Return the URI labelling this type of reasoner
114: */
115: public String getURI() {
116: return URI;
117: }
118:
119: }
120:
121: /*
122: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
123: All rights reserved.
124:
125: Redistribution and use in source and binary forms, with or without
126: modification, are permitted provided that the following conditions
127: are met:
128:
129: 1. Redistributions of source code must retain the above copyright
130: notice, this list of conditions and the following disclaimer.
131:
132: 2. Redistributions in binary form must reproduce the above copyright
133: notice, this list of conditions and the following disclaimer in the
134: documentation and/or other materials provided with the distribution.
135:
136: 3. The name of the author may not be used to endorse or promote products
137: derived from this software without specific prior written permission.
138:
139: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
140: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
141: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
142: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
143: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
144: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
145: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
146: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
147: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
148: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
149: */
|