📄 loadandquerykb.java
字号:
/*
* Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.mandarax.examples.db;
import java.io.File;
import org.mandarax.kernel.*;
import org.mandarax.reference.ResolutionInferenceEngine;
import org.mandarax.util.LogicFactorySupport;
import org.mandarax.zkb.*;
/**
* A class that shows the integration of knowledge base in application programs.
* The knowledge base is loaded from the file generated by CreateKB and then queried.
* The results of the queries are printed to the console.
* <p>
* Mandarax uses other (open source) libraries such as JDOM, the apache log4j
* logging library and the junit testing framework. The mandarax distribution
* contains the respective libraries. Please but these jar files in the classpath
* before running the example! In addition, the JDBC driver for the database used must
* also be in the classpath.
* @since 2.2
* @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
* @version 3.4 <7 March 05>
*/
public class LoadAndQueryKB {
private KnowledgeBase kb = null;
private LogicFactorySupport lfs = new LogicFactorySupport();
private InferenceEngine ie = new ResolutionInferenceEngine();
/**
* Load the knowledge base and query it.
*/
public static void main(String[] args) {
// uncomment the following line to switch on logging
// org.apache.log4j.BasicConfigurator.configure();
LoadAndQueryKB inst = new LoadAndQueryKB();
inst.loadKB();
inst.calculateDiscount("Tom");
inst.calculateDiscount("John");
inst.calculateDiscount("Jim");
inst.calculateDiscount("Ralf");
inst.calculateDiscount("Bill");
}
/**
* Load a knowledge base from the XML file.
*/
public void loadKB() {
ZKBManager zkbManager = new ZKBManager();
try {
kb = zkbManager.importKnowledgeBase(new File("kb.zip"));
System.out.println("Knowledge base loaded from kb.zip");
}
catch (ZKBException x) {
System.err.println("Cannot import knowledge base from kb.zip - use CreateKB to generate knowledge base !");
x.printStackTrace();
}
}
/**
* Query a knowledge base for the discount of a particular customer.
* @param customer a customer (name)
* @return a discount
*/
public void calculateDiscount(String customerName) {
// build query
Class[] struct = { String.class, Discount.class };
VariableTerm queryVariable = (VariableTerm)lfs.variable("discount", Discount.class);
Predicate p = new SimplePredicate("a customer gets a discount", struct);
Query query = lfs.query(lfs.fact(p,customerName,queryVariable),"get discount for "+customerName);
// issue query
try {
ResultSet rs = ie.query(query,kb,InferenceEngine.ONE,InferenceEngine.BUBBLE_EXCEPTIONS);
Discount discount = null;
while (rs.next()) {
discount = (Discount)rs.getResult(queryVariable);
System.out.println("The discount for " + customerName + " is " + discount);
}
}
catch (InferenceException x) {
System.out.println("Cannot compute discount for " + customerName);
x.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -