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