From: <ji...@us...> - 2011-05-19 16:05:20
|
Revision: 2814 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2814&view=rev Author: jialva Date: 2011-05-19 16:05:12 +0000 (Thu, 19 May 2011) Log Message: ----------- New update of fuzzyDL-Learner Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyDLReasonerManager.java trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_Trains.java trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_noFuzzyTrains.java Added Paths: ----------- trunk/examples/fuzzydll/fuzzyTrains_v1.4.owl Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyDLReasonerManager.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyDLReasonerManager.java 2011-05-19 10:36:18 UTC (rev 2813) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyDLReasonerManager.java 2011-05-19 16:05:12 UTC (rev 2814) @@ -8,18 +8,53 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.util.Iterator; +import java.util.List; import java.util.Scanner; +import java.util.Set; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.semanticweb.owlapi.model.AxiomType; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLDataPropertyExpression; import org.semanticweb.owlapi.model.OWLEntity; import org.semanticweb.owlapi.model.OWLIndividual; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLNamedIndividual; +import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.reasoner.AxiomNotInProfileException; +import org.semanticweb.owlapi.reasoner.BufferingMode; +import org.semanticweb.owlapi.reasoner.ClassExpressionNotInProfileException; +import org.semanticweb.owlapi.reasoner.FreshEntitiesException; +import org.semanticweb.owlapi.reasoner.FreshEntityPolicy; +import org.semanticweb.owlapi.reasoner.InconsistentOntologyException; +import org.semanticweb.owlapi.reasoner.IndividualNodeSetPolicy; +import org.semanticweb.owlapi.reasoner.InferenceType; +import org.semanticweb.owlapi.reasoner.Node; +import org.semanticweb.owlapi.reasoner.NodeSet; +import org.semanticweb.owlapi.reasoner.OWLReasoner; +import org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration; +import org.semanticweb.owlapi.reasoner.ReasonerInterruptedException; +import org.semanticweb.owlapi.reasoner.TimeOutException; +import org.semanticweb.owlapi.reasoner.UnsupportedEntailmentTypeException; import org.semanticweb.owlapi.util.SimpleShortFormProvider; +import org.semanticweb.owlapi.util.Version; + +import com.clarkparsia.pellet.owlapiv3.PelletReasoner; +import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; + import fuzzydl.*; import fuzzydl.exception.FuzzyOntologyException; import fuzzydl.milp.Solution; import fuzzydl.parser.*; import fuzzydll.fuzzyowl2fuzzydlparser.*; -public class FuzzyDLReasonerManager { +public class FuzzyDLReasonerManager implements OWLReasoner { // private static final String CHANGING_JUST_HIERARCHI_PROBLEM = "../examples/fuzzydll/fuzzyOWL2fuzzyDLparserOutput_manual.fuzzyDL.txt"; private static final String FUZZYOWL2FUZZYDLPARSEROUTPUT = "../examples/fuzzydll/fuzzyOWL2fuzzyDLparserOutput.fuzzyDL.txt"; @@ -32,9 +67,13 @@ private FuzzyOwl2toFuzzyDL fuzzyFileParser; private int auxCounter = 0; + private PelletReasoner crispReasoner; // private FileOutputStream errorFile; - public FuzzyDLReasonerManager(String ontologyFile) throws Exception { + public FuzzyDLReasonerManager(String ontologyFile, OWLOntology ontology, OWLReasonerConfiguration conf) throws Exception { + + startPellet(ontology, conf); + queryResult = null; parser = null; @@ -51,6 +90,15 @@ // errorFile = new FileOutputStream("errorFile.txt"); } + private void startPellet(OWLOntology ontology, OWLReasonerConfiguration conf) { + // instantiate Pellet reasoner + crispReasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology, conf); + // change log level to WARN for Pellet, because otherwise log + // output will be very large + Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); + pelletLogger.setLevel(Level.WARN); + } + private void solveKB() { try { fuzzyKB.solveKB(); @@ -125,4 +173,402 @@ sw.flush(); return sw.toString(); } + + @Override + public void dispose() { + // TODO Auto-generated method stub + crispReasoner.dispose(); + } + + @Override + public void flush() { + + crispReasoner.flush(); + } + + @Override + public Node<OWLClass> getBottomClassNode() { + + return crispReasoner.getBottomClassNode(); + } + + @Override + public Node<OWLDataProperty> getBottomDataPropertyNode() { + + return crispReasoner.getBottomDataPropertyNode(); + } + + @Override + public Node<OWLObjectPropertyExpression> getBottomObjectPropertyNode() { + + return crispReasoner.getBottomObjectPropertyNode(); + } + + @Override + public BufferingMode getBufferingMode() { + + return crispReasoner.getBufferingMode(); + } + + @Override + public NodeSet<OWLClass> getDataPropertyDomains(OWLDataProperty arg0, + boolean arg1) throws InconsistentOntologyException, + FreshEntitiesException, ReasonerInterruptedException, + TimeOutException { + + return crispReasoner.getDataPropertyDomains(arg0, arg1); + } + + @Override + public Set<OWLLiteral> getDataPropertyValues(OWLNamedIndividual arg0, + OWLDataProperty arg1) throws InconsistentOntologyException, + FreshEntitiesException, ReasonerInterruptedException, + TimeOutException { + + return crispReasoner.getDataPropertyValues(arg0, arg1); + } + + @Override + public NodeSet<OWLNamedIndividual> getDifferentIndividuals( + OWLNamedIndividual arg0) throws InconsistentOntologyException, + FreshEntitiesException, ReasonerInterruptedException, + TimeOutException { + + return crispReasoner.getDifferentIndividuals(arg0); + } + + @Override + public NodeSet<OWLClass> getDisjointClasses(OWLClassExpression arg0) + throws ReasonerInterruptedException, TimeOutException, + FreshEntitiesException, InconsistentOntologyException { + + return crispReasoner.getDisjointClasses(arg0); + } + + @Override + public NodeSet<OWLDataProperty> getDisjointDataProperties( + OWLDataPropertyExpression arg0) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getDisjointDataProperties(arg0); + } + + @Override + public NodeSet<OWLObjectPropertyExpression> getDisjointObjectProperties( + OWLObjectPropertyExpression arg0) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getDisjointObjectProperties(arg0); + } + + @Override + public Node<OWLClass> getEquivalentClasses(OWLClassExpression arg0) + throws InconsistentOntologyException, + ClassExpressionNotInProfileException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getEquivalentClasses(arg0); + } + + @Override + public Node<OWLDataProperty> getEquivalentDataProperties( + OWLDataProperty arg0) throws InconsistentOntologyException, + FreshEntitiesException, ReasonerInterruptedException, + TimeOutException { + + return crispReasoner.getEquivalentDataProperties(arg0); + } + + @Override + public Node<OWLObjectPropertyExpression> getEquivalentObjectProperties( + OWLObjectPropertyExpression arg0) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getEquivalentObjectProperties(arg0); + } + + @Override + public FreshEntityPolicy getFreshEntityPolicy() { + + return crispReasoner.getFreshEntityPolicy(); + } + + @Override + public IndividualNodeSetPolicy getIndividualNodeSetPolicy() { + + return crispReasoner.getIndividualNodeSetPolicy(); + } + + @Override + public NodeSet<OWLNamedIndividual> getInstances(OWLClassExpression arg0, + boolean arg1) throws InconsistentOntologyException, + ClassExpressionNotInProfileException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getInstances(arg0, arg1); + } + + @Override + public Node<OWLObjectPropertyExpression> getInverseObjectProperties( + OWLObjectPropertyExpression arg0) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getInverseObjectProperties(arg0); + } + + @Override + public NodeSet<OWLClass> getObjectPropertyDomains( + OWLObjectPropertyExpression arg0, boolean arg1) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getObjectPropertyDomains(arg0, arg1); + } + + @Override + public NodeSet<OWLClass> getObjectPropertyRanges( + OWLObjectPropertyExpression arg0, boolean arg1) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getObjectPropertyRanges(arg0, arg1); + } + + @Override + public NodeSet<OWLNamedIndividual> getObjectPropertyValues( + OWLNamedIndividual arg0, OWLObjectPropertyExpression arg1) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getObjectPropertyValues(arg0, arg1); + } + + @Override + public Set<OWLAxiom> getPendingAxiomAdditions() { + + return crispReasoner.getPendingAxiomAdditions(); + } + + @Override + public Set<OWLAxiom> getPendingAxiomRemovals() { + + return crispReasoner.getPendingAxiomRemovals(); + } + + @Override + public List<OWLOntologyChange> getPendingChanges() { + + return crispReasoner.getPendingChanges(); + } + + @Override + public Set<InferenceType> getPrecomputableInferenceTypes() { + + return crispReasoner.getPrecomputableInferenceTypes(); + } + + @Override + public String getReasonerName() { + + return crispReasoner.getReasonerName(); + } + + @Override + public Version getReasonerVersion() { + + return crispReasoner.getReasonerVersion(); + } + + @Override + public OWLOntology getRootOntology() { + + return crispReasoner.getRootOntology(); + } + + @Override + public Node<OWLNamedIndividual> getSameIndividuals(OWLNamedIndividual arg0) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getSameIndividuals(arg0); + } + + @Override + public NodeSet<OWLClass> getSubClasses(OWLClassExpression arg0, boolean arg1) + throws ReasonerInterruptedException, TimeOutException, + FreshEntitiesException, InconsistentOntologyException, + ClassExpressionNotInProfileException { + + return crispReasoner.getSubClasses(arg0, arg1); + } + + @Override + public NodeSet<OWLDataProperty> getSubDataProperties(OWLDataProperty arg0, + boolean arg1) throws InconsistentOntologyException, + FreshEntitiesException, ReasonerInterruptedException, + TimeOutException { + + return crispReasoner.getSubDataProperties(arg0, arg1); + } + + @Override + public NodeSet<OWLObjectPropertyExpression> getSubObjectProperties( + OWLObjectPropertyExpression arg0, boolean arg1) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getSubObjectProperties(arg0, arg1); + } + + @Override + public NodeSet<OWLClass> getSuperClasses(OWLClassExpression arg0, + boolean arg1) throws InconsistentOntologyException, + ClassExpressionNotInProfileException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + +// System.out.println(arg0); +// +// Query q1, q2; +// for(Concept concept : fuzzyKB.atomicConcepts.values()) { +// System.out.print(" - " + concept + " "); +// q1 = new MinSubsumesQuery(concept, OWLAPI_fuzzyDLObjectParser.getFuzzyDLExpresion(arg0), MinSubsumesQuery.LUKASIEWICZ); +// q2 = new MaxSubsumesQuery(concept, OWLAPI_fuzzyDLObjectParser.getFuzzyDLExpresion(arg0), MaxSubsumesQuery.LUKASIEWICZ); +// KnowledgeBase clonedFuzzyKB = fuzzyKB.clone(); +// try { +// Solution queryResult1 = q1.solve(clonedFuzzyKB); +// Solution queryResult2 = q2.solve(clonedFuzzyKB); +// System.out.print(queryResult1 + " " + queryResult2); +// System.out.println(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + + + + return crispReasoner.getSuperClasses(arg0, arg1); + } + + @Override + public NodeSet<OWLDataProperty> getSuperDataProperties( + OWLDataProperty arg0, boolean arg1) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getSuperDataProperties(arg0, arg1); + } + + @Override + public NodeSet<OWLObjectPropertyExpression> getSuperObjectProperties( + OWLObjectPropertyExpression arg0, boolean arg1) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getSuperObjectProperties(arg0, arg1); + } + + @Override + public long getTimeOut() { + + return crispReasoner.getTimeOut(); + } + + @Override + public Node<OWLClass> getTopClassNode() { + + return crispReasoner.getTopClassNode(); + } + + @Override + public Node<OWLDataProperty> getTopDataPropertyNode() { + + return crispReasoner.getTopDataPropertyNode(); + } + + @Override + public Node<OWLObjectPropertyExpression> getTopObjectPropertyNode() { + + return crispReasoner.getTopObjectPropertyNode(); + } + + @Override + public NodeSet<OWLClass> getTypes(OWLNamedIndividual arg0, boolean arg1) + throws InconsistentOntologyException, FreshEntitiesException, + ReasonerInterruptedException, TimeOutException { + + return crispReasoner.getTypes(arg0, arg1); + } + + @Override + public Node<OWLClass> getUnsatisfiableClasses() + throws ReasonerInterruptedException, TimeOutException, + InconsistentOntologyException { + + return crispReasoner.getUnsatisfiableClasses(); + } + + @Override + public void interrupt() { + + crispReasoner.interrupt(); + } + + @Override + public boolean isConsistent() throws ReasonerInterruptedException, + TimeOutException { + + return crispReasoner.isConsistent(); + } + + @Override + public boolean isEntailed(OWLAxiom arg0) + throws ReasonerInterruptedException, + UnsupportedEntailmentTypeException, TimeOutException, + AxiomNotInProfileException, FreshEntitiesException, + InconsistentOntologyException { + + return crispReasoner.isEntailed(arg0); + } + + @Override + public boolean isEntailed(Set<? extends OWLAxiom> arg0) + throws ReasonerInterruptedException, + UnsupportedEntailmentTypeException, TimeOutException, + AxiomNotInProfileException, FreshEntitiesException, + InconsistentOntologyException { + + return crispReasoner.isEntailed(arg0); + } + + @Override + public boolean isEntailmentCheckingSupported(AxiomType<?> arg0) { + + return crispReasoner.isEntailmentCheckingSupported(arg0); + } + + @Override + public boolean isPrecomputed(InferenceType arg0) { + + return crispReasoner.isPrecomputed(arg0); + } + + @Override + public boolean isSatisfiable(OWLClassExpression arg0) + throws ReasonerInterruptedException, TimeOutException, + ClassExpressionNotInProfileException, FreshEntitiesException, + InconsistentOntologyException { + + return crispReasoner.isSatisfiable(arg0); + } + + @Override + public void precomputeInferences(InferenceType... arg0) + throws ReasonerInterruptedException, TimeOutException, + InconsistentOntologyException { + crispReasoner.precomputeInferences(arg0); + } } Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java 2011-05-19 10:36:18 UTC (rev 2813) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java 2011-05-19 16:05:12 UTC (rev 2814) @@ -135,7 +135,7 @@ // private static Logger logger = Logger // .getLogger(OWLAPIReasoner.class); - //private String reasonerType = "pellet"; + // private String reasonerType = "pellet"; private FuzzyOWLAPIReasonerConfigurator configurator; @Override public FuzzyOWLAPIReasonerConfigurator getConfigurator(){ @@ -174,7 +174,7 @@ // references to OWL API ontologies private List<OWLOntology> owlAPIOntologies = new LinkedList<OWLOntology>(); - private FuzzyDLReasonerManager fuzzyReasoner; + // private FuzzyDLReasonerManager fuzzyReasoner; private int reasonersComparationCounter = 0; private int reasonersComparationDisparityCounter = 0; @@ -191,7 +191,7 @@ public static Collection<ConfigOption<?>> createConfigOptions() { Collection<ConfigOption<?>> options = new LinkedList<ConfigOption<?>>(); StringConfigOption type = new StringConfigOption("reasonerType", "FaCT++, HermiT, OWLlink or Pellet, which means \"fact\", \"hermit\", \"owllink\" or \"pellet\"", "pellet", false, true); - type.setAllowedValues(new String[] {"fact", "hermit", "owllink", "pellet" }); + type.setAllowedValues(new String[] {"fact", "hermit", "owllink", "pellet", "fuzzydl" }); // closure option? see: // http://owlapi.svn.sourceforge.net/viewvc/owlapi/owl1_1/trunk/tutorial/src/main/java/uk/ac/manchester/owl/tutorial/examples/ClosureAxiomsExample.java?view=markup @@ -339,14 +339,18 @@ } else if(configurator.getReasonerType().equals("hermit")){ // instantiate HermiT reasoner reasoner = new ReasonerFactory().createNonBufferingReasoner(ontology, conf); - } else if(configurator.getReasonerType().equals("pellet")){ - // instantiate Pellet reasoner - reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology, conf); + } else if(configurator.getReasonerType().equals("pellet")){ - // change log level to WARN for Pellet, because otherwise log - // output will be very large - Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); - pelletLogger.setLevel(Level.WARN); + } else if(configurator.getReasonerType().equals("fuzzydl")){ + // added by Josue + // create actual fuzzy reasoner and computes initial fuzzy memberships + // ontology and conf are passed so FuzzyDLReasonerManager can instanciate also a Pellet reasoner + try { + reasoner = new FuzzyDLReasonerManager(((OWLFile)sources.iterator().next()).getURL().toString(), ontology, conf); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } else { try { OWLlinkHTTPXMLReasonerFactory factory = new OWLlinkHTTPXMLReasonerFactory(); @@ -374,14 +378,7 @@ // System.out.println(properties); // System.out.println(individuals); - // added by Josue - // create actual fuzzy reasoner and computes initial fuzzy memberships - try { - fuzzyReasoner = new FuzzyDLReasonerManager(((OWLFile)sources.iterator().next()).getURL().toString()); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + // compute class hierarchy and types of individuals // (done here to speed up later reasoner calls) @@ -621,11 +618,8 @@ OWLClassExpression d = OWLAPIDescriptionConvertVisitor.getOWLClassExpression(concept); OWLIndividual i = factory.getOWLNamedIndividual(IRI.create(individual.getName())); - boolean crispReasonerOutput = reasoner.isEntailed(factory.getOWLClassAssertionAxiom(d, i)); - - // System.out.println("ccccc->: " + crispReasonerOutput); - - return crispReasonerOutput; + boolean crispReasonerOutput = reasoner.isEntailed(factory.getOWLClassAssertionAxiom(d, i)); + return crispReasonerOutput; } @Override @@ -1137,7 +1131,7 @@ OWLClassExpression desc = OWLAPIDescriptionConvertVisitor.getOWLClassExpression(description); OWLIndividual ind = factory.getOWLNamedIndividual(IRI.create(individual.getName())); - double fuzzyReasonerOutput = fuzzyReasoner.getFuzzyMembership(desc, ind, individual.getTruthDegree()); + double fuzzyReasonerOutput = ((FuzzyDLReasonerManager) reasoner).getFuzzyMembership(desc, ind, individual.getTruthDegree()); // System.out.println("- d: " + d); // System.out.println("- i: " + i); Modified: trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_Trains.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_Trains.java 2011-05-19 10:36:18 UTC (rev 2813) +++ trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_Trains.java 2011-05-19 16:05:12 UTC (rev 2814) @@ -80,13 +80,14 @@ ComponentManager cm = ComponentManager.getInstance(); OWLFile ks = cm.knowledgeSource(OWLFile.class); - ks.getConfigurator().setUrl(new URL("file", null, "../examples/fuzzydll/fuzzyTrains_v1.3.owl")); + ks.getConfigurator().setUrl(new URL("file", null, "../examples/fuzzydll/fuzzyTrains_v1.4.owl")); ks.init(); // ReasonerComponent rc = cm.reasoner(OWLAPIReasoner.class, ks); - ReasonerComponent rc = cm.reasoner(FuzzyOWLAPIReasoner.class, ks); + FuzzyOWLAPIReasoner rc = cm.reasoner(FuzzyOWLAPIReasoner.class, ks); + rc.getConfigurator().setReasonerType("fuzzydl"); rc.init(); -// System.out.println(rc.getClassHierarchy()); + System.out.println(rc.getClassHierarchy()); FuzzyPosNegLPStandard lp = cm.learningProblem(FuzzyPosNegLPStandard.class, rc); //PosNegLPStandard lp = cm.learningProblem(PosNegLPStandard.class, rc); Modified: trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_noFuzzyTrains.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_noFuzzyTrains.java 2011-05-19 10:36:18 UTC (rev 2813) +++ trunk/components-core/src/test/java/org/dllearner/test/FuzzyDLLTest_noFuzzyTrains.java 2011-05-19 16:05:12 UTC (rev 2814) @@ -91,7 +91,7 @@ ReasonerComponent rc = cm.reasoner(OWLAPIReasoner.class, ks); //ReasonerComponent rc = cm.reasoner(FuzzyOWLAPIReasoner.class, ks); rc.init(); -// System.out.println(rc.getClassHierarchy()); + System.out.println(rc.getClassHierarchy()); //FuzzyPosNegLPStandard lp = cm.learningProblem(FuzzyPosNegLPStandard.class, rc); PosNegLPStandard lp = cm.learningProblem(PosNegLPStandard.class, rc); Added: trunk/examples/fuzzydll/fuzzyTrains_v1.4.owl =================================================================== --- trunk/examples/fuzzydll/fuzzyTrains_v1.4.owl (rev 0) +++ trunk/examples/fuzzydll/fuzzyTrains_v1.4.owl 2011-05-19 16:05:12 UTC (rev 2814) @@ -0,0 +1,641 @@ +<?xml version="1.0"?> + + +<!DOCTYPE rdf:RDF [ + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > + <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > + <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > + <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > +]> + + +<rdf:RDF xmlns="http://www.example.com/fuzzyTrains.owl#" + xml:base="http://www.example.com/fuzzyTrains.owl" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <owl:Ontology rdf:about="http://www.example.com/fuzzyTrains.owl"> + <rdfs:comment xml:lang="en">Fuzzy adaptation of Michalsky's trains problem [1] +Original idea from [2] + +Developed by Josue Iglesias (josue at grpss.ssr.upm.es) + +[1] http://www.mli.gmu.edu/papers/79-80/80-05.pdf +[2] http://users.iit.demokritos.gr/~konstant/dload/Pubs/fuzz10.pdf</rdfs:comment> + <rdfs:comment xml:lang="en">v1.0: Cars can be (fuzzy) classified as being short, medium or long depending on their length (double)</rdfs:comment> + <rdfs:comment xml:lang="en">v1.1: Car's load can be more or less similar to a triangle and/or a rectangle</rdfs:comment> + <rdfs:comment xml:lang="en">v1.2: Change properties (Train) hasFirstCar (Car) + (Car) isInFrontOf (Car) for just (Train) hasCar (Car) in order to make the example easier</rdfs:comment> + <rdfs:comment xml:lang="en">v1.3: +Some concepts of v1.1 and v1.2 are merged: +- (Train) hasCar (Train) +- (Train) or (Car) isInFrontOf (Car)</rdfs:comment> + <rdfs:comment xml:lang="en">v1.4: Instead of defining fuzzy data types as (double[>= 5.0] and double[<= 15.0]), this is change to + +- fuzzyShortCar (double[>= 5.0] and double[<= 15.0]) +- fuzzyMediumLengthCar (double[>= 15.0] and double[<= 40.0]) +- fuzzyLongCar (double[>= 40.0] and double[<= 50.0]) + +in order crisp reasoners not to infer that ShortCar, MediumLengthCar and LongCar to be equivalent clases</rdfs:comment> + </owl:Ontology> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Annotation properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + <owl:AnnotationProperty rdf:about="http://www.example.com/fuzzyTrains.owl#fuzzyLabel"/> + <owl:AnnotationProperty rdf:about="&rdfs;comment"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Datatypes + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://www.example.com/fuzzyTrains.owl#fuzzyLongCar --> + + <rdfs:Datatype rdf:about="http://www.example.com/fuzzyTrains.owl#fuzzyLongCar"> + <owl:equivalentClass> + <rdfs:Datatype> + <owl:intersectionOf rdf:parseType="Collection"> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:minInclusive rdf:datatype="&xsd;double">40.0</xsd:minInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:maxInclusive rdf:datatype="&xsd;double">50.0</xsd:maxInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + </owl:intersectionOf> + </rdfs:Datatype> + </owl:equivalentClass> + <fuzzyLabel><fuzzyOwl2 fuzzyType="datatype"> +<Datatype type="rightshoulder" a="40" b="40" /> +</fuzzyOwl2></fuzzyLabel> + </rdfs:Datatype> + + + + <!-- http://www.example.com/fuzzyTrains.owl#fuzzyMediumLengthCar --> + + <rdfs:Datatype rdf:about="http://www.example.com/fuzzyTrains.owl#fuzzyMediumLengthCar"> + <owl:equivalentClass> + <rdfs:Datatype> + <owl:intersectionOf rdf:parseType="Collection"> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:minInclusive rdf:datatype="&xsd;double">15.0</xsd:minInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:maxInclusive rdf:datatype="&xsd;double">40.0</xsd:maxInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + </owl:intersectionOf> + </rdfs:Datatype> + </owl:equivalentClass> + <fuzzyLabel><fuzzyOwl2 fuzzyType="datatype"> +<Datatype type="trapezoidal" a="15" b="15" c="40" d="40" /> +</fuzzyOwl2></fuzzyLabel> + </rdfs:Datatype> + + + + <!-- http://www.example.com/fuzzyTrains.owl#fuzzyShortCar --> + + <rdfs:Datatype rdf:about="http://www.example.com/fuzzyTrains.owl#fuzzyShortCar"> + <owl:equivalentClass> + <rdfs:Datatype> + <owl:intersectionOf rdf:parseType="Collection"> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:minInclusive rdf:datatype="&xsd;double">5.0</xsd:minInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:maxInclusive rdf:datatype="&xsd;double">15.0</xsd:maxInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + </owl:intersectionOf> + </rdfs:Datatype> + </owl:equivalentClass> + <fuzzyLabel><fuzzyOwl2 fuzzyType="datatype"> +<Datatype type="leftshoulder" a="15" b="15" /> +</fuzzyOwl2></fuzzyLabel> + </rdfs:Datatype> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Object Properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://www.example.com/fuzzyTrains.owl#hasCar --> + + <owl:ObjectProperty rdf:about="http://www.example.com/fuzzyTrains.owl#hasCar"> + <rdfs:range rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <rdfs:domain rdf:resource="http://www.example.com/fuzzyTrains.owl#Train"/> + </owl:ObjectProperty> + + + + <!-- http://www.example.com/fuzzyTrains.owl#hasLoad --> + + <owl:ObjectProperty rdf:about="http://www.example.com/fuzzyTrains.owl#hasLoad"> + <rdfs:domain rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <rdfs:range rdf:resource="http://www.example.com/fuzzyTrains.owl#Load"/> + </owl:ObjectProperty> + + + + <!-- http://www.example.com/fuzzyTrains.owl#isInFrontOf --> + + <owl:ObjectProperty rdf:about="http://www.example.com/fuzzyTrains.owl#isInFrontOf"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:range rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="http://www.example.com/fuzzyTrains.owl#Car"/> + <rdf:Description rdf:about="http://www.example.com/fuzzyTrains.owl#Train"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + </owl:ObjectProperty> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Data properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://www.example.com/fuzzyTrains.owl#hasCarLength --> + + <owl:DatatypeProperty rdf:about="http://www.example.com/fuzzyTrains.owl#hasCarLength"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:domain rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <rdfs:range> + <rdfs:Datatype> + <owl:intersectionOf rdf:parseType="Collection"> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:minInclusive rdf:datatype="&xsd;double">5.0</xsd:minInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + <rdfs:Datatype> + <owl:onDatatype rdf:resource="&xsd;double"/> + <owl:withRestrictions rdf:parseType="Collection"> + <rdf:Description> + <xsd:maxInclusive rdf:datatype="&xsd;double">50.0</xsd:maxInclusive> + </rdf:Description> + </owl:withRestrictions> + </rdfs:Datatype> + </owl:intersectionOf> + </rdfs:Datatype> + </rdfs:range> + </owl:DatatypeProperty> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Classes + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://www.example.com/fuzzyTrains.owl#Car --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#Car"> + <rdfs:subClassOf rdf:resource="&owl;Thing"/> + <owl:disjointWith rdf:resource="http://www.example.com/fuzzyTrains.owl#Load"/> + <owl:disjointWith rdf:resource="http://www.example.com/fuzzyTrains.owl#Train"/> + </owl:Class> + + + + <!-- http://www.example.com/fuzzyTrains.owl#Load --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#Load"> + <owl:disjointWith rdf:resource="http://www.example.com/fuzzyTrains.owl#Train"/> + </owl:Class> + + + + <!-- http://www.example.com/fuzzyTrains.owl#LongCar --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#LongCar"> + <owl:equivalentClass> + <owl:Restriction> + <owl:onProperty rdf:resource="http://www.example.com/fuzzyTrains.owl#hasCarLength"/> + <owl:someValuesFrom rdf:resource="http://www.example.com/fuzzyTrains.owl#fuzzyLongCar"/> + </owl:Restriction> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + </owl:Class> + + + + <!-- http://www.example.com/fuzzyTrains.owl#MediumLenghtCar --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#MediumLenghtCar"> + <owl:equivalentClass> + <owl:Restriction> + <owl:onProperty rdf:resource="http://www.example.com/fuzzyTrains.owl#hasCarLength"/> + <owl:someValuesFrom rdf:resource="http://www.example.com/fuzzyTrains.owl#fuzzyMediumLengthCar"/> + </owl:Restriction> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + </owl:Class> + + + + <!-- http://www.example.com/fuzzyTrains.owl#Rectangle --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#Rectangle"> + <rdfs:subClassOf rdf:resource="http://www.example.com/fuzzyTrains.owl#Load"/> + </owl:Class> + + + + <!-- http://www.example.com/fuzzyTrains.owl#ShortCar --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#ShortCar"> + <owl:equivalentClass> + <owl:Restriction> + <owl:onProperty rdf:resource="http://www.example.com/fuzzyTrains.owl#hasCarLength"/> + <owl:someValuesFrom rdf:resource="http://www.example.com/fuzzyTrains.owl#fuzzyShortCar"/> + </owl:Restriction> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + </owl:Class> + + + + <!-- http://www.example.com/fuzzyTrains.owl#Train --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#Train"/> + + + + <!-- http://www.example.com/fuzzyTrains.owl#Triangle --> + + <owl:Class rdf:about="http://www.example.com/fuzzyTrains.owl#Triangle"> + <rdfs:subClassOf rdf:resource="http://www.example.com/fuzzyTrains.owl#Load"/> + </owl:Class> + + + + <!-- http://www.w3.org/2002/07/owl#Thing --> + + <owl:Class rdf:about="&owl;Thing"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Individuals + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://www.example.com/fuzzyTrains.owl#car11 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car11"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">49</hasCarLength> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car12"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load11a"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load11b"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load11c"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car12 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car12"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">25</hasCarLength> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car13"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load12a"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car13 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car13"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">13</hasCarLength> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car21 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car21"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">47</hasCarLength> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car22"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load12a"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load21a"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car22 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car22"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">7</hasCarLength> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car61 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car61"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">45</hasCarLength> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car62"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car62 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car62"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">8</hasCarLength> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car63"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load62a"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load62b"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car63 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car63"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">25</hasCarLength> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load63a"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load63b"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car71 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car71"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">7</hasCarLength> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car72"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load71a"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load71b"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#car72 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#car72"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Car"/> + <hasCarLength rdf:datatype="&xsd;double">6</hasCarLength> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load72a"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load72b"/> + <hasLoad rdf:resource="http://www.example.com/fuzzyTrains.owl#load72c"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#east1 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#east1"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Train"/> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car11"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car11"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car12"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car13"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#east2 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#east2"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Train"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car21"/> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car21"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car22"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load11a --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load11a"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load11b --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load11b"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load11c --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load11c"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Triangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load12a --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load12a"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load21a --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load21a"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load21b --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load21b"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Triangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load62a --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load62a"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Triangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load62b --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load62b"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load63a --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load63a"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load63b --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load63b"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Triangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load71a --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load71a"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Triangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load71b --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load71b"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load72a --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load72a"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load72b --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load72b"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Rectangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#load72c --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#load72c"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Triangle"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#west6 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#west6"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Train"/> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car61"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car61"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car62"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car63"/> + </owl:NamedIndividual> + + + + <!-- http://www.example.com/fuzzyTrains.owl#west7 --> + + <owl:NamedIndividual rdf:about="http://www.example.com/fuzzyTrains.owl#west7"> + <rdf:type rdf:resource="http://www.example.com/fuzzyTrains.owl#Train"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car71"/> + <isInFrontOf rdf:resource="http://www.example.com/fuzzyTrains.owl#car71"/> + <hasCar rdf:resource="http://www.example.com/fuzzyTrains.owl#car72"/> + </owl:NamedIndividual> +</rdf:RDF> + + + +<!-- Generated by the OWL API (version 3.1.0.20069) http://owlapi.sourceforge.net --> + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |