|
From: <tom...@us...> - 2008-04-02 19:22:42
|
Revision: 1196
http://jason.svn.sourceforge.net/jason/?rev=1196&view=rev
Author: tomklapiscak
Date: 2008-04-02 12:22:40 -0700 (Wed, 02 Apr 2008)
Log Message:
-----------
Seperating out "bbops" (Belief-Base Operations): a general library for performing semi-revision, contraction, axiom-pinpointing and inconsistency-explanation operations for OWL ontologies.
Modified Paths:
--------------
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/BeliefBaseContractor.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/BeliefBaseSemiRevisor.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IncisionFunction.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IndividualAxiomToDescriptionConverter.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IsolatedOntologyOperation.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlReasonerFactory.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/KernelsetFilter.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/TBoxAxiomKernelsetFilter.java
Added Paths:
-----------
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/contraction/
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java
Removed Paths:
-------------
trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java
Copied: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision (from rev 1193, trunk/applications/jasdl-owlapi/src/jasdl/bb/revision)
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/BeliefBaseContractor.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseContractor.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/BeliefBaseContractor.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import java.util.List;
import java.util.Set;
@@ -44,43 +44,40 @@
toRemove.add(axiom);
// note: either axiom is a which is contradictory by definition, or another which is entailed by definition
isolatedOntologyManager.applyChange(new RemoveAxiom(isolatedOntology, axiom));
+
+ // gather justifications
+ // apply incision function (same one???)
+ // recursively contract
- //if(!axiom.equals(a)){ // otherwise we wouldn't need to contract a, can simply remove (it can't have any support by definition)
+
+ SatisfiabilityConverter satcon = new SatisfiabilityConverter(isolatedOntologyManager.getOWLDataFactory());
+ OWLDescription description = satcon.convert(axiom);
+ BlackBoxExplanation bbgen = new BlackBoxExplanation(isolatedOntologyManager);
+ HSTExplanationGenerator hstgen = new HSTExplanationGenerator(bbgen);
+ hstgen.setOntology(isolatedOntology);
+ hstgen.setReasoner(isolatedReasoner);
+ hstgen.setReasonerFactory(reasonerFactory);
+ Set<Set<OWLAxiom>> justifications = kernelsetFilter.apply(hstgen.getExplanations(description));
+
+ //Set<Set<OWLAxiom>> justifications = hstgen.getExplanations(description);
+ if(!justifications.isEmpty()){
+ logger.fine("Description of "+axiom+": "+description);
+ logger.fine("Justifications for "+axiom+": "+justifications);
- // require contraction
- // gather justifications
- // apply incision function (same one???)
- // recursively contract
-
- SatisfiabilityConverter satcon = new SatisfiabilityConverter(isolatedOntologyManager.getOWLDataFactory());
- OWLDescription description = satcon.convert(axiom);
- BlackBoxExplanation bbgen = new BlackBoxExplanation(isolatedOntologyManager);
- HSTExplanationGenerator hstgen = new HSTExplanationGenerator(bbgen);
- hstgen.setOntology(isolatedOntology);
- hstgen.setReasoner(isolatedReasoner);
- hstgen.setReasonerFactory(reasonerFactory);
- Set<Set<OWLAxiom>> justifications = kernelsetFilter.apply(hstgen.getExplanations(description));
-
- //Set<Set<OWLAxiom>> justifications = hstgen.getExplanations(description);
- if(!justifications.isEmpty()){
- logger.fine("Description of "+axiom+": "+description);
- logger.fine("Justifications for "+axiom+": "+justifications);
-
-
- Set<OWLAxiom> toContract = incisionFunction.apply(justifications);
- toRemove.addAll(toContract);
- List<OWLOntologyChange> isolatedRemovals = new Vector<OWLOntologyChange>();
- for(OWLAxiom remove : toContract){
- isolatedRemovals.add(new RemoveAxiom(isolatedOntology, remove));
- }
- logger.fine("Removing: "+toContract);
- isolatedOntologyManager.applyChanges(isolatedRemovals);
-
- toRemove.addAll(contract(toContract, kernelsetFilter, incisionFunction));
+ Set<OWLAxiom> toContract = incisionFunction.apply(justifications);
+ toRemove.addAll(toContract);
+ List<OWLOntologyChange> isolatedRemovals = new Vector<OWLOntologyChange>();
+ for(OWLAxiom remove : toContract){
+ isolatedRemovals.add(new RemoveAxiom(isolatedOntology, remove));
}
- //}
+ logger.fine("Removing: "+toContract);
+ isolatedOntologyManager.applyChanges(isolatedRemovals);
+ toRemove.addAll(contract(toContract, kernelsetFilter, incisionFunction));
+ }
+
+
return toRemove;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/BeliefBaseSemiRevisor.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseSemiRevisor.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/BeliefBaseSemiRevisor.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import jason.RevisionFailedException;
@@ -9,10 +9,12 @@
import java.util.Vector;
import java.util.logging.Logger;
+import org.semanticweb.owl.inference.OWLReasoner;
import org.semanticweb.owl.inference.OWLReasonerException;
import org.semanticweb.owl.model.AddAxiom;
import org.semanticweb.owl.model.OWLAxiom;
import org.semanticweb.owl.model.OWLException;
+import org.semanticweb.owl.model.OWLOntology;
import org.semanticweb.owl.model.OWLOntologyChangeException;
import org.semanticweb.owl.model.OWLOntologyCreationException;
import org.semanticweb.owl.model.OWLOntologyManager;
@@ -40,7 +42,7 @@
isolatedReasoner.classify();
List<OWLAxiom> delList = new Vector<OWLAxiom>();
if(!isolatedReasoner.isConsistent(isolatedOntology)){
- Set<Set<OWLAxiom>> kernelset = applyKernelOperator();
+ Set<Set<OWLAxiom>> kernelset = applyKernelOperator(toAdd, isolatedOntologyManager, isolatedOntology, isolatedReasoner, reasonerFactory);
kernelset = kernelsetFilter.apply(kernelset);
logger.fine("Explanation of inconsistency due to "+toAdd+": "+kernelset);
Set<OWLAxiom> toContract = incisionFunction.apply(kernelset);
@@ -68,20 +70,20 @@
}
- private Set<Set<OWLAxiom>> applyKernelOperator(){
- BlackBoxExplanation bbgen = new BlackBoxExplanation(isolatedOntologyManager);
+ private Set<Set<OWLAxiom>> applyKernelOperator(OWLAxiom a, OWLOntologyManager ontologyManager, OWLOntology ontology, OWLReasoner reasoner, ReasonerFactory reasonerFactory){
+ BlackBoxExplanation bbgen = new BlackBoxExplanation(ontologyManager);
HSTExplanationGenerator hstgen = new HSTExplanationGenerator(bbgen);
- hstgen.setOntology(isolatedOntology);
- hstgen.setReasoner(isolatedReasoner);
+ hstgen.setOntology(ontology);
+ hstgen.setReasoner(reasoner);
hstgen.setReasonerFactory(reasonerFactory);
- IndividualAxiomToDescriptionConverter conv = new IndividualAxiomToDescriptionConverter(isolatedOntologyManager.getOWLDataFactory());
- toAdd.accept(conv);
+ IndividualAxiomToDescriptionConverter conv = new IndividualAxiomToDescriptionConverter(ontologyManager.getOWLDataFactory());
+ a.accept(conv);
Set<Set<OWLAxiom>> kernelset = hstgen.getExplanations(conv.getDescription());
// since we are dealing with semi-revision, ensure the axiom toAdd is a possible justification in each a-kernel that can be retracted
// doesn't seem to be adding when toAdd is a class assertion?? TODO: Is this a bug??
for(Set<OWLAxiom> akernel : kernelset){
- akernel.add(toAdd);
+ akernel.add(a);
}
return kernelset;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IncisionFunction.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IncisionFunction.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IncisionFunction.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import java.util.Set;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IndividualAxiomToDescriptionConverter.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IndividualAxiomToDescriptionConverter.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IndividualAxiomToDescriptionConverter.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import java.util.Collections;
import java.util.HashSet;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IsolatedOntologyOperation.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IsolatedOntologyOperation.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/IsolatedOntologyOperation.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import java.net.URI;
import java.util.List;
Deleted: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlIncisionFunction.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,95 +0,0 @@
-package jasdl.bb.revision;
-
-import jasdl.asSemantics.JasdlAgent;
-import jasdl.bridge.seliteral.SELiteral;
-import jasdl.util.JasdlException;
-import jason.asSyntax.Atom;
-import jason.asSyntax.ListTerm;
-import jason.asSyntax.Term;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.semanticweb.owl.model.OWLAxiom;
-import org.semanticweb.owl.model.OWLIndividualAxiom;
-
-public class JasdlIncisionFunction implements IncisionFunction{
-
-
- private JasdlAgent agent;
- private SELiteral toAddLiteral;
-
- /**
- * The SELiteral to be added is required for a particularly inelegant hack that allows us
- * to retrieve the annotations of the NOT YET ADDED axiom.
- *
- * @param agent required for getting trust ratings
- * @param toAdd
- * @param toAddAnnotations
- */
- public JasdlIncisionFunction(JasdlAgent agent, SELiteral toAddLiteral){
- this.agent = agent;
- this.toAddLiteral = toAddLiteral;
- }
-
- /**
- * Chooses from each akernel axiom with lowest trust associated with it.
- * Currently calculated using ASSERTED source annotations only.
- * No source annotation is taken as trust = 0;
- */
- public Set<OWLAxiom> apply(Set<Set<OWLAxiom>> kernelset) {
- try{
- Set<OWLAxiom> chosen = new HashSet<OWLAxiom>();
- for(Set<OWLAxiom> akernel : kernelset){
- if(!akernel.isEmpty()){
- OWLAxiom leastTrusted = null; // guaranteed to take a value
- float minTrustRating = 1f;
- for(OWLAxiom axiom : akernel){
- float trustRating = getTrustRating(axiom);
- agent.getLogger().finest("Trust rating of "+axiom+"="+trustRating);
- if(trustRating <= minTrustRating){
- minTrustRating = trustRating;
- leastTrusted = axiom;
- }
- }
- chosen.add(leastTrusted);
- }
- }
- return chosen;
- }catch(Exception e){
- e.printStackTrace(); // TODO: introduce a seperate exception hierarchy once this package has been seperated from JASDL
- return null;
- }
- }
-
- /**
- * Currently returns the trust rating of the most trusted source. Future work will look at better ways of calculating this.
- * @param axiom
- * @return
- * @throws JasdlException
- */
- private float getTrustRating(OWLAxiom axiom) throws JasdlException{
- ListTerm sources;
- if(axiom.equals(toAddLiteral.createAxiom())){ // hack to get the annotations of the NOT YET ADDED toAdd axiom
- sources = toAddLiteral.getLiteral().getSources();
- }else{
- SELiteral sl = agent.getAxiomToSELiteralConverter().convert((OWLIndividualAxiom)axiom); // kernel filter ensures axiom is an OWLIndividualAxiom
- sources = sl.getLiteral().getSources();
- }
- agent.getLogger().finest("Sources of "+axiom+"="+sources);
- float maxTrustRating = 0f; // if no sources available, trust is 0
- for(Term source : sources){
- if(!source.isAtom()){
- throw new JasdlException("Invalid source annotation "+source);
- }
- Atom name = (Atom)source;
- float trustRating = agent.getTrustRating(name);
- if(trustRating > maxTrustRating){
- maxTrustRating = trustRating;
- }
- }
- return maxTrustRating;
- }
-
-
-}
Copied: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java (from rev 1195, trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlIncisionFunction.java)
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -0,0 +1,95 @@
+package jasdl.bb.bbops.revision;
+
+import jasdl.asSemantics.JasdlAgent;
+import jasdl.bridge.seliteral.SELiteral;
+import jasdl.util.exception.JasdlException;
+import jason.asSyntax.Atom;
+import jason.asSyntax.ListTerm;
+import jason.asSyntax.Term;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.semanticweb.owl.model.OWLAxiom;
+import org.semanticweb.owl.model.OWLIndividualAxiom;
+
+public class JasdlIncisionFunction implements IncisionFunction{
+
+
+ private JasdlAgent agent;
+ private SELiteral toAddLiteral;
+
+ /**
+ * The SELiteral to be added is required for a particularly inelegant hack that allows us
+ * to retrieve the annotations of the NOT YET ADDED axiom.
+ *
+ * @param agent required for getting trust ratings
+ * @param toAdd
+ * @param toAddAnnotations
+ */
+ public JasdlIncisionFunction(JasdlAgent agent, SELiteral toAddLiteral){
+ this.agent = agent;
+ this.toAddLiteral = toAddLiteral;
+ }
+
+ /**
+ * Chooses from each akernel axiom with lowest trust associated with it.
+ * Currently calculated using ASSERTED source annotations only.
+ * No source annotation is taken as trust = 0;
+ */
+ public Set<OWLAxiom> apply(Set<Set<OWLAxiom>> kernelset) {
+ try{
+ Set<OWLAxiom> chosen = new HashSet<OWLAxiom>();
+ for(Set<OWLAxiom> akernel : kernelset){
+ if(!akernel.isEmpty()){
+ OWLAxiom leastTrusted = null; // guaranteed to take a value
+ float minTrustRating = 1f;
+ for(OWLAxiom axiom : akernel){
+ float trustRating = getTrustRating(axiom);
+ agent.getLogger().finest("Trust rating of "+axiom+"="+trustRating);
+ if(trustRating <= minTrustRating){
+ minTrustRating = trustRating;
+ leastTrusted = axiom;
+ }
+ }
+ chosen.add(leastTrusted);
+ }
+ }
+ return chosen;
+ }catch(Exception e){
+ e.printStackTrace(); // TODO: introduce a seperate exception hierarchy once this package has been seperated from JASDL
+ return null;
+ }
+ }
+
+ /**
+ * Currently returns the trust rating of the most trusted source. Future work will look at better ways of calculating this.
+ * @param axiom
+ * @return
+ * @throws JasdlException
+ */
+ private float getTrustRating(OWLAxiom axiom) throws JasdlException{
+ ListTerm sources;
+ if(axiom.equals(toAddLiteral.createAxiom())){ // hack to get the annotations of the NOT YET ADDED toAdd axiom
+ sources = toAddLiteral.getLiteral().getSources();
+ }else{
+ SELiteral sl = agent.getAxiomToSELiteralConverter().convert((OWLIndividualAxiom)axiom); // kernel filter ensures axiom is an OWLIndividualAxiom
+ sources = sl.getLiteral().getSources();
+ }
+ agent.getLogger().finest("Sources of "+axiom+"="+sources);
+ float maxTrustRating = 0f; // if no sources available, trust is 0
+ for(Term source : sources){
+ if(!source.isAtom()){
+ throw new JasdlException("Invalid source annotation "+source);
+ }
+ Atom name = (Atom)source;
+ float trustRating = agent.getTrustRating(name);
+ if(trustRating > maxTrustRating){
+ maxTrustRating = trustRating;
+ }
+ }
+ return maxTrustRating;
+ }
+
+
+}
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlReasonerFactory.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlReasonerFactory.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlReasonerFactory.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import org.mindswap.pellet.PelletOptions;
import org.mindswap.pellet.owlapi.Reasoner;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/KernelsetFilter.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/KernelsetFilter.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/KernelsetFilter.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import java.util.HashSet;
import java.util.Set;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/TBoxAxiomKernelsetFilter.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/TBoxAxiomKernelsetFilter.java 2008-04-02 17:09:55 UTC (rev 1193)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/TBoxAxiomKernelsetFilter.java 2008-04-02 19:22:40 UTC (rev 1196)
@@ -1,4 +1,4 @@
-package jasdl.bb.revision;
+package jasdl.bb.bbops.revision;
import org.semanticweb.owl.model.OWLAxiom;
import org.semanticweb.owl.model.OWLIndividualAxiom;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|