From: <jen...@us...> - 2008-07-31 16:33:38
|
Revision: 1043 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1043&view=rev Author: jenslehmann Date: 2008-07-31 16:33:29 +0000 (Thu, 31 Jul 2008) Log Message: ----------- - EL downward refinement operator started - cleanup Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/BruteForceLearner.java trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java trunk/src/dl-learner/org/dllearner/algorithms/refexamples/ExampleBasedROLComponent.java trunk/src/dl-learner/org/dllearner/algorithms/refinement/ROLearner.java trunk/src/dl-learner/org/dllearner/cli/Start.java trunk/src/dl-learner/org/dllearner/core/ReasoningService.java trunk/src/dl-learner/org/dllearner/gui/WidgetPanelStringSet.java trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown.java trunk/src/dl-learner/org/dllearner/refinementoperators/PsiDown.java trunk/src/dl-learner/org/dllearner/refinementoperators/PsiUp.java trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java trunk/src/dl-learner/org/dllearner/tools/ore/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java trunk/src/dl-learner/org/dllearner/utilities/Helper.java trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloser.java trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloserOWLAPI.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/BruteForceLearner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/BruteForceLearner.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/algorithms/BruteForceLearner.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -207,7 +207,7 @@ if(length==1) { generatedDefinitions.get(1).add(new Thing()); generatedDefinitions.get(1).add(new Nothing()); - for(NamedClass atomicConcept : rs.getAtomicConcepts()) { + for(NamedClass atomicConcept : rs.getNamedClasses()) { generatedDefinitions.get(1).add(atomicConcept); } } @@ -265,7 +265,7 @@ // EXISTS and ALL for(Description childNode : generatedDefinitions.get(length-2)) { - for(ObjectProperty atomicRole : rs.getAtomicRoles()) { + for(ObjectProperty atomicRole : rs.getObjectProperties()) { Description root1 = new ObjectSomeRestriction(atomicRole,childNode); generatedDefinitions.get(length).add(root1); Modified: trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -61,7 +61,7 @@ // to simplify equivalence checks and minimisation, we // attach a simulation relation to the description tree - private Simulation simulation; +// private Simulation simulation; /** * Constructs an empty EL description tree with the empty set @@ -69,7 +69,7 @@ */ public ELDescriptionTree() { this(new TreeSet<NamedClass>(), new LinkedList<Edge>()); - simulation = new Simulation(); +// simulation = new Simulation(); } /** @@ -189,4 +189,10 @@ return level; } + @Override + public ELDescriptionTree clone() { + // TODO implement efficient tree cloning + return null; + } + } Modified: trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -492,7 +492,7 @@ private static Description pickTerminalSymbol(LearningProblem learningProblem, ReasoningService rs, boolean useADC) { // FlatABox abox = FlatABox.getInstance(); int nr; - int nrOfConcepts = rs.getAtomicConcepts().size(); + int nrOfConcepts = rs.getNamedClasses().size(); // ein Blattknoten kann folgendes sein: // Top, Bottom, Konzept => alles am Besten gleichwahrscheinlich @@ -631,7 +631,7 @@ private static Description createFullRandomTree(LearningProblem learningProblem, ReasoningService rs, int depth, boolean useADC) { // FlatABox abox = FlatABox.getInstance(); - int numberOfRoles = rs.getAtomicRoles().size(); // abox.roles.size(); + int numberOfRoles = rs.getObjectProperties().size(); // abox.roles.size(); if (depth > 1) { int nr = rand.nextInt(3+2*numberOfRoles); @@ -725,8 +725,8 @@ */ // FlatABox abox = FlatABox.getInstance(); - int numberOfConcepts = rs.getAtomicConcepts().size(); - int numberOfRoles = rs.getAtomicRoles().size(); + int numberOfConcepts = rs.getNamedClasses().size(); + int numberOfRoles = rs.getObjectProperties().size(); // TODO: ev. größere Wahrscheinlichkeit für Konjunktion/Disjunktion (?), // mit größerer Konzept-, und Rollenanzahl kommen die sonst kaum noch vor int numberOfAlphabetSymbols = numberOfConcepts + 2*numberOfRoles + 5; //7;// 5; Modified: trunk/src/dl-learner/org/dllearner/algorithms/refexamples/ExampleBasedROLComponent.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/refexamples/ExampleBasedROLComponent.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/algorithms/refexamples/ExampleBasedROLComponent.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -316,9 +316,9 @@ usedRoles = allowedRoles; } else if(ignoredRoles != null) { Helper.checkRoles(rs, ignoredRoles); - usedRoles = Helper.difference(rs.getAtomicRoles(), ignoredRoles); + usedRoles = Helper.difference(rs.getObjectProperties(), ignoredRoles); } else { - usedRoles = rs.getAtomicRoles(); + usedRoles = rs.getObjectProperties(); } // prepare subsumption and role hierarchies, because they are needed Modified: trunk/src/dl-learner/org/dllearner/algorithms/refinement/ROLearner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/refinement/ROLearner.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/algorithms/refinement/ROLearner.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -357,9 +357,9 @@ usedRoles = allowedRoles; } else if(ignoredRoles != null) { Helper.checkRoles(rs, ignoredRoles); - usedRoles = Helper.difference(rs.getAtomicRoles(), ignoredRoles); + usedRoles = Helper.difference(rs.getObjectProperties(), ignoredRoles); } else { - usedRoles = rs.getAtomicRoles(); + usedRoles = rs.getObjectProperties(); } // prepare subsumption and role hierarchies, because they are needed Modified: trunk/src/dl-learner/org/dllearner/cli/Start.java =================================================================== --- trunk/src/dl-learner/org/dllearner/cli/Start.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/cli/Start.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -512,25 +512,25 @@ } } else if (name.equals("showConcepts")) { if (cliOption.getStringValue().equals("true")) { - int stringLength = rs.getAtomicConcepts().toString().length(); + int stringLength = rs.getNamedClasses().toString().length(); if (stringLength > maxLineLength) { - System.out.println("concepts[" + rs.getAtomicConcepts().size() + "]: "); - for (NamedClass ac : rs.getAtomicConcepts()) + System.out.println("concepts[" + rs.getNamedClasses().size() + "]: "); + for (NamedClass ac : rs.getNamedClasses()) System.out.println(" " + ac); } else - System.out.println("concepts[" + rs.getAtomicConcepts().size() + "]: " - + rs.getAtomicConcepts()); + System.out.println("concepts[" + rs.getNamedClasses().size() + "]: " + + rs.getNamedClasses()); } } else if (name.equals("showRoles")) { if (cliOption.getStringValue().equals("true")) { - int stringLength = rs.getAtomicRoles().toString().length(); + int stringLength = rs.getObjectProperties().toString().length(); if (stringLength > maxLineLength) { - System.out.println("roles[" + rs.getAtomicRoles().size() + "]: "); - for (ObjectProperty r : rs.getAtomicRoles()) + System.out.println("roles[" + rs.getObjectProperties().size() + "]: "); + for (ObjectProperty r : rs.getObjectProperties()) System.out.println(" " + r); } else - System.out.println("roles[" + rs.getAtomicRoles().size() + "]: " - + rs.getAtomicRoles()); + System.out.println("roles[" + rs.getObjectProperties().size() + "]: " + + rs.getObjectProperties()); } } else if (name.equals("showSubsumptionHierarchy")) { if (cliOption.getStringValue().equals("true")) { @@ -700,9 +700,9 @@ // (note that removeAll currently gives a different // result here, because the comparator of the argument // is used) - for (NamedClass ac : rs.getAtomicConcepts()) + for (NamedClass ac : rs.getNamedClasses()) occurringConcepts.remove(ac); - for (ObjectProperty ar : rs.getAtomicRoles()) + for (ObjectProperty ar : rs.getObjectProperties()) occurringRoles.remove(ar); boolean nonExistingConstructs = false; Modified: trunk/src/dl-learner/org/dllearner/core/ReasoningService.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/ReasoningService.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/core/ReasoningService.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -368,7 +368,7 @@ } public void prepareSubsumptionHierarchy() { - reasoner.prepareSubsumptionHierarchy(getAtomicConcepts()); + reasoner.prepareSubsumptionHierarchy(getNamedClasses()); } public void prepareSubsumptionHierarchy(Set<NamedClass> allowedConcepts) { @@ -386,7 +386,7 @@ } public void prepareRoleHierarchy() { - prepareRoleHierarchy(getAtomicRoles()); + prepareRoleHierarchy(getObjectProperties()); } public void prepareRoleHierarchy(Set<ObjectProperty> allowedRoles) { @@ -499,11 +499,11 @@ } } - public Set<NamedClass> getAtomicConcepts() { + public Set<NamedClass> getNamedClasses() { return reasoner.getAtomicConcepts(); } - public Set<ObjectProperty> getAtomicRoles() { + public Set<ObjectProperty> getObjectProperties() { return reasoner.getAtomicRoles(); } @@ -589,13 +589,13 @@ public List<NamedClass> getAtomicConceptsList() { if(atomicConceptsList == null) - atomicConceptsList = new LinkedList<NamedClass>(getAtomicConcepts()); + atomicConceptsList = new LinkedList<NamedClass>(getNamedClasses()); return atomicConceptsList; } public List<ObjectProperty> getAtomicRolesList() { if(atomicRolesList == null) - atomicRolesList = new LinkedList<ObjectProperty>(getAtomicRoles()); + atomicRolesList = new LinkedList<ObjectProperty>(getObjectProperties()); return atomicRolesList; } Modified: trunk/src/dl-learner/org/dllearner/gui/WidgetPanelStringSet.java =================================================================== --- trunk/src/dl-learner/org/dllearner/gui/WidgetPanelStringSet.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/gui/WidgetPanelStringSet.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -233,7 +233,7 @@ || configOption.getName().equalsIgnoreCase("ignoredConcepts")) { // fill lists Set<NamedClass> atomicsSet = config.getReasoningService() - .getAtomicConcepts(); + .getNamedClasses(); LinkedList<NamedClass> atomicConcepts = new LinkedList<NamedClass>( atomicsSet); for (NamedClass ind : atomicConcepts) @@ -244,7 +244,7 @@ || configOption.getName().equalsIgnoreCase("ignoredRoles")) { // fill lists Set<ObjectProperty> atomicsSet = config.getReasoningService() - .getAtomicRoles(); + .getObjectProperties(); LinkedList<ObjectProperty> atomicRoles = new LinkedList<ObjectProperty>( atomicsSet); for (ObjectProperty ind : atomicRoles) Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -20,10 +20,18 @@ package org.dllearner.refinementoperators; import java.util.HashSet; +import java.util.Map; import java.util.Set; +import java.util.TreeMap; import org.dllearner.algorithms.el.ELDescriptionTree; +import org.dllearner.core.ReasoningService; import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.core.owl.ObjectPropertyHierarchy; +import org.dllearner.core.owl.SubsumptionHierarchy; +import org.dllearner.core.owl.Thing; /** * EL downward refinement operator constructed by Jens Lehmann @@ -43,13 +51,50 @@ * @author Jens Lehmann * */ +@SuppressWarnings("unused") public class ELDown extends RefinementOperatorAdapter { +// private static Logger logger = Logger.getLogger(ELDown.class); + + private ReasoningService rs; + + // hierarchies + private SubsumptionHierarchy subsumptionHierarchy; + private ObjectPropertyHierarchy opHierarchy; + + // domains and ranges + private Map<ObjectProperty,Description> opDomains = new TreeMap<ObjectProperty,Description>(); + private Map<ObjectProperty,Description> opRanges = new TreeMap<ObjectProperty,Description>(); + + // app_A set of applicable properties for a given class + private Map<Description, Set<ObjectProperty>> app = new TreeMap<Description, Set<ObjectProperty>>(); + + // most general applicable properties + private Map<Description,Set<ObjectProperty>> mgr = new TreeMap<Description,Set<ObjectProperty>>(); + + // utility class + private Utility utility; + + public ELDown(ReasoningService rs) { + utility = new Utility(rs); + subsumptionHierarchy = rs.getSubsumptionHierarchy(); + opHierarchy = rs.getRoleHierarchy(); + + // query reasoner for domains and ranges + // (because they are used often in the operator) + for(ObjectProperty op : rs.getObjectProperties()) { + opDomains.put(op, rs.getDomain(op)); + opRanges.put(op, rs.getRange(op)); + } + } + /* (non-Javadoc) * @see org.dllearner.refinementoperators.RefinementOperator#refine(org.dllearner.core.owl.Description) */ @Override public Set<Description> refine(Description concept) { + // TODO according to the specification, we need to minimise + // the tree (not yet implemented) ELDescriptionTree tree = new ELDescriptionTree(concept); Set<ELDescriptionTree> refinementTrees = refine(tree); Set<Description> refinements = new HashSet<Description>(); @@ -68,7 +113,41 @@ * @return Set of refined EL description trees. */ public Set<ELDescriptionTree> refine(ELDescriptionTree tree) { - return null; + return refine(tree, new Thing()); } + + private Set<ELDescriptionTree> refine(ELDescriptionTree tree, Description index) { + Set<ELDescriptionTree> refinements = new HashSet<ELDescriptionTree>(); + // option 1: label extension + + // option 2: label refinement + // loop through all classes in label + for(NamedClass nc : tree.getLabel()) { + // find all more special classes for the given label + for(Description moreSpecial : rs.getMoreSpecialConcepts(nc)) { + // create refinements by replacing class + ELDescriptionTree tmp = tree.clone(); + // TODO replace class in label + } + } + + // option 3: new edge + + // option 4: edge refinement + + // option 5: child refinement + + return refinements; + } +// private void computeMg(Description index) { +// // compute the applicable properties if this has not been done yet +// if(app.get(index) == null) +// app.put(index, utility.computeApplicableObjectProperties(index)); +// +// mgr.put(index, new TreeSet<ObjectProperty>()); +// +// +// } + } Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/PsiDown.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/PsiDown.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/PsiDown.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -69,7 +69,7 @@ topSet.add(new Negation(c)); // EXISTS r.TOP und ALL r.TOP für alle r - for(ObjectProperty r : reasoningService.getAtomicRoles()) { + for(ObjectProperty r : reasoningService.getObjectProperties()) { topSet.add(new ObjectAllRestriction(r, new Thing())); topSet.add(new ObjectSomeRestriction(r, new Thing())); } Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/PsiUp.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/PsiUp.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/PsiUp.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -57,7 +57,7 @@ bottomSet.add(new Negation(c)); // EXISTS r.BOTTOM und ALL r.BOTTOM für alle r - for(ObjectProperty r : reasoningService.getAtomicRoles()) { + for(ObjectProperty r : reasoningService.getObjectProperties()) { bottomSet.add(new ObjectAllRestriction(r, new Nothing())); bottomSet.add(new ObjectSomeRestriction(r, new Nothing())); } Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -70,6 +70,11 @@ * domain/range restrictions. Furthermore, it makes use of disjoint * classes in the knowledge base. * + * TODO Some of the code has moved to {@link Utility} in a modified + * form to make it accessible for implementations of other refinement + * operators. These utility methods may be completed and carefully + * integrated back later. + * * @author Jens Lehmann * */ @@ -185,7 +190,7 @@ // query reasoner for domains and ranges // (because they are used often in the operator) - for(ObjectProperty op : rs.getAtomicRoles()) { + for(ObjectProperty op : rs.getObjectProperties()) { opDomains.put(op, rs.getDomain(op)); opRanges.put(op, rs.getRange(op)); } @@ -201,7 +206,7 @@ // determine the maximum number of fillers for each role // (up to a specified cardinality maximum) if(useCardinalityRestrictions) { - for(ObjectProperty op : rs.getAtomicRoles()) { + for(ObjectProperty op : rs.getObjectProperties()) { int maxFillers = 0; Map<Individual,SortedSet<Individual>> opMembers = rs.getRoleMembers(op); for(SortedSet<Individual> inds : opMembers.values()) { @@ -978,7 +983,7 @@ // computes the set of applicable properties for a given class private void computeApp(NamedClass domain) { // object properties - Set<ObjectProperty> mostGeneral = rs.getAtomicRoles(); + Set<ObjectProperty> mostGeneral = rs.getObjectProperties(); Set<ObjectProperty> applicableRoles = new TreeSet<ObjectProperty>(); for(ObjectProperty role : mostGeneral) { // TODO: currently we just rely on named classes as roles, Added: trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -0,0 +1,145 @@ +/** + * Copyright (C) 2007-2008, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner 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 + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package org.dllearner.refinementoperators; + +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.dllearner.core.ReasoningService; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.Intersection; +import org.dllearner.core.owl.Nothing; +import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.utilities.Helper; +import org.dllearner.utilities.owl.ConceptComparator; + +/** + * Utility methods for constructing refinement operators. + * + * @author Jens Lehmann + * + */ +public final class Utility { + + private ReasoningService rs; + + // concept comparator + private ConceptComparator conceptComparator = new ConceptComparator(); + + // specifies whether to do real disjoint tests or check that + // two named classes do not have common instances + private boolean instanceBasedDisjoints = true; + + // cache for reasoner queries + private Map<Description,Map<Description,Boolean>> cachedDisjoints = new TreeMap<Description,Map<Description,Boolean>>(conceptComparator); + + + public Utility(ReasoningService rs) { + this.rs = rs; + } + + /** + * Compute the set of applicable object properties for a + * given description. + * + * @param index The index is a description which determines + * which of the properties are applicable. Exactly those which + * where the index and property domain are not disjoint are + * applicable, where disjoint is defined by {@link #isDisjoint(Description, Description)}. + * + */ + public SortedSet<ObjectProperty> computeApplicableObjectProperties(Description index) { + Set<ObjectProperty> objectProperties = rs.getObjectProperties(); + SortedSet<ObjectProperty> applicableObjectProperties = new TreeSet<ObjectProperty>(); + for(ObjectProperty op : objectProperties) { + Description domain = rs.getDomain(op); + if(!isDisjoint(index,domain)) + applicableObjectProperties.add(op); + } + return applicableObjectProperties; + } + + /** + * Given a set of applicable object properties, this method returns + * the most general ones, i.e. those where more general ones do not + * exist in the set of applicable properties. Due to the definition + * of "applicable", the returned set is just the intersection of the most + * general object properties and the applicable properties. (A non-applicable + * property cannot have applicable subproperties, because subproperties + * can only restrict, but not broaden their domain.) + * + * @param rs The underlying reasoning service. + * @param applicableObjectProperties The set of applicable properties. + * @return The most general applicable properties. + */ + public SortedSet<ObjectProperty> computeMgr(SortedSet<ObjectProperty> applicableObjectProperties) { + return Helper.intersection(rs.getMostGeneralRoles(), applicableObjectProperties); + } + + private boolean isDisjoint(Description d1, Description d2) { + // check whether we have cached this query + Map<Description,Boolean> tmp = cachedDisjoints.get(d1); + Boolean tmp2 = null; + if(tmp != null) + tmp2 = tmp.get(d2); + + if(tmp2==null) { + Boolean result; + if(instanceBasedDisjoints) { + result = isDisjointInstanceBased(d1,d2); + } else { + Description d = new Intersection(d1, d2); + result = rs.subsumes(new Nothing(), d); + } + // add the result to the cache (we add it twice such that + // the order of access does not matter) + + // create new entries if necessary + Map<Description,Boolean> map1 = new TreeMap<Description,Boolean>(conceptComparator); + Map<Description,Boolean> map2 = new TreeMap<Description,Boolean>(conceptComparator); + if(tmp == null) + cachedDisjoints.put(d1, map1); + if(!cachedDisjoints.containsKey(d2)) + cachedDisjoints.put(d2, map2); + + // add result symmetrically in the description matrix + cachedDisjoints.get(d1).put(d2, result); + cachedDisjoints.get(d2).put(d1, result); + return result; + } else { + return tmp2; + } + } + + private boolean isDisjointInstanceBased(Description d1, Description d2) { + SortedSet<Individual> d1Instances = rs.retrieval(d1); + SortedSet<Individual> d2Instances = rs.retrieval(d2); + for(Individual d1Instance : d1Instances) { + if(d2Instances.contains(d1Instance)) + return false; + } + return true; + } + +} Modified: trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java =================================================================== --- trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -497,7 +497,7 @@ @WebMethod public String[] getAtomicConcepts(int id) throws ClientNotKnownException { - Set<NamedClass> atomicConcepts = getState(id).getReasoningService().getAtomicConcepts(); + Set<NamedClass> atomicConcepts = getState(id).getReasoningService().getNamedClasses(); return Datastructures.sortedSet2StringListConcepts(atomicConcepts); } @@ -525,7 +525,7 @@ @WebMethod public String[] getAtomicRoles(int id) throws ClientNotKnownException { ClientState state = getState(id); - Set<ObjectProperty> roles = state.getReasoningService().getAtomicRoles(); + Set<ObjectProperty> roles = state.getReasoningService().getObjectProperties(); return Datastructures.sortedSet2StringListRoles(roles); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/KnowledgeSourcePanelDescriptor.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/tools/ore/KnowledgeSourcePanelDescriptor.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -111,7 +111,7 @@ public Set<NamedClass> doInBackground() { getWizardModel().getOre().detectReasoner(); - Set<NamedClass> ind = getWizardModel().getOre().getReasoningService().getAtomicConcepts(); + Set<NamedClass> ind = getWizardModel().getOre().getReasoningService().getNamedClasses(); ClassPanelOWLDescriptor nextPanel = (ClassPanelOWLDescriptor)getWizardModel().getPanelHashMap().get(getNextPanelDescriptor()); nextPanel.panel3.getModel().clear(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -548,7 +548,7 @@ public Set<NamedClass> getpossibleClassesMoveTo(Individual ind){ Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : rs.getAtomicConcepts()) + for(NamedClass nc : rs.getNamedClasses()) if(!rs.instanceCheck(nc, ind)) moveClasses.add(nc); @@ -558,7 +558,7 @@ public Set<NamedClass> getpossibleClassesMoveFrom(Individual ind){ Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : rs.getAtomicConcepts()){ + for(NamedClass nc : rs.getNamedClasses()){ if(rs.instanceCheck(nc, ind)) moveClasses.add(nc); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -68,7 +68,7 @@ Object nextPanelDescriptor = descriptor.getNextPanelDescriptor(); - //TODO nochmal \xFCberdenken + //TODO nochmal �berdenken if(nextPanelDescriptor.equals("CLASS_CHOOSE_OWL_PANEL")){ ((ClassPanelOWLDescriptor)model.getPanelHashMap().get(nextPanelDescriptor)).panel3.getModel().clear(); new ConceptRetriever(nextPanelDescriptor).execute(); @@ -227,7 +227,7 @@ wizard.getModel().getOre().detectReasoner(); Set<NamedClass> ind = wizard.getModel().getOre() - .getReasoningService().getAtomicConcepts(); + .getReasoningService().getNamedClasses(); return ind; } Modified: trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -452,7 +452,7 @@ SortedSet<Individual> individuals = null; if(!aktuell.getRootObject().toString().equals("Thing")) { - for(Iterator<NamedClass> i = rs.getAtomicConcepts().iterator(); i.hasNext();) + for(Iterator<NamedClass> i = rs.getNamedClasses().iterator(); i.hasNext();) { if(individuals==null) { Modified: trunk/src/dl-learner/org/dllearner/utilities/Helper.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/Helper.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/utilities/Helper.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -471,14 +471,14 @@ public static Set<NamedClass> computeConcepts(ReasoningService rs) { // if there is no ignore or allowed list, we just ignore the concepts // of uninteresting namespaces - Set<NamedClass> concepts = rs.getAtomicConcepts(); + Set<NamedClass> concepts = rs.getNamedClasses(); Helper.removeUninterestingConcepts(concepts); return concepts; } // concepts case 2: ignore list public static Set<NamedClass> computeConceptsUsingIgnoreList(ReasoningService rs, Set<NamedClass> ignoredConcepts) { - Set<NamedClass> concepts = rs.getAtomicConcepts(); + Set<NamedClass> concepts = rs.getNamedClasses(); Helper.removeUninterestingConcepts(concepts); for (NamedClass ac : ignoredConcepts) { boolean success = concepts.remove(ac); @@ -512,7 +512,7 @@ */ // public static ObjectProperty checkRoles(ReasoningService rs, Set<ObjectProperty> roles) { - Set<ObjectProperty> existingRoles = rs.getAtomicRoles(); + Set<ObjectProperty> existingRoles = rs.getObjectProperties(); for (ObjectProperty ar : roles) { if(!existingRoles.contains(ar)) return ar; @@ -528,7 +528,7 @@ */ // public static NamedClass checkConcepts(ReasoningService rs, Set<NamedClass> concepts) { - Set<NamedClass> existingConcepts = rs.getAtomicConcepts(); + Set<NamedClass> existingConcepts = rs.getNamedClasses(); for (NamedClass ar : concepts) { if(!existingConcepts.contains(ar)) return ar; @@ -542,7 +542,7 @@ long dematStartTime = System.currentTimeMillis(); FlatABox aBox = new FlatABox(); // FlatABox.getInstance(); - for (NamedClass atomicConcept : rs.getAtomicConcepts()) { + for (NamedClass atomicConcept : rs.getNamedClasses()) { aBox.atomicConceptsPos.put(atomicConcept.getName(), getStringSet(rs .retrieval(atomicConcept))); Negation negatedAtomicConcept = new Negation(atomicConcept); @@ -551,7 +551,7 @@ aBox.concepts.add(atomicConcept.getName()); } - for (ObjectProperty atomicRole : rs.getAtomicRoles()) { + for (ObjectProperty atomicRole : rs.getObjectProperties()) { aBox.rolesPos.put(atomicRole.getName(), getStringMap(rs.getRoleMembers(atomicRole))); aBox.roles.add(atomicRole.getName()); } Modified: trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloser.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloser.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloser.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -86,7 +86,7 @@ * ExactCardinalityRestriction */ public void applyNumberRestrictions() { - Set<ObjectProperty> allRoles = this.rs.getAtomicRoles(); + Set<ObjectProperty> allRoles = this.rs.getObjectProperties(); // Set<Individual> allind = this.rs.getIndividuals(); testForTransitiveProperties(true); @@ -116,7 +116,7 @@ * ExactCardinalityRestriction */ public void applyNumberRestrictionsConcise() { - Set<ObjectProperty> allRoles = this.rs.getAtomicRoles(); + Set<ObjectProperty> allRoles = this.rs.getObjectProperties(); // Set<Individual> allind = this.rs.getIndividuals(); testForTransitiveProperties(true); @@ -167,7 +167,7 @@ * ExactCardinalityRestriction */ public void applyNumberRestrictionsNamed() { - Set<ObjectProperty> allRoles = this.rs.getAtomicRoles(); + Set<ObjectProperty> allRoles = this.rs.getObjectProperties(); // Set<Individual> allind = this.rs.getIndividuals(); testForTransitiveProperties(true); Modified: trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloserOWLAPI.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloserOWLAPI.java 2008-07-31 16:27:38 UTC (rev 1042) +++ trunk/src/dl-learner/org/dllearner/utilities/owl/OntologyCloserOWLAPI.java 2008-07-31 16:33:29 UTC (rev 1043) @@ -53,7 +53,7 @@ */ public void applyNumberRestrictions() { System.out.println("apply ExactCardinalityRestriction to Individuals"); - Set<ObjectProperty> allRoles = this.rs.getAtomicRoles(); + Set<ObjectProperty> allRoles = this.rs.getObjectProperties(); System.out.println("found: " + allRoles.size() + " roles"); testForTransitiveProperties(true); @@ -95,7 +95,7 @@ */ public void applyNumberRestrictionsConcise() { - Set<ObjectProperty> allRoles = this.rs.getAtomicRoles(); + Set<ObjectProperty> allRoles = this.rs.getObjectProperties(); testForTransitiveProperties(true); // collect info for roles and individuals This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |