|
From: <tom...@us...> - 2008-03-20 23:22:48
|
Revision: 1169
http://jason.svn.sourceforge.net/jason/?rev=1169&view=rev
Author: tomklapiscak
Date: 2008-03-20 16:22:41 -0700 (Thu, 20 Mar 2008)
Log Message:
-----------
Description Logic based belief-revision implemented. Given a modification to the ontology that would result in an inconsistency, consistency is be maintained by either contracting the least trusted of the contradictory assertions, or preventing the addition of the incoming belief.
JASDL's implementation of the "incision" function (used establish which justifications to contract) makes use of agent trust ratings (which can now be specified in the mas2j file) established using the source annotation.
JASDL's implementation of the "KernelsetFilter" ensures that only assertions about individuals (i.e. those that can be represented as SE-Literals) can be contracted.
The BeliefBaseRevisor is designed as a general library for belief base revision of OWL-DL ontologies using the OWL-API and will soon be placed in a seperate library.
Since this feature is highly experimental, it can disabled in the mas2j file. In which case, JASDL's legacy consistency maintenence mechanism is adopted (earlier assertions always precede over later ones).
Failed and ineffectual belief additions now handled correctly by JASDL.
travel_agent example updated.
Agent mind-inspector support re-implemented.
Modified Paths:
--------------
trunk/applications/jasdl-owlapi/examples/travel_agent/config.mas2j
trunk/applications/jasdl-owlapi/examples/travel_agent/customer.asl
trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl
trunk/applications/jasdl-owlapi/lib/pellet/pellet.jar
trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java
trunk/applications/jasdl-owlapi/src/jasdl/bridge/ToSELiteralConverter.java
trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteral.java
Added Paths:
-----------
trunk/applications/jasdl-owlapi/lib/pellet/jena/
trunk/applications/jasdl-owlapi/lib/pellet/jena/antlr-2.7.5.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/arq-extra.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/arq.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/commons-logging-1.1.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/concurrent.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/icu4j_3_4.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/iri.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/jena.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/jenatest.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/json.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/junit.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/log4j-1.2.12.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/lucene-core-2.0.0.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/stax-api-1.0.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/wstx-asl-3.0.0.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/xercesImpl.jar
trunk/applications/jasdl-owlapi/lib/pellet/jena/xml-apis.jar
trunk/applications/jasdl-owlapi/lib/pellet/jetty/
trunk/applications/jasdl-owlapi/lib/pellet/jetty/jetty.jar
trunk/applications/jasdl-owlapi/lib/pellet/junit/
trunk/applications/jasdl-owlapi/lib/pellet/junit/junit.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/antlr-runtime-3.0.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/commons-lang-2.2.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-api.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-apibinding.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-change.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-debugging.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-dig1_1.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-functionalparser.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-functionalrenderer.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-impl.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-krssparser.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-mansyntaxparser.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-mansyntaxrenderer.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-metrics.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-oboparser.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-owlxmlparser.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-owlxmlrenderer.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfapi.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfxmlparser.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfxmlrenderer.jar
trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-util.jar
trunk/applications/jasdl-owlapi/lib/pellet/pcj.jar
trunk/applications/jasdl-owlapi/lib/pellet/servlet.jar
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseContractor.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseRevisor.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IncisionFunction.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IsolatedOntologyOperation.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlIncisionFunction.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlReasonerFactory.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/KernelsetFilter.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/TBoxAxiomKernelsetFilter.java
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/config.mas2j
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/config.mas2j 2008-03-20 18:15:42 UTC (rev 1168)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/config.mas2j 2008-03-20 23:22:41 UTC (rev 1169)
@@ -31,12 +31,19 @@
travel_agent
travel_agent.asl
[
- jasdl_default_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy", // applied to incoming ontologies and those given no automapping
+ jasdl_useBeliefRevision = "true", // use experimental DL-based belief revision mechanism
+
+ jasdl_default_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy", // applied to incoming ontologies and those given no automapping
jasdl_ontologies="travel",
jasdl_travel_uri="http://www.dur.ac.uk/t.g.klapiscak/onts/travel.owl",
/*jasdl_travel_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy",*/ // defaults can be overriden per-ontology here
- jasdl_travel_mapping_manual="small_beach=beach" // these manual mappings will override any automatic mappings made by strategies
+ jasdl_travel_mapping_manual="small_beach=beach", // these manual mappings will override any automatic mappings made by strategies,
+
+ // static trust ratings, mainly for testing purposes - likely to change
+ jasdl_knownAgents = "tom,ben",
+ jasdl_tom_trustRating="0.9",
+ jasdl_ben_trustRating="0.4"
]
agentArchClass jasdl.architecture.JasdlAgArch
agentClass jasdl.asSemantics.JasdlAgent
@@ -47,12 +54,14 @@
customer.asl
[
/* jasdl_default_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy", */ // defaults to this
+ jasdl_useBeliefRevision = "true",
jasdl_ontologies="holidays,places",
/*jasdl_holidays_uri="file:///home/tom/Desktop/Project/workspace/jason/applications/jasdl-owlapi/examples/travel_agent/ontologies/travel.owl", */
jasdl_holidays_uri="http://www.dur.ac.uk/t.g.klapiscak/onts/travel.owl",
jasdl_holidays_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy",
jasdl_holidays_mapping_manual="small_beach=beach, luxuriousHotel=LuxuryHotel", // for demonstration of arbitrary primitive mappings being handled correctly
+
jasdl_places_uri="http://www.dur.ac.uk/t.g.klapiscak/onts/places.owl",
jasdl_places_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy"
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/customer.asl
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/customer.asl 2008-03-20 18:15:42 UTC (rev 1168)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/customer.asl 2008-03-20 23:22:41 UTC (rev 1169)
@@ -59,3 +59,7 @@
.print(XS, " are mutually distinct individuals, according to ", Source).
++testing
+ <-
+ .print("Semantically-naive inter-agent communication working").
+
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl 2008-03-20 18:15:42 UTC (rev 1168)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl 2008-03-20 23:22:41 UTC (rev 1169)
@@ -33,6 +33,7 @@
.print("Example: Updating Belief Base 1");
+hotel(hilton)[o(travel)]; // hilton is a hotel
+hasRating(hilton, threeStarRating)[o(travel)]; // hilton has three-star rating
+ +town(london)[o(travel)];
+city(london)[o(travel)]; // london is a city
+hasAccommodation(london, hilton)[o(travel)]; // hilton is in london
+country(england)[o(travel)]; // england is a country
@@ -49,8 +50,28 @@
+!example_UBB_2
<-
.print("Example: Updating Belief Base 2");
- /* 1 */ +hasRating(hilton, twoStarRating)[o(travel)];
- /* 2 */ +ruralArea(london)[o(travel)];
+
+ +city(somewhere)[o(travel), source(ben)];
+ +town(somewhere)[o(travel), source(ben)];
+
+ // Despite the classes urbanArea and ruralArea being disjoint, the belief addition below will succeed,
+ // since tom's word is trusted over ben's (see config.mas2j)
+ // as a result, both (incompatible) assertions made above by ben will be contracted
+ // and the one below will be added. Notice ABox consistency is maintained..
+ +ruralArea(somewhere)[o(travel), source(tom)];
+ ?ruralArea(somewhere)[o(travel)];
+
+ .print("DL-based belief revision is enabled"); // without, the above test-goal will fail, since legacy mechanism simply removes incoming inconsistent beliefs
+
+ // since the classes destination and and contact are disjoint (and ruralArea is a subclass of destination),
+ // and since we trust ben less than tom, the belief addition below will fail (and tom's assertion above will persist),
+ // thus failing the whole plan.
+ +contact(somewhere)[o(travel), source(ben)].
+
+-!example_UBB_2
+ <-
+ // Notice this does not hold, since belief revision rejected the less trusted assertion made by ben.
+ ?~contact(somewhere)[o(travel)];
.print("Completed: Updating Belief Base 2").
@@ -83,6 +104,7 @@
+!example_KSAA
<-
.print("Example: Knowledge Sharing Among Agents");
+ .send(customer, tell, testing);
.send(customer, tell, luxuryHotel(hilton)[o(travel)]);
// since all_different assertions are treated as SE-literals, we can now send them between agents
.send(customer, tell, all_different([hilton, fourSeasons])[o(travel)]).
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/antlr-2.7.5.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/antlr-2.7.5.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/arq-extra.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/arq-extra.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/arq.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/arq.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/commons-logging-1.1.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/commons-logging-1.1.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/concurrent.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/concurrent.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/icu4j_3_4.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/icu4j_3_4.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/iri.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/iri.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/jena.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/jena.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/jenatest.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/jenatest.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/json.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/json.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/junit.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/junit.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/log4j-1.2.12.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/log4j-1.2.12.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/lucene-core-2.0.0.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/lucene-core-2.0.0.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/stax-api-1.0.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/stax-api-1.0.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/wstx-asl-3.0.0.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/wstx-asl-3.0.0.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/xercesImpl.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/xercesImpl.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jena/xml-apis.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jena/xml-apis.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/jetty/jetty.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/jetty/jetty.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/junit/junit.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/junit/junit.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/antlr-runtime-3.0.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/antlr-runtime-3.0.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/commons-lang-2.2.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/commons-lang-2.2.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-api.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-api.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-apibinding.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-apibinding.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-change.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-change.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-debugging.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-debugging.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-dig1_1.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-dig1_1.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-functionalparser.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-functionalparser.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-functionalrenderer.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-functionalrenderer.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-impl.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-impl.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-krssparser.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-krssparser.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-mansyntaxparser.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-mansyntaxparser.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-mansyntaxrenderer.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-mansyntaxrenderer.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-metrics.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-metrics.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-oboparser.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-oboparser.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-owlxmlparser.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-owlxmlparser.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-owlxmlrenderer.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-owlxmlrenderer.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfapi.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfapi.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfxmlparser.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfxmlparser.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfxmlrenderer.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-rdfxmlrenderer.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-util.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/owlapi/owlapi-util.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/jasdl-owlapi/lib/pellet/pcj.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/pcj.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/applications/jasdl-owlapi/lib/pellet/pellet.jar
===================================================================
(Binary files differ)
Added: trunk/applications/jasdl-owlapi/lib/pellet/servlet.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/jasdl-owlapi/lib/pellet/servlet.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-03-20 18:15:42 UTC (rev 1168)
+++ trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -5,6 +5,10 @@
import jasdl.asSemantics.parsing.URIEntityChecker;
import jasdl.asSyntax.JasdlPlanLibrary;
import jasdl.bb.JasdlBeliefBase;
+import jasdl.bb.revision.BeliefBaseRevisor;
+import jasdl.bb.revision.JasdlIncisionFunction;
+import jasdl.bb.revision.JasdlReasonerFactory;
+import jasdl.bb.revision.TBoxAxiomKernelsetFilter;
import jasdl.bridge.AllDifferentPlaceholder;
import jasdl.bridge.ToAxiomConverter;
import jasdl.bridge.ToSELiteralConverter;
@@ -16,15 +20,20 @@
import jasdl.bridge.alias.MappingStrategy;
import jasdl.bridge.label.LabelManager;
import jasdl.bridge.label.OntologyURIManager;
+import jasdl.bridge.seliteral.SELiteral;
import jasdl.bridge.seliteral.SELiteralFactory;
import jasdl.util.DuplicateMappingException;
import jasdl.util.InvalidSELiteralException;
import jasdl.util.JasdlException;
+import jasdl.util.NotEnrichedException;
import jasdl.util.UnknownMappingException;
import jason.JasonException;
+import jason.RevisionFailedException;
import jason.architecture.AgArch;
+import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
import jason.asSyntax.Atom;
+import jason.asSyntax.Literal;
import jason.bb.BeliefBase;
import jason.runtime.Settings;
@@ -32,6 +41,7 @@
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Vector;
@@ -42,10 +52,15 @@
import org.mindswap.pellet.PelletOptions;
import org.mindswap.pellet.owlapi.Reasoner;
import org.semanticweb.owl.apibinding.OWLManager;
+import org.semanticweb.owl.model.AddAxiom;
+import org.semanticweb.owl.model.OWLAnnotation;
+import org.semanticweb.owl.model.OWLAxiom;
+import org.semanticweb.owl.model.OWLAxiomAnnotationAxiom;
import org.semanticweb.owl.model.OWLClass;
import org.semanticweb.owl.model.OWLDescription;
import org.semanticweb.owl.model.OWLEntity;
import org.semanticweb.owl.model.OWLEquivalentClassesAxiom;
+import org.semanticweb.owl.model.OWLIndividualAxiom;
import org.semanticweb.owl.model.OWLOntology;
import org.semanticweb.owl.model.OWLOntologyChangeException;
import org.semanticweb.owl.model.OWLOntologyCreationException;
@@ -54,7 +69,7 @@
import uk.ac.manchester.cs.owl.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl;
-public class JasdlAgent extends JmcaAgent {
+public class JasdlAgent extends JmcaAgent{
public static List<MappingStrategy> DEFAULT_MAPPING_STRATEGIES = Arrays.asList( new MappingStrategy[] { new DecapitaliseMappingStrategy()} );
private OWLOntologyManager ontologyManager;
@@ -76,13 +91,12 @@
public static String ANON_LABEL_PREFIX = "anon_label_";
public static String ANON_ALIAS_PREFIX = "anon_alias_";
- /**
- * Since Jason doesn't initialise an agent name in time
- */
- private String agentName;
-
private DefinitionManager definitionManager;
+ private HashMap<Atom, Float> trustMap;
+
+ private boolean beliefRevisionEnabled = true;
+
public JasdlAgent(){
@@ -101,6 +115,8 @@
toAxiomConverter = new ToAxiomConverter(this);
toSELiteralConverter = new ToSELiteralConverter(this);
+ trustMap = new HashMap<Atom, Float>();
+
manchesterObjectRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl();
manchesterObjectRenderer.setShortFormProvider(new ShortFormProvider(){
public void dispose() {
@@ -124,6 +140,8 @@
+
+
@Override
public TransitionSystem initAg(AgArch arch, BeliefBase bb, String src, Settings stts) throws JasonException {
if(!(bb instanceof JasdlBeliefBase)){
@@ -149,8 +167,110 @@
return ts;
}
+ public List<Literal> getABoxState() throws JasdlException{
+ List<Literal> bels = new Vector<Literal>();
+ for(OWLOntology ontology : ontologyManager.getOntologies()){
+ for(OWLIndividualAxiom axiom : ontology.getIndividualAxioms()){
+ Literal l = toSELiteralConverter.convert(axiom).getLiteral();
+ bels.add(l);
+ }
+ }
+ return bels;
+ }
+
+
+
+ public List<Literal>[] brf(Literal beliefToAdd, Literal beliefToDel, Intention i) throws RevisionFailedException {
+
+ if(!isBeliefRevisionEnabled()){ // if experimental feature is disabled
+ return super.brf(beliefToAdd, beliefToDel, i);
+ }
+
+ List<Literal> addList = new Vector<Literal>();
+ List<Literal> removeList = new Vector<Literal>();
+
+
+ // just accept beliefToDel. Assumption: Deletions never lead to inconsistencies?!
+ if(beliefToDel != null){
+ removeList.add(beliefToDel);
+ }
+
+ if(beliefToAdd != null){
+ try{
+
+
+ SELiteral sl = getSELiteralFactory().create(beliefToAdd);
+ OWLAxiom axiomToAdd = sl.createAxiom();
+
+ BeliefBaseRevisor bbrev = new BeliefBaseRevisor(axiomToAdd, getOntologyManager(), new JasdlReasonerFactory(), getLogger());
+ List<OWLAxiom>[] result = bbrev.revise(new TBoxAxiomKernelsetFilter(), new JasdlIncisionFunction(this, sl));
+
+ /*
+ for(OWLAxiom added : result[0]){
+ addList.add( getToSELiteralConverter().convert((OWLIndividualAxiom)added).getLiteral()); // safe type cast - Jasdl's incision function ensures only individual axioms are contracted
+ }
+ */
+ // Simplication possible: only at most one addition (toAdd). Additionally, annotations required!
+ if(result[0].contains(axiomToAdd)){
+ addList.add(beliefToAdd);
+
+ // there will only be axioms to remove if we accepted beliefToAdd
+ for(OWLAxiom removed : result[1]){
+ removeList.add( getToSELiteralConverter().convert((OWLIndividualAxiom)removed).getLiteral()); // safe type cast - Jasdl's incision function ensures only individual axioms are contracted
+ }
+ }else{
+ // throw revision failed exception, since we didn't successfully add this belief
+ throw new RevisionFailedException("Revision failed on "+beliefToAdd);
+ }
+
+
+ }catch(RevisionFailedException e){
+ throw e; // propagate upwards
+ }catch(NotEnrichedException e){
+ // can't perform DL-based belief revision on SN-Literals
+ addList.add(beliefToAdd);
+ }catch(Exception e){
+ getLogger().warning("Error performing belief revision. Reason:");
+ e.printStackTrace();
+ }
+ }
+ List<Literal>[] toReturn = null;
+
+
+ // affect BB
+ for(Literal added : addList){
+ if(getBB().add(added)){
+ if(toReturn == null){
+ toReturn = new List[2];
+ toReturn[0] = new Vector<Literal>();
+ toReturn[1] = new Vector<Literal>();
+ }
+ toReturn[0].add(added);
+ }
+ }
+ for(Literal removed : removeList){
+ if(getBB().remove(removed)){
+ if(toReturn == null){
+ if(toReturn == null){
+ toReturn = new List[2];
+ toReturn[0] = new Vector<Literal>();
+ toReturn[1] = new Vector<Literal>();
+ }
+ toReturn[1].add(removed);
+ }
+
+ }
+ }
+
+ return toReturn;
+ }
+
+
+
+
+
/**
* Convenience method to (polymorphically) create an entity from resource URI (if known).
* TODO: where should this sit?
@@ -476,4 +596,28 @@
return manchesterURIDescriptionParser;
}
+ public void setTrustRating(Atom name, float trust){
+ trustMap.remove(name);
+ trustMap.put(name, trust);
+ }
+
+ public Float getTrustRating(Atom name){
+ return trustMap.get(name);
+ }
+
+
+
+
+
+ public boolean isBeliefRevisionEnabled() {
+ return beliefRevisionEnabled;
+ }
+
+ public void setBeliefRevisionEnabled(boolean beliefRevisionEnabled) {
+ this.beliefRevisionEnabled = beliefRevisionEnabled;
+ }
+
+
+
+
}
Modified: trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java 2008-03-20 18:15:42 UTC (rev 1168)
+++ trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -26,6 +26,9 @@
private static String MAS2J_MAPPING_STRATEGIES = "_mapping_strategies";
private static String MAS2J_MAPPING_MANUAL = "_mapping_manual";
private static String MAS2J_AGENT_NAME = "_agent_name";
+ private static String MAS2J_TRUSTRATING = "_trustRating";
+ private static String MAS2J_KNOWNAGENTS = "_knownAgents";
+ private static String MAS2J_USEBELIEFREVISION = "_useBeliefRevision";
/**
* List of reserved ontology labels. Currently:
@@ -49,9 +52,15 @@
// load default mapping strategies
agent.setDefaultMappingStrategies(getMappingStrategies(stts, new Atom("default"))); //implication "default" is a reserved ontology label
+ // set whether to use belief revision or not
+ String useBeliefRevision = prepareUserParameter(stts, MAS2J_PREFIX + MAS2J_USEBELIEFREVISION);
+ agent.setBeliefRevisionEnabled(Boolean.parseBoolean(useBeliefRevision));
+
loadOntologies(stts);
- applyManualMappings(stts);
+ applyManualMappings(stts);
+ loadTrustRatings(stts);
+
}catch(JasdlException e){
throw new JasdlException("JASDL agent encountered error during configuration. Reason: "+e);
@@ -105,6 +114,26 @@
}
}
+ private void loadTrustRatings(Settings stts) throws JasdlException{
+ // agent trusts itself completely!
+ agent.setTrustRating(new Atom("self"), 1f);
+
+ // load trust ratings
+ String[] knownAgents = splitUserParameter(stts, MAS2J_PREFIX + MAS2J_KNOWNAGENTS);
+ for(String knownAgent : knownAgents){
+ if(knownAgent.length() > 0){
+ String _trustRating = prepareUserParameter(stts, MAS2J_PREFIX + "_" + knownAgent + MAS2J_TRUSTRATING);
+ Float trustRating;
+ try{
+ trustRating = Float.parseFloat(_trustRating);
+ }catch(NumberFormatException e){
+ throw new JasdlException("Invalid trust rating for "+knownAgent+". Reason: "+e);
+ }
+ agent.setTrustRating(new Atom(knownAgent), trustRating);
+ }
+ }
+ }
+
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java 2008-03-20 18:15:42 UTC (rev 1168)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -1,18 +1,25 @@
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.bb.DefaultBeliefBase;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
+import java.util.Vector;
import java.util.logging.Logger;
import org.semanticweb.owl.model.AddAxiom;
+import org.semanticweb.owl.model.OWLAnnotation;
+import org.semanticweb.owl.model.OWLAxiomAnnotationAxiom;
import org.semanticweb.owl.model.OWLDifferentIndividualsAxiom;
import org.semanticweb.owl.model.OWLIndividual;
import org.semanticweb.owl.model.OWLIndividualAxiom;
@@ -27,23 +34,44 @@
public boolean add(Literal l) {
getLogger().fine("Adding "+l);
try{
- SELiteral sl = agent.getSELiteralFactory().create(l);
- getLogger().fine("... "+sl);
+ SELiteral sl = agent.getSELiteralFactory().create(l); // all non-JASDL annotations added.. TODO: This needs sorting
+ OWLIndividualAxiom axiom = sl.createAxiom();
OWLOntology ontology = sl.getOntology();
- OWLIndividualAxiom axiom = sl.createAxiom();
- getLogger().fine("..... as axiom: "+axiom);
- AddAxiom add = new AddAxiom(ontology, axiom);
- agent.getOntologyManager().applyChange(add);
- agent.getReasoner().refresh();
+ // 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);
- if(!agent.getReasoner().isConsistent()){
- RemoveAxiom rem = new RemoveAxiom(ontology, axiom);
- agent.getOntologyManager().applyChange(rem);
+ // 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){
+ agent.getOntologyManager().applyChange(new AddAxiom(ontology, annotAxiom));
+ }
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);
+ agent.getOntologyManager().applyChange(rem);
+ agent.getReasoner().refresh();
+ return false;
+ }
+ }
+
+ return true;
+ }else{
return false;
- }
-
- return true;
+ }
}catch(NotEnrichedException e){
getLogger().fine("... semantically-naive");
return super.add(l); // semantically-naive, use standard Jason mechanisms
@@ -53,13 +81,19 @@
return false;
}
}
+
-
-
+ /**
+ * Removal is equivalent to contraction!
+ */
@Override
public boolean remove(Literal l) {
getLogger().fine("Removing "+l);
try{
+ // TODO: use contraction
+ //BeliefBaseContractor contractor = new BeliefBaseContractor(agent.getOntologyManager(), new JasdlReasonerFactory(), agent.getLogger());
+ //contractor.contract(axiom, kernelsetFilter, incisionFunction)
+
SELiteral sl = agent.getSELiteralFactory().create(l);
OWLOntology ontology = sl.getOntology();
OWLIndividualAxiom axiom = sl.createAxiom();
@@ -80,7 +114,13 @@
@Override
public Literal contains(Literal l) {
try {
- agent.getSELiteralFactory().create(l); // just to check for enrichement
+ // TODO: use OWLOntology#contains
+ SELiteral sl = agent.getSELiteralFactory().create(l); // <- currently just to establish if semantically-enriched
+ //OWLIndividualAxiom axiom = sl.createAxiom();
+ //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);
+
+
Iterator<Literal> it = getRelevant(l);
if(it.hasNext()){
return it.next();
@@ -119,6 +159,9 @@
}
relevant.add(found.getLiteral());
+
+
+
}
getLogger().fine("... found: "+relevant);
}catch(NotEnrichedException e){
@@ -129,6 +172,30 @@
}
return relevant.iterator();
}
+
+
+ /**
+ * TODO: Currently only returns asserted ABox axioms. Include option to also show inferences?
+ */
+ @Override
+ public Iterator<Literal> iterator() {
+ List<Literal> bels = new Vector<Literal>();
+
+ // add all SN-Literals
+ Iterator it = super.iterator();
+ while(it.hasNext()){
+ bels.add((Literal)it.next());
+ }
+
+ // add all SE-Literals (asserted)
+ try{
+ bels.addAll(agent.getABoxState());
+ }catch(JasdlException e){
+ getLogger().warning("Exception caught while retrieving ABox state: "+e);
+ }
+
+ return bels.iterator();
+ }
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseContractor.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseContractor.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseContractor.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -0,0 +1,88 @@
+package jasdl.bb.revision;
+
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+import java.util.logging.Logger;
+
+import org.semanticweb.owl.inference.OWLReasonerException;
+import org.semanticweb.owl.model.OWLAxiom;
+import org.semanticweb.owl.model.OWLDescription;
+import org.semanticweb.owl.model.OWLOntologyChange;
+import org.semanticweb.owl.model.OWLOntologyChangeException;
+import org.semanticweb.owl.model.OWLOntologyCreationException;
+import org.semanticweb.owl.model.OWLOntologyManager;
+import org.semanticweb.owl.model.RemoveAxiom;
+import org.semanticweb.owl.model.UnknownOWLOntologyException;
+
+import com.clarkparsia.explanation.BlackBoxExplanation;
+import com.clarkparsia.explanation.HSTExplanationGenerator;
+import com.clarkparsia.explanation.ReasonerFactory;
+import com.clarkparsia.explanation.SatisfiabilityConverter;
+
+public class BeliefBaseContractor extends IsolatedOntologyOperation{
+
+ private Logger logger;
+
+ public BeliefBaseContractor(OWLOntologyManager originalManager, ReasonerFactory reasonerFactory, Logger logger) throws OWLOntologyCreationException, OWLOntologyChangeException, UnknownOWLOntologyException, OWLReasonerException {
+ super(originalManager, reasonerFactory);
+ this.logger = logger;
+ }
+
+ public List<OWLAxiom> contract(Set<OWLAxiom> contractionSet, KernelsetFilter kernelsetFilter, IncisionFunction incisionFunction) throws OWLOntologyChangeException, OWLReasonerException{
+ List<OWLAxiom> toRemove = new Vector<OWLAxiom>(); // to be removed OUTSIDE isolated ontology elsewhere
+ for(OWLAxiom toContract : contractionSet){
+ toRemove.addAll(contract(toContract, kernelsetFilter, incisionFunction));
+ }
+ return toRemove;
+ }
+
+ public List<OWLAxiom> contract(OWLAxiom axiom, KernelsetFilter kernelsetFilter, IncisionFunction incisionFunction) throws OWLOntologyChangeException, OWLReasonerException{
+ List<OWLAxiom> toRemove = new Vector<OWLAxiom>();
+
+ logger.fine("Contracting "+axiom+"...");
+ 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));
+
+ //if(!axiom.equals(a)){ // otherwise we wouldn't need to contract a, can simply remove (it can't have any support by definition)
+
+ // 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));
+ }
+ //}
+
+ return toRemove;
+
+
+ }
+}
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseRevisor.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseRevisor.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/BeliefBaseRevisor.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -0,0 +1,92 @@
+package jasdl.bb.revision;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Set;
+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.OWLDescription;
+import org.semanticweb.owl.model.OWLOntology;
+import org.semanticweb.owl.model.OWLOntologyChange;
+import org.semanticweb.owl.model.OWLOntologyChangeException;
+import org.semanticweb.owl.model.OWLOntologyCreationException;
+import org.semanticweb.owl.model.OWLOntologyManager;
+import org.semanticweb.owl.model.UnknownOWLOntologyException;
+
+import com.clarkparsia.explanation.BlackBoxExplanation;
+import com.clarkparsia.explanation.HSTExplanationGenerator;
+import com.clarkparsia.explanation.ReasonerFactory;
+import com.clarkparsia.explanation.SatisfiabilityConverter;
+
+public class BeliefBaseRevisor extends IsolatedOntologyOperation {
+
+ private Logger logger;
+ private OWLAxiom toAdd;
+
+ public BeliefBaseRevisor(OWLAxiom toAdd, OWLOntologyManager originalManager, ReasonerFactory reasonerFactory, Logger logger) throws UnknownOWLOntologyException, OWLOntologyCreationException, OWLOntologyChangeException, OWLReasonerException{
+ super(originalManager, reasonerFactory);
+ this.logger = logger;
+ // unfortunately, this needs to be done here (not in .revise)
+ // since JASDL (specifically) needs to annotate this axiom
+ this.toAdd = toAdd;
+ isolatedOntologyManager.applyChange(new AddAxiom(isolatedOntology, toAdd));
+ }
+
+ public List<OWLAxiom>[] revise(KernelsetFilter kernelsetFilter, IncisionFunction incisionFunction){
+ List<OWLAxiom> addList = new Vector<OWLAxiom>();
+ List<OWLAxiom> delList = new Vector<OWLAxiom>();
+ try {
+ isolatedReasoner.classify();
+
+ if(isolatedReasoner.isConsistent(isolatedOntology)){
+ addList.add(toAdd);
+ }else{
+ Set<Set<OWLAxiom>> kernelset = applyKernelOperator(toAdd, isolatedOntologyManager, isolatedOntology, isolatedReasoner, reasonerFactory);
+ kernelset = kernelsetFilter.apply(kernelset);
+ log("Explanation of inconsistency: "+kernelset);
+ BeliefBaseContractor contractor = new BeliefBaseContractor(isolatedOntologyManager, reasonerFactory, logger);
+ List<OWLAxiom> contracted = contractor.contract(incisionFunction.apply(kernelset), kernelsetFilter, incisionFunction);
+
+
+ if(!contracted.contains(toAdd)){
+ addList.add(toAdd); // remember, toAdd is not in original ontology so need to remove if it has been contracted
+ }
+ delList.addAll(contracted);
+ }
+
+
+ } catch (Exception e) {
+ logger.warning("Revision failed. Reason: ");
+ e.printStackTrace();
+ }
+
+ return new List[] {addList, delList};
+ }
+
+
+ private Set<Set<OWLAxiom>> applyKernelOperator(OWLAxiom a, OWLOntologyManager ontologyManager, OWLOntology ontology, OWLReasoner reasoner, ReasonerFactory reasonerFactory){
+ SatisfiabilityConverter satcon = new SatisfiabilityConverter(ontologyManager.getOWLDataFactory());
+ OWLDescription description = ontologyManager.getOWLDataFactory().getOWLObjectComplementOf(satcon.convert(a));
+ BlackBoxExplanation bbgen = new BlackBoxExplanation(ontologyManager);
+ HSTExplanationGenerator hstgen = new HSTExplanationGenerator(bbgen);
+ hstgen.setOntology(ontology);
+ hstgen.setReasoner(reasoner);
+ hstgen.setReasonerFactory(reasonerFactory);
+ return hstgen.getExplanations(description);
+ }
+
+
+ private void log(String msg){
+ if(logger != null){
+ logger.fine(msg);
+ }
+ }
+
+
+
+}
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IncisionFunction.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IncisionFunction.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IncisionFunction.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -0,0 +1,18 @@
+package jasdl.bb.revision;
+
+import java.util.Set;
+
+import org.semanticweb.owl.model.OWLAxiom;
+
+public interface IncisionFunction {
+
+
+
+ /**
+ * Given a kernel set, establish a set of beliefs that undermine all kernels
+ * Abstract since application dependent (see parsia:brf)
+ * @param kernelset
+ * @return
+ */
+ public Set<OWLAxiom> apply(Set<Set<OWLAxiom>> input);
+}
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IsolatedOntologyOperation.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IsolatedOntologyOperation.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/IsolatedOntologyOperation.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -0,0 +1,59 @@
+package jasdl.bb.revision;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Vector;
+
+import org.semanticweb.owl.apibinding.OWLManager;
+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.OWLOntology;
+import org.semanticweb.owl.model.OWLOntologyChange;
+import org.semanticweb.owl.model.OWLOntologyChangeException;
+import org.semanticweb.owl.model.OWLOntologyCreationException;
+import org.semanticweb.owl.model.OWLOntologyManager;
+import org.semanticweb.owl.model.UnknownOWLOntologyException;
+
+import com.clarkparsia.explanation.ReasonerFactory;
+// brf should clone ontology so other reasoning can carry on elsewhere
+public class IsolatedOntologyOperation {
+
+ protected OWLOntologyManager isolatedOntologyManager;
+ protected OWLOntology isolatedOntology;
+ protected ReasonerFactory reasonerFactory;
+ protected OWLReasoner isolatedReasoner;
+
+
+ public IsolatedOntologyOperation(OWLOntologyManager originalManager, ReasonerFactory reasonerFactory) throws OWLOntologyCreationException, OWLOntologyChangeException, UnknownOWLOntologyException, OWLReasonerException{
+ this.isolatedOntologyManager = OWLManager.createOWLOntologyManager();
+ this.isolatedOntology = createDebuggingOntology(originalManager, isolatedOntologyManager);
+ this.reasonerFactory = new JasdlReasonerFactory();
+ this.isolatedReasoner = reasonerFactory.createReasoner(isolatedOntologyManager);
+ this.isolatedReasoner.loadOntologies(isolatedOntologyManager.getImportsClosure(isolatedOntology));
+ }
+
+ private OWLOntology createDebuggingOntology(OWLOntologyManager from, OWLOntologyManager to) throws OWLOntologyCreationException, OWLOntologyChangeException{
+ OWLOntology debuggingOntology = to.createOntology(URI.create("http://beliefbase/isolated.owl"));
+ for(OWLOntology ontology : from.getOntologies()){
+ List<OWLOntologyChange> changes = new Vector<OWLOntologyChange>();
+ for(OWLAxiom axiom : ontology.getAxioms()){
+ AddAxiom change = new AddAxiom(debuggingOntology, axiom);
+ changes.add(change);
+ }
+ to.applyChanges(changes);
+ }
+ return debuggingOntology;
+ }
+
+ public OWLOntology getIsolatedOntology() {
+ return isolatedOntology;
+ }
+
+ public OWLOntologyManager getIsolatedOntologyManager() {
+ return isolatedOntologyManager;
+ }
+
+
+}
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlIncisionFunction.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlIncisionFunction.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlIncisionFunction.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -0,0 +1,95 @@
+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.getToSELiteralConverter().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;
+ }
+
+
+}
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlReasonerFactory.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlReasonerFactory.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/JasdlReasonerFactory.java 2008-03-20 23:22:41 UTC (rev 1169)
@@ -0,0 +1,28 @@
+package jasdl.bb.revision;
+
+import org.mindswap.pellet.owlapi.Reasoner;
+import org.semanticweb.owl.inference.OWLReasoner;
+import org.semanticweb.owl.model.OWLOntologyManager;
+
+import com.clarkparsia.explanation.ReasonerFactory;
+
+public class JasdlReasonerFactory implements ReasonerFactory{
+
+ public JasdlReasonerFactory() {
+ super();
+ }
+
+ public boolean requiresExplicitClassification() {
+ return false;
+ }
+
+ public OWLReasoner createReasoner(OWLOntologyManager manager) {
+ return new Reasoner(manager);
+ }
+
+ public String getReasonerName() {
+ return "reasoner";
+ }
+
+
+}
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/KernelsetFilter.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/KernelsetFilter.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/revision/KernelsetFilter.java 2008-0...
[truncated message content] |