|
From: <tom...@us...> - 2008-03-24 21:15:13
|
Revision: 1174
http://jason.svn.sourceforge.net/jason/?rev=1174&view=rev
Author: tomklapiscak
Date: 2008-03-24 14:15:02 -0700 (Mon, 24 Mar 2008)
Log Message:
-----------
Non-JASDL annotations (addition only) and unground belief removals (at brf stage) handled correctly by JASDL. Removal of SE-Literals (and associated annotation handling) still needs work.
Modified Paths:
--------------
trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java
trunk/applications/jasdl-owlapi/src/jasdl/bridge/ToSELiteralConverter.java
Modified: trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-03-24 20:37:34 UTC (rev 1173)
+++ trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-03-24 21:15:02 UTC (rev 1174)
@@ -32,6 +32,7 @@
import jason.architecture.AgArch;
import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
+import jason.asSemantics.Unifier;
import jason.asSyntax.Atom;
import jason.asSyntax.Literal;
import jason.bb.BeliefBase;
@@ -193,7 +194,7 @@
// just accept beliefToDel. Assumption: Deletions never lead to inconsistencies?!
- if(beliefToDel != null){
+ if(beliefToDel != null){
removeList.add(beliefToDel);
}
@@ -250,18 +251,29 @@
toReturn[0].add(added);
}
}
+
for(Literal removed : removeList){
- if(getBB().remove(removed)){
- if(toReturn == null){
+ // we need to ground unground removals
+ Unifier u = null;
+ try {
+ u = i.peek().getUnif(); // get from current intention
+ } catch (Exception e) {
+ u = new Unifier();
+ }
+ if (believes(removed, u)) {
+ removed.apply(u); // TODO: should unground removals not result in removal of all unifications?
+ if(getBB().remove(removed)){
if(toReturn == null){
- toReturn = new List[2];
- toReturn[0] = new Vector<Literal>();
- toReturn[1] = new Vector<Literal>();
+ if(toReturn == null){
+ toReturn = new List[2];
+ toReturn[0] = new Vector<Literal>();
+ toReturn[1] = new Vector<Literal>();
+ }
+ toReturn[1].add(removed);
}
- toReturn[1].add(removed);
+
}
-
- }
+ }
}
return toReturn;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java 2008-03-24 20:37:34 UTC (rev 1173)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java 2008-03-24 21:15:02 UTC (rev 1174)
@@ -1,13 +1,12 @@
package jasdl.bb;
import jasdl.asSemantics.JasdlAgent;
-import jasdl.bb.revision.BeliefBaseContractor;
-import jasdl.bb.revision.JasdlReasonerFactory;
import jasdl.bridge.seliteral.SELiteral;
import jasdl.bridge.seliteral.SELiteralAllDifferentAssertion;
import jasdl.util.JasdlException;
import jasdl.util.NotEnrichedException;
import jason.asSyntax.Literal;
+import jason.asSyntax.Term;
import jason.bb.DefaultBeliefBase;
import java.util.HashSet;
@@ -34,31 +33,28 @@
public boolean add(Literal l) {
getLogger().fine("Adding "+l);
try{
- SELiteral sl = agent.getSELiteralFactory().create(l); // all non-JASDL annotations added.. TODO: This needs sorting
+
+ SELiteral sl = agent.getSELiteralFactory().create(l);
OWLIndividualAxiom axiom = sl.createAxiom();
OWLOntology ontology = sl.getOntology();
- // add axiom annotations to axiom containing serialised list terms.
- // Could be (clumsily) made to sit in toAxiomConverter? - this is probably the only place we add axioms to an ontology anyway
- OWLAnnotation annot = agent.getOntologyManager().getOWLDataFactory().getOWLLabelAnnotation(sl.getSemanticallyNaiveAnnotations().toString()); //TODO: more efficient way of serialising list terms?
- OWLAxiomAnnotationAxiom annotAxiom = agent.getOntologyManager().getOWLDataFactory().getOWLAxiomAnnotationAxiom(axiom, annot);
-
- // need to merge existing annotations into a single one containing a whole list.
-
-
- boolean containsAxiom = ontology.containsAxiom(axiom);
- boolean containsAnnot = ontology.containsAxiom(annotAxiom);
- agent.getLogger().fine("Contains Axiom "+axiom+"?: " +containsAxiom);
- agent.getLogger().fine("Contains Annotation "+annotAxiom+"?: " +containsAnnot);
- if(!containsAxiom || !containsAnnot){
- if(!containsAxiom){
- agent.getOntologyManager().applyChange(new AddAxiom(ontology, axiom));
- }
- if(!containsAnnot){
+ boolean containsAxiom = ontology.containsAxiom(axiom);
+ if(!containsAxiom){
+ agent.getOntologyManager().applyChange(new AddAxiom(ontology, axiom));
+ }
+
+ boolean containsAllAnnots = true;
+ for(Term _annot : sl.getSemanticallyNaiveAnnotations()){
+ OWLAnnotation annot = agent.getOntologyManager().getOWLDataFactory().getOWLLabelAnnotation(_annot.toString());
+ OWLAxiomAnnotationAxiom annotAxiom = agent.getOntologyManager().getOWLDataFactory().getOWLAxiomAnnotationAxiom(axiom, annot);
+ if(!ontology.containsAxiom(annotAxiom)){
+ containsAllAnnots = false;
agent.getOntologyManager().applyChange(new AddAxiom(ontology, annotAxiom));
}
- agent.getReasoner().refresh();
-
+ }
+
+ if(!containsAxiom || !containsAllAnnots){
+ agent.getReasoner().refresh();
if(!agent.isBeliefRevisionEnabled()){ // if brf disabled, resort to legacy consistency maintenance mechanism
if(!agent.getReasoner().isConsistent()){
RemoveAxiom rem = new RemoveAxiom(ontology, axiom);
@@ -90,7 +86,7 @@
public boolean remove(Literal l) {
getLogger().fine("Removing "+l);
try{
- // TODO: use contraction
+ // TODO: use contraction for belief base removal
//BeliefBaseContractor contractor = new BeliefBaseContractor(agent.getOntologyManager(), new JasdlReasonerFactory(), agent.getLogger());
//contractor.contract(axiom, kernelsetFilter, incisionFunction)
@@ -103,7 +99,7 @@
agent.getReasoner().refresh();
return true;
}catch(NotEnrichedException e){
- return super.add(l); // semantically-naive, use standard Jason mechanisms
+ return super.remove(l); // semantically-naive, use standard Jason mechanisms
}catch(Exception e){
getLogger().warning("Exception caught removing SELiteral "+l+" from belief base: ");
e.printStackTrace();
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bridge/ToSELiteralConverter.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bridge/ToSELiteralConverter.java 2008-03-24 20:37:34 UTC (rev 1173)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bridge/ToSELiteralConverter.java 2008-03-24 21:15:02 UTC (rev 1174)
@@ -64,12 +64,8 @@
// get annotations
Set<OWLAxiomAnnotationAxiom> annotAxioms = axiom.getAnnotationAxioms(ontology);
for(OWLAxiomAnnotationAxiom annotAxiom : annotAxioms){ // remember, possibly semantically-naive payload!
- Structure annot = ListTermImpl.parse(annotAxiom.getAnnotation().getAnnotationValueAsConstant().getLiteral());
- if(annot.isList()){
- result.addAll((ListTerm)annot);
- }else{
- result.add(annot);
- }
+ Term annot = Literal.parse(annotAxiom.getAnnotation().getAnnotationValueAsConstant().getLiteral());
+ result.add(annot);
}
return result;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|