damlagent.java
来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 389 行
JAVA
389 行
package com.sri.oaa2.agt.oaadaml;
import com.sri.oaa2.lib.*;
import java.awt.event.*;
import java.awt.*;
import com.sri.oaa2.com.*;
import com.sri.oaa2.icl.*;
import com.hp.hpl.jena.rdf.arp.JenaReader;
import com.hp.hpl.mesa.rdf.jena.mem.ModelMem;
import com.hp.hpl.mesa.rdf.jena.model.*;
import com.hp.hpl.mesa.rdf.jena.vocabulary.RDFS;
import com.hp.hpl.mesa.rdf.jena.common.*;
import java.io.*;
import java.lang.Object;
import java.lang.String;
import java.util.*;
/**
* This class extends LibOaa and provides our daml agent with the facilities of connecting to the facilitator
* and defines the appropriate actions to perform once a query does match with a registerd solvable. This code is
* given in the corresponding callback method.
*/
public class DamlAgent extends LibOaa{
Model model;
HashSet properties, classes;
String defaultNs = null;
/**
* The agent is created with the set of properties and classes that we have already extracted from the ontology
* using the jena model. An instance of our daml agent is defined with a set of properties, a set of classes, a
* default name space and a model.
*/
public DamlAgent(Model model,String defaultNs, HashSet properties, HashSet classes) {
super(new LibCom(new LibComTcpProtocol(),null));
this.model = model;
this.properties = properties;
this.defaultNs = defaultNs;
this.classes = classes;
}
public void oaaConnect(String inAgentName, String inSolvables) {
System.out.println("Agent Name : " + inAgentName);
System.out.println("Solvables : " + inSolvables);
try {
if (!getComLib().comConnect("parent", IclUtils.iclNewTermFromString("tcp(A,B)"), IclList.iclGetEmptyList())) {
System.out.println("Could not connect");
return;
}
}catch (Exception e) {
System.out.println (" Exception in comConnect : " +e);
}
try {
if (!oaaRegister("parent", inAgentName, IclUtils.iclNewTermFromString(inSolvables), IclList.iclGetEmptyList())) {
System.out.println("Could not register : " +inSolvables);
return;
}
}catch (Exception e) {
System.out.println (" Exception in oaaRegister : " +e);
}
oaaReady(true);
}
public void oaaDeclare(String inSolvables) {
IclTerm solvables = IclUtils.iclNewTermFromString(inSolvables);
System.out.println("Declaring : " + inSolvables.toString());
oaaDeclare(solvables, IclList.iclGetEmptyList(), IclList.iclGetEmptyList(),
IclList.iclGetEmptyList());
}
public boolean oaaDoCallbackDamlClass(IclTerm goal,IclList params, IclList answers) {
String prefix = "http://www.daml.org/2001/03/daml+oil#";
String strGoal = goal.iclFunctor().substring(1,goal.iclFunctor().length()-1);
// System.out.println(" it is a call to oaaDoCallbackDamlClass : " +strGoal);
try {
SelectorImpl newselect = new SelectorImpl(null,null,model.createResource(prefix+strGoal));
StmtIterator newiterator = model.listStatements(newselect);
while (newiterator.hasNext()){
Statement triple = newiterator.next();
answers.iclAddToList(IclUtils.icl("'"+strGoal+"'('"+triple.getSubject()+"')"));
}
}catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace();
}
return false;
}
/*
goal is something like
'http://www.daml.org/2001/03/daml+oil-ex.daml#Person'(X)
*/
public boolean
oaaDoCallbackOntologyClass(IclTerm goal,IclList params, IclList answers)
{
System.out.println("call to oaaDoCallbackOntologyClass : " + goal.toString());
String functor = goal.iclFunctor();
// Remove open/close quotes if present:
functor = IclString.iclStRemoveQuotes(functor);
// functor adjusted for namespace, if necessary:
String functorNs;
if ((defaultNs != null) && functor.startsWith(DamlOAA.url + "#")) {
StringBuffer temp = new StringBuffer(functor);
temp.replace(0, DamlOAA.url.length()+1, defaultNs);
System.out.println("functorNS: " + temp.toString());
functorNs = temp.toString();
} else {
functorNs = functor;
}
// TBD: is looping through the class array needed?:
Object[] classArray = classes.toArray();
for(int i=0;i<classes.size();i++){
if (functor.equals(classArray[i].toString())) {
try {
Property property = model.getProperty("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
SelectorImpl select = new SelectorImpl(null,property, model.getResource(functorNs));
// SelectorImpl select = new SelectorImpl(null,property, temp.toString());
StmtIterator iterator = model.listStatements(select);
while (iterator.hasNext()){
Statement stmtFound = iterator.next();
// System.out.println("'"+functor+"'('"+stmtFound.getSubject().toString()+"')");
answers.iclAddToList(IclUtils.icl("'"+functor+"'('"+stmtFound.getSubject().toString()+"')"));
}
}catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace();
}
}
}
return false;
}
public boolean
oaaDoCallbackRDFprop(IclTerm goal,IclList params, IclList answers)
{
try {
String prefix = "http://www.w3.org/2000/01/rdf-schema#";
String strGoal = goal.iclFunctor();
System.out.println(" it is a call to oaaDoCallbackRDFprop : " +strGoal);
SelectorImpl select =
new SelectorImpl(null,model.getProperty(prefix+strGoal),(String)null);
StmtIterator iterator = model.listStatements(select);
while (iterator.hasNext()){
Statement triple = iterator.next();
answers.iclAddToList(IclUtils.icl(
strGoal+"('"+
triple.getSubject()+
"','"+triple.getObject()+"')"));
}
}catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace();
}
return false;
}
public boolean oaaDoCallbackDamlprop(IclTerm goal,IclList params, IclList answers)
{
String prefix = "http://www.daml.org/2001/03/daml+oil#";
String strGoal = goal.iclFunctor();
// System.out.println(" it is a call to oaaDoCallbackDamlProp : " +strGoal);
try {
SelectorImpl select = new SelectorImpl(null,model.getProperty(prefix+strGoal),(String)null);
StmtIterator iterator = model.listStatements(select);
while (iterator.hasNext()){
Statement triple = iterator.next();
answers.iclAddToList(IclUtils.icl(strGoal+"('"+triple.getSubject()+"','"+triple.getObject()+"')"));
}
}catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace();
}
return false;
}
/*
goal is something like
'http://www.daml.org/2001/03/daml+oil-ex.daml#shoesize'(X,Y)
*/
public boolean
oaaDoCallbackOntologyProp(IclTerm goal,IclList params, IclList answers)
{
Object[] propArray = properties.toArray();
String functor = goal.iclFunctor();
// Remove open/close quotes if present:
functor = IclString.iclStRemoveQuotes(functor);
System.out.println("in oaaDoCallbackOntologyProp: " + functor);
// functor adjusted for namespace, if necessary:
String functorNs;
if ((defaultNs != null) && functor.startsWith(DamlOAA.url + "#")) {
StringBuffer temp = new StringBuffer(functor);
temp.replace(0, DamlOAA.url.length()+1, defaultNs);
System.out.println("prop functorNS: " + temp.toString());
functorNs = temp.toString();
} else {
functorNs = functor;
}
if (functorNs.indexOf('#') >= 0 ){
//System.out.println("this is a long form ");
for(int i=0;i<properties.size();i++){
// System.out.println(propArray[i].toString());
if (functor.equals(propArray[i].toString())) {
try {
// System.out.println(propArray[i]);
// StringBuffer temp = new StringBuffer(propArray[i].toString());
// temp.replace(0,defaultNs.length()+8,prefix);
// System.out.println(temp.toString());
// Property property = model.getProperty(temp.toString());
Property property = model.getProperty(functorNs);
SelectorImpl selectProperty = new SelectorImpl(null,property,(String)null);
StmtIterator propIter = model.listStatements(selectProperty);
while (propIter.hasNext()){
Statement triple = propIter.next();
// System.out.println("'"+propArray[i]+"'('"+triple.getSubject()+"','"+triple.getObject()+"')");
answers.iclAddToList(IclUtils.icl("'"+propArray[i]+"'('"+triple.getSubject()+"','"+triple.getObject()+"')"));
}
}catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace();
}
}
}
}
// else
// System.out.println("this is a short form");
return false;
}
public boolean oaaCallbackList(IclTerm goal, IclList params, IclList answers)
{
String prefix1 = defaultNs+"#";//http://www.daml.org/2001/03/daml+oil#";
//String prefix2 = "http://www.daml.org/2001/03/daml+oil-ex.daml#";
String strGoal = goal.iclFunctor();
String arg1 = goal.iclNthTerm(1).toString();
String arg = arg1.substring(1,arg1.length()-1);
// System.out.println("this is a callback to oaaCallbackList : " +arg);
try {
Resource subject = model.createResource(arg);
SelectorImpl select = new SelectorImpl(subject,model.getProperty(prefix1+strGoal),(String)null);
StmtIterator iterator = model.listStatements(select);
while (iterator.hasNext()){
Statement triple = iterator.next();
RDFNode object = triple.getObject();
SelectorImpl first = new SelectorImpl((Resource)object,model.getProperty("http://www.daml.org/2001/03/daml+oil#first"),(String)null);
SelectorImpl rest = new SelectorImpl((Resource)object,model.getProperty("http://www.daml.org/2001/03/daml+oil#rest"),(String)null);
StmtIterator firstIter = model.listStatements(first);
StmtIterator restIter = model.listStatements(rest);
while (firstIter.hasNext()){
Statement restElmt;
Statement firstElmt =firstIter.next();
if(restIter.hasNext()){
restElmt = restIter.next();
if (model.contains((Resource)restElmt.getObject(),model.getProperty("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), model.getResource("http://www.daml.org/2001/03/daml+oil#List"))){
StmtIterator listFirstElmt = model.listStatements(new SelectorImpl((Resource)restElmt.getObject(),model.getProperty("http://www.daml.org/2001/03/daml+oil#first"),(String)null));
StmtIterator listRestElmt = model.listStatements(new SelectorImpl((Resource)restElmt.getObject(),model.getProperty("http://www.daml.org/2001/03/daml+oil#rest"),(String)null));
if (listFirstElmt.hasNext()){
Statement listFirst = listFirstElmt.next();
Statement listRest = listRestElmt.next();
if (listRest.getObject().toString().equals("http://www.daml.org/2001/03/daml+oil#nil")) {
answers.iclAddToList(IclUtils.icl("['"+firstElmt.getObject()+"', '"+listFirst.getObject()+"']"));
}
else {
answers.iclAddToList(IclUtils.icl("['"+firstElmt.getObject()+"', '"+listFirst.getObject()+"', '"+listRest.getObject()+"']"));
}
}
}
else {
answers.iclAddToList(IclUtils.icl("['"+firstElmt.getObject()+"', '"+restElmt.getObject()+"']"));
}
}
else {
answers.iclAddToList(IclUtils.icl("'"+firstElmt.getObject()+"'"));
}
}
}
}catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace();
}
return false;
}
/*
goal = 'Property'(X)
*/
public boolean oaaCallbackProp(IclTerm goal, IclList params, IclList answers)
{
// System.out.println(" it is a call to oaaCallbackProp ");
Object[] propArray = properties.toArray();
for (int i=0;i<properties.size();i++) {
answers.iclAddToList(IclUtils.icl(
"'Property'('"+propArray[i].toString()+"')"));
}
return false;
}
/*
goal = daml_triple(X, Y, Z)
where any combination of X, Y, Z may be ground
*/
public boolean
oaaCallbackTriple(IclTerm goal, IclList params, IclList answers)
{
String strGoal = goal.iclFunctor();
// System.out.println(" it is a call to oaaCallbackTriple : " +strGoal);
com.sri.oaa2.icl.IclUtils iclutil = new com.sri.oaa2.icl.IclUtils();
String arg1 = goal.iclNthTerm(1).toString().substring(1,goal.iclNthTerm(1).toString().length()-1);
String arg2 = goal.iclNthTerm(2).toString().substring(1,goal.iclNthTerm(2).toString().length()-1);
String arg3 = goal.iclNthTerm(3).toString().substring(1,goal.iclNthTerm(3).toString().length()-1);
Resource subj = null, obj = null;
Property prop = null;
boolean test1 = iclutil.iclIsVar(goal.iclNthTerm(1));
boolean test2 = iclutil.iclIsVar(goal.iclNthTerm(2));
boolean test3 = iclutil.iclIsVar(goal.iclNthTerm(3));
try {
if (test1 == false)
subj = model.getResource(arg1);
if (test2 == false)
prop = model.getProperty(arg2);
if (test3 == false)
obj = model.getResource(arg3);
} catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace();
}
try {
StmtIterator
stmtIterRes = model.listStatements(new SelectorImpl(subj, prop, obj));
while(stmtIterRes.hasNext()){
Statement tripleRes = stmtIterRes.next();
answers.iclAddToList(IclUtils.icl(
"daml_triple('"+tripleRes.getSubject().toString()+
"','"+tripleRes.getPredicate().toString()+
"','"+tripleRes.getObject().toString()+"')"));
}
StmtIterator stmtIterlitl =
model.listStatements(new SelectorImpl(subj, prop, arg3));
while(stmtIterlitl.hasNext()){
Statement triplelitl = stmtIterlitl.next();
answers.iclAddToList(IclUtils.icl(
"daml_triple('"+triplelitl.getSubject().toString()+
"','"+triplelitl.getPredicate().toString()+
"','"+triplelitl.getObject().toString()+"')"));
}
} catch (Exception e) {
System.out.println("Triple retrieval problem: " + e);
}
return false;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?