001: /*
002: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018: package org.mandarax.xkb;
019:
020: import org.jdom.Document;
021: import org.mandarax.kernel.KnowledgeBase;
022: import org.mandarax.util.logging.LogCategories;
023:
024: /**
025: * Interface for xkb driver that can import / export knowledge bases from/to
026: * xml data sources. XML data sources are represented by JDOM objects.
027: * Question: should we avoid dependency on jdom on this abstract level?
028: * <br>
029: * <strong>Important Note:</strong>In version 2.2 the similar ZKB framework has been added. In the long term
030: * ZKB will replace XKB! For details, see the <code>org.mandarax.zkb</code> package.
031: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
032: * @version 3.4 <7 March 05>
033: * @since 1.4
034: */
035: public interface XKBDriver extends LogCategories {
036:
037: /**
038: * Export a knowledge base, i.e., convert it into an xml document.
039: * @return an xml document
040: * @param kb a knowledge base
041: * @throws an XKBException is thrown if export fails
042: */
043: Document exportKnowledgeBase(KnowledgeBase kb) throws XKBException;
044:
045: /**
046: * Get a short text describing the driver.
047: * @return a text
048: */
049: String getDescription();
050:
051: /**
052: * Get the location (URL) of the associated DTD.
053: * @return a text
054: */
055: String getDTD();
056:
057: /**
058: * Get the name of the driver.
059: * @return a text
060: */
061: String getName();
062:
063: /**
064: * Import a knowledge base, i.e., build it from an xml document.
065: * @return a knowledge base
066: * @param doc an xml document
067: * @throws an XKBException is thrown if import fails
068: */
069: KnowledgeBase importKnowledgeBase(Document doc) throws XKBException;
070:
071: /**
072: * Indicates whether the driver (and the underlying xml format (=dtd))
073: * supports auto facts.
074: * @return a boolean
075: */
076: boolean supportsAutoFacts();
077:
078: /**
079: * Indicates whether the driver (and the underlying xml format (=dtd))
080: * supports clause sets.
081: * @return a boolean
082: */
083: boolean supportsClauseSets();
084:
085: /**
086: * Indicates whether the driver (and the underlying xml format (=dtd))
087: * supports facts. (some formats might see facts as rules without body)
088: * @return a boolean
089: */
090: boolean supportsFacts();
091:
092: /**
093: * Indicates whether the driver (and the underlying xml format (=dtd))
094: * supports functions.
095: * @return a boolean
096: */
097: boolean supportsFunctions();
098:
099: /**
100: * Indicates whether the driver (and the underlying xml format (=dtd))
101: * supports the java semantics (e.g. JFunctions, JPredicate).
102: * @return a boolean
103: */
104: boolean supportsJavaSemantics();
105:
106: /**
107: * Indicates whether the driver (and the underlying xml format (=dtd))
108: * supports multiple premises.
109: * @return a boolean
110: */
111: boolean supportsMultiplePremises();
112:
113: /**
114: * Indicates whether the driver (and the underlying xml format (=dtd))
115: * supports multiple premises connected by OR.
116: * @return a boolean
117: */
118: boolean supportsOrPremises();
119:
120: /**
121: * Indicates whether the driver (and the underlying xml format (=dtd))
122: * supports types.
123: * @return a boolean
124: */
125: boolean supportsTypes();
126:
127: /**
128: * Indicates whether the driver (and the underlying xml format (=dtd))
129: * supports queries.
130: * @return a boolean
131: */
132: boolean supportsQueries();
133:
134: /**
135: * Indicates whether the driver (and the underlying xml format (=dtd))
136: * supports negation as failure.
137: * @return a boolean
138: */
139: boolean supportsNegationAsFailure();
140: }
|