|
From: <tom...@us...> - 2008-03-16 17:44:52
|
Revision: 1155
http://jason.svn.sourceforge.net/jason/?rev=1155&view=rev
Author: tomklapiscak
Date: 2008-03-16 10:44:47 -0700 (Sun, 16 Mar 2008)
Log Message:
-----------
Run-time class definition implemented. Switched to use the OWL-API Manchester OWL Syntax parser as opposed to Clexer. Additionally, class-definitions now include namespace prefixes for entities and can span any entity from any ontology known to the agent.
Dropped "origin" annotation -> run-time defined classes are distinguished inherently now since they "reside" in an agent's "personal" ontology. Individuals defined at run-time also reside in this ontology.
Further work on semantically-enriched knowledge sharing. Switched to using OWL-API Manchester OWL Syntax renderer for generation of class expressions to be shared.
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/ontologies/travel.owl
trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl
trunk/applications/jasdl-owlapi/src/jasdl/architecture/IncomingPropContProcessingStrategy.java
trunk/applications/jasdl-owlapi/src/jasdl/architecture/JasdlAgArch.java
trunk/applications/jasdl-owlapi/src/jasdl/architecture/OutgoingPropContProcessingStrategy.java
trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java
trunk/applications/jasdl-owlapi/src/jasdl/bridge/MappingManager.java
trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteral.java
trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteralFactory.java
Added Paths:
-----------
trunk/applications/jasdl-owlapi/examples/travel_agent/ontologies/places.owl
trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/OntologyURIManager.java
trunk/applications/jasdl-owlapi/src/jasdl/ia/
trunk/applications/jasdl-owlapi/src/jasdl/ia/define_class.java
Removed Paths:
-------------
trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/PhysicalURIManager.java
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/config.mas2j
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/config.mas2j 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/config.mas2j 2008-03-16 17:44:47 UTC (rev 1155)
@@ -33,11 +33,14 @@
travel_agent
travel_agent.asl
[
- jasdl_ontologies="travel",
+ jasdl_ontologies="travel,places",
jasdl_travel_uri="http://www.dur.ac.uk/t.g.klapiscak/onts/travel.owl",
jasdl_travel_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy",
- jasdl_travel_mapping_manual="small_beach=beach"
+ jasdl_travel_mapping_manual="small_beach=beach",
+ jasdl_places_uri="http://www.dur.ac.uk/t.g.klapiscak/onts/places.owl",
+ jasdl_places_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy"
+
//,jasdl_aktors_uri="http://www.aktors.org/ontology/portal.owl",
//jasdl_aktors_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy"
]
@@ -50,8 +53,8 @@
customer.asl
[
jasdl_ontologies="holidays",
+ //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_uri="file:///home/tom/Desktop/Project/workspace/jason/applications/jasdl-owlapi/examples/travel_agent/ontologies/travel.owl",
jasdl_holidays_mapping_strategies="jasdl.bridge.alias.DecapitaliseMappingStrategy",
jasdl_holidays_mapping_manual="small_beach=beach, luxuriousHotel=LuxuryHotel" // arbitrary primitive mappings handled correctly
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/customer.asl
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/customer.asl 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/customer.asl 2008-03-16 17:44:47 UTC (rev 1155)
@@ -21,12 +21,12 @@
+luxuriousHotel(L)[o(holidays), source(Source)]
<-
/* 1 */ .print("The ", L, " luxurious hotel is available");
- /* 2 */ jasdl.ia.define_class(query, "city and hasAccommodation value ", L, holidays);
+ /* 2 */ jasdl.ia.define_class(query, "city and hasAccommodation value ", L);
/* 3 */ .send(Source, askOne, query(City)[o(holidays)], query(City)[o(holidays)]);
/* 4 */ .print(L, " is located in the city ", City);
// check given hotel is located in a destination that has some museums
- jasdl.ia.define_class(q2, "{",L,"} and isLocatedAt some (hasActivity some museums)", holidays);
+ jasdl.ia.define_class(q2, "{",L,"} and isLocatedAt some (hasActivity some museums)");
.send(Source, askOne, q2(Hotel)[o(holidays)], q2(Hotel)[o(holidays)]);
.print(Hotel, " is located in a city with some museums");
Added: trunk/applications/jasdl-owlapi/examples/travel_agent/ontologies/places.owl
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/ontologies/places.owl (rev 0)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/ontologies/places.owl 2008-03-16 17:44:47 UTC (rev 1155)
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+
+
+<!DOCTYPE rdf:RDF [
+ <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
+ <!ENTITY owl11 "http://www.w3.org/2006/12/owl11#" >
+ <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
+ <!ENTITY owl11xml "http://www.w3.org/2006/12/owl11-xml#" >
+ <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
+ <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
+ <!ENTITY places "http://www.dur.ac.uk/t.g.klapiscak/ontologies/places.owl#" >
+]>
+
+
+<rdf:RDF xmlns="http://www.dur.ac.uk/t.g.klapiscak/ontologies/places.owl#"
+ xml:base="http://www.dur.ac.uk/t.g.klapiscak/ontologies/places.owl"
+ xmlns:places="http://www.dur.ac.uk/t.g.klapiscak/ontologies/places.owl#"
+ xmlns:owl11="http://www.w3.org/2006/12/owl11#"
+ xmlns:owl11xml="http://www.w3.org/2006/12/owl11-xml#"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:owl="http://www.w3.org/2002/07/owl#">
+ <owl:Ontology rdf:about=""/>
+
+
+
+ <!--
+ ///////////////////////////////////////////////////////////////////////////////////////
+ //
+ // Classes
+ //
+ ///////////////////////////////////////////////////////////////////////////////////////
+ -->
+
+
+
+
+ <!-- http://www.dur.ac.uk/t.g.klapiscak/ontologies/places.owl#Building -->
+
+ <owl:Class rdf:about="#Building">
+ <rdfs:subClassOf rdf:resource="#Place"/>
+ </owl:Class>
+
+
+
+ <!-- http://www.dur.ac.uk/t.g.klapiscak/ontologies/places.owl#Place -->
+
+ <owl:Class rdf:about="#Place">
+ <rdfs:subClassOf rdf:resource="&owl;Thing"/>
+ </owl:Class>
+
+
+
+ <!-- http://www.w3.org/2002/07/owl#Thing -->
+
+ <owl:Class rdf:about="&owl;Thing"/>
+</rdf:RDF>
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/ontologies/travel.owl
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/ontologies/travel.owl 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/ontologies/travel.owl 2008-03-16 17:44:47 UTC (rev 1155)
@@ -323,9 +323,6 @@
<rdfs:subClassOf rdf:resource="#Destination"/>
</owl:Class>
- <owl:Class rdf:about="#beach">
- <rdfs:subClassOf rdf:resource="#Destination"/>
- </owl:Class>
<!-- http://www.owl-ontologies.com/travel.owl#BedAndBreakfast -->
@@ -677,6 +674,14 @@
+ <!-- http://www.owl-ontologies.com/travel.owl#beach -->
+
+ <owl:Class rdf:about="#beach">
+ <rdfs:subClassOf rdf:resource="#Destination"/>
+ </owl:Class>
+
+
+
<!-- http://www.w3.org/2002/07/owl#Thing -->
<owl:Class rdf:about="&owl;Thing"/>
@@ -709,9 +714,9 @@
<!-- http://www.owl-ontologies.com/travel.owl#TwoStarRating -->
<AccommodationRating rdf:about="#TwoStarRating"/>
+
-
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl 2008-03-16 17:44:47 UTC (rev 1155)
@@ -45,6 +45,15 @@
+hasActivity(london, scienceMuseum)[o(travel)];
+hotel(travel_lodge)[o(travel)];
+ +building(hilton)[o(places)];
+
+ ?place(Place)[o(places)];
+ .print(Place);
+
+ jasdl.ia.define_class(q2, "(places:place and places:building) and travel:hotel");
+ ?q2(X)[o(self)];
+ .print(X);
+
.print("Completed: Updating Belief Base 1").
@@ -121,11 +130,11 @@
+hasActivity(butlins, butlins_yoga)[o(travel)];
+hasActivity(butlins, butlins_sunbathing)[o(travel)];
//jasdl.ia.all_different([butlins_yoga, butlins_sunbathing], travel); - DEPRECATED (see below)
- +all_different([butlins_yoga, butlins_sunbathing])[o(travel), something]; // all_different now represented as an se-literal. We can now query, inspect and send these assertions
+ +all_different([butlins_yoga, butlins_sunbathing])[o(self), something]; // all_different now represented as an se-literal. We can now query, inspect and send these assertions
// Query below will not succeed unless butlins_yoga and butlins_sunbathing are different individuals since family destination requires min 2 *different* activities.
// Note: OWL doesn't make UNA and since these individuals do not belong to disjoint classes, therefore they must be explicitly asserted as different.
?familyDestination(butlins)[o(travel)];
- ?all_different([butlins_yoga, butlins_sunbathing, hilton])[o(travel)];
+ ?all_different([butlins_yoga, butlins_sunbathing, hilton])[o(self)];
/* ?all_different([hilton, fourSeasons])[o(travel)]; */ // Will fail, since hilton and fourSeasons cannot be established as distinct
.print("Completed: all_different assertion").
Modified: trunk/applications/jasdl-owlapi/src/jasdl/architecture/IncomingPropContProcessingStrategy.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/architecture/IncomingPropContProcessingStrategy.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/architecture/IncomingPropContProcessingStrategy.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -19,6 +19,8 @@
*/
package jasdl.architecture;
+import static jasdl.architecture.JasdlAgArch.NAMED_ANNOTATION_FUNCTOR;
+import static jasdl.architecture.JasdlAgArch.ANON_ANNOTATION_FUNCTOR;
import jasdl.asSemantics.JasdlAgent;
import jasdl.bridge.seliteral.SELiteral;
import jasdl.util.JasdlException;
Modified: trunk/applications/jasdl-owlapi/src/jasdl/architecture/JasdlAgArch.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/architecture/JasdlAgArch.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/architecture/JasdlAgArch.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -36,6 +36,8 @@
public class JasdlAgArch extends AgArch {
+ public static String NAMED_ANNOTATION_FUNCTOR = "named";
+ public static String ANON_ANNOTATION_FUNCTOR = "anon";
IncomingPropContProcessingStrategy incomingStrategy = new IncomingPropContProcessingStrategy();
OutgoingPropContProcessingStrategy outgoingStrategy = new OutgoingPropContProcessingStrategy();
Modified: trunk/applications/jasdl-owlapi/src/jasdl/architecture/OutgoingPropContProcessingStrategy.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/architecture/OutgoingPropContProcessingStrategy.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/architecture/OutgoingPropContProcessingStrategy.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -19,14 +19,27 @@
*/
package jasdl.architecture;
+import static jasdl.architecture.JasdlAgArch.ANON_ANNOTATION_FUNCTOR;
+import static jasdl.architecture.JasdlAgArch.NAMED_ANNOTATION_FUNCTOR;
import jasdl.asSemantics.JasdlAgent;
+import jasdl.bridge.alias.Alias;
import jasdl.bridge.seliteral.SELiteral;
import jasdl.util.JasdlException;
import jasdl.util.NotEnrichedException;
+import jason.asSyntax.ListTerm;
+import jason.asSyntax.ListTermImpl;
import jason.asSyntax.Literal;
+import jason.asSyntax.StringTerm;
import jason.asSyntax.StringTermImpl;
import jason.asSyntax.Structure;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.semanticweb.owl.model.OWLOntology;
+
public class OutgoingPropContProcessingStrategy implements PropContProcessingStrategy {
@@ -40,13 +53,52 @@
*/
public Literal process(Literal l, JasdlAgent agent) throws JasdlException {
try{
- SELiteral sl = new SELiteral(l, agent); // note, l might not (yet) be a valid se-literal (mappings may be performed below) so factory cannot be used
- sl.qualifyOntologyAnnotation();
+ SELiteral sl = new SELiteral(l, agent);
- Structure expr = new Structure("expr");
- expr.addTerm(new StringTermImpl( agent.getManchesterObjectRenderer().render(sl.toOWLObject()) ));
- sl.addAnnot(expr);
+ StringTerm expression = new StringTermImpl( agent.getManchesterObjectRenderer().render(sl.toOWLObject()));
+
+ Alias alias = sl.toAlias();
+ if(alias.getLabel().equals(agent.getPersonalOntologyLabel())){ // do we have an anonymous run-time defined class?
+
+ Structure anon = new Structure(ANON_ANNOTATION_FUNCTOR);
+ anon.addTerm(expression);
+
+ // add set of prerequisite ontologies
+ Set<OWLOntology> prereqs = new HashSet<OWLOntology>();
+ String[] tokens = expression.toString().split(" ");
+ for(String token : tokens){
+ try {
+ URI entityURI = new URI(token);
+ URI ontologyURI = new URI(entityURI.getScheme(), entityURI.getSchemeSpecificPart(), null);
+ prereqs.add(agent.getLogicalURIManager().getLeft(ontologyURI));
+ } catch (URISyntaxException e) {
+ // do nothing, probably a keyword
+ }
+ }
+ ListTerm list = new ListTermImpl();
+ for(OWLOntology prereq : prereqs){
+ list.add(agent.getLabelManager().getLeft(prereq));
+ }
+ anon.addTerm(list);
+
+ l.addAnnot(anon);
+
+ // drop o, not needed
+ sl.dropOntologyAnnotation();
+
+ }else{
+ // qualify o
+ sl.qualifyOntologyAnnotation();
+
+ // unambiguously refer to named entity
+ Structure named = new Structure(NAMED_ANNOTATION_FUNCTOR);
+ named.addTerm(expression);
+ sl.addAnnot(named);
+ }
+
+
+
return sl;
}catch(NotEnrichedException e){
// do nothing
Modified: trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -4,11 +4,14 @@
import jasdl.bb.JasdlBeliefBase;
import jasdl.bridge.ToAxiomConverter;
import jasdl.bridge.ToSELiteralConverter;
+import jasdl.bridge.alias.Alias;
+import jasdl.bridge.alias.AliasFactory;
import jasdl.bridge.alias.AliasManager;
import jasdl.bridge.label.LabelManager;
-import jasdl.bridge.label.PhysicalURIManager;
+import jasdl.bridge.label.OntologyURIManager;
import jasdl.bridge.seliteral.SELiteralFactory;
import jasdl.util.JasdlException;
+import jasdl.util.UnknownMappingException;
import jason.JasonException;
import jason.architecture.AgArch;
import jason.asSemantics.TransitionSystem;
@@ -17,19 +20,32 @@
import jason.runtime.Settings;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Set;
import jmca.asSemantics.JmcaAgent;
+import org.coode.manchesterowlsyntax.ManchesterOWLSyntaxDescriptionParser;
import org.mindswap.pellet.PelletOptions;
import org.mindswap.pellet.owlapi.Reasoner;
import org.semanticweb.owl.apibinding.OWLManager;
+import org.semanticweb.owl.expression.OWLEntityChecker;
+import org.semanticweb.owl.model.OWLClass;
+import org.semanticweb.owl.model.OWLDataProperty;
+import org.semanticweb.owl.model.OWLDataType;
+import org.semanticweb.owl.model.OWLDescription;
+import org.semanticweb.owl.model.OWLEntity;
+import org.semanticweb.owl.model.OWLIndividual;
+import org.semanticweb.owl.model.OWLObject;
+import org.semanticweb.owl.model.OWLObjectProperty;
import org.semanticweb.owl.model.OWLOntology;
import org.semanticweb.owl.model.OWLOntologyCreationException;
import org.semanticweb.owl.model.OWLOntologyManager;
+import org.semanticweb.owl.model.OWLRuntimeException;
+import org.semanticweb.owl.util.ShortFormProvider;
+import uk.ac.manchester.cs.owl.OWLClassImpl;
import uk.ac.manchester.cs.owl.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl;
-import uk.ac.manchester.cs.owl.mansyntaxrenderer.ManchesterOWLSyntaxObjectRenderer;
public class JasdlAgent extends JmcaAgent {
private OWLOntologyManager ontologyManager;
@@ -39,23 +55,38 @@
private SELiteralFactory seLiteralFactory;
private ToSELiteralConverter toSELiteralConverter;
private ToAxiomConverter toAxiomConverter;
- private PhysicalURIManager physicalURIManager;
+ private OntologyURIManager logicalURIManager;
+ private OntologyURIManager physicalURIManager;
private ManchesterOWLSyntaxOWLObjectRendererImpl manchesterObjectRenderer;
+ private ManchesterOWLSyntaxDescriptionParser manchesterDescriptionParser;
+
+
public JasdlAgent(){
super();
// instantiate managers
aliasManager = new AliasManager();
labelManager = new LabelManager();
ontologyManager = OWLManager.createOWLOntologyManager();
- physicalURIManager = new PhysicalURIManager();
+ physicalURIManager = new OntologyURIManager();
+ logicalURIManager = new OntologyURIManager();
+
seLiteralFactory = new SELiteralFactory(this);
toAxiomConverter = new ToAxiomConverter(this);
toSELiteralConverter = new ToSELiteralConverter(this);
manchesterObjectRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl();
+ manchesterObjectRenderer.setShortFormProvider(new ShortFormProvider(){
+ public void dispose() {
+ }
+ public String getShortForm(OWLEntity entity) {
+ return entity.getURI().toString();
+ }
+ }); // we want fully qualified entity references
+ manchesterDescriptionParser = new ManchesterOWLSyntaxDescriptionParser(ontologyManager.getOWLDataFactory(), new NSPrefixEntityChecker(this));
+
// instantiate (Pellet) reasoner
PelletOptions.USE_TRACING = true;
reasoner = new Reasoner(ontologyManager);
@@ -78,7 +109,7 @@
// load .mas2j JASDL configuration
JasdlConfigurator config = new JasdlConfigurator(this);
- config.configure(stts);
+ config.configure(stts);
return super.initAg(arch, bb, src, stts);
}
@@ -97,13 +128,54 @@
reasoner.classify();
labelManager.put(label, ontology);
physicalURIManager.put(ontology, uri);
+ logicalURIManager.put(ontology, ontology.getURI());
}catch(OWLOntologyCreationException e){
throw new JasdlException("Error loading ontology "+uri+". Reason: "+e);
}
}
+
+
+ public void createOntology(Atom label, URI uri) throws JasdlException{
+ try{
+ OWLOntology ontology = getOntologyManager().createOntology( uri );
+ getLabelManager().put(label, ontology);
+ getPhysicalURIManager().put(ontology, uri);
+ getLogicalURIManager().put(ontology, uri);
+ getReasoner().loadOntology(ontology);
+ } catch (OWLOntologyCreationException e) {
+ throw new JasdlException("Error instantiating OWL ontology. Reason: "+e);
+ }
+ }
+
+ public Atom getPersonalOntologyLabel(){
+ return new Atom("self");
+ }
+
+ public URI getPersonalOntologyURI() {
+ return URI.create("http://www.dur.ac.uk/t.g.klapiscak/"+getPersonalOntologyLabel()+".owl");
+ }
+
+
+
+ public OWLDescription defineClass(Atom functor, String expression) throws JasdlException{
+ OWLDescription desc;
+ try{
+ desc = getManchesterDescriptionParser().parse(expression);
+ }catch(Exception e){
+ e.printStackTrace();
+ throw new JasdlException("Could not parse expression "+expression+". Reason: "+e);
+ }
+
+ Alias alias = AliasFactory.INSTANCE.create(functor, getPersonalOntologyLabel());
+ getAliasManager().put(alias, desc);
+
+ return desc;
+ }
+
+
public AliasManager getAliasManager() {
return aliasManager;
}
@@ -124,12 +196,19 @@
- public PhysicalURIManager getPhysicalURIManager() {
+ public OntologyURIManager getPhysicalURIManager() {
return physicalURIManager;
}
+
+
+ public OntologyURIManager getLogicalURIManager() {
+ return logicalURIManager;
+ }
+
+
public Reasoner getReasoner() {
return reasoner;
}
@@ -164,11 +243,135 @@
public ManchesterOWLSyntaxOWLObjectRendererImpl getManchesterObjectRenderer() {
return manchesterObjectRenderer;
}
+
+
+
+ public ManchesterOWLSyntaxDescriptionParser getManchesterDescriptionParser() {
+ return manchesterDescriptionParser;
+ }
+ /**
+ * Convenience method to (polymorphically) create an entity from resource URI (if known).
+ * TODO: where should this sit?
+ * @param uri URI of resource to create entity from
+ * @return entity identified by URI
+ * @throws UnknownReferenceException if OWLObject not known
+ */
+ public OWLEntity toEntity(URI uri) throws JasdlException{
+ URI ontURI;
+ try {
+ ontURI = new URI(uri.getScheme(), uri.getSchemeSpecificPart(), null);
+ } catch (URISyntaxException e) {
+ throw new JasdlException("Invalid entity URI "+uri);
+ }
+ OWLOntology ontology = getLogicalURIManager().getLeft(ontURI);;
+
+ // clumsy approach, but I can't find any way of achieving this polymorphically (i.e. retrieve an OWLObject from a URI) using OWL-API
+ OWLEntity entity;
+ if(ontology.containsClassReference(uri)){
+ entity = getOntologyManager().getOWLDataFactory().getOWLClass(uri);
+ }else if (ontology.containsObjectPropertyReference(uri)){
+ entity = getOntologyManager().getOWLDataFactory().getOWLObjectProperty(uri);
+ }else if (ontology.containsDataPropertyReference(uri)){
+ entity = getOntologyManager().getOWLDataFactory().getOWLDataProperty(uri);
+ }else if (ontology.containsIndividualReference(uri)){
+ entity = getOntologyManager().getOWLDataFactory().getOWLIndividual(uri);
+ }else{
+ throw new UnknownMappingException("Unknown ontology resource URI: "+uri);
+ }
+ return entity;
+ }
+
+
+
+ private class NSPrefixEntityChecker implements OWLEntityChecker{
+
+ private JasdlAgent agent;
+ public NSPrefixEntityChecker(JasdlAgent agent){
+ this.agent = agent;
+ }
+ public OWLClass getOWLClass(String name) {
+ OWLEntity entity = convert(name);
+ if(entity == null){
+ return null;
+ }
+ if(entity.isOWLClass()){
+ return entity.asOWLClass();
+ }else{
+ return null;
+ }
+ }
+ public OWLDataProperty getOWLDataProperty(String name) {
+ OWLEntity entity = convert(name);
+ if(entity == null){
+ return null;
+ }
+ if(entity.isOWLDataProperty()){
+ return entity.asOWLDataProperty();
+ }else{
+ return null;
+ }
+ }
+ public OWLDataType getOWLDataType(String name) {
+ OWLEntity entity = convert(name);
+ if(entity == null){
+ return null;
+ }
+ if(entity.isOWLDataType()){
+ return entity.asOWLDataType();
+ }else{
+ return null;
+ }
+ }
+
+ public OWLIndividual getOWLIndividual(String name) {
+ OWLEntity entity = convert(name);
+ if(entity == null){
+ return null;
+ }
+ if(entity.isOWLIndividual()){
+ return entity.asOWLIndividual();
+ }else{
+ return null;
+ }
+ }
+
+ public OWLObjectProperty getOWLObjectProperty(String name) {
+ OWLEntity entity = convert(name);
+ if(entity == null){
+ return null;
+ }
+ if(entity.isOWLObjectProperty()){
+ return entity.asOWLObjectProperty();
+ }else{
+ return null;
+ }
+ }
+
+ private OWLEntity convert(String name){
+ String[] tokens = name.split(":");
+ try {
+ Atom functor = new Atom(tokens[1]);
+ Atom label = new Atom(tokens[0]);
+ Alias alias = AliasFactory.INSTANCE.create(functor, label);
+ return (OWLEntity)agent.getAliasManager().getRight(alias); // guaranteed to be an entity? Not for anonymous classes!
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+
+ }
+
+
+
+
+
+
}
Modified: trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlConfigurator.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -14,6 +14,7 @@
import java.lang.reflect.Constructor;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.List;
import java.util.Set;
import java.util.Vector;
@@ -76,7 +77,7 @@
if(split.length == 2){
Alias alias = AliasFactory.INSTANCE.create(new Atom(split[0].trim()), label);
URI uri = URI.create(ontology.getURI() + "#" + split[1].trim());
- OWLEntity entity = toEntity(ontology, uri);
+ OWLEntity entity = agent.toEntity(uri);
agent.getAliasManager().put(alias, entity);
}
}
@@ -147,18 +148,11 @@
*/
private void applyMiscMappings() throws JasdlException{
-
// create a "placeholder" ontology so we can safely map thing and nothing without actually loading the ontology
- try {
- URI uri = URI.create("http://www.w3.org/2002/07/owl");
- OWLOntology ontology = agent.getOntologyManager().createOntology( uri );
- agent.getLabelManager().put(AliasFactory.OWL_THING.getLabel(), ontology);
- agent.getPhysicalURIManager().put(ontology, uri);
- agent.getReasoner().loadOntology(ontology);
+ agent.createOntology(AliasFactory.OWL_THING.getLabel(), URI.create("http://www.w3.org/2002/07/owl"));
- } catch (OWLOntologyCreationException e) {
- throw new JasdlException("Error instantiating blank OWL ontology placeholder. Reason: "+e);
- }
+ // create a personal ontology for (axioms that reference) run-time defined class
+ agent.createOntology(agent.getPersonalOntologyLabel(), agent.getPersonalOntologyURI());
agent.getAliasManager().put( AliasFactory.OWL_THING, agent.getOntologyManager().getOWLDataFactory().getOWLThing());
agent.getAliasManager().put( AliasFactory.OWL_NOTHING, agent.getOntologyManager().getOWLDataFactory().getOWLNothing());
@@ -217,38 +211,5 @@
- /**
- * Convenience method to (polymorphically) create an entity from resource URI (if known).
- * TODO: where should this sit?
- * @param uri URI of resource to create entity from
- * @return entity identified by URI
- * @throws UnknownReferenceException if OWLObject not known
- */
- private OWLEntity toEntity(OWLOntology ontology, URI uri) throws UnknownMappingException{
- // clumsy approach, but I can't find any way of achieving this polymorphically (i.e. retrieve an OWLObject from a URI) using OWL-API
- OWLEntity entity;
-
- /*
- // TODO: make from uri only version once OWLOntologyManager#getOntology(URI) is fixed
- URI ns = URI.create(uri.getScheme() + uri.getSchemeSpecificPart());
- OWLOntology ontology;
- try {
- ontology = ontologyManager.getOntology(ns);
- } catch (UnknownOWLOntologyException e) {
- throw new UnknownMappingException("Unknown ontology URI "+ns);
- }
- */
- if(ontology.containsClassReference(uri)){
- entity = agent.getOntologyManager().getOWLDataFactory().getOWLClass(uri);
- }else if (ontology.containsObjectPropertyReference(uri)){
- entity = agent.getOntologyManager().getOWLDataFactory().getOWLObjectProperty(uri);
- }else if (ontology.containsDataPropertyReference(uri)){
- entity = agent.getOntologyManager().getOWLDataFactory().getOWLDataProperty(uri);
- }else if (ontology.containsIndividualReference(uri)){
- entity = agent.getOntologyManager().getOWLDataFactory().getOWLIndividual(uri);
- }else{
- throw new UnknownMappingException("Unknown ontology resource URI: "+uri);
- }
- return entity;
- }
+
}
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bridge/MappingManager.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bridge/MappingManager.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bridge/MappingManager.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -35,6 +35,7 @@
* @throws DuplicateMappingException if either alias or entity is already mapped (thus breaking 1 <-> 1 constraint)
*/
public void put(X x, Y y) throws DuplicateMappingException{
+ logger.fine("mapping "+x+" <-> "+y);
if(isKnownLeft(x)){
throw new DuplicateMappingException("Duplicate mapping on "+x);
@@ -72,7 +73,7 @@
public Y getRight(X x) throws UnknownMappingException{
Y y = xToYMap.get(x);
if(y == null){
- throw new UnknownMappingException("Unknown mapping "+y);
+ throw new UnknownMappingException("Unknown mapping "+x);
}
return y;
}
Copied: trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/OntologyURIManager.java (from rev 1147, trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/PhysicalURIManager.java)
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/OntologyURIManager.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/OntologyURIManager.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -0,0 +1,11 @@
+package jasdl.bridge.label;
+
+import jasdl.bridge.MappingManager;
+
+import java.net.URI;
+
+import org.semanticweb.owl.model.OWLOntology;
+
+public class OntologyURIManager extends MappingManager<OWLOntology, URI> {
+
+}
Deleted: trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/PhysicalURIManager.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/PhysicalURIManager.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bridge/label/PhysicalURIManager.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -1,11 +0,0 @@
-package jasdl.bridge.label;
-
-import jasdl.bridge.MappingManager;
-
-import java.net.URI;
-
-import org.semanticweb.owl.model.OWLOntology;
-
-public class PhysicalURIManager extends MappingManager<OWLOntology, URI> {
-
-}
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteral.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteral.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteral.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -37,7 +37,6 @@
protected JasdlAgent agent;
public static String ONTOLOGY_ANNOTATION_FUNCTOR = "o";
- public static String EXPR_ANNOTATION_FUNCTOR = "expr";
protected Structure ontologyAnnotation;
@@ -78,25 +77,12 @@
ontologyLabel = (Atom)ontologyAnnotation.getTerm(0);
ontology = agent.getLabelManager().getRight(ontologyLabel);
}else if(ontologyAnnotation.getTerm(0).isString()){
- // Incoming SELiteral
parseOntologyURI(ontologyAnnotation.getTerm(0).toString());
}else{
throw invalid;
}
-
- // look for expr annotation
- // Do I really want expressions to be limited within a single ontology??
- // would make things easier!
- //Structure exprAnnotation = getAnnots(EXPR_ANNOTATION_FUNCTOR);
-
-
-
-
- //if(!agent.getAliasManager().isKnownLeft( toAlias() )){
- // throw new UnknownMappingException(l+" refers to an unknown resource");
- //}
-
}
+
private void parseOntologyURI(String _uri) throws JasdlException{
URI uri;
@@ -109,7 +95,7 @@
ontology = agent.getPhysicalURIManager().getLeft(uri);
ontologyLabel = agent.getLabelManager().getLeft(ontology);
}catch(UnknownMappingException e){
- // instantiate novel ontology
+ // TODO: instantiate novel ontology
}
}
@@ -127,7 +113,11 @@
ontologyAnnotation.setTerm(0, ontologyLabel);
}
+ public void dropOntologyAnnotation(){
+ delAnnot(ontologyAnnotation);
+ }
+
/**
* Prevents uneccessary re-processing steps
* @param l
@@ -215,8 +205,11 @@
}
/**
- * Placed here for convenient (varying) usage by subclasses
- * Validates since terms are mutable
+ * Attempts to fetch individual from "parent" ontologies (i.e. that referred to by ontology label of enclosing SELiteral).
+ * If not present, attempts to fetch from personal ontology.
+ * If not present, instantiates in personal ontology.
+ * Placed here for convenient (varying) usage by subclasses.
+ * Validates since terms are mutable.
* @return
* @throws UnknownMappingException
*/
@@ -225,18 +218,22 @@
throw new InvalidSELiteralException(term+" must be atomic");
}
Atom atom = (Atom)term;
- Alias alias = AliasFactory.INSTANCE.create(atom, ontologyLabel);
OWLIndividual i;
try {
- i = (OWLIndividual)agent.getAliasManager().getRight(alias);
- } catch (UnknownMappingException e) {
- // Instantiate and map the individual if not known
- OWLOntology ontology = getOntology();
- // Clashes (with different types of resource) don't matter thanks to OWL1.1's punning features
- //TODO: what about clashes with individuals (different alias, same uri)
- URI uri = URI.create(ontology.getURI() + "#" + atom);
- i = agent.getOntologyManager().getOWLDataFactory().getOWLIndividual(uri);
- agent.getAliasManager().put(alias, i);
+ i = (OWLIndividual)agent.getAliasManager().getRight(AliasFactory.INSTANCE.create(atom, ontologyLabel));
+ } catch (UnknownMappingException e1) {
+ Alias alias = AliasFactory.INSTANCE.create(atom, agent.getPersonalOntologyLabel());
+ try {
+ i = (OWLIndividual)agent.getAliasManager().getRight(alias);
+ } catch (UnknownMappingException e2) {
+ // Instantiate and map the individual if not known
+ OWLOntology ontology = getOntology();
+ // Clashes (with different types of resource) don't matter thanks to OWL1.1's punning features
+ //TODO: what about clashes with individuals (different alias, same uri)
+ URI uri = URI.create(ontology.getURI() + "#" + atom);
+ i = agent.getOntologyManager().getOWLDataFactory().getOWLIndividual(uri);
+ agent.getAliasManager().put(alias, i);
+ }
} catch(ClassCastException e){
throw new InvalidSELiteralException(atom+" does not refer to an individual");
}
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteralFactory.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteralFactory.java 2008-03-16 16:43:27 UTC (rev 1154)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bridge/seliteral/SELiteralFactory.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -33,7 +33,8 @@
if(entity instanceof OWLDescription){
return new SELiteralClassAssertion(sl);
}else if(entity instanceof AllDifferentPlaceholder){
- if(!l.isGround()) throw new JasdlException("JASDL does not currently support unground all_different assertions such as "+l);
+ //if(!l.isGround()) throw new JasdlException("JASDL does not currently support unground all_different assertions such as "+l);
+ // TODO: can ensure this here (due to unground TG all_different literals), where should I? axiom converter?
if(l.negated()) throw new JasdlException("JASDL does not currently support negated all_different assertions such as "+l+", since OWL makes the UNA by default and JASDL doesn't allow this to be overridden");
return new SELiteralAllDifferentAssertion(sl);
}else{
Added: trunk/applications/jasdl-owlapi/src/jasdl/ia/define_class.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/ia/define_class.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/ia/define_class.java 2008-03-16 17:44:47 UTC (rev 1155)
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2008 Thomas Klapiscak (t.g...@du...)
+ *
+ * This file is part of JASDL.
+ *
+ * JASDL is free software: you can redistribute it and/or modify
+ * it under the terms of the Lesser GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * JASDL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Lesser GNU General Public License for more details.
+ *
+ * You should have received a copy of the Lesser GNU General Public License
+ * along with JASDL. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package jasdl.ia;
+
+import static jasdl.util.Common.strip;
+import jasdl.asSemantics.JasdlAgent;
+import jasdl.util.JasdlException;
+import jason.asSemantics.DefaultInternalAction;
+import jason.asSemantics.TransitionSystem;
+import jason.asSemantics.Unifier;
+import jason.asSyntax.Atom;
+import jason.asSyntax.Term;
+
+import java.util.logging.Logger;
+
+/**
+ * @author Tom Klapiscak
+ *
+ * Usage jasdl.ia.define_class(classname, classexpr, label), where:
+ * - classname is an atomic name used to refer to this class in future. Must begin with a lowercase letter and not clash with any AgentSpeak keyword
+ * - classexpr is a expression defining this class
+ *
+ * Changed class name to atom only - forces valid alias syntax
+ *
+ */
+public class define_class extends DefaultInternalAction {
+
+
+ private Logger logger = Logger.getLogger("jasdl."+define_class.class.getName());
+
+ @Override
+ public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
+ try {
+ // class name ATOM
+ Term _classname = args[0];
+ if(!_classname.isAtom()){
+ throw new JasdlException("first argument must be a Atom containing a valid class name");
+ }
+ Atom classname = (Atom)_classname;
+
+ // concat expression strings / atoms, with limited validity checks
+ String expr = "";
+ for(int i = 1; i<args.length; i++){
+ if(args[i].isString()){
+ expr+=strip(args[i].toString(), "\"");
+ }else if(args[i].isAtom()){
+ expr+=args[i].toString();
+ }else{
+ throw new JasdlException("Invalid expression component: "+args[i]);
+ }
+ }
+
+ JasdlAgent agent = (JasdlAgent)ts.getAg();
+
+ agent.defineClass(classname, expr);
+
+
+ return true;
+ } catch (Exception e) {
+ logger.warning("Error in internal action 'jasdl.ia.define_class'! Reason:"); e.printStackTrace();
+
+ return false;
+ }
+ }
+
+
+
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|