From: <lor...@us...> - 2009-09-22 08:02:13
|
Revision: 1854 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1854&view=rev Author: lorenz_b Date: 2009-09-22 08:02:04 +0000 (Tue, 22 Sep 2009) Log Message: ----------- added simple inconsistency measure added multirow feature for tables Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SparqlExtractOptionsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ProgressBarTableCellRenderer.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -11,13 +11,19 @@ import org.dllearner.tools.ore.explanation.AxiomUsageChecker; import org.dllearner.tools.ore.explanation.CachedExplanationGenerator; import org.dllearner.tools.ore.explanation.Explanation; +import org.dllearner.tools.ore.explanation.ExplanationException; import org.dllearner.tools.ore.explanation.RootFinder; +import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; +import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; +import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataFactory; import org.semanticweb.owl.model.OWLEntity; import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChangeException; +import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.OWLSubClassAxiom; @@ -159,8 +165,29 @@ return usageChecker.getUsage(axiom); } + public Explanation getLaconicExplanation(Explanation explanation){ + Explanation exp = null; + try { + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + PelletReasonerFactory reasonerFactory = new PelletReasonerFactory(); + OWLOntology ontology = manager.createOntology(explanation.getAxioms()); + LaconicExplanationGenerator gen = new LaconicExplanationGenerator(manager, reasonerFactory, Collections.singleton(ontology)); + exp = gen.getExplanations(explanation.getEntailment(), 1).iterator().next(); + } catch (OWLOntologyCreationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExplanationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return exp; + } + private ArrayList<Map<OWLAxiom, Integer>> getTree2List(Tree<OWLAxiom> tree){ ArrayList<Map<OWLAxiom, Integer>> ordering = new ArrayList<Map<OWLAxiom, Integer>>(); Map<OWLAxiom, Integer> axiom2Depth = new HashMap<OWLAxiom, Integer>(); @@ -192,6 +219,11 @@ return gen.getArity(ax); } + public double getInconsistencyValue(OWLAxiom ax){ + + return Math.round( gen.getInconsistencyValue(ax) * 100. ) / 100.; + } + public void setLaconicMode(boolean laconic){ gen.setComputeLaconicExplanations(laconic); fireExplanationTypeChanged(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -20,23 +20,14 @@ package org.dllearner.tools.ore; import java.net.MalformedURLException; -import java.net.URL; import java.util.SortedSet; import java.util.TreeSet; -import org.dllearner.algorithms.celoe.CELOE; -import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; -import org.dllearner.core.LearningAlgorithm; -import org.dllearner.core.LearningProblemUnsupportedException; -import org.dllearner.core.ReasonerComponent; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.learningproblems.ClassLearningProblem; -import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.utilities.datastructures.SetManipulation; -import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; /** * Test class for SPARQL mode. @@ -46,73 +37,43 @@ */ public class SPARQLTest { - @SuppressWarnings("unused") public static void main(String[] args) throws MalformedURLException { - String exampleClass = "http://dbpedia.org/ontology/HistoricPlace"; - String exampleClassKBString = "\"" + exampleClass + "\""; - + String exampleClass = "http://dbpedia.org/ontology/Place"; + ComponentManager cm = ComponentManager.getInstance(); SparqlEndpoint endPoint = SparqlEndpoint.getEndpointDBpedia(); - - - - String queryString = "SELECT DISTINCT ?class, ?label WHERE {" + - "?class rdf:type owl:Class ." + - "?class rdfs:label ?label .}" ; - //"FILTER(regex(?label, '^$deinstring')) }"; + SPARQLTasks task = new SPARQLTasks(endPoint); - System.out.println(task.queryAsSet(queryString, "label")); -// SparqlQuery query = new SparqlQuery(queryString, endPoint); -// query.send(); -// String json = query.getJson(); -// ResultSet rs = SparqlQuery.convertJSONtoResultSet(json); -// Set<String> results = SPARQLTasks.getStringSetForVariableFromResultSet -// (ResultSetFactory.makeRewindable(rs), "label"); -// -// System.out.println(results); - - AutomaticPositiveExampleFinderSPARQL pos = new AutomaticPositiveExampleFinderSPARQL(task); - pos.makePositiveExamplesFromConcept(exampleClassKBString); - - SortedSet<String> allPosExamples = pos.getPosExamples(); - SortedSet<String> posExamples = SetManipulation.stableShrink(allPosExamples, 20); - System.out.println(posExamples.size()); - System.out.println(posExamples); + SortedSet<String> examples = new TreeSet<String>(); + SortedSet<String> superClasses = task.getSuperClasses(exampleClass, 2); + for (String sup : superClasses) { + examples.addAll(task.retrieveInstancesForClassDescription("\"" + + sup + "\"", 20)); - -// AutomaticNegativeExampleFinderSPARQL neg = new AutomaticNegativeExampleFinderSPARQL( -// posExamples, task, new TreeSet<String>()); -// neg.makeNegativeExamplesFromSuperClasses(exampleClass, 1000); -// SortedSet<String> negExamples = neg.getNegativeExamples(20); -// System.out.println(negExamples); + } - SortedSet<String> instances = new TreeSet<String>(posExamples); -// instances.addAll(negExamples); - - try { + SortedSet<String> posExamples = SetManipulation.stableShrink(examples, + 20); - SparqlKnowledgeSource ks = cm.knowledgeSource(SparqlKnowledgeSource.class); - cm.applyConfigEntry(ks, "predefinedEndpoint", "DBPEDIA"); - ks.getConfigurator().setInstances(instances); -// ks.getConfigurator().setPredefinedFilter("YAGO"); - ks.init(); - ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); - reasoner.init(); - ClassLearningProblem lp = cm.learningProblem(ClassLearningProblem.class, reasoner); - lp.getConfigurator().setClassToDescribe(new URL(exampleClass)); - lp.init(); - LearningAlgorithm la = cm.learningAlgorithm(CELOE.class, lp, reasoner); - la.init(); + SparqlKnowledgeSource ks = cm + .knowledgeSource(SparqlKnowledgeSource.class); + ks.getConfigurator().setUrl(endPoint.getURL()); + ks.getConfigurator().setInstances(posExamples); + ks.init(); + // ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, + // ks); + // reasoner.init(); + // ClassLearningProblem lp = + // cm.learningProblem(ClassLearningProblem.class, reasoner); + // lp.getConfigurator().setClassToDescribe(new URL(exampleClass)); + // lp.init(); + // LearningAlgorithm la = cm.learningAlgorithm(CELOE.class, lp, + // reasoner); + // la.init(); + // + // la.start(); - la.start(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (LearningProblemUnsupportedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -6,6 +6,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; @@ -25,6 +27,7 @@ import com.clarkparsia.modularity.ModularityUtils; import com.clarkparsia.owlapi.OntologyUtils; + public class CachedExplanationGenerator implements ExplanationGenerator, RepairManagerListener{ private Map<OWLAxiom, OWLOntology> axiom2Module; @@ -86,6 +89,33 @@ } return arity; } + + public double getInconsistencyValue(OWLAxiom ax){ + double value = 0; + Map<OWLAxiom, Set<Explanation>> cache; + if(laconicMode == true){ + cache = laconicExplanationCache; + } else { + cache = regularExplanationCache; + } + SortedSet<Explanation> sorted = new TreeSet<Explanation>(); + for(Set<Explanation> explanations : cache.values()){ + for(Explanation exp : explanations){ + if(exp.getAxioms().contains(ax)){ + sorted.add(exp); + } + } + } + for(Explanation exp : sorted){ + if(exp.getAxioms().size() == 1){ + return 1; + } else { + value += 1.0/exp.getAxioms().size() * (1 - value); + } + } + return Math.min(1, value); + + } @Override public Set<Explanation> getExplanations(OWLAxiom entailment, int limit){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -5,7 +5,7 @@ import org.semanticweb.owl.model.OWLAxiom; -public class Explanation { +public class Explanation implements Comparable<Explanation> { private Set<OWLAxiom> axioms; private OWLAxiom entailment; @@ -51,6 +51,17 @@ public int hashCode() { return entailment.hashCode() + axioms.hashCode(); } + + @Override + public int compareTo(Explanation o) { + if(axioms.size() == o.axioms.size()){ + return 1; + } else if(axioms.size() > o.axioms.size()){ + return 1; + } else { + return -1; + } + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -27,7 +27,6 @@ import org.dllearner.tools.ore.RepairManagerListener; import org.dllearner.tools.ore.explanation.Explanation; import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.decorator.HighlighterFactory; import org.protege.editor.core.Disposable; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLOntologyChange; @@ -42,10 +41,10 @@ private RepairManager repMan; protected String[] columnToolTips = { - null, // "First Name" assumed obvious - // "Last Name" assumed obvious + null, "The number of already computed explanations where the axiom occurs.", "TODO", + "TODO", "If checked, the axiom is selected to remove from the ontology.", "Edit the axiom." }; @@ -57,19 +56,20 @@ repMan.addListener(this); setBackground(Color.WHITE); -// setHighlighters(HighlighterFactory.createAlternateStriping()); setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setModel(new ExplanationTableModel(exp, cl)); - TableColumn column5 = getColumn(4); - column5.setCellRenderer(new ButtonCellRenderer()); - column5.setCellEditor(new ButtonCellEditor()); - column5.setResizable(false); + TableColumn column6 = getColumn(5); + column6.setCellRenderer(new ButtonCellRenderer()); + column6.setCellEditor(new ButtonCellEditor()); + column6.setResizable(false); setRowHeight(getRowHeight() + 4); + setRowHeightEnabled(true); + getColumn(0).setCellRenderer(new MultiLineTableCellRenderer()); getColumn(1).setMaxWidth(60); getColumn(2).setMaxWidth(60); - getColumn(3).setMaxWidth(30); + getColumn(3).setMaxWidth(60); getColumn(4).setMaxWidth(30); - + getColumn(5).setMaxWidth(30); getSelectionModel().addListSelectionListener( new ListSelectionListener() { @@ -145,6 +145,10 @@ } + public void strikeOut(boolean strikeOut){ + ((ExplanationTableModel)getModel()).setStriked(strikeOut); + } + private void changeSelection() { } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -28,21 +28,21 @@ private ExplanationManager expMan; private ImpactManager impMan; private RepairManager repMan; - private OWLClass unsat; private OWLOntology ont; + private boolean strikeOutIrrelevantParts; + private Explanation laconicExplanation; public ExplanationTableModel(Explanation exp, OWLClass cl){ this.exp = exp; this.expMan = ExplanationManager.getInstance(OREManager.getInstance()); this.impMan = ImpactManager.getInstance(OREManager.getInstance()); this.repMan = RepairManager.getInstance(OREManager.getInstance()); - this.unsat = cl; this.ont = OREManager.getInstance().getReasoner().getOWLAPIOntologies(); } @Override public int getColumnCount() { - return 5; + return 6; } @Override @@ -55,23 +55,27 @@ OWLAxiom ax = getOWLAxiomAtRow(rowIndex); if(columnIndex == 0){ int depth2Root = expMan.getOrdering(exp).get(rowIndex).values().iterator().next(); - return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root); + if(strikeOutIrrelevantParts){ + return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root, laconicExplanation); + } else { + return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root); + } } else if(columnIndex == 1){ - return expMan.getGlobalArity(ax);//getArity(unsat, getOWLAxiomAtRow(rowIndex)); + return expMan.getGlobalArity(ax); } else if(columnIndex == 2) { return expMan.getUsage(ax).size(); } else if(columnIndex == 3){ + return expMan.getInconsistencyValue(ax); + } else if(columnIndex == 4){ return Boolean.valueOf(impMan.isSelected(ax)); } else { return "rewrite"; - } - + } } - @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { - if(columnIndex == 3){ + if(columnIndex == 4){ OWLAxiom ax = getOWLAxiomAtRow(rowIndex); if(impMan.isSelected(ax)){ impMan.removeSelection(ax); @@ -127,6 +131,8 @@ } else if(columnIndex == 2){ return int.class; } else if(columnIndex == 3){ + return double.class; + } else if(columnIndex == 4){ return Boolean.class; } else { return String.class; @@ -135,7 +141,7 @@ @Override public boolean isCellEditable(int rowIndex, int columnIndex) { - if(columnIndex == 3 || columnIndex == 4){ + if(columnIndex == 4 || columnIndex == 5){ return true; } return false; @@ -145,6 +151,14 @@ return expMan.getOrdering(exp).get(rowIndex).keySet().iterator().next(); } + public void setStriked(boolean strikeOut){ + this.strikeOutIrrelevantParts = strikeOut; + if(strikeOut){ + laconicExplanation = expMan.getLaconicExplanation(exp); + } + fireTableDataChanged(); + } + @Override public String getColumnName(int column) { if(column == 0){ @@ -153,6 +167,8 @@ return "Arity"; } else if(column == 2){ return "Usage"; + } else if(column == 3){ + return ""; } else { return ""; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -305,7 +305,7 @@ extractTask = new OntologyExtractingTask(this, mon); extractTask.addPropertyChangeListener(this); extractTask.execute(); - + } private boolean urlIsConnectable() @@ -429,18 +429,17 @@ ks = cm.knowledgeSource(SparqlKnowledgeSource.class); ks.getConfigurator().setUrl(endpoint.getURL()); ks.getConfigurator().setInstances(instances); -// ks.getConfigurator().setPredefinedFilter("YAGO"); + ks.getConfigurator().setPredefinedFilter("YAGO"); ks.getConfigurator().setBreakSuperClassRetrievalAfter(optionsPanel.getBreakSuperClassRetrievalAfterValue()); ks.getConfigurator().setRecursionDepth(optionsPanel.getRecursionDepthValue()); ks.getConfigurator().setUseCache(optionsPanel.isUseCache()); ks.getConfigurator().setGetAllSuperClasses(optionsPanel.isGetAllSuperClasses()); ks.getConfigurator().setDissolveBlankNodes(optionsPanel.isDissolveBlankNodes()); ks.getConfigurator().setUseImprovedSparqlTupelAquisitor(optionsPanel.isUseImprovedSparqlTupelAquisitor()); - ks.getConfigurator().setUseLits(optionsPanel.isUseLiterals()); + ks.getConfigurator().setUseLits(false);//optionsPanel.isUseLiterals()); ks.getConfigurator().setGetPropertyInformation(optionsPanel.isGetPropertyInformation()); ks.getConfigurator().setCloseAfterRecursion(optionsPanel.isCloseAfterRecursion()); ks.addProgressMonitor(mon); - ks.getConfigurator().setSaveExtractedFragment(true); ks.init(); return null; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -41,7 +41,8 @@ setShowHorizontalLines(true); setGridColor(Color.LIGHT_GRAY); setTableHeader(null); - getColumnModel().getColumn(1).setCellRenderer(new OWLSyntaxTableCellRenderer()); + setRowHeightEnabled(true); + getColumnModel().getColumn(1).setCellRenderer(new MultiLineTableCellRenderer()); setRowHeight(getRowHeight() + 5); getColumn(0).setMaxWidth(50); getColumn(2).setMaxWidth(60); @@ -190,4 +191,7 @@ } } + + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -7,11 +7,13 @@ import org.dllearner.core.owl.Individual; import org.dllearner.tools.ore.ExplanationManager; import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.utilities.owl.OWLAPIConverter; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLEntity; import org.semanticweb.owl.model.OWLIndividual; import org.semanticweb.owl.model.OWLObject; @@ -68,7 +70,7 @@ return render(ind); } - public static String render(OWLAxiom value, boolean striked, int depth){ + public static String render(OWLAxiom value, boolean removed, int depth){ value.accept(renderer); writer.flush(); String renderedString = buffer.toString(); @@ -79,7 +81,7 @@ for(int i = 0; i < depth; i++){ bf.append(" "); } - if(striked){ + if(removed){ bf.append("<strike>"); } @@ -112,7 +114,7 @@ bf.append(" " + token + " "); } } - if(striked){ + if(removed){ bf.append("</strike>"); } bf.append("</html>"); @@ -121,6 +123,82 @@ return renderedString; } + public static String render(OWLAxiom value, boolean removed, int depth, Explanation explanation){ + value.accept(renderer); + writer.flush(); + String renderedString = buffer.toString(); + StringTokenizer st = new StringTokenizer(renderedString); + StringBuffer bf = new StringBuffer(); + + bf.append("<html>"); + for(int i = 0; i < depth; i++){ + bf.append(" "); + } + if(removed){ + bf.append("<strike>"); + } + + + String token; + while(st.hasMoreTokens()){ + token = st.nextToken(); + boolean unsatClass = false; + for(OWLClass cl : ExplanationManager.getInstance(OREManager.getInstance()).getUnsatisfiableClasses()){ + if(cl.toString().equals(token)){ + unsatClass = true; + break; + } + } + String color = "black"; + if(unsatClass){ + color = "red"; + } + + boolean isReserved = false; + for(Keyword key : Keyword.values()){ + if(token.equals(key.getLabel())){ + color = key.getColor(); + isReserved = true;break; + } + } + boolean isRelevant = false; + if(!isReserved){ + for(OWLAxiom ax : explanation.getAxioms()){ + for(OWLEntity ent : ax.getSignature()){ + if(token.equals(ent.toString())){ + isRelevant = true;break; + } + } + + } + } else { + isRelevant = true; + } + if(isReserved || unsatClass){ + if(isRelevant){ + bf.append("<b><font color=" + color + ">" + token + " </font></b>"); + } else { + bf.append("<strike<b><font color=" + color + ">" + token + " </font></b></strike>"); + } + + } else { + if(isRelevant){ + bf.append(" " + token + " "); + } else { + bf.append("<strike> " + token + " </strike>"); + } + + } + } + if(removed){ + bf.append("</strike>"); + } + bf.append("</html>"); + renderedString = bf.toString(); + buffer.getBuffer().delete(0, buffer.toString().length()); + return renderedString; + } + private static String render(OWLObject obj){ obj.accept(renderer); writer.flush(); Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -0,0 +1,214 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Color; +import java.awt.Component; +import java.io.StringWriter; +import java.util.StringTokenizer; + +import javax.swing.JTable; +import javax.swing.JTextPane; +import javax.swing.UIManager; +import javax.swing.border.Border; +import javax.swing.border.EmptyBorder; +import javax.swing.table.TableCellRenderer; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyledDocument; +import javax.swing.text.View; + +import org.dllearner.tools.ore.ExplanationManager; +import org.dllearner.tools.ore.ImpactManager; +import org.dllearner.tools.ore.OREManager; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; + +import com.clarkparsia.explanation.io.manchester.Keyword; +import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxObjectRenderer; +import com.clarkparsia.explanation.io.manchester.TextBlockWriter; + +public class MultiLineTableCellRenderer extends JTextPane implements TableCellRenderer{ + + /** + * + */ + private static final long serialVersionUID = -5375479462711405013L; + protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); + + private StringWriter buffer; + private TextBlockWriter writer; + private ManchesterSyntaxObjectRenderer renderer; + private ImpactManager impMan; + + private StyledDocument doc; + Style style; + public MultiLineTableCellRenderer() + { + super(); + + + setContentType("text/html"); + setBorder(noFocusBorder); + + buffer = new StringWriter(); + writer = new TextBlockWriter(buffer); + renderer = new ManchesterSyntaxObjectRenderer(writer); + renderer.setWrapLines( false ); + renderer.setSmartIndent( true ); + impMan = ImpactManager.getInstance(OREManager.getInstance()); + +// Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE); +// Style style = addStyle("regular", def); +// StyleConstants.setLeftIndent(style, 20.0f); + +// SimpleAttributeSet sas = new SimpleAttributeSet(); +// StyleConstants.setAlignment(sas, StyleConstants.ALIGN_RIGHT); +// setParagraphAttributes(sas, true); + + doc = (StyledDocument)getDocument(); + style = doc.addStyle("StyleName", null); + StyleConstants.setItalic(style, true); + + + + } + + + public Component getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, + int column) + { + if (isSelected) + { + super.setForeground(table.getSelectionForeground()); + super.setBackground(table.getSelectionBackground()); + } + else + { + super.setForeground(table.getForeground()); + super.setBackground(table.getBackground()); + } + + setFont(table.getFont()); + + if (hasFocus) + { + setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); + if (!isSelected && table.isCellEditable(row, column)) + { + Color col; + col = UIManager.getColor("Table.focusCellForeground"); + if (col != null) + { + super.setForeground(col); + } + col = UIManager.getColor("Table.focusCellBackground"); + if (col != null) + { + super.setBackground(col); + } + } + } + else + { + setBorder(noFocusBorder); + } + + setEnabled(table.isEnabled()); + + setValue(table, row, column, value); + + return this; + } + + protected void setValue(JTable table, int row, int column, Object value) + { + if (value != null) + { + String text = value.toString(); + setText(text); + +// try { +// doc.insertString(doc.getLength(), text, style); +// } catch (BadLocationException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } + if(value instanceof OWLAxiom){ + boolean striked = false; + if(impMan != null && impMan.isSelected((OWLAxiom)value)){ + striked = true; + } + ((OWLAxiom)value).accept(renderer); + + writer.flush(); + String newAxiom = buffer.toString(); + + StringTokenizer st = new StringTokenizer(newAxiom); + + StringBuffer bf = new StringBuffer(); + bf.append("<html>"); + if(striked){ + bf.append("<strike>"); + } + + String token; + while(st.hasMoreTokens()){ + token = st.nextToken(); + + boolean unsatClass = false; + for(OWLClass cl : ExplanationManager.getInstance(OREManager.getInstance()).getUnsatisfiableClasses()){ + if(cl.toString().equals(token)){ + unsatClass = true; + break; + } + } + String color = "black"; + if(unsatClass){ + color = "red"; + } + + + boolean isReserved = false; + for(Keyword key : Keyword.values()){ + if(token.equals(key.getLabel())){ + color = key.getColor(); + isReserved = true;break; + } + } + if(isReserved || unsatClass){ + bf.append("<b><font color=" + color + ">" + token + " </font></b>"); + } else { + bf.append(" " + token + " "); + } + } + if(striked){ + bf.append("</strike>"); + } + bf.append("</html>"); + newAxiom = bf.toString(); + setText(newAxiom); +// oldAxioms.add(buffer.toString()); + buffer.getBuffer().delete(0, buffer.toString().length()); + } + + + View view = getUI().getRootView(this); + view.setSize((float) table.getColumnModel().getColumn(column).getWidth() - 3, -1); + float y = view.getPreferredSpan(View.Y_AXIS); + int h = (int) Math.ceil(y + 3); + + if (table.getRowHeight(row) != h) + { + table.setRowHeight(row, h ); + } + } + else + { + setText(""); + } + } + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ProgressBarTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ProgressBarTableCellRenderer.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ProgressBarTableCellRenderer.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -0,0 +1,54 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Component; + +import javax.swing.JProgressBar; +import javax.swing.JTable; +import javax.swing.table.TableCellRenderer; + +public class ProgressBarTableCellRenderer extends JProgressBar implements TableCellRenderer { + + + /** + * + */ + private static final long serialVersionUID = 8523710265306561978L; + + + public ProgressBarTableCellRenderer() { + super(JProgressBar.HORIZONTAL); + setBorderPainted(false); + setStringPainted(true); + } + + public ProgressBarTableCellRenderer(int min, int max) { + super(JProgressBar.HORIZONTAL, 0, 100); + setBorderPainted(false); + } + + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + + int n = 0; + if (! (value instanceof Number)) { + String str; + if (value instanceof String) { + str = (String)value; + } else { + str = value.toString(); + } + try { + n = Integer.valueOf(str).intValue(); + } catch (NumberFormatException ex) { + } + } else { + n = ((Number)value).intValue(); + } + + setValue(n); + return this; + } + + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -35,7 +35,9 @@ setGridColor(Color.LIGHT_GRAY); setTableHeader(null); setRowHeight(getRowHeight() + 5); + setRowHeightEnabled(true); getColumn(0).setMaxWidth(30); + getColumn(1).setCellRenderer(new MultiLineTableCellRenderer()); getColumn(2).setMaxWidth(40); getColumn(2).setCellRenderer(new TableCellRenderer() { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -22,6 +22,9 @@ // setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setModel(new ResultTableModel()); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); +// ProgressBarTableCellRenderer renderer = new ProgressBarTableCellRenderer(); +// renderer.setBackground(getBackground()); +// getColumn(0).setCellRenderer(renderer); getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); setColumnSizes(); getColumn(0).setResizable(false); @@ -33,7 +36,7 @@ } private void setColumnSizes(){ - getColumn(0).setMaxWidth(70); + getColumn(0).setMaxWidth(100); getColumn(1).setPreferredWidth(430); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -42,7 +42,7 @@ @Override public Object getValueAt(int rowIndex, int columnIndex) { if(columnIndex == 0){ - return df.format(resultList.get(rowIndex).getAccuracy()); + return df.format(resultList.get(rowIndex).getAccuracy()); } else { return resultList.get(rowIndex).getDescription(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/SparqlExtractOptionsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SparqlExtractOptionsPanel.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/SparqlExtractOptionsPanel.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -124,15 +124,15 @@ c.gridy = 7; add(getAllSuperClassesCheckBox, c); - c.anchor = GridBagConstraints.LINE_START; - c.gridx = 1; - c.gridy = 8; - add(new JLabel("Use literals"), c); - useLitsCheckBox = new JCheckBox(); - c.anchor = GridBagConstraints.LINE_END; - c.gridx = 0; - c.gridy = 8; - add(useLitsCheckBox, c); +// c.anchor = GridBagConstraints.LINE_START; +// c.gridx = 1; +// c.gridy = 8; +// add(new JLabel("Use literals"), c); +// useLitsCheckBox = new JCheckBox(); +// c.anchor = GridBagConstraints.LINE_END; +// c.gridx = 0; +// c.gridy = 8; +// add(useLitsCheckBox, c); } @@ -181,7 +181,7 @@ getPropertyInformationCheckBox.setSelected(false); closeAfterRecursionCheckBox.setSelected(true); getAllSuperClassesCheckBox.setSelected(true); - useLitsCheckBox.setSelected(true); +// useLitsCheckBox.setSelected(true); } public void setToolTips(){ @@ -193,7 +193,7 @@ getPropertyInformationCheckBox.setToolTipText("gets all types for extracted ObjectProperties"); closeAfterRecursionCheckBox.setToolTipText("gets all classes for all instances"); getAllSuperClassesCheckBox.setToolTipText("If true then all superclasses are retrieved until the most general class (owl:Thing) is reached."); - useLitsCheckBox.setToolTipText("use Literals in SPARQL query"); +// useLitsCheckBox.setToolTipText("use Literals in SPARQL query"); } public static void main(String[] args){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -21,13 +21,12 @@ public UnsatisfiableClassesTable(){ ExplanationManager expMan = ExplanationManager.getInstance(OREManager.getInstance()); setBackground(Color.WHITE); - setHighlighters(HighlighterFactory.createAlternateStriping()); setModel(new UnsatisfiableClassesTableModel()); setEditable(false); setTableHeader(null); setGridColor(Color.LIGHT_GRAY); getColumn(0).setMaxWidth(20); - setRowHeight(getRowHeight() + 4); + setRowHeight(getRowHeight() + 5); getColumn(0).setCellRenderer(new UnsatClassesTableCellRenderer(expMan)); // setAutoResizeMode(JTable.AUTO_RESIZE_OFF); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -10,6 +10,7 @@ import java.util.Set; import java.util.TreeSet; +import javax.swing.AbstractButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -110,6 +111,10 @@ } else if (e.getActionCommand().equals("max")){ expMan.setComputeAllExplanationsMode(false); panel.setMaxExplanationsMode(true); + } else if(e.getActionCommand().equals("strike")){ + AbstractButton abstractButton = (AbstractButton) e.getSource(); + boolean selected = abstractButton.getModel().isSelected(); + panel.strikeOutIrrelevantParts(selected); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-09-20 14:45:41 UTC (rev 1853) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-09-22 08:02:04 UTC (rev 1854) @@ -15,6 +15,7 @@ import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ButtonGroup; +import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; @@ -60,8 +61,10 @@ private JRadioButton computeAllExplanationsRadioButton; private JRadioButton computeMaxExplanationsRadioButton; private JSpinner maxExplanationsSelector; + private JCheckBox strikeOutBox; private Set<ExplanationTablePanel> explanationPanels; + private Set<ExplanationTable> explanationTables; private ExplanationManager expMan; @@ -115,6 +118,7 @@ explanationsPanel = new Box(1); explanationPanels = new HashSet<ExplanationTablePanel>(); + explanationTables = new HashSet<ExplanationTable>(); JPanel pan = new JPanel(new BorderLayout()); pan.add(explanationsPanel, BorderLayout.NORTH); @@ -149,11 +153,11 @@ maxExplanationsSelector.setModel(spinnerModel); maxExplanationsSelector.setBorder(BorderFactory.createEmptyBorder(0, 30, 0, 0)); - computeAllExplanationsRadioButton = new JRadioButton("compute all explanations"); + computeAllExplanationsRadioButton = new JRadioButton("Compute all explanations"); computeAllExplanationsRadioButton.setActionCommand("all"); - computeMaxExplanationsRadioButton = new JRadioButton("limit explanation count to:"); - computeMaxExplanationsRadioButton.setActionCommand("max"); + computeMaxExplanationsRadioButton = new JRadioButton("Limit explanation count to:"); + computeMaxExplanationsRadioButton.setActionCommand("MAX"); computeMaxExplanationsRadioButton.setSelected(true); ButtonGroup limitButtonGroup = new ButtonGroup(); @@ -164,6 +168,9 @@ buttonPanel.add(computeMaxExplanationsRadioButton, new GridBagConstraints(1, 1, 1, 1, 0.0D, 0.0D, 12, 2, new Insets(0, 0, 0, 0), 0, 0)); buttonPanel.add(maxExplanationsSelector, new GridBagConstraints(3, 1, 1, 1, 0.0D, 0.0D, 12, 2, new Insets(0, 0, 0, 0), 0, 0)); + strikeOutBox = new JCheckBox("Strike out irrelevant parts"); + strikeOutBox.setActionCommand("strike"); + buttonPanel.add(strikeOutBox, new GridBagConstraints(3, 0, 1, 1, 0.0D, 0.0D, 12, 2, new Insets(0, 0, 0, 0), 0, 0)); buttonExplanationsPanel = new JPanel(); buttonExplanationsPanel.setLayout(new BorderLayout()); @@ -185,7 +192,8 @@ impRepSplit.setBorder(null); impactRepairPanel.add(impRepSplit); - JScrollPane impScr = new JScrollPane(new ImpactTable()); + ImpactTable impactTable = new ImpactTable(); + JScrollPane impScr = new JScrollPane(impactTable); JPanel impactPanel = new JPanel(); impactPanel.setLayout(new BorderLayout()); impactPanel.add(new JLabel("Impact"), BorderLayout.NORTH); @@ -226,6 +234,7 @@ int counter = 1; for(Explanation exp : explanations){ ExplanationTable expTable = new ExplanationTable(exp, unsat); + explanationTables.add(expTable); ExplanationTablePanel panel = new ExplanationTablePanel(expTable, counter); explanationHolderPanel.add(panel); explanationHolderPanel.add(Box.createVerticalStrut(5)); @@ -244,12 +253,19 @@ public void setMaxExplanationsMode(boolean value){ maxExplanationsSelector.setEnabled(value); } + + public void strikeOutIrrelevantParts(boolean strikeOut){ + for(ExplanationTable table : explanationTables){ + table.strikeOut(strikeOut); + } + } public void addActionListeners(ActionListener aL) { regularButton.addActionListener(aL); laconicButton.addActionListener(aL); computeAllExplanationsRadioButton.addActionListener(aL); computeMaxExplanationsRadioButton.addActionListener(aL); + strikeOutBox.addActionListener(aL); } public void addListSelectionListener(ListSelectionListener l){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-23 09:35:23
|
Revision: 1856 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1856&view=rev Author: lorenz_b Date: 2009-09-23 09:35:11 +0000 (Wed, 23 Sep 2009) Log Message: ----------- some gui fixes fixed bug Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -57,7 +57,6 @@ try { PropertyConfigurator.configure(new URL("file:src/dl-learner/org/dllearner/tools/ore/log4j.properties")); } catch (MalformedURLException e1) { - // TODO Auto-generated catch block e1.printStackTrace(); } @@ -122,11 +121,7 @@ @Override public void run() { - System.out.println("Starting application..."); wizard.showModalDialog(); - System.out.println("Exited ORE application"); - System.exit(0); - } }); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -2,7 +2,7 @@ import java.awt.Cursor; -import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.SwingWorker; import org.dllearner.tools.ore.ui.StatusBar; @@ -15,9 +15,8 @@ private StatusBar statusBar; + private JFrame dialog; - private JDialog dialog; - public static synchronized TaskManager getInstance(){ if(instance == null){ instance = new TaskManager(); @@ -33,11 +32,11 @@ return statusBar; } - public void setDialog(JDialog dialog){ + public void setDialog(JFrame dialog){ this.dialog = dialog; } - public JDialog getDialog(){ + public JFrame getDialog(){ return dialog; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -62,7 +62,7 @@ column6.setCellRenderer(new ButtonCellRenderer()); column6.setCellEditor(new ButtonCellEditor()); column6.setResizable(false); - setRowHeight(getRowHeight() + 4); +// setRowHeight(getRowHeight() + 4); setRowHeightEnabled(true); getColumn(0).setCellRenderer(new MultiLineTableCellRenderer()); getColumn(1).setMaxWidth(60); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -2,7 +2,6 @@ import java.awt.BorderLayout; import java.awt.Cursor; -import java.awt.Dialog; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; @@ -32,6 +31,7 @@ import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; @@ -93,7 +93,7 @@ private Map<URL, List<String>> endpointToDefaultGraph; - public ExtractFromSparqlDialog(Dialog owner) { + public ExtractFromSparqlDialog(JFrame owner) { super(owner, "Extract fragment from SPARQL endpoint", true); // Create the controls @@ -238,7 +238,7 @@ } } - private void positionErrorDialog(Dialog owner) { + private void positionErrorDialog(JFrame owner) { if (owner == null || !owner.isVisible()) { Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); setLocation(screenDimension.width / 2 - getSize().width / 2, screenDimension.height / 2 - getSize().height / 2); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -36,6 +36,7 @@ import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; @@ -95,7 +96,7 @@ private Individual ind; - public RepairDialog(Individual ind, JDialog dialog, String mode){ + public RepairDialog(Individual ind, JFrame dialog, String mode){ super(dialog, true); final Component dialogd = this.getParent(); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -104,6 +104,23 @@ }); } + + @Override + public String getToolTipText(MouseEvent event) { + int rowIndex = rowAtPoint(event.getPoint()); + int columnIndex = columnAtPoint(event.getPoint()); + if(columnIndex == 0){ + if(getValueAt(rowIndex, 0).equals("–")){ + return "Remove from ontology"; + } else { + return "Add to ontology"; + } + } else if(columnIndex == 2){ + return "Remove from repair plan"; + } else { + return super.getToolTipText(event); + } + } private void handleKeyPressed(KeyEvent e) { int selRow = getSelectedRow(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -34,15 +34,13 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; -import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.JPanel; -import javax.swing.JScrollPane; import javax.swing.JSeparator; -import javax.swing.JTextArea; +import javax.swing.JTextPane; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; @@ -100,7 +98,7 @@ private WizardModel wizardModel; private WizardController wizardController; - private JDialog wizardDialog; + private JFrame wizardDialog; private JPanel cardPanel; private CardLayout cardLayout; @@ -108,7 +106,7 @@ private JButton backButton; private JButton nextButton; private JButton cancelButton; - private JTextArea informationsField; + private JTextPane informationsField; private StatusBar statusBar; private int returnCode; @@ -129,7 +127,7 @@ */ public Wizard(Dialog owner) { wizardModel = new WizardModel(); - wizardDialog = new JDialog(owner); + wizardDialog = new JFrame(); initComponents(); } @@ -140,7 +138,14 @@ */ public Wizard(Frame owner) { wizardModel = new WizardModel(); - wizardDialog = new JDialog(owner); + wizardDialog = new JFrame(); + wizardDialog.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.out.println("Exited application"); + wizardDialog.dispose(); + } + }); + initComponents(); } @@ -151,7 +156,7 @@ * the event that you want to change any of the JDialog parameters manually. * @return The JDialog instance that this class created. */ - public JDialog getDialog() { + public JFrame getDialog() { return wizardDialog; } @@ -185,15 +190,15 @@ * @param b the modality of the dialog */ public void setModal(boolean b) { - wizardDialog.setModal(b); +// wizardDialog.setModal(b); } /** * Returns the modality of the dialog. * @return A boolean indicating whether or not the generated javax.swing.JDialog is modal. */ - public boolean isModal() { - return wizardDialog.isModal(); + public boolean isModal() {return false; +// return wizardDialog.isModal(); } /** @@ -203,12 +208,9 @@ * constants at the beginning of the class. */ public int showModalDialog() { - - wizardDialog.setModal(true); - //wizardDialog.pack(); + System.out.println("Starting application"); wizardDialog.setVisible(true); - return returnCode; } @@ -367,6 +369,7 @@ */ public void close(int code) { returnCode = code; + System.out.println("Exited application"); wizardDialog.dispose(); } @@ -428,36 +431,23 @@ buttonBox.add(cancelButton); buttonPanel.add(buttonBox, java.awt.BorderLayout.EAST); - buttonPanel.add(statusBar, BorderLayout.SOUTH); - JPanel informationPanel = new JPanel(); - informationPanel.setLayout(new BorderLayout()); - JScrollPane infoScrollPane = new JScrollPane(); - informationsField = new JTextArea(); - - - //setLayout(new GridBagLayout()); - infoScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - infoScrollPane.setViewportBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + buttonPanel.add(statusBar, BorderLayout.SOUTH); + Color color = UIManager.getColor("Panel.background"); + informationsField = new JTextPane(); informationsField.setBackground(new Color(color.getRed(), color.getGreen(), color.getBlue())); informationsField.setOpaque(true); - informationsField.setColumns(80); informationsField.setEditable(false); - informationsField.setLineWrap(true); - informationsField.setRows(3); informationsField.setFont(new Font("Serif", Font.PLAIN, 14)); - informationsField.setWrapStyleWord(true); - infoScrollPane.setViewportView(informationsField); - informationPanel.add(infoScrollPane, BorderLayout.EAST); + + wizardDialog.getContentPane().add(buttonPanel, java.awt.BorderLayout.SOUTH); - JPanel buttonInformationPanel = new JPanel(); - buttonInformationPanel.setLayout(new BorderLayout()); - buttonInformationPanel.add(buttonPanel, BorderLayout.SOUTH); - buttonInformationPanel.add(informationPanel, BorderLayout.NORTH); + JPanel infoMainHolder = new JPanel(); + infoMainHolder.setLayout(new BorderLayout()); + infoMainHolder.add(informationsField, BorderLayout.SOUTH); + infoMainHolder.add(cardPanel, BorderLayout.CENTER); + wizardDialog.getContentPane().add(infoMainHolder, java.awt.BorderLayout.CENTER); - wizardDialog.getContentPane().add(buttonInformationPanel, java.awt.BorderLayout.SOUTH); - wizardDialog.getContentPane().add(cardPanel, java.awt.BorderLayout.CENTER); - leftPanel = new LeftPanel(0); wizardDialog.getContentPane().add(leftPanel, BorderLayout.WEST); @@ -492,16 +482,14 @@ * @param i the number of the panel */ public void setLeftPanel(int i) { - ((LeftPanel) (wizardDialog.getContentPane().getComponent(2))).set(i); - - + ((LeftPanel) (wizardDialog.getContentPane().getComponent(2))).set(i); } /** * Returns the information field. - * @return JTextArea + * @return JTextPane */ - public JTextArea getInformationField(){ + public JTextPane getInformationField(){ return informationsField; } @@ -514,8 +502,4 @@ statusBar.setProgressMessage("test"); } - - - - } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -103,7 +103,8 @@ // range); // Description de = new NamedClass("http://example.com/father#male"); - if (!e.getValueIsAdjusting() && (learningTask.isDone() || learningTask.isCancelled())){ + if (!e.getValueIsAdjusting() && learnPanel.getResultTable().getSelectedRow() >= 0 && + (learningTask.isDone() || learningTask.isCancelled())){ EvaluatedDescriptionClass selectedClassExpression = learnPanel.getResultTable().getSelectedValue(); // if(!selectedClassExpression.isConsistent()){ // learnPanel.add(new JLabel("Selected class expression may lead to an inconsistent knowledgebase.")); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -102,8 +102,10 @@ public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("regular")) { expMan.setLaconicMode(false); + panel.setStrikeEnabled(true); } else if (e.getActionCommand().equals("laconic")) { expMan.setLaconicMode(true); + panel.setStrikeEnabled(false); } else if (e.getActionCommand().equals("all")){ conditionalWarning("Computing all explanations might take a long time!", getWizard().getDialog()); expMan.setComputeAllExplanationsMode(true); @@ -208,7 +210,7 @@ @Override public Void doInBackground() { statusBar.showProgress(true); - statusBar.setProgressTitle("Computing explanations"); + statusBar.setProgressTitle("Computing explanations..."); getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); for(OWLClass unsat : panel.getUnsatTable().getSelectedClasses()){ expMan.getUnsatisfiableExplanations(unsat); @@ -264,7 +266,7 @@ public Void doInBackground() { statusBar.showProgress(true); - statusBar.setProgressTitle("Computing root derived class"); + statusBar.setProgressTitle("Computing root and derived classes..."); getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); expMan.getRootUnsatisfiableClasses(); expMan.getDerivedClasses(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -29,8 +29,7 @@ import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; +import javax.swing.JTextPane; import javax.swing.UIManager; /** @@ -43,57 +42,54 @@ private static final long serialVersionUID = 7184544803724152044L; - private JTextArea instructionsField; - private JScrollPane jScrollPane1; + private JTextPane instructionsField; private JLabel welcomeTitle; - private final String introductionText = "This is a tool for debugging end enriching OWL-ontologies. " - + "You are able to check ontologies for inconsistency and unsatisfiable classes. " - + "If some of that is detected, helpful explanations can be generated to find out the relevant axioms. " - + "Another feature is to get equivalent class expressions for atomic classes, using an intelligent and efficient " - + "machine learning algorithm. TODO...Jens "; + private final String titleText = "<html>Welcome to the DL-Learner ORE (Ontology Repair and Enrichment) Tool!<br>(Version 0.1)</html>"; - + private final String introductionText = "<html>ORE is a tool for debugging and enriching OWL ontologies. It has the following features: " + + "<UL>" + + "<LI>detection of inconsistencies" + + "<LI>displaying explanations for those inconsistencies" + + "<LI>intelligent resolution of inconsistencies" + + "<LI>enrichment of an ontology by learning definitions and super class axioms" + + "<LI>guiding the user through potential consequences of adding those axioms" + + "</UL>" + + "In a later version, the tool will also support the detection of various potential modelling problems." + + "ORE uses a wizard-style concept. On the left, you can see different steps in the wizard, where the current step is in bold. " + + "Each step contains an explanation of it in the main window. The wizard may omit steps if they are not necessary, e.g. " + + "if you load a consistent ontology, then the \"Debugging\" dialogue is skipped." + + "Please read the <a href=\"http://dl-learner.org/wiki/ORE\">the ORE wiki page</a> and view the <a href=\"...\">screencast</a> to get started.</html>"; - public IntroductionPanel() { createUI(); } private void createUI(){ + setBorder(BorderFactory.createEmptyBorder(12, 6, 12, 12)); setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1.0; c.anchor = GridBagConstraints.NORTH; - - //setLayout(new GridBagLayout()); - setBorder(BorderFactory.createEmptyBorder(12, 6, 12, 12)); - + welcomeTitle = new JLabel(); welcomeTitle.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(0, 0, 0))); welcomeTitle.setFont(new java.awt.Font("MS Sans Serif", Font.BOLD, 14)); - welcomeTitle.setText("Welcome to the DL-Learner ORE-Tool!"); + welcomeTitle.setText(titleText); add(welcomeTitle, c); - jScrollPane1 = new JScrollPane(); - jScrollPane1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - jScrollPane1.setViewportBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - instructionsField = new JTextArea(); + instructionsField = new JTextPane(); + instructionsField.setContentType("text/html"); Color color = UIManager.getColor("Panel.background"); instructionsField.setBackground(new Color(color.getRed(), color.getGreen(), color.getBlue())); instructionsField.setOpaque(true); - instructionsField.setColumns(20); instructionsField.setEditable(false); - instructionsField.setLineWrap(true); - instructionsField.setRows(5); instructionsField.setFont(new Font("Serif", Font.PLAIN, 14)); instructionsField.setText(introductionText); - instructionsField.setWrapStyleWord(true); - jScrollPane1.setViewportView(instructionsField); - add(jScrollPane1, c); + add(instructionsField, c); c.weighty = 1.0; add(new JLabel(), c); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-09-23 08:49:32 UTC (rev 1855) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-09-23 09:35:11 UTC (rev 1856) @@ -228,6 +228,7 @@ } public void addExplanations(Set<Explanation> explanations, OWLClass unsat){ + explanationTables.clear(); Box explanationHolderPanel = new Box(1); explanationHolderPanel.setBorder(new TitledBorder(unsat + " is unsatisfiable")); @@ -259,6 +260,10 @@ table.strikeOut(strikeOut); } } + + public void setStrikeEnabled(boolean enabled){ + strikeOutBox.setEnabled(enabled); + } public void addActionListeners(ActionListener aL) { regularButton.addActionListener(aL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-23 11:26:21
|
Revision: 1858 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1858&view=rev Author: lorenz_b Date: 2009-09-23 11:26:14 +0000 (Wed, 23 Sep 2009) Log Message: ----------- only showing classes that have at least one individual when selected class expression with accuracy 100%, example repair is skipped Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-23 10:48:09 UTC (rev 1857) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-23 11:26:14 UTC (rev 1858) @@ -67,6 +67,7 @@ private Set<OWLClass> rootClasses; private Set<OWLClass> derivedClasses; + private Set<OWLClass> unsatClasses; private boolean ontologyChanged = true; @@ -94,6 +95,8 @@ } rootClasses = new HashSet<OWLClass>(); derivedClasses = new HashSet<OWLClass>(); + unsatClasses = new HashSet<OWLClass>(); + depend2Classes = new HashSet<OWLClass>(); depth2UniversalRestrictionPropertyMap = new HashMap<Integer, Set<OWLObjectAllRestriction>>(); depth2ExistsRestrictionPropertyMap = new HashMap<Integer, Set<OWLObjectPropertyExpression>>(); @@ -138,6 +141,7 @@ // } catch (OWLOntologyChangeException e) { // e.printStackTrace(); // } + unsatClasses.clear(); rootClasses.clear(); derivedClasses.clear(); depend2Classes.clear(); @@ -147,14 +151,16 @@ parent2Children.clear(); computePossibleRoots(); pruneRoots(); + derivedClasses.addAll(unsatClasses); derivedClasses.removeAll(rootClasses); rootClasses.remove(manager.getOWLDataFactory().getOWLNothing()); } private void computePossibleRoots(){ - derivedClasses.addAll(reasoner.getInconsistentClasses()); - for(OWLClass cls : derivedClasses){ + unsatClasses.addAll(reasoner.getInconsistentClasses()); + + for(OWLClass cls : unsatClasses){ reset(); for(OWLDescription equi : cls.getEquivalentClasses(ontology)){ equi.accept(this); @@ -243,7 +249,7 @@ filler.accept(this); depth--; } else { - if(!reasoner.isSatisfiable(filler)){ + if(unsatClasses.contains(filler.asOWLClass())){ depend2Classes.add(filler.asOWLClass()); if(restr instanceof OWLObjectAllRestriction){ addAllRestrictionProperty((OWLObjectAllRestriction) restr); @@ -276,13 +282,10 @@ @Override - public void visit(OWLClass cls) { - - - if(!reasoner.isSatisfiable(cls)) { + public void visit(OWLClass cls) { + if(unsatClasses.contains(cls)) { depend2Classes.add(cls); } - } @Override @@ -292,7 +295,7 @@ for(OWLDescription op : and.getOperands()) { if(op.isAnonymous()){ op.accept(this); - } else if(!reasoner.isSatisfiable(op)) { + } else if(unsatClasses.contains(op.asOWLClass())) { depend2Classes.add(op.asOWLClass()); } } @@ -301,21 +304,22 @@ @Override public void visit(OWLObjectUnionOf or) { - - - for(OWLDescription op : or.getOperands()){ - if(reasoner.isSatisfiable(op)){ - return; - } + + // check whether one of the union operands is satisfiable + for (OWLDescription op : or.getOperands()) { + if (!unsatClasses.contains(op)) { + return; } - for(OWLDescription op : or.getOperands()){ - if(op.isAnonymous()){ - op.accept(this); - } else { - depend2Classes.add(op.asOWLClass()); - } + } + // all operands are unsatisfiable + for (OWLDescription op : or.getOperands()) { + if (op.isAnonymous()) { + op.accept(this); + } else { + depend2Classes.add(op.asOWLClass()); } - + } + } @Override Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-23 10:48:09 UTC (rev 1857) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-23 11:26:14 UTC (rev 1858) @@ -152,17 +152,17 @@ /** - * Returns an instance of the JDialog that this class created. This is useful in - * the event that you want to change any of the JDialog parameters manually. - * @return The JDialog instance that this class created. + * Returns an instance of the JFrame that this class created. This is useful in + * the event that you want to change any of the JFrame parameters manually. + * @return The JFrame instance that this class created. */ public JFrame getDialog() { return wizardDialog; } /** - * Returns the owner of the generated javax.swing.JDialog. - * @return The owner (java.awt.Frame or java.awt.Dialog) of the javax.swing.JDialog generated + * Returns the owner of the generated javax.swing.JFrame. + * @return The owner (java.awt.Frame or java.awt.Dialog) of the javax.swing.JFrame generated * by this class. */ public Component getOwner() { @@ -170,7 +170,7 @@ } /** - * Sets the title of the generated javax.swing.JDialog. + * Sets the title of the generated javax.swing.JFrame. * @param s The title of the dialog. */ public void setTitle(String s) { @@ -186,7 +186,7 @@ } /** - * Sets the modality of the generated javax.swing.JDialog. + * Sets the modality of the generated javax.swing.JFrame. * @param b the modality of the dialog */ public void setModal(boolean b) { @@ -195,7 +195,7 @@ /** * Returns the modality of the dialog. - * @return A boolean indicating whether or not the generated javax.swing.JDialog is modal. + * @return A boolean indicating whether or not the generated javax.swing.JFrame is modal. */ public boolean isModal() {return false; // return wizardDialog.isModal(); @@ -247,11 +247,6 @@ } - public void updatePanel(JPanel panel, Object id){ - cardPanel.remove(4); - cardPanel.add(panel, id); - } - /** * Displays the panel identified by the object passed in. This is the same Object-based * identified used when registering the panel. @@ -374,7 +369,7 @@ } /** - * This method initializes the components for the wizard dialog: it creates a JDialog + * This method initializes the components for the wizard dialog: it creates a JFrame * as a CardLayout panel surrounded by a small amount of space on each side, as well * as three buttons at the bottom. */ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-23 10:48:09 UTC (rev 1857) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-23 11:26:14 UTC (rev 1858) @@ -22,11 +22,9 @@ import java.awt.event.ActionListener; -import java.util.List; import javax.swing.JOptionPane; -import org.dllearner.core.owl.Description; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.InconsistencyExplanationPanelDescriptor; @@ -35,7 +33,6 @@ import org.dllearner.tools.ore.ui.wizard.descriptors.RepairPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.SavePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.UnsatisfiableExplanationPanelDescriptor; -import org.semanticweb.owl.model.OWLOntologyChange; /** * This class is responsible for reacting to events generated by pushing any of the @@ -118,52 +115,64 @@ UnsatisfiableExplanationPanelDescriptor.IDENTIFIER, unsatDescriptor); nextPanelDescriptor = UnsatisfiableExplanationPanelDescriptor.IDENTIFIER; + wizard.setCurrentPanel(nextPanelDescriptor); + unsatDescriptor.fillUnsatisfiableClassesList(); } else { nextPanelDescriptor = ClassChoosePanelDescriptor.IDENTIFIER; ((ClassChoosePanelDescriptor) nextDescriptor).refill(); } } - } else if (currentPanelDescriptor.getPanelDescriptorIdentifier() - .equals(InconsistencyExplanationPanelDescriptor.IDENTIFIER)) { + } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(InconsistencyExplanationPanelDescriptor.IDENTIFIER)) { ore.getReasoner().classify(); if (ore.getReasoner().getInconsistentClasses().size() > 0) { - + UnsatisfiableExplanationPanelDescriptor unsatDescriptor = new UnsatisfiableExplanationPanelDescriptor(); + unsatDescriptor.init(); + wizard.registerWizardPanel( + UnsatisfiableExplanationPanelDescriptor.IDENTIFIER, + unsatDescriptor); + nextPanelDescriptor = UnsatisfiableExplanationPanelDescriptor.IDENTIFIER; } else { nextPanelDescriptor = ClassChoosePanelDescriptor.IDENTIFIER; ((ClassChoosePanelDescriptor) nextDescriptor).refill(); } - } else if (currentPanelDescriptor.getPanelDescriptorIdentifier() - .equals(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER)) { + } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER)) { nextPanelDescriptor = ClassChoosePanelDescriptor.IDENTIFIER; ((ClassChoosePanelDescriptor) nextDescriptor).refill(); - } else if (nextPanelDescriptor - .equals(LearningPanelDescriptor.IDENTIFIER)) { - ore.makeOWAToCWA(); + } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(ClassChoosePanelDescriptor.IDENTIFIER)) { +// ore.makeOWAToCWA(); ore.setLearningProblem(); LearningPanelDescriptor learnDescriptor = ((LearningPanelDescriptor) model .getPanelHashMap().get(nextPanelDescriptor)); learnDescriptor.setPanelDefaults(); - } else if (nextPanelDescriptor.equals(RepairPanelDescriptor.IDENTIFIER)) { - RepairPanelDescriptor repair = ((RepairPanelDescriptor) model - .getPanelHashMap().get(nextPanelDescriptor)); - repair.refreshExampleLists(); - - // OWLOntologyChange change = - // model.getOre().getModi().addAxiomToOWL(model.getOre().getConceptToAdd(), - // model.getOre().getIgnoredConcept()); - // repair.getOntologyChanges().add(change); - + } +// else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(LearningPanelDescriptor.IDENTIFIER)){ +// if(OREManager.getInstance().getNewClassDescription().getAccuracy() == 1.0){ +// nextPanelDescriptor = SavePanelDescriptor.IDENTIFIER; +// } else { +// nextPanelDescriptor = RepairPanelDescriptor.IDENTIFIER; +// RepairPanelDescriptor repair = ((RepairPanelDescriptor) model +// .getPanelHashMap().get(nextPanelDescriptor)); +// repair.refreshExampleLists(); +// } + + else if(nextPanelDescriptor.equals(RepairPanelDescriptor.IDENTIFIER)){ + RepairPanelDescriptor repair = ((RepairPanelDescriptor) model + .getPanelHashMap().get(nextPanelDescriptor)); + repair.refreshExampleLists(); + + + } else if (nextPanelDescriptor.equals(SavePanelDescriptor.IDENTIFIER)) { - Description newDesc = ore.getNewClassDescription().getDescription(); - Description oldClass = ore.getCurrentClass2Learn(); +// Description newDesc = ore.getNewClassDescription().getDescription(); +// Description oldClass = ore.getCurrentClass2Learn(); +// +// List<OWLOntologyChange> changes = ore.getModifier() +// .rewriteClassDescription(newDesc, oldClass); +// ((RepairPanelDescriptor) currentPanelDescriptor) +// .getOntologyChanges().addAll(changes); - List<OWLOntologyChange> changes = ore.getModifier() - .rewriteClassDescription(newDesc, oldClass); - ((RepairPanelDescriptor) currentPanelDescriptor) - .getOntologyChanges().addAll(changes); - } if (nextPanelDescriptor instanceof WizardPanelDescriptor.FinishIdentifier) { wizard.close(Wizard.FINISH_RETURN_CODE); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-23 10:48:09 UTC (rev 1857) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-23 11:26:14 UTC (rev 1858) @@ -20,7 +20,9 @@ package org.dllearner.tools.ore.ui.wizard.descriptors; +import java.util.Iterator; import java.util.Set; +import java.util.TreeSet; import java.util.concurrent.ExecutionException; import javax.swing.SwingWorker; @@ -49,7 +51,7 @@ /** * Information string for class choose panel. */ - public static final String INFORMATION = "As you can see, all atomic classes of the ontology are shown in the list above. " + public static final String INFORMATION = "Above all atomic classes which have at least one individual are listed. " + "Select one of them for which you want to learn equivalent class expressions," + " then press <Next>"; @@ -113,7 +115,7 @@ } public void refill(){ - TaskManager.getInstance().setTaskStarted("Retrieving atomic classes"); + TaskManager.getInstance().setTaskStarted("Retrieving atomic classes..."); new ClassRetrievingTask().execute(); } @@ -125,8 +127,18 @@ class ClassRetrievingTask extends SwingWorker<Set<NamedClass>, NamedClass> { @Override - public Set<NamedClass> doInBackground() { - Set<NamedClass> classes = OREManager.getInstance().getReasoner().getNamedClasses(); + public Set<NamedClass> doInBackground() { + OREManager.getInstance().makeOWAToCWA(); + Set<NamedClass> classes = new TreeSet<NamedClass>(OREManager.getInstance().getReasoner().getNamedClasses()); + classes.remove(new NamedClass("http://www.w3.org/2002/07/owl#Thing")); + Iterator<NamedClass> iter = classes.iterator(); + while(iter.hasNext()){ + NamedClass nc = iter.next(); + int instanceCount = OREManager.getInstance().getReasoner().getIndividuals(nc).size(); + if(instanceCount == 0){ + iter.remove(); + } + } return classes; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-23 10:48:09 UTC (rev 1857) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-23 11:26:14 UTC (rev 1858) @@ -76,7 +76,12 @@ @Override public Object getNextPanelDescriptor() { - return RepairPanelDescriptor.IDENTIFIER; + EvaluatedDescriptionClass newClassDesc = OREManager.getInstance().getNewClassDescription(); + if(newClassDesc != null && newClassDesc.getAccuracy() == 1.0){ + return SavePanelDescriptor.IDENTIFIER; + } else { + return RepairPanelDescriptor.IDENTIFIER; + } } @Override Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-09-23 10:48:09 UTC (rev 1857) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-09-23 11:26:14 UTC (rev 1858) @@ -62,7 +62,11 @@ @Override public Object getBackPanelDescriptor() { - return "REPAIR_PANEL"; + if(OREManager.getInstance().getNewClassDescription().getAccuracy() == 1.0){ + return LearningPanelDescriptor.IDENTIFIER; + } else { + return RepairPanelDescriptor.IDENTIFIER; + } } @Override Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-23 10:48:09 UTC (rev 1857) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-23 11:26:14 UTC (rev 1858) @@ -88,17 +88,10 @@ @Override public void aboutToDisplayPanel() { -// new RootDerivedTask(getWizard().getStatusBar()).execute(); getWizard().getInformationField().setText(INFORMATION); - } @Override - public void displayingPanel() { - new RootDerivedTask(getWizard().getStatusBar()).execute(); - } - - @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("regular")) { expMan.setLaconicMode(false); @@ -136,7 +129,9 @@ } - + public void fillUnsatisfiableClassesList(){ + new RootDerivedTask(getWizard().getStatusBar()).execute(); + } @Override public void valueChanged(ListSelectionEvent e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-24 08:51:13
|
Revision: 1860 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1860&view=rev Author: lorenz_b Date: 2009-09-24 08:51:02 +0000 (Thu, 24 Sep 2009) Log Message: ----------- some gui fixes cleaned up code Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/Sparql.java trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -25,6 +25,7 @@ import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.Intersection; import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.ObjectPropertyExpression; import org.dllearner.core.owl.Union; import org.dllearner.kb.OWLFile; import org.dllearner.kb.sparql.SparqlKnowledgeSource; @@ -32,7 +33,12 @@ import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.reasoning.PelletReasoner; import org.dllearner.tools.ore.ui.DescriptionLabel; +import org.dllearner.utilities.owl.OWLAPIConverter; import org.mindswap.pellet.exceptions.InconsistentOntologyException; +import org.mindswap.pellet.utils.SetUtils; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLObjectProperty; import org.semanticweb.owl.model.OWLOntologyCreationException; public class OREManager { @@ -144,6 +150,7 @@ e.printStackTrace(); } reasoner.loadOntologies(); + reasoner.addProgressMonitor(TaskManager.getInstance().getStatusBar()); baseURI = reasoner.getBaseURI(); prefixes = reasoner.getPrefixes(); modifier = new OntologyModifier(reasoner); @@ -447,7 +454,6 @@ Set<Individual> allIndividuals = new HashSet<Individual>(); - for(Individual i : reasoner.getIndividuals()){ if(!reasoner.hasType(desc, i)){ @@ -456,10 +462,36 @@ } allIndividuals.remove(ind); + System.out.println(); return allIndividuals; } + public boolean isAssertable(ObjectPropertyExpression role, Individual ind){ + OWLDataFactory factory = reasoner.getOWLOntologyManager().getOWLDataFactory(); + OWLObjectProperty property = factory.getOWLObjectProperty(URI.create(role.getName())); + + //get the objectproperty domains + Set<OWLDescription> domains = SetUtils.union(getReasoner().getReasoner().getDomains(property)); + + //get the classes where the individual belongs to + Set<NamedClass> classes = reasoner.getTypes(ind); + + //get the complements of the classes, the individual belongs to + Set<Description> complements = new HashSet<Description>(); + for(NamedClass nc : classes){ + complements.addAll(reasoner.getComplementClasses(nc)); + } + + for(OWLDescription domain : domains){ + if(complements.contains(OWLAPIConverter.convertClass(domain.asOWLClass()))){ + System.out.println(domain); + return false; + } + } + return true; + } + /** * Returns classes where individual might moved to. * @param ind the individual Modified: trunk/src/dl-learner/org/dllearner/tools/ore/Sparql.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/Sparql.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/Sparql.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -1,7 +1,6 @@ package org.dllearner.tools.ore; import java.net.MalformedURLException; -import java.net.URL; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -13,8 +12,7 @@ * @throws MalformedURLException */ public static void main(String[] args) throws MalformedURLException { - URL url = new URL("http://dbpedia.org/sparql"); - SPARQLTasks task = new SPARQLTasks(SparqlEndpoint.getEndpointDBpedia());//new SparqlEndpoint(url)); + SPARQLTasks task = new SPARQLTasks(SparqlEndpoint.getEndpointDBpedia()); String queryString = "SELECT DISTINCT ?class WHERE {?class rdf:type owl:Class ." + "?class rdfs:label ?label . FILTER(regex(?label, \"City\")) }"; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -3,7 +3,6 @@ import java.awt.Cursor; import javax.swing.JFrame; -import javax.swing.SwingWorker; import org.dllearner.tools.ore.ui.StatusBar; @@ -11,9 +10,6 @@ private static TaskManager instance; - private SwingWorker<?, ?> currentTask; - - private StatusBar statusBar; private JFrame dialog; @@ -40,29 +36,15 @@ return dialog; } - public void setCurrentTask(SwingWorker<?, ?> task){ - this.currentTask = task; - } - - public void cancelCurrentTask(){ - if(currentTask != null && !currentTask.isCancelled() && !currentTask.isDone()){ - currentTask.cancel(true); - } -// statusBar.setProgressTitle("Canceled"); -// dialog.setCursor(null); - } - - - public void setTaskStarted(String message){ dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - statusBar.setProgressTitle(message); + statusBar.setMessage(message); statusBar.showProgress(true); } public void setTaskFinished(){ dialog.setCursor(null); - statusBar.setProgressTitle("Done"); + statusBar.setMessage("Done"); statusBar.showProgress(false); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -3,13 +3,11 @@ import java.io.PrintWriter; import java.net.URI; import java.util.Collections; -import java.util.HashSet; import java.util.Set; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; -import org.mindswap.pellet.utils.progress.SwingProgressMonitor; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.inference.OWLReasoner; import org.semanticweb.owl.inference.OWLReasonerException; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -133,7 +133,7 @@ menu.add(new RemoveAllPropertyAssertionsToMenuItem(((ObjectSomeRestriction) desc).getRole(), ((ObjectSomeRestriction) desc).getChild(0))); //2.b remove property assertions with objects in range } } else if(desc instanceof ObjectAllRestriction){ //3. description is a object all restriction - if (!(desc.getChild(0) instanceof Thing)) { + if (!(desc.getChild(0) instanceof Thing)) {System.out.println(ore.isAssertable(((ObjectAllRestriction)desc).getRole(), ind)); JMenu dme = new JMenu("add property assertion " + ((ObjectAllRestriction) desc).getRole().toKBSyntaxString(baseURI, prefixes) //3.a add property assertion with object not in range + " with object ..."); for (Individual i : ore.getIndividualsNotInPropertyRange(desc.getChild(0), ind)){ Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -1,348 +0,0 @@ -package org.dllearner.tools.ore.ui; - -import java.awt.Dimension; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.SortedSet; -import java.util.TreeSet; - -import javax.swing.AbstractAction; -import javax.swing.ButtonGroup; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JScrollPane; -import javax.swing.JTextField; -import javax.swing.JToggleButton; -import javax.swing.ProgressMonitor; -import javax.swing.SwingWorker; -import javax.swing.border.TitledBorder; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; - -import org.dllearner.core.ComponentManager; -import org.dllearner.kb.sparql.SPARQLTasks; -import org.dllearner.kb.sparql.SparqlEndpoint; -import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.utilities.datastructures.SetManipulation; -import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; -import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; - -public class ExtractFromSparqlPanel extends JPanel implements DocumentListener, ActionListener, PropertyChangeListener{ - - /** - * - */ - private static final long serialVersionUID = -2164059829630727931L; - - - private JComboBox comboBox; - private JTextField classField; - private JTextField defaultGraphField; - - private JRadioButton asLabelButton; - private JRadioButton asURLButton; - - private JButton extractButton; - - private GridBagConstraints c; - - private SPARQLTasks task; - private SparqlKnowledgeSource ks; - private OntologyExtractingTask extractTask; - private ProgressMonitor mon; - private List<SparqlEndpoint> endpoints; - - private SparqlExtractOptionsPanel optionsPanel; - - public ExtractFromSparqlPanel(){ - - setLayout(new GridBagLayout()); - c = new GridBagConstraints(); - c.fill = GridBagConstraints.HORIZONTAL; - c.weightx = 1.0; - c.gridwidth = GridBagConstraints.REMAINDER; - - JPanel endPointHolderPanel = new JPanel(); - endPointHolderPanel.setLayout(new GridLayout(0, 1)); - endPointHolderPanel.setBorder(new TitledBorder("Sparql endpoint")); - comboBox = new JComboBox(); - comboBox.setEditable(true); - AutoCompleteDecorator.decorate(this.comboBox); - endPointHolderPanel.add(new JLabel("URL")); - endPointHolderPanel.add(comboBox); - defaultGraphField = new JTextField(); - endPointHolderPanel.add(new JLabel("Default graph URI")); - endPointHolderPanel.add(defaultGraphField); - add(endPointHolderPanel, c); - - - JPanel classHolderPanel = new JPanel(); - classHolderPanel.setLayout(new GridLayout(0, 1)); - classHolderPanel.setBorder(new TitledBorder("Class to learn")); - asLabelButton = new JRadioButton("label"); - asURLButton = new JRadioButton("URI"); - asURLButton.setSelected(true); - ButtonGroup bG = new ButtonGroup(); - bG.add(asLabelButton); - bG.add(asURLButton); - JPanel buttonPanel = new JPanel(); - buttonPanel.add(new JLabel("input type:")); - buttonPanel.add(asURLButton); - buttonPanel.add(asLabelButton); - - classHolderPanel.add(buttonPanel); - classField = new JTextField(); - classField.getDocument().addDocumentListener(this); - classHolderPanel.add(classField); - add(classHolderPanel, c); - - extractButton = new JButton("extract"); - extractButton.addActionListener(this); - c.fill = GridBagConstraints.NONE; - add(extractButton, c); - - -// JToggleButton button = new JToggleButton(new AbstractAction("Options") { -// -// @Override -// public void actionPerformed(ActionEvent e) { -// JToggleButton button = (JToggleButton)e.getSource(); -// -// if(!button.getModel().isSelected()){ -// -// collapseOptionsPanel(); -// } else { -// expandOptionsPanel(); -// } -// -// -// } -// }); -// -// -// add(button, c); - - - optionsPanel = new SparqlExtractOptionsPanel(); - add(optionsPanel, c); -// optionsPanel.setVisible(false); - JLabel padding = new JLabel(); - c.weighty = 1.0; - add(padding, c); - - } - - private void expandOptionsPanel(){ - Dimension dialogSize = getSize (); - Dimension detailSize = optionsPanel.getPreferredSize (); - dialogSize.height += detailSize.height; - setSize (dialogSize); - optionsPanel.setVisible(true); - // Cause the new layout to take effect - invalidate (); - validate (); - - } - - private void collapseOptionsPanel(){ - optionsPanel.setVisible(false); - } - - - - - private void extract() { - mon = new ProgressMonitor(this, "Extracting fragment", "", 0, 100); - - extractTask = new OntologyExtractingTask(mon); - extractTask.addPropertyChangeListener(this); - extractTask.execute(); - - - } - - private String getClassFromLabel(){ - - String queryString = "SELECT DISTINCT ?class WHERE {" + - "?class rdf:type owl:Class ." + - "?class rdfs:label ?label . " + - "FILTER(regex(?label, '" + classField.getText() + "')) }"; - SortedSet<String> classes = task.queryAsSet(queryString, "class"); - - return classes.iterator().next(); - } - private void autocomplete(){ - - - - - - } - - public static SparqlKnowledgeSource showDialog() { - - ExtractFromSparqlPanel panel = new ExtractFromSparqlPanel(); - - int ret = JOptionPaneEx.showConfirmDialog(null, - "Extract fragment from Sparql-Endpoint", - new JScrollPane(panel), - JOptionPane.PLAIN_MESSAGE, - JOptionPane.OK_CANCEL_OPTION, - panel.comboBox); - if (ret == JOptionPane.OK_OPTION) { - return panel.ks; - } - return null; - } - - - @Override - public void changedUpdate(DocumentEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void insertUpdate(DocumentEvent e) { -// autocomplete(); - - } - - @Override - public void removeUpdate(DocumentEvent e) { - // TODO Auto-generated method stub - - } - - - @Override - public void actionPerformed(ActionEvent e) { - extract(); - - } - - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ("progress" == evt.getPropertyName() ) { - if(mon.isCanceled()){ - extractTask.cancel(true); - } - } - - } - - class OntologyExtractingTask extends SwingWorker<Void, Void>{ - - private ProgressMonitor mon; - - public OntologyExtractingTask(ProgressMonitor mon) { - this.mon = mon; - } - - @Override - public Void doInBackground() { - ComponentManager cm = ComponentManager.getInstance(); - URL endpointURL = null; - try { - endpointURL = new URL(comboBox.getSelectedItem().toString()); - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - List<String> defaultGraphURIS = new ArrayList<String>(1); - defaultGraphURIS.add(defaultGraphField.getText()); - SparqlEndpoint endpoint = new SparqlEndpoint(endpointURL, defaultGraphURIS, Collections.<String>emptyList()); - task = new SPARQLTasks(endpoint); - - String exampleClassKBString = "\"" + getClassFromLabel() + "\""; - - AutomaticPositiveExampleFinderSPARQL pos = new AutomaticPositiveExampleFinderSPARQL( - task); - pos.makePositiveExamplesFromConcept(exampleClassKBString); - - SortedSet<String> allPosExamples = pos.getPosExamples(); - SortedSet<String> posExamples = SetManipulation.stableShrink( - allPosExamples, 20); - System.out.println(posExamples.size()); - System.out.println(posExamples); - SortedSet<String> instances = new TreeSet<String>(posExamples); - - ks = cm.knowledgeSource(SparqlKnowledgeSource.class); - ks.getConfigurator().setUrl(SparqlEndpoint.getEndpointDBpedia().getURL()); - ks.getConfigurator().setInstances(instances); - ks.getConfigurator().setPredefinedFilter("YAGO"); - ks.getConfigurator().setBreakSuperClassRetrievalAfter(optionsPanel.getBreakSuperClassRetrievalAfterValue()); - ks.getConfigurator().setRecursionDepth(optionsPanel.getRecursionDepthValue()); - ks.getConfigurator().setUseCache(optionsPanel.isUseCache()); - ks.getConfigurator().setGetAllSuperClasses(optionsPanel.isGetAllSuperClasses()); - ks.getConfigurator().setDissolveBlankNodes(optionsPanel.isDissolveBlankNodes()); - ks.getConfigurator().setUseImprovedSparqlTupelAquisitor(optionsPanel.isUseImprovedSparqlTupelAquisitor()); - ks.getConfigurator().setUseLits(optionsPanel.isUseLiterals()); - ks.getConfigurator().setGetPropertyInformation(optionsPanel.isGetPropertyInformation()); - ks.getConfigurator().setCloseAfterRecursion(optionsPanel.isCloseAfterRecursion()); - ks.addProgressMonitor(mon); - - ks.init(); - - return null; - } - - @Override - public void done() { - mon.setProgress(0); - } - } - - private static class JOptionPaneEx extends JOptionPane { - - /** - * - */ - private static final long serialVersionUID = -8531422911783932819L; - - public static int showConfirmDialog(JComponent parent, String title, JComponent content, int messageType, - int optionType, final JComponent defaultFocusedComponent) { - - JOptionPane optionPane = new JOptionPane(content, messageType, optionType); - JDialog dlg = optionPane.createDialog(parent, title); - dlg.addWindowListener(new WindowAdapter() { - public void windowOpened(WindowEvent e) { - if (defaultFocusedComponent != null) { - defaultFocusedComponent.requestFocusInWindow(); - } - } - }); - dlg.setSize(400, 300); - dlg.setResizable(true); - dlg.setVisible(true); - Object value = optionPane.getValue(); - return (value != null) ? (Integer) value : JOptionPane.CLOSED_OPTION; - } - } - - - public static void main(String[] args){ - ExtractFromSparqlPanel.showDialog(); - } - - - -} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -3,7 +3,6 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; -import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; @@ -36,21 +35,17 @@ private static final long serialVersionUID = 1L; private JLabel infoLabel; private JProgressBar progressBar; - private int progress = 0; - private int progressLength = 0; - private int progressPercent = -1; - private String progressMessage; + private boolean isIndeterminateMode; private boolean isCanceled = false; public StatusBar() { + setLayout(new BorderLayout()); infoLabel = new JLabel(""); progressBar = new JProgressBar(); -// progressBar.setStringPainted(true); - setLayout(new BorderLayout()); -// setPreferredSize(new Dimension(10, 23)); + JPanel rightPanel = new JPanel(new BorderLayout()); rightPanel.add(new JLabel(new AngledLinesWindowsCornerIcon()), BorderLayout.SOUTH); @@ -68,7 +63,17 @@ rB.setToolTipText("Abort"); // leftPanel.add(rB); - leftPanel.add(new Cancel()); + Cancel cancelButton = new Cancel(); + cancelButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + isCanceled = true; + System.out.println("Task canceled"); + } + }); + cancelButton.setToolTipText("Abort current task"); + leftPanel.add(cancelButton); leftPanel.add(progressBar); leftPanel.add(new JSeparator(JSeparator.VERTICAL)); @@ -125,113 +130,82 @@ } - @Override - public int getProgress() { - return progress; - } + @Override - public int getProgressPercent() { - return progressPercent; + public void foundAllExplanations() { + // TODO Auto-generated method stub + } @Override - public void incrementProgress() { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - setProgress(progress + 1); - - } - }); + public void foundExplanation(Set<OWLAxiom> explanation) { + System.out.println(explanation); } @Override - public boolean isCanceled() { + public boolean isCancelled() { return isCanceled; } @Override - public void setProgress(int progress) { - this.progress = progress; - updateProgress(); - + public int getProgress() { + // TODO Auto-generated method stub + return 0; } @Override - public void setProgressLength(int length) { - progressLength = length; - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - progressBar.setMaximum(progressLength); - - } - }); - - - - - + public int getProgressPercent() { + // TODO Auto-generated method stub + return 0; } @Override - public void setProgressMessage(String message) { - progressMessage = message; - infoLabel.setText(message); + public void incrementProgress() { + // TODO Auto-generated method stub - } @Override - public void setProgressTitle(String title) { - infoLabel.setText(title); - + public boolean isCanceled() { + return isCanceled; } @Override - public void taskFinished() { - setCursor(null); + public void setProgress(int arg0) { + // TODO Auto-generated method stub } @Override - public void taskStarted() { - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + public void setProgressLength(int arg0) { + // TODO Auto-generated method stub } - - private void updateProgress(){ - SwingUtilities.invokeLater(new Runnable(){ - @Override - public void run() { - progressBar.setValue(progress); - - - } - - }); + @Override + public void setProgressMessage(String arg0) { + // TODO Auto-generated method stub + } @Override - public void foundAllExplanations() { + public void setProgressTitle(String arg0) { // TODO Auto-generated method stub } @Override - public void foundExplanation(Set<OWLAxiom> explanation) { - System.out.println(explanation); + public void taskFinished() { + // TODO Auto-generated method stub } @Override - public boolean isCancelled() { - return isCanceled; + public void taskStarted() { + // TODO Auto-generated method stub + } @@ -346,6 +320,11 @@ class Cancel extends JButton { + /** + * + */ + private static final long serialVersionUID = 4624954971172916869L; + public Cancel() { super(); setIcon(new ImageIcon( Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -143,6 +143,7 @@ public void windowClosing(WindowEvent e) { System.out.println("Exited application"); wizardDialog.dispose(); + System.exit(0); } }); @@ -366,6 +367,7 @@ returnCode = code; System.out.println("Exited application"); wizardDialog.dispose(); + System.exit(0); } /** Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -45,8 +45,7 @@ private void showExplanations(){ ExplanationTask task = new ExplanationTask(); - TaskManager.getInstance().setCurrentTask(task); - TaskManager.getInstance().setTaskStarted("Computing explanations"); + TaskManager.getInstance().setTaskStarted("Computing explanations..."); task.execute(); } @@ -115,6 +114,7 @@ if(!isCancelled()){ showExplanations(); } + TaskManager.getInstance().setTaskFinished(); } private void showExplanations(){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -106,7 +106,7 @@ public void loadOntology(URI uri){ OREManager.getInstance().setCurrentKnowledgeSource(uri); currentURI = uri; - TaskManager.getInstance().setTaskStarted("Loading ontology"); + TaskManager.getInstance().setTaskStarted("Loading ontology..."); new OntologyLoadingTask(getWizard().getStatusBar()).execute(); } @@ -172,10 +172,6 @@ } private void handleOpenFromRecent(URI uri){ -// currentURI = uri; -// OREManager.getInstance().setCurrentKnowledgeSource( -// uri); -// new OntologyLoadingTask(getWizard().getStatusBar()).execute(); loadOntology(uri); } @@ -206,9 +202,9 @@ RecentManager.getInstance().addURI(currentURI); RecentManager.getInstance().serialize(); if(oreMan.consistentOntology()){ - statusBar.setProgressTitle("Classifying ontology"); + statusBar.setMessage("Classifying ontology..."); oreMan.getReasoner().classify(); - statusBar.setProgressTitle("Realising ontology"); + statusBar.setMessage("Realising ontology..."); oreMan.getReasoner().realise(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -2,7 +2,6 @@ import java.awt.BorderLayout; import java.awt.Component; -import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -31,7 +30,6 @@ import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.RepairManagerListener; import org.dllearner.tools.ore.TaskManager; -import org.dllearner.tools.ore.ui.StatusBar; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.UnsatisfiableExplanationPanel; import org.semanticweb.owl.model.OWLClass; @@ -71,9 +69,8 @@ } private void showExplanations(){ - ExplanationTask task = new ExplanationTask(getWizard().getStatusBar()); - TaskManager.getInstance().setCurrentTask(task); - task.execute(); + TaskManager.getInstance().setTaskStarted("Computing explanations..."); + new ExplanationTask().execute(); } @Override @@ -124,13 +121,14 @@ @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { panel.clearExplanationsPanel(); - new RootDerivedTask(getWizard().getStatusBar()).execute(); + new RootDerivedTask().execute(); panel.repaint(); } public void fillUnsatisfiableClassesList(){ - new RootDerivedTask(getWizard().getStatusBar()).execute(); + TaskManager.getInstance().setTaskStarted("Computing root and derived classes..."); + new RootDerivedTask().execute(); } @Override @@ -194,38 +192,21 @@ class ExplanationTask extends SwingWorker<Void, Void>{ - private StatusBar statusBar; - - - public ExplanationTask(StatusBar statusBar) { - this.statusBar = statusBar; - - } @Override - public Void doInBackground() { - statusBar.showProgress(true); - statusBar.setProgressTitle("Computing explanations..."); - getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + public Void doInBackground() { for(OWLClass unsat : panel.getUnsatTable().getSelectedClasses()){ expMan.getUnsatisfiableExplanations(unsat); - } - + } return null; } @Override public void done() { if(!isCancelled()){ - showExplanations(); - statusBar.setProgressTitle("Done"); + showExplanations(); } - - statusBar.showProgress(false); - getWizard().getDialog().setCursor(null); - - - + TaskManager.getInstance().setTaskFinished(); } private void showExplanations(){ @@ -234,12 +215,10 @@ @Override public void run() { - panel.clearExplanationsPanel(); for(OWLClass unsat : panel.getUnsatTable().getSelectedClasses()){ panel.addExplanations(expMan.getUnsatisfiableExplanations(unsat), unsat); - } - + } panel.validate(); } }); @@ -249,20 +228,10 @@ } class RootDerivedTask extends SwingWorker<Void, Void>{ - - private StatusBar statusBar; - - public RootDerivedTask(StatusBar statusBar) { - this.statusBar = statusBar; - - } @Override public Void doInBackground() { - statusBar.showProgress(true); - statusBar.setProgressTitle("Computing root and derived classes..."); - getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); expMan.getRootUnsatisfiableClasses(); expMan.getDerivedClasses(); return null; @@ -270,9 +239,7 @@ @Override public void done() { - statusBar.showProgress(false); - statusBar.setProgressTitle("Done"); - getWizard().getDialog().setCursor(null); + TaskManager.getInstance().setTaskFinished(); if(!isCancelled()){ fillUnsatClassesTable(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-09-23 12:23:52 UTC (rev 1859) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-09-24 08:51:02 UTC (rev 1860) @@ -85,6 +85,17 @@ mainSplitPane.setRightComponent(createDebuggingPanel()); add(mainSplitPane); + + +// String layoutDef = "(ROW unsat (COLUMN explanation (ROW repair impact)))"; +// MultiSplitLayout.Node modelRoot = MultiSplitLayout.parseModel(layoutDef); +// JXMultiSplitPane mainSplitPane = new JXMultiSplitPane(); +// mainSplitPane.setModel(modelRoot); +// mainSplitPane.add(createUnsatClassesPanel(), "unsat"); +// mainSplitPane.add(createExplanationPanel(), "explanation"); +// mainSplitPane.add(createRepairPanel(), "repair"); +// mainSplitPane.add(createImpactPanel(), "impact"); +// add(mainSplitPane); } private JComponent createUnsatClassesPanel(){ @@ -206,6 +217,20 @@ return impactRepairPanel; } + private JComponent createRepairPanel(){ + return new RepairPlanPanel(); + } + + private JComponent createImpactPanel(){ + ImpactTable impactTable = new ImpactTable(); + JScrollPane impScr = new JScrollPane(impactTable); + JPanel impactPanel = new JPanel(); + impactPanel.setLayout(new BorderLayout()); + impactPanel.add(new JLabel("Impact"), BorderLayout.NORTH); + impactPanel.add(impScr); + return impactPanel; + } + public void fillUnsatClassesTable(List<OWLClass> unsatClasses) { unsatClassesTable.addUnsatClasses(unsatClasses); unsatClassesScrollPane.validate(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-24 11:32:19
|
Revision: 1862 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1862&view=rev Author: lorenz_b Date: 2009-09-24 11:32:09 +0000 (Thu, 24 Sep 2009) Log Message: ----------- changed text font Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-24 10:46:15 UTC (rev 1861) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-24 11:32:09 UTC (rev 1862) @@ -21,14 +21,20 @@ package org.dllearner.tools.ore; import java.awt.Dimension; +import java.awt.Font; import java.io.File; import java.net.MalformedURLException; import java.net.URL; +import java.util.Collections; +import java.util.Comparator; import java.util.Locale; +import java.util.Vector; import javax.swing.SwingUtilities; +import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.FontUIResource; import org.apache.log4j.PropertyConfigurator; import org.dllearner.tools.ore.ui.wizard.Wizard; @@ -64,6 +70,25 @@ try { // UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + UIDefaults def = UIManager.getLookAndFeelDefaults(); + Vector<?> vec = new Vector<Object>(def.keySet()); + Collections.sort(vec, new Comparator<Object>() { + + public int compare(Object arg0, Object arg1) { + return arg0.toString().compareTo(arg1.toString()); + } + + }); + + for (Object obj : vec) { + if(obj.toString().endsWith(".font")){ + FontUIResource fur = (FontUIResource)UIManager.get(obj); + Font f = new Font("Verdana", Font.PLAIN, fur.getSize()); + UIManager.put(obj, new FontUIResource(f)); + } + } + + } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-24 10:46:15 UTC (rev 1861) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-24 11:32:09 UTC (rev 1862) @@ -26,7 +26,6 @@ import java.awt.Color; import java.awt.Component; import java.awt.Dialog; -import java.awt.Font; import java.awt.Frame; import java.awt.Insets; import java.awt.event.WindowAdapter; @@ -435,7 +434,7 @@ informationsField.setBackground(new Color(color.getRed(), color.getGreen(), color.getBlue())); informationsField.setOpaque(true); informationsField.setEditable(false); - informationsField.setFont(new Font("Serif", Font.PLAIN, 14)); + wizardDialog.getContentPane().add(buttonPanel, java.awt.BorderLayout.SOUTH); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-24 10:46:15 UTC (rev 1861) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-24 11:32:09 UTC (rev 1862) @@ -22,7 +22,6 @@ import java.awt.Color; -import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; @@ -78,7 +77,6 @@ welcomeTitle = new JLabel(); welcomeTitle.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(0, 0, 0))); - welcomeTitle.setFont(new java.awt.Font("MS Sans Serif", Font.BOLD, 14)); welcomeTitle.setText(titleText); add(welcomeTitle, c); @@ -88,7 +86,6 @@ instructionsField.setBackground(new Color(color.getRed(), color.getGreen(), color.getBlue())); instructionsField.setOpaque(true); instructionsField.setEditable(false); - instructionsField.setFont(new Font("Serif", Font.PLAIN, 14)); instructionsField.setText(introductionText); add(instructionsField, c); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-25 09:44:15
|
Revision: 1863 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1863&view=rev Author: lorenz_b Date: 2009-09-25 09:43:56 +0000 (Fri, 25 Sep 2009) Log Message: ----------- added threshold and learning type option to learning dialog Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/IntroductionPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -57,10 +57,13 @@ private NamedClass currentClass2Learn; private EvaluatedDescriptionClass learnedClassDescription; + + private String learningType; private double noisePercentage; - private int maxExecutionTimeInSeconds = 10; - private int maxNrOfResults = 10; + private int maxExecutionTimeInSeconds; + private int maxNrOfResults; + private double threshold; private List<OREManagerListener> listeners; @@ -105,9 +108,10 @@ public void setLearningProblem(){ lp = cm.learningProblem(ClassLearningProblem.class, reasoner); - + cm.applyConfigEntry(lp, "type", learningType); try { lp.getConfigurator().setClassToDescribe(getClass2LearnAsURL()); + lp.init(); } catch (ComponentInitException e) { // TODO Auto-generated catch block @@ -123,8 +127,7 @@ la.getConfigurator().setUseNegation(false); la.getConfigurator().setNoisePercentage(noisePercentage); la.getConfigurator().setMaxNrOfResults(maxNrOfResults); - - + } catch (LearningProblemUnsupportedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); @@ -240,6 +243,18 @@ public int getMaxNrOfResults(){ return maxNrOfResults; } + + public void setThreshold(double threshold){ + this.threshold = threshold; + } + + public double getThreshold(){ + return threshold; + } + + public void setLearningType(String learningType){ + this.learningType = learningType; + } /** * Sets the class that has to be learned. Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -0,0 +1,167 @@ +/** + * Copyright (C) 2007-2009, 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.tools.ore.ui; + +import java.awt.BorderLayout; +import java.awt.GridLayout; + +import javax.swing.ButtonGroup; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JSlider; +/** + * This Class is responsible for the Options of the DL-Learner. + * @author Christian Koetteritzsch + * + */ +public class LearningOptionsPanel extends JPanel { + + + private static final long serialVersionUID = 2190682281812478244L; + private JLabel minAccuracyLabel; + private JLabel maxExecutionTimeLabel; + private JLabel nrOfConceptsLabel; + private JLabel thresholdLabel; + + private JSlider minAccuracy; + private JSlider maxExecutionTime; + private JSlider nrOfConcepts; + private JSlider threshold; + + private JRadioButton equivalentClassButton; + private JRadioButton superClassButton; + private ButtonGroup learningType; + + private JPanel labelPanel; + private JPanel sliderPanel; + private double accuracy; + /** + * Constructor for the Option Panel. + */ + public LearningOptionsPanel() { + + setLayout(new BorderLayout()); + labelPanel = new JPanel(); + labelPanel.setLayout(new GridLayout(0, 1)); + sliderPanel = new JPanel(); + sliderPanel.setLayout(new GridLayout(0, 1)); + + minAccuracyLabel = new JLabel("Noise in %: "); + maxExecutionTimeLabel = new JLabel("Max. execution time in s: "); + nrOfConceptsLabel = new JLabel("Max. number of results: "); + thresholdLabel = new JLabel("Threshold in %:"); + + minAccuracy = new JSlider(0, 50, 5); + minAccuracy.setPaintTicks(true); + minAccuracy.setMajorTickSpacing(10); + minAccuracy.setMinorTickSpacing(1); + minAccuracy.setPaintLabels(true); + + + maxExecutionTime = new JSlider(0, 40, 8); + maxExecutionTime.setPaintTicks(true); + maxExecutionTime.setMajorTickSpacing(10); + maxExecutionTime.setMinorTickSpacing(1); + maxExecutionTime.setPaintLabels(true); + + + nrOfConcepts = new JSlider(2, 20, 10); + nrOfConcepts.setPaintTicks(true); + nrOfConcepts.setMajorTickSpacing(2); + nrOfConcepts.setMinorTickSpacing(1); + nrOfConcepts.setPaintLabels(true); + + threshold = new JSlider(0, 100, 80); + threshold.setPaintTicks(true); + threshold.setMajorTickSpacing(25); + threshold.setMinorTickSpacing(5); + threshold.setPaintLabels(true); + + labelPanel.add(minAccuracyLabel); + labelPanel.add(maxExecutionTimeLabel); + labelPanel.add(nrOfConceptsLabel); + labelPanel.add(thresholdLabel); + + + sliderPanel.add(minAccuracy); + sliderPanel.add(maxExecutionTime); + sliderPanel.add(nrOfConcepts); + sliderPanel.add(threshold); + + JPanel learnTypePanel = new JPanel(); + learnTypePanel.setLayout(new GridLayout(0, 1)); + equivalentClassButton = new JRadioButton("Learn equivalent class expressions", true); + equivalentClassButton.setActionCommand("equivalent"); + equivalentClassButton.setSelected(true); + superClassButton = new JRadioButton("Learn super class expressions"); + superClassButton.setActionCommand("super"); + + learningType = new ButtonGroup(); + learningType.add(equivalentClassButton); + learningType.add(superClassButton); + + learnTypePanel.add(equivalentClassButton); + learnTypePanel.add(superClassButton); + + add(BorderLayout.NORTH, learnTypePanel); + add(BorderLayout.WEST, labelPanel); + add(BorderLayout.CENTER, sliderPanel); + } + + /** + * This method returns the min accuracy chosen in the slider. + * @return double minAccuracy + */ + public double getMinAccuracy() { + double acc = minAccuracy.getValue(); + accuracy = (acc/100.0); + return accuracy; + } + + /** + * This method returns the max executiontime chosen in the slider. + * @return int maxExecutionTime + */ + public int getMaxExecutionTime() { + return maxExecutionTime.getValue(); + } + + /** + * This method returns the nr. of concepts chosen in the slider. + * @return int nrOfConcepts + */ + public int getNrOfConcepts() { + return nrOfConcepts.getValue(); + } + + /** + * This mehtod returns the algorithm threshold chosen in the slider. + * @return double threshold + */ + public double getThreshold(){ + return threshold.getValue()/100.0; + } + + public boolean isEquivalentClassesTypeSelected(){ + return equivalentClassButton.isSelected(); + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -137,7 +137,7 @@ */ public Wizard(Frame owner) { wizardModel = new WizardModel(); - wizardDialog = new JFrame(); + wizardDialog = new JFrame(); wizardDialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("Exited application"); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -140,7 +140,7 @@ ((ClassChoosePanelDescriptor) nextDescriptor).refill(); } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(ClassChoosePanelDescriptor.IDENTIFIER)) { // ore.makeOWAToCWA(); - ore.setLearningProblem(); +// ore.setLearningProblem(); LearningPanelDescriptor learnDescriptor = ((LearningPanelDescriptor) model .getPanelHashMap().get(nextPanelDescriptor)); learnDescriptor.setPanelDefaults(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -25,8 +25,12 @@ import java.util.TreeSet; import java.util.concurrent.ExecutionException; +import javax.swing.JSpinner; import javax.swing.SwingWorker; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import org.dllearner.core.owl.NamedClass; import org.dllearner.tools.ore.OREManager; @@ -42,7 +46,7 @@ * @author Lorenz Buehmann * */ -public class ClassChoosePanelDescriptor extends WizardPanelDescriptor implements javax.swing.event.ListSelectionListener{ +public class ClassChoosePanelDescriptor extends WizardPanelDescriptor implements ListSelectionListener, ChangeListener{ /** * Identification string for class choose panel. @@ -63,6 +67,7 @@ public ClassChoosePanelDescriptor() { owlClassPanel = new ClassChoosePanel(); owlClassPanel.addSelectionListener(this); + owlClassPanel.addChangeListener(this); setPanelDescriptorIdentifier(IDENTIFIER); setPanelComponent(owlClassPanel); @@ -96,6 +101,12 @@ } } + @Override + public void stateChanged(ChangeEvent e) { + JSpinner spinner = (JSpinner)e.getSource(); + fillClassesList(((Integer)spinner.getValue()).intValue()); + } + private void setNextButtonAccordingToConceptSelected() { if (owlClassPanel.getClassesTable().getSelectedRow() >= 0){ @@ -116,15 +127,26 @@ public void refill(){ TaskManager.getInstance().setTaskStarted("Retrieving atomic classes..."); - new ClassRetrievingTask().execute(); + new ClassRetrievingTask(1).execute(); } + public void fillClassesList(int minInstanceCount){ + TaskManager.getInstance().setTaskStarted("Retrieving atomic classes..."); + new ClassRetrievingTask(minInstanceCount).execute(); + } + /** * Inner class to get all atomic classes in a background thread. * @author Lorenz Buehmann * */ class ClassRetrievingTask extends SwingWorker<Set<NamedClass>, NamedClass> { + + private int minInstanceCount; + + public ClassRetrievingTask(int minInstanceCount){ + this.minInstanceCount = minInstanceCount; + } @Override public Set<NamedClass> doInBackground() { @@ -135,7 +157,7 @@ while(iter.hasNext()){ NamedClass nc = iter.next(); int instanceCount = OREManager.getInstance().getReasoner().getIndividuals(nc).size(); - if(instanceCount == 0){ + if(instanceCount < minInstanceCount){ iter.remove(); } } @@ -161,4 +183,6 @@ } + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/IntroductionPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/IntroductionPanelDescriptor.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/IntroductionPanelDescriptor.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -20,9 +20,11 @@ package org.dllearner.tools.ore.ui.wizard.descriptors; +import java.awt.Cursor; import java.net.MalformedURLException; import java.net.URL; +import javax.swing.JEditorPane; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; @@ -80,16 +82,21 @@ @Override public void hyperlinkUpdate(HyperlinkEvent event) { - - if(event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { - URL url; + if (event.getEventType() == HyperlinkEvent.EventType.ENTERED) { + ((JEditorPane) event.getSource()).setCursor(Cursor + .getPredefinedCursor(Cursor.HAND_CURSOR)); + } else if (event.getEventType() == HyperlinkEvent.EventType.EXITED) { + ((JEditorPane) event.getSource()).setCursor(Cursor + .getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } else if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { + URL url; try { url = new URL(event.getDescription()); - launcher.openURLinBrowser(url.toString()); + launcher.openURLinBrowser(url.toString()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); - } + } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -52,7 +52,7 @@ public class KnowledgeSourcePanelDescriptor extends WizardPanelDescriptor implements ActionListener{ public static final String IDENTIFIER = "KNOWLEDGESOURCE_CHOOSE_PANEL"; - public static final String INFORMATION = "Choose an OWL-ontology from filesystem or URI. Your can also extract a fragment " + + public static final String INFORMATION = "Choose an OWL-ontology from filesystem or URI. You can also extract a fragment " + "from a SPARQL endpoint. When finished, press <Next>."; private KnowledgeSourcePanel knowledgePanel; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -128,15 +128,24 @@ */ public void actionPerformed(ActionEvent event) { if(event.getActionCommand().equals("Start")){ - TaskManager.getInstance().setTaskStarted("Learning equivalent class expressions"); + String learningType = ""; + if(learnPanel.getOptionsPanel().isEquivalentClassesTypeSelected()){ + OREManager.getInstance().setLearningType("equivalence"); + learningType = "equivalent"; + } else { + learningType = "super"; + OREManager.getInstance().setLearningType("superClass"); + } + TaskManager.getInstance().setTaskStarted("Learning " + learningType + " class expressions..."); learnPanel.getStartButton().setEnabled(false); learnPanel.getStopButton().setEnabled(true); OREManager.getInstance().setNoisePercentage(learnPanel.getOptionsPanel().getMinAccuracy()); OREManager.getInstance().setMaxExecutionTimeInSeconds(learnPanel.getOptionsPanel().getMaxExecutionTime()); OREManager.getInstance().setMaxNrOfResults(learnPanel.getOptionsPanel().getNrOfConcepts()); - - OREManager.getInstance().setLearningAlgorithm(); + OREManager.getInstance().setThreshold(learnPanel.getOptionsPanel().getThreshold()); + learnPanel.getResultTable().clear(); + learningTask = new LearningTask(); learningTask.execute(); } else{ @@ -205,24 +214,29 @@ @SuppressWarnings("unchecked") @Override public List<? extends EvaluatedDescription> doInBackground() { - learnPanel.getResultTable().clear(); + OREManager.getInstance().setLearningProblem(); + OREManager.getInstance().setLearningAlgorithm(); la = OREManager.getInstance().getLa(); + + timer = new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { if(!isCancelled() && la.isRunning()){ - publish(la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), 0.0, true)); + publish(la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), + OREManager.getInstance().getThreshold(), true)); } } }, 1000, 2000); OREManager.getInstance().start(); - List<? extends EvaluatedDescription> result = la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), 0.0, true); + List<? extends EvaluatedDescription> result = la.getCurrentlyBestEvaluatedDescriptions + (OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true); return result; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -24,8 +24,12 @@ import java.awt.GridBagConstraints; import java.awt.GridBagLayout; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.JSpinner; +import javax.swing.SpinnerNumberModel; +import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionListener; import org.dllearner.tools.ore.ui.ClassesTable; @@ -40,6 +44,7 @@ private static final long serialVersionUID = 3026319637264844550L; private ClassesTable classesTable; + private JSpinner minInstanceCountSpinner; /** * Constructor. @@ -51,7 +56,19 @@ private void createUI(){ setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); + c.gridwidth = GridBagConstraints.REMAINDER; + JPanel minInstancesCountPanel = new JPanel(); + minInstancesCountPanel.add(new JLabel("Showing classes with at least ")); + minInstanceCountSpinner = new JSpinner(); + minInstanceCountSpinner.setEnabled(true); + javax.swing.SpinnerModel spinnerModel = new SpinnerNumberModel(1, 1, 500, 1); + minInstanceCountSpinner.setModel(spinnerModel); + minInstancesCountPanel.add(minInstanceCountSpinner); + minInstancesCountPanel.add(new JLabel(" instances")); + add(minInstancesCountPanel, c); + + c.fill = GridBagConstraints.NONE; c.weightx = 1.0; classesTable = new ClassesTable(); @@ -67,6 +84,10 @@ public void addSelectionListener(ListSelectionListener l){ classesTable.getSelectionModel().addListSelectionListener(l); } + + public void addChangeListener(ChangeListener cL){ + minInstanceCountSpinner.addChangeListener(cL); + } /** * Returns the table where atomic owl classes are the table elements. Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -46,7 +46,7 @@ private JLabel welcomeTitle; - private final String titleText = "<html>Welcome to the DL-Learner ORE (Ontology Repair and Enrichment) Tool!<br>(Version 0.1)</html>"; + private final String titleText = "<html><b>Welcome to the DL-Learner ORE (Ontology Repair and Enrichment) Tool!<br>(Version 0.1)</b></html>"; private final String introductionText = "<html><p>ORE is a tool for debugging and enriching OWL ontologies. It has the following features: </p>" + "<UL>" + @@ -56,8 +56,8 @@ "<LI>enrichment of an ontology by learning definitions and super class axioms" + "<LI>guiding the user through potential consequences of adding those axioms" + "</UL>" + - "<p>In a later version, the tool will also support the detection of various potential modelling problems.</p>" + - "<p>ORE uses a wizard-style concept. On the left, you can see different steps in the wizard, where the current step is in bold. " + + "<p >In a later version, the tool will also support the detection of various potential modelling problems.</p>" + + "<p style=\"max-width:400px;\">ORE uses a wizard-style concept. On the left, you can see different steps in the wizard, where the current step is in bold. " + "Each step contains an explanation of it in the main window. The wizard may omit steps if they are not necessary, e.g. " + "if you load a consistent ontology, then the \"Debugging\" dialogue is skipped.</p>" + "<p>Please read the <a href=\"http://dl-learner.org/wiki/ORE\">the ORE wiki page</a> and view the <a href=\"...\">screencast</a> to get started.</p></html>"; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -37,8 +37,8 @@ import org.dllearner.core.owl.NamedClass; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.ui.GraphicalCoveragePanel; +import org.dllearner.tools.ore.ui.LearningOptionsPanel; import org.dllearner.tools.ore.ui.ResultTable; -import org.dllearner.tools.protege.OptionPanel; /** @@ -60,7 +60,7 @@ private JPanel buttonSliderPanel; private GraphicalCoveragePanel graphicPanel; - private OptionPanel optionsPanel; + private LearningOptionsPanel optionsPanel; private GridBagConstraints c; @@ -126,7 +126,7 @@ stopButton.setText("Stop"); stopButton.setEnabled(false); - optionsPanel = new OptionPanel(); + optionsPanel = new LearningOptionsPanel(); optionsPanel.setBorder(new TitledBorder("Options")); buttonSliderPanel.add(optionsPanel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, @@ -178,7 +178,7 @@ this.graphicPanel.setNewClassDescription(desc); } - public OptionPanel getOptionsPanel(){ + public LearningOptionsPanel getOptionsPanel(){ return optionsPanel; } @@ -192,9 +192,4 @@ frame.setVisible(true); } } - - - - - Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java 2009-09-24 11:32:09 UTC (rev 1862) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java 2009-09-25 09:43:56 UTC (rev 1863) @@ -27,6 +27,8 @@ import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.SwingConstants; /** * Navigation panel where it's shown the actual wizard step and former and following steps. @@ -37,7 +39,7 @@ private static final long serialVersionUID = -1205252523136710091L; private JLabel[] jLabel; - +// private ImageIcon currentStepIcon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/untoggled.gif"); /** * Constructor instantiating JLabels with wizard step names. * @param i step number printed bold @@ -45,9 +47,9 @@ public LeftPanel(int i){ jLabel = new JLabel[7]; - setBackground(new java.awt.Color(255, 255, 255)); +// setBackground(new java.awt.Color(255, 255, 255)); JPanel panel2 = new JPanel(); - panel2.setBackground(new java.awt.Color(255, 255, 255)); +// panel2.setBackground(new java.awt.Color(255, 255, 255)); panel2.setLayout(new GridLayout(7, 1, 0, 10)); jLabel[0] = new JLabel("1. Introduction"); jLabel[1] = new JLabel("2. Knowledge Source"); @@ -65,6 +67,11 @@ setLayout(new BorderLayout()); setPreferredSize(new Dimension(165, 500)); add(panel2, BorderLayout.NORTH); + JPanel holderPanel = new JPanel(); + holderPanel.setLayout(new BorderLayout()); + holderPanel.add(panel2, BorderLayout.NORTH); + add(holderPanel); + add(new JSeparator(SwingConstants.VERTICAL), BorderLayout.EAST); } @@ -77,7 +84,7 @@ for(int j = 0; j < jLabel.length; j++){ jLabel[j].setFont(jLabel[j].getFont().deriveFont(Font.PLAIN)); } - +// jLabel[i].setIcon(currentStepIcon); jLabel[i].setFont(jLabel[i].getFont().deriveFont(Font.BOLD)); validate(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-28 07:30:30
|
Revision: 1866 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1866&view=rev Author: lorenz_b Date: 2009-09-28 07:30:22 +0000 (Mon, 28 Sep 2009) Log Message: ----------- fixed bug started integrating help buttons on panels Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveToClassFromMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/DeleteCross.gif trunk/src/dl-learner/org/dllearner/tools/ore/Help16.gif trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-16x16.png trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-24x24.png trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java Added: trunk/src/dl-learner/org/dllearner/tools/ore/DeleteCross.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/DeleteCross.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/Help16.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/Help16.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -55,6 +55,11 @@ import org.semanticweb.owl.model.OWLQuantifiedRestriction; import org.semanticweb.owl.model.RemoveAxiom; +import uk.ac.manchester.cs.owl.modularity.ModuleType; + +import com.clarkparsia.modularity.ModularityUtils; +import com.clarkparsia.owlapi.OntologyUtils; + public class RootFinder implements OWLDescriptionVisitor, OREManagerListener, OWLOntologyChangeListener, RepairManagerListener{ private OWLOntologyManager manager; @@ -187,7 +192,7 @@ } private void pruneRoots() { - +System.out.println("Pruning root classes"); try { Set<OWLClass> roots = new HashSet<OWLClass>(rootClasses); List<OWLOntologyChange> appliedChanges = new ArrayList<OWLOntologyChange>(); @@ -214,8 +219,11 @@ appliedChanges.add(add); } OWLReasoner checker = reasonerFactory.createReasoner(manager); - checker.loadOntologies(Collections.singleton(ontology)); +// checker.loadOntologies(Collections.singleton(ontology)); for (OWLClass root : new ArrayList<OWLClass>(roots)) { + checker.clearOntologies(); + checker.loadOntologies(Collections.singleton(OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule + (ontology, root.getSignature(), ModuleType.TOP_OF_BOT)))); if (!potentialRoots.contains(root) && checker.isSatisfiable(root)) { rootClasses.remove(root); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -218,7 +218,7 @@ return laconic; } - private Set<Explanation> retrieveAxioms(Set<Explanation> explanations) { + public Set<Explanation> retrieveAxioms(Set<Explanation> explanations) { Map<OWLAxiom, Set<OWLAxiom>> sourceAxioms2OPlus = new HashMap<OWLAxiom, Set<OWLAxiom>>(); @@ -335,20 +335,9 @@ public Set<OWLAxiom> getRemainingAxioms(OWLAxiom source, OWLAxiom part){ Set<OWLAxiom> parts = computeOPlus(Collections.singleton(source)); -// for(OWLAxiom ax : parts){ -// System.out.println("Part: " + ax); -// for(OWLAxiom a : oPlus.getAxiomsMap().get(ax)){ -// System.out.println("has source: " + a); -// } -// -// } - - for(OWLAxiom par : parts){ -// System.out.println("has Part: " + par); - } + for(OWLAxiom ax : oPlus.getAxiomsMap().get(part)){ parts.remove(ax); -// System.out.println("Removing: " + ax); } Set<OWLAxiom> remove = new HashSet<OWLAxiom>(); for(OWLAxiom ax : parts){ @@ -366,78 +355,14 @@ } - private Set<OWLAxiom> rebuildAxioms(Set<OWLAxiom> axioms){ - Map<OWLAxiom, Set<OWLAxiom>> sourceAxioms2OPlus = new HashMap<OWLAxiom, Set<OWLAxiom>>(); - - for (OWLAxiom ax : axioms) { - if (ontology.containsAxiom(ax)) { - sourceAxioms2OPlus.put(ax, computeOPlus(Collections - .singleton(ax))); - } - } - - Map<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>> lhs2SubClassAxiom = new HashMap<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>>(); - Set<OWLAxiom> reconstituedAxioms = new HashSet<OWLAxiom>(); - for (OWLAxiom laconicAx : axioms) {System.out.println("\n" + laconicAx); - - - if (laconicAx instanceof OWLSubClassAxiom) { - OWLSubClassAxiom subAx = (OWLSubClassAxiom) laconicAx; - if (subAx.getSubClass().isAnonymous()) { - reconstituedAxioms.add(subAx); - } else { - Map<OWLAxiom, Set<OWLSubClassAxiom>> source2AxiomMap = lhs2SubClassAxiom.get(subAx.getSubClass().asOWLClass()); - if (source2AxiomMap == null) { - source2AxiomMap = new HashMap<OWLAxiom, Set<OWLSubClassAxiom>>(); - lhs2SubClassAxiom.put(subAx.getSubClass().asOWLClass(), source2AxiomMap); - } - - for (OWLAxiom sourceAxiom : sourceAxioms2OPlus.keySet()) { - if ((sourceAxioms2OPlus.get(sourceAxiom)).contains(subAx)) { - Set<OWLSubClassAxiom> subClassAxioms = source2AxiomMap.get(sourceAxiom); - if (subClassAxioms == null) { - subClassAxioms = new HashSet<OWLSubClassAxiom>(); - source2AxiomMap.put(sourceAxiom, subClassAxioms); - } - subClassAxioms.add(subAx); - } - } - } - } else { - reconstituedAxioms.add(laconicAx); - } - } - Set<OWLAxiom> consumedAxioms = new HashSet<OWLAxiom>(); - for (OWLClass lhs : lhs2SubClassAxiom.keySet()) { - Map<OWLAxiom, Set<OWLSubClassAxiom>> source2SubClassAxiom = lhs2SubClassAxiom.get(lhs); - for (OWLAxiom source : source2SubClassAxiom.keySet()) { - Set<OWLDescription> rightHandSides = new HashSet<OWLDescription>(); - for (OWLSubClassAxiom sub : source2SubClassAxiom.get(source)) { - if (!consumedAxioms.contains(sub)) { - rightHandSides.add(sub.getSuperClass()); - consumedAxioms.add(sub); - } - } - - if (rightHandSides.size() == 1) - reconstituedAxioms.add(manager.getOWLDataFactory().getOWLSubClassAxiom((OWLDescription) lhs,((OWLDescription) rightHandSides.iterator().next()))); - else if (rightHandSides.size() > 1) { - org.semanticweb.owl.model.OWLObjectIntersectionOf conjunction = manager.getOWLDataFactory().getOWLObjectIntersectionOf(rightHandSides); - reconstituedAxioms.add(manager.getOWLDataFactory().getOWLSubClassAxiom((OWLDescription) lhs,conjunction)); - } - } - } - return reconstituedAxioms; - } - public static void main(String[] args) throws OWLOntologyCreationException, ExplanationException, OWLOntologyChangeException{ - String baseURI = "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl"; +// String baseURI = "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl"; OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI.create("file:examples/ore/koala.owl")); OWLDataFactory factory = manager.getOWLDataFactory(); LaconicExplanationGenerator expGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(ontology)); - OWLClass koalaWithPhD = factory.getOWLClass(URI.create(baseURI + "#KoalaWithPhD")); - OWLClass koala = factory.getOWLClass(URI.create(baseURI + "#Koala")); +// OWLClass koalaWithPhD = factory.getOWLClass(URI.create(baseURI + "#KoalaWithPhD")); +// OWLClass koala = factory.getOWLClass(URI.create(baseURI + "#Koala")); // System.out.println(expGen.getExplanations(factory.getOWLSubClassAxiom(koalaWithPhD, factory.getOWLNothing()), 1)); // OWLAxiom laconicAx = factory.getOWLSubClassAxiom(koalaWithPhD, koala); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -11,12 +11,15 @@ import java.util.List; import javax.swing.AbstractCellEditor; +import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; +import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; @@ -70,6 +73,16 @@ getColumn(3).setMaxWidth(60); getColumn(4).setMaxWidth(30); getColumn(5).setMaxWidth(30); + getColumn(4).setHeaderRenderer(new TableCellRenderer() { + + @Override + public Component getTableCellRendererComponent(JTable arg0, Object value, + boolean arg2, boolean arg3, int arg4, int arg5) { + JButton b = new JButton((Icon)value); + return b; + } + }); + getColumn(4).setHeaderValue(new ImageIcon("src/dl-learner/org/dllearner/tools/ore/DeleteCross.gif")); getSelectionModel().addListSelectionListener( new ListSelectionListener() { @@ -217,7 +230,25 @@ fireEditingStopped(); } } + + class IconRenderer extends DefaultTableCellRenderer { + /** + * + */ + private static final long serialVersionUID = -1729370486474583609L; + public Component getTableCellRendererComponent(JTable table, + Object obj, boolean isSelected, boolean hasFocus, int row, + int column) { + + setIcon((Icon) obj); + + setBorder(UIManager.getBorder("TableHeader.cellBorder")); + setHorizontalAlignment(JLabel.CENTER); + return this; + } + } + @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { repaint(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -10,6 +10,8 @@ import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; @@ -143,24 +145,26 @@ JPanel endPointHolderPanel = new JPanel(); endPointHolderPanel.setLayout(new GridLayout(0, 1)); - endPointHolderPanel.setBorder(new TitledBorder("SPARQL endpoint")); +// endPointHolderPanel.setBorder(new TitledBorder("SPARQL endpoint")); comboBox = new JComboBox(); comboBox.setEditable(true); comboBox.setActionCommand("endpoints"); comboBox.addActionListener(this); - ((JTextComponent)comboBox.getEditor().getEditorComponent()).getDocument().addDocumentListener(this); AutoCompleteDecorator.decorate(this.comboBox); + endPointHolderPanel.add(new JLabel("URL")); endPointHolderPanel.add(comboBox); defaultGraphField = new JTextField(); endPointHolderPanel.add(new JLabel("Default graph URI (optional)")); endPointHolderPanel.add(defaultGraphField); - panel.add(endPointHolderPanel, c); + HelpablePanel endPointHelpPanel = new HelpablePanel(endPointHolderPanel); + endPointHelpPanel.setBorder(new TitledBorder("SPARQL endpoint")); + panel.add(endPointHelpPanel, c); JPanel classHolderPanel = new JPanel(); classHolderPanel.setLayout(new GridLayout(0, 1)); - classHolderPanel.setBorder(new TitledBorder("Class to investigate")); +// classHolderPanel.setBorder(new TitledBorder("Class to investigate")); asLabelButton = new JRadioButton("label"); asURLButton = new JRadioButton("URI"); asURLButton.setSelected(true); @@ -171,12 +175,14 @@ buttonPanel.add(new JLabel("input type:")); buttonPanel.add(asURLButton); buttonPanel.add(asLabelButton); - + classHolderPanel.add(buttonPanel); classField = new JTextField(); classField.getDocument().addDocumentListener(this); classHolderPanel.add(classField); - panel.add(classHolderPanel, c); + HelpablePanel classHelpPanel = new HelpablePanel(classHolderPanel); + classHelpPanel.setBorder(new TitledBorder("Class to investigate")); + panel.add(classHelpPanel, c); @@ -204,6 +210,18 @@ optionsButton.setHorizontalAlignment(JButton.LEADING); // optional optionsButton.setBorderPainted(false); optionsButton.setContentAreaFilled(false); + optionsButton.addMouseListener(new MouseAdapter() { + public void mouseEntered(MouseEvent e) { + optionsButton.setBorderPainted(true); + optionsButton.setContentAreaFilled(true); + }; + @Override + public void mouseExited(MouseEvent e) { + optionsButton.setBorderPainted(false); + optionsButton.setContentAreaFilled(false); + } + + }); c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.WEST; panel.add(optionsButton, c); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -31,8 +31,6 @@ import java.util.Set; import java.util.Vector; -import javax.swing.JPanel; - import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.owl.Individual; import org.dllearner.learningproblems.EvaluatedDescriptionClass; @@ -46,7 +44,7 @@ * @author Christian Koetteritzsch * */ -public class GraphicalCoveragePanel extends JPanel implements MouseMotionListener{ +public class GraphicalCoveragePanel extends HelpablePanel implements MouseMotionListener{ private static final long serialVersionUID = 855436961912515267L; private static final int HEIGHT = 200; Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-16x16.png =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-16x16.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-24x24.png =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-24x24.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -0,0 +1,113 @@ +package org.dllearner.tools.ore.ui; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.border.TitledBorder; +import javax.swing.text.JTextComponent; + +import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; + + +public class HelpablePanel extends JPanel { + + /** + * + */ + private static final long serialVersionUID = 2511480671795808029L; + private JButton helpButton; + + private String helpText = "TODO"; + + + public HelpablePanel(){ + setLayout(new BorderLayout()); + helpButton = new JButton(new ImageIcon(this.getClass().getResource("Help-16x16.png"))); + helpButton.setBorderPainted(false); + helpButton.setContentAreaFilled(false); +// helpButton.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); + helpButton.setPreferredSize(new Dimension(16, 16)); + helpButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + helpButton.setBorderPainted(true); + helpButton.setContentAreaFilled(true); + } + + @Override + public void mouseExited(MouseEvent e) { + helpButton.setBorderPainted(false); + helpButton.setContentAreaFilled(false); + } + + }); + helpButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + JOptionPane.showMessageDialog(null, + helpText, + "", + JOptionPane.PLAIN_MESSAGE); + + + + } + }); + JPanel holderPanel = new JPanel(); + holderPanel.setLayout(new BorderLayout()); + holderPanel.add(helpButton, BorderLayout.NORTH); + add(holderPanel, BorderLayout.EAST); + } + + public HelpablePanel(JPanel content){ + this(); + add(content, BorderLayout.CENTER); + } + + public void setHelpText(String helpText){ + this.helpText = helpText; + } + + public static void main(String[] args){ + JFrame frame = new JFrame(); + + JPanel endPointHolderPanel = new JPanel(); + endPointHolderPanel.setLayout(new GridLayout(0, 1)); +// endPointHolderPanel.setBorder(new TitledBorder("SPARQL endpoint")); + JComboBox comboBox = new JComboBox(); + comboBox.setEditable(true); + comboBox.setActionCommand("endpoints"); + + + endPointHolderPanel.add(new JLabel("URL")); + endPointHolderPanel.add(comboBox); + JTextField defaultGraphField = new JTextField(); + endPointHolderPanel.add(new JLabel("Default graph URI (optional)")); + endPointHolderPanel.add(defaultGraphField); + HelpablePanel endPointHelpPanel = new HelpablePanel(endPointHolderPanel); + endPointHelpPanel.setBorder(new TitledBorder("SPARQL endpoint")); + + + + + frame.add(endPointHelpPanel); + frame.setSize(600, 600); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setVisible(true); + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -32,7 +32,7 @@ * @author Christian Koetteritzsch * */ -public class LearningOptionsPanel extends JPanel { +public class LearningOptionsPanel extends HelpablePanel { private static final long serialVersionUID = 2190682281812478244L; @@ -57,8 +57,9 @@ * Constructor for the Option Panel. */ public LearningOptionsPanel() { - - setLayout(new BorderLayout()); + super(); + JPanel holderPanel = new JPanel(); + holderPanel.setLayout(new BorderLayout()); labelPanel = new JPanel(); labelPanel.setLayout(new GridLayout(0, 1)); sliderPanel = new JPanel(); @@ -121,9 +122,10 @@ learnTypePanel.add(equivalentClassButton); learnTypePanel.add(superClassButton); - add(BorderLayout.NORTH, learnTypePanel); - add(BorderLayout.WEST, labelPanel); - add(BorderLayout.CENTER, sliderPanel); + holderPanel.add(BorderLayout.NORTH, learnTypePanel); + holderPanel.add(BorderLayout.WEST, labelPanel); + holderPanel.add(BorderLayout.CENTER, sliderPanel); + add(holderPanel, BorderLayout.CENTER); } /** Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -90,10 +90,12 @@ while(st.hasMoreTokens()){ token = st.nextToken(); boolean unsatClass = false; - for(OWLClass cl : ExplanationManager.getInstance(OREManager.getInstance()).getUnsatisfiableClasses()){ - if(cl.toString().equals(token)){ - unsatClass = true; - break; + if(OREManager.getInstance().consistentOntology()){ + for(OWLClass cl : ExplanationManager.getInstance(OREManager.getInstance()).getUnsatisfiableClasses()){ + if(cl.toString().equals(token)){ + unsatClass = true; + break; + } } } String color = "black"; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -14,22 +14,23 @@ import org.semanticweb.owl.model.OWLIndividual; import org.semanticweb.owl.model.OWLObject; +import uk.ac.manchester.cs.owl.mansyntaxrenderer.ManchesterOWLSyntaxObjectRenderer; + import com.clarkparsia.explanation.io.manchester.Keyword; -import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxObjectRenderer; import com.clarkparsia.explanation.io.manchester.TextBlockWriter; public class ManchesterSyntaxTableCellRenderer extends DefaultTableCellRenderer { private StringWriter buffer; private TextBlockWriter writer; - private ManchesterSyntaxObjectRenderer renderer; + private ManchesterOWLSyntaxObjectRenderer renderer; public ManchesterSyntaxTableCellRenderer(){ buffer = new StringWriter(); writer = new TextBlockWriter(buffer); - renderer = new ManchesterSyntaxObjectRenderer(writer); - renderer.setWrapLines( false ); - renderer.setSmartIndent( true ); + renderer = new ManchesterOWLSyntaxObjectRenderer(writer); +// renderer.setWrapLines( false ); +// renderer.setSmartIndent( true ); } @Override Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -41,8 +41,7 @@ private StyledDocument doc; Style style; - public MultiLineTableCellRenderer() - { + public MultiLineTableCellRenderer() { super(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -15,6 +15,8 @@ * */ private static final long serialVersionUID = -497294373160119210L; + + private EvaluatedDescriptionClass old = null; public ResultTable(){ setBackground(Color.WHITE); @@ -42,12 +44,25 @@ } + + public void clear(){ ((ResultTableModel)getModel()).clear(); } public void addResults(List<EvaluatedDescriptionClass> resultList){ + + if(getSelectedRow() >= 0){ + old = getSelectedValue(); + } ((ResultTableModel)getModel()).addResults(resultList); + if(old != null){ + int newRowIndex = ((ResultTableModel)getModel()).getSelectionIndex(old); + if(newRowIndex >= 0){ + getSelectionModel().setSelectionInterval(newRowIndex, newRowIndex); + } + + } } public EvaluatedDescriptionClass getSelectedValue(){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -74,11 +74,17 @@ public void addResults(List<EvaluatedDescriptionClass> resultList){ this.resultList.clear(); this.resultList.addAll(resultList); - fireTableDataChanged(); + + + fireTableRowsUpdated(0, this.resultList.size()); } public EvaluatedDescriptionClass getSelectedValue(int rowIndex){ return resultList.get(rowIndex); } + + public int getSelectionIndex(EvaluatedDescriptionClass e){ + return resultList.indexOf(e); + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -10,6 +10,8 @@ import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.awt.geom.Ellipse2D; import java.util.Set; @@ -140,7 +142,6 @@ @Override public void foundExplanation(Set<OWLAxiom> explanation) { - System.out.println(explanation); } @@ -333,15 +334,23 @@ setHorizontalAlignment(JButton.LEADING); // optional setBorderPainted(false); setContentAreaFilled(false); + + addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent arg0) { + setBorderPainted(true); + setContentAreaFilled(true); + } + + @Override + public void mouseExited(MouseEvent e) { + setBorderPainted(false); + setContentAreaFilled(false); + } + }); } - @Override - protected void paintComponent(Graphics g) { - if(getModel().isArmed()){ - g.setColor(Color.YELLOW); - } - super.paintComponent(g); - } + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -8,7 +8,6 @@ import org.dllearner.tools.ore.ExplanationManager; import org.dllearner.tools.ore.OREManager; import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.decorator.HighlighterFactory; import org.semanticweb.owl.model.OWLClass; public class UnsatisfiableClassesTable extends JXTable { @@ -26,7 +25,7 @@ setTableHeader(null); setGridColor(Color.LIGHT_GRAY); getColumn(0).setMaxWidth(20); - setRowHeight(getRowHeight() + 5); + setRowHeight(getRowHeight() + 2); getColumn(0).setCellRenderer(new UnsatClassesTableCellRenderer(expMan)); // setAutoResizeMode(JTable.AUTO_RESIZE_OFF); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveToClassFromMenuItem.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveToClassFromMenuItem.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveToClassFromMenuItem.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -7,6 +7,10 @@ public class MoveToClassFromMenuItem extends JMenuItem { + /** + * + */ + private static final long serialVersionUID = -3577226441483461020L; private Description source; private Description destination; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -290,7 +290,7 @@ private int showInconsistentOntologyWarning(){ String infoString = "<html>Can not do reasoning with inconsistent ontologies, " + - "since everything is equivalent to OWL:nothing" + + "since everything is equivalent to OWL:Nothing" + "<UL>" + "<LI>Press 'Yes' and try to repair the ontology" + "<LI>Press 'No' and choose another ontology or exit" + Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-25 11:13:32 UTC (rev 1865) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-28 07:30:22 UTC (rev 1866) @@ -149,60 +149,8 @@ } } classChoosePanel.getClassesTable().addClasses(classes); -// classChoosePanel.getClassesTable().clear(); -// TaskManager.getInstance().setTaskStarted("Retrieving atomic classes..."); -// new ClassRetrievingTask(minInstanceCount).execute(); } - -// /** -// * Inner class to get all atomic classes in a background thread. -// * @author Lorenz Buehmann -// * -// */ -// class ClassRetrievingTask extends SwingWorker<Set<NamedClass>, NamedClass> { -// -// private int minInstanceCount; -// -// public ClassRetrievingTask(int minInstanceCount){ -// this.minInstanceCount = minInstanceCount; -// } -// -// @Override -// public Set<NamedClass> doInBackground() { -// OREManager.getInstance().makeOWAToCWA(); -// Set<NamedClass> classes = new TreeSet<NamedClass>(OREManager.getInstance().getReasoner().getNamedClasses()); -// classes.remove(new NamedClass("http://www.w3.org/2002/07/owl#Thing")); -// Iterator<NamedClass> iter = classes.iterator(); -// while(iter.hasNext()){ -// NamedClass nc = iter.next(); -// int instanceCount = OREManager.getInstance().getReasoner().getIndividuals(nc).size(); -// if(instanceCount < minInstanceCount){ -// iter.remove(); -// } -// } -// -// return classes; -// } -// -// @Override -// public void done() { -// Set<NamedClass> classes = null; -// try { -// classes = get(); -// } catch (InterruptedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } catch (ExecutionException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// -// classChoosePanel.getClassesTable().addClasses(classes); -// TaskManager.getInstance().setTaskFinished(); -// } -// -// } - + /** * Inner class to get all atomic classes in a background thread. * @author Lorenz Buehmann @@ -213,6 +161,7 @@ @Override public Void doInBackground() { + instanceCountToClasses.clear(); OREManager.getInstance().makeOWAToCWA(); Set<NamedClass> classes = new TreeSet<NamedClass>(OREManager.getInstance().getReasoner().getNamedClasses()); classes.remove(new NamedClass("http://www.w3.org/2002/07/owl#Thing")); @@ -237,10 +186,10 @@ @Override public void run() { - fillClassesList(1); + fillClassesList(1); + TaskManager.getInstance().setTaskFinished(); } - }); - TaskManager.getInstance().setTaskFinished(); + }); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-29 15:59:52
|
Revision: 1869 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1869&view=rev Author: lorenz_b Date: 2009-09-29 15:59:38 +0000 (Tue, 29 Sep 2009) Log Message: ----------- continued auto learning mode Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ManualLearnPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTableModel.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-24x24.png Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -236,6 +236,10 @@ public void setMaxExecutionTimeInSeconds(int maxExecutionTimeInSeconds) { this.maxExecutionTimeInSeconds = maxExecutionTimeInSeconds; } + + public int getMaxExecutionTimeInSeconds(){ + return maxExecutionTimeInSeconds; + } public void setMaxNrOfResults(int maxNrOfResults) { this.maxNrOfResults = maxNrOfResults; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -46,6 +46,7 @@ dialog.setCursor(null); statusBar.setMessage("Done"); statusBar.showProgress(false); + statusBar.setProgress(0); } Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTable.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -0,0 +1,66 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Color; +import java.util.List; + +import javax.swing.ListSelectionModel; + +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.HighlighterFactory; + +public class EquivalentClassExpressionsTable extends JXTable { + + /** + * + */ + private static final long serialVersionUID = 486680925931781915L; + + private EvaluatedDescriptionClass old = null; + + public EquivalentClassExpressionsTable(){ + setBackground(Color.WHITE); + setHighlighters(HighlighterFactory.createAlternateStriping()); +// setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + setModel(new EquivalentClassExpressionsTableModel()); + setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); + setColumnSizes(); + getColumn(0).setResizable(false); + getColumn(1).setResizable(false); + setGridColor(Color.LIGHT_GRAY); + } + + private void setColumnSizes(){ + getColumn(0).setMaxWidth(100); + getColumn(1).setPreferredWidth(430); + getColumn(2).setMaxWidth(30); + + } + + + + public void clear(){ + ((EquivalentClassExpressionsTableModel)getModel()).clear(); + } + + public void addResults(List<EvaluatedDescriptionClass> resultList){ + + if(getSelectedRow() >= 0){ + old = getSelectedValue(); + } + ((EquivalentClassExpressionsTableModel)getModel()).addResults(resultList); + if(old != null){ + int newRowIndex = ((EquivalentClassExpressionsTableModel)getModel()).getSelectionIndex(old); + if(newRowIndex >= 0){ + getSelectionModel().setSelectionInterval(newRowIndex, newRowIndex); + } + + } + } + + public EvaluatedDescriptionClass getSelectedValue(){ + return ((EquivalentClassExpressionsTableModel)getModel()).getSelectedValue(getSelectedRow()); + } + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/EquivalentClassExpressionsTableModel.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -0,0 +1,114 @@ +package org.dllearner.tools.ore.ui; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.table.AbstractTableModel; + +import org.dllearner.core.owl.Description; +import org.dllearner.learningproblems.EvaluatedDescriptionClass; + +public class EquivalentClassExpressionsTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 8582947007601430481L; + + private List<EvaluatedDescriptionClass> resultList; + private DecimalFormat df; + private List<Boolean> selectionList; + + public EquivalentClassExpressionsTableModel(){ + super(); + resultList = new ArrayList<EvaluatedDescriptionClass>(); + selectionList = new ArrayList<Boolean>(); + df = new DecimalFormat("00%"); + } + + public EquivalentClassExpressionsTableModel(List<EvaluatedDescriptionClass> resultList){ + this.resultList = resultList; + } + + @Override + public int getColumnCount() { + return 3; + } + + @Override + public int getRowCount() { + return resultList.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if(columnIndex == 0){ + return df.format(resultList.get(rowIndex).getAccuracy()); + } else if(columnIndex == 1){ + return resultList.get(rowIndex).getDescription(); + } else { + return selectionList.get(rowIndex); + } + } + + @Override + public void setValueAt(Object value, int rowIndex, int columnIndex) { + + selectionList.set(rowIndex, (Boolean)value); + + super.fireTableCellUpdated(rowIndex, columnIndex); + + } + + @Override + public Class<? extends Object> getColumnClass(int columnIndex){ + switch(columnIndex){ + case 0: return String.class; + case 1: return Description.class; + case 2: return Boolean.class; + } + return null; + } + + @Override + public String getColumnName(int column){ + switch(column){ + case 0: return "Accuracy"; + case 1: return "Class expression"; + } + return ""; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + if(columnIndex == 2){ + return true; + } + return false; + } + + public void clear(){ + resultList.clear(); + fireTableDataChanged(); + } + + public void addResults(List<EvaluatedDescriptionClass> resultList){ + this.resultList.clear(); + this.resultList.addAll(resultList); + for(int i = 0; i < resultList.size(); i++){ + selectionList.add(i, Boolean.FALSE); + } + + fireTableRowsUpdated(0, this.resultList.size()); + } + + public EvaluatedDescriptionClass getSelectedValue(int rowIndex){ + return resultList.get(rowIndex); + } + + public int getSelectionIndex(EvaluatedDescriptionClass e){ + return resultList.indexOf(e); + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -141,8 +141,10 @@ AlphaComposite ac = AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.5f); g2D.setColor(Color.BLACK); + if(OREManager.getInstance().getCurrentClass2Learn() != null){ g2D.drawString(ManchesterSyntaxRenderer.renderSimple(OREManager.getInstance().getCurrentClass2Learn()) , 320, 10); + } // g2D.setColor(Color.ORANGE); // g2D.fillOval(310, 20, 9, 9); g2D.setColor(Color.black); Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/Help-24x24.png =================================================================== (Binary files differ) Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -22,10 +22,8 @@ import java.awt.BorderLayout; import java.awt.GridLayout; -import javax.swing.ButtonGroup; import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.JRadioButton; import javax.swing.JSlider; /** * This Class is responsible for the Options of the DL-Learner. @@ -46,10 +44,6 @@ private JSlider nrOfConcepts; private JSlider threshold; - private JRadioButton equivalentClassButton; - private JRadioButton superClassButton; - private ButtonGroup learningType; - private JPanel labelPanel; private JPanel sliderPanel; private double accuracy; @@ -106,22 +100,6 @@ sliderPanel.add(nrOfConcepts); sliderPanel.add(threshold); - JPanel learnTypePanel = new JPanel(); - learnTypePanel.setLayout(new GridLayout(0, 1)); - equivalentClassButton = new JRadioButton("Learn equivalent class expressions", true); - equivalentClassButton.setActionCommand("equivalent"); - equivalentClassButton.setSelected(true); - superClassButton = new JRadioButton("Learn super class expressions"); - superClassButton.setActionCommand("super"); - - learningType = new ButtonGroup(); - learningType.add(equivalentClassButton); - learningType.add(superClassButton); - - learnTypePanel.add(equivalentClassButton); - learnTypePanel.add(superClassButton); - -// holderPanel.add(BorderLayout.NORTH, learnTypePanel); holderPanel.add(BorderLayout.WEST, labelPanel); holderPanel.add(BorderLayout.CENTER, sliderPanel); add(holderPanel, BorderLayout.CENTER); @@ -161,8 +139,4 @@ return threshold.getValue()/100.0; } - public boolean isEquivalentClassesTypeSelected(){ - return equivalentClassButton.isSelected(); - } - } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -13,6 +13,8 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.geom.Ellipse2D; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Set; import javax.swing.BorderFactory; @@ -30,7 +32,7 @@ import com.clarkparsia.explanation.util.ExplanationProgressMonitor; -public class StatusBar extends JPanel implements ProgressMonitor, ExplanationProgressMonitor{ +public class StatusBar extends JPanel implements ProgressMonitor, ExplanationProgressMonitor, PropertyChangeListener{ /** * */ @@ -208,8 +210,23 @@ // TODO Auto-generated method stub } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if ("progress" == evt.getPropertyName()) { + int progress = (Integer) evt.getNewValue(); + progressBar.setValue(progress); + + + } + + } + public void setMaximumValue(int max){ + progressBar.setMaximum(max); + } + } class AngledLinesWindowsCornerIcon implements Icon { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -26,6 +26,7 @@ import javax.swing.JOptionPane; import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.ui.wizard.descriptors.AutoLearnPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.InconsistencyExplanationPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.KnowledgeSourcePanelDescriptor; @@ -120,7 +121,7 @@ } else { nextPanelDescriptor = ClassChoosePanelDescriptor.IDENTIFIER; ((ClassChoosePanelDescriptor) nextDescriptor).resetPanel(); - ((ClassChoosePanelDescriptor) nextDescriptor).refill(); + } } } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(InconsistencyExplanationPanelDescriptor.IDENTIFIER)) { @@ -135,11 +136,11 @@ } else { nextPanelDescriptor = ClassChoosePanelDescriptor.IDENTIFIER; ((ClassChoosePanelDescriptor) nextDescriptor).resetPanel(); - ((ClassChoosePanelDescriptor) nextDescriptor).refill(); + } } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER)) { nextPanelDescriptor = ClassChoosePanelDescriptor.IDENTIFIER; - ((ClassChoosePanelDescriptor) nextDescriptor).refill(); + } // else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(ClassChoosePanelDescriptor.IDENTIFIER)) { // ore.makeOWAToCWA(); @@ -158,6 +159,8 @@ ClassChoosePanelDescriptor classChoose = ((ClassChoosePanelDescriptor) model .getPanelHashMap().get(nextPanelDescriptor)); classChoose.resetPanel(); + } else if(nextPanelDescriptor.equals(AutoLearnPanelDescriptor.IDENTIFIER)){ + ((ClassChoosePanelDescriptor)currentPanelDescriptor).setAutoLearningOptions(); } // else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(LearningPanelDescriptor.IDENTIFIER)){ // if(OREManager.getInstance().getNewClassDescription().getAccuracy() == 1.0){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -1,15 +1,20 @@ package org.dllearner.tools.ore.ui.wizard.descriptors; +import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.Timer; +import java.util.TimerTask; import java.util.TreeSet; import java.util.concurrent.ExecutionException; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; +import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.LearningAlgorithm; import org.dllearner.core.owl.NamedClass; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.tools.ore.OREManager; @@ -17,8 +22,7 @@ import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.AutoLearnPanel; -public class AutoLearnPanelDescriptor extends WizardPanelDescriptor { - +public class AutoLearnPanelDescriptor extends WizardPanelDescriptor{ /** * Identification string for class choose panel. */ @@ -29,6 +33,8 @@ public static final String INFORMATION = ""; private AutoLearnPanel autoLearnPanel; + + private List<NamedClass> classes; /** * Constructor creates new panel and adds listener to list. @@ -37,6 +43,7 @@ autoLearnPanel = new AutoLearnPanel(); setPanelDescriptorIdentifier(IDENTIFIER); setPanelComponent(autoLearnPanel); + classes = new ArrayList<NamedClass>(); } @Override @@ -59,6 +66,16 @@ new ClassRetrievingTask().execute(); } + public void learnEquivalentClassExpressions(){ + TaskManager.getInstance().setTaskStarted("Learning equivalent class expressions..."); + new EquivalentLearningTask().execute(); + } + + public void learnSubClassExpressions(){ + TaskManager.getInstance().setTaskStarted("Learning superclass expressions..."); + new SuperClassLearningTask().execute(); + } + /** * Inner class to get all atomic classes in a background thread. @@ -91,9 +108,9 @@ @Override public void run() { - Set<NamedClass> classes = Collections.emptySet(); + Set<NamedClass> result = Collections.emptySet(); try { - classes = get(); + result = get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -101,15 +118,17 @@ // TODO Auto-generated catch block e.printStackTrace(); } - - autoLearnPanel.fillClassesTable(classes); + classes.addAll(result); + autoLearnPanel.fillClassesTable(result); + OREManager.getInstance().setCurrentClass2Learn(classes.get(0)); TaskManager.getInstance().setTaskFinished(); + learnEquivalentClassExpressions(); } }); } } - class EquivalentLearningTask extends SwingWorker<Void, Void> { + class EquivalentLearningTask extends SwingWorker<Void, List<? extends EvaluatedDescription>> { @Override @@ -117,7 +136,22 @@ OREManager.getInstance().setLearningType("equivalence"); OREManager.getInstance().setLearningProblem(); OREManager.getInstance().setLearningAlgorithm(); - OREManager.getInstance().getLa().start(); + + final LearningAlgorithm la = OREManager.getInstance().getLa(); + Timer timer = new Timer(); + timer.schedule(new TimerTask(){ + + @SuppressWarnings("unchecked") + @Override + public void run() { + if(!isCancelled() && la.isRunning()){ + publish(la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), + OREManager.getInstance().getThreshold(), true)); + } + } + + }, 1000, 2000); + la.start(); return null; } @@ -130,14 +164,36 @@ public void run() { autoLearnPanel.fillEquivalentClassExpressionsTable((List<EvaluatedDescriptionClass>)OREManager.getInstance().getLa(). - getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true)); - TaskManager.getInstance().setTaskFinished(); + getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true)); + learnSubClassExpressions(); + } }); } + + @Override + protected void process(List<List<? extends EvaluatedDescription>> resultLists) { + + for (List<? extends EvaluatedDescription> list : resultLists) { + updateList(list); + } + } + + private void updateList(final List<? extends EvaluatedDescription> result) { + + Runnable doUpdateList = new Runnable() { + + @SuppressWarnings("unchecked") + public void run() { + autoLearnPanel.fillEquivalentClassExpressionsTable((List<EvaluatedDescriptionClass>) result); + } + }; + SwingUtilities.invokeLater(doUpdateList); + + } } - class SubclassLearningTask extends SwingWorker<Void, Void> { + class SuperClassLearningTask extends SwingWorker<Void, List<? extends EvaluatedDescription>> { @Override @@ -145,7 +201,23 @@ OREManager.getInstance().setLearningType("superClass"); OREManager.getInstance().setLearningProblem(); OREManager.getInstance().setLearningAlgorithm(); - OREManager.getInstance().getLa().start(); + + final LearningAlgorithm la = OREManager.getInstance().getLa(); + Timer timer = new Timer(); + timer.schedule(new TimerTask(){ + + @SuppressWarnings("unchecked") + @Override + public void run() { + if(!isCancelled() && la.isRunning()){ + publish(la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), + OREManager.getInstance().getThreshold(), true)); + } + } + + }, 1000, 2000); + la.start(); + return null; } @@ -157,11 +229,35 @@ @Override public void run() { - autoLearnPanel.fillSubClassExpressionsTable((List<EvaluatedDescriptionClass>)OREManager.getInstance().getLa(). + autoLearnPanel.fillSuperClassExpressionsTable((List<EvaluatedDescriptionClass>)OREManager.getInstance().getLa(). getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true)); TaskManager.getInstance().setTaskFinished(); } }); } + + @Override + protected void process(List<List<? extends EvaluatedDescription>> resultLists) { + + for (List<? extends EvaluatedDescription> list : resultLists) { + updateList(list); + } + } + + private void updateList(final List<? extends EvaluatedDescription> result) { + + Runnable doUpdateList = new Runnable() { + + @SuppressWarnings("unchecked") + public void run() { + autoLearnPanel.fillSuperClassExpressionsTable((List<EvaluatedDescriptionClass>) result); + } + }; + SwingUtilities.invokeLater(doUpdateList); + + } } + + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -40,6 +40,7 @@ import org.dllearner.core.owl.NamedClass; import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.OREManagerListener; import org.dllearner.tools.ore.TaskManager; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.ClassChoosePanel; @@ -52,7 +53,7 @@ * @author Lorenz Buehmann * */ -public class ClassChoosePanelDescriptor extends WizardPanelDescriptor implements ListSelectionListener, ChangeListener, ActionListener{ +public class ClassChoosePanelDescriptor extends WizardPanelDescriptor implements OREManagerListener, ListSelectionListener, ChangeListener, ActionListener{ /** * Identification string for class choose panel. @@ -77,6 +78,7 @@ classChoosePanel.addChangeListener(this); classChoosePanel.addActionsListeners(this); + OREManager.getInstance().addListener(this); setPanelDescriptorIdentifier(IDENTIFIER); setPanelComponent(classChoosePanel); @@ -144,9 +146,11 @@ classChoosePanel.reset(); } - public void refill(){ - TaskManager.getInstance().setTaskStarted("Retrieving atomic classes..."); - new ClassRetrievingTask().execute(); + public void retrieveClasses(){ + if(instanceCountToClasses.isEmpty()){ + TaskManager.getInstance().setTaskStarted("Retrieving atomic classes..."); + new ClassRetrievingTask().execute(); + } } public void fillClassesList(int minInstanceCount){ @@ -207,6 +211,7 @@ classChoosePanel.setAutoLearningPanel(true); } else { classChoosePanel.setAutoLearningPanel(false); + retrieveClasses(); } setNextButtonAccordingToConceptSelected(); @@ -215,4 +220,14 @@ public boolean isAutoLearningMode(){ return classChoosePanel.isAutoLearnMode(); } + + public void setAutoLearningOptions(){ + classChoosePanel.setLearningOptions(); + } + + @Override + public void activeOntologyChanged() { + instanceCountToClasses.clear(); + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -20,6 +20,7 @@ package org.dllearner.tools.ore.ui.wizard.descriptors; +import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; @@ -129,14 +130,16 @@ public void actionPerformed(ActionEvent event) { if(event.getActionCommand().equals("Start")){ String learningType = ""; - if(learnPanel.getOptionsPanel().isEquivalentClassesTypeSelected()){ + if(learnPanel.isEquivalentClassesTypeSelected()){ OREManager.getInstance().setLearningType("equivalence"); learningType = "equivalent"; } else { learningType = "super"; OREManager.getInstance().setLearningType("superClass"); } - TaskManager.getInstance().setTaskStarted("Learning " + learningType + " class expressions..."); +// TaskManager.getInstance().setTaskStarted("Learning " + learningType + " class expressions..."); + TaskManager.getInstance().getStatusBar().setMessage("Learning " + learningType + " class expressions..."); + getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); learnPanel.getStartButton().setEnabled(false); learnPanel.getStopButton().setEnabled(true); OREManager.getInstance().setNoisePercentage(learnPanel.getOptionsPanel().getMinAccuracy()); @@ -147,6 +150,7 @@ learningTask = new LearningTask(); + learningTask.addPropertyChangeListener(TaskManager.getInstance().getStatusBar()); learningTask.execute(); } else{ @@ -220,19 +224,21 @@ la = OREManager.getInstance().getLa(); - + setProgress(0); + TaskManager.getInstance().getStatusBar().setMaximumValue(OREManager.getInstance().getMaxExecutionTimeInSeconds()); timer = new Timer(); + timer.schedule(new TimerTask(){ - + int progress = 0; @Override - public void run() { + public void run() {progress += 1;setProgress(progress); if(!isCancelled() && la.isRunning()){ publish(la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true)); } } - }, 1000, 2000); + }, 1000, 1000); OREManager.getInstance().start(); List<? extends EvaluatedDescription> result = la.getCurrentlyBestEvaluatedDescriptions @@ -253,14 +259,12 @@ } catch (ExecutionException e) { e.printStackTrace(); } - getWizard().getDialog().setCursor(null); - getWizard().getStatusBar().showProgress(false); - getWizard().getStatusBar().setProgressTitle("Done"); + updateList(result); + TaskManager.getInstance().setTaskFinished(); + setProgress(0); learnPanel.getStartButton().setEnabled(true); learnPanel.getStopButton().setEnabled(false); - updateList(result); - TaskManager.getInstance().setTaskFinished(); - + } @Override @@ -281,10 +285,7 @@ } }; SwingUtilities.invokeLater(doUpdateList); - } - - } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -4,15 +4,20 @@ import java.util.List; import java.util.Set; +import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import org.dllearner.core.owl.NamedClass; import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.ui.ClassesTable; -import org.dllearner.tools.ore.ui.ResultTable; +import org.dllearner.tools.ore.ui.EquivalentClassExpressionsTable; +import org.dllearner.tools.ore.ui.GraphicalCoveragePanel; public class AutoLearnPanel extends JPanel { @@ -23,11 +28,14 @@ private ClassesTable classesTable; - private JPanel subPanel; + private JPanel superPanel; private JPanel equivalentPanel; - private ResultTable equivalentResultsTable; - private ResultTable subResultsTable; + private EquivalentClassExpressionsTable equivalentClassResultsTable; + private EquivalentClassExpressionsTable superClassResultsTable; + + private GraphicalCoveragePanel equivalentClassCoveragePanel; + private GraphicalCoveragePanel superClassCoveragePanel; public AutoLearnPanel(){ createUI(); @@ -60,16 +68,26 @@ equivSubSplitPane.setOneTouchExpandable(true); equivSubSplitPane.setDividerLocation(0.5); - subPanel = new JPanel(); - subResultsTable = new ResultTable(); - subPanel.add(subResultsTable); - equivalentPanel = new JPanel(); - equivalentResultsTable = new ResultTable(); - equivalentPanel.add(equivalentResultsTable); + equivalentClassResultsTable = new EquivalentClassExpressionsTable(); + equivalentClassResultsTable.setName("equivalent"); + equivalentPanel.add(new JScrollPane(equivalentClassResultsTable)); + equivalentClassCoveragePanel = new GraphicalCoveragePanel(""); + equivalentPanel.add(equivalentClassCoveragePanel); + equivalentPanel.setBorder(BorderFactory.createTitledBorder("Equivalent class expressions")); + superPanel = new JPanel(); + superClassResultsTable = new EquivalentClassExpressionsTable(); + superClassResultsTable.setName("super"); + superPanel.add(new JScrollPane(superClassResultsTable)); + superClassCoveragePanel = new GraphicalCoveragePanel(""); + superPanel.add(superClassCoveragePanel); + superPanel.setBorder(BorderFactory.createTitledBorder("Superclass expressions")); + + addTableSelectionListeners(); + equivSubSplitPane.setTopComponent(equivalentPanel); - equivSubSplitPane.setBottomComponent(subPanel); + equivSubSplitPane.setBottomComponent(superPanel); resultPanel.add(equivSubSplitPane); return resultPanel; @@ -79,12 +97,50 @@ classesTable.addClasses(classes); } - public void fillSubClassExpressionsTable(List<EvaluatedDescriptionClass> resultList){ - subResultsTable.addResults(resultList); + public void fillSuperClassExpressionsTable(List<EvaluatedDescriptionClass> resultList){ + superClassResultsTable.addResults(resultList); } public void fillEquivalentClassExpressionsTable(List<EvaluatedDescriptionClass> resultList){ - equivalentResultsTable.addResults(resultList); + equivalentClassResultsTable.addResults(resultList); } + private void addTableSelectionListeners(){ + equivalentClassResultsTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + + if (!e.getValueIsAdjusting() && equivalentClassResultsTable.getSelectedRow() >= 0){ + + EvaluatedDescriptionClass selectedClassExpression = equivalentClassResultsTable.getSelectedValue(); + OREManager.getInstance().setNewClassDescription(selectedClassExpression); + equivalentClassCoveragePanel.setNewClassDescription(selectedClassExpression); + } + } + + }); + + superClassResultsTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + + @Override + public void valueChanged(ListSelectionEvent e) { + + if (!e.getValueIsAdjusting() && superClassResultsTable.getSelectedRow() >= 0){ + + EvaluatedDescriptionClass selectedClassExpression = superClassResultsTable.getSelectedValue(); + OREManager.getInstance().setNewClassDescription(selectedClassExpression); + superClassCoveragePanel.setNewClassDescription(selectedClassExpression); + } + } + }); + } + + public void updateEquivalentGraphicalCoveragePanel(EvaluatedDescriptionClass desc){ + equivalentClassCoveragePanel.setNewClassDescription(desc); + } + + public void updateSuperGraphicalCoveragePanel(EvaluatedDescriptionClass desc){ + superClassCoveragePanel.setNewClassDescription(desc); + } + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -38,6 +38,7 @@ import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionListener; +import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.ui.ClassesTable; import org.dllearner.tools.ore.ui.HelpablePanel; import org.dllearner.tools.ore.ui.LearningOptionsPanel; @@ -174,10 +175,20 @@ public void reset(){ classesTable.clear(); minInstanceCountSpinner.setValue(new Integer(1)); + autoLearnButton.setSelected(true); + setAutoLearningPanel(true); } public boolean isAutoLearnMode(){ return autoLearnButton.isSelected(); } + + public void setLearningOptions(){ + OREManager.getInstance().setMaxExecutionTimeInSeconds(learningOptionsPanel.getMaxExecutionTime()); + OREManager.getInstance().setMaxNrOfResults(learningOptionsPanel.getNrOfConcepts()); + OREManager.getInstance().setNoisePercentage(learningOptionsPanel.getMinAccuracy()); + OREManager.getInstance().setMinInstanceCount(((Integer)(minInstanceCountSpinner.getValue())).intValue()); + + } } \ No newline at end of file Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ManualLearnPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ManualLearnPanel.java 2009-09-29 08:26:40 UTC (rev 1868) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ManualLearnPanel.java 2009-09-29 15:59:38 UTC (rev 1869) @@ -212,6 +212,10 @@ return optionsPanel; } + public boolean isEquivalentClassesTypeSelected(){ + return equivalentClassButton.isSelected(); + } + public void reset(){ graphicPanel.clear(); resultTable.clear(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-10-04 11:55:00
|
Revision: 1877 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1877&view=rev Author: lorenz_b Date: 2009-10-04 11:54:44 +0000 (Sun, 04 Oct 2009) Log Message: ----------- continued auto learning mode changed some wizard logic Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java trunk/src/dl-learner/org/dllearner/tools/ore/LearningManagerListener.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTableModel.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTableModel.java Added: trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -0,0 +1,96 @@ +package org.dllearner.tools.ore; + +import java.util.ArrayList; +import java.util.List; + +import org.dllearner.learningproblems.EvaluatedDescriptionClass; + +public class LearningManager { + + private static LearningManager instance; + + private List<LearningManagerListener> listeners; + + public static final int AUTO_LEARN_MODE = 0; + public static final int MANUAL_LEARN_MODE = 1; + + private int learnMode = 0; + + private List<EvaluatedDescriptionClass> newDescriptions; + + private int currentDescriptionIndex = 0; + + public static LearningManager getInstance(){ + if(instance == null){ + instance = new LearningManager(); + } + return instance; + } + + public LearningManager(){ + listeners = new ArrayList<LearningManagerListener>(); + } + + public void setLearningMode(int learningMode){ + this.learnMode = learningMode; + } + + public int getLearningMode(){ + return learnMode; + } + + public List<EvaluatedDescriptionClass> getNewDescriptions() { + return newDescriptions; + } + + public void setNewDescriptions(List<EvaluatedDescriptionClass> newDescriptions) { + this.newDescriptions = newDescriptions; + currentDescriptionIndex = 0; + fireNewDescriptionsAdded(newDescriptions); + setNextDescription(); + } + + public int getCurrentDescriptionIndex() { + return currentDescriptionIndex; + } + + public void setCurrentDescriptionIndex(int currentDescriptionIndex) { + this.currentDescriptionIndex = currentDescriptionIndex; + } + + public void setNextDescription(){ + OREManager.getInstance().setNewClassDescription(newDescriptions.get(currentDescriptionIndex)); + fireNewDescriptionSelected(currentDescriptionIndex); + currentDescriptionIndex++; + if(currentDescriptionIndex >= newDescriptions.size()){ + fireNoDescriptionsLeft(); + } + } + + public boolean addListener(LearningManagerListener listener) { + return listeners.add(listener); + } + + public boolean removeListener(LearningManagerListener listener) { + return listeners.remove(listener); + } + + public void fireNewDescriptionsAdded(List<EvaluatedDescriptionClass> descriptions){ + for(LearningManagerListener listener : listeners){ + listener.newDescriptionsAdded(descriptions); + } + } + + public void fireNoDescriptionsLeft(){ + for(LearningManagerListener listener : listeners){ + listener.noDescriptionsLeft(); + } + } + + public void fireNewDescriptionSelected(int index){ + for(LearningManagerListener listener : listeners){ + listener.newDescriptionSelected(index); + } + } + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/LearningManagerListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/LearningManagerListener.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/LearningManagerListener.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -0,0 +1,13 @@ +package org.dllearner.tools.ore; + +import java.util.List; + +import org.dllearner.learningproblems.EvaluatedDescriptionClass; + +public interface LearningManagerListener { + + public abstract void newDescriptionSelected(int index); + public abstract void noDescriptionsLeft(); + public abstract void newDescriptionsAdded(List<EvaluatedDescriptionClass> descriptions); + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -66,12 +66,6 @@ private double threshold; private int minInstanceCount; - public static final int AUTO_LEARN_MODE = 0; - public static final int MANUAL_LEARN_MODE = 1; - - private int learnMode = 0; - - private List<Description> newDescriptions; private List<OREManagerListener> listeners; @@ -288,14 +282,6 @@ return minInstanceCount; } - public void setLearningMode(int mode){ - learnMode = mode; - } - - public int getLearningMode(){ - return learnMode; - } - public void init(){ this.setLearningProblem(); @@ -328,14 +314,6 @@ public CELOE getLa() { return la; } - - public void setNewDescriptions(List<Description> descriptions){ - newDescriptions = descriptions; - } - - public List<Description> getNewDescriptions(){ - return newDescriptions; - } /** * Retrieves description parts that might cause inconsistency - for negative examples only. Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -0,0 +1,64 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Component; +import java.awt.event.MouseEvent; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.table.TableCellRenderer; + +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.jdesktop.swingx.JXTable; + +public class MarkableClassExpressionsTable extends JXTable{ + /** + * + */ + private static final long serialVersionUID = 4193878042914394758L; + private ImageIcon icon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/untoggled.gif"); + + public MarkableClassExpressionsTable(){ + super(new MarkableClassExpressionsTableModel()); + getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); + getColumn(0).setMaxWidth(30); + setTableHeader(null); + setBorder(null); + setShowVerticalLines(false); + setShowHorizontalLines(false); + setRowSelectionAllowed(false); + setColumnSelectionAllowed(false); + setCellSelectionEnabled(false); + getColumn(0).setCellRenderer(new TableCellRenderer() { + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + if(value.equals(">")){ + return new JLabel(icon); + } else { + return new JLabel(""); + } + } + }); + } + + @Override + public String getToolTipText(MouseEvent e){ + String tip = null; + java.awt.Point p = e.getPoint(); + int rowIndex = rowAtPoint(p); + if(rowIndex != -1){ + tip = getValueAt(rowIndex, 1).toString(); + + } else { + tip = super.getToolTipText(e); + } + return tip; + } + + public void clear(){ + ((MarkableClassExpressionsTableModel)getModel()).clear(); + } + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -0,0 +1,86 @@ +package org.dllearner.tools.ore.ui; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.table.AbstractTableModel; + +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.LearningManager; +import org.dllearner.tools.ore.LearningManagerListener; + +public class MarkableClassExpressionsTableModel extends AbstractTableModel implements LearningManagerListener{ + /** + * + */ + private static final long serialVersionUID = 5773843275446469889L; + + private List<EvaluatedDescriptionClass> descriptions; + private int selectedRowIndex = 0; + + public MarkableClassExpressionsTableModel(){ + descriptions = new ArrayList<EvaluatedDescriptionClass>(); + LearningManager.getInstance().addListener(this); + } + + @Override + public int getColumnCount() { + return 2; + } + + @Override + public int getRowCount() { + return descriptions.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if(columnIndex == 0){ + if(rowIndex == selectedRowIndex){ + return ">"; + } else { + return ""; + } + } else { + return descriptions.get(rowIndex).getDescription(); + } + } + + public void clear(){ + descriptions.clear(); + fireTableDataChanged(); + } + + private void addDescriptions(List<EvaluatedDescriptionClass> descriptions){ + this.descriptions.clear(); + this.descriptions.addAll(descriptions); + fireTableDataChanged(); + } + + public EvaluatedDescriptionClass getSelectedDescription(int rowIndex){ + return descriptions.get(rowIndex); + } + + public void setSelectedDescription(int rowIndex){ + int oldRowIndex = selectedRowIndex; + selectedRowIndex = rowIndex; + fireTableRowsUpdated(oldRowIndex, selectedRowIndex); + } + + @Override + public void newDescriptionSelected(int index) { + setSelectedDescription(index); + + } + + @Override + public void noDescriptionsLeft() { + // TODO Auto-generated method stub + + } + + @Override + public void newDescriptionsAdded(List<EvaluatedDescriptionClass> descriptions) { + addDescriptions(descriptions); + } +} Copied: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTable.java (from rev 1876, trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTable.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTable.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -0,0 +1,78 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Component; +import java.awt.event.MouseEvent; +import java.util.Set; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.table.TableCellRenderer; + +import org.dllearner.core.owl.NamedClass; +import org.jdesktop.swingx.JXTable; + +public class MarkableClassesTable extends JXTable { + + /** + * + */ + private static final long serialVersionUID = 4193878042914394758L; + private ImageIcon icon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/untoggled.gif"); + + public MarkableClassesTable(){ + super(new MarkableClassesTableModel()); + getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); + getColumn(0).setMaxWidth(30); + setTableHeader(null); + setBorder(null); + setShowVerticalLines(false); + setShowHorizontalLines(false); + setRowSelectionAllowed(false); + setColumnSelectionAllowed(false); + setCellSelectionEnabled(false); + getColumn(0).setCellRenderer(new TableCellRenderer() { + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + if(value.equals(">")){ + return new JLabel(icon); + } else { + return new JLabel(""); + } + } + }); + } + + @Override + public String getToolTipText(MouseEvent e){ + String tip = null; + java.awt.Point p = e.getPoint(); + int rowIndex = rowAtPoint(p); + if(rowIndex != -1){ + tip = getValueAt(rowIndex, 1).toString(); + + } else { + tip = super.getToolTipText(e); + } + return tip; + } + + public void addClasses(Set<NamedClass> classes){ + ((MarkableClassesTableModel)getModel()).addClasses(classes); + } + + public NamedClass getSelectedValue(){ + return ((MarkableClassesTableModel)getModel()).getSelectedValue(getSelectedRow()); + } + + public void clear(){ + ((MarkableClassesTableModel)getModel()).clear(); + } + + public void setSelectedClass(int rowIndex){ + ((MarkableClassesTableModel)getModel()).setSelectedClass(rowIndex); + } + +} Copied: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTableModel.java (from rev 1876, trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTableModel.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTableModel.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -0,0 +1,69 @@ +package org.dllearner.tools.ore.ui; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import javax.swing.table.AbstractTableModel; + +import org.dllearner.core.owl.NamedClass; + +public class MarkableClassesTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 5773843275446469889L; + + private List<NamedClass> classes; + private int selectedRowIndex = 0; + + public MarkableClassesTableModel(){ + classes = new ArrayList<NamedClass>(); + } + + @Override + public int getColumnCount() { + return 2; + } + + @Override + public int getRowCount() { + return classes.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if(columnIndex == 0){ + if(rowIndex == selectedRowIndex){ + return ">"; + } else { + return ""; + } + } else { + return classes.get(rowIndex); + } + } + + public void clear(){ + classes.clear(); + fireTableDataChanged(); + } + + public void addClasses(Set<NamedClass> classes){ + this.classes.clear(); + this.classes.addAll(classes); + fireTableDataChanged(); + } + + public NamedClass getSelectedValue(int rowIndex){ + return classes.get(rowIndex); + } + + public void setSelectedClass(int rowIndex){ + int oldRowIndex = selectedRowIndex; + selectedRowIndex = rowIndex; + fireTableRowsUpdated(oldRowIndex, selectedRowIndex); + } + +} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTable.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTable.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -1,78 +0,0 @@ -package org.dllearner.tools.ore.ui; - -import java.awt.Component; -import java.awt.event.MouseEvent; -import java.util.Set; - -import javax.swing.ImageIcon; -import javax.swing.JLabel; -import javax.swing.JTable; -import javax.swing.table.TableCellRenderer; - -import org.dllearner.core.owl.NamedClass; -import org.jdesktop.swingx.JXTable; - -public class MarkableTable extends JXTable { - - /** - * - */ - private static final long serialVersionUID = 4193878042914394758L; - private ImageIcon icon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/untoggled.gif"); - - public MarkableTable(){ - super(new MarkableTableModel()); - getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); - getColumn(0).setMaxWidth(30); - setTableHeader(null); - setBorder(null); - setShowVerticalLines(false); - setShowHorizontalLines(false); - setRowSelectionAllowed(false); - setColumnSelectionAllowed(false); - setCellSelectionEnabled(false); - getColumn(0).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, - int row, int column) { - if(value.equals(">")){ - return new JLabel(icon); - } else { - return new JLabel(""); - } - } - }); - } - - @Override - public String getToolTipText(MouseEvent e){ - String tip = null; - java.awt.Point p = e.getPoint(); - int rowIndex = rowAtPoint(p); - if(rowIndex != -1){ - tip = getValueAt(rowIndex, 1).toString(); - - } else { - tip = super.getToolTipText(e); - } - return tip; - } - - public void addClasses(Set<NamedClass> classes){ - ((MarkableTableModel)getModel()).addClasses(classes); - } - - public NamedClass getSelectedValue(){ - return ((MarkableTableModel)getModel()).getSelectedValue(getSelectedRow()); - } - - public void clear(){ - ((MarkableTableModel)getModel()).clear(); - } - - public void setSelectedClass(int rowIndex){ - ((MarkableTableModel)getModel()).setSelectedClass(rowIndex); - } - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTableModel.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableTableModel.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -1,69 +0,0 @@ -package org.dllearner.tools.ore.ui; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import javax.swing.table.AbstractTableModel; - -import org.dllearner.core.owl.NamedClass; - -public class MarkableTableModel extends AbstractTableModel { - - /** - * - */ - private static final long serialVersionUID = 5773843275446469889L; - - private List<NamedClass> classes; - private int selectedRowIndex = 0; - - public MarkableTableModel(){ - classes = new ArrayList<NamedClass>(); - } - - @Override - public int getColumnCount() { - return 2; - } - - @Override - public int getRowCount() { - return classes.size(); - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - if(columnIndex == 0){ - if(rowIndex == selectedRowIndex){ - return ">"; - } else { - return ""; - } - } else { - return classes.get(rowIndex); - } - } - - public void clear(){ - classes.clear(); - fireTableDataChanged(); - } - - public void addClasses(Set<NamedClass> classes){ - this.classes.clear(); - this.classes.addAll(classes); - fireTableDataChanged(); - } - - public NamedClass getSelectedValue(int rowIndex){ - return classes.get(rowIndex); - } - - public void setSelectedClass(int rowIndex){ - int oldRowIndex = selectedRowIndex; - selectedRowIndex = rowIndex; - fireTableRowsUpdated(oldRowIndex, selectedRowIndex); - } - -} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTable.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTable.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -5,7 +5,6 @@ import javax.swing.ListSelectionModel; -import org.dllearner.core.owl.Description; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; @@ -64,7 +63,7 @@ return ((SelectableClassExpressionsTableModel)getModel()).getSelectedValue(getSelectedRow()); } - public List<Description> getSelecetdDescriptions(){ + public List<EvaluatedDescriptionClass> getSelectedDescriptions(){ return ((SelectableClassExpressionsTableModel)getModel()).getSelectedDescriptions(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -90,11 +90,13 @@ public void clear(){ resultList.clear(); + selectionList.clear(); fireTableDataChanged(); } public void addResults(List<EvaluatedDescriptionClass> resultList){ this.resultList.clear(); + this.selectionList.clear(); this.resultList.addAll(resultList); for(int i = 0; i < resultList.size(); i++){ selectionList.add(i, Boolean.FALSE); @@ -111,11 +113,11 @@ return resultList.indexOf(e); } - public List<Description> getSelectedDescriptions(){ - List<Description> selected = new ArrayList<Description>(); + public List<EvaluatedDescriptionClass> getSelectedDescriptions(){ + List<EvaluatedDescriptionClass> selected = new ArrayList<EvaluatedDescriptionClass>(); for(int i = 0; i < selectionList.size(); i++){ if(selectionList.get(i).equals(Boolean.TRUE)){ - selected.add(resultList.get(i).getDescription()); + selected.add(resultList.get(i)); } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -22,9 +22,12 @@ import java.awt.event.ActionListener; +import java.util.List; import javax.swing.JOptionPane; +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.ui.wizard.descriptors.AutoLearnPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; @@ -167,20 +170,26 @@ learnDescriptor.resetPanel(); learnDescriptor.fillClassesTable(); } -// else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(LearningPanelDescriptor.IDENTIFIER)){ -// if(OREManager.getInstance().getNewClassDescription().getAccuracy() == 1.0){ -// nextPanelDescriptor = SavePanelDescriptor.IDENTIFIER; -// } else { -// nextPanelDescriptor = RepairPanelDescriptor.IDENTIFIER; -// RepairPanelDescriptor repair = ((RepairPanelDescriptor) model -// .getPanelHashMap().get(nextPanelDescriptor)); -// repair.refreshExampleLists(); -// } + else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(AutoLearnPanelDescriptor.IDENTIFIER)){ + AutoLearnPanelDescriptor descriptor = (AutoLearnPanelDescriptor)currentPanelDescriptor; + List<EvaluatedDescriptionClass> descriptions = descriptor.getSelectedDescriptions(); + if(!descriptions.isEmpty()){ + LearningManager.getInstance().setNewDescriptions(descriptions); + } + } + else if(nextPanelDescriptor.equals(RepairPanelDescriptor.IDENTIFIER)){ RepairPanelDescriptor repair = ((RepairPanelDescriptor) model .getPanelHashMap().get(nextPanelDescriptor)); - repair.refreshExampleLists(); + if(LearningManager.getInstance().getLearningMode() == LearningManager.AUTO_LEARN_MODE){ + repair.setManualPanel(false); + repair.fillExamplesLists(); + } else { + repair.setManualPanel(true); + repair.fillExamplesLists(); + } + Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -18,9 +18,9 @@ import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.LearningAlgorithm; -import org.dllearner.core.owl.Description; import org.dllearner.core.owl.NamedClass; import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.TaskManager; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; @@ -43,6 +43,9 @@ private EquivalentLearningTask equivalentLearningTask; private SuperClassLearningTask superLearningTask; + private Timer timer; + private LearningAlgorithm la; + private SwingWorker<Void, List<? extends EvaluatedDescription>> currentLearningTask; private int currentClassIndex = 0; @@ -65,7 +68,6 @@ if(getSelectedDescriptions().isEmpty()){ return SavePanelDescriptor.IDENTIFIER; } else { - OREManager.getInstance().setNewDescriptions(getSelectedDescriptions()); return RepairPanelDescriptor.IDENTIFIER; } @@ -90,15 +92,17 @@ TaskManager.getInstance().getStatusBar().setMessage("Learning equivalent class expressions..."); getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); equivalentLearningTask = new EquivalentLearningTask(); + currentLearningTask = equivalentLearningTask; equivalentLearningTask.addPropertyChangeListener(TaskManager.getInstance().getStatusBar()); equivalentLearningTask.execute(); } - public void learnSubClassExpressions(){ + public void learnSuperClassExpressions(){ TaskManager.getInstance().getStatusBar().setMessage("Learning superclass expressions..."); TaskManager.getInstance().getStatusBar().setProgress(0); getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); superLearningTask = new SuperClassLearningTask(); + currentLearningTask = superLearningTask; superLearningTask.addPropertyChangeListener(TaskManager.getInstance().getStatusBar()); superLearningTask.execute(); } @@ -111,7 +115,7 @@ currentClassIndex++; } - public List<Description> getSelectedDescriptions(){ + public List<EvaluatedDescriptionClass> getSelectedDescriptions(){ return autoLearnPanel.getSelectedDescriptions(); } @@ -224,7 +228,9 @@ if(result.isEmpty()){ EvaluatedDescriptionClass best = (EvaluatedDescriptionClass)la.getCurrentlyBestEvaluatedDescription(); } - learnSubClassExpressions(); + + learnSuperClassExpressions(); + } @Override @@ -248,7 +254,7 @@ private final double threshold = OREManager.getInstance().getThreshold(); @Override - public Void doInBackground() { + public Void doInBackground() {System.out.println("Learning super class for " + OREManager.getInstance().getCurrentClass2Learn()); OREManager.getInstance().setLearningType("superClass"); OREManager.getInstance().setLearningProblem(); OREManager.getInstance().setLearningAlgorithm(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -39,6 +39,7 @@ import javax.swing.event.ListSelectionListener; import org.dllearner.core.owl.NamedClass; +import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.OREManagerListener; import org.dllearner.tools.ore.TaskManager; @@ -209,8 +210,10 @@ public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("auto")){ classChoosePanel.setAutoLearningPanel(true); + LearningManager.getInstance().setLearningMode(LearningManager.AUTO_LEARN_MODE); } else { classChoosePanel.setAutoLearningPanel(false); + LearningManager.getInstance().setLearningMode(LearningManager.MANUAL_LEARN_MODE); retrieveClasses(); } setNextButtonAccordingToConceptSelected(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -25,6 +25,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.HashSet; +import java.util.List; import java.util.Set; import javax.swing.JButton; @@ -32,6 +33,9 @@ import javax.swing.event.ListSelectionListener; import org.dllearner.core.owl.Individual; +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.LearningManager; +import org.dllearner.tools.ore.LearningManagerListener; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.OntologyModifier; import org.dllearner.tools.ore.ui.RepairDialog; @@ -42,11 +46,11 @@ /** - * Wizard panel descriptor where it is possible torepair wrong examples. + * Wizard panel descriptor where it is possible to repair wrong examples. * @author Lorenz Buehmann * */ -public class RepairPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener, MouseListener{ +public class RepairPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener, MouseListener, LearningManagerListener{ public static final String IDENTIFIER = "REPAIR_PANEL"; public static final String INFORMATION = "In this panel all positive and negative examples, that cause failures are shown in the list above. " @@ -66,11 +70,12 @@ repairPanel.addSelectionListeners(this); repairPanel.addMouseListeners(this); + LearningManager.getInstance().addListener(this); + setPanelDescriptorIdentifier(IDENTIFIER); setPanelComponent(repairPanel); ontologyChanges = new HashSet<OWLOntologyChange>(); - } @Override @@ -80,7 +85,12 @@ @Override public Object getBackPanelDescriptor() { - return ManualLearnPanelDescriptor.IDENTIFIER; + if(LearningManager.getInstance().getLearningMode() == LearningManager.MANUAL_LEARN_MODE){ + return ManualLearnPanelDescriptor.IDENTIFIER; + } else { + return AutoLearnPanelDescriptor.IDENTIFIER; + } + } @Override @@ -91,63 +101,68 @@ /** * Adds the wrong negative and positive examples to the lists. */ - public void refreshExampleLists(){ - + public void fillExamplesLists(){ repairPanel.getPosFailureTable().addIndividuals(OREManager.getInstance().getPositiveFailureExamples()); repairPanel.getNegFailureTable().addIndividuals(OREManager.getInstance().getNegativeFailureExamples()); - } + } + + public void setManualPanel(boolean value){ + repairPanel.setManualStyle(value); + } - /** * Method to control actions by button pressed. */ public void actionPerformed(ActionEvent event) { - modi = OREManager.getInstance().getModifier(); - String actionType = ((JButton) event.getSource()).getParent().getName(); - if(actionType.equals("negative")){ - Individual ind = repairPanel.getNegFailureTable().getSelectedIndividual(); - if(event.getActionCommand().equals("negRepair")){ - RepairDialog negDialog = new RepairDialog(ind, getWizard().getDialog(), "neg"); - int returncode = negDialog.showDialog(); + if(event.getActionCommand().equals("next")){ + LearningManager.getInstance().setNextDescription(); + } else { + modi = OREManager.getInstance().getModifier(); + String actionType = ((JButton) event.getSource()).getParent().getName(); + if(actionType.equals("negative")){ + Individual ind = repairPanel.getNegFailureTable().getSelectedIndividual(); + if(event.getActionCommand().equals("negRepair")){ + RepairDialog negDialog = new RepairDialog(ind, getWizard().getDialog(), "neg"); + int returncode = negDialog.showDialog(); + if(returncode == 2){ + ontologyChanges.addAll(negDialog.getAllChanges()); + } else if(returncode == 3){ + ontologyChanges.addAll(negDialog.getAllChanges()); + repairPanel.getNegFailureTable().removeIndividual(ind); + } + } else if(event.getActionCommand().equals("negAdd")){ + ontologyChanges.addAll(modi.addClassAssertion(ind, OREManager.getInstance().getCurrentClass2Learn())); + repairPanel.getNegFailureTable().removeIndividual(ind); + + } else if(event.getActionCommand().equals("negDelete")){ + ontologyChanges.addAll(modi.deleteIndividual(ind)); + repairPanel.getNegFailureTable().removeIndividual(ind); + + } + } else if(actionType.equals("positive")){ + Individual ind = repairPanel.getPosFailureTable().getSelectedIndividual(); + if(event.getActionCommand().equals("posRepair")){ + RepairDialog posDialog = new RepairDialog(ind, getWizard().getDialog(), "pos"); + int returncode = posDialog.showDialog(); if(returncode == 2){ - ontologyChanges.addAll(negDialog.getAllChanges()); + ontologyChanges.addAll(posDialog.getAllChanges()); } else if(returncode == 3){ - ontologyChanges.addAll(negDialog.getAllChanges()); - repairPanel.getNegFailureTable().removeIndividual(ind); + ontologyChanges.addAll(posDialog.getAllChanges()); + repairPanel.getPosFailureTable().removeIndividual(ind); } - } else if(event.getActionCommand().equals("negAdd")){ + } else if(event.getActionCommand().equals("posRemove")){ ontologyChanges.addAll(modi.addClassAssertion(ind, OREManager.getInstance().getCurrentClass2Learn())); - repairPanel.getNegFailureTable().removeIndividual(ind); + repairPanel.getPosFailureTable().removeIndividual(ind); - } else if(event.getActionCommand().equals("negDelete")){ + } else if(event.getActionCommand().equals("posDelete")){ ontologyChanges.addAll(modi.deleteIndividual(ind)); - repairPanel.getNegFailureTable().removeIndividual(ind); - - } - } else if(actionType.equals("positive")){ - Individual ind = repairPanel.getPosFailureTable().getSelectedIndividual(); - if(event.getActionCommand().equals("posRepair")){ - RepairDialog posDialog = new RepairDialog(ind, getWizard().getDialog(), "pos"); - int returncode = posDialog.showDialog(); - if(returncode == 2){ - ontologyChanges.addAll(posDialog.getAllChanges()); - } else if(returncode == 3){ - ontologyChanges.addAll(posDialog.getAllChanges()); repairPanel.getPosFailureTable().removeIndividual(ind); + } - } else if(event.getActionCommand().equals("posRemove")){ - ontologyChanges.addAll(modi.addClassAssertion(ind, OREManager.getInstance().getCurrentClass2Learn())); - repairPanel.getPosFailureTable().removeIndividual(ind); - - } else if(event.getActionCommand().equals("posDelete")){ - ontologyChanges.addAll(modi.deleteIndividual(ind)); - repairPanel.getPosFailureTable().removeIndividual(ind); - - } + } } - } /** @@ -214,6 +229,24 @@ // TODO Auto-generated method stub } + + @Override + public void newDescriptionSelected(int index) { + fillExamplesLists(); + repairPanel.repaint(); + } + + @Override + public void noDescriptionsLeft() { + repairPanel.setNextButtonEnabled(false); + + } + + @Override + public void newDescriptionsAdded(List<EvaluatedDescriptionClass> descriptions) { + repairPanel.setNextButtonEnabled(true); + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -23,6 +23,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.OntologyModifier; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; @@ -63,7 +64,7 @@ @Override public Object getBackPanelDescriptor() { - if(OREManager.getInstance().getLearningMode() == OREManager.MANUAL_LEARN_MODE){ + if(LearningManager.getInstance().getLearningMode() == LearningManager.MANUAL_LEARN_MODE){ if(OREManager.getInstance().getNewClassDescription().getAccuracy() == 1.0){ return ManualLearnPanelDescriptor.IDENTIFIER; } else { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -20,11 +20,11 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import org.dllearner.core.owl.Description; import org.dllearner.core.owl.NamedClass; import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.ui.GraphicalCoveragePanel; -import org.dllearner.tools.ore.ui.MarkableTable; +import org.dllearner.tools.ore.ui.MarkableClassesTable; import org.dllearner.tools.ore.ui.SelectableClassExpressionsTable; public class AutoLearnPanel extends JPanel { @@ -35,7 +35,7 @@ private static final long serialVersionUID = -5204979906041331328L; // private ClassesTable classesTable; - private MarkableTable classesTable; + private MarkableClassesTable classesTable; private JPanel superPanel; private JPanel equivalentPanel; @@ -71,7 +71,7 @@ } private JComponent createClassesPanel(){ - classesTable = new MarkableTable(); + classesTable = new MarkableClassesTable(); classesTable.setBorder(null); JScrollPane classesScroll = new JScrollPane(classesTable); classesScroll.setBorder(new MatteBorder(null)); @@ -187,10 +187,10 @@ classesTable.clear(); } - public List<Description> getSelectedDescriptions(){ - List<Description> selected = new ArrayList<Description>(); - selected.addAll(equivalentClassResultsTable.getSelecetdDescriptions()); - selected.addAll(superClassResultsTable.getSelecetdDescriptions()); + public List<EvaluatedDescriptionClass> getSelectedDescriptions(){ + List<EvaluatedDescriptionClass> selected = new ArrayList<EvaluatedDescriptionClass>(); + selected.addAll(equivalentClassResultsTable.getSelectedDescriptions()); + selected.addAll(superClassResultsTable.getSelectedDescriptions()); return selected; } @@ -202,7 +202,7 @@ if (!e.getValueIsAdjusting() && equivalentClassResultsTable.getSelectedRow() >= 0){ EvaluatedDescriptionClass selectedClassExpression = equivalentClassResultsTable.getSelectedValue(); - + OREManager.getInstance().setNewClassDescription(selectedClassExpression); equivalentClassCoveragePanel.setNewClassDescription(selectedClassExpression); if(!selectedClassExpression.isConsistent()){ equivalentInconsistencyLabel.setText(INCONSISTENCY_WARNING); @@ -222,7 +222,7 @@ if (!e.getValueIsAdjusting() && superClassResultsTable.getSelectedRow() >= 0){ EvaluatedDescriptionClass selectedClassExpression = superClassResultsTable.getSelectedValue(); - + OREManager.getInstance().setNewClassDescription(selectedClassExpression); superClassCoveragePanel.setNewClassDescription(selectedClassExpression); if(!selectedClassExpression.isConsistent()){ superInconsistencyLabel.setText(INCONSISTENCY_WARNING); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java 2009-10-03 11:29:04 UTC (rev 1876) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java 2009-10-04 11:54:44 UTC (rev 1877) @@ -20,6 +20,7 @@ package org.dllearner.tools.ore.ui.wizard.panels; +import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; @@ -27,6 +28,7 @@ import java.awt.event.MouseListener; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; @@ -34,6 +36,7 @@ import javax.swing.event.ListSelectionListener; import org.dllearner.tools.ore.ui.IndividualsTable; +import org.dllearner.tools.ore.ui.MarkableClassExpressionsTable; /** * JPanel for repairing action. @@ -44,40 +47,82 @@ private static final long serialVersionUID = -7411197973240429632L; - private JPanel posPanel; - private JScrollPane posScrollPane; private IndividualsTable posTable; private JButton posRepairButton; private JButton posDeleteButton; private JButton posRemoveButton; - private JPanel negPanel; - private JScrollPane negScrollPane; private IndividualsTable negTable; private JButton negRepairButton; private JButton negDeleteButton; private JButton negAddButton; - private GridBagConstraints c; + private JButton nextButton; + private MarkableClassExpressionsTable descriptionsTable; public RepairPanel() { - createUI(); + setLayout(new GridBagLayout()); + createAutoUI(); } - private void createUI(){ - setLayout(new GridBagLayout()); - c = new GridBagConstraints(); + private void createAutoUI(){ + GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; + c.gridx = 0; + c.gridy = 0; + c.gridwidth = GridBagConstraints.REMAINDER; + add(createDescriptionsPanel(), c); + + c.gridwidth = 1; + c.gridy = 1; + c.gridx = 0; c.weightx = 0.5; c.weighty = 0.5; - createPosPanel(); + add(createPosPanel(), c); c.gridx = 1; - createNegPanel(); + add(createNegPanel(), c); + + c.gridy = 2; + nextButton = new JButton("Next"); + nextButton.setActionCommand("next"); + add(nextButton, c); } - private void createPosPanel(){ - posPanel = new JPanel(); + private void createManualUI(){ + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.BOTH; + c.gridx = 0; + c.gridy = 0; + c.gridwidth = GridBagConstraints.REMAINDER; + add(createDescriptionsPanel(), c); + + c.gridwidth = 1; + c.gridy = 1; + c.gridx = 0; + c.weightx = 0.5; + c.weighty = 0.5; + add(createPosPanel(), c); + c.gridx = 1; + add(createNegPanel(), c); + + c.gridy = 2; + nextButton = new JButton("Next"); + nextButton.setActionCommand("next"); +// add(nextButton, c); + } + + private JComponent createDescriptionsPanel(){ + JPanel panel = new JPanel(new BorderLayout()); + descriptionsTable = new MarkableClassExpressionsTable(); + JScrollPane scroll = new JScrollPane(descriptionsTable); + scroll.setBorder(null); + panel.add(scroll); + return panel; + } + + private JComponent createPosPanel(){ + JPanel posPanel = new JPanel(); posPanel.setName("positive"); posPanel.setLayout(new GridBagLayout()); posPanel.setBorder(new TitledBorder("Positive examples")); @@ -100,17 +145,16 @@ posPanel.add(buttonPanel, gbc); posTable = new IndividualsTable(); - posScrollPane = new JScrollPane(posTable); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1; gbc.weighty = 1; - posPanel.add(posScrollPane, gbc); + posPanel.add(new JScrollPane(posTable), gbc); - add(posPanel, c); + return posPanel; } - private void createNegPanel(){ - negPanel = new JPanel(); + private JComponent createNegPanel(){ + JPanel negPanel = new JPanel(); negPanel.setName("negative"); negPanel.setLayout(new GridBagLayout()); negPanel.setBorder(new TitledBorder("Negative examples")); @@ -118,11 +162,10 @@ GridBagConstraints gbc = new GridBagConstraints(); negTable = new IndividualsTable(); - negScrollPane = new JScrollPane(negTable); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1; gbc.weighty = 1; - negPanel.add(negScrollPane, gbc); + negPanel.add(new JScrollPane(negTable), gbc); JPanel buttonPanel = new JPanel(); buttonPanel.setName("negative"); @@ -142,7 +185,7 @@ gbc.anchor = GridBagConstraints.NORTH; negPanel.add(buttonPanel, gbc); - add(negPanel, c); + return negPanel; } /** @@ -161,6 +204,20 @@ return negTable; } + public void setNextButtonEnabled(boolean enabled){ + nextButton.setEnabled(enabled); + } + + public void setManualStyle(boolean value){ + removeAll(); + if(value){ + createManualUI(); + } else { + createAutoUI(); + } + repaint(); + } + /** * adds the list selection listener for lists. * @param l list selection listener @@ -178,9 +235,12 @@ posRemoveButton.addActionListener(aL); posDeleteButton.addActionListener(aL); posRepairButton.addActionListener(aL); + negAddButton.addActionListener(aL); negDeleteButton.addActionListener(aL); negRepairButton.addActionListener(aL); + + nextButton.addActionListener(aL); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-10-08 09:14:01
|
Revision: 1882 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1882&view=rev Author: lorenz_b Date: 2009-10-08 09:13:46 +0000 (Thu, 08 Oct 2009) Log Message: ----------- fixed bug changed some ui parts fixed manchestersyntax rendering Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -294,6 +294,7 @@ reasoner = OREManager.getInstance().getReasoner().getReasoner(); gen = new CachedExplanationGenerator(ontology, reasoner); orderingMap.clear(); + usageChecker = new AxiomUsageChecker(ontology); } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.dllearner.core.owl.NamedClass; import org.dllearner.learningproblems.EvaluatedDescriptionClass; public class LearningManager { @@ -16,8 +17,13 @@ private int learnMode = 0; + private NamedClass currentClass2Describe; + private List<EvaluatedDescriptionClass> newDescriptions; + private List<EvaluatedDescriptionClass> equivalentDescriptions; + private List<EvaluatedDescriptionClass> superDescriptions; + private int currentDescriptionIndex = 0; public static LearningManager getInstance(){ @@ -29,6 +35,7 @@ public LearningManager(){ listeners = new ArrayList<LearningManagerListener>(); + newDescriptions = new ArrayList<EvaluatedDescriptionClass>(); } public void setLearningMode(int learningMode){ @@ -42,13 +49,41 @@ public List<EvaluatedDescriptionClass> getNewDescriptions() { return newDescriptions; } + + public void setCurrentClass2Describe(NamedClass nc){ + currentClass2Describe = nc; + } + + public NamedClass getCurrentClass2Describe(){ + return currentClass2Describe; + } - public void setNewDescriptions(List<EvaluatedDescriptionClass> newDescriptions) { - this.newDescriptions = newDescriptions; + public void setNewDescriptions(List<List<EvaluatedDescriptionClass>> descriptions) { + newDescriptions.clear(); + newDescriptions.addAll(descriptions.get(0)); + newDescriptions.addAll(descriptions.get(1)); + equivalentDescriptions = descriptions.get(0); + superDescriptions = descriptions.get(1); currentDescriptionIndex = 0; fireNewDescriptionsAdded(newDescriptions); setNextDescription(); } + + public void addEquivalentDescriptions(List<EvaluatedDescriptionClass> descriptions){ + equivalentDescriptions = descriptions; + } + + public void addSuperDescriptions(List<EvaluatedDescriptionClass> descriptions){ + superDescriptions = descriptions; + } + + public boolean isEquivalentDescription(EvaluatedDescriptionClass desc){ + return equivalentDescriptions.contains(desc); + } + + public boolean isSuperDescription(EvaluatedDescriptionClass desc){ + return superDescriptions.contains(desc); + } public int getCurrentDescriptionIndex() { return currentDescriptionIndex; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -70,6 +70,8 @@ private List<OREManagerListener> listeners; private OntologyModifier modifier; + + private boolean consistentOntology; public OREManager(){ cm = ComponentManager.getInstance(); @@ -160,6 +162,7 @@ prefixes = reasoner.getPrefixes(); modifier = new OntologyModifier(reasoner); fireActiveOntologyChanged(); + consistentOntology = reasoner.isConsistent(); } public void loadOntology() throws OWLOntologyCreationException, URISyntaxException{ @@ -179,7 +182,7 @@ } public boolean consistentOntology() throws InconsistentOntologyException{ - return reasoner.isConsistent(); + return consistentOntology; } public PelletReasoner getReasoner(){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -24,10 +24,7 @@ import org.semanticweb.owl.model.OWLSubClassAxiom; import org.semanticweb.owl.model.RemoveAxiom; -import uk.ac.manchester.cs.owl.modularity.ModuleType; - import com.clarkparsia.modularity.IncrementalClassifier; -import com.clarkparsia.modularity.ModularityUtils; public class LostEntailmentsChecker { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -58,6 +58,7 @@ if(strikeOutIrrelevantParts){ return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root, laconicExplanation); } else { +// return new ManchesterRenderer(OREManager.getInstance().getReasoner().getOWLOntologyManager()).render(ax, null); return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root); } } else if(columnIndex == 1){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -44,7 +44,7 @@ setRowHeightEnabled(true); getColumnModel().getColumn(1).setCellRenderer(new MultiLineTableCellRenderer()); setRowHeight(getRowHeight() + 5); - getColumn(0).setMaxWidth(50); + getColumn(0).setMaxWidth(60); getColumn(2).setMaxWidth(60); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -85,7 +85,7 @@ return "Lost"; } else { - return "Added"; + return "Retained"; } } else if(columnIndex == 1){ Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -0,0 +1,1268 @@ +package org.dllearner.tools.ore.ui; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.protege.editor.owl.model.OWLModelManager; +import org.protege.editor.owl.ui.renderer.OWLEntityRenderer; +import org.protege.editor.owl.ui.renderer.OWLObjectRendererImpl; +import org.protege.editor.owl.ui.renderer.OWLRendererPreferences; +import org.semanticweb.owl.model.OWLAntiSymmetricObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLAxiomAnnotationAxiom; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLClassAssertionAxiom; +import org.semanticweb.owl.model.OWLConstant; +import org.semanticweb.owl.model.OWLConstantAnnotation; +import org.semanticweb.owl.model.OWLDataAllRestriction; +import org.semanticweb.owl.model.OWLDataCardinalityRestriction; +import org.semanticweb.owl.model.OWLDataComplementOf; +import org.semanticweb.owl.model.OWLDataExactCardinalityRestriction; +import org.semanticweb.owl.model.OWLDataMaxCardinalityRestriction; +import org.semanticweb.owl.model.OWLDataMinCardinalityRestriction; +import org.semanticweb.owl.model.OWLDataOneOf; +import org.semanticweb.owl.model.OWLDataProperty; +import org.semanticweb.owl.model.OWLDataPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLDataPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLDataPropertyExpression; +import org.semanticweb.owl.model.OWLDataPropertyRangeAxiom; +import org.semanticweb.owl.model.OWLDataRange; +import org.semanticweb.owl.model.OWLDataRangeFacetRestriction; +import org.semanticweb.owl.model.OWLDataRangeRestriction; +import org.semanticweb.owl.model.OWLDataSomeRestriction; +import org.semanticweb.owl.model.OWLDataSubPropertyAxiom; +import org.semanticweb.owl.model.OWLDataType; +import org.semanticweb.owl.model.OWLDataValueRestriction; +import org.semanticweb.owl.model.OWLDataVisitor; +import org.semanticweb.owl.model.OWLDeclarationAxiom; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLDifferentIndividualsAxiom; +import org.semanticweb.owl.model.OWLDisjointClassesAxiom; +import org.semanticweb.owl.model.OWLDisjointDataPropertiesAxiom; +import org.semanticweb.owl.model.OWLDisjointObjectPropertiesAxiom; +import org.semanticweb.owl.model.OWLDisjointUnionAxiom; +import org.semanticweb.owl.model.OWLEntity; +import org.semanticweb.owl.model.OWLEntityAnnotationAxiom; +import org.semanticweb.owl.model.OWLEquivalentClassesAxiom; +import org.semanticweb.owl.model.OWLEquivalentDataPropertiesAxiom; +import org.semanticweb.owl.model.OWLEquivalentObjectPropertiesAxiom; +import org.semanticweb.owl.model.OWLFunctionalDataPropertyAxiom; +import org.semanticweb.owl.model.OWLFunctionalObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLImportsDeclaration; +import org.semanticweb.owl.model.OWLIndividual; +import org.semanticweb.owl.model.OWLInverseFunctionalObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLInverseObjectPropertiesAxiom; +import org.semanticweb.owl.model.OWLIrreflexiveObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLNegativeDataPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLNegativeObjectPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLObject; +import org.semanticweb.owl.model.OWLObjectAllRestriction; +import org.semanticweb.owl.model.OWLObjectAnnotation; +import org.semanticweb.owl.model.OWLObjectCardinalityRestriction; +import org.semanticweb.owl.model.OWLObjectComplementOf; +import org.semanticweb.owl.model.OWLObjectExactCardinalityRestriction; +import org.semanticweb.owl.model.OWLObjectIntersectionOf; +import org.semanticweb.owl.model.OWLObjectMaxCardinalityRestriction; +import org.semanticweb.owl.model.OWLObjectMinCardinalityRestriction; +import org.semanticweb.owl.model.OWLObjectOneOf; +import org.semanticweb.owl.model.OWLObjectProperty; +import org.semanticweb.owl.model.OWLObjectPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyChainSubPropertyAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyExpression; +import org.semanticweb.owl.model.OWLObjectPropertyInverse; +import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; +import org.semanticweb.owl.model.OWLObjectSelfRestriction; +import org.semanticweb.owl.model.OWLObjectSomeRestriction; +import org.semanticweb.owl.model.OWLObjectSubPropertyAxiom; +import org.semanticweb.owl.model.OWLObjectUnionOf; +import org.semanticweb.owl.model.OWLObjectValueRestriction; +import org.semanticweb.owl.model.OWLObjectVisitor; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyAnnotationAxiom; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.OWLReflexiveObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLRestriction; +import org.semanticweb.owl.model.OWLSameIndividualsAxiom; +import org.semanticweb.owl.model.OWLSubClassAxiom; +import org.semanticweb.owl.model.OWLSymmetricObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLTransitiveObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLTypedConstant; +import org.semanticweb.owl.model.OWLUntypedConstant; +import org.semanticweb.owl.model.SWRLAtom; +import org.semanticweb.owl.model.SWRLAtomConstantObject; +import org.semanticweb.owl.model.SWRLAtomDObject; +import org.semanticweb.owl.model.SWRLAtomDVariable; +import org.semanticweb.owl.model.SWRLAtomIVariable; +import org.semanticweb.owl.model.SWRLAtomIndividualObject; +import org.semanticweb.owl.model.SWRLBuiltInAtom; +import org.semanticweb.owl.model.SWRLClassAtom; +import org.semanticweb.owl.model.SWRLDataRangeAtom; +import org.semanticweb.owl.model.SWRLDataValuedPropertyAtom; +import org.semanticweb.owl.model.SWRLDifferentFromAtom; +import org.semanticweb.owl.model.SWRLObjectPropertyAtom; +import org.semanticweb.owl.model.SWRLRule; +import org.semanticweb.owl.model.SWRLSameAsAtom; +import org.semanticweb.owl.util.OWLDescriptionComparator; +import org.semanticweb.owl.util.OWLDescriptionVisitorAdapter; +import org.semanticweb.owl.util.ShortFormProvider; +import org.semanticweb.owl.util.SimpleShortFormProvider; +import org.semanticweb.owl.vocab.OWLRestrictedDataRangeFacetVocabulary; +import org.semanticweb.owl.vocab.XSDVocabulary; + +public class ManchesterRenderer implements OWLObjectVisitor{ + private static final Logger logger = Logger.getLogger(OWLObjectRendererImpl.class); + + private OWLOntologyManager owlModelManager; + + private StringBuilder buffer; + + private BracketWriter bracketWriter; + + private Map<OWLRestrictedDataRangeFacetVocabulary, String> facetMap; + + private Map<URI, Boolean> simpleRenderDatatypes; + + private OWLObject focusedObject; + + private OWLEntityRenderer entityRenderer; + + private ShortFormProvider shortFomProvider; + + private OWLDescriptionComparator comparator = new OWLDescriptionComparator(shortFomProvider); + + + public ManchesterRenderer(OWLOntologyManager manager) { + this.owlModelManager = manager; + buffer = new StringBuilder(); + bracketWriter = new BracketWriter(); + facetMap = new HashMap<OWLRestrictedDataRangeFacetVocabulary, String>(); + facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MIN_EXCLUSIVE, ">"); + facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MAX_EXCLUSIVE, "<"); + facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MIN_INCLUSIVE, ">="); + facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MAX_INCLUSIVE, "<="); + simpleRenderDatatypes = new HashMap<URI, Boolean>(); + simpleRenderDatatypes.put(XSDVocabulary.INT.getURI(), false); + simpleRenderDatatypes.put(XSDVocabulary.FLOAT.getURI(), false); + simpleRenderDatatypes.put(XSDVocabulary.DOUBLE.getURI(), false); + simpleRenderDatatypes.put(XSDVocabulary.STRING.getURI(), true); + simpleRenderDatatypes.put(XSDVocabulary.BOOLEAN.getURI(), false); + + shortFomProvider = new SimpleShortFormProvider(); + } + + + public void setup(OWLModelManager owlModelManager) { + } + + + public void initialise() { + } + + + public void dispose() { + } + + + public OWLObject getFocusedObject() { + return focusedObject; + } + + +// public void setFocusedObject(OWLObject focusedObject) { +// this.focusedObject = focusedObject; +// if(focusedObject instanceof OWLDescription) { +// comparator.setFocusedDescription((OWLDescription) focusedObject); +// } +// } + + + protected String getAndKeyWord() { + return "and"; + } + + + protected String getOrKeyWord() { + return "or"; + } + + + protected String getNotKeyWord() { + return " not"; + } + + + protected String getSomeKeyWord() { + return "some"; + } + + + protected String getAllKeyWord() { + return "only"; + } + + + protected String getValueKeyWord() { + return "value"; + } + + + protected String getMinKeyWord() { + return "min"; + } + + + protected String getMaxKeyWord() { + return "max"; + } + + + protected String getExactlyKeyWord() { + return "exactly"; + } + + + public String render(OWLObject object, OWLEntityRenderer entityRenderer) { + reset(); + this.entityRenderer = entityRenderer; + try { + object.accept(this); + return buffer.toString(); + } + catch (Exception e) {e.printStackTrace(); + return "<Error! " + e.getMessage() + ">"; + } + } + + + protected String getRendering(OWLEntity entity) { + if (entityRenderer != null){ + return entityRenderer.render(entity); + } + return shortFomProvider.getShortForm(entity); + } + + + int lastNewLineIndex = 0; + + int currentIndex = 0; + + + protected void write(String s) { + int index = s.indexOf('\n'); + if (index != -1) { + lastNewLineIndex = currentIndex + index; + } + currentIndex = currentIndex + s.length(); + buffer.append(s); + } + + + protected int getIndent() { + return currentIndex - lastNewLineIndex; + } + + + protected void insertIndent(int indent) { + for (int i = 0; i < indent; i++) { + write(" "); + } + } + + + protected void writeAndKeyword() { + write(getAndKeyWord()); + write(" "); + } + + + public void reset() { + lastNewLineIndex = 0; + currentIndex = 0; + buffer = new StringBuilder(); + } + + + public String getText() { + return buffer.toString(); + } + + + + + + private List<OWLDescription> sort(Set<OWLDescription> descriptions) { + List<OWLDescription> sortedDescs = new ArrayList<OWLDescription>(descriptions); + Collections.sort(sortedDescs); + return sortedDescs; + } + + + public void visit(OWLObjectIntersectionOf node) { + + int indent = getIndent(); + List<OWLDescription> ops = sort(node.getOperands()); + for (int i = 0; i < ops.size(); i++) { + OWLDescription curOp = ops.get(i); + curOp.accept(this); + if (i < ops.size() - 1) { + write("\n"); + insertIndent(indent); + if (curOp instanceof OWLClass && ops.get(i + 1) instanceof OWLRestriction && OWLRendererPreferences.getInstance().isUseThatKeyword()) { + write("that "); + } + else { + writeAndKeyword(); + } + } + } + } + + + public void visit(OWLTypedConstant node) { + if (simpleRenderDatatypes.containsKey(node.getDataType().getURI())) { + boolean renderQuotes = simpleRenderDatatypes.get(node.getDataType().getURI()); + if (renderQuotes) { + write("\""); + } + write(node.getLiteral()); + if (renderQuotes) { + write("\""); + } + } + else { + write("\""); + write(node.getLiteral()); + write("\"^^"); + node.getDataType().accept(this); + } + } + + + public void visit(OWLUntypedConstant node) { + write("\""); + write(node.getLiteral()); + write("\""); + if (node.hasLang()) { + write("@"); + write(node.getLang()); + } + } + + + public void visit(OWLDataType node) { + write(getRendering(node)); + } + + + public void visit(OWLDataOneOf node) { + write("{"); + for (Iterator<OWLConstant> it = node.getValues().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(", "); + } + } + write("}"); + } + + + public void visit(OWLDataRangeRestriction node) { +// writeOpenBracket(node); + node.getDataRange().accept(this); + write("["); + for (Iterator<OWLDataRangeFacetRestriction> it = node.getFacetRestrictions().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(", "); + } + } + write("]"); +// writeCloseBracket(node); + } + + + public void visit(OWLDataComplementOf owlDataComplementOf) { + write("not("); + owlDataComplementOf.getDataRange().accept(this); + write(")"); + } + + + public void visit(OWLDataRangeFacetRestriction node) { + String rendering = facetMap.get(node.getFacet()); + if (rendering == null) { + rendering = node.getFacet().getShortName(); + } + write(rendering); + write(" "); + node.getFacetValue().accept(this); + } + + + public void visit(OWLObjectSelfRestriction desc) { + desc.getProperty().accept(this); + write(" "); + write(getSomeKeyWord()); + write(" Self"); + } + + + public void visit(OWLDataAllRestriction node) { + node.getProperty().accept(this); + write(" "); + write(getAllKeyWord()); + write(" "); + node.getFiller().accept(this); + } + + + public void visit(OWLDataProperty node) { + write(getRendering(node)); + } + + + public void visit(OWLDataSomeRestriction node) { + node.getProperty().accept(this); + write(" "); + write(getSomeKeyWord()); + write(" "); + node.getFiller().accept(this); + } + + + public void visit(OWLDataValueRestriction node) { + node.getProperty().accept(this); + write(" "); + write(getValueKeyWord()); + write(" "); + node.getValue().accept(this); + } + + + public void visit(OWLIndividual node) { + if (node.isAnonymous()) { + write("Anonymous : ["); + for (OWLOntology ont : owlModelManager.getOntologies()) { + for (OWLDescription desc : node.getTypes(ont)) { + write(" "); + desc.accept(this); + } + } + write(" ]"); + } + else { + write(getRendering(node)); + } + } + + + public void visit(OWLObjectAllRestriction node) { + node.getProperty().accept(this); + write(" "); + write(getAllKeyWord()); + write(" "); + writeOpenBracket(node.getFiller()); + node.getFiller().accept(this); + writeCloseBracket(node.getFiller()); + } + + + public void visit(OWLObjectMinCardinalityRestriction desc) { + writeCardinality(desc, getMinKeyWord()); + } + + + public void visit(OWLObjectExactCardinalityRestriction desc) { + writeCardinality(desc, getExactlyKeyWord()); + } + + + public void visit(OWLObjectMaxCardinalityRestriction desc) { + writeCardinality(desc, getMaxKeyWord()); + } + + + private void writeCardinality(OWLObjectCardinalityRestriction desc, String keyword) { + desc.getProperty().accept(this); + write(" "); + write(keyword); + write(" "); + write(Integer.toString(desc.getCardinality())); + write(" "); + writeOpenBracket(desc.getFiller()); + desc.getFiller().accept(this); + writeCloseBracket(desc.getFiller()); + } + + + public void visit(OWLDataMinCardinalityRestriction desc) { + writeCardinality(desc, getMinKeyWord()); + } + + + public void visit(OWLDataExactCardinalityRestriction desc) { + writeCardinality(desc, getExactlyKeyWord()); + } + + + public void visit(OWLDataMaxCardinalityRestriction desc) { + writeCardinality(desc, getMaxKeyWord()); + } + + + private void writeCardinality(OWLDataCardinalityRestriction desc, String keyword) { + desc.getProperty().accept(this); + write(" "); + write(keyword); + write(" "); + write(Integer.toString(desc.getCardinality())); + write(" "); + writeOpenBracket(desc.getFiller()); + desc.getFiller().accept(this); + writeCloseBracket(desc.getFiller()); + } + + + public void visit(OWLObjectProperty node) { + write(getRendering(node)); + } + + + public void visit(OWLObjectSomeRestriction node) { + node.getProperty().accept(this); + write(" "); + write(getSomeKeyWord()); + write(" "); + writeOpenBracket(node.getFiller()); + node.getFiller().accept(this); + writeCloseBracket(node.getFiller()); + } + + + public void visit(OWLObjectValueRestriction node) { + node.getProperty().accept(this); + write(" "); + write(getValueKeyWord()); + write(" "); + node.getValue().accept(this); + } + + + public void visit(OWLObjectComplementOf node) { + writeNotKeyword(); + write(" "); + writeOpenBracket(node.getOperand()); + node.getOperand().accept(this); + writeCloseBracket(node.getOperand()); + } + + + protected void writeNotKeyword() { + write(getNotKeyWord()); + } + + + public void visit(OWLObjectUnionOf node) { + int indent = getIndent(); + for (Iterator<OWLDescription> it = sort(node.getOperands()).iterator(); it.hasNext();) { + OWLDescription curOp = it.next(); + writeOpenBracket(curOp); + curOp.accept(this); + writeCloseBracket(curOp); + if (it.hasNext()) { + write("\n"); + insertIndent(indent); + writeOrKeyword(); + } + } + } + + + private void writeOrKeyword() { + write(getOrKeyWord()); + write(" "); + } + + + public void visit(OWLClass node) { + write(getRendering(node)); + } + + + public void visit(OWLObjectPropertyInverse property) { + write("inv("); + property.getInverse().accept(this); + write(")"); + } + + + public void visit(OWLObjectOneOf node) { + write("{"); + for (Iterator<OWLIndividual> it = node.getIndividuals().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(", "); + } + } + write("}"); + } + + + public void visit(OWLDisjointClassesAxiom node) { + for (Iterator<OWLDescription> it = sort(node.getDescriptions()).iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" disjointWith "); + } + } + } + + + public void visit(OWLEquivalentClassesAxiom node) { + List<OWLDescription> orderedDescs = sort(node.getDescriptions()); + for(Iterator<OWLDescription> it = orderedDescs.iterator(); it.hasNext(); ) { + OWLDescription desc = it.next(); + if(orderedDescs.get(0).isOWLNothing()) { + it.remove(); + orderedDescs.add(desc); + break; + } + } + + for (Iterator<OWLDescription> it = orderedDescs.iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" equivalentTo "); + } + } + } + + + public void visit(OWLSubClassAxiom node) { + node.getSubClass().accept(this); + write(" subClassOf "); + node.getSuperClass().accept(this); + } + + + public void visit(OWLFunctionalObjectPropertyAxiom axiom) { + write("Functional: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) { + write("InverseFunctional: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { + write("Irreflexive: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLDataSubPropertyAxiom axiom) { + axiom.getSubProperty().accept(this); + write(" subPropertyOf "); + axiom.getSuperProperty().accept(this); + } + + + public void visit(OWLReflexiveObjectPropertyAxiom axiom) { + write("Reflexive: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLSymmetricObjectPropertyAxiom axiom) { + write("Symmetric: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLTransitiveObjectPropertyAxiom axiom) { + write("Transitive: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLObjectPropertyDomainAxiom axiom) { + if (!OWLRendererPreferences.getInstance().isRenderDomainAxiomsAsGCIs()) { + axiom.getProperty().accept(this); + write(" domain "); + axiom.getDomain().accept(this); + } + else { + axiom.getProperty().accept(this); + write(" some "); + owlModelManager.getOWLDataFactory().getOWLThing().accept(this); + write(" subClassOf "); + axiom.getDomain().accept(this); + } + } + + + public void visit(OWLEquivalentObjectPropertiesAxiom node) { + for (Iterator<OWLObjectPropertyExpression> it = node.getProperties().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" equivalentTo "); + } + } + } + + + public void visit(OWLObjectPropertyRangeAxiom axiom) { + axiom.getProperty().accept(this); + write(" range "); + axiom.getRange().accept(this); + } + + + public void visit(OWLClassAssertionAxiom axiom) { + axiom.getIndividual().accept(this); + write(" types "); + axiom.getDescription().accept(this); + } + + + public void visit(OWLFunctionalDataPropertyAxiom axiom) { + write("Functional: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLEquivalentDataPropertiesAxiom node) { + for (Iterator<OWLDataPropertyExpression> it = node.getProperties().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" equivalentTo "); + } + } + } + + + public void visit(OWLSameIndividualsAxiom axiom) { + write("SameIndividuals: ["); + for (Iterator<OWLIndividual> it = axiom.getIndividuals().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(", "); + } + } + write("]"); + } + + + public void visit(OWLDifferentIndividualsAxiom axiom) { + write("DifferentIndividuals: ["); + for (Iterator<OWLIndividual> it = axiom.getIndividuals().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(", "); + } + } + write("]"); + } + + + public void visit(OWLDisjointDataPropertiesAxiom axiom) { + for (Iterator<OWLDataPropertyExpression> it = axiom.getProperties().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" disjointWith "); + } + } + } + + + public void visit(OWLDisjointObjectPropertiesAxiom axiom) { + for (Iterator<OWLObjectPropertyExpression> it = axiom.getProperties().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" disjointWith "); + } + } + } + + + public void visit(OWLObjectPropertyAssertionAxiom axiom) { + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + } + + + public void visit(OWLDataPropertyAssertionAxiom axiom) { + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + } + + + public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) { + write("not("); + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + write(")"); + } + + + public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom) { + write("not("); + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + write(")"); + } + + + public void visit(OWLInverseObjectPropertiesAxiom axiom) { + axiom.getFirstProperty().accept(this); + write(" inverseOf "); + axiom.getSecondProperty().accept(this); + } + + + public void visit(OWLAntiSymmetricObjectPropertyAxiom axiom) { + write("AntiSymmetric: "); + axiom.getProperty().accept(this); + } + + + public void visit(OWLDataPropertyDomainAxiom axiom) { + axiom.getProperty().accept(this); + write(" domain "); + axiom.getDomain().accept(this); + } + + + public void visit(OWLDataPropertyRangeAxiom axiom) { + axiom.getProperty().accept(this); + write(" range "); + axiom.getRange().accept(this); + } + + + public void visit(OWLObjectSubPropertyAxiom axiom) { + axiom.getSubProperty().accept(this); + write(" subPropertyOf "); + axiom.getSuperProperty().accept(this); + } + + + public void visit(OWLDisjointUnionAxiom axiom) { + axiom.getOWLClass().accept(this); + write(" disjointUnionOf "); + write("["); + int indent = getIndent(); + for (Iterator<OWLDescription> it = axiom.getDescriptions().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write("\n"); + insertIndent(indent); + } + } + write("]"); + } + + + public void visit(OWLDeclarationAxiom axiom) { + OWLEntity entity = axiom.getEntity(); + if (entity.isOWLClass()){ + write("Class("); + } + else if (entity.isOWLObjectProperty()){ + write("Object property("); + } + else if (entity.isOWLDataProperty()){ + write("Data property("); + } + else if (entity.isOWLIndividual()){ + write("Individual("); + } + else{ + write("("); + } + entity.accept(this); + write(")"); + } + + + public void visit(OWLImportsDeclaration axiom) { + writeOntologyURI(axiom.getImportedOntologyURI()); + if (owlModelManager.getImportedOntology(axiom) == null) { + write(" (Not Loaded)"); + } + } + + + public void visit(OWLAxiomAnnotationAxiom axiom) { + axiom.getSubject().accept(this); + write(" "); + axiom.getAnnotation().accept(this); + } + + + private void writeOpenBracket(OWLDescription description) { + description.accept(bracketWriter); + if (bracketWriter.writeBrackets()) { + write("("); + } + } + + + private void writeOpenBracket(OWLDataRange dataRange) { + dataRange.accept(bracketWriter); + if (bracketWriter.writeBrackets()) { + write("("); + } + } + + + private void writeCloseBracket(OWLDescription description) { + description.accept(bracketWriter); + if (bracketWriter.writeBrackets()) { + write(")"); + } + } + + + private void writeCloseBracket(OWLDataRange dataRange) { + dataRange.accept(bracketWriter); + if (bracketWriter.writeBrackets()) { + write(")"); + } + } + + + public void visit(OWLOntology ontology) { + writeOntologyURI(ontology.getURI()); + } + + + public void visit(OWLObjectPropertyChainSubPropertyAxiom axiom) { + for (Iterator<OWLObjectPropertyExpression> it = axiom.getPropertyChain().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" o "); + } + } + write(" \u279E "); + axiom.getSuperProperty().accept(this); + } + + + public void visit(OWLConstantAnnotation annotation) { + write(annotation.getAnnotationURI().getFragment()); + write(" "); + write(annotation.getAnnotationValue().toString()); + } + + + public void visit(SWRLRule swrlRule) { + for (Iterator<SWRLAtom> it = swrlRule.getBody().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" , "); + } + } + write(" -> "); + for (Iterator<SWRLAtom> it = swrlRule.getHead().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" \u2227 "); + } + } + } + + + public void visit(OWLEntityAnnotationAxiom owlEntityAnnotationAxiom) { + owlEntityAnnotationAxiom.getSubject().accept(this); + write(" "); + owlEntityAnnotationAxiom.getAnnotation().accept(this); + } + + + public void visit(OWLOntologyAnnotationAxiom axiom) { + axiom.getSubject().accept(this); + write(" "); + axiom.getAnnotation().accept(this); + } + + + public void visit(OWLObjectAnnotation owlObjectAnnotation) { + write(owlObjectAnnotation.getAnnotationURI().getFragment()); + write(" "); + owlObjectAnnotation.getAnnotationValue().accept(this); + } + + + public void visit(SWRLClassAtom swrlClassAtom) { + OWLDescription desc = swrlClassAtom.getPredicate(); + if (desc.isAnonymous()) { + write("("); + } + desc.accept(this); + if (desc.isAnonymous()) { + write(")"); + } + write("("); + swrlClassAtom.getArgument().accept(this); + write(")"); + } + + + public void visit(SWRLDataRangeAtom swrlDataRangeAtom) { + swrlDataRangeAtom.getPredicate().accept(this); + write("("); + swrlDataRangeAtom.getArgument().accept(this); + write(")"); + } + + + public void visit(SWRLObjectPropertyAtom swrlObjectPropertyAtom) { + swrlObjectPropertyAtom.getPredicate().accept(this); + write("("); + swrlObjectPropertyAtom.getFirstArgument().accept(this); + write(", "); + swrlObjectPropertyAtom.getSecondArgument().accept(this); + write(")"); + } + + + public void visit(SWRLDataValuedPropertyAtom swrlDataValuedPropertyAtom) { + swrlDataValuedPropertyAtom.getPredicate().accept(this); + write("("); + swrlDataValuedPropertyAtom.getFirstArgument().accept(this); + write(", "); + swrlDataValuedPropertyAtom.getSecondArgument().accept(this); + write(")"); + } + + + public void visit(SWRLBuiltInAtom swrlBuiltInAtom) { + write(swrlBuiltInAtom.getPredicate().getShortName()); + write("("); + Iterator<SWRLAtomDObject> it = swrlBuiltInAtom.getArguments().iterator(); + while (it.hasNext()) { + SWRLAtomDObject argument = it.next(); + argument.accept(this); + if (it.hasNext()) { + write(", "); + } + } + write(")"); + } + + + public void visit(SWRLAtomDVariable swrlAtomDVariable) { + write("?"); + write(swrlAtomDVariable.getURI().getFragment()); + } + + + public void visit(SWRLAtomIVariable swrlAtomIVariable) { + write("?"); + write(swrlAtomIVariable.getURI().getFragment()); + } + + + public void visit(SWRLAtomIndividualObject swrlAtomIndividualObject) { + swrlAtomIndividualObject.getIndividual().accept(this); + } + + + public void visit(SWRLAtomConstantObject swrlAtomConstantObject) { + swrlAtomConstantObject.getConstant().accept(this); + } + + + public void visit(SWRLDifferentFromAtom swrlDifferentFromAtom) { + swrlDifferentFromAtom.getPredicate().accept(this); + write("("); + swrlDifferentFromAtom.getFirstArgument().accept(this); + write(", "); + swrlDifferentFromAtom.getSecondArgument().accept(this); + write(")"); + } + + + public void visit(SWRLSameAsAtom swrlSameAsAtom) { + swrlSameAsAtom.getPredicate().accept(this); + write("("); + swrlSameAsAtom.getFirstArgument().accept(this); + write(", "); + swrlSameAsAtom.getSecondArgument().accept(this); + write(")"); + } + + + private void writeOntologyURI(URI uri) { + String shortName = uri.getFragment();//owlModelManager.getURIRendering(uri); + if (shortName != null) { + write(shortName); + write(" ("); + write(uri.toString()); + write(")"); + } + else { + write(uri.toString()); + } + } + + + private class BracketWriter extends OWLDescriptionVisitorAdapter implements OWLDataVisitor { + + boolean nested = false; + + + public boolean writeBrackets() { + return nested; + } + + + public void visit(OWLObjectIntersectionOf owlAnd) { + nested = true; + } + + + public void visit(OWLDataAllRestriction owlDataAllRestriction) { + nested = true; + } + + + public void visit(OWLDataSomeRestriction owlDataSomeRestriction) { + nested = true; + } + + + public void visit(OWLDataValueRestriction owlDataValueRestriction) { + nested = true; + } + + + public void visit(OWLObjectAllRestriction owlObjectAllRestriction) { + nested = true; + } + + + public void visit(OWLObjectSomeRestriction owlObjectSomeRestriction) { + nested = true; + } + + + public void visit(OWLObjectValueRestriction owlObjectValueRestriction) { + nested = true; + } + + + public void visit(OWLObjectComplementOf owlNot) { + nested = true; + } + + + public void visit(OWLObjectUnionOf owlOr) { + nested = true; + } + + + public void visit(OWLClass owlClass) { + nested = false; + } + + + public void visit(OWLObjectOneOf owlObjectOneOf) { + nested = false; + } + + + public void visit(OWLObjectMinCardinalityRestriction desc) { + nested = true; + } + + + public void visit(OWLObjectExactCardinalityRestriction desc) { + nested = true; + } + + + public void visit(OWLObjectMaxCardinalityRestriction desc) { + nested = true; + } + + + public void visit(OWLObjectSelfRestriction desc) { + nested = true; + } + + + public void visit(OWLDataMinCardinalityRestriction desc) { + nested = true; + } + + + public void visit(OWLDataExactCardinalityRestriction desc) { + nested = true; + } + + + public void visit(OWLDataMaxCardinalityRestriction desc) { + nested = true; + } + + + public void visit(OWLDataType node) { + nested = false; + } + + + public void visit(OWLDataComplementOf node) { + nested = false; + } + + + public void visit(OWLDataOneOf node) { + nested = false; + } + + + public void visit(OWLDataRangeRestriction node) { + nested = true; + } + + + public void visit(OWLTypedConstant node) { + nested = false; + } + + + public void visit(OWLUntypedConstant node) { + nested = false; + } + + + public void visit(OWLDataRangeFacetRestriction node) { + nested = false; + } + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -25,12 +25,12 @@ static private StringWriter buffer = new StringWriter(); static private TextBlockWriter writer = new TextBlockWriter(buffer); - static private ManchesterSyntaxObjectRenderer renderer = new ManchesterSyntaxObjectRenderer(writer); - +// static private ManchesterSyntaxObjectRenderer renderer = new ManchesterSyntaxObjectRenderer(writer); + static private ManchesterRenderer renderer = new ManchesterRenderer(OREManager.getInstance().getReasoner().getOWLOntologyManager()); public ManchesterSyntaxRenderer(){ - renderer.setWrapLines( false ); - renderer.setSmartIndent( true ); +// renderer.setWrapLines( false ); +// renderer.setSmartIndent( true ); } @@ -73,7 +73,7 @@ public static String render(OWLAxiom value, boolean removed, int depth){ value.accept(renderer); writer.flush(); - String renderedString = buffer.toString(); + String renderedString = renderer.render(value, null);//buffer.toString(); StringTokenizer st = new StringTokenizer(renderedString); StringBuffer bf = new StringBuffer(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTable.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -20,7 +20,7 @@ public MarkableClassExpressionsTable(){ super(new MarkableClassExpressionsTableModel()); - getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); +// getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); getColumn(0).setMaxWidth(30); setTableHeader(null); setBorder(null); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -8,6 +8,10 @@ import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.LearningManagerListener; +import org.dllearner.tools.ore.OREManager; +import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLDataFactory; public class MarkableClassExpressionsTableModel extends AbstractTableModel implements LearningManagerListener{ /** @@ -42,7 +46,17 @@ return ""; } } else { - return descriptions.get(rowIndex).getDescription(); + + OWLDataFactory factory = OREManager.getInstance().getReasoner().getOWLOntologyManager().getOWLDataFactory(); + OWLClass cl = factory.getOWLClass( + OREManager.getInstance().getCurrentClass2Learn().getURI()); + if(LearningManager.getInstance().isEquivalentDescription(descriptions.get(rowIndex))){ + return ManchesterSyntaxRenderer.render(factory.getOWLEquivalentClassesAxiom(cl, + OWLAPIDescriptionConvertVisitor.getOWLDescription(descriptions.get(rowIndex).getDescription())), false, 0); + } else { + return ManchesterSyntaxRenderer.render(factory.getOWLSubClassAxiom(cl, + OWLAPIDescriptionConvertVisitor.getOWLDescription(descriptions.get(rowIndex).getDescription())), false, 0); + } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -38,6 +38,7 @@ import org.dllearner.tools.ore.ui.wizard.descriptors.RepairPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.SavePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.UnsatisfiableExplanationPanelDescriptor; +import org.mindswap.pellet.utils.SetUtils; /** * This class is responsible for reacting to events generated by pushing any of the @@ -172,8 +173,8 @@ } else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(AutoLearnPanelDescriptor.IDENTIFIER)){ AutoLearnPanelDescriptor descriptor = (AutoLearnPanelDescriptor)currentPanelDescriptor; - List<EvaluatedDescriptionClass> descriptions = descriptor.getSelectedDescriptions(); - if(!descriptions.isEmpty()){ + List<List<EvaluatedDescriptionClass>> descriptions = descriptor.getSelectedDescriptions(); + if(!SetUtils.union(descriptions.get(0), descriptions.get(1)).isEmpty()){ LearningManager.getInstance().setNewDescriptions(descriptions); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -25,7 +25,9 @@ import org.dllearner.tools.ore.TaskManager; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.AutoLearnPanel; +import org.mindswap.pellet.utils.SetUtils; + public class AutoLearnPanelDescriptor extends WizardPanelDescriptor implements ActionListener{ /** * Identification string for class choose panel. @@ -65,7 +67,9 @@ @Override public Object getNextPanelDescriptor() { - if(getSelectedDescriptions().isEmpty()){ + List<List<EvaluatedDescriptionClass>> selectedDescriptions = getSelectedDescriptions(); + if(SetUtils.union(selectedDescriptions.get(0), + selectedDescriptions.get(1)).isEmpty()){ return SavePanelDescriptor.IDENTIFIER; } else { return RepairPanelDescriptor.IDENTIFIER; @@ -86,6 +90,7 @@ public void fillClassesTable(){ TaskManager.getInstance().setTaskStarted("Retrieving atomic classes..."); new ClassRetrievingTask().execute(); + autoLearnPanel.setNextButtonEnabled(true); } public void learnEquivalentClassExpressions(){ @@ -113,9 +118,12 @@ OREManager.getInstance().setCurrentClass2Learn(classes.get(currentClassIndex)); learnEquivalentClassExpressions(); currentClassIndex++; + if(currentClassIndex >= classes.size()){ + autoLearnPanel.setNextButtonEnabled(false); + } } - public List<EvaluatedDescriptionClass> getSelectedDescriptions(){ + public List<List<EvaluatedDescriptionClass>> getSelectedDescriptions(){ return autoLearnPanel.getSelectedDescriptions(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -79,21 +79,31 @@ } private JComponent createResultPanel(){ - JPanel resultPanel = new JPanel(new BorderLayout()); + JPanel resultPanel = new JPanel(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + JSplitPane equivSubSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); equivSubSplitPane.setOneTouchExpandable(true); equivSubSplitPane.setDividerLocation(0.5); + equivSubSplitPane.setResizeWeight(0.5); equivSubSplitPane.setTopComponent(createEquivalentPanel()); equivSubSplitPane.setBottomComponent(createSuperPanel()); - + addTableSelectionListeners(); - skipButton = new JButton("Skip"); + skipButton = new JButton("Next class"); skipButton.setActionCommand("skip"); - resultPanel.add(equivSubSplitPane, BorderLayout.CENTER); - resultPanel.add(skipButton, BorderLayout.SOUTH); + c.fill = GridBagConstraints.BOTH; + c.gridwidth = GridBagConstraints.REMAINDER; + c.weightx = 1.0; + c.weighty = 1.0; + resultPanel.add(equivSubSplitPane,c); + c.fill = GridBagConstraints.NONE; + c.weightx = 0.0; + c.weighty = 0.0; + resultPanel.add(skipButton, c); return resultPanel; } @@ -117,7 +127,7 @@ c.gridx = 1; c.gridy = 0; equivalentClassCoveragePanel = new GraphicalCoveragePanel(""); - equivalentPanel.add(equivalentClassCoveragePanel, c); + equivalentPanel.add(new JScrollPane(equivalentClassCoveragePanel), c); equivalentPanel.setBorder(BorderFactory.createTitledBorder("Equivalent class expressions")); c.gridx = 0; @@ -147,7 +157,7 @@ c.gridx = 1; c.gridy = 0; superClassCoveragePanel = new GraphicalCoveragePanel(""); - superPanel.add(superClassCoveragePanel, c); + superPanel.add(new JScrollPane(superClassCoveragePanel), c); superPanel.setBorder(BorderFactory.createTitledBorder("Superclass expressions")); c.gridx = 0; @@ -187,10 +197,15 @@ classesTable.clear(); } - public List<EvaluatedDescriptionClass> getSelectedDescriptions(){ - List<EvaluatedDescriptionClass> selected = new ArrayList<EvaluatedDescriptionClass>(); - selected.addAll(equivalentClassResultsTable.getSelectedDescriptions()); - selected.addAll(superClassResultsTable.getSelectedDescriptions()); + public void setNextButtonEnabled(boolean enabled){ + skipButton.setEnabled(enabled); + } + + public List<List<EvaluatedDescriptionClass>> getSelectedDescriptions(){ + List<List<EvaluatedDescriptionClass>> selected = new ArrayList<List<EvaluatedDescriptionClass>>(); + selected.add(equivalentClassResultsTable.getSelectedDescriptions()); + selected.add(superClassResultsTable.getSelectedDescriptions()); + return selected; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -32,6 +32,7 @@ import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.border.MatteBorder; import javax.swing.border.TitledBorder; import javax.swing.event.ListSelectionListener; @@ -69,11 +70,21 @@ private void createAutoUI(){ GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; + c.weighty = 0.3; + c.weightx = 1.0; c.gridx = 0; c.gridy = 0; - c.gridwidth = GridBagConstraints.REMAINDER; +// c.gridwidth = GridBagConstraints.REMAINDER; add(createDescriptionsPanel(), c); + c.fill = GridBagConstraints.NONE; + c.gridx = 1; + c.gridy = 0; + nextButton = new JButton("Next suggestion"); + nextButton.setActionCommand("next"); + add(nextButton, c); + + c.fill = GridBagConstraints.BOTH; c.gridwidth = 1; c.gridy = 1; c.gridx = 0; @@ -83,10 +94,7 @@ c.gridx = 1; add(createNegPanel(), c); - c.gridy = 2; - nextButton = new JButton("Next"); - nextButton.setActionCommand("next"); - add(nextButton, c); + } private void createManualUI(){ @@ -116,7 +124,7 @@ JPanel panel = new JPanel(new BorderLayout()); descriptionsTable = new MarkableClassExpressionsTable(); JScrollPane scroll = new JScrollPane(descriptionsTable); - scroll.setBorder(null); + scroll.setBorder(new MatteBorder(null)); panel.add(scroll); return panel; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-10-08 08:00:41 UTC (rev 1881) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java 2009-10-08 09:13:46 UTC (rev 1882) @@ -221,6 +221,7 @@ impRepSplit.setOneTouchExpandable(true); impRepSplit.setDividerLocation(600); impRepSplit.setBorder(null); + impRepSplit.setResizeWeight(0.5); impactRepairPanel.add(impRepSplit); ImpactTable impactTable = new ImpactTable(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-10-09 08:38:32
|
Revision: 1889 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1889&view=rev Author: lorenz_b Date: 2009-10-09 08:38:19 +0000 (Fri, 09 Oct 2009) Log Message: ----------- added third explanation type fixed some rendering stuff moved rendering stuff in separate package added simple impact cache Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/IndividualsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassExpressionsTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MarkableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/AddPropertyAssertionMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/AddToClassMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveFromClassToMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveToClassFromMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/RemoveAllPropertyAssertionsNotToMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/RemoveAllPropertyAssertionsToMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/RemoveFromClassMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationType.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/MultiLineTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ProgressBarTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/TextAreaRenderer.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MultiLineTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/OWLSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ProgressBarTableCellRenderer.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -12,6 +12,7 @@ import org.dllearner.tools.ore.explanation.CachedExplanationGenerator; import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.ExplanationException; +import org.dllearner.tools.ore.explanation.ExplanationType; import org.dllearner.tools.ore.explanation.RootFinder; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; @@ -230,6 +231,15 @@ } + public void setExplanationType(ExplanationType type){ + gen.setExplanationType(type); + fireExplanationTypeChanged(); + } + + public ExplanationType getExplanationType(){ + return gen.getExplanationType(); + } + public boolean isLaconicMode(){ return gen.isLaconicMode(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -1,8 +1,10 @@ package org.dllearner.tools.ore; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.dllearner.tools.ore.explanation.LostEntailmentsChecker; @@ -24,7 +26,11 @@ private OREManager oreMan; private Set<OWLAxiom> lostEntailments; - private Set<OWLAxiom> addedEntailments; + private Set<OWLAxiom> retainedEntailments; + + private Map<List<OWLOntologyChange>, Set<OWLAxiom>> lostEntailmentsCache; + private Map<List<OWLOntologyChange>, Set<OWLAxiom>> retainedEntailmentsCache; + private ImpactManager(OREManager oreMan) { this.oreMan = oreMan; @@ -33,8 +39,11 @@ this.manager = reasoner.getManager(); lostEntailments = new HashSet<OWLAxiom>(); - addedEntailments = new HashSet<OWLAxiom>(); + retainedEntailments = new HashSet<OWLAxiom>(); + lostEntailmentsCache = new HashMap<List<OWLOntologyChange>, Set<OWLAxiom>>(); + retainedEntailmentsCache = new HashMap<List<OWLOntologyChange>, Set<OWLAxiom>>(); + selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); @@ -69,18 +78,29 @@ } public Set<OWLAxiom> getAddedEntailments(){ - return addedEntailments; + return retainedEntailments; } public void computeImpactForAxiomsInRepairPlan(){ - lostEntailments.clear(); - addedEntailments.clear(); + +// lostEntailments.clear(); +// retainedEntailments.clear(); List<OWLOntologyChange> repairPlan = RepairManager.getInstance(oreMan).getRepairPlan(); - List<Set<OWLAxiom>> classificationImpact = lostEntailmentsChecker.computeClassificationImpact(repairPlan); - lostEntailments.addAll(classificationImpact.get(0)); - addedEntailments.addAll(classificationImpact.get(1)); - Set<OWLAxiom> structuralImpact = lostEntailmentsChecker.computeStructuralImpact(repairPlan); - lostEntailments.addAll(structuralImpact); + lostEntailments = lostEntailmentsCache.get(repairPlan); + retainedEntailments = retainedEntailmentsCache.get(repairPlan); + if(lostEntailments == null){ + lostEntailments = new HashSet<OWLAxiom>(); + retainedEntailments = new HashSet<OWLAxiom>(); + List<Set<OWLAxiom>> classificationImpact = lostEntailmentsChecker.computeClassificationImpact(repairPlan); + lostEntailments.addAll(classificationImpact.get(0)); + retainedEntailments.addAll(classificationImpact.get(1)); + Set<OWLAxiom> structuralImpact = lostEntailmentsChecker.computeStructuralImpact(repairPlan); + lostEntailments.addAll(structuralImpact); + + lostEntailmentsCache.put(repairPlan, lostEntailments); + retainedEntailmentsCache.put(repairPlan, retainedEntailments); + } + } public void addSelection(OWLAxiom ax){ @@ -118,7 +138,7 @@ public void repairPlanExecuted(List<OWLOntologyChange> changes) { selectedAxioms.clear(); lostEntailments.clear(); - addedEntailments.clear(); + retainedEntailments.clear(); fireImpactListChanged(); } @@ -131,7 +151,7 @@ lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getReasoner().getClassifier(), manager); selectedAxioms.clear(); lostEntailments.clear(); - addedEntailments.clear(); + retainedEntailments.clear(); fireImpactListChanged(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -31,14 +31,21 @@ public class CachedExplanationGenerator implements ExplanationGenerator, RepairManagerListener{ private Map<OWLAxiom, OWLOntology> axiom2Module; + private Map<OWLAxiom, Set<Explanation>> regularExplanationCache; private Map<OWLAxiom, Set<Explanation>> laconicExplanationCache; + private Map<OWLAxiom, Set<Explanation>> preciseExplanationCache; + private Map<OWLAxiom, Integer> lastRequestedRegularSize; private Map<OWLAxiom, Integer> lastRequestedLaconicSize; + private boolean laconicMode = false; + private PelletExplanationGenerator regularExpGen; private LaconicExplanationGenerator laconicExpGen; + private ExplanationType explanationType = ExplanationType.REGULAR; + private OWLOntology ontology; private OWLOntologyManager manager; @@ -47,10 +54,14 @@ this.manager = OWLManager.createOWLOntologyManager(); axiom2Module = new HashMap<OWLAxiom, OWLOntology>(); + regularExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); laconicExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); + preciseExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); + lastRequestedRegularSize = new HashMap<OWLAxiom, Integer>(); lastRequestedLaconicSize = new HashMap<OWLAxiom, Integer>(); + RepairManager.getInstance(OREManager.getInstance()).addListener(this); } @@ -58,6 +69,14 @@ laconicMode = laconic; } + public void setExplanationType(ExplanationType type){ + explanationType = type; + } + + public ExplanationType getExplanationType(){ + return explanationType; + } + public boolean isLaconicMode(){ return laconicMode; } @@ -75,10 +94,22 @@ public int getArity(OWLAxiom axiom){ int arity = 0; Map<OWLAxiom, Set<Explanation>> cache; - if(laconicMode == true){ - cache = laconicExplanationCache; - } else { - cache = regularExplanationCache; + switch(explanationType){ + case REGULAR : { + cache = regularExplanationCache; + break; + } + case LACONIC : { + cache = laconicExplanationCache; + break; + } + case PRECISE : { + cache = preciseExplanationCache; + break; + } + default: + throw new UnsupportedOperationException( "Unrecognized module type: " + explanationType ); + } for(Set<Explanation> explanations : cache.values()){ for(Explanation exp : explanations){ @@ -93,10 +124,22 @@ public double getInconsistencyValue(OWLAxiom ax){ double value = 0; Map<OWLAxiom, Set<Explanation>> cache; - if(laconicMode == true){ - cache = laconicExplanationCache; - } else { - cache = regularExplanationCache; + switch(explanationType){ + case REGULAR : { + cache = regularExplanationCache; + break; + } + case LACONIC : { + cache = laconicExplanationCache; + break; + } + case PRECISE : { + cache = preciseExplanationCache; + break; + } + default: + throw new UnsupportedOperationException( "Unrecognized module type: " + explanationType ); + } SortedSet<Explanation> sorted = new TreeSet<Explanation>(); for(Set<Explanation> explanations : cache.values()){ @@ -122,10 +165,22 @@ Set<Explanation> explanations = new HashSet<Explanation>(); try { - if(!laconicMode){ - explanations = computeRegularExplanations(entailment, limit); - } else { - explanations = computeLaconicExplanations(entailment, limit); + switch(explanationType){ + case REGULAR : { + explanations = computeRegularExplanations(entailment, limit); + break; + } + case LACONIC : { + explanations = computeLaconicExplanations(entailment, limit); + break; + } + case PRECISE : { + explanations = computePreciseExplanations(entailment, limit); + break; + } + default: + throw new UnsupportedOperationException( "Unrecognized module type: " + explanationType ); + } } catch (ExplanationException e) { // TODO Auto-generated catch block @@ -154,12 +209,27 @@ } else { explanations = laconicExpGen.getExplanations(entailment, limit); } - laconicExplanationCache.put(entailment, explanations); + laconicExplanationCache.put(entailment, laconicExpGen.retrieveAxioms(explanations)); + preciseExplanationCache.put(entailment, explanations); lastRequestedLaconicSize.put(entailment, Integer.valueOf(limit)); } return explanations; } + private Set<Explanation> computePreciseExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ + + Set<Explanation> explanations = preciseExplanationCache.get(entailment); + Integer lastRequestedSize = lastRequestedLaconicSize.get(entailment); + if(lastRequestedSize == null){ + lastRequestedSize = Integer.valueOf(0); + } + if(explanations == null || lastRequestedSize.intValue() != -1 && lastRequestedSize.intValue() < limit){ + computeLaconicExplanations(entailment, limit); + explanations = preciseExplanationCache.get(entailment); + } + return explanations; + } + private Set<Explanation> computeRegularExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ Set<Explanation> explanations = regularExplanationCache.get(entailment); Integer lastRequestedSize = lastRequestedRegularSize.get(entailment); @@ -217,6 +287,7 @@ // } regularExplanationCache.clear(); laconicExplanationCache.clear(); + preciseExplanationCache.clear(); axiom2Module.clear(); lastRequestedRegularSize.clear(); Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationType.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationType.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationType.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -0,0 +1,9 @@ +package org.dllearner.tools.ore.explanation; + +public enum ExplanationType { + + REGULAR, + LACONIC, + PRECISE + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -1,8 +1,10 @@ package org.dllearner.tools.ore.explanation; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.mindswap.pellet.owlapi.Reasoner; @@ -115,6 +117,8 @@ } public Set<OWLAxiom> computeStructuralImpact(List<OWLOntologyChange> changes) { + Map<OWLClass, Set<OWLClass>> subsumptionHierarchyUp = new HashMap<OWLClass, Set<OWLClass>>(); + Map<OWLClass, Set<OWLClass>> subsumptionHierarchyDown = new HashMap<OWLClass, Set<OWLClass>>(); System.out.println("Computing structural impact"); System.out.println("Refreshing reasoner"); reasoner.refresh(); @@ -130,10 +134,18 @@ if (subAx.getSubClass() instanceof OWLClass && subAx.getSuperClass() instanceof OWLClass) { OWLClass sub = (OWLClass) subAx.getSubClass(); OWLClass sup = (OWLClass) subAx.getSuperClass(); - - for (OWLClass desc : SetUtils.union(reasoner.getDescendantClasses(sub))) { - - for (OWLClass anc : SetUtils.union(reasoner.getAncestorClasses(sup))) { + Set<OWLClass> descendants = subsumptionHierarchyDown.get(sub); + if(descendants == null){ + descendants = SetUtils.union(reasoner.getDescendantClasses(sub)); + subsumptionHierarchyDown.put(sub, descendants); + } + for (OWLClass desc : descendants) { + Set<OWLClass> ancestors = subsumptionHierarchyUp.get(sub); + if(ancestors == null){ + ancestors = SetUtils.union(reasoner.getAncestorClasses(sup)); + subsumptionHierarchyUp.put(sup, ancestors); + } + for (OWLClass anc : ancestors) { if (!anc.equals(factory.getOWLThing()) && !desc.equals(factory.getOWLNothing())) { OWLSubClassAxiom ax = factory.getOWLSubClassAxiom(desc, anc); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -13,6 +13,7 @@ import javax.swing.ListSelectionModel; import javax.swing.table.DefaultTableCellRenderer; +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxTableCellRenderer; import org.jdesktop.swingx.JXTable; import org.semanticweb.owl.model.OWLOntologyChange; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -7,6 +7,7 @@ import javax.swing.ListSelectionModel; import org.dllearner.core.owl.NamedClass; +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxTableCellRenderer; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -29,6 +29,7 @@ import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.RepairManagerListener; import org.dllearner.tools.ore.explanation.Explanation; +import org.dllearner.tools.ore.ui.rendering.TextAreaRenderer; import org.jdesktop.swingx.JXTable; import org.protege.editor.core.Disposable; import org.semanticweb.owl.model.OWLClass; @@ -67,7 +68,8 @@ column6.setResizable(false); // setRowHeight(getRowHeight() + 4); setRowHeightEnabled(true); - getColumn(0).setCellRenderer(new MultiLineTableCellRenderer()); + + getColumn(0).setCellRenderer(new TextAreaRenderer()); getColumn(1).setMaxWidth(60); getColumn(2).setMaxWidth(60); getColumn(3).setMaxWidth(60); @@ -147,7 +149,7 @@ private static final long serialVersionUID = -3386641672808329591L; public String getToolTipText(MouseEvent e) { - String tip = null; + java.awt.Point p = e.getPoint(); int index = columnModel.getColumnIndexAtX(p.x); int realIndex = @@ -158,6 +160,20 @@ } + @Override + public String getToolTipText(MouseEvent e){ + String tip = null; + java.awt.Point p = e.getPoint(); + int rowIndex = rowAtPoint(p); + if(rowIndex != -1){ + tip = ((ExplanationTableModel)getModel()).getOWLAxiomAtRow(rowIndex).toString(); + + } else { + tip = super.getToolTipText(e); + } + return tip; + } + public void strikeOut(boolean strikeOut){ ((ExplanationTableModel)getModel()).setStriked(strikeOut); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -10,6 +10,7 @@ import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.explanation.Explanation; +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxRenderer; import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -37,6 +37,7 @@ import org.dllearner.core.owl.Individual; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxRenderer; import org.dllearner.tools.protege.IndividualPoint; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -14,12 +14,15 @@ import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; import org.dllearner.tools.ore.ExplanationManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.TaskManager; import org.dllearner.tools.ore.explanation.Explanation; +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxRenderer; +import org.dllearner.tools.ore.ui.rendering.TextAreaRenderer; import org.jdesktop.swingx.JXTable; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntologyChange; @@ -42,8 +45,7 @@ setGridColor(Color.LIGHT_GRAY); setTableHeader(null); setRowHeightEnabled(true); - getColumnModel().getColumn(1).setCellRenderer(new MultiLineTableCellRenderer()); - setRowHeight(getRowHeight() + 5); + getColumnModel().getColumn(1).setCellRenderer(new TextAreaRenderer()); getColumn(0).setMaxWidth(60); getColumn(2).setMaxWidth(60); @@ -143,12 +145,13 @@ List<OWLOntologyChange>repairPlan = repMan.getRepairPlan(); StringBuilder sb = new StringBuilder(); + sb.append("["); sb.append(ManchesterSyntaxRenderer.renderSimple(entailment)); if(((ImpactTableModel)getModel()).isLostEntailment(entailment)){ - sb.append(" is lost because"); + sb.append("] is lost because"); new ExplanationDialog(sb.toString(), expMan.getEntailmentExplanations(entailment)); } else { - sb.append(" is added because"); + sb.append("] is added because"); man.applyChanges(repairPlan); new ExplanationDialog(sb.toString(), expMan.getEntailmentExplanations(entailment)); man.applyChanges(repMan.getInverseChanges(repairPlan)); @@ -179,8 +182,9 @@ for(Explanation exp : explanations){ ExplanationTablePanel panel = new ExplanationTablePanel(new SimpleExplanationTable(exp), counter); explanationsPanel.add(panel); + counter++; } - add(explanationsPanel, BorderLayout.NORTH); + add(new JScrollPane(explanationsPanel), BorderLayout.NORTH); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); setSize(700, 400); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/IndividualsTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/IndividualsTable.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/IndividualsTable.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -7,6 +7,7 @@ import javax.swing.ListSelectionModel; import org.dllearner.core.owl.Individual; +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxTableCellRenderer; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java 2009-10-08 16:27:27 UTC (rev 1888) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterRenderer.java 2009-10-09 08:38:19 UTC (rev 1889) @@ -1,1268 +0,0 @@ -package org.dllearner.tools.ore.ui; - -import java.net.URI; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.log4j.Logger; -import org.protege.editor.owl.model.OWLModelManager; -import org.protege.editor.owl.ui.renderer.OWLEntityRenderer; -import org.protege.editor.owl.ui.renderer.OWLObjectRendererImpl; -import org.protege.editor.owl.ui.renderer.OWLRendererPreferences; -import org.semanticweb.owl.model.OWLAntiSymmetricObjectPropertyAxiom; -import org.semanticweb.owl.model.OWLAxiomAnnotationAxiom; -import org.semanticweb.owl.model.OWLClass; -import org.semanticweb.owl.model.OWLClassAssertionAxiom; -import org.semanticweb.owl.model.OWLConstant; -import org.semanticweb.owl.model.OWLConstantAnnotation; -import org.semanticweb.owl.model.OWLDataAllRestriction; -import org.semanticweb.owl.model.OWLDataCardinalityRestriction; -import org.semanticweb.owl.model.OWLDataComplementOf; -import org.semanticweb.owl.model.OWLDataExactCardinalityRestriction; -import org.semanticweb.owl.model.OWLDataMaxCardinalityRestriction; -import org.semanticweb.owl.model.OWLDataMinCardinalityRestriction; -import org.semanticweb.owl.model.OWLDataOneOf; -import org.semanticweb.owl.model.OWLDataProperty; -import org.semanticweb.owl.model.OWLDataPropertyAssertionAxiom; -import org.semanticweb.owl.model.OWLDataPropertyDomainAxiom; -import org.semanticweb.owl.model.OWLDataPropertyExpression; -import org.semanticweb.owl.model.OWLDataPropertyRangeAxiom; -import org.semanticweb.owl.model.OWLDataRange; -import org.semanticweb.owl.model.OWLDataRangeFacetRestriction; -import org.semanticweb.owl.model.OWLDataRangeRestriction; -import org.semanticweb.owl.model.OWLDataSomeRestriction; -import org.semanticweb.owl.model.OWLDataSubPropertyAxiom; -import org.semanticweb.owl.model.OWLDataType; -import org.semanticweb.owl.model.OWLDataValueRestriction; -import org.semanticweb.owl.model.OWLDataVisitor; -import org.semanticweb.owl.model.OWLDeclarationAxiom; -import org.semanticweb.owl.model.OWLDescription; -import org.semanticweb.owl.model.OWLDifferentIndividualsAxiom; -import org.semanticweb.owl.model.OWLDisjointClassesAxiom; -import org.semanticweb.owl.model.OWLDisjointDataPropertiesAxiom; -import org.semanticweb.owl.model.OWLDisjointObjectPropertiesAxiom; -import org.semanticweb.owl.model.OWLDisjointUnionAxiom; -import org.semanticweb.owl.model.OWLEntity; -import org.semanticweb.owl.model.OWLEntityAnnotationAxiom; -import org.semanticweb.owl.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owl.model.OWLEquivalentDataPropertiesAxiom; -import org.semanticweb.owl.model.OWLEquivalentObjectPropertiesAxiom; -import org.semanticweb.owl.model.OWLFunctionalDataPropertyAxiom; -import org.semanticweb.owl.model.OWLFunctionalObjectPropertyAxiom; -import org.semanticweb.owl.model.OWLImportsDeclaration; -import org.semanticweb.owl.model.OWLIndividual; -import org.semanticweb.owl.model.OWLInverseFunctionalObjectPropertyAxiom; -import org.semanticweb.owl.model.OWLInverseObjectPropertiesAxiom; -import org.semanticweb.owl.model.OWLIrreflexiveObjectPropertyAxiom; -import org.semanticweb.owl.model.OWLNegativeDataPropertyAssertionAxiom; -import org.semanticweb.owl.model.OWLNegativeObjectPropertyAssertionAxiom; -import org.semanticweb.owl.model.OWLObject; -import org.semanticweb.owl.model.OWLObjectAllRestriction; -import org.semanticweb.owl.model.OWLObjectAnnotation; -import org.semanticweb.owl.model.OWLObjectCardinalityRestriction; -import org.semanticweb.owl.model.OWLObjectComplementOf; -import org.semanticweb.owl.model.OWLObjectExactCardinalityRestriction; -import org.semanticweb.owl.model.OWLObjectIntersectionOf; -import org.semanticweb.owl.model.OWLObjectMaxCardinalityRestriction; -import org.semanticweb.owl.model.OWLObjectMinCardinalityRestriction; -import org.semanticweb.owl.model.OWLObjectOneOf; -import org.semanticweb.owl.model.OWLObjectProperty; -import org.semanticweb.owl.model.OWLObjectPropertyAssertionAxiom; -import org.semanticweb.owl.model.OWLObjectPropertyChainSubPropertyAxiom; -import org.semanticweb.owl.model.OWLObjectPropertyDomainAxiom; -import org.semanticweb.owl.model.OWLObjectPropertyExpression; -import org.semanticweb.owl.model.OWLObjectPropertyInverse; -import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; -import org.semanticweb.owl.model.OWLObjectSelfRestriction; -import org.semanticweb.owl.model.OWLObjectSomeRestriction; -import org.semanticweb.owl.model.OWLObjectSubPropertyAxiom; -import org.semanticweb.owl.model.OWLObjectUnionOf; -import org.semanticweb.owl.model.OWLObjectValueRestriction; -import org.semanticweb.owl.model.OWLObjectVisitor; -import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyAnnotationAxiom; -import org.semanticweb.owl.model.OWLOntologyManager; -import org.semanticweb.owl.model.OWLReflexiveObjectPropertyAxiom; -import org.semanticweb.owl.model.OWLRestriction; -import org.semanticweb.owl.model.OWLSameIndividualsAxiom; -import org.semanticweb.owl.model.OWLSubClassAxiom; -import org.semanticweb.owl.model.OWLSymmetricObjectPropertyAxiom; -import org.semanticweb.owl.model.OWLTransitiveObjectPropertyAxiom; -import org.semanticweb.owl.model.OWLTypedConstant; -import org.semanticweb.owl.model.OWLUntypedConstant; -import org.semanticweb.owl.model.SWRLAtom; -import org.semanticweb.owl.model.SWRLAtomConstantObject; -import org.semanticweb.owl.model.SWRLAtomDObject; -import org.semanticweb.owl.model.SWRLAtomDVariable; -import org.semanticweb.owl.model.SWRLAtomIVariable; -import org.semanticweb.owl.model.SWRLAtomIndividualObject; -import org.semanticweb.owl.model.SWRLBuiltInAtom; -import org.semanticweb.owl.model.SWRLClassAtom; -import org.semanticweb.owl.model.SWRLDataRangeAtom; -import org.semanticweb.owl.model.SWRLDataValuedPropertyAtom; -import org.semanticweb.owl.model.SWRLDifferentFromAtom; -import org.semanticweb.owl.model.SWRLObjectPropertyAtom; -import org.semanticweb.owl.model.SWRLRule; -import org.semanticweb.owl.model.SWRLSameAsAtom; -import org.semanticweb.owl.util.OWLDescriptionComparator; -import org.semanticweb.owl.util.OWLDescriptionVisitorAdapter; -import org.semanticweb.owl.util.ShortFormProvider; -import org.semanticweb.owl.util.SimpleShortFormProvider; -import org.semanticweb.owl.vocab.OWLRestrictedDataRangeFacetVocabulary; -import org.semanticweb.owl.vocab.XSDVocabulary; - -public class ManchesterRenderer implements OWLObjectVisitor{ - private static final Logger logger = Logger.getLogger(OWLObjectRendererImpl.class); - - private OWLOntologyManager owlModelManager; - - private StringBuilder buffer; - - private BracketWriter bracketWriter; - - private Map<OWLRestrictedDataRangeFacetVocabulary, String> facetMap; - - private Map<URI, Boolean> simpleRenderDatatypes; - - private OWLObject focusedObject; - - private OWLEntityRenderer entityRenderer; - - private ShortFormProvider shortFomProvider; - - private OWLDescriptionComparator comparator = new OWLDescriptionComparator(shortFomProvider); - - - public ManchesterRenderer(OWLOntologyManager manager) { - this.owlModelManager = manager; - buffer = new StringBuilder(); - bracketWriter = new BracketWriter(); - facetMap = new HashMap<OWLRestrictedDataRangeFacetVocabulary, String>(); - facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MIN_EXCLUSIVE, ">"); - facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MAX_EXCLUSIVE, "<"); - facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MIN_INCLUSIVE, ">="); - facetMap.put(OWLRestrictedDataRangeFacetVocabulary.MAX_INCLUSIVE, "<="); - simpleRenderDatatypes = new HashMap<URI, Boolean>(); - simpleRenderDatatypes.put(XSDVocabulary.INT.getURI(), false); - simpleRenderDatatypes.put(XSDVocabulary.FLOAT.getURI(), false); - simpleRenderDatatypes.put(XSDVocabulary.DOUBLE.getURI(), false); - simpleRenderDatatypes.put(XSDVocabulary.STRING.getURI(), true); - simpleRenderDatatypes.put(XSDVocabulary.BOOLEAN.getURI(), false); - - shortFomProvider = new SimpleShortFormProvider(); - } - - - public void setup(OWLModelManager owlModelManager) { - } - - - public void initialise() { - } - - - public void dispose() { - } - - - public OWLObject getFocusedObject() { - return focusedObject; - } - - -// public void setFocusedObject(OWLObject focusedObject) { -// this.focusedObject = focusedObject; -// if(focusedObject instanceof OWLDescription) { -// comparator.setFocusedDescription((OWLDescription) focusedObject); -// } -// } - - - protected String getAndKeyWord() { - return "and"; - } - - - protected String getOrKeyWord() { - return "or"; - } - - - protected String getNotKeyWord() { - return " not"; - } - - - protected String getSomeKeyWord() { - return "some"; - } - - - protected String getAllKeyWord() { - return "only"; - } - - - protected String getValueKeyWord() { - return "value"; - } - - - protected String getMinKeyWord() { - return "min"; - } - - - protected String getMaxKeyWord() { - return "max"; - } - - - protected String getExactlyKeyWord() { - return "exactly"; - } - - - public String render(OWLObject object, OWLEntityRenderer entityRenderer) { - reset(); - this.entityRenderer = entityRenderer; - try { - object.accept(this); - return buffer.toString(); - } - catch (Exception e) {e.printStackTrace(); - return "<Error! " + e.getMessage() + ">"; - } - } - - - protected String getRendering(OWLEntity entity) { - if (entityRenderer != null){ - return entityRenderer.render(entity); - } - return shortFomProvider.getShortForm(entity); - } - - - int lastNewLineIndex = 0; - - int currentIndex = 0; - - - protected void write(String s) { - int index = s.indexOf('\n'); - if (index != -1) { - lastNewLineIndex = currentIndex + index; - } - currentIndex = currentIndex + s.length(); - buffer.append(s); - } - - - protected int getIndent() { - return currentIndex - lastNewLineIndex; - } - - - protected void insertIndent(int indent) { - for (int i = 0; i < indent; i++) { - write(" "); - } - } - - - protected void writeAndKeyword() { - write(getAndKeyWord()); - write(" "); - } - - - public void reset() { - lastNewLineIndex = 0; - currentIndex = 0; - buffer = new StringBuilder(); - } - - - public String getText() { - return buffer.toString(); - } - - - - - - private List<OWLDescription> sort(Set<OWLDescription> descriptions) { - List<OWLDescription> sortedDescs = new ArrayList<OWLDescription>(descriptions); - Collections.sort(sortedDescs); - return sortedDescs; - } - - - public void visit(OWLObjectIntersectionOf node) { - - int indent = getIndent(); - List<OWLDescription> ops = sort(node.getOperands()); - for (int i = 0; i < ops.size(); i++) { - OWLDescription curOp = ops.get(i); - curOp.accept(this); - if (i < ops.size() - 1) { - write("\n"); - insertIndent(indent); - if (curOp instanceof OWLClass && ops.get(i + 1) instanceof OWLRestriction && OWLRendererPreferences.getInstance().isUseThatKeyword()) { - write("that "); - } - else { - writeAndKeyword(); - } - } - } - } - - - public void visit(OWLTypedConstant node) { - if (simpleRenderDatatypes.containsKey(node.getDataType().getURI())) { - boolean renderQuotes = simpleRenderDatatypes.get(node.getDataType().getURI()); - if (renderQuotes) { - write("\""); - } - write(node.getLiteral()); - if (renderQuotes) { - write("\""); - } - } - else { - write("\""); - write(node.getLiteral()); - write("\"^^"); - node.getDataType().accept(this); - } - } - - - public void visit(OWLUntypedConstant node) { - write("\""); - write(node.getLiteral()); - write("\""); - if (node.hasLang()) { - write("@"); - write(node.getLang()); - } - } - - - public void visit(OWLDataType node) { - write(getRendering(node)); - } - - - public void visit(OWLDataOneOf node) { - write("{"); - for (Iterator<OWLConstant> it = node.getValues().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(", "); - } - } - write("}"); - } - - - public void visit(OWLDataRangeRestriction node) { -// writeOpenBracket(node); - node.getDataRange().accept(this); - write("["); - for (Iterator<OWLDataRangeFacetRestriction> it = node.getFacetRestrictions().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(", "); - } - } - write("]"); -// writeCloseBracket(node); - } - - - public void visit(OWLDataComplementOf owlDataComplementOf) { - write("not("); - owlDataComplementOf.getDataRange().accept(this); - write(")"); - } - - - public void visit(OWLDataRangeFacetRestriction node) { - String rendering = facetMap.get(node.getFacet()); - if (rendering == null) { - rendering = node.getFacet().getShortName(); - } - write(rendering); - write(" "); - node.getFacetValue().accept(this); - } - - - public void visit(OWLObjectSelfRestriction desc) { - desc.getProperty().accept(this); - write(" "); - write(getSomeKeyWord()); - write(" Self"); - } - - - public void visit(OWLDataAllRestriction node) { - node.getProperty().accept(this); - write(" "); - write(getAllKeyWord()); - write(" "); - node.getFiller().accept(this); - } - - - public void visit(OWLDataProperty node) { - write(getRendering(node)); - } - - - public void visit(OWLDataSomeRestriction node) { - node.getProperty().accept(this); - write(" "); - write(getSomeKeyWord()); - write(" "); - node.getFiller().accept(this); - } - - - public void visit(OWLDataValueRestriction node) { - node.getProperty().accept(this); - write(" "); - write(getValueKeyWord()); - write(" "); - node.getValue().accept(this); - } - - - public void visit(OWLIndividual node) { - if (node.isAnonymous()) { - write("Anonymous : ["); - for (OWLOntology ont : owlModelManager.getOntologies()) { - for (OWLDescription desc : node.getTypes(ont)) { - write(" "); - desc.accept(this); - } - } - write(" ]"); - } - else { - write(getRendering(node)); - } - } - - - public void visit(OWLObjectAllRestriction node) { - node.getProperty().accept(this); - write(" "); - write(getAllKeyWord()); - write(" "); - writeOpenBracket(node.getFiller()); - node.getFiller().accept(this); - writeCloseBracket(node.getFiller()); - } - - - public void visit(OWLObjectMinCardinalityRestriction desc) { - writeCardinality(desc, getMinKeyWord()); - } - - - public void visit(OWLObjectExactCardinalityRestriction desc) { - writeCardinality(desc, getExactlyKeyWord()); - } - - - public void visit(OWLObjectMaxCardinalityRestriction desc) { - writeCardinality(desc, getMaxKeyWord()); - } - - - private void writeCardinality(OWLObjectCardinalityRestriction desc, String keyword) { - desc.getProperty().accept(this); - write(" "); - write(keyword); - write(" "); - write(Integer.toString(desc.getCardinality())); - write(" "); - writeOpenBracket(desc.getFiller()); - desc.getFiller().accept(this); - writeCloseBracket(desc.getFiller()); - } - - - public void visit(OWLDataMinCardinalityRestriction desc) { - writeCardinality(desc, getMinKeyWord()); - } - - - public void visit(OWLDataExactCardinalityRestriction desc) { - writeCardinality(desc, getExactlyKeyWord()); - } - - - public void visit(OWLDataMaxCardinalityRestriction desc) { - writeCardinality(desc, getMaxKeyWord()); - } - - - private void writeCardinality(OWLDataCardinalityRestriction desc, String keyword) { - desc.getProperty().accept(this); - write(" "); - write(keyword); - write(" "); - write(Integer.toString(desc.getCardinality())); - write(" "); - writeOpenBracket(desc.getFiller()); - desc.getFiller().accept(this); - writeCloseBracket(desc.getFiller()); - } - - - public void visit(OWLObjectProperty node) { - write(getRendering(node)); - } - - - public void visit(OWLObjectSomeRestriction node) { - node.getProperty().accept(this); - write(" "); - write(getSomeKeyWord()); - write(" "); - writeOpenBracket(node.getFiller()); - node.getFiller().accept(this); - writeCloseBracket(node.getFiller()); - } - - - public void visit(OWLObjectValueRestriction node) { - node.getProperty().accept(this); - write(" "); - write(getValueKeyWord()); - write(" "); - node.getValue().accept(this); - } - - - public void visit(OWLObjectComplementOf node) { - writeNotKeyword(); - write(" "); - writeOpenBracket(node.getOperand()); - node.getOperand().accept(this); - writeCloseBracket(node.getOperand()); - } - - - protected void writeNotKeyword() { - write(getNotKeyWord()); - } - - - public void visit(OWLObjectUnionOf node) { - int indent = getIndent(); - for (Iterator<OWLDescription> it = sort(node.getOperands()).iterator(); it.hasNext();) { - OWLDescription curOp = it.next(); - writeOpenBracket(curOp); - curOp.accept(this); - writeCloseBracket(curOp); - if (it.hasNext()) { - write("\n"); - insertIndent(indent); - writeOrKeyword(); - } - } - } - - - private void writeOrKeyword() { - write(getOrKeyWord()); - write(" "); - } - - - public void visit(OWLClass node) { - write(getRendering(node)); - } - - - public void visit(OWLObjectPropertyInverse property) { - write("inv("); - property.getInverse().accept(this); - write(")"); - } - - - public void visit(OWLObjectOneOf node) { - write("{"); - for (Iterator<OWLIndividual> it = node.getIndividuals().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(", "); - } - } - write("}"); - } - - - public void visit(OWLDisjointClassesAxiom node) { - for (Iterator<OWLDescription> it = sort(node.getDescriptions()).iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" disjointWith "); - } - } - } - - - public void visit(OWLEquivalentClassesAxiom node) { - List<OWLDescription> orderedDescs = sort(node.getDescriptions()); - for(Iterator<OWLDescription> it = orderedDescs.iterator(); it.hasNext(); ) { - OWLDescription desc = it.next(); - if(orderedDescs.get(0).isOWLNothing()) { - it.remove(); - orderedDescs.add(desc); - break; - } - } - - for (Iterator<OWLDescription> it = orderedDescs.iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" equivalentTo "); - } - } - } - - - public void visit(OWLSubClassAxiom node) { - node.getSubClass().accept(this); - write(" subClassOf "); - node.getSuperClass().accept(this); - } - - - public void visit(OWLFunctionalObjectPropertyAxiom axiom) { - write("Functional: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) { - write("InverseFunctional: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { - write("Irreflexive: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLDataSubPropertyAxiom axiom) { - axiom.getSubProperty().accept(this); - write(" subPropertyOf "); - axiom.getSuperProperty().accept(this); - } - - - public void visit(OWLReflexiveObjectPropertyAxiom axiom) { - write("Reflexive: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLSymmetricObjectPropertyAxiom axiom) { - write("Symmetric: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLTransitiveObjectPropertyAxiom axiom) { - write("Transitive: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLObjectPropertyDomainAxiom axiom) { - if (!OWLRendererPreferences.getInstance().isRenderDomainAxiomsAsGCIs()) { - axiom.getProperty().accept(this); - write(" domain "); - axiom.getDomain().accept(this); - } - else { - axiom.getProperty().accept(this); - write(" some "); - owlModelManager.getOWLDataFactory().getOWLThing().accept(this); - write(" subClassOf "); - axiom.getDomain().accept(this); - } - } - - - public void visit(OWLEquivalentObjectPropertiesAxiom node) { - for (Iterator<OWLObjectPropertyExpression> it = node.getProperties().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" equivalentTo "); - } - } - } - - - public void visit(OWLObjectPropertyRangeAxiom axiom) { - axiom.getProperty().accept(this); - write(" range "); - axiom.getRange().accept(this); - } - - - public void visit(OWLClassAssertionAxiom axiom) { - axiom.getIndividual().accept(this); - write(" types "); - axiom.getDescription().accept(this); - } - - - public void visit(OWLFunctionalDataPropertyAxiom axiom) { - write("Functional: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLEquivalentDataPropertiesAxiom node) { - for (Iterator<OWLDataPropertyExpression> it = node.getProperties().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" equivalentTo "); - } - } - } - - - public void visit(OWLSameIndividualsAxiom axiom) { - write("SameIndividuals: ["); - for (Iterator<OWLIndividual> it = axiom.getIndividuals().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(", "); - } - } - write("]"); - } - - - public void visit(OWLDifferentIndividualsAxiom axiom) { - write("DifferentIndividuals: ["); - for (Iterator<OWLIndividual> it = axiom.getIndividuals().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(", "); - } - } - write("]"); - } - - - public void visit(OWLDisjointDataPropertiesAxiom axiom) { - for (Iterator<OWLDataPropertyExpression> it = axiom.getProperties().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" disjointWith "); - } - } - } - - - public void visit(OWLDisjointObjectPropertiesAxiom axiom) { - for (Iterator<OWLObjectPropertyExpression> it = axiom.getProperties().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" disjointWith "); - } - } - } - - - public void visit(OWLObjectPropertyAssertionAxiom axiom) { - axiom.getSubject().accept(this); - write(" "); - axiom.getProperty().accept(this); - write(" "); - axiom.getObject().accept(this); - } - - - public void visit(OWLDataPropertyAssertionAxiom axiom) { - axiom.getSubject().accept(this); - write(" "); - axiom.getProperty().accept(this); - write(" "); - axiom.getObject().accept(this); - } - - - public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) { - write("not("); - axiom.getSubject().accept(this); - write(" "); - axiom.getProperty().accept(this); - write(" "); - axiom.getObject().accept(this); - write(")"); - } - - - public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom) { - write("not("); - axiom.getSubject().accept(this); - write(" "); - axiom.getProperty().accept(this); - write(" "); - axiom.getObject().accept(this); - write(")"); - } - - - public void visit(OWLInverseObjectPropertiesAxiom axiom) { - axiom.getFirstProperty().accept(this); - write(" inverseOf "); - axiom.getSecondProperty().accept(this); - } - - - public void visit(OWLAntiSymmetricObjectPropertyAxiom axiom) { - write("AntiSymmetric: "); - axiom.getProperty().accept(this); - } - - - public void visit(OWLDataPropertyDomainAxiom axiom) { - axiom.getProperty().accept(this); - write(" domain "); - axiom.getDomain().accept(this); - } - - - public void visit(OWLDataPropertyRangeAxiom axiom) { - axiom.getProperty().accept(this); - write(" range "); - axiom.getRange().accept(this); - } - - - public void visit(OWLObjectSubPropertyAxiom axiom) { - axiom.getSubProperty().accept(this); - write(" subPropertyOf "); - axiom.getSuperProperty().accept(this); - } - - - public void visit(OWLDisjointUnionAxiom axiom) { - axiom.getOWLClass().accept(this); - write(" disjointUnionOf "); - write("["); - int indent = getIndent(); - for (Iterator<OWLDescription> it = axiom.getDescriptions().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write("\n"); - insertIndent(indent); - } - } - write("]"); - } - - - public void visit(OWLDeclarationAxiom axiom) { - OWLEntity entity = axiom.getEntity(); - if (entity.isOWLClass()){ - write("Class("); - } - else if (entity.isOWLObjectProperty()){ - write("Object property("); - } - else if (entity.isOWLDataProperty()){ - write("Data property("); - } - else if (entity.isOWLIndividual()){ - write("Individual("); - } - else{ - write("("); - } - entity.accept(this); - write(")"); - } - - - public void visit(OWLImportsDeclaration axiom) { - writeOntologyURI(axiom.getImportedOntologyURI()); - if (owlModelManager.getImportedOntology(axiom) == null) { - write(" (Not Loaded)"); - } - } - - - public void visit(OWLAxiomAnnotationAxiom axiom) { - axiom.getSubject().accept(this); - write(" "); - axiom.getAnnotation().accept(this); - } - - - private void writeOpenBracket(OWLDescription description) { - description.accept(bracketWriter); - if (bracketWriter.writeBrackets()) { - write("("); - } - } - - - private void writeOpenBracket(OWLDataRange dataRange) { - dataRange.accept(bracketWriter); - if (bracketWriter.writeBrackets()) { - write("("); - } - } - - - private void writeCloseBracket(OWLDescription description) { - description.accept(bracketWriter); - if (bracketWriter.writeBrackets()) { - write(")"); - } - } - - - private void writeCloseBracket(OWLDataRange dataRange) { - dataRange.accept(bracketWriter); - if (bracketWriter.writeBrackets()) { - write(")"); - } - } - - - public void visit(OWLOntology ontology) { - writeOntologyURI(ontology.getURI()); - } - - - public void visit(OWLObjectPropertyChainSubPropertyAxiom axiom) { - for (Iterator<OWLObjectPropertyExpression> it = axiom.getPropertyChain().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" o "); - } - } - write(" \u279E "); - axiom.getSuperProperty().accept(this); - } - - - public void visit(OWLConstantAnnotation annotation) { - write(annotation.getAnnotationURI().getFragment()); - write(" "); - write(annotation.getAnnotationValue().toString()); - } - - - public void visit(SWRLRule swrlRule) { - for (Iterator<SWRLAtom> it = swrlRule.getBody().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" , "); - } - } - write(" -> "); - for (Iterator<SWRLAtom> it = swrlRule.getHead().iterator(); it.hasNext();) { - it.next().accept(this); - if (it.hasNext()) { - write(" \u2227 "); - } - } - } - - - public void visit(OWLEntityAnnotationAxiom owlEntityAnnotationAxiom) { - owlEntityAnnotationAxiom.getSubject().accept(this); - write(" "); - owlEntityAnnotationAxiom.getAnnotation().accept(this); - } - - - public void visit(OWLOntologyAnnotationAxiom axiom) { - axiom.getSubject().accept(this); - write(" "); - axiom.getAnnotation().accept(this); - } - - - public void visit(OWLObjectAnnotation owlObjectAnnotation) { - write(owlObjectAnnotation.getAnnotationURI().getFragment()); - write(" "); - owlObjectAnnotation.getAnnotationValue().accept(this); - } - - - public void visit(SWRLClassAtom swrlClassAtom) { - OWLDescription desc = swrlClassAtom.getPredicate(); - if (desc.isAnonymous()) { - write("("); - } - desc.accept(this); - if (desc.isAnonymous()) { - write(")"); - } - write("("); - swrlClassAtom.getArgument().accept(this); - write(")"); - } - - - public void visit(SWRLDataRangeAtom swrlDataRangeAtom) { - swrlDataRangeAtom.getPredicate().accept(this); - write("("); - swrlDataRangeAtom.getArgument().accept(this); - write(")"); - } - - - public void visit(SWRLObjectPropertyAtom swrlObjectPropertyAtom) { - swrlObjectPropertyAtom.getPredicate().accept(this); - write("("); - swrlObjectPropertyAtom.getFirstArgument().accept(this); - write(", "); - swrlObjectPropertyAtom.getSecondArgument().accept(this); - write(")"); - } - - - public void visit(SWRLDataValuedPropertyAtom swrlDataValuedPropertyAtom) { - swrlDataValuedPropertyAtom.getPredicate().accept(this); - write("("); - swrlDataValuedPropertyAtom.getFirstArgument().accept(this); - write(", "); - swrlDataValuedPropertyAtom.getSecondArgument().accept(this); - write(")"); - } - - - public void visit(SWRLBuiltInAtom swrlBuiltInAtom) { - write(swrlBuiltInAtom.getPredicate().getShortName()); - write("("); - Iterator<SWRLAtomDObject> it = swrlBuiltInAtom.getArguments().iterator(); - while (it.hasNext()) { - SWRLAtomDObject argument = it.next(); - argument.accept(this); - if (it.hasNext()) { - write(", "); - } - } - write(")"); - } - - - public void visit(SWRLAtomDVariable swrlAtomDVariable) { - write("?"); - write(swrlAtomDVariable.getURI().getFragment()); - } - - - public void visit(SWRLAtomIVariable swrlAtomIVariable) { - write("?"); - write(swrlAtomIVariable.getURI().getFragment()); - } - - - public void visit(SWRLAtomIndividualObject swrlAtomIndividualObject) { - swrlAtomIndividualObject.getIndividual().accept(this); - } - - - public void visit(SWRLAtomConstantObject swrlAtomConstantObject) { - swrlAtomConstantObject.getConstant().accept(this); - } - - - public void visit(SWRLDifferentFromAtom swrlDifferentFromAtom) { - swrlDifferentFromAtom.getPredicate().accept(this); - write("("); - swrlDifferentFromAtom.getFirstArgument().accept(this); - write(", "); - swrlDifferentFromAtom.getSecondArgument().accept(this); - write(")"); - } - - - public void visit(SWRLSameAsAtom swrlSameAsAtom) { - swrlSameAsAtom.getPredicate().accept(this); - write("("); - swrlSameAsAtom.getFirstArgument().accept(this); - write(", "); - swrlSameAsAtom.getSecondArgument().accept(this); - write(")"); - } - - - private void writeOntologyURI(URI uri) { - String shortName = uri.getFragment();//owlModelManager.getURIRendering(uri); - if (shortName != null) { - write(shortName); - write(" ("); - write(uri.toString()); - write(")"); - } - else { - write(uri.toString()); - } - } - - - private class BracketWriter extends OWLDescriptionVisitorAdapter implements OWLDataVisitor { - - boolean nested = false; - - - public boolean writeBrackets() { - return nested; - } - - - public void visit(OWLO... [truncated message content] |
From: <lor...@us...> - 2009-11-24 08:48:37
|
Revision: 1917 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1917&view=rev Author: lorenz_b Date: 2009-11-24 08:48:27 +0000 (Tue, 24 Nov 2009) Log Message: ----------- Modified workflow - now in automatic learning mode, pressing the 'Save and go back to class choose panel' button in the last wizard step brings back to automatic learning view. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ConcurrencyBug.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ConcurrencyBug.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ConcurrencyBug.java 2009-11-24 07:14:29 UTC (rev 1916) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ConcurrencyBug.java 2009-11-24 08:48:27 UTC (rev 1917) @@ -4,18 +4,32 @@ import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; -import java.util.Timer; -import java.util.TimerTask; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; import org.dllearner.core.LearningProblemUnsupportedException; +import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.OWLFile; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.reasoning.PelletReasoner; +import org.semanticweb.owl.apibinding.OWLManager; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLEntity; +import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyManager; +import uk.ac.manchester.cs.owl.modularity.ModuleType; + +import com.clarkparsia.explanation.util.OntologyUtils; +import com.clarkparsia.modularity.ModularityUtils; + public class ConcurrencyBug { /** @@ -27,15 +41,29 @@ * @throws LearningProblemUnsupportedException */ public static void main(String[] args) throws MalformedURLException, ComponentInitException, OWLOntologyCreationException, URISyntaxException, LearningProblemUnsupportedException { - File file = new File("examples/swore/swore.rdf"); - URL classToDescribe = new URL("http://ns.softwiki.de/req/CustomerRequirement"); + File file = new File("examples/family-benchmark/family-benchmark_rich_background.owl"); + URL classToDescribe = new URL("http://www.benchmark.org/family#Father"); + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLDataFactory factory = manager.getOWLDataFactory(); + OWLClass father = factory.getOWLClass(classToDescribe.toURI()); + OWLOntology ontology = manager.loadOntologyFromPhysicalURI(file.toURI()); + Set<OWLEntity> signature = new HashSet<OWLEntity>(); + for(OWLDescription d : father.getSuperClasses(ontology)){ + signature.addAll(d.getSignature()); + } + signature.addAll(father.getSignature()); + + OWLOntology module = com.clarkparsia.owlapi.OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(ontology, signature, ModuleType.TOP_OF_BOT)); ComponentManager cm = ComponentManager.getInstance(); + OWLAPIOntology ont = new OWLAPIOntology(module); + ont.init(); + OWLFile ks = cm.knowledgeSource(OWLFile.class); ((OWLFile)ks).getConfigurator().setUrl(file.toURI().toURL()); ks.init(); - PelletReasoner reasoner = cm.reasoner(PelletReasoner.class, ks); + PelletReasoner reasoner = cm.reasoner(PelletReasoner.class, ont); reasoner.init(); reasoner.loadOntologies(); reasoner.dematerialise(); @@ -53,19 +81,19 @@ la.getConfigurator().setMaxNrOfResults(10); la.init(); - Timer timer = new Timer(); - timer.schedule(new TimerTask() { - - @Override - public void run() { - if(la.isRunning()){ - System.out.println(la.getCurrentlyBestEvaluatedDescriptions(10, 0.8, true)); - } else { - cancel(); - } - - } - }, 1000, 1000); +// Timer timer = new Timer(); +// timer.schedule(new TimerTask() { +// +// @Override +// public void run() { +// if(la.isRunning()){ +// System.out.println(la.getCurrentlyBestEvaluatedDescriptions(10, 0.8, true)); +// } else { +// cancel(); +// } +// +// } +// }, 1000, 1000); la.start(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-11-24 07:14:29 UTC (rev 1916) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-11-24 08:48:27 UTC (rev 1917) @@ -80,7 +80,11 @@ OntologyModifier modifier = OREManager.getInstance().getModifier(); if(e.getActionCommand().equals("Save and go to class choose panel")){ modifier.saveOntology(); - getWizard().setCurrentPanel(ClassChoosePanelDescriptor.IDENTIFIER); + if(LearningManager.getInstance().getLearningMode() == LearningManager.MANUAL_LEARN_MODE){ + getWizard().setCurrentPanel(ClassChoosePanelDescriptor.IDENTIFIER); + } else { + getWizard().setCurrentPanel(AutoLearnPanelDescriptor.IDENTIFIER); + } }else if(e.getActionCommand().equals("Save and Exit")){ modifier.saveOntology(); getWizard().close(0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-12-02 08:56:46
|
Revision: 1928 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1928&view=rev Author: lorenz_b Date: 2009-12-02 08:56:36 +0000 (Wed, 02 Dec 2009) Log Message: ----------- Added 'save as' function for the modified ontologies. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-12-01 17:59:11 UTC (rev 1927) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-12-02 08:56:36 UTC (rev 1928) @@ -1,5 +1,6 @@ package org.dllearner.tools.ore; +import java.io.File; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; @@ -36,10 +37,13 @@ import org.dllearner.utilities.owl.OWLAPIConverter; import org.mindswap.pellet.exceptions.InconsistentOntologyException; import org.mindswap.pellet.utils.SetUtils; +import org.semanticweb.owl.io.OWLXMLOntologyFormat; import org.semanticweb.owl.model.OWLDataFactory; import org.semanticweb.owl.model.OWLDescription; import org.semanticweb.owl.model.OWLObjectProperty; import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyStorageException; +import org.semanticweb.owl.model.UnknownOWLOntologyException; public class OREManager { @@ -169,6 +173,23 @@ reasoner.loadOntologies(); } + /** + * Save the ontology in OWL/XML format. + * @param file The file to save as. + * @throws OWLOntologyStorageException + * + */ + public void saveOntology(File file) throws OWLOntologyStorageException{ + + try { + reasoner.getOWLOntologyManager().saveOntology(reasoner.getOWLAPIOntologies(), new OWLXMLOntologyFormat(), file.toURI()); + } catch (UnknownOWLOntologyException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + public void makeOWAToCWA(){ reasoner.dematerialise(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-12-01 17:59:11 UTC (rev 1927) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-12-02 08:56:36 UTC (rev 1928) @@ -20,6 +20,7 @@ package org.dllearner.tools.ore; +import java.io.File; import java.net.URI; import java.util.ArrayList; import java.util.Collection; @@ -39,7 +40,7 @@ import org.dllearner.reasoning.PelletReasoner; import org.dllearner.utilities.owl.OWLAPIConverter; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; -import org.semanticweb.owl.io.RDFXMLOntologyFormat; +import org.semanticweb.owl.io.OWLXMLOntologyFormat; import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; @@ -154,26 +155,7 @@ } - /** - * Saves the ontology as RDF-file. - */ - public void saveOntology(){ - - - URI physicalURI2 = URI.create("file:/tmp/MyOnt2.owl"); - - try { - manager.saveOntology(ontology, new RDFXMLOntologyFormat(), physicalURI2); - } catch (UnknownOWLOntologyException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLOntologyStorageException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } /** * Deletes the complete individual from the ontology. * @param ind the individual to delete Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java 2009-12-02 08:56:36 UTC (rev 1928) @@ -0,0 +1,45 @@ +package org.dllearner.tools.ore.ui; + +import java.io.File; + +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; + +import org.dllearner.tools.ore.OREManager; +import org.semanticweb.owl.model.OWLOntologyStorageException; + +public class OverrideFileChooser extends JFileChooser { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public void approveSelection() { + File f = super.getSelectedFile(); + if (f.exists()) { + int ans = JOptionPane.showConfirmDialog(null, "" + f.getName() + " already exists. Overwrite?", "Confirm Overwrite", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + if (ans == JOptionPane.OK_OPTION) { + try { + OREManager.getInstance().saveOntology(f); + super.approveSelection(); + } catch (OWLOntologyStorageException e) { + JOptionPane.showMessageDialog(this, "Could not save file: " + e.getCause(), "Error", JOptionPane.ERROR_MESSAGE); + } + + } + } else { + try { + OREManager.getInstance().saveOntology(f); + super.approveSelection(); + } catch (OWLOntologyStorageException e) { + JOptionPane.showMessageDialog(this, "Could not save file: " + e.getCause(), "Error", JOptionPane.ERROR_MESSAGE); + } + } + + } + + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-12-01 17:59:11 UTC (rev 1927) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-12-02 08:56:36 UTC (rev 1928) @@ -41,8 +41,10 @@ import org.dllearner.tools.ore.ui.wizard.panels.KnowledgeSourcePanel; import org.protege.editor.core.ui.OpenFromURIPanel; import org.protege.editor.core.ui.error.ErrorLogPanel; +import org.protege.editor.owl.model.OntologyFileFilter; import org.semanticweb.owl.io.UnparsableOntologyException; import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyFormat; /** * Wizard panel descriptor where knowledge source is selected. @@ -180,7 +182,7 @@ } private void updateRecentList(){ - knowledgePanel.updateRecentList(); + knowledgePanel.updateRecentList(this); } public KnowledgeSourcePanel getPanel() { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-12-01 17:59:11 UTC (rev 1927) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-12-02 08:56:36 UTC (rev 1928) @@ -22,10 +22,14 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileFilter; + import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.OREManager; -import org.dllearner.tools.ore.OntologyModifier; +import org.dllearner.tools.ore.ui.OverrideFileChooser; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.SavePanel; @@ -40,6 +44,8 @@ "or 'Save and choose another class' button to save the changes and go back to class choose panel."; private SavePanel savePanel; + final JFileChooser fc = new OverrideFileChooser(); + public SavePanelDescriptor() { savePanel = new SavePanel(); @@ -48,6 +54,22 @@ setPanelDescriptorIdentifier(IDENTIFIER); setPanelComponent(savePanel); + fc.setFileFilter(new FileFilter() { + + @Override + public String getDescription() { + return "RDF/XML, OWL/XML"; + } + + @Override + public boolean accept(File f) { + if (f.isDirectory()) { + return true; + } + return f.getName().toLowerCase().endsWith(".owl") + || f.getName().toLowerCase().endsWith(".rdf"); + } + }); } @@ -77,21 +99,36 @@ @Override public void actionPerformed(ActionEvent e) { - OntologyModifier modifier = OREManager.getInstance().getModifier(); + if(e.getActionCommand().equals("Save and go to class choose panel")){ - modifier.saveOntology(); - if(LearningManager.getInstance().getLearningMode() == LearningManager.MANUAL_LEARN_MODE){ - getWizard().setCurrentPanel(ClassChoosePanelDescriptor.IDENTIFIER); - } else { - getWizard().setCurrentPanel(AutoLearnPanelDescriptor.IDENTIFIER); + if(saveOntology()){ + if(LearningManager.getInstance().getLearningMode() == LearningManager.MANUAL_LEARN_MODE){ + getWizard().setCurrentPanel(ClassChoosePanelDescriptor.IDENTIFIER); + } else { + getWizard().setCurrentPanel(AutoLearnPanelDescriptor.IDENTIFIER); + } } + }else if(e.getActionCommand().equals("Save and Exit")){ - modifier.saveOntology(); - getWizard().close(0); + if(saveOntology()){ + getWizard().close(0); + } + } } + + private boolean saveOntology(){ + int ret = fc.showSaveDialog(savePanel); + + if(ret == JFileChooser.APPROVE_OPTION){ + return true; + } else { + return false; + } + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2009-12-01 17:59:11 UTC (rev 1927) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2009-12-02 08:56:36 UTC (rev 1928) @@ -124,7 +124,7 @@ metricsPanel.setVisible(true); } - public void updateRecentList(){ + public void updateRecentList(ActionListener aL){ recentLinkBox.removeAll(); openFromRecentLinks.clear(); LinkLabel link; @@ -133,8 +133,9 @@ link.setName("recent"); openFromRecentLinks.add(link); recentLinkBox.add(link); - + link.addLinkListener(aL); } + } public void addListeners(ActionListener aL) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-12-15 22:17:21
|
Revision: 1931 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1931&view=rev Author: lorenz_b Date: 2009-12-15 22:17:07 +0000 (Tue, 15 Dec 2009) Log Message: ----------- Fixed SPARQL-extraction, now cursor is set to default after canceling task. Added table to last wizard step - here all changes during the repair process are shown. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/SavePanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTableModel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -70,7 +70,7 @@ private OWLDataFactory factory; private OWLOntologyManager manager; - private Set<OWLOntologyChange> globalChanges; + private List<OWLOntologyChange> globalChanges; @@ -80,7 +80,7 @@ this.factory = manager.getOWLDataFactory(); this.ontology = (reasoner.getOWLAPIOntologies()); - globalChanges = new HashSet<OWLOntologyChange>(); + globalChanges = new ArrayList<OWLOntologyChange>(); } @@ -115,12 +115,26 @@ } + public void addNewClassDescription(NamedClass old, Description newDesc){ + OWLDescription oldOWLAPIDesc = OWLAPIConverter.getOWLAPIDescription(old); + OWLDescription newOWLAPIDesc = OWLAPIConverter.getOWLAPIDescription(newDesc); + OWLEquivalentClassesAxiom equivAxiom = factory.getOWLEquivalentClassesAxiom(oldOWLAPIDesc, newOWLAPIDesc); + AddAxiom add = new AddAxiom(ontology, equivAxiom); + try { + manager.applyChange(add); + globalChanges.add(add); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + /** * Rewrite ontology by replacing old class with new learned class description. * @param newDesc * @param oldClass */ - public List<OWLOntologyChange> rewriteClassDescription(Description newDesc, Description oldClass){ + public List<OWLOntologyChange> rewriteClassDescription(NamedClass newDesc, Description oldClass){ OWLDescription newClassDesc = OWLAPIDescriptionConvertVisitor.getOWLDescription(newDesc); // OWLDescription oldClassDesc = OWLAPIDescriptionConvertVisitor.getOWLDescription(oldClass); @@ -492,6 +506,10 @@ } + public List<OWLOntologyChange> getChanges(){ + return globalChanges; + } + /** * checks whether desc1 and desc2 are disjoint. * @param desc1 class 1 Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -11,7 +11,6 @@ import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntologyChange; -import org.semanticweb.owl.model.OWLOntologyChangeException; import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.RemoveAxiom; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -84,7 +84,7 @@ return b; } }); - getColumn(4).setHeaderValue(new ImageIcon("src/dl-learner/org/dllearner/tools/ore/DeleteCross.gif")); + getColumn(4).setHeaderValue(new ImageIcon(this.getClass().getResource("../DeleteCross.gif"))); getSelectionModel().addListSelectionListener( new ListSelectionListener() { @@ -200,7 +200,7 @@ setForeground(table.getForeground()); setBackground(UIManager.getColor("Button.background")); } - setIcon(new ImageIcon("src/dl-learner/org/dllearner/tools/ore/Edit16.gif")); + setIcon(new ImageIcon(this.getClass().getResource("../Edit16.gif"))); setText(""); return this; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; @@ -41,6 +42,7 @@ import javax.swing.JToggleButton; import javax.swing.ProgressMonitor; import javax.swing.SwingWorker; +import javax.swing.Timer; import javax.swing.border.TitledBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @@ -84,26 +86,41 @@ private SparqlExtractOptionsPanel optionsPanel; private JToggleButton optionsButton; - private ImageIcon toggledIcon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/toggled.gif"); - private ImageIcon untoggledIcon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/untoggled.gif"); + private ImageIcon toggledIcon = new ImageIcon(this.getClass().getResource("../toggled.gif")); + private ImageIcon untoggledIcon = new ImageIcon(this.getClass().getResource("../untoggled.gif")); - + private final String URLHelpText = "<html><table border=\"1\">" + + "<tr>" + + "<th>SPARQL endpoint URL</th>" + + "<th>The URL of the SPARQL endpoint</th>" + + "</tr>" + + "<tr>" + + "<th>Default graph URI</th>" + + "<th>Absolute URL of RDF data source(s) to populate the background graph</th>" + + "</tr> " + + "</table></html>"; + + private final String classHelpText = "Enter a class uri or label for which a " + + "relevant fragment should be extracted."; + private SPARQLTasks task; private SparqlKnowledgeSource ks; private OntologyExtractingTask extractTask; private ProgressMonitor mon; + private Timer t; private Map<URL, List<String>> endpointToDefaultGraph; public ExtractFromSparqlDialog(JFrame owner) { super(owner, "Extract fragment from SPARQL endpoint", true); - + getLocale().setDefault(Locale.ENGLISH); + // Create the controls createControls(); //create main panel createSparqlPanel(); - //add predifined endpoints - addPredifinedEndpoints(); + //add predefined endpoints + addPredefinedEndpoints(); positionErrorDialog(owner); } @@ -159,6 +176,7 @@ endPointHolderPanel.add(new JLabel("Default graph URI (optional)")); endPointHolderPanel.add(defaultGraphField); HelpablePanel endPointHelpPanel = new HelpablePanel(endPointHolderPanel); + endPointHelpPanel.setHelpText(URLHelpText); endPointHelpPanel.setBorder(new TitledBorder("SPARQL endpoint")); panel.add(endPointHelpPanel, c); @@ -181,6 +199,7 @@ classField.getDocument().addDocumentListener(this); classHolderPanel.add(classField); HelpablePanel classHelpPanel = new HelpablePanel(classHolderPanel); + classHelpPanel.setHelpText(classHelpText); classHelpPanel.setBorder(new TitledBorder("Class to investigate")); panel.add(classHelpPanel, c); @@ -246,7 +265,7 @@ getContentPane().add(panel, BorderLayout.CENTER); } - private void addPredifinedEndpoints(){ + private void addPredefinedEndpoints(){ endpointToDefaultGraph = new HashMap<URL, List<String>>(); for(SparqlEndpoint endpoint : SparqlEndpoint.listEndpoints()){ endpointToDefaultGraph.put(endpoint.getURL(), endpoint.getDefaultGraphURIs()); @@ -318,12 +337,35 @@ message.setText("Checking SPARQL endpoint availability"); setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + setLocale(Locale.ENGLISH); mon = new ProgressMonitor(this, "Extracting fragment", "", 0, 100); + mon.setMillisToDecideToPopup(0); + mon.setMillisToPopup(0); + mon.getAccessibleContext().getLocale().setDefault(Locale.ENGLISH); + t = new Timer(1000,new ActionListener() { + + + @Override + public void actionPerformed(ActionEvent e) { + + if(mon.isCanceled()){ + extractTask.cancel(true); + setCursor(null); + t.stop(); + + } + + } + }); + t.start(); + extractTask = new OntologyExtractingTask(this, mon); extractTask.addPropertyChangeListener(this); extractTask.execute(); + + } private boolean urlIsConnectable() @@ -470,9 +512,13 @@ okButton.setEnabled(true); message.setText("<html><font color=\"green\">Fragment successfully extracted</html>"); + } else if(isCancelled()){ + System.out.println("Canceled"); } } + + private SortedSet<String> getPosExamples(String concept){ SortedSet<String> examples = new TreeSet<String>(); SortedSet<String> superClasses = task.getSuperClasses(concept, 2); @@ -529,6 +575,7 @@ if ("progress" == evt.getPropertyName() ) { if(mon.isCanceled()){ extractTask.cancel(true); + this.setCursor(null); } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -27,7 +27,7 @@ * */ private static final long serialVersionUID = -621497634521668635L; - private final Icon deleteIcon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/Delete16.gif"); + private final Icon deleteIcon = new ImageIcon(this.getClass().getResource("../Delete16.gif")); public RepairTable() { super(new RepairTableModel()); Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTable.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -0,0 +1,39 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Color; +import java.util.List; + +import javax.swing.ListSelectionModel; + +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxTableCellRenderer; +import org.jdesktop.swingx.JXTable; +import org.semanticweb.owl.model.OWLOntologyChange; + +public class StatsTable extends JXTable { + + /** + * + */ + private static final long serialVersionUID = -653996873095101940L; + + public StatsTable(){ + + setModel(new StatsTableModel()); + setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + setEditable(false); + setTableHeader(null); + setGridColor(Color.LIGHT_GRAY); + setRowHeight(getRowHeight() + 4); + getColumn(0).setMaxWidth(100); + setShowGrid(false); +// getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); + setRowSelectionAllowed(false); + setCellSelectionEnabled(false); + setColumnSelectionAllowed(false); + } + + public void setChanges(List<OWLOntologyChange> changes){ + ((StatsTableModel)getModel()).setChanges(changes); + } + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsTableModel.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -0,0 +1,53 @@ +package org.dllearner.tools.ore.ui; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.table.AbstractTableModel; + +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxRenderer; +import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.RemoveAxiom; + +public class StatsTableModel extends AbstractTableModel { + + /** + * + */ + private static final long serialVersionUID = 3186572572333098359L; + private List<OWLOntologyChange> changes; + + public StatsTableModel(){ + changes = new ArrayList<OWLOntologyChange>(); + } + + @Override + public int getColumnCount() { + return 2; + } + + @Override + public int getRowCount() { + return changes.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if(columnIndex == 0){ + if(changes.get(rowIndex) instanceof RemoveAxiom){ + return "Removed"; + } else { + return "Added"; + } + } else { + return ManchesterSyntaxRenderer.render(changes.get(rowIndex).getAxiom(), false, 0); + } + } + + public void setChanges(List<OWLOntologyChange> changes){ + this.changes.clear(); + this.changes.addAll(changes); + fireTableDataChanged(); + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesTableCellRenderer.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesTableCellRenderer.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -28,7 +28,7 @@ if(value instanceof OWLClass){ if(rootClasses.contains((OWLClass)value)){ // setText(value.toString() ); - setIcon(new ImageIcon("src/dl-learner/org/dllearner/tools/ore/information.png")); + setIcon(new ImageIcon(this.getClass().getResource("../information.png"))); // setHorizontalTextPosition(LEADING); } else { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxTableCellRenderer.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxTableCellRenderer.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -34,7 +34,7 @@ } @Override - protected void setValue(Object value) { + protected void setValue(Object value) {System.out.println(value); if(value instanceof Description){ OWLDescription desc = OWLAPIDescriptionConvertVisitor.getOWLDescription((Description)value); render(desc); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -178,9 +178,14 @@ LearningManager.getInstance().setNewDescriptions(descriptions); } + } else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(ManualLearnPanelDescriptor.IDENTIFIER)){ + OREManager oreMan = OREManager.getInstance(); + oreMan.getModifier().addNewClassDescription(oreMan.getCurrentClass2Learn(), + oreMan.getNewClassDescription().getDescription()); } else if(nextPanelDescriptor.equals(RepairPanelDescriptor.IDENTIFIER)){ + RepairPanelDescriptor repair = ((RepairPanelDescriptor) model .getPanelHashMap().get(nextPanelDescriptor)); if(LearningManager.getInstance().getLearningMode() == LearningManager.AUTO_LEARN_MODE){ @@ -205,6 +210,22 @@ // .getOntologyChanges().addAll(changes); } + if(nextPanelDescriptor.equals(RepairPanelDescriptor.IDENTIFIER)){ + + RepairPanelDescriptor repair = ((RepairPanelDescriptor) model + .getPanelHashMap().get(nextPanelDescriptor)); + if(LearningManager.getInstance().getLearningMode() == LearningManager.AUTO_LEARN_MODE){ + repair.setManualPanel(false); + repair.fillExamplesLists(); + } else { + repair.setManualPanel(true); + repair.fillExamplesLists(); + } + + + + + } if (nextPanelDescriptor instanceof WizardPanelDescriptor.FinishIdentifier) { wizard.close(Wizard.FINISH_RETURN_CODE); } else { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -108,13 +108,13 @@ public void setManualPanel(boolean value){ repairPanel.setManualStyle(value); + repairPanel.addActionListeners(this); } /** * Method to control actions by button pressed. */ public void actionPerformed(ActionEvent event) { - if(event.getActionCommand().equals("next")){ LearningManager.getInstance().setNextDescription(); } else { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -81,6 +81,7 @@ @Override public void aboutToDisplayPanel() { getWizard().getInformationField().setText(INFORMATION); + savePanel.updateChangesTable(); } @Override @@ -129,6 +130,8 @@ } } + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/SavePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/SavePanel.java 2009-12-14 20:14:32 UTC (rev 1930) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/SavePanel.java 2009-12-15 22:17:07 UTC (rev 1931) @@ -20,11 +20,19 @@ package org.dllearner.tools.ore.ui.wizard.panels; +import java.awt.GridBagConstraints; +import java.awt.GridLayout; import java.awt.event.ActionListener; +import javax.swing.BoxLayout; import javax.swing.JButton; +import javax.swing.JFrame; import javax.swing.JPanel; +import javax.swing.JScrollPane; +import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.ui.StatsTable; + /** * JPanel where to buttons are added to save and go back to class choose panel. * @author Lorenz Buehmann @@ -38,13 +46,26 @@ private static final long serialVersionUID = 4301954036023325496L; private JButton saveExit; private JButton saveGoBack; + private StatsTable changesTable; public SavePanel(){ - super(); + setLayout(new GridLayout(0,1)); + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.BOTH; + c.weightx = 1.0; + c.weighty = 1.0; + changesTable = new StatsTable(); + add(new JScrollPane(changesTable), c); + JPanel buttonHolderPanel = new JPanel(); + buttonHolderPanel.setLayout(new BoxLayout(buttonHolderPanel, BoxLayout.X_AXIS)); + saveExit = new JButton("Save and Exit"); + buttonHolderPanel.add(saveExit); + saveGoBack = new JButton("Save and go to class choose panel"); - add(saveExit); - add(saveGoBack); + buttonHolderPanel.add(saveGoBack); + + add(buttonHolderPanel, c); } /** @@ -55,4 +76,15 @@ saveExit.addActionListener(aL); saveGoBack.addActionListener(aL); } + + public void updateChangesTable(){ + changesTable.setChanges(OREManager.getInstance().getModifier().getChanges()); + } + + public static void main(String[] args){ + JFrame frame = new JFrame(); + frame.add(new SavePanel()); + frame.setSize(400, 400); + frame.setVisible(true); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-01-05 11:17:37
|
Revision: 1984 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1984&view=rev Author: lorenz_b Date: 2010-01-05 11:17:30 +0000 (Tue, 05 Jan 2010) Log Message: ----------- Fixed bug caused by forgetting to keep track of imports. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-01-04 11:01:47 UTC (rev 1983) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-01-05 11:17:30 UTC (rev 1984) @@ -61,7 +61,8 @@ OREManager.getInstance().addListener(this); this.reasoner = oreMan.getReasoner().getReasoner(); this.manager = reasoner.getManager(); - this.ontology = reasoner.getLoadedOntologies().iterator().next(); + this.ontology = oreMan.getReasoner().getOWLAPIOntologies(); + System.out.println(ontology); dataFactory = manager.getOWLDataFactory(); @@ -74,7 +75,7 @@ listeners = new ArrayList<ExplanationManagerListener>(); - gen = new CachedExplanationGenerator(ontology, reasoner); + gen = new CachedExplanationGenerator(reasoner.getLoadedOntologies()); } @@ -304,9 +305,9 @@ @Override public void activeOntologyChanged() { + reasoner = OREManager.getInstance().getReasoner().getReasoner(); ontology = OREManager.getInstance().getReasoner().getOWLAPIOntologies(); - reasoner = OREManager.getInstance().getReasoner().getReasoner(); - gen = new CachedExplanationGenerator(ontology, reasoner); + gen = new CachedExplanationGenerator(reasoner.getLoadedOntologies()); orderingMap.clear(); usageChecker = new AxiomUsageChecker(ontology); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2010-01-04 11:01:47 UTC (rev 1983) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2010-01-05 11:17:30 UTC (rev 1984) @@ -15,7 +15,6 @@ import org.dllearner.tools.ore.TaskManager; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; -import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; @@ -46,11 +45,11 @@ private ExplanationType explanationType = ExplanationType.REGULAR; - private OWLOntology ontology; + private Set<OWLOntology> ontologies; private OWLOntologyManager manager; - public CachedExplanationGenerator(OWLOntology ontology, Reasoner reasoner){ - this.ontology = ontology; + public CachedExplanationGenerator(Set<OWLOntology> ontologies){ + this.ontologies = ontologies; this.manager = OWLManager.createOWLOntologyManager(); axiom2Module = new HashMap<OWLAxiom, OWLOntology>(); @@ -199,7 +198,7 @@ if(explanations == null || lastRequestedSize.intValue() != -1 && lastRequestedSize.intValue() < limit){ OWLOntology module = axiom2Module.get(entailment); if(module == null){ - module = OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(Collections.singleton(ontology), entailment.getSignature(), ModuleType.TOP_OF_BOT)); + module = OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(ontologies, entailment.getSignature(), ModuleType.TOP_OF_BOT)); } axiom2Module.put(entailment, module); laconicExpGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(module)); @@ -239,7 +238,7 @@ if(explanations == null || lastRequestedSize.intValue() != -1 && lastRequestedSize.intValue() < limit){ OWLOntology module = axiom2Module.get(entailment); if(module == null){ - module = OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(Collections.singleton(ontology), entailment.getSignature(), ModuleType.TOP_OF_BOT)); + module = OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(ontologies, entailment.getSignature(), ModuleType.TOP_OF_BOT)); } axiom2Module.put(entailment, module); regularExpGen = new PelletExplanationGenerator(manager, Collections.singleton(module)); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java 2010-01-04 11:01:47 UTC (rev 1983) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java 2010-01-05 11:17:30 UTC (rev 1984) @@ -55,7 +55,7 @@ // If there is no existing reasoner create a new one and load the ontologies if( reasoner == null ) { reasoner = new Reasoner( manager ); - reasoner.loadOntologies( ontologies ); + reasoner.loadOntologies( manager.getImportsClosure(ontologies.iterator().next())); } // Create a single explanation generator @@ -69,7 +69,7 @@ // Set the necessary fields expGen.setReasonerFactory( new PelletReasonerFactory() ); expGen.setReasoner( reasoner ); - expGen.setOntologies( ontologies ); + expGen.setOntologies( manager.getImportsClosure(ontologies.iterator().next()) ); // Create the converter that will translate axioms into class expressions converter = new SatisfiabilityConverter( manager.getOWLDataFactory() ); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java 2010-01-04 11:01:47 UTC (rev 1983) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java 2010-01-05 11:17:30 UTC (rev 1984) @@ -64,6 +64,7 @@ } private void setNextButtonEnabled2ConsistentOntology(){ + reasoner.refresh(); if(reasoner.isConsistent()){ getWizard().setNextFinishButtonEnabled(true); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-03-07 10:26:06
|
Revision: 2094 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2094&view=rev Author: lorenz_b Date: 2010-03-07 10:25:59 +0000 (Sun, 07 Mar 2010) Log Message: ----------- Continued axiom editor component. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLClassAxiomEditor.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/InputVerificationStatusChangedListener.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifiedInputEditor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifyingOptionPane.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/DescriptionComparator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxOWLObjectRendererImpl.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxObjectRenderer.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-03-06 18:44:55 UTC (rev 2093) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -37,6 +37,7 @@ import org.dllearner.tools.ore.cache.OWLObjectRenderingCache; import org.dllearner.tools.ore.ui.DescriptionLabel; import org.dllearner.tools.ore.ui.editor.OWLEntityFinder; +import org.dllearner.tools.ore.ui.rendering.ManchesterOWLSyntaxOWLObjectRendererImpl; import org.dllearner.tools.ore.ui.rendering.OWLEntityRenderer; import org.dllearner.utilities.owl.OWLAPIConverter; import org.mindswap.pellet.exceptions.InconsistentOntologyException; @@ -55,7 +56,6 @@ import org.semanticweb.owl.model.UnknownOWLOntologyException; import org.semanticweb.owl.util.SimpleShortFormProvider; -import uk.ac.manchester.cs.owl.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; public class OREManager { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2010-03-06 18:44:55 UTC (rev 2093) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -2,8 +2,11 @@ import java.awt.Color; import java.awt.Component; +import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; @@ -14,9 +17,12 @@ import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -30,13 +36,19 @@ import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.RepairManagerListener; import org.dllearner.tools.ore.explanation.Explanation; +import org.dllearner.tools.ore.ui.editor.InputVerificationStatusChangedListener; import org.dllearner.tools.ore.ui.editor.OWLClassAxiomEditor; +import org.dllearner.tools.ore.ui.editor.VerifiedInputEditor; +import org.dllearner.tools.ore.ui.editor.VerifyingOptionPane; import org.dllearner.tools.ore.ui.rendering.TextAreaRenderer; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.protege.editor.core.Disposable; +import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLClassAxiom; +import org.semanticweb.owl.model.OWLObject; import org.semanticweb.owl.model.OWLOntologyChange; import uk.ac.manchester.cs.owl.dlsyntax.DLSyntaxObjectRenderer; @@ -256,10 +268,12 @@ @Override public void actionPerformed(ActionEvent e) { fireEditingStopped(); - JDialog dialog = new JDialog(); - dialog.add(new OWLClassAxiomEditor(OREManager.getInstance()).getEditorComponent()); - dialog.pack(); - dialog.setVisible(true); + OWLClassAxiomEditor editor = new OWLClassAxiomEditor(OREManager.getInstance()); + OWLAxiom ax = ((ExplanationTableModel)getModel()).getOWLAxiomAtRow(2); + if(ax instanceof OWLClassAxiom){ + editor.setEditedObject((OWLClassAxiom) ax); + } + showEditorDialog(editor, ax); } } @@ -296,9 +310,65 @@ repMan.removeListener(this); } + private void showEditorDialog(final OWLClassAxiomEditor editor, OWLObject value) { + if (editor == null) { + return; + } + // Create the editing component dialog - we use an option pane + // so that the buttons and keyboard actions are what are expected + // by the user. + final JComponent editorComponent = editor.getEditorComponent(); + final VerifyingOptionPane optionPane = new VerifyingOptionPane( + editorComponent) { - + public void selectInitialValue() { + // This is overriden so that the option pane dialog default + // button + // doesn't get the focus. + } + }; + final InputVerificationStatusChangedListener verificationListener = new InputVerificationStatusChangedListener() { + public void verifiedStatusChanged(boolean verified) { + optionPane.setOKEnabled(verified); + } + }; + // if the editor is verifying, will need to prevent the OK button from + // being available + if (editor instanceof VerifiedInputEditor) { + ((VerifiedInputEditor) editor) + .addStatusChangedListener(verificationListener); + } + final Component parent = SwingUtilities.getAncestorOfClass(Frame.class, getParent()); + final JDialog dlg = optionPane.createDialog(parent, null); + // The editor shouldn't be modal (or should it?) + dlg.setModal(false); + dlg.setResizable(true); + dlg.pack(); + dlg.setLocationRelativeTo(parent); + dlg.addComponentListener(new ComponentAdapter() { + public void componentHidden(ComponentEvent e) { + Object retVal = optionPane.getValue(); + editorComponent.setPreferredSize(editorComponent.getSize()); + if (retVal != null && retVal.equals(JOptionPane.OK_OPTION)) { + handleEditFinished(editor); + } +// setSelectedValue(frameObject, true); + if (editor instanceof VerifiedInputEditor) { + ((VerifiedInputEditor) editor) + .removeStatusChangedListener(verificationListener); + } +// editor.dispose(); + } + }); + + dlg.setTitle(OREManager.getInstance().getRendering(value)); + dlg.setVisible(true); + } + void handleEditFinished(OWLClassAxiomEditor editor){ + System.out.println(editor.getEditedObject()); + } + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java 2010-03-06 18:44:55 UTC (rev 2093) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -9,7 +9,9 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Collection; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.StringTokenizer; import javax.swing.BorderFactory; @@ -44,7 +46,7 @@ * that the text is well formed and provides feedback if the * text is not well formed. */ -public class ExpressionEditor<O> extends JTextPane{ +public class ExpressionEditor<O> extends JTextPane implements VerifiedInputEditor{ private static Logger logger = Logger.getLogger(ExpressionEditor.class); @@ -223,12 +225,13 @@ timer.restart(); clearError(); performHighlighting(); + notifyValidationChanged(false); } private void setError(OWLExpressionParserException e) { logger.debug("Set error " + e); - + notifyValidationChanged(e == null); if (e != null) { ToolTipManager.sharedInstance().setInitialDelay(ERROR_TOOL_TIP_INITIAL_DELAY); ToolTipManager.sharedInstance().setDismissDelay(ERROR_TOOL_TIP_DISMISS_DELAY); @@ -335,6 +338,30 @@ } StyleConstants.setForeground(getStyledDocument().addStyle(Color.BLACK.toString(), null), Color.BLACK); } + +///////////////////////// content verification + private Set<InputVerificationStatusChangedListener> listeners = new HashSet<InputVerificationStatusChangedListener>(); + + private boolean previousValue = true; + + public void addStatusChangedListener(InputVerificationStatusChangedListener listener) { + listeners.add(listener); + } + + public void removeStatusChangedListener(InputVerificationStatusChangedListener listener) { + listeners.remove(listener); + } + + private void notifyValidationChanged(boolean valid){ + if (valid != previousValue){ // only report changes + previousValue = valid; + for (InputVerificationStatusChangedListener l : listeners){ + l.verifiedStatusChanged(valid); + } + } + } + + } Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/InputVerificationStatusChangedListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/InputVerificationStatusChangedListener.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/InputVerificationStatusChangedListener.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -0,0 +1,5 @@ +package org.dllearner.tools.ore.ui.editor; + +public interface InputVerificationStatusChangedListener { + void verifiedStatusChanged(boolean newState); +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLClassAxiomEditor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLClassAxiomEditor.java 2010-03-06 18:44:55 UTC (rev 2093) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLClassAxiomEditor.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -10,7 +10,7 @@ import org.semanticweb.owl.model.OWLClassAxiom; import org.semanticweb.owl.model.OWLException; -public class OWLClassAxiomEditor { +public class OWLClassAxiomEditor implements VerifiedInputEditor{ private ExpressionEditor<OWLClassAxiom> editor; @@ -92,13 +92,13 @@ setEditedObject(null); } -// -// public void addStatusChangedListener(InputVerificationStatusChangedListener listener) { -// editor.addStatusChangedListener(listener); -// } -// -// -// public void removeStatusChangedListener(InputVerificationStatusChangedListener listener) { -// editor.removeStatusChangedListener(listener); -// } + + public void addStatusChangedListener(InputVerificationStatusChangedListener listener) { + editor.addStatusChangedListener(listener); + } + + + public void removeStatusChangedListener(InputVerificationStatusChangedListener listener) { + editor.removeStatusChangedListener(listener); + } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifiedInputEditor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifiedInputEditor.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifiedInputEditor.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -0,0 +1,10 @@ +package org.dllearner.tools.ore.ui.editor; + +public interface VerifiedInputEditor { + + void addStatusChangedListener( + InputVerificationStatusChangedListener listener); + + void removeStatusChangedListener( + InputVerificationStatusChangedListener listener); +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifyingOptionPane.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifyingOptionPane.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/VerifyingOptionPane.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -0,0 +1,62 @@ +package org.dllearner.tools.ore.ui.editor; + +import java.awt.Component; + +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.UIManager; + +import org.apache.log4j.Logger; + +public class VerifyingOptionPane extends JOptionPane { + + /** + * + */ + private static final long serialVersionUID = -6308201481924625979L; + + private static final Logger logger = Logger.getLogger(VerifyingOptionPane.class); + + private JButton okButton; + + + public VerifyingOptionPane(JComponent c) { + super(c, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); + } + + public VerifyingOptionPane(JComponent c, int messageType, int optionType) { + super(c, messageType, optionType); + } + + public void setOKEnabled(boolean enabled){ + if (okButton == null){ + okButton = getButtonComponent(this, JButton.class, (String)UIManager.get("OptionPane.okButtonText")); + } + if (okButton != null){ + okButton.setEnabled(enabled); + } + else{ + logger.warn("Cannot find OK button for this system. Please report this with details of your OS and language."); + } + } + + private <T extends JComponent> T getButtonComponent(JComponent parent, Class<T> type, String name) { + if (type.isAssignableFrom(parent.getClass())){ + if (parent instanceof JButton){ + if (name.equals(((JButton)parent).getText())){ + return (T)parent; + } + } + } + for (Component c : parent.getComponents()){ + if (c instanceof JComponent){ + T target = getButtonComponent((JComponent)c, type, name); + if (target != null){ + return target; + } + } + } + return null; + } +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/DescriptionComparator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/DescriptionComparator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/DescriptionComparator.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -0,0 +1,109 @@ +package org.dllearner.tools.ore.ui.rendering; + +import org.semanticweb.owl.model.*; + +import java.util.Comparator; + +/** + * Author: Simon Jupp<br> + * Date: Jan 11, 2007<br> + * The University of Manchester<br> + * Bio-Health Informatics Group<br> + */ +public class DescriptionComparator implements OWLDescriptionVisitor, Comparator<OWLObject> { + + private int last = 0; + + public int compare(OWLObject o, OWLObject o1) { + + int first = 0; + if(o instanceof OWLDescription) { + ((OWLDescription) o).accept(this); + } + first = last; + if (o1 instanceof OWLDescription) { + ((OWLDescription) o1).accept(this); + } + + + return signum (first - last); + } + + public int signum (int diff) { + if (diff > 0) return 1; + if (diff <0) return -1; + else return 0; + } + + public void visit(OWLClass desc) { + last = 1; + } + + public void visit(OWLObjectSomeRestriction desc) { + last = 2; + } + + public void visit(OWLObjectAllRestriction desc) { + last = 3; + } + + public void visit(OWLDataSomeRestriction desc) { + last = 4; + } + + public void visit(OWLDataAllRestriction desc) { + last = 5; + } + + public void visit(OWLObjectValueRestriction desc) { + last = 6; + } + + public void visit(OWLDataValueRestriction desc) { + last = 7; + } + + public void visit(OWLObjectMinCardinalityRestriction desc) { + last = 8; + } + + public void visit(OWLDataMinCardinalityRestriction desc) { + last = 9; + } + + public void visit(OWLObjectMaxCardinalityRestriction desc) { + last = 10; + } + + public void visit(OWLDataMaxCardinalityRestriction desc) { + last = 11; + } + + public void visit(OWLObjectExactCardinalityRestriction desc) { + last = 12; + } + + public void visit(OWLDataExactCardinalityRestriction desc) { + last = 13; + } + + public void visit(OWLObjectComplementOf desc) { + last = 14; + } + + public void visit(OWLObjectUnionOf desc) { + last = 15; + } + + public void visit(OWLObjectIntersectionOf desc) { + last = 16; + } + + public void visit(OWLObjectSelfRestriction desc) { + last = 17; + } + + public void visit(OWLObjectOneOf desc) { + last = 18; + } +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxOWLObjectRendererImpl.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxOWLObjectRendererImpl.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxOWLObjectRendererImpl.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -0,0 +1,94 @@ +package org.dllearner.tools.ore.ui.rendering; + +import org.semanticweb.owl.io.OWLObjectRenderer; +import org.semanticweb.owl.model.OWLObject; +import org.semanticweb.owl.util.ShortFormProvider; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +/* + * Copyright (C) 2007, University of Manchester + * + * Modifications to the initial code base are copyright of their + * respective authors, or their employers as appropriate. Authorship + * of the modifications may be determined from the ChangeLog placed at + * the end of this file. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + + * This library 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 + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +/** + * Author: Matthew Horridge<br> + * The University Of Manchester<br> + * Bio-Health Informatics Group<br> + * Date: 25-Nov-2007<br><br> + * + * An implementation of the OWLObjectRenderer interface. (Renders + * standalone class descriptions and axioms in the manchester syntax). + */ +public class ManchesterOWLSyntaxOWLObjectRendererImpl implements OWLObjectRenderer { + + private ManchesterOWLSyntaxObjectRenderer ren; + + private WriterDelegate writerDelegate; + + public ManchesterOWLSyntaxOWLObjectRendererImpl() { + writerDelegate = new WriterDelegate(); + ren = new ManchesterOWLSyntaxObjectRenderer(writerDelegate); + } + + + public String render(OWLObject object) { + writerDelegate.reset(); + object.accept(ren); + return writerDelegate.toString(); + } + + + public void setShortFormProvider(ShortFormProvider shortFormProvider) { + ren.setShortFormProvider(shortFormProvider); + } + + private class WriterDelegate extends Writer { + + private StringWriter delegate; + + private void reset() { + delegate = new StringWriter(); + } + + + public String toString() { + return delegate.getBuffer().toString(); + } + + + public void close() throws IOException { + delegate.close(); + } + + + public void flush() throws IOException { + delegate.flush(); + } + + + public void write(char cbuf[], int off, int len) throws IOException { + delegate.write(cbuf, off, len); + } + } +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxObjectRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxObjectRenderer.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxObjectRenderer.java 2010-03-07 10:25:59 UTC (rev 2094) @@ -0,0 +1,859 @@ +package org.dllearner.tools.ore.ui.rendering; + +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.AND; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.ANTI_SYMMETRIC; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.DIFFERENT_FROM; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.DISJOINT_UNION_OF; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.DISJOINT_WITH; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.DOMAIN; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.EQUIVALENT_TO; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.EXACTLY; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.FACET_RESTRICTION_SEPARATOR; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.FUNCTIONAL; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.INVERSE; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.INVERSE_FUNCTIONAL; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.IRREFLEXIVE; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.MAX; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.MIN; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.NOT; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.ONE_OF_DELIMETER; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.ONLY; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.OR; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.RANGE; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.REFLEXIVE; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.SAME_AS; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.SELF; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.SOME; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.SUBCLASS_OF; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.SUB_PROPERTY_OF; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.SYMMETRIC; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.THAT; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.TRANSITIVE; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.TYPES; +import static org.coode.manchesterowlsyntax.ManchesterOWLSyntax.VALUE; + +import java.io.Writer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.coode.manchesterowlsyntax.ManchesterOWLSyntax; +import org.semanticweb.owl.model.OWLAnonymousDescription; +import org.semanticweb.owl.model.OWLAntiSymmetricObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLAxiomAnnotationAxiom; +import org.semanticweb.owl.model.OWLCardinalityRestriction; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLClassAssertionAxiom; +import org.semanticweb.owl.model.OWLConstantAnnotation; +import org.semanticweb.owl.model.OWLDataAllRestriction; +import org.semanticweb.owl.model.OWLDataComplementOf; +import org.semanticweb.owl.model.OWLDataExactCardinalityRestriction; +import org.semanticweb.owl.model.OWLDataMaxCardinalityRestriction; +import org.semanticweb.owl.model.OWLDataMinCardinalityRestriction; +import org.semanticweb.owl.model.OWLDataOneOf; +import org.semanticweb.owl.model.OWLDataProperty; +import org.semanticweb.owl.model.OWLDataPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLDataPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLDataPropertyRangeAxiom; +import org.semanticweb.owl.model.OWLDataRangeFacetRestriction; +import org.semanticweb.owl.model.OWLDataRangeRestriction; +import org.semanticweb.owl.model.OWLDataSomeRestriction; +import org.semanticweb.owl.model.OWLDataSubPropertyAxiom; +import org.semanticweb.owl.model.OWLDataType; +import org.semanticweb.owl.model.OWLDataValueRestriction; +import org.semanticweb.owl.model.OWLDeclarationAxiom; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLDifferentIndividualsAxiom; +import org.semanticweb.owl.model.OWLDisjointClassesAxiom; +import org.semanticweb.owl.model.OWLDisjointDataPropertiesAxiom; +import org.semanticweb.owl.model.OWLDisjointObjectPropertiesAxiom; +import org.semanticweb.owl.model.OWLDisjointUnionAxiom; +import org.semanticweb.owl.model.OWLEntityAnnotationAxiom; +import org.semanticweb.owl.model.OWLEquivalentClassesAxiom; +import org.semanticweb.owl.model.OWLEquivalentDataPropertiesAxiom; +import org.semanticweb.owl.model.OWLEquivalentObjectPropertiesAxiom; +import org.semanticweb.owl.model.OWLFunctionalDataPropertyAxiom; +import org.semanticweb.owl.model.OWLFunctionalObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLImportsDeclaration; +import org.semanticweb.owl.model.OWLIndividual; +import org.semanticweb.owl.model.OWLInverseFunctionalObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLInverseObjectPropertiesAxiom; +import org.semanticweb.owl.model.OWLIrreflexiveObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLNegativeDataPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLNegativeObjectPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLObject; +import org.semanticweb.owl.model.OWLObjectAllRestriction; +import org.semanticweb.owl.model.OWLObjectAnnotation; +import org.semanticweb.owl.model.OWLObjectComplementOf; +import org.semanticweb.owl.model.OWLObjectExactCardinalityRestriction; +import org.semanticweb.owl.model.OWLObjectIntersectionOf; +import org.semanticweb.owl.model.OWLObjectMaxCardinalityRestriction; +import org.semanticweb.owl.model.OWLObjectMinCardinalityRestriction; +import org.semanticweb.owl.model.OWLObjectOneOf; +import org.semanticweb.owl.model.OWLObjectProperty; +import org.semanticweb.owl.model.OWLObjectPropertyAssertionAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyChainSubPropertyAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyExpression; +import org.semanticweb.owl.model.OWLObjectPropertyInverse; +import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; +import org.semanticweb.owl.model.OWLObjectSelfRestriction; +import org.semanticweb.owl.model.OWLObjectSomeRestriction; +import org.semanticweb.owl.model.OWLObjectSubPropertyAxiom; +import org.semanticweb.owl.model.OWLObjectUnionOf; +import org.semanticweb.owl.model.OWLObjectValueRestriction; +import org.semanticweb.owl.model.OWLObjectVisitor; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyAnnotationAxiom; +import org.semanticweb.owl.model.OWLPropertyExpression; +import org.semanticweb.owl.model.OWLQuantifiedRestriction; +import org.semanticweb.owl.model.OWLReflexiveObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLRestriction; +import org.semanticweb.owl.model.OWLSameIndividualsAxiom; +import org.semanticweb.owl.model.OWLSubClassAxiom; +import org.semanticweb.owl.model.OWLSymmetricObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLTransitiveObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLTypedConstant; +import org.semanticweb.owl.model.OWLUntypedConstant; +import org.semanticweb.owl.model.OWLValueRestriction; +import org.semanticweb.owl.model.SWRLAtom; +import org.semanticweb.owl.model.SWRLAtomConstantObject; +import org.semanticweb.owl.model.SWRLAtomDObject; +import org.semanticweb.owl.model.SWRLAtomDVariable; +import org.semanticweb.owl.model.SWRLAtomIVariable; +import org.semanticweb.owl.model.SWRLAtomIndividualObject; +import org.semanticweb.owl.model.SWRLBuiltInAtom; +import org.semanticweb.owl.model.SWRLClassAtom; +import org.semanticweb.owl.model.SWRLDataRangeAtom; +import org.semanticweb.owl.model.SWRLDataValuedPropertyAtom; +import org.semanticweb.owl.model.SWRLDifferentFromAtom; +import org.semanticweb.owl.model.SWRLObjectPropertyAtom; +import org.semanticweb.owl.model.SWRLRule; +import org.semanticweb.owl.model.SWRLSameAsAtom; +import org.semanticweb.owl.vocab.XSDVocabulary; + +import uk.ac.manchester.cs.owl.mansyntaxrenderer.AbstractRenderer; + + + +/** + * Author: Matthew Horridge<br> + * The University Of Manchester<br> + * Bio-Health Informatics Group<br> + * Date: 25-Apr-2007<br><br> + */ +public class ManchesterOWLSyntaxObjectRenderer extends AbstractRenderer implements OWLObjectVisitor { + + public static final int LINE_LENGTH = 70; + + private boolean wrap = true; + + private DescriptionComparator descriptionComparator; + + + public ManchesterOWLSyntaxObjectRenderer(Writer writer) { + super(writer); + descriptionComparator = new DescriptionComparator(); + } + + + public void setWrap(boolean wrap) { + this.wrap = wrap; + } + + protected List<? extends OWLObject> sort(Collection<? extends OWLObject> objects) { + List<? extends OWLObject> sortedDescriptions = new ArrayList<OWLObject>(objects); + Collections.sort(sortedDescriptions, descriptionComparator); + return sortedDescriptions; + } + + + protected void write(Set<? extends OWLObject> objects, ManchesterOWLSyntax delimeter, boolean newline) { + int tab = getIndent(); + pushTab(tab); + for (Iterator<? extends OWLObject> it = sort(objects).iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + if (newline && wrap) { + writeNewLine(); + } + write(delimeter); + } + } + popTab(); + } + + + protected void write(Set<? extends OWLDescription> objects, boolean newline) { + boolean lastWasNamed = false; + boolean first = true; + + for (Iterator<? extends OWLObject> it = sort(objects).iterator(); it.hasNext();) { + OWLObject desc = it.next(); + if (!first) { + if (newline) { + writeNewLine(); + } + if (lastWasNamed && desc instanceof OWLRestriction) { + write("", THAT, " "); + } + else { + write("", AND, " "); + } + } + + first = false; + desc.accept(this); + + lastWasNamed = desc instanceof OWLClass; + } + } + + + private void writeRestriction(OWLQuantifiedRestriction restriction, ManchesterOWLSyntax keyword) { + restriction.getProperty().accept(this); + write(keyword); + if (restriction.getFiller() instanceof OWLAnonymousDescription) { + write("("); + } + restriction.getFiller().accept(this); + if (restriction.getFiller() instanceof OWLAnonymousDescription) { + write(")"); + } + } + + + private void writeRestriction(OWLValueRestriction restriction) { + restriction.getProperty().accept(this); + write(VALUE); + restriction.getValue().accept(this); + } + + + private void writeRestriction(OWLCardinalityRestriction restriction, ManchesterOWLSyntax keyword) { + restriction.getProperty().accept(this); + write(keyword); + write(Integer.toString(restriction.getCardinality())); +// if(restriction.isQualified()) { + writeSpace(); + restriction.getFiller().accept(this); +// } + + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // Class descriptions + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(OWLClass desc) { + write(getShortFormProvider().getShortForm(desc)); + } + + + public void visit(OWLObjectIntersectionOf desc) { + write(desc.getOperands(), true); + } + + + public void visit(OWLObjectUnionOf desc) { + write(desc.getOperands(), OR, true); + } + + + public void visit(OWLObjectComplementOf desc) { + write("", NOT, desc.isAnonymous() ? " " : ""); + if (desc.isAnonymous()) { + write("("); + } + desc.getOperand().accept(this); + if (desc.isAnonymous()) { + write(")"); + } + } + + + public void visit(OWLObjectSomeRestriction desc) { + writeRestriction(desc, SOME); + } + + + public void visit(OWLObjectAllRestriction desc) { + writeRestriction(desc, ONLY); + } + + + public void visit(OWLObjectValueRestriction desc) { + writeRestriction(desc); + } + + + public void visit(OWLObjectMinCardinalityRestriction desc) { + writeRestriction(desc, MIN); + } + + + public void visit(OWLObjectExactCardinalityRestriction desc) { + writeRestriction(desc, EXACTLY); + } + + + public void visit(OWLObjectMaxCardinalityRestriction desc) { + writeRestriction(desc, MAX); + } + + + public void visit(OWLObjectSelfRestriction desc) { + desc.getProperty().accept(this); + write(SOME); + write(SELF); + } + + + public void visit(OWLObjectOneOf desc) { + write("{"); + write(desc.getIndividuals(), ONE_OF_DELIMETER, false); + write("}"); + } + + + public void visit(OWLDataSomeRestriction desc) { + writeRestriction(desc, SOME); + } + + + public void visit(OWLDataAllRestriction desc) { + writeRestriction(desc, ONLY); + } + + + public void visit(OWLDataValueRestriction desc) { + writeRestriction(desc); + } + + + public void visit(OWLDataMinCardinalityRestriction desc) { + writeRestriction(desc, MIN); + } + + + public void visit(OWLDataExactCardinalityRestriction desc) { + writeRestriction(desc, EXACTLY); + } + + + public void visit(OWLDataMaxCardinalityRestriction desc) { + writeRestriction(desc, MAX); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // Entities stuff + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(OWLObjectProperty property) { + write(getShortFormProvider().getShortForm(property)); + } + + + public void visit(OWLDataProperty property) { + write(getShortFormProvider().getShortForm(property)); + } + + + public void visit(OWLIndividual individual) { + write(getShortFormProvider().getShortForm(individual)); + } + + + public void visit(OWLDataType dataType) { + write(dataType.getURI().getFragment()); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // Data stuff + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(OWLDataComplementOf node) { + write(NOT); + node.getDataRange().accept(this); + } + + + public void visit(OWLDataOneOf node) { + write("{"); + write(node.getValues(), ONE_OF_DELIMETER, false); + write("}"); + } + + + public void visit(OWLDataRangeRestriction node) { + node.getDataRange().accept(this); + write("["); + write(node.getFacetRestrictions(), FACET_RESTRICTION_SEPARATOR, false); + write("]"); + } + + + public void visit(OWLTypedConstant node) { + if (node.getDataType().getURI().equals(XSDVocabulary.DOUBLE.getURI())) { + write(node.getLiteral()); + } + else if (node.getDataType().getURI().equals(XSDVocabulary.STRING.getURI())) { + write("\""); + write(node.getLiteral()); + write("\""); + } + else if (node.getDataType().getURI().equals(XSDVocabulary.FLOAT.getURI())) { + write(node.getLiteral()); + write("f"); + } + else if (node.getDataType().getURI().equals(XSDVocabulary.INT.getURI())) { + write(node.getLiteral()); + } + else if (node.getDataType().getURI().equals(XSDVocabulary.INTEGER.getURI())) { + write(node.getLiteral()); + } + else { + write("\""); + pushTab(getIndent()); + write(node.getLiteral(), wrap ? LINE_LENGTH : Integer.MAX_VALUE); + popTab(); + write("\"^^"); + write(node.getDataType().getURI()); + } + } + + + public void visit(OWLUntypedConstant node) { + write("\""); + pushTab(getIndent()); + write(node.getLiteral(), wrap ? LINE_LENGTH : Integer.MAX_VALUE); + popTab(); + write("\""); + if (node.hasLang()) { + write("@"); + write(node.getLang()); + } + } + + + public void visit(OWLDataRangeFacetRestriction node) { + write(node.getFacet().getSymbolicForm()); + writeSpace(); + node.getFacetValue().accept(this); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // Property expression stuff + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(OWLObjectPropertyInverse property) { + write(INVERSE); + write("("); + property.getInverse().accept(this); + write(")"); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // Annotation stuff + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(OWLObjectAnnotation annotation) { + write(annotation.getAnnotationURI()); + writeSpace(); + annotation.getAnnotationValue().accept(this); + } + + + public void visit(OWLConstantAnnotation annotation) { + write(annotation.getAnnotationURI()); + writeSpace(); + annotation.getAnnotationValue().accept(this); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // Stand alone axiom representation + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(OWLSubClassAxiom axiom) { + axiom.getSubClass().accept(this); + write(SUBCLASS_OF); + axiom.getSuperClass().accept(this); + } + + + public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom) { + write(NOT); + write("("); + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + write(")"); + } + + + private void writePropertyCharacteristic(ManchesterOWLSyntax characteristic, OWLPropertyExpression prop) { + write(characteristic); + write("("); + prop.accept(this); + write(")"); + } + + + public void visit(OWLAntiSymmetricObjectPropertyAxiom axiom) { + writePropertyCharacteristic(ANTI_SYMMETRIC, axiom.getProperty()); + } + + + public void visit(OWLReflexiveObjectPropertyAxiom axiom) { + writePropertyCharacteristic(REFLEXIVE, axiom.getProperty()); + } + + + public void visit(OWLDisjointClassesAxiom axiom) { + write(axiom.getDescriptions(), DISJOINT_WITH, wrap); + } + + + public void visit(OWLDataPropertyDomainAxiom axiom) { + axiom.getProperty().accept(this); + write(DOMAIN); + axiom.getDomain().accept(this); + } + + + public void visit(OWLImportsDeclaration axiom) { + } + + + public void visit(OWLAxiomAnnotationAxiom axiom) { + } + + + public void visit(OWLObjectPropertyDomainAxiom axiom) { + axiom.getProperty().accept(this); + write(DOMAIN); + axiom.getDomain().accept(this); + } + + + public void visit(OWLEquivalentObjectPropertiesAxiom axiom) { + write(axiom.getProperties(), EQUIVALENT_TO, wrap); + } + + + public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) { + write(NOT); + write("("); + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + write(")"); + } + + + public void visit(OWLDifferentIndividualsAxiom axiom) { + write(axiom.getIndividuals(), DIFFERENT_FROM, wrap); + } + + + public void visit(OWLDisjointDataPropertiesAxiom axiom) { + write(axiom.getProperties(), DISJOINT_WITH, wrap); + } + + + public void visit(OWLDisjointObjectPropertiesAxiom axiom) { + write(axiom.getProperties(), DISJOINT_WITH, wrap); + } + + + public void visit(OWLObjectPropertyRangeAxiom axiom) { + axiom.getProperty().accept(this); + write(RANGE); + axiom.getRange().accept(this); + } + + + public void visit(OWLObjectPropertyAssertionAxiom axiom) { + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + } + + + public void visit(OWLFunctionalObjectPropertyAxiom axiom) { + writePropertyCharacteristic(FUNCTIONAL, axiom.getProperty()); + } + + + public void visit(OWLObjectSubPropertyAxiom axiom) { + axiom.getSubProperty().accept(this); + write(SUB_PROPERTY_OF); + axiom.getSuperProperty().accept(this); + } + + + public void visit(OWLDisjointUnionAxiom axiom) { + axiom.getOWLClass().accept(this); + write(DISJOINT_UNION_OF); + for(Iterator<OWLDescription> it = axiom.getDescriptions().iterator(); it.hasNext(); ) { + it.next().accept(this); + if(it.hasNext()) { + write(", "); + } + } + } + + + public void visit(OWLDeclarationAxiom axiom) { + + } + + + public void visit(OWLEntityAnnotationAxiom axiom) { + } + + + public void visit(OWLOntologyAnnotationAxiom axiom) { + } + + + public void visit(OWLSymmetricObjectPropertyAxiom axiom) { + writePropertyCharacteristic(SYMMETRIC, axiom.getProperty()); + } + + + public void visit(OWLDataPropertyRangeAxiom axiom) { + axiom.getProperty().accept(this); + write(RANGE); + axiom.getRange().accept(this); + } + + + public void visit(OWLFunctionalDataPropertyAxiom axiom) { + writePropertyCharacteristic(FUNCTIONAL, axiom.getProperty()); + } + + + public void visit(OWLEquivalentDataPropertiesAxiom axiom) { + write(axiom.getProperties(), EQUIVALENT_TO, wrap); + } + + + public void visit(OWLClassAssertionAxiom axiom) { + axiom.getIndividual().accept(this); + write(TYPES); + axiom.getDescription().accept(this); + } + + + public void visit(OWLEquivalentClassesAxiom axiom) { + write(axiom.getDescriptions(), EQUIVALENT_TO, wrap); + } + + + public void visit(OWLDataPropertyAssertionAxiom axiom) { + axiom.getSubject().accept(this); + write(" "); + axiom.getProperty().accept(this); + write(" "); + axiom.getObject().accept(this); + } + + + public void visit(OWLTransitiveObjectPropertyAxiom axiom) { + writePropertyCharacteristic(TRANSITIVE, axiom.getProperty()); + } + + + public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { + writePropertyCharacteristic(IRREFLEXIVE, axiom.getProperty()); + } + + + public void visit(OWLDataSubPropertyAxiom axiom) { + axiom.getSubProperty().accept(this); + write(SUB_PROPERTY_OF); + axiom.getSuperProperty().accept(this); + } + + + public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) { + writePropertyCharacteristic(INVERSE_FUNCTIONAL, axiom.getProperty()); + } + + + public void visit(OWLSameIndividualsAxiom axiom) { + write(axiom.getIndividuals(), SAME_AS, wrap); + } + + + public void visit(OWLObjectPropertyChainSubPropertyAxiom axiom) { + for (Iterator<OWLObjectPropertyExpression> it = axiom.getPropertyChain().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(" o "); + } + } + write(SUB_PROPERTY_OF); + axiom.getSuperProperty().accept(this); + } + + + public void visit(OWLInverseObjectPropertiesAxiom axiom) { + axiom.getFirstProperty().accept(this); + write(INVERSE); + axiom.getSecondProperty().accept(this); + } + + + public void visit(SWRLRule rule) { + for (Iterator<SWRLAtom> it = rule.getBody().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(", "); + } + } + write(" -> "); + for (Iterator<SWRLAtom> it = rule.getHead().iterator(); it.hasNext();) { + it.next().accept(this); + if (it.hasNext()) { + write(", "); + } + } + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // SWRL + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(SWRLClassAtom node) { + node.getPredicate().accept(this); + write("("); + node.getArgument().accept(this); + write(")"); + } + + + public void visit(SWRLDataRangeAtom node) { + node.getPredicate().accept(this); + write("("); + node.getArgument().accept(this); + write(")"); + } + + + public void visit(SWRLObjectPropertyAtom node) { + node.getPredicate().accept(this); + write("("); + node.getFirstArgument().accept(this); + write(", "); + node.getSecondArgument().accept(this); + write(")"); + } + + + public void visit(SWRLDataValuedPropertyAtom node) { + node.getPredicate().accept(this); + write("("); + node.getFirstArgument().accept(this); + write(", "); + node.getSecondArgument().accept(this); + write(")"); + } + + + public void visit(SWRLBuiltInAtom node) { + write(node.getPredicate().getShortName()); + write("("); + for(Iterator<SWRLAtomDObject> it = node.getArguments().iterator(); it.hasNext(); ) { + it.next().accept(this); + if(it.hasNext()) { + write(", "); + } + } + write(")"); + } + + + public void visit(SWRLAtomDVariable node) { + write("?"); + write(node.getURI().getFragment()); + } + + + public void visit(SWRLAtomIVariable node) { + write("?"); + write(node.getURI().getFragment()); + } + + + public void visit(SWRLAtomIndividualObject node) { + node.getIndividual().accept(this); + } + + + public void visit(SWRLAtomConstantObject node) { + node.getConstant().accept(this); + } + + + public void visit(SWRLSameAsAtom node) { + write(SAME_AS); + write("("); + node.getFirstArgument().accept(this); + write(", "); + node.getSecondArgument().accept(this); + write(")"); + } + + + public void visit(SWRLDifferentFromAtom node) { + write(DIFFERENT_FROM); + write("("); + node.getFirstArgument().accept(this); + write(", "); + node.getSecondArgument().accept(this); + write(")"); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + // + // Ontology + // + /////////////////////////////////////////////////////////////////////////////////////////////// + + + public void visit(OWLOntology ontology) { + + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-03-07 21:13:13
|
Revision: 2096 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2096&view=rev Author: lorenz_b Date: 2010-03-07 21:12:48 +0000 (Sun, 07 Mar 2010) Log Message: ----------- Continued axiom editing component. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-03-07 19:11:53 UTC (rev 2095) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-03-07 21:12:48 UTC (rev 2096) @@ -216,6 +216,16 @@ public OWLDataFactory getOWLDataFactory(){ return reasoner.getOWLDataFactory(); } + + public Set<OWLOntology> getOWLOntologiesForOWLAxiom(OWLAxiom ax){ + Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); + for(OWLOntology ont : getLoadedOntologies()){ + if(ont.containsAxiom(ax)){ + ontologies.add(ont); + } + } + return ontologies; + } /** * Save the ontology in OWL/XML format. * @param file The file to save as. Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2010-03-07 19:11:53 UTC (rev 2095) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2010-03-07 21:12:48 UTC (rev 2096) @@ -10,6 +10,7 @@ import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseEvent; +import java.util.ArrayList; import java.util.List; import javax.swing.AbstractCellEditor; @@ -31,6 +32,7 @@ import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; +import org.dllearner.tools.ore.ImpactManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.RepairManagerListener; @@ -46,12 +48,15 @@ import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.protege.editor.core.Disposable; +import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLClassAxiom; import org.semanticweb.owl.model.OWLObject; import org.semanticweb.owl.model.OWLObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.RemoveAxiom; import uk.ac.manchester.cs.owl.dlsyntax.DLSyntaxObjectRenderer; @@ -306,7 +311,7 @@ repMan.removeListener(this); } - private void showEditorDialog(final OWLAxiomEditor editor, OWLObject value) { + private void showEditorDialog(final OWLAxiomEditor editor, final OWLObject value) { if (editor == null) { return; } @@ -347,7 +352,7 @@ Object retVal = optionPane.getValue(); editorComponent.setPreferredSize(editorComponent.getSize()); if (retVal != null && retVal.equals(JOptionPane.OK_OPTION)) { - handleEditFinished(editor); + handleEditFinished(editor, value); } // setSelectedValue(frameObject, true); if (editor instanceof VerifiedInputEditor) { @@ -362,8 +367,15 @@ dlg.setVisible(true); } - void handleEditFinished(OWLAxiomEditor editor){ - System.out.println(editor.getEditedObject()); + void handleEditFinished(OWLAxiomEditor editor, OWLObject value){ + ImpactManager.getInstance(OREManager.getInstance()).addSelection((OWLAxiom)value); + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); + for(OWLOntology ont : OREManager.getInstance().getOWLOntologiesForOWLAxiom((OWLAxiom)value)){ + changes.add(new RemoveAxiom(ont, (OWLAxiom)value)); + changes.add(new AddAxiom(ont, (OWLAxiom)editor.getEditedObject())); + + } + repMan.addToRepairPlan(changes); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-03-09 09:04:34
|
Revision: 2099 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2099&view=rev Author: lorenz_b Date: 2010-03-09 09:04:25 +0000 (Tue, 09 Mar 2010) Log Message: ----------- Continued axiom editing component. Refactored rendering. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLEntityRenderingCache.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLAutoCompleter.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLClassAxiomEditor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLObjectPropertyAxiomEditor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ParserUtil.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxOWLObjectRendererImpl.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterOWLSyntaxObjectRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/rendering/TextAreaRenderer.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/cache/DLSyntaxRenderingCache.java trunk/src/dl-learner/org/dllearner/tools/ore/cache/LRUMap.java trunk/src/dl-learner/org/dllearner/tools/ore/cache/ManchesterSyntaxRenderingCache.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ManchesterOWLSyntaxParser.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLAxiomChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/OWLAxiomsEditor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ParserException.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLObjectRenderingCache.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -34,17 +34,16 @@ import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.reasoning.PelletReasoner; +import org.dllearner.tools.ore.cache.DLSyntaxRenderingCache; +import org.dllearner.tools.ore.cache.ManchesterSyntaxRenderingCache; import org.dllearner.tools.ore.cache.OWLEntityRenderingCache; -import org.dllearner.tools.ore.cache.OWLObjectRenderingCache; import org.dllearner.tools.ore.ui.DescriptionLabel; import org.dllearner.tools.ore.ui.editor.OWLEntityFinder; import org.dllearner.tools.ore.ui.rendering.KeywordColorMap; -import org.dllearner.tools.ore.ui.rendering.ManchesterOWLSyntaxOWLObjectRendererImpl; import org.dllearner.tools.ore.ui.rendering.OWLEntityRenderer; import org.dllearner.utilities.owl.OWLAPIConverter; import org.mindswap.pellet.exceptions.InconsistentOntologyException; import org.mindswap.pellet.utils.SetUtils; -import org.semanticweb.owl.io.OWLObjectRenderer; import org.semanticweb.owl.io.OWLXMLOntologyFormat; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLDataFactory; @@ -56,7 +55,6 @@ import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyStorageException; import org.semanticweb.owl.model.UnknownOWLOntologyException; -import org.semanticweb.owl.util.SimpleShortFormProvider; public class OREManager { @@ -84,9 +82,9 @@ private double threshold; private int minInstanceCount; - private OWLObjectRenderingCache owlObjectRenderingCache; + private ManchesterSyntaxRenderingCache manchesterSyntaxRenderingCache; + private DLSyntaxRenderingCache dlSyntaxRenderingCache; private OWLEntityRenderingCache owlEntityRenderingCache; - private OWLObjectRenderer owlObjectRenderer; private OWLEntityRenderer owlEntityRenderer; private OWLEntityFinder owlEntityFinder; private Map<String, Color> keywordColorMap; @@ -100,11 +98,9 @@ public OREManager(){ cm = ComponentManager.getInstance(); listeners = new ArrayList<OREManagerListener>(); - owlObjectRenderingCache = new OWLObjectRenderingCache(this); - owlEntityRenderingCache = new OWLEntityRenderingCache(); - owlEntityRenderingCache.setOREManager(this); - owlObjectRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); - owlObjectRenderer.setShortFormProvider(new SimpleShortFormProvider()); + manchesterSyntaxRenderingCache = new ManchesterSyntaxRenderingCache(this); + dlSyntaxRenderingCache = new DLSyntaxRenderingCache(this); + owlEntityRenderingCache = new OWLEntityRenderingCache(this); owlEntityRenderer = new OWLEntityRenderer(); keywordColorMap = new KeywordColorMap(); } @@ -285,7 +281,7 @@ return prefixes; } - public String getRendering(OWLObject object){ + public String getManchesterSyntaxRendering(OWLObject object){ if(object instanceof OWLEntity){ String rendering = owlEntityRenderingCache.getRendering((OWLEntity) object); if(rendering != null) { @@ -295,9 +291,21 @@ return owlEntityRenderer.render((OWLEntity) object); } } - return owlObjectRenderingCache.getRendering(object, owlObjectRenderer); + return manchesterSyntaxRenderingCache.getRendering(object); } + public String getManchesterSyntaxRendering(Description description){ + return manchesterSyntaxRenderingCache.getRendering(description); + } + + public String getManchesterSyntaxRendering(Individual individual){ + return manchesterSyntaxRenderingCache.getRendering(individual); + } + + public String getDLSyntaxRendering(OWLObject object){ + return dlSyntaxRenderingCache.getRendering(object); + } + public OWLEntityRenderer getOWLEntityRenderer(){ return owlEntityRenderer; } Added: trunk/src/dl-learner/org/dllearner/tools/ore/cache/DLSyntaxRenderingCache.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/cache/DLSyntaxRenderingCache.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/cache/DLSyntaxRenderingCache.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -0,0 +1,63 @@ +package org.dllearner.tools.ore.cache; + +import java.util.Map; + +import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.OREManagerListener; +import org.semanticweb.owl.model.OWLObject; + +import uk.ac.manchester.cs.owl.dlsyntax.DLSyntaxObjectRenderer; + +public class DLSyntaxRenderingCache { + + Map<OWLObject, String> cache = new LRUMap<OWLObject, String>(50, 1, 50); + DLSyntaxObjectRenderer renderer = new DLSyntaxObjectRenderer(); + + private OREManagerListener l = new OREManagerListener(){ + @Override + public void activeOntologyChanged() { + clear(); + } + }; + +// private OWLOntologyChangeListener l2 = new OWLOntologyChangeListener(){ +// public void ontologiesChanged(List<? extends OWLOntologyChange> owlOntologyChanges) throws OWLException { +// clear(); +// } +// }; + + private OREManager mngr; + + + public DLSyntaxRenderingCache(OREManager oreManager) { + this.mngr = oreManager; + oreManager.addListener(l); + } + + + public void clear() { + cache.clear(); + } + + + public String getRendering(OWLObject object) { + String s = null; + if (s == null){ + s = cache.get(object); + if (s == null){ + s = renderer.render(object); + cache.put(object, s); + } + } + return s; + } + + + public void dispose() { + clear(); + mngr.removeListener(l); + } + + + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/cache/LRUMap.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/cache/LRUMap.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/cache/LRUMap.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -0,0 +1,21 @@ +package org.dllearner.tools.ore.cache; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class LRUMap<K, V> extends LinkedHashMap<K, V>{ + /** + * + */ + private static final long serialVersionUID = 7878033647212810101L; + private int maxCapacity; + + public LRUMap(int initialCapacity, float loadFactor, int maxCapacity) { + super(initialCapacity, loadFactor, true); + this.maxCapacity = maxCapacity; + } + + protected boolean removeEldestEntry(Map.Entry<K,V> eldest) { + return size() >= this.maxCapacity; + } +} Copied: trunk/src/dl-learner/org/dllearner/tools/ore/cache/ManchesterSyntaxRenderingCache.java (from rev 2093, trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLObjectRenderingCache.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/cache/ManchesterSyntaxRenderingCache.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/cache/ManchesterSyntaxRenderingCache.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -0,0 +1,87 @@ +package org.dllearner.tools.ore.cache; + +import java.util.Map; + +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.Individual; +import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.OREManagerListener; +import org.dllearner.tools.ore.ui.rendering.ManchesterOWLSyntaxOWLObjectRendererImpl; +import org.dllearner.utilities.owl.OWLAPIConverter; +import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; +import org.semanticweb.owl.io.OWLObjectRenderer; +import org.semanticweb.owl.model.OWLObject; +import org.semanticweb.owl.util.SimpleShortFormProvider; + +public class ManchesterSyntaxRenderingCache { + + private OWLObjectRenderer renderer; + + Map<OWLObject, String> owlObjectCache = new LRUMap<OWLObject, String>(50, 1, 50); + Map<Description, String> descriptionCache = new LRUMap<Description, String>(50, 1, 50); + Map<Individual, String> individualCache = new LRUMap<Individual, String>(50, 1, 50); + + private OREManager mngr; + + private OREManagerListener l = new OREManagerListener() { + @Override + public void activeOntologyChanged() { + clear(); + } + }; + + // private OWLOntologyChangeListener l2 = new OWLOntologyChangeListener(){ + // public void ontologiesChanged(List<? extends OWLOntologyChange> + // owlOntologyChanges) throws OWLException { + // clear(); + // } + // }; + + public ManchesterSyntaxRenderingCache(OREManager oreManager) { + this.mngr = oreManager; + oreManager.addListener(l); + renderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + renderer.setShortFormProvider(new SimpleShortFormProvider()); + } + + public void clear() { + owlObjectCache.clear(); + descriptionCache.clear(); + } + + public String getRendering(OWLObject object) { + String s = null; + s = owlObjectCache.get(object); + if (s == null) { + s = renderer.render(object); + owlObjectCache.put(object, s); + } + return s; + } + + public String getRendering(Description description) { + String s = null; + s = descriptionCache.get(description); + if (s == null) { + s = renderer.render(OWLAPIDescriptionConvertVisitor.getOWLDescription(description)); + descriptionCache.put(description, s); + } + return s; + } + + public String getRendering(Individual individual) { + String s = null; + s = individualCache.get(individual); + if (s == null) { + s = renderer.render(OWLAPIConverter.getOWLAPIIndividual(individual)); + individualCache.put(individual, s); + } + return s; + } + + public void dispose() { + clear(); + mngr.removeListener(l); + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLEntityRenderingCache.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLEntityRenderingCache.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLEntityRenderingCache.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -23,15 +23,6 @@ import org.semanticweb.owl.model.OWLOntologyChangeListener; -/** - * Author: Matthew Horridge<br> - * The University Of Manchester<br> - * Medical Informatics Group<br> - * Date: 21-Sep-2006<br><br> - * <p/> - * mat...@cs...<br> - * www.cs.man.ac.uk/~horridgm<br><br> - */ public class OWLEntityRenderingCache{ private static final Logger logger = Logger.getLogger(OWLEntityRenderingCache.class); @@ -66,14 +57,9 @@ }; - public OWLEntityRenderingCache() { - } - - - public void setOREManager(OREManager oreManager) { - this.oreManager = oreManager; + public OWLEntityRenderingCache(OREManager oreManager) { + this.oreManager = oreManager; oreManager.addListener(oreManagerListener); -// owlModelManager.addOntologyChangeListener(listener); } @@ -128,7 +114,7 @@ public void dispose() { clear(); -// owlModelManager.removeOntologyChangeListener(listener); + oreManager.removeListener(oreManagerListener); } @@ -226,7 +212,7 @@ private <T extends OWLEntity> void addRendering(T entity, Map<String, T> map) { if (!entityRenderingMap.containsKey(entity)) { - String rendering = oreManager.getRendering(entity); + String rendering = oreManager.getManchesterSyntaxRendering(entity); map.put(rendering, entity); entityRenderingMap.put(entity, rendering); } Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLObjectRenderingCache.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLObjectRenderingCache.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/cache/OWLObjectRenderingCache.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -1,89 +0,0 @@ -package org.dllearner.tools.ore.cache; - -import java.util.LinkedHashMap; -import java.util.Map; - -import org.dllearner.tools.ore.OREManager; -import org.dllearner.tools.ore.OREManagerListener; -import org.protege.editor.core.Disposable; -import org.semanticweb.owl.io.OWLObjectRenderer; -import org.semanticweb.owl.model.OWLObject; - -/** - * Author: drummond<br> - * http://www.cs.man.ac.uk/~drummond/<br><br> - * <p/> - * The University Of Manchester<br> - * Bio Health Informatics Group<br> - * Date: Jun 27, 2008<br><br> - */ -public class OWLObjectRenderingCache implements Disposable { - - Map<OWLObject, String> cache = new MyLRUMap<OWLObject, String>(50, 1, 50); - - private OREManagerListener l = new OREManagerListener(){ - @Override - public void activeOntologyChanged() { - clear(); - } - }; - -// private OWLOntologyChangeListener l2 = new OWLOntologyChangeListener(){ -// public void ontologiesChanged(List<? extends OWLOntologyChange> owlOntologyChanges) throws OWLException { -// clear(); -// } -// }; - - private OREManager mngr; - - - public OWLObjectRenderingCache(OREManager oreManager) { - this.mngr = oreManager; - oreManager.addListener(l); - } - - - public void clear() { - cache.clear(); - } - - - public String getRendering(OWLObject object, OWLObjectRenderer owlObjectRenderer) { - String s = null; -// if (object instanceof OWLClassExpression){ -// String userRendering = OWLExpressionUserCache.getInstance(mngr).getRendering((OWLClassExpression) object); -// if (userRendering != null){ -// s = userRendering; -// cache.put(object, s); -// } -// } - if (s == null){ - s = cache.get(object); - if (s == null){ - s = owlObjectRenderer.render(object); - cache.put(object, s); - } - } - return s; - } - - - public void dispose() { - clear(); - mngr.removeListener(l); - } - - - class MyLRUMap<K,V> extends LinkedHashMap<K,V> { - private int maxCapacity; - - public MyLRUMap(int initialCapacity, float loadFactor, int maxCapacity) { - super(initialCapacity, loadFactor, true); - this.maxCapacity = maxCapacity; - } - - protected boolean removeEldestEntry(Map.Entry<K,V> eldest) { - return size() >= this.maxCapacity; - } - } -} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -39,8 +39,7 @@ import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.ui.editor.InputVerificationStatusChangedListener; import org.dllearner.tools.ore.ui.editor.OWLAxiomEditor; -import org.dllearner.tools.ore.ui.editor.OWLClassAxiomEditor; -import org.dllearner.tools.ore.ui.editor.OWLObjectPropertyAxiomEditor; +import org.dllearner.tools.ore.ui.editor.OWLAxiomsEditor; import org.dllearner.tools.ore.ui.editor.VerifiedInputEditor; import org.dllearner.tools.ore.ui.editor.VerifyingOptionPane; import org.dllearner.tools.ore.ui.rendering.TextAreaRenderer; @@ -51,15 +50,11 @@ import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; -import org.semanticweb.owl.model.OWLClassAxiom; import org.semanticweb.owl.model.OWLObject; -import org.semanticweb.owl.model.OWLObjectPropertyAxiom; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.RemoveAxiom; -import uk.ac.manchester.cs.owl.dlsyntax.DLSyntaxObjectRenderer; - public class ExplanationTable extends JXTable implements RepairManagerListener, Disposable{ /** @@ -68,8 +63,9 @@ private static final long serialVersionUID = 5580730282611559609L; private RepairManager repMan; - DLSyntaxObjectRenderer renderer = new DLSyntaxObjectRenderer(); + private OREManager oreMan; + protected String[] columnToolTips = { null, "The number of already computed explanations wherein the axiom occurs.", @@ -81,16 +77,17 @@ public ExplanationTable(Explanation exp, OWLClass cl) { - + oreMan = OREManager.getInstance(); repMan = RepairManager.getInstance(OREManager.getInstance()); - repMan.addListener(this); + setBackground(Color.WHITE); setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setModel(new ExplanationTableModel(exp, cl)); setRolloverEnabled(true); addHighlighter(new ColorHighlighter(HighlightPredicate.ROLLOVER_ROW, Color.YELLOW, Color.BLACK)); + TableColumn column6 = getColumn(5); column6.setCellRenderer(new ButtonCellRenderer()); column6.setCellEditor(new ButtonCellEditor()); @@ -183,9 +180,7 @@ java.awt.Point p = e.getPoint(); int rowIndex = rowAtPoint(p); if(rowIndex != -1){ - -// tip = ((ExplanationTableModel)getModel()).getOWLAxiomAtRow(rowIndex).toString(); - tip = renderer.render(((ExplanationTableModel)getModel()).getOWLAxiomAtRow(rowIndex)); + tip = oreMan.getDLSyntaxRendering(((ExplanationTableModel)getModel()).getOWLAxiomAtRow(rowIndex)); } else { tip = super.getToolTipText(e); } @@ -265,15 +260,18 @@ public void actionPerformed(ActionEvent e) { fireEditingStopped(); OWLAxiom ax = ((ExplanationTableModel)getModel()).getOWLAxiomAtRow(row); - if(ax instanceof OWLClassAxiom){ - OWLClassAxiomEditor editor = new OWLClassAxiomEditor(OREManager.getInstance()); - editor.setEditedObject((OWLClassAxiom) ax); - showEditorDialog(editor, ax); - } else if(ax instanceof OWLObjectPropertyAxiom){ - OWLObjectPropertyAxiomEditor editor = new OWLObjectPropertyAxiomEditor(OREManager.getInstance()); - editor.setEditedObject((OWLObjectPropertyAxiom) ax); - showEditorDialog(editor, ax); - } + OWLAxiomsEditor editor = new OWLAxiomsEditor(oreMan); + editor.setEditedObject(ax); + showEditorDialog(editor, ax); +// if(ax instanceof OWLClassAxiom){ +// OWLClassAxiomEditor editor = new OWLClassAxiomEditor(OREManager.getInstance()); +// editor.setEditedObject((OWLClassAxiom) ax); +// showEditorDialog(editor, ax); +// } else if(ax instanceof OWLObjectPropertyAxiom){ +// OWLObjectPropertyAxiomEditor editor = new OWLObjectPropertyAxiomEditor(OREManager.getInstance()); +// editor.setEditedObject((OWLObjectPropertyAxiom) ax); +// showEditorDialog(editor, ax); +// } } } @@ -341,7 +339,6 @@ } final Component parent = SwingUtilities.getAncestorOfClass(Frame.class, getParent()); final JDialog dlg = optionPane.createDialog(parent, null); - // The editor shouldn't be modal (or should it?) dlg.setModal(false); dlg.setResizable(true); dlg.pack(); @@ -363,7 +360,7 @@ } }); - dlg.setTitle(OREManager.getInstance().getRendering(value)); + dlg.setTitle(OREManager.getInstance().getManchesterSyntaxRendering(value)); dlg.setVisible(true); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -59,6 +59,7 @@ if(strikeOutIrrelevantParts){ return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root, laconicExplanation); } else { +// return ax; // return OREManager.getInstance().getRendering(ax); return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -35,7 +35,6 @@ setShowHorizontalLines(true); setGridColor(Color.LIGHT_GRAY); setTableHeader(null); - setRowHeightEnabled(true); getColumn(0).setMaxWidth(30); getColumn(1).setCellRenderer(new TextAreaRenderer()); getColumn(2).setMaxWidth(40); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -43,16 +43,15 @@ } public Object getValueAt(int rowIndex, int columnIndex) { - - if(columnIndex == 0){ + + if (columnIndex == 0) { if (repairPlan.get(rowIndex) instanceof RemoveAxiom) { return "–"; } else { return "+"; } } else if (columnIndex == 1) { - return ManchesterSyntaxRenderer.render(repairPlan.get(rowIndex) - .getAxiom(), false, 0); + return ManchesterSyntaxRenderer.render(repairPlan.get(rowIndex).getAxiom(), false, 0); } else { return null; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -26,9 +26,11 @@ // setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setModel(new ResultTableModel()); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + ProgressBarTableCellRenderer renderer = new ProgressBarTableCellRenderer(); renderer.setBackground(getBackground()); getColumn(0).setCellRenderer(renderer); + getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); setColumnSizes(); getColumn(0).setResizable(false); @@ -41,9 +43,7 @@ private void setColumnSizes(){ getColumn(0).setMaxWidth(100); - getColumn(1).setPreferredWidth(430); - } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java 2010-03-09 08:52:35 UTC (rev 2098) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ExpressionEditor.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -133,7 +133,7 @@ setText(""); } else if (desc instanceof OWLObject) { - String rendering = mngr.getRendering((OWLObject) desc); + String rendering = mngr.getManchesterSyntaxRendering((OWLObject) desc); setText(rendering); } else if (desc instanceof Collection){ @@ -143,7 +143,7 @@ if (sb.length() > 0){ sb.append(", "); } - sb.append(mngr.getRendering((OWLObject)obj)); + sb.append(mngr.getManchesterSyntaxRendering((OWLObject)obj)); } } setText(sb.toString()); Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ManchesterOWLSyntaxParser.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ManchesterOWLSyntaxParser.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/editor/ManchesterOWLSyntaxParser.java 2010-03-09 09:04:25 UTC (rev 2099) @@ -0,0 +1,2271 @@ +package org.dllearner.tools.ore.ui.editor; + + +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.coode.manchesterowlsyntax.ManchesterOWLSyntax; +import org.coode.manchesterowlsyntax.ManchesterOWLSyntaxTokenizer; +import org.semanticweb.owl.expression.OWLEntityChecker; +import org.semanticweb.owl.model.AddAxiom; +import org.semanticweb.owl.model.OWLAnnotation; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLClassAxiom; +import org.semanticweb.owl.model.OWLConstant; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLDataProperty; +import org.semanticweb.owl.model.OWLDataPropertyExpression; +import org.semanticweb.owl.model.OWLDataRange; +import org.semanticweb.owl.model.OWLDataRangeFacetRestriction; +import org.semanticweb.owl.model.OWLDataType; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLEntity; +import org.semanticweb.owl.model.OWLImportsDeclaration; +import org.semanticweb.owl.model.OWLIndividual; +import org.semanticweb.owl.model.OWLObjectProperty; +import org.semanticweb.owl.model.OWLObjectPropertyAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyChainSubPropertyAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyExpression; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.OWLOntologyChangeException; +import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.SetOntologyURI; +import org.semanticweb.owl.util.CollectionFactory; +import org.semanticweb.owl.util.NamespaceUtil; +import org.semanticweb.owl.vocab.Namespaces; +import org.semanticweb.owl.vocab.OWLRDFVocabulary; +import org.semanticweb.owl.vocab.OWLRestrictedDataRangeFacetVocabulary; +import org.semanticweb.owl.vocab.XSDVocabulary; + + +/** + * Author: Matthew Horridge<br> + * The University Of Manchester<br> + * Bio-Health Informatics Group<br> + * Date: 10-Sep-2007<br><br> + * <p/> + * A parser for the Manchester OWL Syntax. + * All properties must be defined before they are used. For example, + * consider the restriction hasPart some Leg. The parser must know + * in advance whether or not hasPart is an object property or a data + * property so that Leg gets parsed correctly. In a tool, such as an + * editor, it is expected that hasPart will already exists as either + * a data property or an object property. If a complete ontology is + * being parsed, it is expected that hasPart will have been defined at + * the top of the file before it is used in any class descriptions or + * property assertions (e.g. ObjectProperty: hasPart) + */ +public class ManchesterOWLSyntaxParser { + + // This parser was built by hand! After stuggling with terrible + // error messages produced by ANTLR (or JavaCC) I decides to construct + // this parser by hand. The error messages that this parser generates + // are specific to the Manchester OWL Syntax and are such that it should + // be easy to use this parser in tools such as editors. + + private OWLDataFactory dataFactory; + + + private OWLEntityChecker owlEntityChecker; + + private final String EOF = "<EOF>"; + + private Set<Character> skip = new HashSet<Character>(); + + private Set<Character> delims = new HashSet<Character>(); + + private Set<Character> escapeChars = new HashSet<Character>(); + + private String base; + + private Set<String> classNames; + + private Set<String> objectPropertyNames; + + private Set<String> dataPropertyNames; + + private Set<String> individualNames; + + private Set<String> dataTypeNames; + + private Set<String> annotationURIs; + + private Set<String> restrictionKeywords; + + private Map<String, URI> namespaceMap; + + private int col = 0; + + private int tokenStartCol = 0; + + private int line = 0; + + private int tokenStartPos; + + private String token; + + private String bufferedToken = null; + + private String buffer; + + private int pos; + + private static final String AND = ManchesterOWLSyntax.AND.toString(); + + private static final String OR = ManchesterOWLSyntax.OR.toString(); + + private static final String INV = ManchesterOWLSyntax.INVERSE.toString(); + + private static final String SOME = ManchesterOWLSyntax.SOME.toString(); + + private static final String SELF = ManchesterOWLSyntax.SELF.toString(); + + private static final String ONLY = ManchesterOWLSyntax.ONLY.toString(); + + private static final String VALUE = ManchesterOWLSyntax.VALUE.toString(); + + private static final String MIN = ManchesterOWLSyntax.MIN.toString(); + + private static final String MAX = ManchesterOWLSyntax.MAX.toString(); + + private static final String EXACTLY = ManchesterOWLSyntax.EXACTLY.toString(); + + private static final String ONLYSOME = ManchesterOWLSyntax.ONLYSOME.toString(); + + private static final String NOT = ManchesterOWLSyntax.NOT.toString(); + + private static final String CLASS = ManchesterOWLSyntax.CLASS.toString() + ":"; + + private static final String SUB_CLASS_OF = ManchesterOWLSyntax.SUBCLASS_OF.toString() + ":"; + + private static final String EQUIVALENT_TO = ManchesterOWLSyntax.EQUIVALENT_TO.toString() + ":"; + + private static final String DISJOINT_WITH = ManchesterOWLSyntax.DISJOINT_WITH.toString() + ":"; + + private static final String OBJECT_PROPERTY = ManchesterOWLSyntax.OBJECT_PROPERTY.toString() + ":"; + + private static final String DATA_PROPERTY = ManchesterOWLSyntax.DATA_PROPERTY.toString() + ":"; + + private static final String SUB_PROPERTY_OF = ManchesterOWLSyntax.SUB_PROPERTY_OF.toString() + ":"; + + private static final String DOMAIN = ManchesterOWLSyntax.DOMAIN.toString() + ":"; + + private static final String RANGE = ManchesterOWLSyntax.RANGE.toString() + ":"; + + private static final String CHARACTERISTICS = ManchesterOWLSyntax.CHARACTERISTICS.toString() + ":"; + + private static final String INDIVIDUAL = ManchesterOWLSyntax.INDIVIDUAL.toString() + ":"; + + private static final String ANNOTATIONS = ManchesterOWLSyntax.ANNOTATIONS.toString() + ":"; + + private static final String TYPES = ManchesterOWLSyntax.TYPES.toString() + ":"; + + private static final String FACTS = ManchesterOWLSyntax.FACTS.toString() + ":"; + + private static final String SAME_AS = ManchesterOWLSyntax.SAME_AS.toString() + ":"; + + private static final String DIFFERENT_FROM = ManchesterOWLSyntax.DIFFERENT_FROM.toString() + ":"; + + private static final String VALUE_PARTITION = "ValuePartition:"; + + private static final String ONTOLOGY = ManchesterOWLSyntax.ONTOLOGY.toString() + ":"; + + private static final String NAMESPACE = ManchesterOWLSyntax.NAMESPACE.toString() + ":"; + + private static final String IMPORTS = ":"; + + + private static final String FUNCTIONAL = ManchesterOWLSyntax.FUNCTIONAL.toString(); + + private static final String INVERSE_FUNCTIONAL = ManchesterOWLSyntax.INVERSE_FUNCTIONAL.toString(); + + private static final String SYMMETRIC = ManchesterOWLSyntax.SYMMETRIC.toString(); + + private static final String ANTI_SYMMETRIC = ManchesterOWLSyntax.ANTI_SYMMETRIC.toString(); + + private static final String TRANSITIVE = ManchesterOWLSyntax.TRANSITIVE.toString(); + + private static final String REFLEXIVE = ManchesterOWLSyntax.REFLEXIVE.toString(); + + private static final String IRREFLEXIVE = ManchesterOWLSyntax.IRREFLEXIVE.toString(); + + private static final String INVERSE_OF = ManchesterOWLSyntax.INVERSE_OF + ":"; + + private Set<String> potentialKeywords; + + private List<ManchesterOWLSyntaxTokenizer.Token> tokens; + + + public ManchesterOWLSyntaxParser(OWLDataFactory dataFactory, String s) { + this.dataFactory = dataFactory; + skip.add(' '); + skip.add('\n'); + skip.add('\t'); + delims.add('('); + delims.add(')'); + delims.add('['); + delims.add(']'); + delims.add(','); + delims.add('{'); + delims.add('}'); +// delims.add('"'); + delims.add('^'); + delims.add('@'); + escapeChars.add('\''); + escapeChars.add('\"'); + potentialKeywords = new HashSet<String>(); + restrictionKeywords = new HashSet<String>(); + restrictionKeywords.add(ManchesterOWLSyntax.SOME.toString()); + restrictionKeywords.add(ManchesterOWLSyntax.ONLY.toString()); + restrictionKeywords.add(ManchesterOWLSyntax.MIN.toString()); + restrictionKeywords.add(ManchesterOWLSyntax.MAX.toString()); + restrictionKeywords.add(ManchesterOWLSyntax.EXACTLY.toString()); + restrictionKeywords.add(ManchesterOWLSyntax.VALUE.toString()); + restrictionKeywords.add(ManchesterOWLSyntax.THAT.toString()); + + + classNames = new HashSet<String>(); + objectPropertyNames = new HashSet<String>(); + dataPropertyNames = new HashSet<String>(); + individualNames = new HashSet<String>(); + dataTypeNames = new HashSet<String>(); + annotationURIs = new HashSet<String>(); + namespaceMap = new HashMap<String, URI>(); + NamespaceUtil u = new NamespaceUtil(); + + for (URI uri : OWLRDFVocabulary.BUILT_IN_ANNOTATION_PROPERTIES) { + String[] res = u.split(uri.toString(), null); + annotationURIs.add(u.getPrefix(res[0]) + ":" + res[1]); + } + pos = 0; + buffer = s; + base = "http://www.semanticweb.org#"; + owlEntityChecker = new DefaultEntityChecker(); + + tokens = new ArrayList<ManchesterOWLSyntaxTokenizer.Token>(); + tokens.addAll(getTokenizer(s).tokenize()); + tokenIndex = 0; + } + + + public String getBase() { + return base; + } + + + public void setBase(String base) { + this.base = base; + } + + + public OWLEntityChecker getOWLEntityChecker() { + return owlEntityChecker; + } + + + public void setOWLEntityChecker(OWLEntityChecker owlEntityChecker) { + this.owlEntityChecker = owlEntityChecker; + } + + + public boolean isClassName(String name) { + if (classNames.contains(name)) { + return true; + } + return owlEntityChecker != null && owlEntityChecker.getOWLClass(name) != null; + } + + + public boolean isObjectPropertyName(String name) { + if (objectPropertyNames.contains(name)) { + return true; + } + return owlEntityChecker != null && owlEntityChecker.getOWLObjectProperty(name) != null; + } + + + public boolean isAnnotationURI(String name) { + return annotationURIs.contains(name); + } + + + public boolean isDataPropertyName(String name) { + if (dataPropertyNames.contains(name)) { + return true; + } + return owlEntityChecker != null && owlEntityChecker.getOWLDataProperty(name) != null; + } + + + public boolean isIndividualName(String name) { + if (individualNames.contains(name)) { + return true; + } + return owlEntityChecker != null && owlEntityChecker.getOWLIndividual(name) != null; + } + + + public boolean isDatatypeName(String name) { + if (dataTypeNames.contains(name)) { + return true; + } + return owlEntityChecker != null && owlEntityChecker.getOWLDataType(name) != null; + } + + + public OWLClass getOWLClass(String name) { + return owlEntityChecker.getOWLClass(name); + } + + + public OWLObjectProperty getOWLObjectProperty(String name) { + return owlEntityChecker.getOWLObjectProperty(name); + } + + + public OWLIndividual getOWLIndividual(String name) { + return owlEntityChecker.getOWLIndividual(name); + } + + + public OWLDataProperty getOWLDataProperty(String name) { + return owlEntityChecker.getOWLDataProperty(name); + } + + + public OWLDataType getDataType(String name) { + return dataFactory.getOWLDataType(URI.create(Namespaces.XSD + name)); + } + + + public URI getAnnotationURI(String name) { + if (name.startsWith("rdfs:")) { + return URI.create(Namespaces.RDFS + name.substring(5, name.length())); + } + else if (name.startsWith("owl:")) { + return URI.create(Namespaces.RDFS + name.substring(4, name.length())); + } + return URI.create(base + name); + } + + + private String getLastToken() { + return token; + } + + + private String peekToken() { + return getToken().getToken(); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // Tokenizer + // + //////////////////////////////////////////////////////////////////////////////////////////////////// + + + private String readToken() { + if (bufferedToken != null) { + token = bufferedToken; + bufferedToken = null; + return token; + } + + // Skip any skip characters + while (pos < buffer.length()) { + char ch = buffer.charAt(pos); + if (skip.contains(ch)) { + if (ch == '\n') { + line++; + col = 0; + } + } + else { + break; + } + col++; + pos++; + } + + tokenStartPos = pos; + tokenStartCol = col; + + if (pos >= buffer.length()) { + // Past end of buffer + token = EOF; + } + else if (pos+1 == buffer.length() && escapeChars.contains(buffer.charAt(pos))){ + // single escape character + token = EOF; + } + else if (delims.contains(buffer.charAt(pos))) { + // Single delim + pos++; + col++; + token = buffer.substring(pos - 1, pos); + } + else { + // Some other token + int start = pos; + boolean inEscapedString = false; + while (pos < buffer.length()) { + char ch = buffer.charAt(pos); + if (escapeChars.contains(ch) && !inEscapedString) { + inEscapedString = true; + start++; + } + else { + if (escapeChars.contains(ch) && inEscapedString) { + if (ch == '\'') { + token = buffer.substring(start, pos); + } + else { + token = buffer.substring(start - 1, pos + 1); + } + inEscapedString = false; + pos++; + return token; + } + if (!inEscapedString && (skip.contains(ch) || delims.contains(ch))) { + token = buffer.substring(start, pos); + return token; + } + } + col++; + pos++; + } + if (start != pos) { + token = buffer.substring(start, pos); + } + } + return token; + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // Parser + // + //////////////////////////////////////////////////////////////////////////////////////////////////// + + + /** + * Parses an OWL description that is represented in Manchester OWL Syntax + * @return The parsed description + * @throws ParserException If an description could not be parsed. + */ + public OWLDescription parseDescription() throws ParserException { + OWLDescription desc = parseIntersection(); + if (!consumeToken().equals(EOF)) { + throwException(EOF); + } + return desc; + } + + + public OWLDescription parseIntersection() throws ParserException { + Set<OWLDescription> ops = new HashSet<OWLDescription>(); + String kw = AND; + while (kw.equalsIgnoreCase(AND)) { + potentialKeywords.remove(AND); + ops.add(parseUnion()); + potentialKeywords.add(AND); + kw = peekToken(); + if (kw.equalsIgnoreCase(AND)) { + kw = consumeToken(); + } + else if (kw.equalsIgnoreCase("that")) { + consumeToken(); + kw = AND; + } + } + if (ops.size() == 1) { + return ops.iterator().next(); + } + else { + return dataFactory.getOWLObjectIntersectionOf(ops); + } + } + + + public OWLDescription parseUnion() throws ParserException { + Set<OWLDescription> ops = new HashSet<OWLDescription>(); + String kw = OR; + while (kw.equalsIgnoreCase(OR)) { + potentialKeywords.remove(OR); + ops.add(parseNonNaryDescription()); + potentialKeywords.add(OR); + kw = peekToken(); + if (kw.equalsIgnoreCase(OR)) { + kw = consumeToken(); + } + } + if (ops.size() == 1) { + return ops.iterator().next(); + } + else { + return dataFactory.getOWLObjectUnionOf(ops); + } + } + + + public OWLObjectPropertyExpression parseObjectPropertyExpression(boolean allowUndeclared) throws ParserException { + String tok = consumeToken(); + if (tok.equalsIgnoreCase(INV)) { + String open = consumeToken(); + if (!open.equals("(")) { + throwException("("); + } + OWLObjectPropertyExpression prop = parseObjectPropertyExpression(); + String close = consumeToken(); + if (!close.equals(")")) { + throwException(")"); + } + return dataFactory.getOWLObjectPropertyInverse(prop); + } + else { + if (!allowUndeclared && !isObjectPropertyName(tok)) { + throwException(false, true, false, false, false, INV); + } + return getOWLObjectProperty(tok); + } + } + + + public OWLObjectPropertyExpression parseObjectPropertyExpression() throws ParserException { + return parseObjectPropertyExpression(false); + } + + + public OWLDescription parseRestriction() throws ParserException { + String tok = peekToken(); + if (isObjectPropertyName(tok) || tok.equalsIgnoreCase(INV)) { + return parseObjectRestriction(); + } + else if (isDataPropertyName(tok)) { + return parseDataRestriction(); + } + else { + consumeToken(); + throwException(false, true, true, false); + } + return null; + } + + + /** + * Parses all class descriptions except ObjectIntersectionOf + * and ObjectUnionOf + * @return The description which was parsed + * @throws ParserException if a non-nary description could not be parsed + */ + public OWLDescription parseNonNaryDescription() throws ParserException { + + String tok = peekToken(); + if (tok.equalsIgnoreCase(NOT)) { + consumeToken(); + OWLDescription complemented = parseNestedClassExpression(); + return dataFactory.getOWLObjectComplementOf(complemented); + } + else if (isObjectPropertyName(tok) || tok.equalsIgnoreCase(INV)) { + return parseObjectRestriction(); + } + else if (isDataPropertyName(tok)) { + // Data restriction + return parseDataRestriction(); + } + else if (tok.equals("{")) { + return parseObjectOneOf(); + } + else if (tok.equals("(")) { + return parseNestedClassExpression(); + } + else if (isClassName(tok)) { + consumeToken(); + OWLDescription desc = getOWLClass(tok); +// if (peekToken().equalsIgnoreCase("that")) { +// consumeToken(); +// OWLDescription rest = parseRestriction(); +// desc = dataFactory.getOWLObjectIntersectionOf(CollectionFactory.createSet(desc, rest)); +// } + return desc; + } + // Add option for strict class name checking + else { + consumeToken(); + throwException(true, true, true, false, false, "(", "{", NOT, INV); + } + return null; + } + + + private OWLDescription parseObjectRestriction() throws ParserException { + OWLObjectPropertyExpression prop = parseObjectPropertyExpression(); + String kw = consumeToken(); + if (kw.equalsIgnoreCase(SOME)) { + String possSelfToken = peekToken(); + if (possSelfToken.equalsIgnoreCase(SELF)) { + consumeToken(); + return dataFactory.getOWLObjectSelfRestriction(prop); + } + else { + OWLDescription filler = null; + try { + filler = parseNestedClassExpression(); + } + catch (ParserException e) { + Set<String> keywords = new HashSet<String>(); + keywords.addAll(e.getExpectedKeywords()); + keywords.add(SELF); + throwException(e.isClassNameExpected(), + e.isObjectPropertyNameExpected(), + e.isDataPropertyNameExpected(), + e.isIndividualNameExpected(), + e.isDatatypeNameExpected(), + keywords.toArray(new String[keywords.size()])); + } + return dataFactory.getOWLObjectSomeRestriction(prop, filler); + } + } + else if (kw.equalsIgnoreCase(ONLY)) { + OWLDescription filler = parseNestedClassExpression(); + return dataFactory.getOWLObjectAllRestriction(prop, filler); + } + else if (kw.equalsIgnoreCase(VALUE)) { + String indName = consumeToken(); + if (!isIndividualName(indName)) { + throwException(false, false, false, true); + } + return dataFactory.getOWLObjectValueRestriction(prop, getOWLIndividual(indName)); + } + else if (kw.equalsIgnoreCase(MIN)) { + int card = parseInteger(); + OWLDescription filler = parseNestedClassExpression(); + return dataFactory.getOWLObjectMinCardinalityRestriction(prop, card, filler); + } + else if (kw.equalsIgnoreCase(MAX)) { + int card = parseInteger(); + OWLDescription filler = parseNestedClassExpression(); + return dataFactory.getOWLObjectMaxCardinalityRestriction(prop, card, filler); + } + else if (kw.equalsIgnoreCase(EXACTLY)) { + int card = parseInteger(); + OWLDescription filler = parseNestedClassExpression(); + return dataFactory.getOWLObjectExactCardinalityRestriction(prop, card, filler); + } + else if (kw.equalsIgnoreCase(ONLYSOME)) { + String tok = peekToken(); + Set<OWLDescription> descs = new HashSet<OWLDescription>(); + if (!tok.equals("[")) { + descs.add(parseIntersection()); + } + else { + descs.addAll(parseDescriptionList("[", "]")); + } + Set<OWLDescription> ops = new HashSet<OWLDescription>(); + for (OWLDescription desc : descs) { + ops.add(dataFactory.getOWLObjectSomeRestriction(prop, desc)); + } + OWLDescription filler; + if (descs.size() == 1) { + filler = descs.iterator().next(); + } + else { + filler = dataFactory.getOWLObjectUnionOf(descs); + } + ops.add(dataFactory.getOWLObjectAllRestriction(prop, filler)); + return dataFactory.getOWLObjectIntersectionOf(ops); + } + else { + // Error! + throwException(SOME, ONLY, VALUE, MIN, MAX, EXACTLY); + } + return null; + } + + + public OWLDescription parseDataRestriction() throws ParserException { + OWLDataPropertyExpression prop = parseDataProperty(); + String kw = consumeToken(); + if (kw.equalsIgnoreCase(SOME)) { + OWLDataRange rng = parseDataRange(); + return dataFactory.getOWLDataSomeRestriction(prop, rng); + } + else if (kw.equalsIgnoreCase(ONLY)) { + OWLDataRange rng = parseDataRange(); + return dataFactory.getOWLDataAllRestriction(prop, rng); + } + else if (kw.equalsIgnoreCase(VALUE)) { + OWLConstant con = parseConstant(); + return dataFactory.getOWLDataValueRestriction(prop, con); + } + else if (kw.equalsIgnoreCase(MIN)) { + int card = parseInteger(); + OWLDataRange rng = parseDataRange(); + return dataFactory.getOWLDataMinCardinalityRestriction(prop, card, rng); + } + else if (kw.equalsIgnoreCase(EXACTLY)) { + int card = parseInteger(); + OWLDataRange rng = parseDataRange(); + return dataFactory.getOWLDataExactCardinalityRestriction(prop, card, rng); + } + else if (kw.equalsIgnoreCase(MAX)) { + int card = parseInteger(); + OWLDataRange rng = parseDataRange(); + return dataFactory.getOWLDataMaxCardinalityRestriction(prop, card, rng); + } + throwException(SOME, ONLY, VALUE, MIN, EXACTLY, MAX); + return null; + } + + + public OWLDataRange parseDataRange() throws ParserException { + String tok = peekToken(); + if (isDatatypeName(tok)) { + consumeToken(); + OWLDataType dataType = getDataType(tok); + String next = peekToken(); + if (next.equals("[")) { + // Restricted data range + consumeToken(); + String sep = ","; + Set<OWLDataRangeFacetRestriction> facetRestrictions = new HashSet<OWLDataRangeFacetRestriction>(); + while (sep.equals(",")) { + String facet = consumeToken(); + OWLRestrictedDataRangeFacetVocabulary fv = OWLRestrictedDataRangeFacetVocabulary.getFacetBySymbolicName( + facet); + if (fv == null) { + throwException(OWLRestrictedDataRangeFacetVocabulary.getFacets().toArray(new String[OWLRestrictedDataRangeFacetVocabulary.getFacetURIs().size()])); + } + OWLConstant con = parseConstant(); + facetRestrictions.add(dataFactory.getOWLDataRangeFacetRestriction(fv, con.asOWLTypedConstant())); + sep = consumeToken(); + } + if (!sep.equals("]")) { + throwException("]"); + } + return dataFactory.getOWLDataRangeRestriction(dataType, facetRestrictions); + } + else { + return dataType; + } + } + else if (tok.equalsIgnoreCase(NOT)) { + return parseDataComplementOf(); + } + else if (tok.equals("{")) { + return parseDataOneOf(); + } + else { + consumeToken(); + throwException(false, false, false, false, true, NOT, "{"); + } + return null; + } + + + private Set<OWLDataRange> parseDataRangeList() throws ParserException { + String sep = ","; + Set<OWLDataRange> ranges = new HashSet<OWLDataRange>(); + while (sep.equals(",")) { + potentialKeywords.remove(","); + OWLDataRange rng = parseDataRange(); + ranges.add(rng); + potentialKeywords.add(","); + sep = peekToken(); + if (sep.equals(",")) { + consumeToken(); + } + } + return ranges; + } + + + private OWLDataRange parseDataOneOf() throws ParserException { + consumeToken(); + Set<OWLConstant> cons = new HashSet<OWLConstant>(); + String sep = ","; + while (sep.equals(",")) { + OWLConstant con = parseConstant(); + cons.add(con); + sep = consumeToken(); + } + if (!sep.equals("}")) { + throwException(",", "}"); + } + return dataFactory.getOWLDataOneOf(cons); + } + + + private OWLDataRange parseDataComplementOf() throws ParserException { + consumeToken(); + String open = consumeToken(); + if (!open.equals("(")) { + throwException("("); + } + OWLDataRange complementedDataRange = parseDataRange(); + String close = consumeToken(); + if (!close.equals(")")) { + throwException(")"); + } + return dataFactory.getOWLDataComplementOf(complementedDataRange); + } + + + public OWLConstant parseConstant() throws ParserException { + String tok = consumeToken(); + if (tok.startsWith("\"")) { + String lit = tok.substring(1, tok.length() - 1); + if (peekToken().equals("^")) { + consumeToken(); + String type = consumeToken(); + String dataType = consumeToken(); + return dataFactory.getOWLTypedConstant(lit, getDataType(dataType)); + } + else if (peekToken().equals("@")) { + consumeToken(); + String lang = consumeToken(); + return dataFactory.getOWLUntypedConstant(lit, lang); + } + else { + return dataFactory.getOWLUntypedConstant(lit); + } + } + else { + try { + Integer.parseInt(tok); + return dataFactory.getOWLTypedConstant(tok, dataFactory.getOWLDataType(XSDVocabulary.INT.getURI())); + } + catch (NumberFormatException e) { + // Ignore - not interested + } + try { + Double.parseDouble(tok); + return dataFactory.getOWLTypedConstant(tok, dataFactory.getOWLDataType(XSDVocabulary.DOUBLE.getURI())); + } + catch (NumberFormatException e) { + // Ignore - not interested + } + try { + Float.parseFloat(tok); + return dataFactory.getOWLTypedConstant(tok, dataFactory.getOWLDataType(XSDVocabulary.FLOAT.getURI())); + } + catch (NumberFormatException e) { + // Ignore - not interested + } + } + throwException(false, + false, + false, + false, + false, + "\"<Literal>\"", + "\"<Literal>\"^^<datatype>", + "\"<Literal>\"@<lang>"); + return null; + } + + + public int parseInteger() throws ParserException { + String i = consumeToken(); + try { + return Integer.parseInt(i); + } + catch (NumberFormatException e) { + throw new ParserException(token, tokenStartPos, line, true, tokenStartCol); + } + } + + + public String getLineCol() { + return "Encountered " + getLastToken() + " at " + line + ":" + col + " "; + } + + + private OWLDescription parseNestedClassExpression() throws ParserException { + String tok = peekToken(); + if (tok.equals("(")) { + consumeToken(); + OWLDescription desc = parseIntersection(); + String closeBracket = consumeToken(); + if (!closeBracket.equals(")")) { + // Error! + throwException(")"); + } + return desc; + } + else if (tok.equals("{")) { + return parseObjectOneOf(); + } + else if (isClassName(tok)) { + String name = consumeToken(); + return getOWLClass(name); + } + else { + consumeToken(); + throwException(true, false, false, false, false, "(", "{"); + } + return null; + } + + + public OWLDescription parseObjectOneOf() throws ParserException { + String open = consumeToken(); + if (!open.equals("{")) { + throwException("{"); + } + String sep = ","; + Set<OWLIndividual> inds = new HashSet<OWLIndividual>(); + while (sep.equals(",")) { + OWLIndividual ind = parseIndividual(); + inds.add(ind); + sep = peekToken(); + if (sep.equals(",")) { + consumeToken(); + } + } + String close = consumeToken(); + if (!close.equals("}")) { + throwException("}", ","); + } + return dataFactory.getOWLObjectOneOf(inds); + } + + + public Set<OWLAxiom> parseFrames() throws ParserException { + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + while (true) { + ... [truncated message content] |
From: <lor...@us...> - 2010-03-09 12:58:00
|
Revision: 2101 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2101&view=rev Author: lorenz_b Date: 2010-03-09 12:57:53 +0000 (Tue, 09 Mar 2010) Log Message: ----------- Some bugfixes. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -63,7 +63,7 @@ public static void main(String[] args) { - + RecentManager.getInstance().load(); try { UIManager.put("OptionPane.cancelButtonText","Cancel"); UIManager.put("ProgressMonitor.progressText","Progress"); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -1,27 +1,33 @@ package org.dllearner.tools.ore; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.URI; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.prefs.BackingStoreException; +import java.util.prefs.Preferences; +import org.apache.log4j.Logger; public class RecentManager { - + private static RecentManager instance; private List<URI> uriList; - private File file; - - public RecentManager(){ + + private static final Logger logger = Logger.getLogger(RecentManager.class); + + public static final String PREFERENCES_KEY = "org.dllearner.tools.ore"; + + public static final int MAX_EDITOR_KITS = 10; + + public RecentManager() { uriList = new ArrayList<URI>(); - file = new File("src/dl-learner/org/dllearner/tools/ore/recent.txt"); } public static synchronized RecentManager getInstance() { @@ -30,57 +36,82 @@ } return instance; } - - public void addURI(URI uri){ - if(uri != null && !uriList.contains(uri)){ - uriList.add(uri); - } - - } - - public List<URI> getURIs(){ + + public List<URI> getURIs() { return uriList; } - - public void serialize() { + + @SuppressWarnings("unchecked") + public void load() { + Preferences userRoot = Preferences.userRoot(); + byte[] prefsBytes = userRoot.getByteArray(PREFERENCES_KEY, null); + if (prefsBytes == null) { + return; + } try { - FileOutputStream fileStream = new FileOutputStream(file); - ObjectOutputStream outputStream = new ObjectOutputStream( - new BufferedOutputStream(fileStream)); - try { - outputStream.writeObject(uriList); - } finally { - outputStream.close(); - } - + ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(prefsBytes)); + uriList = (List<URI>) ois.readObject(); + ois.close(); + pruneInvalidURIs(); + } catch (Exception e) { + logger.error(e); + } + } + + public void save() { + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos); + oos.writeObject(uriList); + oos.flush(); + oos.close(); + // Store in Java prefs + Preferences userRoot = Preferences.userRoot(); + userRoot.putByteArray(PREFERENCES_KEY, bos.toByteArray()); + userRoot.flush(); } catch (IOException e) { - e.printStackTrace(); + logger.error(e); + } catch (BackingStoreException e) { + logger.error(e); } + } + public void add(URI uri) { + for (Iterator<URI> it = uriList.iterator(); it.hasNext();) { + URI u = it.next(); + if (u.equals(uri)) { + it.remove(); + break; + } + } + uriList.add(0, uri); + // Chop any off the end + for (int i = MAX_EDITOR_KITS - 1; uriList.size() > MAX_EDITOR_KITS;) { + uriList.remove(i); + } } - - @SuppressWarnings("unchecked") - public void deserialize() { - try { - FileInputStream fileStream = new FileInputStream(file); - ObjectInputStream inputStream = new ObjectInputStream( - new BufferedInputStream(fileStream)); - try { - List<URI> list = (List<URI>) inputStream.readObject(); - if(list != null){ - uriList.addAll(list); - } - } finally { - inputStream.close(); + public void clear() { + uriList.clear(); + } + + private boolean isValidURI(URI uri) { + if (uri == null || uri.getScheme() == null) { + return false; + } + if (uri.getScheme().equals("file")) { + File file = new File(uri); + return file.exists(); + } + return true; + } + + public void pruneInvalidURIs() { + for (Iterator<URI> it = uriList.iterator(); it.hasNext();) { + if (!isValidURI(it.next())) { + it.remove(); } - } catch (IOException e) { - System.err.println("Can't read recent successfully opened URIs. Starting with empty list."); - } catch (ClassNotFoundException e) { - e.printStackTrace(); } + } - } - - } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/SelectableClassExpressionsTableModel.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -2,14 +2,12 @@ import java.text.DecimalFormat; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.swing.table.AbstractTableModel; import org.dllearner.core.owl.Description; import org.dllearner.learningproblems.EvaluatedDescriptionClass; -import org.protege.editor.owl.ui.view.SelectedEntityCardView; public class SelectableClassExpressionsTableModel extends AbstractTableModel { @@ -119,7 +117,7 @@ selectionList.add(i, Boolean.FALSE); } - fireTableRowsUpdated(0, this.resultList.size()); + fireTableDataChanged(); } public EvaluatedDescriptionClass getSelectedValue(int rowIndex){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -45,7 +45,6 @@ import org.dllearner.tools.ore.RecentManager; import org.dllearner.tools.ore.TaskManager; -import org.dllearner.tools.ore.ui.StatusBar; import org.dllearner.tools.ore.ui.StatusBar2; import org.dllearner.tools.ore.ui.wizard.panels.LeftPanel; @@ -364,6 +363,7 @@ * @param code The return code. */ public void close(int code) { + RecentManager.getInstance().save(); returnCode = code; System.out.println("Exited application"); wizardDialog.dispose(); @@ -451,7 +451,6 @@ TaskManager.getInstance().setDialog(wizardDialog); TaskManager.getInstance().setStatusBar(statusBar); - RecentManager.getInstance().deserialize(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -208,7 +208,7 @@ @Override public void run() { - fillClassesList(1); + fillClassesList(3); TaskManager.getInstance().setTaskFinished(); } }); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -202,8 +202,7 @@ oreMan.initPelletReasoner(); // ReasonerProgressUI ui = new ReasonerProgressUI(getWizard().getDialog()); // oreMan.getReasoner().getReasoner().getKB().getTaxonomyBuilder().setProgressMonitor(ui); - RecentManager.getInstance().addURI(currentURI); - RecentManager.getInstance().serialize(); + RecentManager.getInstance().add(currentURI); if(oreMan.consistentOntology()){ oreMan.getReasoner().classify(); oreMan.getReasoner().realise(); @@ -213,6 +212,7 @@ cancel(true); getWizard().getDialog().setCursor(null); + TaskManager.getInstance().setTaskFinished(); JOptionPane.showMessageDialog(getWizard().getDialog(), "Error loading ontology. Please check URI and try again.", "Ontology loading error", @@ -227,6 +227,7 @@ cancel(true); getWizard().getDialog().setCursor(null); + TaskManager.getInstance().setTaskFinished(); if(e.getClass().equals(UnparsableOntologyException.class)){ JOptionPane.showMessageDialog(getWizard().getDialog(), "Error loading ontology. A syntax error in the ontology has been detected.", Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -8,7 +8,6 @@ import java.util.List; import java.util.Set; -import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; @@ -22,10 +21,12 @@ import org.dllearner.core.owl.NamedClass; import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.ui.GraphicalCoveragePanel; import org.dllearner.tools.ore.ui.MarkableClassesTable; import org.dllearner.tools.ore.ui.SelectableClassExpressionsTable; +import org.jdesktop.swingx.JXTitledPanel; public class AutoLearnPanel extends JPanel { @@ -36,9 +37,10 @@ // private ClassesTable classesTable; private MarkableClassesTable classesTable; - private JPanel superPanel; - private JPanel equivalentPanel; + private JXTitledPanel equivalentPanel; + private JXTitledPanel superPanel; + private SelectableClassExpressionsTable equivalentClassResultsTable; private SelectableClassExpressionsTable superClassResultsTable; @@ -50,6 +52,10 @@ private JButton skipButton; + private final static String SUPERCLASS_PANEL_TITLE = "Superclass expressions for "; + private final static String EQUIVALENTCLASS_PANEL_TITLE = "Equivalent class expressions for "; + + private final static String INCONSISTENCY_WARNING = "<html><font color=red>" + "Warning. Selected class expressions leads to an inconsistent ontology!" + "</font></html>"; @@ -71,11 +77,14 @@ } private JComponent createClassesPanel(){ + JXTitledPanel classesPanel = new JXTitledPanel("Classes"); + classesPanel.getContentContainer().setLayout(new BorderLayout()); classesTable = new MarkableClassesTable(); classesTable.setBorder(null); JScrollPane classesScroll = new JScrollPane(classesTable); classesScroll.setBorder(new MatteBorder(null)); - return classesScroll; + classesPanel.getContentContainer().add(classesScroll); + return classesPanel; } private JComponent createResultPanel(){ @@ -110,8 +119,8 @@ private JComponent createEquivalentPanel(){ GridBagConstraints c = new GridBagConstraints(); - equivalentPanel = new JPanel(); - equivalentPanel.setLayout(new GridBagLayout()); + equivalentPanel = new JXTitledPanel(EQUIVALENTCLASS_PANEL_TITLE); + equivalentPanel.getContentContainer().setLayout(new GridBagLayout()); c.weightx = 1.0; c.weighty = 1.0; @@ -120,28 +129,27 @@ c.gridy = 0; equivalentClassResultsTable = new SelectableClassExpressionsTable(); equivalentClassResultsTable.setName("equivalent"); - equivalentPanel.add(new JScrollPane(equivalentClassResultsTable), c); + equivalentPanel.getContentContainer().add(new JScrollPane(equivalentClassResultsTable), c); c.weightx = 0.0; c.weighty = 0.0; c.gridx = 1; c.gridy = 0; equivalentClassCoveragePanel = new GraphicalCoveragePanel(""); - equivalentPanel.add(new JScrollPane(equivalentClassCoveragePanel), c); - equivalentPanel.setBorder(BorderFactory.createTitledBorder("Equivalent class expressions")); + equivalentPanel.getContentContainer().add(new JScrollPane(equivalentClassCoveragePanel), c); c.gridx = 0; c.gridy = 1; equivalentInconsistencyLabel = new JLabel(" "); - equivalentPanel.add(equivalentInconsistencyLabel, c); + equivalentPanel.getContentContainer().add(equivalentInconsistencyLabel, c); return equivalentPanel; } private JComponent createSuperPanel(){ GridBagConstraints c = new GridBagConstraints(); - superPanel = new JPanel(); - superPanel.setLayout(new GridBagLayout()); + superPanel = new JXTitledPanel(SUPERCLASS_PANEL_TITLE); + superPanel.getContentContainer().setLayout(new GridBagLayout()); c.weightx = 1.0; c.weighty = 1.0; @@ -150,20 +158,19 @@ c.gridy = 0; superClassResultsTable = new SelectableClassExpressionsTable(); superClassResultsTable.setName("super"); - superPanel.add(new JScrollPane(superClassResultsTable), c); + superPanel.getContentContainer().add(new JScrollPane(superClassResultsTable), c); c.weightx = 0.0; c.weighty = 0.0; c.gridx = 1; c.gridy = 0; superClassCoveragePanel = new GraphicalCoveragePanel(""); - superPanel.add(new JScrollPane(superClassCoveragePanel), c); - superPanel.setBorder(BorderFactory.createTitledBorder("Superclass expressions")); + superPanel.getContentContainer().add(new JScrollPane(superClassCoveragePanel), c); c.gridx = 0; c.gridy = 1; superInconsistencyLabel = new JLabel(" "); - superPanel.add(superInconsistencyLabel, c); + superPanel.getContentContainer().add(superInconsistencyLabel, c); return superPanel; } @@ -259,6 +266,9 @@ public void setSelectedClass(int rowIndex){ classesTable.setSelectedClass(rowIndex); + String renderedClassName = OREManager.getInstance().getManchesterSyntaxRendering(classesTable.getSelectedClass(rowIndex)); + superPanel.setTitle(SUPERCLASS_PANEL_TITLE + renderedClassName); + equivalentPanel.setTitle(EQUIVALENTCLASS_PANEL_TITLE + renderedClassName); } public static void main(String[] args){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -122,7 +122,7 @@ minInstancesCountPanel.add(new JLabel("Min. instance count per class: ")); minInstanceCountSpinner = new JSpinner(); minInstanceCountSpinner.setEnabled(true); - javax.swing.SpinnerModel spinnerModel = new SpinnerNumberModel(1, 1, 500, 1); + javax.swing.SpinnerModel spinnerModel = new SpinnerNumberModel(3, 1, 500, 1); minInstanceCountSpinner.setModel(spinnerModel); minInstancesCountPanel.add(minInstanceCountSpinner); panel.add(minInstancesCountPanel, c); @@ -142,7 +142,7 @@ minInstancesCountPanel.add(new JLabel("Showing classes with at least ")); minInstanceCountSpinner = new JSpinner(); minInstanceCountSpinner.setEnabled(true); - javax.swing.SpinnerModel spinnerModel = new SpinnerNumberModel(1, 1, 500, 1); + javax.swing.SpinnerModel spinnerModel = new SpinnerNumberModel(3, 1, 500, 1); minInstanceCountSpinner.setModel(spinnerModel); minInstancesCountPanel.add(minInstanceCountSpinner); minInstancesCountPanel.add(new JLabel(" instances")); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java 2010-03-09 10:29:35 UTC (rev 2100) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java 2010-03-09 12:57:53 UTC (rev 2101) @@ -6,6 +6,7 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionListener; +import java.util.HashSet; import javax.swing.BorderFactory; import javax.swing.Box; @@ -25,6 +26,7 @@ import org.dllearner.tools.ore.ui.ExplanationTablePanel; import org.dllearner.tools.ore.ui.HelpablePanel; import org.dllearner.tools.ore.ui.RepairPlanPanel; +import org.jdesktop.swingx.JXTitledPanel; import org.semanticweb.owl.apibinding.OWLManager; public class InconsistencyExplanationPanel extends JPanel{ @@ -72,8 +74,12 @@ } private JComponent createExplanationPanel(){ + JXTitledPanel explanationPanel = new JXTitledPanel(); + explanationPanel.setTitle("Explanations"); + explanationPanel.getContentContainer().setLayout(new BorderLayout()); + explanationsPanel = new Box(1); - + JPanel pan = new JPanel(new BorderLayout()); pan.add(explanationsPanel, BorderLayout.NORTH); explanationsScrollPane = new JScrollPane(pan); @@ -83,14 +89,12 @@ explanationsScrollPane.getViewport().setBackground(null); explanationsScrollPane.setOpaque(false); - buttonExplanationsPanel = new JPanel(); - buttonExplanationsPanel.setLayout(new BorderLayout()); - buttonExplanationsPanel.add(explanationsScrollPane, BorderLayout.CENTER); + explanationPanel.getContentContainer().add(explanationsScrollPane, BorderLayout.CENTER); JPanel holder = new JPanel(new BorderLayout()); holder.add(createExplanationHeaderPanel(), BorderLayout.WEST); - buttonExplanationsPanel.add(holder, BorderLayout.NORTH); + explanationPanel.getContentContainer().add(holder, BorderLayout.NORTH); - return buttonExplanationsPanel; + return explanationPanel; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-03-13 15:37:01
|
Revision: 2118 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2118&view=rev Author: lorenz_b Date: 2010-03-13 15:36:54 +0000 (Sat, 13 Mar 2010) Log Message: ----------- Bug fix. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -15,6 +15,7 @@ import org.dllearner.tools.ore.explanation.ExplanationType; import org.dllearner.tools.ore.explanation.RootFinder; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; +import org.dllearner.tools.ore.explanation.laconic.OPlus; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.apibinding.OWLManager; @@ -303,6 +304,10 @@ return gen.getRemainingAxioms(source, part); } + public Set<OWLAxiom> getLaconicAxioms(OWLAxiom ax){ + OPlus oPlus = new OPlus(dataFactory); + return ax.accept(oPlus); + } @Override public void activeOntologyChanged() { reasoner = OREManager.getInstance().getReasoner().getReasoner(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -113,8 +113,9 @@ } public void removeSelection(OWLAxiom ax){ - selectedAxioms.remove(ax); - fireImpactListChanged(); + if(selectedAxioms.remove(ax)){ + fireImpactListChanged(); + } } public boolean isSelected(OWLAxiom ax){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/LearningManager.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -5,14 +5,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.TreeSet; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; -import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.ReasonerComponent; import org.dllearner.core.owl.NamedClass; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -61,6 +61,8 @@ lastRequestedRegularSize = new HashMap<OWLAxiom, Integer>(); lastRequestedLaconicSize = new HashMap<OWLAxiom, Integer>(); +// laconicExpGen = new LaconicExplanationGenerator(manager); + RepairManager.getInstance(OREManager.getInstance()).addListener(this); } @@ -202,6 +204,7 @@ } axiom2Module.put(entailment, module); laconicExpGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(module)); +// laconicExpGen.setOntology(Collections.singleton(module)); laconicExpGen.setProgressMonitor(TaskManager.getInstance().getStatusBar()); if(limit == -1){ explanations = laconicExpGen.getExplanations(entailment); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -67,6 +67,30 @@ lastRegularExplanations = new HashSet<Explanation>(); } + public LaconicExplanationGenerator(OWLOntologyManager manager) { + + this.manager = manager; + + oPlus = new OPlus(manager.getOWLDataFactory()); + lastRegularExplanations = new HashSet<Explanation>(); + } + + public void setOntology(Set<OWLOntology> ontologies){ + try { + ontology = manager.createOntology(URI.create(new StringBuilder().append( + "http://laconic").append(System.nanoTime()).toString()), + ontologies, true); + } catch (OWLOntologyCreationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + pelletExplanation = new PelletExplanationGenerator(manager, ontologies); + lastRegularExplanations = new HashSet<Explanation>(); + } + /** * Computes a more fine grained representation for a set of axioms, which means to split them * e.g. for A \sqsubseteq B \sqcap C returning A \sqsubseteq B and A \sqsubseteq C Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -58,8 +58,8 @@ /* - * This class computes the oplus closure provided in 'Laconic and Precise Justifications in OWL' from - * Matthew Horridge, Bijan Parsia and Ulrike Sattler. A set of axioms is into smaller and weaker axioms. + * This class computes the OPlus closure provided in 'Laconic and Precise Justifications in OWL' from + * Matthew Horridge, Bijan Parsia and Ulrike Sattler. A set of axioms is transformed into smaller and weaker axioms. */ public class OPlus implements OWLAxiomVisitorEx<Set<OWLAxiom>> Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -107,12 +107,13 @@ // } // // } + RemainingAxiomsDialog dialog = new RemainingAxiomsDialog(ax, ont); int ret = dialog.showDialog(); if(ret == RemainingAxiomsDialog.OK_RETURN_CODE){ impMan.addSelection(ax); List<OWLOntologyChange> changes = dialog.getChanges(); - for(OWLAxiom source : expMan.getLaconicSourceAxioms(ax)){ + for(OWLAxiom source : expMan.getSourceAxioms(ax)){ if(repMan.isScheduled2Add(source)){ changes.add(new RemoveAxiom(ont, source)); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -2,6 +2,7 @@ import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -17,6 +18,8 @@ import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.JTextPane; import org.dllearner.tools.ore.ExplanationManager; import org.dllearner.tools.ore.ImpactManager; @@ -61,7 +64,7 @@ public RemainingAxiomsDialog(OWLAxiom laconicAxiom, OWLOntology ont){ super(TaskManager.getInstance().getDialog(), "Selected part of axiom in ontology", true); setLayout(new BorderLayout()); - add(new JLabel("You selected an axiom which is only part of some axioms in the ontology"), BorderLayout.NORTH); + add(new JLabel("The selected axiom is only part of some axioms in the ontology"), BorderLayout.NORTH); createControls(); this.ontology = ont; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -3,7 +3,6 @@ import java.awt.Color; import java.awt.Component; import java.awt.Cursor; -import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -15,12 +14,14 @@ import javax.swing.JTable; import javax.swing.table.TableCellRenderer; +import org.dllearner.tools.ore.ExplanationManager; import org.dllearner.tools.ore.ImpactManager; import org.dllearner.tools.ore.OREApplication; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.ui.rendering.TextAreaRenderer; import org.jdesktop.swingx.JXTable; +import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntologyChange; public class RepairTable extends JXTable { @@ -92,13 +93,7 @@ if (row >= 0 && row <= table.getRowCount() && column == 2) { OWLOntologyChange change = ((RepairTableModel) getModel()) .getChangeAt(row); - if (ImpactManager.getInstance(OREManager.getInstance()) - .isSelected(change.getAxiom())) { - ImpactManager.getInstance(OREManager.getInstance()) - .removeSelection(change.getAxiom()); - } - RepairManager.getInstance(OREManager.getInstance()) - .removeFromRepairPlan(change); + handleRemoveChange(change); setCursor(null); } } @@ -128,18 +123,19 @@ OWLOntologyChange change = ((RepairTableModel) getModel()) .getChangeAt(selRow); if (e.getKeyCode() == KeyEvent.VK_DELETE) { - RepairManager.getInstance(OREManager.getInstance()) - .removeFromRepairPlan(change); - if (ImpactManager.getInstance(OREManager.getInstance()).isSelected( - change.getAxiom())) { - ImpactManager.getInstance(OREManager.getInstance()) - .removeSelection(change.getAxiom()); - } - + handleRemoveChange(change); } - getSelectionModel().clearSelection(); } + + private void handleRemoveChange(OWLOntologyChange change) { + OREManager oreMan = OREManager.getInstance(); + RepairManager.getInstance(oreMan).removeFromRepairPlan(change); + ImpactManager.getInstance(oreMan).removeSelection(change.getAxiom()); + for (OWLAxiom ax : ExplanationManager.getInstance(oreMan).getLaconicAxioms(change.getAxiom())) { + ImpactManager.getInstance(oreMan).removeSelection(ax); + } + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java 2010-03-13 12:07:58 UTC (rev 2117) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java 2010-03-13 15:36:54 UTC (rev 2118) @@ -28,6 +28,7 @@ import java.util.Set; import javax.swing.BorderFactory; +import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; @@ -38,6 +39,7 @@ import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectPropertyAssertion; +import org.dllearner.tools.ore.OREApplication; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.OntologyModifier; import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxRenderer; @@ -66,7 +68,7 @@ private JXTaskPaneContainer container; - private ImageIcon newIcon; + private Icon newIcon = new ImageIcon(OREApplication.class.getResource("new.gif")); private String baseURI; private Map<String, String> prefixes; @@ -86,8 +88,8 @@ prefixes = OREManager.getInstance().getPrefixes(); baseURI = OREManager.getInstance().getBaseURI(); - newIcon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/new.gif"); + setLayout(new GridLayout()); setBackground(Color.WHITE); setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-03-15 20:57:38
|
Revision: 2121 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2121&view=rev Author: lorenz_b Date: 2010-03-15 20:57:30 +0000 (Mon, 15 Mar 2010) Log Message: ----------- Changed computing of remaining axiom parts, which are shown when an axiom is selected, which is not an asserted axiom in the ontology. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RemainingAxiomPartsGenerator.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-03-15 09:01:40 UTC (rev 2120) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-03-15 20:57:30 UTC (rev 2121) @@ -13,6 +13,7 @@ import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.ExplanationException; import org.dllearner.tools.ore.explanation.ExplanationType; +import org.dllearner.tools.ore.explanation.RemainingAxiomPartsGenerator; import org.dllearner.tools.ore.explanation.RootFinder; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.dllearner.tools.ore.explanation.laconic.OPlus; @@ -57,13 +58,14 @@ private CachedExplanationGenerator gen; + private RemainingAxiomPartsGenerator remainingAxGen; + private ExplanationManager(OREManager oreMan) { OREManager.getInstance().addListener(this); this.reasoner = oreMan.getReasoner().getReasoner(); this.manager = reasoner.getManager(); this.ontology = oreMan.getReasoner().getOWLAPIOntologies(); - System.out.println(ontology); dataFactory = manager.getOWLDataFactory(); @@ -77,6 +79,8 @@ listeners = new ArrayList<ExplanationManagerListener>(); gen = new CachedExplanationGenerator(reasoner.getLoadedOntologies()); + + remainingAxGen = new RemainingAxiomPartsGenerator(ontology, dataFactory); } @@ -308,6 +312,11 @@ OPlus oPlus = new OPlus(dataFactory); return ax.accept(oPlus); } + + public Map<OWLAxiom, Set<OWLAxiom>> getRemainingAxiomParts(OWLAxiom laconicAxiom){ + return remainingAxGen.getRemainingAxiomParts(laconicAxiom); + } + @Override public void activeOntologyChanged() { reasoner = OREManager.getInstance().getReasoner().getReasoner(); Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RemainingAxiomPartsGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RemainingAxiomPartsGenerator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RemainingAxiomPartsGenerator.java 2010-03-15 20:57:30 UTC (rev 2121) @@ -0,0 +1,118 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import org.dllearner.tools.ore.explanation.laconic.OPlus; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLOntology; + +public class RemainingAxiomPartsGenerator { + private OPlus oPlusGen; + private Set<OWLOntology> ontologies; + private OWLDataFactory dataFactory; + + private Map<OWLAxiom, Set<OWLAxiom>> source2AxiomsMap = new HashMap<OWLAxiom, Set<OWLAxiom>>(); + + private Map<OWLAxiom, Map<OWLAxiom, Set<OWLAxiom>>> axiom2RemainingAxiomsMap = new HashMap<OWLAxiom, Map<OWLAxiom, Set<OWLAxiom>>>(); + + public RemainingAxiomPartsGenerator(Set<OWLOntology> ontologies, OWLDataFactory factory){ + this.ontologies = ontologies; + this.dataFactory = factory; + + oPlusGen = new OPlus(dataFactory); + + } + + public RemainingAxiomPartsGenerator(OWLOntology ontology, OWLDataFactory factory){ + this.ontologies = Collections.singleton(ontology); + this.dataFactory = factory; + + oPlusGen = new OPlus(dataFactory); + + } + + public Map<OWLAxiom, Set<OWLAxiom>> getRemainingAxiomParts(OWLAxiom laconicAxiom){ + Set<OWLAxiom> oplus; + Set<OWLAxiom> sourceAxioms = new HashSet<OWLAxiom>(); + Set<OWLAxiom> remainingAxioms; + + Map<OWLAxiom,Set<OWLAxiom>> source2RemainingAxiomsMap = axiom2RemainingAxiomsMap.get(laconicAxiom); + if(source2RemainingAxiomsMap == null){ + + source2RemainingAxiomsMap = new HashMap<OWLAxiom, Set<OWLAxiom>>(); + axiom2RemainingAxiomsMap.put(laconicAxiom, source2RemainingAxiomsMap); + + for(OWLOntology ont : ontologies){ + for(OWLAxiom ax : ont.getAxioms()){ + oplus = source2AxiomsMap.get(ax); + if(oplus == null){ + oplus = ax.accept(oPlusGen); + source2AxiomsMap.put(ax, oplus); + } + if(oplus.contains(laconicAxiom)){ + sourceAxioms.add(ax); + continue; + } else { + for(OWLAxiom part : laconicAxiom.accept(oPlusGen)){ + if(oplus.contains(part)){ + sourceAxioms.add(ax); + break; + } + } + } + + + } + } +// System.out.println("Source axioms: " + sourceAxioms); + for(OWLAxiom sourceAx : sourceAxioms){ + remainingAxioms = new HashSet<OWLAxiom>(); +// System.out.println("Source axiom: " + sourceAx); + Set<OWLAxiom> temp = new HashSet<OWLAxiom>(source2AxiomsMap.get(sourceAx)); + Set<OWLAxiom> laconicAxiomParts = laconicAxiom.accept(oPlusGen); + temp.removeAll(laconicAxiomParts); + for(Iterator<OWLAxiom> i = temp.iterator();i.hasNext();){ + OWLAxiom ax = i.next(); + for(OWLAxiom laconicAxiomPart : laconicAxiomParts){ + if(ax.accept(oPlusGen).contains(laconicAxiomPart)){ +// System.out.println(ax); + i.remove(); + break; + } + } + + } + remainingAxioms.addAll(temp); + for(OWLAxiom ax : temp){ +// System.out.println("Temp: " + ax); + for(OWLAxiom a : ax.accept(oPlusGen)){ +// System.out.println(a); + if(temp.contains(a) && !a.equals(ax)){ + remainingAxioms.remove(a); + } + } + } + source2RemainingAxiomsMap.put(sourceAx, remainingAxioms); +// System.out.println("Remaining axioms: " + remainingAxioms); + } + } + + + + return source2RemainingAxiomsMap; + + } + + public void clear(){ + source2AxiomsMap.clear(); + axiom2RemainingAxiomsMap.clear(); + } + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2010-03-15 09:01:40 UTC (rev 2120) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2010-03-15 20:57:30 UTC (rev 2121) @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -11,9 +12,12 @@ import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.ExplanationException; import org.dllearner.tools.ore.explanation.PelletExplanationGenerator; +import org.dllearner.tools.ore.explanation.RemainingAxiomPartsGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; +import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.inference.OWLReasonerFactory; +import org.semanticweb.owl.model.AxiomType; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataFactory; @@ -203,7 +207,7 @@ } Set<Explanation> explanations = new HashSet<Explanation>(); - for (Explanation explanation : allPreviouslyFoundExplanations) {System.out.println(explanation); + for (Explanation explanation : allPreviouslyFoundExplanations) { if (!nonLaconicExplanations.contains(explanation)) { if (laconicExplanations.contains(explanation)) { explanations.add(explanation); @@ -391,42 +395,97 @@ } public static void main(String[] args) throws OWLOntologyCreationException, ExplanationException, OWLOntologyChangeException{ -// String baseURI = "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl"; + String baseURI = "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl"; OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI.create("file:examples/ore/koala.owl")); OWLDataFactory factory = manager.getOWLDataFactory(); + Reasoner reasoner = new PelletReasonerFactory().createReasoner(manager); + reasoner.loadOntology(ontology); + reasoner.classify(); + RemainingAxiomPartsGenerator remAxGen = new RemainingAxiomPartsGenerator(ontology, factory); LaconicExplanationGenerator expGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(ontology)); + for(OWLClass unsat : reasoner.getInconsistentClasses()){ + System.out.println("#######################################"); + System.out.println("Unsatisfiable class: " + unsat); + for(Explanation exp : expGen.getExplanations(factory.getOWLSubClassAxiom(unsat, factory.getOWLNothing()))){ +// System.out.println("Laconic explanation: " + exp); + for(OWLAxiom ax : exp.getAxioms()){ + if(!ontology.containsAxiom(ax)){ + System.out.println("Laconic axiom: " + ax); + System.out.println("Remaining axioms: " + remAxGen.getRemainingAxiomParts(ax)); + } + } + } + } // OWLClass koalaWithPhD = factory.getOWLClass(URI.create(baseURI + "#KoalaWithPhD")); // OWLClass koala = factory.getOWLClass(URI.create(baseURI + "#Koala")); +// OWLAxiom laconicAx = factory.getOWLSubClassAxiom(koalaWithPhD, koala); +// OPlus oplusGen = new OPlus(factory); +// Set<OWLAxiom> sourceAxioms = new HashSet<OWLAxiom>(); +// Map<OWLAxiom, Set<OWLAxiom>> source2AxiomsMap = new HashMap<OWLAxiom, Set<OWLAxiom>>(); +// Set<OWLAxiom> oplus; +// Set<OWLAxiom> remainingAxioms = new HashSet<OWLAxiom>(); +// long startTime = System.currentTimeMillis(); +// for(OWLAxiom ax : ontology.getAxioms(AxiomType.EQUIVALENT_CLASSES)){ +// oplus = ax.accept(oplusGen); +// if(oplus.contains(laconicAx)){ +// sourceAxioms.add(ax); +// source2AxiomsMap.put(ax, oplus); +// } +// } +// for(OWLAxiom sourceAx : sourceAxioms){ +// System.out.println("Source axiom: " + sourceAx); +// Set<OWLAxiom> temp = source2AxiomsMap.get(sourceAx); +// for(Iterator<OWLAxiom> i = temp.iterator();i.hasNext();){ +// OWLAxiom ax = i.next(); +// if(ax.accept(oplusGen).contains(laconicAx)){ +//// System.out.println(ax); +// i.remove(); +// } +// } +// remainingAxioms.addAll(temp); +// for(OWLAxiom ax : temp){ +//// System.out.println("Temp: " + ax); +// for(OWLAxiom a : ax.accept(oplusGen)){ +//// System.out.println(a); +// if(temp.contains(a) && !a.equals(ax)){ +// remainingAxioms.remove(a); +// } +// } +// } +// System.out.println("Remaining axioms: " + remainingAxioms); +// } +// System.out.println("Overall computing time: " + (System.currentTimeMillis() - startTime)); + // System.out.println(expGen.getExplanations(factory.getOWLSubClassAxiom(koalaWithPhD, factory.getOWLNothing()), 1)); -// OWLAxiom laconicAx = factory.getOWLSubClassAxiom(koalaWithPhD, koala); +// // Set<OWLAxiom> sourceAxioms = expGen.getSourceAxioms(laconicAx); // System.out.println("Source axioms: " + sourceAxioms); // for(OWLAxiom sourceAx : sourceAxioms){ // System.out.println("\nRebuildet: " + expGen.getRemainingAxioms(sourceAx, laconicAx)); // } - OWLAxiom ax = factory.getOWLEquivalentClassesAxiom(factory.getOWLClass(URI.create("A")), - factory.getOWLObjectIntersectionOf(factory.getOWLClass(URI.create("C")), - factory.getOWLObjectSomeRestriction(factory.getOWLObjectProperty(URI.create("R")), - factory.getOWLClass(URI.create("F"))))); - OWLAxiom ax2 = factory.getOWLSubClassAxiom(factory.getOWLObjectSomeRestriction(factory.getOWLObjectProperty(URI.create("R")), factory.getOWLThing()), - factory.getOWLObjectComplementOf(factory.getOWLClass(URI.create("C")))); - Set<OWLAxiom> ont = new HashSet<OWLAxiom>(); - ont.add(ax); - ont.add(ax2); - OWLOntology o = manager.createOntology(ont); - expGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(o)); - System.out.println(expGen.getExplanations(factory.getOWLSubClassAxiom(factory.getOWLClass(URI.create("A")), factory.getOWLNothing()), 1)); +// OWLAxiom ax = factory.getOWLEquivalentClassesAxiom(factory.getOWLClass(URI.create("A")), +// factory.getOWLObjectIntersectionOf(factory.getOWLClass(URI.create("C")), +// factory.getOWLObjectSomeRestriction(factory.getOWLObjectProperty(URI.create("R")), +// factory.getOWLClass(URI.create("F"))))); +// OWLAxiom ax2 = factory.getOWLSubClassAxiom(factory.getOWLObjectSomeRestriction(factory.getOWLObjectProperty(URI.create("R")), factory.getOWLThing()), +// factory.getOWLObjectComplementOf(factory.getOWLClass(URI.create("C")))); +// Set<OWLAxiom> ont = new HashSet<OWLAxiom>(); +// ont.add(ax); +// ont.add(ax2); +// OWLOntology o = manager.createOntology(ont); +// expGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(o)); +// System.out.println(expGen.getExplanations(factory.getOWLSubClassAxiom(factory.getOWLClass(URI.create("A")), factory.getOWLNothing()), 1)); +// +// OWLAxiom remove = factory.getOWLSubClassAxiom(factory.getOWLClass(URI.create("A")),factory.getOWLObjectSomeRestriction(factory.getOWLObjectProperty(URI.create("R")), factory.getOWLThing())); +// Set<OWLAxiom> sourceAxioms = expGen.getSourceAxioms(remove); +// System.out.println("Source axioms: " + sourceAxioms); +// for(OWLAxiom sourceAx : sourceAxioms){ +// System.out.println("\nRebuildet: " + expGen.getRemainingAxioms(sourceAx, remove)); +// } - OWLAxiom remove = factory.getOWLSubClassAxiom(factory.getOWLClass(URI.create("A")),factory.getOWLObjectSomeRestriction(factory.getOWLObjectProperty(URI.create("R")), factory.getOWLThing())); - Set<OWLAxiom> sourceAxioms = expGen.getSourceAxioms(remove); - System.out.println("Source axioms: " + sourceAxioms); - for(OWLAxiom sourceAx : sourceAxioms){ - System.out.println("\nRebuildet: " + expGen.getRemainingAxioms(sourceAx, remove)); - } - } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2010-03-15 09:01:40 UTC (rev 2120) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2010-03-15 20:57:30 UTC (rev 2121) @@ -84,12 +84,12 @@ impMan.removeSelection(ax); if(!ont.containsAxiom(ax)){ List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); - for(OWLAxiom source : expMan.getSourceAxioms(ax)){ + for(OWLAxiom source : expMan.getRemainingAxiomParts(ax).keySet()){ impMan.removeSelection(source); changes.add(new RemoveAxiom(ont, source)); - for(OWLAxiom remain : expMan.getRemainingAxioms(source, ax)){ - changes.add(new AddAxiom(ont, remain)); - } +// for(OWLAxiom remain : expMan.getRemainingAxioms(source, ax)){ +// changes.add(new AddAxiom(ont, remain)); +// } } repMan.removeFromRepairPlan(changes); } else { @@ -98,27 +98,18 @@ } else { // impMan.addSelection(ax); if(!OREManager.getInstance().isSourceOWLAxiom(ax)){ -// List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); -// for(OWLAxiom source : expMan.getSourceAxioms(ax)){ -// impMan.addSelection(source); -// changes.add(new RemoveAxiom(ont, source)); -// for(OWLAxiom remain : expMan.getRemainingAxioms(source, ax)){ -// changes.add(new AddAxiom(ont, remain)); -// } -// -// } RemainingAxiomsDialog dialog = new RemainingAxiomsDialog(ax, ont); int ret = dialog.showDialog(); if(ret == RemainingAxiomsDialog.OK_RETURN_CODE){ impMan.addSelection(ax); List<OWLOntologyChange> changes = dialog.getChanges(); - for(OWLAxiom source : expMan.getSourceAxioms(ax)){ - if(repMan.isScheduled2Add(source)){ - changes.add(new RemoveAxiom(ont, source)); - } - - } +// for(OWLAxiom source : expMan.getSourceAxioms(ax)){ +// if(repMan.isScheduled2Add(source)){ +// changes.add(new RemoveAxiom(ont, source)); +// } +// +// } repMan.addToRepairPlan(changes); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java 2010-03-15 09:01:40 UTC (rev 2120) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsDialog.java 2010-03-15 20:57:30 UTC (rev 2121) @@ -2,13 +2,15 @@ import java.awt.BorderLayout; import java.awt.Dimension; -import java.awt.FlowLayout; +import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import javax.swing.BorderFactory; @@ -18,6 +20,8 @@ import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; import javax.swing.JTextArea; import javax.swing.JTextPane; @@ -25,6 +29,7 @@ import org.dllearner.tools.ore.ImpactManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.TaskManager; +import org.dllearner.tools.ore.ui.rendering.ManchesterSyntaxRenderer; import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; @@ -62,9 +67,15 @@ public RemainingAxiomsDialog(OWLAxiom laconicAxiom, OWLOntology ont){ - super(TaskManager.getInstance().getDialog(), "Selected part of axiom in ontology", true); + super(TaskManager.getInstance().getDialog(), "Selected part of axioms in ontology", true); setLayout(new BorderLayout()); - add(new JLabel("The selected axiom is only part of some axioms in the ontology"), BorderLayout.NORTH); + JTextPane info = new JTextPane(); + info.setBackground(getParent().getBackground()); + info.setEditable(false); + info.setContentType("text/html"); + info.setText("<html>You selected an axiom, which is only part of some axioms in the ontology." + + " To retain the remaining parts, you can select them below.</html>"); + add(info, BorderLayout.NORTH); createControls(); this.ontology = ont; @@ -78,15 +89,14 @@ changes = new ArrayList<OWLOntologyChange>(); sourceAxioms = new ArrayList<OWLAxiom>(); - sourceAxioms.addAll(expMan.getSourceAxioms(laconicAxiom)); +// sourceAxioms.addAll(expMan.getSourceAxioms(laconicAxiom)); - for(OWLAxiom source : sourceAxioms){ + Map<OWLAxiom, Set<OWLAxiom>> sourceAxiom2RemainingAxiomPartsMap = expMan.getRemainingAxiomParts(laconicAxiom); + + for(OWLAxiom source : sourceAxiom2RemainingAxiomPartsMap.keySet()){ changes.add(new RemoveAxiom(ont, source)); - List<OWLAxiom> remainingAxioms = new ArrayList<OWLAxiom>(expMan.getRemainingAxioms(source, laconicAxiom)); - RemainingAxiomsTable table = new RemainingAxiomsTable(remainingAxioms); - tables.add(table); - explanationsPanel.add(table); + explanationsPanel.add(createRemainingAxiomsPanel(source, sourceAxiom2RemainingAxiomPartsMap.get(source))); } @@ -95,6 +105,30 @@ } + private JPanel createRemainingAxiomsPanel(OWLAxiom source, Set<OWLAxiom> remainingParts){ + JPanel panel = new JPanel(new BorderLayout()); + + JPanel p = new JPanel(new GridLayout(3, 1)); + p.add(new JLabel("<html><b>Axiom:</b></html>")); + JTextPane sourceAxiomPane = new JTextPane(); + sourceAxiomPane.setContentType("text/html"); + sourceAxiomPane.setText(ManchesterSyntaxRenderer.render(source, false, 0)); + sourceAxiomPane.setEditable(false); +// sourceAxiomPane.setBackground(getParent().getBackground()); + p.add(sourceAxiomPane); + p.add(new JLabel("<html><b>Remaining parts:</b></html>")); + panel.add(p, BorderLayout.NORTH); + + RemainingAxiomsTable table = new RemainingAxiomsTable(new ArrayList<OWLAxiom>(remainingParts)); + panel.add(new JScrollPane(table)); + + panel.add(new JSeparator(JSeparator.HORIZONTAL), BorderLayout.SOUTH); + + tables.add(table); + + return panel; + } + private void createControls() { Box buttonBox = Box.createHorizontalBox(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsTable.java 2010-03-15 09:01:40 UTC (rev 2120) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RemainingAxiomsTable.java 2010-03-15 20:57:30 UTC (rev 2121) @@ -20,6 +20,7 @@ setModel(new RemainingAxiomsTableModel(remainingAxioms)); getColumn(0).setCellRenderer(new TextAreaRenderer()); getColumn(1).setMaxWidth(30); + setTableHeader(null); } public List<OWLAxiom> getSelectedAxioms(){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2010-03-15 09:01:40 UTC (rev 2120) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java 2010-03-15 20:57:30 UTC (rev 2121) @@ -132,6 +132,7 @@ OREManager oreMan = OREManager.getInstance(); RepairManager.getInstance(oreMan).removeFromRepairPlan(change); ImpactManager.getInstance(oreMan).removeSelection(change.getAxiom()); + System.out.println(change); for (OWLAxiom ax : ExplanationManager.getInstance(oreMan).getLaconicAxioms(change.getAxiom())) { ImpactManager.getInstance(oreMan).removeSelection(ax); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-07-17 06:22:59
|
Revision: 2203 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2203&view=rev Author: lorenz_b Date: 2010-07-17 06:22:52 +0000 (Sat, 17 Jul 2010) Log Message: ----------- Started integrating SPARQL debug component into ORE. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/ trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/sparql/QuerySolutionConverter.java trunk/src/dl-learner/org/dllearner/tools/ore/sparql/SPARQLProgressMonitor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java Added: trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java 2010-07-17 06:22:52 UTC (rev 2203) @@ -0,0 +1,1777 @@ +package org.dllearner.tools.ore.sparql; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import javax.swing.SwingUtilities; + +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.DailyRollingFileAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.SimpleLayout; +import org.dllearner.kb.extraction.ExtractionAlgorithm; +import org.dllearner.utilities.JamonMonitorLogger; +import org.dllearner.utilities.owl.OWLVocabulary; +import org.mindswap.pellet.PelletOptions; +import org.semanticweb.HermiT.Reasoner.ReasonerFactory; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.model.AxiomType; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; +import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; +import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; +import org.semanticweb.owlapi.model.OWLException; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLNamedIndividual; +import org.semanticweb.owlapi.model.OWLObject; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom; +import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.OWLPropertyDomainAxiom; +import org.semanticweb.owlapi.reasoner.Node; +import org.semanticweb.owlapi.reasoner.OWLReasoner; +import org.semanticweb.owlapi.util.ProgressMonitor; + +import aterm.ATermAppl; + +import com.clarkparsia.owlapi.explanation.BlackBoxExplanation; +import com.clarkparsia.owlapi.explanation.PelletExplanation; +import com.clarkparsia.owlapi.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; +import com.clarkparsia.owlapiv3.XSD; +import com.clarkparsia.pellet.owlapiv3.PelletReasoner; +import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.Literal; +import com.hp.hpl.jena.rdf.model.Property; +import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.rdf.model.Resource; +import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; +import com.jamonapi.Monitor; + +public class IncrementalInconsistencyFinder { + + private static Logger logger = Logger.getRootLogger(); + + private static final String ENDPOINT_URL = "http://dbpedia-live.openlinksw.com/sparql"; + private static String DEFAULT_GRAPH_URI = "http://dbpedia.org"; + private static String DBPEDIA_PREDICATE_FILTER = "!regex(?predicate, \"http://dbpedia.org/property\")"; + private static String DBPEDIA_SUBJECT_FILTER = "!regex(?subject, \"http://dbpedia.org/property\")"; + private static String OWL_THING_OBJECT_FILTER = "!regex(?object, \"http://www.w3.org/2002/07/owl#Thing\")"; +// private static final String ENDPOINT_URL = "http://localhost:8890/sparql"; +// private static String DEFAULT_GRAPH_URI = "http://opencyc2.org"; //(version 2.0) + + private static int RESULT_LIMIT = 100; + private static int OFFSET = 100; + private static int RECURSION_DEPTH = 100; + private static int AXIOM_COUNT = 100; + + //stop if algorithm founds unsatisfiable class or ontology is inconsistent + private static boolean BREAK_AFTER_ERROR_FOUND = true; + + private OWLOntology ontology; + private OWLOntologyManager manager; + private OWLDataFactory factory; + private OWLReasoner reasoner; + + private String endpointURI; + private String defaultGraphURI; + + private SPARQLProgressMonitor mon; + + private boolean consistent = true; + + private PelletExplanation expGen; + + private Monitor overallMonitor = JamonMonitorLogger.getTimeMonitor(ExtractionAlgorithm.class, "Overall monitor"); + private Monitor queryMonitor = JamonMonitorLogger.getTimeMonitor(ExtractionAlgorithm.class, "Query monitor"); + private Monitor reasonerMonitor = JamonMonitorLogger.getTimeMonitor(ExtractionAlgorithm.class, "Reasoning monitor"); + + public IncrementalInconsistencyFinder() throws OWLOntologyCreationException, IOException{ + manager = OWLManager.createOWLOntologyManager(); + ontology = manager.createOntology(); + factory = manager.getOWLDataFactory(); + + SimpleLayout layout = new SimpleLayout(); + ConsoleAppender consoleAppender = new ConsoleAppender(layout); +// DailyRollingFileAppender fileAppender = new DailyRollingFileAppender(layout, "log/incremental.log", "'.'yyyy-MM-dd_HH"); + logger.removeAllAppenders(); + logger.addAppender(consoleAppender); +// logger.addAppender(fileAppender); + logger.setLevel(Level.INFO); + + PelletOptions.USE_COMPLETION_QUEUE = true; + PelletOptions.USE_INCREMENTAL_CONSISTENCY = true; + PelletOptions.USE_SMART_RESTORE = false; + + } + + public void setProgressMonitor(SPARQLProgressMonitor mon){ + this.mon = mon; + } + + public void run(String endpointURI, String defaultGraphURI){ + this.endpointURI = endpointURI; + this.defaultGraphURI = defaultGraphURI; + logger.info("Searching for inconsistency in " + endpointURI); + + mon.setMessage("Searching..."); + + reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology); + + consistent = true; + + overallMonitor.reset(); + reasonerMonitor.reset(); + queryMonitor.reset(); + overallMonitor.start(); + + int disjointWithCount = getAxiomCountForPredicate(OWL.disjointWith); + int equivalentClassCount = getAxiomCountForPredicate(OWL.equivalentClass); + int subClassOfCount = getAxiomCountForPredicate(RDFS.subClassOf); + int domainCount = getAxiomCountForPredicate(RDFS.domain); + int rangeCount = getAxiomCountForPredicate(RDFS.range); + int subPropertyOfCount = getAxiomCountForPredicate(RDFS.subPropertyOf); + int equivalentPropertyCount = getAxiomCountForPredicate(OWL.equivalentProperty); + int inverseOfCount = getAxiomCountForPredicate(OWL.inverseOf); + int functionalCount = getAxiomCountForObject(OWL.FunctionalProperty); + int inverseFunctionalCount = getAxiomCountForObject(OWL.InverseFunctionalProperty); + int transitiveCount = getAxiomCountForObject(OWL.TransitiveProperty); + + + Set<OWLClass> visitedClasses = new HashSet<OWLClass>(); + Set<OWLNamedIndividual> visitedIndividuals = new HashSet<OWLNamedIndividual>(); + Set<OWLObject> visitedLinkedDataResources = new HashSet<OWLObject>(); + + Set<OWLAxiom> disjointAxioms = new HashSet<OWLAxiom>(); + Set<OWLAxiom> domainAxioms = new HashSet<OWLAxiom>(); + Set<OWLAxiom> rangeAxioms = new HashSet<OWLAxiom>(); + Set<OWLAxiom> subClassOfAxioms = new HashSet<OWLAxiom>(); + Set<OWLClassAssertionAxiom> classAssertionAxioms = new HashSet<OWLClassAssertionAxiom>(); + + boolean schemaComplete = false; + for(int i = 0; i <= RECURSION_DEPTH; i++){ + //first we expand the ontology schema + + //retrieve TBox axioms + if(ontology.getAxiomCount(AxiomType.DISJOINT_CLASSES) < disjointWithCount){ + disjointAxioms.addAll(retrieveClassExpressionsAxioms(OWL.disjointWith, AXIOM_COUNT, OFFSET * i)); + manager.addAxioms(ontology, disjointAxioms); + } + if(ontology.getAxiomCount(AxiomType.EQUIVALENT_CLASSES) < equivalentClassCount){ + manager.addAxioms(ontology, retrieveClassExpressionsAxioms(OWL.equivalentClass, AXIOM_COUNT, OFFSET * i)); + } + if(ontology.getAxiomCount(AxiomType.SUBCLASS_OF) < subClassOfCount){ + subClassOfAxioms.addAll(retrieveClassExpressionsAxioms(RDFS.subClassOf, AXIOM_COUNT, OFFSET * i)); + manager.addAxioms(ontology, subClassOfAxioms); + } + //retrieve RBox axioms + if(ontology.getAxiomCount(AxiomType.OBJECT_PROPERTY_DOMAIN) + ontology.getAxiomCount(AxiomType.DATA_PROPERTY_DOMAIN) < domainCount){ + domainAxioms.addAll(retrievePropertyAxioms(RDFS.domain, AXIOM_COUNT, OFFSET * i)); + manager.addAxioms(ontology, domainAxioms); + } + if(ontology.getAxiomCount(AxiomType.OBJECT_PROPERTY_RANGE) + ontology.getAxiomCount(AxiomType.DATA_PROPERTY_RANGE) < rangeCount){ + rangeAxioms.addAll(retrievePropertyAxioms(RDFS.range, AXIOM_COUNT, OFFSET * i)); + manager.addAxioms(ontology, rangeAxioms); + } + if(ontology.getAxiomCount(AxiomType.SUB_OBJECT_PROPERTY) + ontology.getAxiomCount(AxiomType.SUB_DATA_PROPERTY) < subPropertyOfCount){ + manager.addAxioms(ontology, retrievePropertyAxioms(RDFS.subPropertyOf, AXIOM_COUNT, OFFSET * i)); + } + if(ontology.getAxiomCount(AxiomType.EQUIVALENT_OBJECT_PROPERTIES) + ontology.getAxiomCount(AxiomType.EQUIVALENT_DATA_PROPERTIES) < equivalentPropertyCount){ + manager.addAxioms(ontology, retrievePropertyAxioms(OWL.equivalentProperty, AXIOM_COUNT, OFFSET * i)); + } + if(ontology.getAxiomCount(AxiomType.INVERSE_OBJECT_PROPERTIES) < inverseOfCount){ + manager.addAxioms(ontology, retrievePropertyAxioms(OWL.inverseOf, AXIOM_COUNT, OFFSET * i)); + } + if(ontology.getAxiomCount(AxiomType.FUNCTIONAL_OBJECT_PROPERTY) + ontology.getAxiomCount(AxiomType.FUNCTIONAL_DATA_PROPERTY) < functionalCount){ + manager.addAxioms(ontology, retrievePropertyCharacteristicAxioms(OWL.FunctionalProperty, AXIOM_COUNT, OFFSET * i)); + } + if(ontology.getAxiomCount(AxiomType.INVERSE_FUNCTIONAL_OBJECT_PROPERTY) < inverseFunctionalCount){ + manager.addAxioms(ontology, retrievePropertyCharacteristicAxioms(OWL.InverseFunctionalProperty, AXIOM_COUNT, OFFSET * i)); + } + if(ontology.getAxiomCount(AxiomType.TRANSITIVE_OBJECT_PROPERTY) < transitiveCount){ + manager.addAxioms(ontology, retrievePropertyCharacteristicAxioms(OWL.TransitiveProperty, AXIOM_COUNT, OFFSET * i)); + } + //removal due to find other inconsistencies not evolving this axiom +// manager.removeAxiom(ontology, factory.getOWLObjectPropertyRangeAxiom( +// factory.getOWLObjectProperty(IRI.create("http://dbpedia.org/ontology/artist")), +// factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Person")))); +// manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( +// factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Person")), +// factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Organisation")))); +// manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx4r16i50nS6EdaAAACgyZzFrg")), +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx4rCX1yJHS-EdaAAACgyZzFrg")))); +// manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx4r16i50nS6EdaAAACgyZzFrg")), +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx4r0y21PnS-EdaAAACgyZzFrg")))); +// manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx4r8LonGrboEduAAADggVbxzQ")), +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx8Ngh4rD2crlmAKQdmLOr88Soi59h4r8LonGrboEduAAADggVbxzQ")))); +// manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx4r8LonGrboEduAAADggVbxzQ")), +// factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx8Ngh4rD2crlmAKQdmLOr88Soi59h4r8LonGrboEduAAADggVbxzQ")))); + + for(OWLAxiom ax : disjointAxioms){ + //retrieve instances contained in both classes + manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClasses( + ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(0).asOWLClass(), + ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(1).asOWLClass(), AXIOM_COUNT)); + //retrieve instances contained in first class + manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( + ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(0).asOWLClass(), AXIOM_COUNT)); + //retrieve instances contained in second class + manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( + ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(1).asOWLClass(), AXIOM_COUNT)); + + } + if(!isConsistent()){ + break; + } + OWLClass domain; + for(OWLAxiom ax : domainAxioms){ + domain = ((OWLPropertyDomainAxiom<?>)ax).getDomain().asOWLClass(); + //retrieve instances for the domain class + manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( + domain, AXIOM_COUNT)); + //retrieve property assertions + if(ax instanceof OWLObjectPropertyDomainAxiom){ + manager.addAxioms(ontology, retrieveObjectPropertyAssertionAxioms(((OWLObjectPropertyDomainAxiom)ax).getProperty().asOWLObjectProperty(), AXIOM_COUNT)); + } else { + manager.addAxioms(ontology, retrieveDataPropertyAssertionAxioms(((OWLDataPropertyDomainAxiom)ax).getProperty().asOWLDataProperty(), AXIOM_COUNT)); + } + + } + if(!isConsistent()){ + break; + } + OWLClass range; + for(OWLAxiom ax : rangeAxioms){ + range = ((OWLObjectPropertyRangeAxiom)ax).getRange().asOWLClass(); + //retrieve instances for the range class + manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( + range, AXIOM_COUNT)); + //retrieve property assertions + manager.addAxioms(ontology, retrieveObjectPropertyAssertionAxioms(((OWLObjectPropertyRangeAxiom)ax).getProperty().asOWLObjectProperty(), AXIOM_COUNT)); + + } + if(!isConsistent()){ + break; + } + //retrieve ClassAssertion axioms for each new class + for(OWLAxiom ax : subClassOfAxioms){ + for(OWLClass cls : ax.getClassesInSignature()){ + if(visitedClasses.contains(cls)){ + continue; + } + classAssertionAxioms.addAll(retrieveClassAssertionAxiomsForClass(cls, 50)); + visitedClasses.add(cls); + } + if(!isConsistent()){ + break; + } + } + manager.addAxioms(ontology, classAssertionAxioms); + + //for each individual in the ClassAssertion axioms found above, we retrieve further informations + for(OWLClassAssertionAxiom ax : classAssertionAxioms){ + if(visitedIndividuals.contains(ax.getIndividual().asOWLNamedIndividual())){ + continue; + } + manager.addAxioms(ontology, retrieveAxiomsForIndividual(ax.getIndividual().asOWLNamedIndividual(), 1000)); + visitedIndividuals.add(ax.getIndividual().asOWLNamedIndividual()); + reasonerMonitor.start(); + if(!isConsistent()){ + break; + } + } + if(!isConsistent()){ + break; + } + for(OWLClass cls : ontology.getClassesInSignature()){ + if(cls.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(cls)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(cls.getIRI())); + visitedLinkedDataResources.add(cls); + } + } + if(!isConsistent()){ + break; + } + for(OWLObjectProperty prop : ontology.getObjectPropertiesInSignature()){ + if(prop.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + visitedLinkedDataResources.add(prop); + } + } + if(!isConsistent()){ + break; + } + for(OWLDataProperty prop : ontology.getDataPropertiesInSignature()){ + if(prop.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + visitedLinkedDataResources.add(prop); + } + } + if(!isConsistent()){ + break; + } + + + + disjointAxioms.clear(); + domainAxioms.clear(); + rangeAxioms.clear(); + subClassOfAxioms.clear(); + classAssertionAxioms.clear(); + } + + overallMonitor.stop(); + //show some statistics + showStats(); + + logger.info("Ontology is consistent: " + reasoner.isConsistent()); +// ((PelletReasoner)reasoner).getKB().setDoExplanation(true); +// for(ATermAppl a : ((PelletReasoner)reasoner).getKB().getExplanationSet()){ +// System.err.println(a); +// } + System.out.println(expGen.getInconsistencyExplanation()); +// for(Set<OWLAxiom> exp : expGen.getInconsistencyExplanations()){ +// for(OWLAxiom ax : exp){ +// System.out.println(ax); +// for(OWLClass cls : ax.getClassesInSignature()){ +// System.out.println(cls + " = " + getLabel(cls.toStringID())); +// } +// for(OWLObjectProperty prop : ax.getObjectPropertiesInSignature()){ +// System.out.println(prop + " = " + getLabel(prop.toStringID())); +// } +// for(OWLNamedIndividual ind : ax.getIndividualsInSignature()){ +// System.out.println(ind + " = " + getLabel(ind.toStringID())); +// } +// for(OWLDataProperty prop : ax.getDataPropertiesInSignature()){ +// System.out.println(prop + " = " + getLabel(prop.toStringID())); +// } +// } +// +// } + try { + ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); + PrintWriter out = new PrintWriter( System.out ); + renderer.startRendering( out ); + renderer.render(expGen.getInconsistencyExplanations()); + renderer.endRendering(); + } catch (UnsupportedOperationException e) { + e.printStackTrace(); + } catch (OWLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + private boolean isConsistent(){ + reasonerMonitor.start(); + if(!consistent || !reasoner.isConsistent()){ + System.out.println("EXPLANATION: " + expGen.getInconsistencyExplanation()); + mon.inconsistencyFound(expGen.getInconsistencyExplanation()); + consistent = false; + } + reasonerMonitor.stop(); + return consistent; + } + + public OWLOntology getOntology(){ + return ontology; + } + + /** + * THis method checks incrementally for unsatisfiable classes in the knowledgebase. + * @param endpointURI + */ + private void checkForUnsatisfiableClasses(String endpointURI){ + this.endpointURI = endpointURI; + logger.info("Searching for unsatisfiable classes in " + endpointURI); + +// reasoner = PelletIncremantalReasonerFactory.getInstance().createReasoner(ontology); + ReasonerFactory reasonerFactory = new ReasonerFactory(); + reasoner = reasonerFactory.createNonBufferingReasoner(ontology); + + overallMonitor.reset(); + reasonerMonitor.reset(); + queryMonitor.reset(); + overallMonitor.start(); + + + Set<OWLClass> visitedClasses = new HashSet<OWLClass>(); + Set<OWLClass> classesToVisit = new HashSet<OWLClass>(); + Set<OWLClass> tmp = new HashSet<OWLClass>(); + + //we are starting with disjointClasses axioms + Set<OWLDisjointClassesAxiom> disjointAxioms = retrieveDisjointClassAxioms(); + manager.addAxioms(ontology, disjointAxioms); + + for(OWLDisjointClassesAxiom ax : disjointAxioms){ + for(OWLClassExpression cl : ax.getClassExpressions()){ + if(!cl.isAnonymous()){ + classesToVisit.add(cl.asOWLClass()); + } + } + } + boolean foundUnsatisfiableClasses = false; + Set<OWLClass> unsatClasses; + logger.info("Starting with " + classesToVisit.size() + " classes to visit."); + for(int i = 1; i <= RECURSION_DEPTH; i++){ + logger.info("Recursion depth = " + i); + for(OWLClass cl : classesToVisit){ + logger.info("Starting retrieving axioms for class " + cl); + Set<OWLAxiom> axioms = retrieveAxiomsForClass(cl, false); +// Set<OWLAxiom> axioms = retrieveAxiomsForClassSingleQuery(cl, false); + manager.addAxioms(ontology, axioms); +// if(!axioms.isEmpty()){ +// logger.info("Checking for unsatisfiable classes"); +// reasonerMonitor.start(); +// unsatClasses = reasoner.getUnsatisfiableClasses().getEntities(); +// foundUnsatisfiableClasses = !unsatClasses.isEmpty(); +// logger.info("Found " + unsatClasses.size() + " unsatisfiable classes"); +// reasonerMonitor.stop(); +// +// } + for(OWLAxiom ax : axioms){ + tmp.addAll(ax.getClassesInSignature()); + } + if(foundUnsatisfiableClasses && BREAK_AFTER_ERROR_FOUND){ + logger.info("Found unsatisfiable classes. Aborting."); + break; + } + } + if(foundUnsatisfiableClasses && BREAK_AFTER_ERROR_FOUND){ + break; + } + visitedClasses.addAll(classesToVisit); + tmp.removeAll(visitedClasses); + classesToVisit.clear(); + classesToVisit.addAll(tmp); + tmp.clear(); + } + + + overallMonitor.stop(); + showStats(); + + Node<OWLClass> unsatisfiableClasses = reasoner.getUnsatisfiableClasses(); + logger.info("Found " + unsatisfiableClasses.getSize() + " unsatisfiable class(es):"); + logger.info(unsatisfiableClasses.getEntities()); + if(!unsatisfiableClasses.getEntities().isEmpty()){ + BlackBoxExplanation expGen = new BlackBoxExplanation(ontology, reasonerFactory, reasoner); + for(OWLClass cls : unsatisfiableClasses){ + System.err.println(cls); + System.out.println(expGen.getExplanation(cls)); + } + + } + + + } + + /** + * This method checks incrementally the consistency of the knowledgebase. + * @param endpointURI + */ + private void checkForInconsistency(String endpointURI){ + this.endpointURI = endpointURI; + logger.info("Searching for inconsistency in " + endpointURI); + + PelletOptions.USE_COMPLETION_QUEUE = true; + PelletOptions.USE_INCREMENTAL_CONSISTENCY = true; + PelletOptions.USE_SMART_RESTORE = false; + + OWLReasoner reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology); + + overallMonitor.reset(); + reasonerMonitor.reset(); + queryMonitor.reset(); + overallMonitor.start(); + + Set<OWLClass> visitedClasses = new HashSet<OWLClass>(); + Set<OWLObjectProperty> visitedObjectProperties = new HashSet<OWLObjectProperty>(); + Set<OWLNamedIndividual> visitedIndividuals = new HashSet<OWLNamedIndividual>(); + Set<OWLClass> classesToVisit = new HashSet<OWLClass>(); + Set<OWLClass> tmp = new HashSet<OWLClass>(); + + //we are starting with disjointClasses axioms + Set<OWLDisjointClassesAxiom> disjointAxioms = retrieveDisjointClassAxioms(); + manager.addAxioms(ontology, disjointAxioms); + + for(OWLDisjointClassesAxiom ax : disjointAxioms){ + for(OWLClassExpression cl : ax.getClassExpressions()){ + if(!cl.isAnonymous()){ + classesToVisit.add(cl.asOWLClass()); + } + } + } + boolean isConsistent = true; + Set<OWLAxiom> axioms; + logger.info("Starting with " + classesToVisit.size() + " classes to visit."); + for(int i = 1; i <= RECURSION_DEPTH; i++){ + logger.info("Recursion depth = " + i); + //we retrieve axioms for each class + for(OWLClass cl : classesToVisit){ + axioms = retrieveAxiomsForClass(cl, RESULT_LIMIT); + manager.addAxioms(ontology, axioms); + System.out.println(ontology.getObjectPropertiesInSignature()); + if(!axioms.isEmpty()){ + logger.info("Checking for consistency"); + reasonerMonitor.start(); + isConsistent = reasoner.isConsistent(); + reasonerMonitor.stop(); + + } + for(OWLAxiom ax : axioms){ + tmp.addAll(ax.getClassesInSignature()); + } + if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ + logger.info("Detected inconsistency. Aborting."); + break; + } + + } + if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ + break; + } + //we retrieve axioms for each individual in the ontology + logger.info("Retrieving axioms for " + ontology.getIndividualsInSignature().size() + " instances"); + int cnt = 0; + for(OWLNamedIndividual ind : ontology.getIndividualsInSignature()){ + if(!visitedIndividuals.contains(ind)){ + manager.addAxioms(ontology, retrieveAxiomsForIndividual(ind, RESULT_LIMIT)); + visitedIndividuals.add(ind); + logger.info("Checking for consistency"); + reasonerMonitor.start(); + isConsistent = reasoner.isConsistent(); + reasonerMonitor.stop(); + } + if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ + logger.info("Detected inconsistency. Aborting."); + break; + } + cnt++; + if(cnt == 100){ + break; + } + + } + if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ + break; + } + cnt = 0; + //we retrieve axioms for each object property in the ontology + logger.info("Retrieving axioms for " + ontology.getObjectPropertiesInSignature().size() + " properties"); + for(OWLObjectProperty prop : ontology.getObjectPropertiesInSignature()){ + if(!visitedObjectProperties.contains(prop)){ + manager.addAxioms(ontology, retrieveAxiomsForObjectProperty(prop, RESULT_LIMIT)); + visitedObjectProperties.add(prop); + logger.info("Checking for consistency"); + reasonerMonitor.start(); + isConsistent = reasoner.isConsistent(); + reasonerMonitor.stop(); + } + if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ + logger.info("Detected inconsistency. Aborting."); + break; + } + cnt++; + if(cnt == 100){ + break; + } + + } + if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ + break; + } + visitedClasses.addAll(classesToVisit); + tmp.removeAll(visitedClasses); + classesToVisit.clear(); + classesToVisit.addAll(tmp); + tmp.clear(); + } + + overallMonitor.stop(); + //show some statistics + showStats(); + + //compute an explanation + if(!reasoner.isConsistent()){ + ((PelletReasoner)reasoner).getKB().setDoExplanation(true); +// ExplanationGenerator expGen = new PelletExplanationGenerator(ontology); +// logger.info(expGen.getExplanation(factory.getOWLSubClassOfAxiom(factory.getOWLThing(), factory.getOWLNothing()))); + for(ATermAppl a : ((PelletReasoner)reasoner).getKB().getExplanationSet()){ + System.out.println(a); + } + } + } + + private int getAxiomCountForPredicate(Property predicate){ + StringBuilder sb = new StringBuilder(); + sb.append("SELECT COUNT(*) WHERE {"); + sb.append("?subject ").append("<").append(predicate).append(">").append(" ?object."); +// sb.append("FILTER ").append("(").append(DBPEDIA_SUBJECT_FILTER).append(")"); + sb.append("}"); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + return sparqlResults.nextSolution().getLiteral("?callret-0").getInt(); + } + + private int getAxiomCountForObject(Resource resource){ + StringBuilder sb = new StringBuilder(); + sb.append("SELECT COUNT(*) WHERE {"); + sb.append("?subject ").append("?predicate ").append("<").append(resource).append(">."); + sb.append("FILTER ").append("(").append(DBPEDIA_SUBJECT_FILTER).append(")"); + sb.append("}"); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + return sparqlResults.nextSolution().getLiteral("?callret-0").getInt(); + } + + private Set<OWLAxiom> retrieveClassExpressionsAxioms(Property property, int limit, int offset){ + logger.info("Retrieving " + property + " axioms"); + mon.setMessage("Retrieving " + property.getLocalName() + " axioms"); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(property).append(">").append(" ?object."); + sb.append("FILTER ").append("(").append(DBPEDIA_SUBJECT_FILTER).append(")"); + sb.append("}"); + sb.append(" ORDER BY ").append("?subject"); + sb.append(" LIMIT ").append(limit); + sb.append(" OFFSET ").append(offset); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodeObject; + OWLClass cls1; + OWLClass cls2; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + rdfNodeObject = solution.getResource("?object"); + + //skip if solution contains blank node + if(rdfNodeSubject.isAnon() || rdfNodeObject.isAnon()){ + continue; + } + + cls1 = factory.getOWLClass(IRI.create(rdfNodeSubject.toString())); + cls2 = factory.getOWLClass(IRI.create(rdfNodeObject.toString())); + + if(property.equals(RDFS.subClassOf)){ + axioms.add(factory.getOWLSubClassOfAxiom(cls1, cls2)); + } else if(property.equals(OWL.disjointWith)){ + axioms.add(factory.getOWLDisjointClassesAxiom(cls1, cls2)); + } else if(property.equals(OWL.equivalentClass)){ + axioms.add(factory.getOWLEquivalentClassesAxiom(cls1, cls2)); + } + + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLAxiom> retrievePropertyAxioms(Property property, int limit, int offset){ + logger.info("Retrieving " + property + " axioms"); + mon.setMessage("Retrieving " + property.getLocalName() + " axioms"); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(property).append(">").append(" ?object."); + sb.append("FILTER ").append("(").append(DBPEDIA_SUBJECT_FILTER).append(")"); + sb.append("}"); + sb.append(" ORDER BY ").append("?subject"); + sb.append(" LIMIT ").append(limit); + sb.append(" OFFSET ").append(offset); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodeObject; + boolean isObjectProperty = true; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + rdfNodeObject = solution.getResource("?object"); + + //skip if solution contains blank node + if(rdfNodeSubject.isAnon() || rdfNodeObject.isAnon()){ + continue; + } + + if(property.equals(OWL.inverseOf)){ + axioms.add(factory.getOWLInverseObjectPropertiesAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLObjectProperty(IRI.create(rdfNodeObject.toString())))); + } else if(property.equals(OWL.equivalentProperty)){ + isObjectProperty = isObjectProperty(rdfNodeSubject.toString()); + if(isObjectProperty){ + axioms.add(factory.getOWLEquivalentObjectPropertiesAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLObjectProperty(IRI.create(rdfNodeObject.toString())))); + } else { + axioms.add(factory.getOWLEquivalentDataPropertiesAxiom( + factory.getOWLDataProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLDataProperty(IRI.create(rdfNodeObject.toString())))); + } + } else if(property.equals(RDFS.subPropertyOf)){ + isObjectProperty = isObjectProperty(rdfNodeSubject.toString()); + if(isObjectProperty){ + axioms.add(factory.getOWLSubObjectPropertyOfAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLObjectProperty(IRI.create(rdfNodeObject.toString())))); + } else { + axioms.add(factory.getOWLSubDataPropertyOfAxiom( + factory.getOWLDataProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLDataProperty(IRI.create(rdfNodeObject.toString())))); + } + } else if(property.equals(RDFS.domain)){ + isObjectProperty = isObjectProperty(rdfNodeSubject.toString()); + if(isObjectProperty){ + axioms.add(factory.getOWLObjectPropertyDomainAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); + } else { + axioms.add(factory.getOWLDataPropertyDomainAxiom( + factory.getOWLDataProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); + } + } else if(property.equals(RDFS.range)){ + isObjectProperty = isObjectProperty(rdfNodeSubject.toString()); + if(isObjectProperty){ + axioms.add(factory.getOWLObjectPropertyRangeAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())), + factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); + } else { + //TODO + } + } + + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLAxiom> retrievePropertyCharacteristicAxioms(Resource characteristic, int limit, int offset){ + logger.info("Retrieving " + characteristic + " axioms"); + mon.setMessage("Retrieving " + characteristic.getLocalName() + " axioms"); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(RDF.type).append("> ").append("<").append(characteristic).append(">."); + sb.append("FILTER ").append("(").append(DBPEDIA_SUBJECT_FILTER).append(")"); + sb.append("}"); + sb.append(" ORDER BY ").append("?subject"); + sb.append(" LIMIT ").append(limit); + sb.append(" OFFSET ").append(offset); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + boolean isObjectProperty = true; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + + //skip if solution contains blank node + if(rdfNodeSubject.isAnon()){ + continue; + } + + if(characteristic.equals(OWL.FunctionalProperty)){ + isObjectProperty = isObjectProperty(rdfNodeSubject.toString()); + if(isObjectProperty){ + axioms.add(factory.getOWLFunctionalObjectPropertyAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())))); + } else { + axioms.add(factory.getOWLFunctionalDataPropertyAxiom( + factory.getOWLDataProperty(IRI.create(rdfNodeSubject.toString())))); + } + } else if(characteristic.equals(OWL.TransitiveProperty)){ + axioms.add(factory.getOWLTransitiveObjectPropertyAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())))); + } else if(characteristic.equals(OWL.InverseFunctionalProperty)){ + axioms.add(factory.getOWLInverseFunctionalObjectPropertyAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())))); + } + + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLClassAssertionAxiom> retrieveClassAssertionAxioms(int limit, int offset){ + logger.info("Retrieving ClassAssertionAxioms axioms"); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(RDF.type).append("> ").append("?object."); + sb.append("FILTER ").append("(").append(DBPEDIA_SUBJECT_FILTER).append(")"); + sb.append("}"); + sb.append(" ORDER BY ").append("?subject"); + sb.append(" LIMIT ").append(limit); + sb.append(" OFFSET ").append(offset); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLClassAssertionAxiom> axioms = new HashSet<OWLClassAssertionAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodeObject; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + rdfNodeObject = solution.getResource("?object"); + + //skip if solution contains blank node + if(rdfNodeSubject.isAnon() || rdfNodeObject.isAnon()){ + continue; + } + + //TODO filter classes like owl:TransitiveProperty, owl:Class, rdf:Property + axioms.add(factory.getOWLClassAssertionAxiom( + factory.getOWLClass(IRI.create(rdfNodeObject.toString())), + factory.getOWLNamedIndividual(IRI.create(rdfNodeSubject.toString())))); + + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private boolean isObjectProperty(String propertyURI){ + if(ontology.getObjectPropertiesInSignature().contains(factory.getOWLObjectProperty(IRI.create(propertyURI)))){ + return true; + } + if(ontology.getDataPropertiesInSignature().contains(factory.getOWLDataProperty(IRI.create(propertyURI)))){ + return false; + } + logger.info("Checking if property " + propertyURI + " is ObjectProperty"); + queryMonitor.start(); + + //first check if triple ($prop rdf:type owl:ObjectProperty) is in the knowledgebase + StringBuilder sb = new StringBuilder(); + sb.append("ASK {"); + sb.append("<").append(propertyURI).append("> ").append("<").append(RDF.type).append("> ").append("<").append(OWL.ObjectProperty).append(">"); + sb.append("}"); + Query query = QueryFactory.create(sb.toString()); + QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + if(sparqlQueryExec.execAsk()){ + logger.info("YES"); + return true; + } + + //we check if triple ($prop rdf:type owl:DaatProperty) is in the knowledgebase + sb = new StringBuilder(); + sb.append("ASK {"); + sb.append("<").append(propertyURI).append("> ").append("<").append(RDF.type).append("> ").append("<").append(OWL.DatatypeProperty).append(">"); + sb.append("}"); + query = QueryFactory.create(sb.toString()); + sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + if(sparqlQueryExec.execAsk()){ + logger.info("NO"); + return false; + } + + //we check for one triple, and decide if object is an literal + sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(propertyURI).append("> ").append("?object"); + sb.append("}"); + sb.append("LIMIT 1"); + query = QueryFactory.create(sb.toString()); + sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + ResultSet results = sparqlQueryExec.execSelect(); + + boolean isObjectProperty = true; + while(results.hasNext()){ + QuerySolution solution = results.nextSolution(); + + RDFNode rdfNodeSubject = solution.get("?object"); + isObjectProperty = !rdfNodeSubject.isLiteral(); + } + queryMonitor.stop(); + logger.info((isObjectProperty ? "YES" : "NO")); + return isObjectProperty; + } + + private Set<OWLClassAssertionAxiom> retrieveClassAssertionAxiomsForClasses(OWLClass cls1, OWLClass cls2, int limit){ + logger.info("Retrieving ClassAssertion axioms for class " + cls1 + " and " + cls2); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(RDF.type).append("> ").append("<").append(cls1.toStringID()).append(">."); + sb.append("?subject ").append("<").append(RDF.type).append("> ").append("<").append(cls2.toStringID()).append(">."); + sb.append("}"); + sb.append(" LIMIT ").append(limit); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLClassAssertionAxiom> axioms = new HashSet<OWLClassAssertionAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + OWLNamedIndividual individual; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + + individual = factory.getOWLNamedIndividual(IRI.create(rdfNodeSubject.toString())); + + axioms.add(factory.getOWLClassAssertionAxiom(cls1, individual)); + axioms.add(factory.getOWLClassAssertionAxiom(cls2, individual)); + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLAxiom> retrieveObjectPropertyAssertionAxioms(OWLObjectProperty prop, int limit){ + logger.info("Retrieving ObjectPropertyAssertion axioms for property " + prop); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(prop.toStringID()).append("> ").append("?object"); + sb.append("}"); + sb.append(" LIMIT ").append(limit); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodeObject; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + if(solution.get("?object").isLiteral()){ + continue; + } + + rdfNodeSubject = solution.getResource("?subject"); + rdfNodeObject = solution.getResource("?object"); + + axioms.add(factory.getOWLObjectPropertyAssertionAxiom( + prop, + factory.getOWLNamedIndividual(IRI.create(rdfNodeSubject.toString())), + factory.getOWLNamedIndividual(IRI.create(rdfNodeObject.toString())))); + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLAxiom> retrieveDataPropertyAssertionAxioms(OWLDataProperty prop, int limit){ + logger.info("Retrieving DataPropertyAssertion axioms for property " + prop); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(prop.toStringID()).append("> ").append("?object"); + sb.append("}"); + sb.append(" LIMIT ").append(limit); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + Literal object; + OWLLiteral literal; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + if(solution.get("?object").isResource()){ + continue; + } + + rdfNodeSubject = solution.getResource("?subject"); + object = solution.getLiteral("?object"); + + if(object.getDatatype() != null){ + if(object.getDatatype().equals(XSD.DOUBLE)){ + literal = factory.getOWLTypedLiteral(object.getDouble()); + } else if(object.getDatatype().equals(XSD.INT)){ + literal = factory.getOWLTypedLiteral(object.getInt()); + } else if(object.getDatatype().equals(XSD.FLOAT)){ + literal = factory.getOWLTypedLiteral(object.getFloat()); + } else if(object.getDatatype().equals(XSD.BOOLEAN)){ + literal = factory.getOWLTypedLiteral(object.getBoolean()); + } else if(object.getDatatype().equals(XSD.STRING)){ + literal = factory.getOWLTypedLiteral(object.getString()); + } else { + //TODO +// literal = factory.getOWLTypedLiteral(object.getString(), +// factory.getOWLDatatype(IRI.create(object.getDatatype().getURI()))); + literal = factory.getOWLStringLiteral(object.getString()); + } + } else { + literal = factory.getOWLStringLiteral(object.getString()); + } + axioms.add(factory.getOWLDataPropertyAssertionAxiom( + prop, + factory.getOWLNamedIndividual(IRI.create(rdfNodeSubject.toString())), + literal)); + + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLClassAssertionAxiom> retrieveClassAssertionAxiomsForClass(OWLClass cls, int limit){ + logger.info("Retrieving ClassAssertion axioms for class " + cls); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(RDF.type).append("> ").append("<").append(cls.toStringID()).append(">."); + sb.append("}"); + sb.append(" ORDER BY ").append("?subject"); + sb.append(" LIMIT ").append(limit); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLClassAssertionAxiom> axioms = new HashSet<OWLClassAssertionAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + OWLNamedIndividual individual; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + + individual = factory.getOWLNamedIndividual(IRI.create(rdfNodeSubject.toString())); + + axioms.add(factory.getOWLClassAssertionAxiom(cls, individual)); + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLDisjointClassesAxiom> retrieveDisjointClassAxioms(){ + logger.info("Retrieving disjointClasses axioms"); + mon.setMessage("Retrieving disjointClasses axioms"); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(OWL.disjointWith).append(">").append(" ?object"); + sb.append("}"); + sb.append("LIMIT ").append(RESULT_LIMIT); + + Query query = QueryFactory.create(sb.toString()); + QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLDisjointClassesAxiom> axioms = new HashSet<OWLDisjointClassesAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodeObject; + OWLClass disjointClass1; + OWLClass disjointClass2; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + rdfNodeObject = solution.getResource("?object"); + + //skip if solution contains blank node + if(rdfNodeSubject.isAnon() || rdfNodeObject.isAnon()){ + continue; + } + + disjointClass1 = factory.getOWLClass(IRI.create(rdfNodeSubject.toString())); + disjointClass2 = factory.getOWLClass(IRI.create(rdfNodeObject.toString())); + + axioms.add(factory.getOWLDisjointClassesAxiom(disjointClass1, disjointClass2)); + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLClassAssertionAxiom> retrievePropertyAssertionAxiomsWithFunctionalProperty(int limit){ + queryMonitor.start(); + StringBuilder sb = new StringBuilder(); + sb.append("SELECT ?s, ?p, COUNT(?o) WHERE {"); + sb.append("?p").append("<").append(RDF.type).append("> ").append("<").append(OWL.FunctionalProperty).append(">."); + sb.append("?s ?p ?o."); + sb.append("}"); + sb.append(" HAVING COUNT(?o)>1"); + sb.append(" LIMIT ").append(limit); + + QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); + sparqlQueryExec.addDefaultGraph(defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLClassAssertionAxiom> axioms = new HashSet<OWLClassAssertionAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodePredicate; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?s"); + rdfNodePredicate = solution.getResource("?p"); + + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + private Set<OWLAxiom> retrieveSubClassAxioms(){ + logger.info("Retrieving SubClassOf axioms"); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("?subject ").append("<").append(RDFS.subClassOf).append(">").append(" ?object"); + sb.append("}"); + sb.append("LIMIT ").append(RESULT_LIMIT); + + Query query = QueryFactory.create(sb.toString()); + QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + ResultSet sparqlResults = sparqlQueryExec.execSelect(); + + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodeObject; + OWLClass subClass; + OWLClass superClass; + while(sparqlResults.hasNext()){ + solution = sparqlResults.nextSolution(); + + rdfNodeSubject = solution.getResource("?subject"); + rdfNodeObject = solution.getResource("?object"); + + //skip if solution contains blank node + if(rdfNodeSubject.isAnon() || rdfNodeObject.isAnon()){ + continue; + } + + subClass = factory.getOWLClass(IRI.create(rdfNodeSubject.toString())); + superClass = factory.getOWLClass(IRI.create(rdfNodeObject.toString())); + + axioms.add(factory.getOWLSubClassOfAxiom(subClass, superClass)); + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + /** + * Get axioms for a given class. + * Axiom types: SubClassOf, EquivalentClass, ClassAssertion + * + * @param cl + * @return + */ + private Set<OWLAxiom> retrieveAxiomsForClass(OWLClass cl, int limit){ + logger.info("Retrieving axioms for class " + cl); + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("{<").append(cl.toStringID()).append("> ").append("?predicate").append(" ?object.}"); + sb.append(" UNION "); + sb.append("{?subject").append("?predicate").append(" <").append(cl.toStringID()).append("> }"); + sb.append("}"); + sb.append("LIMIT ").append(limit); + + Query query = QueryFactory.create(sb.toString()); + QueryExecution queryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + ResultSet results = queryExec.execSelect(); + QuerySolution solution; + RDFNode rdfNodeSubject; + RDFNode rdfNodePredicate; + RDFNode rdfNodeObject; + while(results.hasNext()){ + solution = results.nextSolution(); + if(solution.get("?object") != null){ + rdfNodePredicate = solution.getResource("?predicate"); + rdfNodeObject = solution.get("?object"); + //skip if object is a blank node + if(rdfNodeObject.isAnon()){ + continue; + } + if(rdfNodePredicate.equals(RDFS.subClassOf)){ + axioms.add(factory.getOWLSubClassOfAxiom(cl, factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); + } else if(rdfNodePredicate.equals(OWL.equivalentClass)){ + axioms.add(factory.getOWLEquivalentClassesAxiom(cl, factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); + } + } else if(solution.get("?subject") != null){ + rdfNodePredicate = solution.getResource("?predicate"); + rdfNodeSubject = solution.get("?subject"); + //skip if subject is a blank node + if(rdfNodeSubject.isAnon()){ + continue; + } + if(rdfNodePredicate.equals(RDF.type)){ + axioms.add(factory.getOWLClassAssertionAxiom(cl, factory.getOWLNamedIndividual(IRI.create(rdfNodeSubject.toString())))); + } else if(rdfNodePredicate.equals(RDFS.subClassOf)){ + axioms.add(factory.getOWLSubClassOfAxiom(factory.getOWLClass(IRI.create(rdfNodeSubject.toString())), cl)); + } + } + + + }System.out.println(axioms); + if(axioms.isEmpty()){ + axioms.addAll(getAxiomsFromLinkedDataSource(cl.getIRI())); + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + /** + * Get axioms for a given ObjectProperty. + * Axiom types: TransitiveProperty, FunctionalProperty, InverseFunctionalProperty, SymmetricProperty, EquivalentProperty, + * SubProperty, InverseOf, Domain, Range + * + * @param prop + * @return + */ + private Set<OWLAxiom> retrieveAxiomsForObjectProperty(OWLObjectProperty prop, int limit){ + logger.info("Retrieving axioms for property " + prop); + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("<").append(prop.toStringID()).append("> ").append("?predicate").append(" ?object.}"); + sb.append("LIMIT ").append(limit); + + Query query = QueryFactory.create(sb.toString()); + QueryExecution queryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + ResultSet results = queryExec.execSelect(); + QuerySolution solution; + RDFNode rdfNodePredicate; + RDFNode rdfNodeObject; + while(results.hasNext()){ + solution = results.nextSolution(); + rdfNodePredicate = solution.getResource("?predicate"); + rdfNodeObject = solution.get("?object"); + //skip if object is a blank node + if(rdfNodeObject.isAnon()){ + continue; + } + if(rdfNodePredicate.equals(RDF.type)){ + if(rdfNodeObject.equals(OWL.TransitiveProperty)){ + axioms.add(factory.getOWLTransitiveObjectPropertyAxiom(prop)); + } else if(rdfNodeObject.equals(OWL.FunctionalProperty)){ + axioms.add(factory.getOWLFunctionalObjectPropertyAxiom(prop)); + } else if(rdfNodeObject.equals(OWL.InverseFunctionalProperty)){ + axioms.add(factory.getOWLInverseFunctionalObjectPropertyAxiom(prop)); + } else if(rdfNodeObject.equals(OWL.SymmetricProperty)){ + axioms.add(factory.getOWLSymmetricObjectPropertyAxiom(prop)); + } + } else if(rdfNodePredicate.equals(RDFS.subPropertyOf)){ + axioms.add(factory.getOWLSubObjectPropertyOfAxiom(prop, + factory.getOWLObjectProperty(IRI.create(rdfNodeObject.toString())))); + } else if(rdfNodePredicate.equals(OWL.inverseOf)){ + axioms.add(factory.getOWLInverseObjectPropertiesAxiom(prop, + factory.getOWLObjectProperty(IRI.create(rdfNodeObject.toString())))); + } else if(rdfNodePredicate.equals(RDFS.domain)){ + axioms.add(factory.getOWLObjectPropertyDomainAxiom(prop, + factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); + } else if(rdfNodePredicate.equals(RDFS.range)){ + axioms.add(factory.getOWLObjectPropertyRangeAxiom(prop, + factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); + } else if(rdfNodePredicate.equals(OWL.equivalentProperty)){ + axioms.add(factory.getOWLEquivalentObjectPropertiesAxiom(prop, + factory.getOWLObjectProperty(IRI.create(rdfNodeObject.toString())))); + } + + } + if(axioms.isEmpty()){ + axioms.addAll(getAxiomsFromLinkedDataSource(prop.getIRI())); + } + queryMonitor.stop(); + logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); + return axioms; + } + + /** + * Retrieve axioms for a given individual. + * Axiom types: SameAs, DifferentFrom, ClassAssertion, ObjectPropertyAssertion, DataPropertyAssertion + * @param ind + * @return + */ + private Set<OWLAxiom> retrieveAxiomsForIndividual(OWLNamedIndividual ind, int limit){ + logger.info("Retrieving axioms for individual " + ind); + Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); + queryMonitor.start(); + + StringBuilder sb = new StringBuilder(); + sb.append("SELECT * WHERE {"); + sb.append("<").append(ind.toStringID()).append("> ").append("?predicate").append(" ?object."); + sb.append("FILTER ").append("(").append(DBPEDIA_PREDICATE_FILTER).append(" && ").append(OWL_THING_OBJECT_FILTER).append(")"); + sb.append("}"); + sb.append(" LIMIT ").append(limit); + + Query query = QueryFactory.create(sb.toString()); + QueryExecution queryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); + ResultSet results = queryExec.execSelect(); + QuerySolution solution; + RDFNode rdfNodePredicate; + RDFNode rdfNodeObject; + OWLLiteral literal; + while(results.hasNext()){ + solution = results.nextSolution(); + rdfNodePredicate = solution.getResource("?predicate"); + rdfNodeObject = solution.get("?object"); + //skip if object is a blank node + if(rdfNodeObject.isAnon()){ + continue; + } + if(rdfNodePredicate.equals(RDF.type)){ + axioms.add(factory.getOWLClassAssertionAxiom(factory.getOWLClass(IRI.create(rdfNodeObject.toString())), ind)); + } else if(rdfNodePredicate.equals(OWL.sameAs)){ + axioms.add(factory.getOWLSameIndividualAxiom(ind, factory.getOWLNamedIndividual(IRI.create(rdfNodeObject.toString())))); + } else if(rdfNodePredicate.equals(OWL.differentFrom)){ + axioms.add(factory.getOWLDifferentIndividualsAxiom(ind, factory.getOWLNamedIndividual(IRI.create(rdfNodeObject.toString())))); + } else if(rdfNodePredicate.equals(RDFS.comment)){ + continue; + } else if(rdfNodePredicate.equals(RDFS.label)){ + continue; + } else { + // we check if property is a DataProperty or ObjectProperty + if(isObjectProperty(rdfNodePredicate.toString())){ + // for ObjectProperties we skip assertions with literals + if(rdfNodeObject.isLiteral()){ + continue; + } + axioms.add(factory.getOWLObjectPropertyAssertionAxiom( + factory.getOWLObjectProperty(IRI.create(rdfNodePredicate.toString())), + ind, + factory.getOWLNamedIndividual(IRI.create(rdfNodeObject.toString())))); + } else { + // for DataProperties we skip assertions with literals + if(!rdfNodeObject.isLiteral()){ + continue; + } + if(rdfNodeObject.equals(RDFS.comment)){ + + } else if(rdfNodeObject.equals(RDFS.label)){ + + } else { + if(((Literal)rdfNodeObject).getDatatype() != null){ + if(((Literal)rdfNodeObject).getDatatype().equals(XSD.DOUBLE)){ + literal = factory.getOWLTypedLiteral(((Literal)rdfNodeObject).getDouble()); + } else if(((Literal)rdfNodeObject).getDatatype().equals(XSD.INT)){ + ... [truncated message content] |
From: <lor...@us...> - 2010-07-17 15:26:48
|
Revision: 2205 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2205&view=rev Author: lorenz_b Date: 2010-07-17 15:26:41 +0000 (Sat, 17 Jul 2010) Log Message: ----------- Continued SPARQL debug component. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-07-17 06:24:49 UTC (rev 2204) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2010-07-17 15:26:41 UTC (rev 2205) @@ -65,8 +65,8 @@ private ExplanationManager(OREManager oreMan) { OREManager.getInstance().addListener(this); this.reasoner = oreMan.getReasoner().getReasoner(); - this.manager = reasoner.getManager(); this.ontology = oreMan.getReasoner().getOWLAPIOntologies(); + this.manager = ontology.getOWLOntologyManager(); dataFactory = manager.getOWLDataFactory(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-07-17 06:24:49 UTC (rev 2204) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-07-17 15:26:41 UTC (rev 2205) @@ -27,6 +27,7 @@ import org.dllearner.core.owl.ObjectProperty; import org.dllearner.core.owl.ObjectPropertyExpression; import org.dllearner.core.owl.Union; +import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.OWLFile; import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.learningproblems.EvaluatedDescriptionClass; @@ -117,9 +118,17 @@ public void setCurrentKnowledgeSource(SparqlKnowledgeSource ks){ this.ks = ks; - } + public void setCurrentKnowledgeSource(OWLOntology ontology){ + ks = new OWLAPIOntology(ontology); + try { + ks.init(); + } catch (ComponentInitException e) { + e.printStackTrace(); + } + } + public KnowledgeSource getKnowledgeSource(){ return ks; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java 2010-07-17 06:24:49 UTC (rev 2204) +++ trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java 2010-07-17 15:26:41 UTC (rev 2205) @@ -107,10 +107,8 @@ private Monitor reasonerMonitor = JamonMonitorLogger.getTimeMonitor(ExtractionAlgorithm.class, "Reasoning monitor"); public IncrementalInconsistencyFinder() throws OWLOntologyCreationException, IOException{ - manager = OWLManager.createOWLOntologyManager(); - ontology = manager.createOntology(); - factory = manager.getOWLDataFactory(); + SimpleLayout layout = new SimpleLayout(); ConsoleAppender consoleAppender = new ConsoleAppender(layout); // DailyRollingFileAppender fileAppender = new DailyRollingFileAppender(layout, "log/incremental.log", "'.'yyyy-MM-dd_HH"); @@ -136,8 +134,16 @@ mon.setMessage("Searching..."); + manager = OWLManager.createOWLOntologyManager(); + try { + ontology = manager.createOntology(IRI.create(defaultGraphURI + "/" + "fragment")); + } catch (OWLOntologyCreationException e1) { + e1.printStackTrace(); + } + factory = manager.getOWLDataFactory(); reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology); - + expGen = new PelletExplanation((PelletReasoner)reasoner); + consistent = true; overallMonitor.reset(); @@ -148,8 +154,10 @@ int disjointWithCount = getAxiomCountForPredicate(OWL.disjointWith); int equivalentClassCount = getAxiomCountForPredicate(OWL.equivalentClass); int subClassOfCount = getAxiomCountForPredicate(RDFS.subClassOf); + int domainCount = getAxiomCountForPredicate(RDFS.domain); int rangeCount = getAxiomCountForPredicate(RDFS.range); + int subPropertyOfCount = getAxiomCountForPredicate(RDFS.subPropertyOf); int equivalentPropertyCount = getAxiomCountForPredicate(OWL.equivalentProperty); int inverseOfCount = getAxiomCountForPredicate(OWL.inverseOf); @@ -157,7 +165,13 @@ int inverseFunctionalCount = getAxiomCountForObject(OWL.InverseFunctionalProperty); int transitiveCount = getAxiomCountForObject(OWL.TransitiveProperty); + int classAssertionCount = getAxiomCountForPredicate(RDF.type); + mon.setSize(disjointWithCount + equivalentClassCount + subClassOfCount + domainCount + rangeCount + + subPropertyOfCount + equivalentPropertyCount + inverseOfCount + functionalCount + + inverseFunctionalCount + transitiveCount); + + Set<OWLClass> visitedClasses = new HashSet<OWLClass>(); Set<OWLNamedIndividual> visitedIndividuals = new HashSet<OWLNamedIndividual>(); Set<OWLObject> visitedLinkedDataResources = new HashSet<OWLObject>(); @@ -177,6 +191,7 @@ disjointAxioms.addAll(retrieveClassExpressionsAxioms(OWL.disjointWith, AXIOM_COUNT, OFFSET * i)); manager.addAxioms(ontology, disjointAxioms); } + mon.setProgress(disjointAxioms.size()); if(ontology.getAxiomCount(AxiomType.EQUIVALENT_CLASSES) < equivalentClassCount){ manager.addAxioms(ontology, retrieveClassExpressionsAxioms(OWL.equivalentClass, AXIOM_COUNT, OFFSET * i)); } @@ -286,12 +301,12 @@ classAssertionAxioms.addAll(retrieveClassAssertionAxiomsForClass(cls, 50)); visitedClasses.add(cls); } - if(!isConsistent()){ - break; - } + } manager.addAxioms(ontology, classAssertionAxioms); - + if(!isConsistent()){ + break; + } //for each individual in the ClassAssertion axioms found above, we retrieve further informations for(OWLClassAssertionAxiom ax : classAssertionAxioms){ if(visitedIndividuals.contains(ax.getIndividual().asOWLNamedIndividual())){ @@ -299,7 +314,6 @@ } manager.addAxioms(ontology, retrieveAxiomsForIndividual(ax.getIndividual().asOWLNamedIndividual(), 1000)); visitedIndividuals.add(ax.getIndividual().asOWLNamedIndividual()); - reasonerMonitor.start(); if(!isConsistent()){ break; } @@ -362,7 +376,6 @@ // for(ATermAppl a : ((PelletReasoner)reasoner).getKB().getExplanationSet()){ // System.err.println(a); // } - System.out.println(expGen.getInconsistencyExplanation()); // for(Set<OWLAxiom> exp : expGen.getInconsistencyExplanations()){ // for(OWLAxiom ax : exp){ // System.out.println(ax); @@ -381,27 +394,26 @@ // } // // } - try { - ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); - PrintWriter out = new PrintWriter( System.out ); - renderer.startRendering( out ); - renderer.render(expGen.getInconsistencyExplanations()); - renderer.endRendering(); - } catch (UnsupportedOperationException e) { - e.printStackTrace(); - } catch (OWLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } +// try { +// ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); +// PrintWriter out = new PrintWriter( System.out ); +// renderer.startRendering( out ); +// renderer.render(expGen.getInconsistencyExplanations()); +// renderer.endRendering(); +// } catch (UnsupportedOperationException e) { +// e.printStackTrace(); +// } catch (OWLException e) { +// e.printStackTrace(); +// } catch (IOException e) { +// e.printStackTrace(); +// } } private boolean isConsistent(){ reasonerMonitor.start(); if(!consistent || !reasoner.isConsistent()){ - System.out.println("EXPLANATION: " + expGen.getInconsistencyExplanation()); - mon.inconsistencyFound(expGen.getInconsistencyExplanation()); +// mon.inconsistencyFound(expGen.getInconsistencyExplanation()); consistent = false; } reasonerMonitor.stop(); @@ -412,6 +424,10 @@ return ontology; } + public Set<OWLAxiom> getExplanation(){ + return expGen.getInconsistencyExplanation(); + } + /** * THis method checks incrementally for unsatisfiable classes in the knowledgebase. * @param endpointURI Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java 2010-07-17 06:24:49 UTC (rev 2204) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java 2010-07-17 15:26:41 UTC (rev 2205) @@ -33,6 +33,7 @@ import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JProgressBar; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.ProgressMonitor; @@ -46,12 +47,12 @@ import javax.swing.text.Document; import javax.swing.text.JTextComponent; -import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.tools.ore.OREApplication; import org.dllearner.tools.ore.sparql.IncrementalInconsistencyFinder; import org.dllearner.tools.ore.sparql.SPARQLProgressMonitor; import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import com.clarkparsia.owlapi.explanation.PelletExplanation; @@ -79,8 +80,12 @@ private JLabel messageLabel; private String progressMessage; + private int progress; private boolean canceled; + private JProgressBar progressBar; + private IncrementalInconsistencyFinder inc; + private SparqlExtractOptionsPanel optionsPanel; private JToggleButton optionsButton; private ImageIcon toggledIcon = new ImageIcon(OREApplication.class.getResource("toggled.gif")); @@ -97,7 +102,6 @@ "</tr> " + "</table></html>"; - private SparqlKnowledgeSource ks; private OntologyExtractingTask extractTask; private ProgressMonitor mon; private Timer t; @@ -183,6 +187,9 @@ messageLabel = new JLabel(""); panel.add(messageLabel, c); + progressBar = new JProgressBar(); + panel.add(progressBar, c); + JLabel padding = new JLabel(); c.weighty = 1.0; panel.add(padding, c); @@ -193,6 +200,7 @@ private void addPredefinedEndpoints(){ endpointToDefaultGraph = new HashMap<URI, List<String>>(); endpointToDefaultGraph.put(URI.create("http://dbpedia-live.openlinksw.com/sparql/"), Collections.singletonList("http://dbpedia.org")); + endpointToDefaultGraph.put(URI.create("http://localhost:8890/sparql"), Collections.singletonList("http://opencyc2.org")); for(URI url : endpointToDefaultGraph.keySet()){ comboBox.addItem(url.toString()); } @@ -259,15 +267,15 @@ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setLocation(screenSize.width / 2 - getWidth() / 2, screenSize.height / 2 - getHeight() / 2); - setVisible(true); +// setVisible(true); } }); - + setVisible(true); return returnCode; } - private void extract() { + private void searchInconsistency() { messageLabel.setText("Checking SPARQL endpoint availability"); setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); mon = new ProgressMonitor(this, "Extracting fragment", "", 0, 100); @@ -366,15 +374,14 @@ } - public SparqlKnowledgeSource getKnowledgeSource(){ - return ks; + public OWLOntology getOWLOntology(){ + return inc.getOntology(); } - class OntologyExtractingTask extends SwingWorker<Void, Void>{ + private class OntologyExtractingTask extends SwingWorker<Void, Void>{ private SPARQLProgressMonitor mon; private JDialog dialog; - private IncrementalInconsistencyFinder inc; public OntologyExtractingTask(JDialog dialog, SPARQLProgressMonitor mon) { this.mon = mon; @@ -411,7 +418,7 @@ public void done() { System.out.println(inc.getOntology()); dialog.setCursor(null); - if(!isCancelled() && ks != null){ + if(!isCancelled()){ okButton.setEnabled(true); } else if(isCancelled()){ System.out.println("Canceled"); @@ -425,7 +432,7 @@ public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("Search")){ canceled = false; - extract(); + searchInconsistency(); } else if(e.getActionCommand().equals("Ok")){ returnCode = OK_RETURN_CODE; closeDialog(); @@ -506,18 +513,23 @@ messageLabel.setText(progressMessage); } }); - } @Override - public void setProgress(long progress) { - // TODO Auto-generated method stub + public void setProgress(long progressLenght) { + this.progress = (int)progressLenght; + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + progressBar.setValue(progress); + } + }); } @Override public void setSize(long size) { - // TODO Auto-generated method stub + progressBar.setMaximum((int)size); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2010-07-17 06:24:49 UTC (rev 2204) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2010-07-17 15:26:41 UTC (rev 2205) @@ -167,6 +167,7 @@ ExtractFromSparqlDialog dialog = new ExtractFromSparqlDialog(getWizard().getDialog()); int ret = dialog.showDialog(); if(ret == ExtractFromSparqlDialog.OK_RETURN_CODE){ + currentURI = null; OREManager.getInstance().setCurrentKnowledgeSource(dialog.getKnowledgeSource()); new OntologyLoadingTask().execute(); } @@ -176,8 +177,11 @@ private void handleDebugFromSparqlEndpoint(){ DebugFromSparqlDialog dialog = new DebugFromSparqlDialog(getWizard().getDialog()); int ret = dialog.showDialog(); - - + if(ret == DebugFromSparqlDialog.OK_RETURN_CODE){ + currentURI = null; + OREManager.getInstance().setCurrentKnowledgeSource(dialog.getOWLOntology()); + new OntologyLoadingTask().execute(); + } } private void handleOpenFromRecent(URI uri){ @@ -267,7 +271,9 @@ if(!isCancelled()){ TaskManager.getInstance().setTaskFinished(); getWizard().setNextFinishButtonEnabled(true); - updateRecentList(); + if(currentURI != null){ + updateRecentList(); + } updateMetrics(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2010-07-21 05:48:25
|
Revision: 2207 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2207&view=rev Author: lorenz_b Date: 2010-07-21 05:48:18 +0000 (Wed, 21 Jul 2010) Log Message: ----------- Continued SPARQL debug component - added stop option, linked data selection, cache. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/Cache.java Added: trunk/src/dl-learner/org/dllearner/tools/ore/sparql/Cache.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/Cache.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/sparql/Cache.java 2010-07-21 05:48:18 UTC (rev 2207) @@ -0,0 +1,325 @@ +package org.dllearner.tools.ore.sparql; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.LinkedList; + +import org.apache.log4j.Logger; +import org.dllearner.kb.sparql.SparqlQuery; +import org.dllearner.utilities.Files; +import org.dllearner.utilities.JamonMonitorLogger; + +import com.hp.hpl.jena.sparql.resultset.ResultSetRewindable; +import com.jamonapi.Monitor; + +public class Cache { + + private static Logger logger = Logger.getLogger(Cache.class); + + private static final long serialVersionUID = 843308736471742205L; + + // maps hash of a SPARQL queries to JSON representation + // of its results; this + // private HashMap<String, String> hm; + + private transient String cacheDir = ""; + private transient String fileEnding = ".cache"; + // private long timestamp; + + // specifies after how many seconds a cached result becomes invalid + private long freshnessSeconds = 15 * 24 * 60 * 60; + + /** + * same ad Cache(String) default is "cache" + */ + /* + * public Cache() { this("cache"); } + */ + + /** + * A Persistant cache is stored in the folder cachePersistant. It has longer + * freshness 365 days and is mainly usefull for developing + * + * @return a Cache onject + */ + public static Cache getPersistentCache() { + Cache c = new Cache(getPersistantCacheDir()); + c.setFreshnessInDays(365); + return c; + } + + /** + * @return the default cache object + */ + public static Cache getDefaultCache() { + Cache c = new Cache(getDefaultCacheDir()); + return c; + } + + /** + * the default cachedir normally is "cache". + * + * @return Default Cache Dir + */ + public static String getDefaultCacheDir() { + return "cache"; + } + + /** + * a more persistant cache used for example generation."cachePersistant" + * + * @return persistant Cache Dir + */ + public static String getPersistantCacheDir() { + return "cachePersistant"; + } + + /** + * Constructor for the cache itself. + * + * @param cacheDir + * Where the base path to the cache is . + */ + public Cache(String cacheDir) { + this(cacheDir, false); + } + + public Cache(String cacheDir, boolean useDatabase) { + this.cacheDir = cacheDir + File.separator; + if (!new File(cacheDir).exists()) { + Files.mkdir(cacheDir); + logger.info("Created directory: " + cacheDir + "."); + } + + } + + // compute md5-hash + private String getHash(String string) { + Monitor hashTime = JamonMonitorLogger.getTimeMonitor(Cache.class, + "HashTime").start(); + // calculate md5 hash of the string (code is somewhat + // difficult to read, but there doesn't seem to be a + // single function call in Java for md5 hashing) + MessageDigest md5 = null; + try { + md5 = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + md5.reset(); + md5.update(string.getBytes()); + byte[] result = md5.digest(); + + StringBuffer hexString = new StringBuffer(); + for (int i = 0; i < result.length; i++) { + hexString.append(Integer.toHexString(0xFF & result[i])); + } + String str = hexString.toString(); + hashTime.stop(); + return str; + } + + // return filename where the query result should be saved + private String getFilename(String sparqlQuery) { + return cacheDir + getHash(sparqlQuery) + fileEnding; + } + + /** + * Gets a result for a query if it is in the cache. + * + * @param sparqlQuery + * SPARQL query to check. + * @return Query result as JSON or null if no result has been found or it is + * outdated. + */ + @SuppressWarnings( { "unchecked" }) + private String getCacheEntry(String sparqlQuery) { + + String filename = getFilename(sparqlQuery); + File file = new File(filename); + + // return null (indicating no result) if file does not exist + if (!file.exists()) { + return null; + } + + LinkedList<Object> entry = null; + try { + FileInputStream fos = new FileInputStream(filename); + ObjectInputStream o = new ObjectInputStream(fos); + entry = (LinkedList<Object>) o.readObject(); + o.close(); + } catch (IOException e) { + e.printStackTrace(); + if (Files.debug) { + System.exit(0); + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + if (Files.debug) { + System.exit(0); + } + } + + // TODO: we need to check whether the query is correct + // (may not always be the case due to md5 hashing) + + // determine whether query is outdated + long timestamp = (Long) entry.get(0); + boolean fresh = checkFreshness(timestamp); + + if (!fresh) { + // delete file + file.delete(); + // return null indicating no result + return null; + } + + return (String) entry.get(2); + } + + /** + * Adds an entry to the cache. + * + * @param sparqlQuery + * The SPARQL query. + * @param result + * Result of the SPARQL query. + */ + private void addToCache(String sparqlQuery, String result) { + String filename = getFilename(sparqlQuery); + long timestamp = System.currentTimeMillis(); + + // create the object which will be serialised + LinkedList<Object> list = new LinkedList<Object>(); + list.add(timestamp); + list.add(sparqlQuery); + list.add(result); + + // create the file we want to use + // File file = new File(filename); + FileOutputStream fos = null; + ObjectOutputStream o = null; + try { + // file.createNewFile(); + fos = new FileOutputStream(filename, false); + o = new ObjectOutputStream(fos); + o.writeObject(list); + fos.flush(); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + fos.close(); + o.close(); + } catch (Exception e2) { + e2.printStackTrace(); + } + } + } + + // check whether the given timestamp is fresh + private boolean checkFreshness(long timestamp) { + return ((System.currentTimeMillis() - timestamp) <= (freshnessSeconds * 1000)); + } + + /** + * Takes a SPARQL query (which has not been evaluated yet) as argument and + * returns a JSON result set. The result set is taken from this cache if the + * query is stored here. Otherwise the query is send and its result added to + * the cache and returned. Convenience method. + * + * @param query + * The SPARQL query. + * @return Jena result set in JSON format + */ + public ResultSetRewindable executeSparqlQuery(SparqlQuery query) { + + Monitor totaltime = JamonMonitorLogger.getTimeMonitor(Cache.class, + "TotalTimeExecuteSparqlQuery").start(); + JamonMonitorLogger.increaseCount(Cache.class, "TotalQueries"); + + Monitor readTime = JamonMonitorLogger.getTimeMonitor(Cache.class, + "ReadTime").start(); + String result = getCacheEntry(query.getSparqlQueryString()); + readTime.stop(); + + if (result != null) { + // query.setJson(result); + // + // query.setRunning(false); + // SparqlQuery.writeToSparqlLog("***********\nJSON retrieved from cache"); + // SparqlQuery.writeToSparqlLog("wget -S -O - '\n"+query.getSparqlEndpoint().getHTTPRequest()); + // SparqlQuery.writeToSparqlLog(query.getSparqlQueryString()); + + // SparqlQuery.writeToSparqlLog("JSON: "+result); + JamonMonitorLogger.increaseCount(Cache.class, "SuccessfulHits"); + + } else { + + // ResultSet rs= query.send(); + query.send(); + String json = query.getJson(); + if (json != null) { + addToCache(query.getSparqlQueryString(), json); + // SparqlQuery.writeToSparqlLog("result added to cache: "+json); + logger.debug("result added to SPARQL cache: " + json); + result = json; + // query.setJson(result); + } else { + json = ""; + result = ""; + logger.warn(Cache.class.getSimpleName() + "empty result: " + + query.getSparqlQueryString()); + + } + + // return json; + } + totaltime.stop(); + return SparqlQuery.convertJSONtoResultSet(result); + } + + public boolean executeSparqlAskQuery(SparqlQuery query) { + String str = getCacheEntry(query.getSparqlQueryString()); + JamonMonitorLogger.increaseCount(Cache.class, "TotalQueries"); + if (str != null) { + JamonMonitorLogger.increaseCount(Cache.class, "SuccessfulHits"); + return Boolean.parseBoolean(str); + } else { + Boolean result = query.sendAsk(); + addToCache(query.getSparqlQueryString(), result.toString()); + return result; + } + } + + /** + * deletes all Files in the cacheDir, does not delete the cacheDir itself, + * and can thus still be used without creating a new Cache Object + */ + public void clearCache() { + + File f = new File(cacheDir); + String[] files = f.list(); + for (int i = 0; i < files.length; i++) { + Files.deleteFile(new File(cacheDir + "/" + files[i])); + } + } + + /** + * Changes how long cached results will stay fresh (default 15 days). + * + * @param days + * number of days + */ + public void setFreshnessInDays(int days) { + freshnessSeconds = days * 24 * 60 * 60; + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java 2010-07-20 08:06:33 UTC (rev 2206) +++ trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java 2010-07-21 05:48:18 UTC (rev 2207) @@ -1,19 +1,19 @@ package org.dllearner.tools.ore.sparql; import java.io.IOException; -import java.io.PrintWriter; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collections; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; -import javax.swing.SwingUtilities; - import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.DailyRollingFileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; import org.dllearner.kb.extraction.ExtractionAlgorithm; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.utilities.JamonMonitorLogger; import org.dllearner.utilities.owl.OWLVocabulary; import org.mindswap.pellet.PelletOptions; @@ -29,7 +29,6 @@ import org.semanticweb.owlapi.model.OWLDataProperty; import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; -import org.semanticweb.owlapi.model.OWLException; import org.semanticweb.owlapi.model.OWLLiteral; import org.semanticweb.owlapi.model.OWLNamedIndividual; import org.semanticweb.owlapi.model.OWLObject; @@ -42,13 +41,11 @@ import org.semanticweb.owlapi.model.OWLPropertyDomainAxiom; import org.semanticweb.owlapi.reasoner.Node; import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.util.ProgressMonitor; import aterm.ATermAppl; import com.clarkparsia.owlapi.explanation.BlackBoxExplanation; import com.clarkparsia.owlapi.explanation.PelletExplanation; -import com.clarkparsia.owlapi.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; import com.clarkparsia.owlapiv3.XSD; import com.clarkparsia.pellet.owlapiv3.PelletReasoner; import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; @@ -63,6 +60,7 @@ import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +import com.hp.hpl.jena.sparql.resultset.ResultSetRewindable; import com.hp.hpl.jena.vocabulary.OWL; import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; @@ -99,9 +97,15 @@ private SPARQLProgressMonitor mon; private boolean consistent = true; + private boolean useLinkedData; + private boolean useCache; private PelletExplanation expGen; + private SparqlEndpoint endpoint; + + private Cache cache; + private Monitor overallMonitor = JamonMonitorLogger.getTimeMonitor(ExtractionAlgorithm.class, "Overall monitor"); private Monitor queryMonitor = JamonMonitorLogger.getTimeMonitor(ExtractionAlgorithm.class, "Query monitor"); private Monitor reasonerMonitor = JamonMonitorLogger.getTimeMonitor(ExtractionAlgorithm.class, "Reasoning monitor"); @@ -121,6 +125,8 @@ PelletOptions.USE_INCREMENTAL_CONSISTENCY = true; PelletOptions.USE_SMART_RESTORE = false; + cache = Cache.getDefaultCache(); + } public void setProgressMonitor(SPARQLProgressMonitor mon){ @@ -130,6 +136,13 @@ public void run(String endpointURI, String defaultGraphURI){ this.endpointURI = endpointURI; this.defaultGraphURI = defaultGraphURI; + + try { + this.endpoint = new SparqlEndpoint(new URL(endpointURI), Collections.singletonList(defaultGraphURI), Collections.EMPTY_LIST); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } logger.info("Searching for inconsistency in " + endpointURI); mon.setMessage("Searching..."); @@ -183,50 +196,100 @@ Set<OWLClassAssertionAxiom> classAssertionAxioms = new HashSet<OWLClassAssertionAxiom>(); boolean schemaComplete = false; - for(int i = 0; i <= RECURSION_DEPTH; i++){ + int i = 0; + while(true){ //first we expand the ontology schema - + if(mon.isCancelled()){ + break; + } //retrieve TBox axioms if(ontology.getAxiomCount(AxiomType.DISJOINT_CLASSES) < disjointWithCount){ disjointAxioms.addAll(retrieveClassExpressionsAxioms(OWL.disjointWith, AXIOM_COUNT, OFFSET * i)); manager.addAxioms(ontology, disjointAxioms); } - mon.setProgress(disjointAxioms.size()); + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.EQUIVALENT_CLASSES) < equivalentClassCount){ manager.addAxioms(ontology, retrieveClassExpressionsAxioms(OWL.equivalentClass, AXIOM_COUNT, OFFSET * i)); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.SUBCLASS_OF) < subClassOfCount){ subClassOfAxioms.addAll(retrieveClassExpressionsAxioms(RDFS.subClassOf, AXIOM_COUNT, OFFSET * i)); manager.addAxioms(ontology, subClassOfAxioms); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } //retrieve RBox axioms if(ontology.getAxiomCount(AxiomType.OBJECT_PROPERTY_DOMAIN) + ontology.getAxiomCount(AxiomType.DATA_PROPERTY_DOMAIN) < domainCount){ domainAxioms.addAll(retrievePropertyAxioms(RDFS.domain, AXIOM_COUNT, OFFSET * i)); manager.addAxioms(ontology, domainAxioms); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.OBJECT_PROPERTY_RANGE) + ontology.getAxiomCount(AxiomType.DATA_PROPERTY_RANGE) < rangeCount){ rangeAxioms.addAll(retrievePropertyAxioms(RDFS.range, AXIOM_COUNT, OFFSET * i)); manager.addAxioms(ontology, rangeAxioms); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.SUB_OBJECT_PROPERTY) + ontology.getAxiomCount(AxiomType.SUB_DATA_PROPERTY) < subPropertyOfCount){ manager.addAxioms(ontology, retrievePropertyAxioms(RDFS.subPropertyOf, AXIOM_COUNT, OFFSET * i)); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.EQUIVALENT_OBJECT_PROPERTIES) + ontology.getAxiomCount(AxiomType.EQUIVALENT_DATA_PROPERTIES) < equivalentPropertyCount){ manager.addAxioms(ontology, retrievePropertyAxioms(OWL.equivalentProperty, AXIOM_COUNT, OFFSET * i)); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.INVERSE_OBJECT_PROPERTIES) < inverseOfCount){ manager.addAxioms(ontology, retrievePropertyAxioms(OWL.inverseOf, AXIOM_COUNT, OFFSET * i)); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.FUNCTIONAL_OBJECT_PROPERTY) + ontology.getAxiomCount(AxiomType.FUNCTIONAL_DATA_PROPERTY) < functionalCount){ manager.addAxioms(ontology, retrievePropertyCharacteristicAxioms(OWL.FunctionalProperty, AXIOM_COUNT, OFFSET * i)); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.INVERSE_FUNCTIONAL_OBJECT_PROPERTY) < inverseFunctionalCount){ manager.addAxioms(ontology, retrievePropertyCharacteristicAxioms(OWL.InverseFunctionalProperty, AXIOM_COUNT, OFFSET * i)); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(ontology.getAxiomCount(AxiomType.TRANSITIVE_OBJECT_PROPERTY) < transitiveCount){ manager.addAxioms(ontology, retrievePropertyCharacteristicAxioms(OWL.TransitiveProperty, AXIOM_COUNT, OFFSET * i)); } + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } //removal due to find other inconsistencies not evolving this axiom + manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( + factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Organisation")), + factory.getOWLClass(IRI.create("http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing")) + )); // manager.removeAxiom(ontology, factory.getOWLObjectPropertyRangeAxiom( // factory.getOWLObjectProperty(IRI.create("http://dbpedia.org/ontology/artist")), // factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Person")))); @@ -247,53 +310,80 @@ // factory.getOWLClass(IRI.create("http://sw.opencyc.org/concept/Mx8Ngh4rD2crlmAKQdmLOr88Soi59h4r8LonGrboEduAAADggVbxzQ")))); for(OWLAxiom ax : disjointAxioms){ + if(mon.isCancelled()){ + break; + } //retrieve instances contained in both classes manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClasses( ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(0).asOWLClass(), ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(1).asOWLClass(), AXIOM_COUNT)); + mon.setProgress(ontology.getLogicalAxiomCount()); //retrieve instances contained in first class manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(0).asOWLClass(), AXIOM_COUNT)); + mon.setProgress(ontology.getLogicalAxiomCount()); //retrieve instances contained in second class manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( ((OWLDisjointClassesAxiom)ax).getClassExpressionsAsList().get(1).asOWLClass(), AXIOM_COUNT)); + mon.setProgress(ontology.getLogicalAxiomCount()); } + if(mon.isCancelled()){ + break; + } if(!isConsistent()){ break; } OWLClass domain; for(OWLAxiom ax : domainAxioms){ + if(mon.isCancelled()){ + break; + } domain = ((OWLPropertyDomainAxiom<?>)ax).getDomain().asOWLClass(); //retrieve instances for the domain class manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( domain, AXIOM_COUNT)); + mon.setProgress(ontology.getLogicalAxiomCount()); //retrieve property assertions if(ax instanceof OWLObjectPropertyDomainAxiom){ manager.addAxioms(ontology, retrieveObjectPropertyAssertionAxioms(((OWLObjectPropertyDomainAxiom)ax).getProperty().asOWLObjectProperty(), AXIOM_COUNT)); } else { manager.addAxioms(ontology, retrieveDataPropertyAssertionAxioms(((OWLDataPropertyDomainAxiom)ax).getProperty().asOWLDataProperty(), AXIOM_COUNT)); } + mon.setProgress(ontology.getLogicalAxiomCount()); } + if(mon.isCancelled()){ + break; + } if(!isConsistent()){ break; } OWLClass range; for(OWLAxiom ax : rangeAxioms){ + if(mon.isCancelled()){ + break; + } range = ((OWLObjectPropertyRangeAxiom)ax).getRange().asOWLClass(); //retrieve instances for the range class manager.addAxioms(ontology, retrieveClassAssertionAxiomsForClass( range, AXIOM_COUNT)); + mon.setProgress(ontology.getLogicalAxiomCount()); //retrieve property assertions manager.addAxioms(ontology, retrieveObjectPropertyAssertionAxioms(((OWLObjectPropertyRangeAxiom)ax).getProperty().asOWLObjectProperty(), AXIOM_COUNT)); - + mon.setProgress(ontology.getLogicalAxiomCount()); } + if(mon.isCancelled()){ + break; + } if(!isConsistent()){ break; } //retrieve ClassAssertion axioms for each new class for(OWLAxiom ax : subClassOfAxioms){ + if(mon.isCancelled()){ + break; + } for(OWLClass cls : ax.getClassesInSignature()){ if(visitedClasses.contains(cls)){ continue; @@ -304,67 +394,102 @@ } manager.addAxioms(ontology, classAssertionAxioms); + mon.setProgress(ontology.getLogicalAxiomCount()); + if(mon.isCancelled()){ + break; + } if(!isConsistent()){ break; } //for each individual in the ClassAssertion axioms found above, we retrieve further informations for(OWLClassAssertionAxiom ax : classAssertionAxioms){ + if(mon.isCancelled()){ + break; + } if(visitedIndividuals.contains(ax.getIndividual().asOWLNamedIndividual())){ continue; } manager.addAxioms(ontology, retrieveAxiomsForIndividual(ax.getIndividual().asOWLNamedIndividual(), 1000)); + mon.setProgress(ontology.getLogicalAxiomCount()); visitedIndividuals.add(ax.getIndividual().asOWLNamedIndividual()); if(!isConsistent()){ break; } } - if(!isConsistent()){ + if(mon.isCancelled()){ break; } - for(OWLClass cls : ontology.getClassesInSignature()){ - if(cls.toStringID().contains("#")){ - if(visitedLinkedDataResources.contains(cls)){ - continue; - } - manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(cls.getIRI())); - visitedLinkedDataResources.add(cls); - } - } if(!isConsistent()){ break; } - for(OWLObjectProperty prop : ontology.getObjectPropertiesInSignature()){ - if(prop.toStringID().contains("#")){ - if(visitedLinkedDataResources.contains(prop)){ - continue; + if(useLinkedData){ + for(OWLClass cls : ontology.getClassesInSignature()){ + if(mon.isCancelled()){ + break; } - manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); - visitedLinkedDataResources.add(prop); + if(cls.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(cls)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(cls.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(cls); + } } - } - if(!isConsistent()){ - break; - } - for(OWLDataProperty prop : ontology.getDataPropertiesInSignature()){ - if(prop.toStringID().contains("#")){ - if(visitedLinkedDataResources.contains(prop)){ - continue; + if(mon.isCancelled()){ + break; + } + if(!isConsistent()){ + break; + } + for(OWLObjectProperty prop : ontology.getObjectPropertiesInSignature()){ + if(mon.isCancelled()){ + break; } - manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); - visitedLinkedDataResources.add(prop); + if(prop.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(prop); + } } + if(mon.isCancelled()){ + break; + } + if(!isConsistent()){ + break; + } + for(OWLDataProperty prop : ontology.getDataPropertiesInSignature()){ + if(mon.isCancelled()){ + break; + } + if(prop.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(prop); + } + } + if(mon.isCancelled()){ + break; + } + if(!isConsistent()){ + break; + } } - if(!isConsistent()){ - break; - } - disjointAxioms.clear(); domainAxioms.clear(); rangeAxioms.clear(); subClassOfAxioms.clear(); classAssertionAxioms.clear(); + + i++; } overallMonitor.stop(); @@ -410,10 +535,9 @@ } - private boolean isConsistent(){ + public boolean isConsistent(){ reasonerMonitor.start(); if(!consistent || !reasoner.isConsistent()){ -// mon.inconsistencyFound(expGen.getInconsistencyExplanation()); consistent = false; } reasonerMonitor.stop(); @@ -428,232 +552,17 @@ return expGen.getInconsistencyExplanation(); } - /** - * THis method checks incrementally for unsatisfiable classes in the knowledgebase. - * @param endpointURI - */ - private void checkForUnsatisfiableClasses(String endpointURI){ - this.endpointURI = endpointURI; - logger.info("Searching for unsatisfiable classes in " + endpointURI); - -// reasoner = PelletIncremantalReasonerFactory.getInstance().createReasoner(ontology); - ReasonerFactory reasonerFactory = new ReasonerFactory(); - reasoner = reasonerFactory.createNonBufferingReasoner(ontology); - - overallMonitor.reset(); - reasonerMonitor.reset(); - queryMonitor.reset(); - overallMonitor.start(); - - - Set<OWLClass> visitedClasses = new HashSet<OWLClass>(); - Set<OWLClass> classesToVisit = new HashSet<OWLClass>(); - Set<OWLClass> tmp = new HashSet<OWLClass>(); - - //we are starting with disjointClasses axioms - Set<OWLDisjointClassesAxiom> disjointAxioms = retrieveDisjointClassAxioms(); - manager.addAxioms(ontology, disjointAxioms); - - for(OWLDisjointClassesAxiom ax : disjointAxioms){ - for(OWLClassExpression cl : ax.getClassExpressions()){ - if(!cl.isAnonymous()){ - classesToVisit.add(cl.asOWLClass()); - } - } - } - boolean foundUnsatisfiableClasses = false; - Set<OWLClass> unsatClasses; - logger.info("Starting with " + classesToVisit.size() + " classes to visit."); - for(int i = 1; i <= RECURSION_DEPTH; i++){ - logger.info("Recursion depth = " + i); - for(OWLClass cl : classesToVisit){ - logger.info("Starting retrieving axioms for class " + cl); - Set<OWLAxiom> axioms = retrieveAxiomsForClass(cl, false); -// Set<OWLAxiom> axioms = retrieveAxiomsForClassSingleQuery(cl, false); - manager.addAxioms(ontology, axioms); -// if(!axioms.isEmpty()){ -// logger.info("Checking for unsatisfiable classes"); -// reasonerMonitor.start(); -// unsatClasses = reasoner.getUnsatisfiableClasses().getEntities(); -// foundUnsatisfiableClasses = !unsatClasses.isEmpty(); -// logger.info("Found " + unsatClasses.size() + " unsatisfiable classes"); -// reasonerMonitor.stop(); -// -// } - for(OWLAxiom ax : axioms){ - tmp.addAll(ax.getClassesInSignature()); - } - if(foundUnsatisfiableClasses && BREAK_AFTER_ERROR_FOUND){ - logger.info("Found unsatisfiable classes. Aborting."); - break; - } - } - if(foundUnsatisfiableClasses && BREAK_AFTER_ERROR_FOUND){ - break; - } - visitedClasses.addAll(classesToVisit); - tmp.removeAll(visitedClasses); - classesToVisit.clear(); - classesToVisit.addAll(tmp); - tmp.clear(); - } - - - overallMonitor.stop(); - showStats(); - - Node<OWLClass> unsatisfiableClasses = reasoner.getUnsatisfiableClasses(); - logger.info("Found " + unsatisfiableClasses.getSize() + " unsatisfiable class(es):"); - logger.info(unsatisfiableClasses.getEntities()); - if(!unsatisfiableClasses.getEntities().isEmpty()){ - BlackBoxExplanation expGen = new BlackBoxExplanation(ontology, reasonerFactory, reasoner); - for(OWLClass cls : unsatisfiableClasses){ - System.err.println(cls); - System.out.println(expGen.getExplanation(cls)); - } - - } - - + public void setUseLinkedData(boolean useLinkedData){ + this.useLinkedData = useLinkedData; } - /** - * This method checks incrementally the consistency of the knowledgebase. - * @param endpointURI - */ - private void checkForInconsistency(String endpointURI){ - this.endpointURI = endpointURI; - logger.info("Searching for inconsistency in " + endpointURI); - - PelletOptions.USE_COMPLETION_QUEUE = true; - PelletOptions.USE_INCREMENTAL_CONSISTENCY = true; - PelletOptions.USE_SMART_RESTORE = false; - - OWLReasoner reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology); - - overallMonitor.reset(); - reasonerMonitor.reset(); - queryMonitor.reset(); - overallMonitor.start(); - - Set<OWLClass> visitedClasses = new HashSet<OWLClass>(); - Set<OWLObjectProperty> visitedObjectProperties = new HashSet<OWLObjectProperty>(); - Set<OWLNamedIndividual> visitedIndividuals = new HashSet<OWLNamedIndividual>(); - Set<OWLClass> classesToVisit = new HashSet<OWLClass>(); - Set<OWLClass> tmp = new HashSet<OWLClass>(); - - //we are starting with disjointClasses axioms - Set<OWLDisjointClassesAxiom> disjointAxioms = retrieveDisjointClassAxioms(); - manager.addAxioms(ontology, disjointAxioms); - - for(OWLDisjointClassesAxiom ax : disjointAxioms){ - for(OWLClassExpression cl : ax.getClassExpressions()){ - if(!cl.isAnonymous()){ - classesToVisit.add(cl.asOWLClass()); - } - } - } - boolean isConsistent = true; - Set<OWLAxiom> axioms; - logger.info("Starting with " + classesToVisit.size() + " classes to visit."); - for(int i = 1; i <= RECURSION_DEPTH; i++){ - logger.info("Recursion depth = " + i); - //we retrieve axioms for each class - for(OWLClass cl : classesToVisit){ - axioms = retrieveAxiomsForClass(cl, RESULT_LIMIT); - manager.addAxioms(ontology, axioms); - System.out.println(ontology.getObjectPropertiesInSignature()); - if(!axioms.isEmpty()){ - logger.info("Checking for consistency"); - reasonerMonitor.start(); - isConsistent = reasoner.isConsistent(); - reasonerMonitor.stop(); - - } - for(OWLAxiom ax : axioms){ - tmp.addAll(ax.getClassesInSignature()); - } - if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ - logger.info("Detected inconsistency. Aborting."); - break; - } - - } - if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ - break; - } - //we retrieve axioms for each individual in the ontology - logger.info("Retrieving axioms for " + ontology.getIndividualsInSignature().size() + " instances"); - int cnt = 0; - for(OWLNamedIndividual ind : ontology.getIndividualsInSignature()){ - if(!visitedIndividuals.contains(ind)){ - manager.addAxioms(ontology, retrieveAxiomsForIndividual(ind, RESULT_LIMIT)); - visitedIndividuals.add(ind); - logger.info("Checking for consistency"); - reasonerMonitor.start(); - isConsistent = reasoner.isConsistent(); - reasonerMonitor.stop(); - } - if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ - logger.info("Detected inconsistency. Aborting."); - break; - } - cnt++; - if(cnt == 100){ - break; - } - - } - if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ - break; - } - cnt = 0; - //we retrieve axioms for each object property in the ontology - logger.info("Retrieving axioms for " + ontology.getObjectPropertiesInSignature().size() + " properties"); - for(OWLObjectProperty prop : ontology.getObjectPropertiesInSignature()){ - if(!visitedObjectProperties.contains(prop)){ - manager.addAxioms(ontology, retrieveAxiomsForObjectProperty(prop, RESULT_LIMIT)); - visitedObjectProperties.add(prop); - logger.info("Checking for consistency"); - reasonerMonitor.start(); - isConsistent = reasoner.isConsistent(); - reasonerMonitor.stop(); - } - if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ - logger.info("Detected inconsistency. Aborting."); - break; - } - cnt++; - if(cnt == 100){ - break; - } - - } - if(!isConsistent && BREAK_AFTER_ERROR_FOUND){ - break; - } - visitedClasses.addAll(classesToVisit); - tmp.removeAll(visitedClasses); - classesToVisit.clear(); - classesToVisit.addAll(tmp); - tmp.clear(); - } - - overallMonitor.stop(); - //show some statistics - showStats(); - - //compute an explanation - if(!reasoner.isConsistent()){ - ((PelletReasoner)reasoner).getKB().setDoExplanation(true); -// ExplanationGenerator expGen = new PelletExplanationGenerator(ontology); -// logger.info(expGen.getExplanation(factory.getOWLSubClassOfAxiom(factory.getOWLThing(), factory.getOWLNothing()))); - for(ATermAppl a : ((PelletReasoner)reasoner).getKB().getExplanationSet()){ - System.out.println(a); - } - } + public void setUseCache(boolean useCache){ + this.useCache = useCache; } + + + private int getAxiomCountForPredicate(Property predicate){ StringBuilder sb = new StringBuilder(); sb.append("SELECT COUNT(*) WHERE {"); @@ -696,9 +605,13 @@ sb.append(" LIMIT ").append(limit); sb.append(" OFFSET ").append(offset); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); @@ -749,9 +662,13 @@ sb.append(" LIMIT ").append(limit); sb.append(" OFFSET ").append(offset); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); @@ -760,6 +677,9 @@ RDFNode rdfNodeObject; boolean isObjectProperty = true; while(sparqlResults.hasNext()){ + if(mon.isCancelled()){ + break; + } solution = sparqlResults.nextSolution(); rdfNodeSubject = solution.getResource("?subject"); @@ -838,9 +758,13 @@ sb.append(" LIMIT ").append(limit); sb.append(" OFFSET ").append(offset); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); @@ -848,6 +772,9 @@ RDFNode rdfNodeSubject; boolean isObjectProperty = true; while(sparqlResults.hasNext()){ + if(mon.isCancelled()){ + break; + } solution = sparqlResults.nextSolution(); rdfNodeSubject = solution.getResource("?subject"); @@ -939,23 +866,37 @@ sb.append("ASK {"); sb.append("<").append(propertyURI).append("> ").append("<").append(RDF.type).append("> ").append("<").append(OWL.ObjectProperty).append(">"); sb.append("}"); - Query query = QueryFactory.create(sb.toString()); - QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - if(sparqlQueryExec.execAsk()){ - logger.info("YES"); - return true; + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + if(useCache){ + if(cache.executeSparqlAskQuery(query)){ + logger.info("YES"); + return true; + } + + } else { + if(query.sendAsk()){ + logger.info("YES"); + return true; + } } - //we check if triple ($prop rdf:type owl:DaatProperty) is in the knowledgebase + //we check if triple ($prop rdf:type owl:DataProperty) is in the knowledgebase sb = new StringBuilder(); sb.append("ASK {"); sb.append("<").append(propertyURI).append("> ").append("<").append(RDF.type).append("> ").append("<").append(OWL.DatatypeProperty).append(">"); sb.append("}"); - query = QueryFactory.create(sb.toString()); - sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - if(sparqlQueryExec.execAsk()){ - logger.info("NO"); - return false; + query = new SparqlQuery(sb.toString(), endpoint); + if(useCache){ + if(cache.executeSparqlAskQuery(query)){ + logger.info("NO"); + return false; + } + + } else { + if(query.sendAsk()){ + logger.info("NO"); + return false; + } } //we check for one triple, and decide if object is an literal @@ -964,9 +905,13 @@ sb.append("?subject ").append("<").append(propertyURI).append("> ").append("?object"); sb.append("}"); sb.append("LIMIT 1"); - query = QueryFactory.create(sb.toString()); - sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - ResultSet results = sparqlQueryExec.execSelect(); + query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable results; + if(useCache){ + results = cache.executeSparqlQuery(query); + } else { + results = query.send(); + } boolean isObjectProperty = true; while(results.hasNext()){ @@ -991,9 +936,13 @@ sb.append("}"); sb.append(" LIMIT ").append(limit); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLClassAssertionAxiom> axioms = new HashSet<OWLClassAssertionAxiom>(); @@ -1025,9 +974,13 @@ sb.append("}"); sb.append(" LIMIT ").append(limit); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); @@ -1063,9 +1016,13 @@ sb.append("}"); sb.append(" LIMIT ").append(limit); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); @@ -1124,9 +1081,13 @@ sb.append(" ORDER BY ").append("?subject"); sb.append(" LIMIT ").append(limit); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLClassAssertionAxiom> axioms = new HashSet<OWLClassAssertionAxiom>(); @@ -1147,48 +1108,6 @@ return axioms; } - private Set<OWLDisjointClassesAxiom> retrieveDisjointClassAxioms(){ - logger.info("Retrieving disjointClasses axioms"); - mon.setMessage("Retrieving disjointClasses axioms"); - queryMonitor.start(); - - StringBuilder sb = new StringBuilder(); - sb.append("SELECT * WHERE {"); - sb.append("?subject ").append("<").append(OWL.disjointWith).append(">").append(" ?object"); - sb.append("}"); - sb.append("LIMIT ").append(RESULT_LIMIT); - - Query query = QueryFactory.create(sb.toString()); - QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); - - Set<OWLDisjointClassesAxiom> axioms = new HashSet<OWLDisjointClassesAxiom>(); - - QuerySolution solution; - RDFNode rdfNodeSubject; - RDFNode rdfNodeObject; - OWLClass disjointClass1; - OWLClass disjointClass2; - while(sparqlResults.hasNext()){ - solution = sparqlResults.nextSolution(); - - rdfNodeSubject = solution.getResource("?subject"); - rdfNodeObject = solution.getResource("?object"); - - //skip if solution contains blank node - if(rdfNodeSubject.isAnon() || rdfNodeObject.isAnon()){ - continue; - } - - disjointClass1 = factory.getOWLClass(IRI.create(rdfNodeSubject.toString())); - disjointClass2 = factory.getOWLClass(IRI.create(rdfNodeObject.toString())); - - axioms.add(factory.getOWLDisjointClassesAxiom(disjointClass1, disjointClass2)); - } - queryMonitor.stop(); - logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); - return axioms; - } private Set<OWLClassAssertionAxiom> retrievePropertyAssertionAxiomsWithFunctionalProperty(int limit){ queryMonitor.start(); @@ -1200,9 +1119,13 @@ sb.append(" HAVING COUNT(?o)>1"); sb.append(" LIMIT ").append(limit); - QueryEngineHTTP sparqlQueryExec = new QueryEngineHTTP(endpointURI, sb.toString()); - sparqlQueryExec.addDefaultGraph(defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } Set<OWLClassAssertionAxiom> axioms = new HashSet<OWLClassAssertionAxiom>(); @@ -1221,112 +1144,7 @@ return axioms; } - private Set<OWLAxiom> retrieveSubClassAxioms(){ - logger.info("Retrieving SubClassOf axioms"); - queryMonitor.start(); - - StringBuilder sb = new StringBuilder(); - sb.append("SELECT * WHERE {"); - sb.append("?subject ").append("<").append(RDFS.subClassOf).append(">").append(" ?object"); - sb.append("}"); - sb.append("LIMIT ").append(RESULT_LIMIT); - - Query query = QueryFactory.create(sb.toString()); - QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); - - Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); - - QuerySolution solution; - RDFNode rdfNodeSubject; - RDFNode rdfNodeObject; - OWLClass subClass; - OWLClass superClass; - while(sparqlResults.hasNext()){ - solution = sparqlResults.nextSolution(); - - rdfNodeSubject = solution.getResource("?subject"); - rdfNodeObject = solution.getResource("?object"); - - //skip if solution contains blank node - if(rdfNodeSubject.isAnon() || rdfNodeObject.isAnon()){ - continue; - } - - subClass = factory.getOWLClass(IRI.create(rdfNodeSubject.toString())); - superClass = factory.getOWLClass(IRI.create(rdfNodeObject.toString())); - - axioms.add(factory.getOWLSubClassOfAxiom(subClass, superClass)); - } - queryMonitor.stop(); - logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); - return axioms; - } - /** - * Get axioms for a given class. - * Axiom types: SubClassOf, EquivalentClass, ClassAssertion - * - * @param cl - * @return - */ - private Set<OWLAxiom> retrieveAxiomsForClass(OWLClass cl, int limit){ - logger.info("Retrieving axioms for class " + cl); - Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); - queryMonitor.start(); - - StringBuilder sb = new StringBuilder(); - sb.append("SELECT * WHERE {"); - sb.append("{<").append(cl.toStringID()).append("> ").append("?predicate").append(" ?object.}"); - sb.append(" UNION "); - sb.append("{?subject").append("?predicate").append(" <").append(cl.toStringID()).append("> }"); - sb.append("}"); - sb.append("LIMIT ").append(limit); - - Query query = QueryFactory.create(sb.toString()); - QueryExecution queryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - ResultSet results = queryExec.execSelect(); - QuerySolution solution; - RDFNode rdfNodeSubject; - RDFNode rdfNodePredicate; - RDFNode rdfNodeObject; - while(results.hasNext()){ - solution = results.nextSolution(); - if(solution.get("?object") != null){ - rdfNodePredicate = solution.getResource("?predicate"); - rdfNodeObject = solution.get("?object"); - //skip if object is a blank node - if(rdfNodeObject.isAnon()){ - continue; - } - if(rdfNodePredicate.equals(RDFS.subClassOf)){ - axioms.add(factory.getOWLSubClassOfAxiom(cl, factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); - } else if(rdfNodePredicate.equals(OWL.equivalentClass)){ - axioms.add(factory.getOWLEquivalentClassesAxiom(cl, factory.getOWLClass(IRI.create(rdfNodeObject.toString())))); - } - } else if(solution.get("?subject") != null){ - rdfNodePredicate = solution.getResource("?predicate"); - rdfNodeSubject = solution.get("?subject"); - //skip if subject is a blank node - if(rdfNodeSubject.isAnon()){ - continue; - } - if(rdfNodePredicate.equals(RDF.type)){ - axioms.add(factory.getOWLClassAssertionAxiom(cl, factory.getOWLNamedIndividual(IRI.create(rdfNodeSubject.toString())))); - } else if(rdfNodePredicate.equals(RDFS.subClassOf)){ - axioms.add(factory.getOWLSubClassOfAxiom(factory.getOWLClass(IRI.create(rdfNodeSubject.toString())), cl)); - } - } - - - }System.out.println(axioms); - if(axioms.isEmpty()){ - axioms.addAll(getAxiomsFromLinkedDataSource(cl.getIRI())); - } - queryMonitor.stop(); - logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); - return axioms; - } /** * Get axioms for a given ObjectProperty. @@ -1414,15 +1232,23 @@ sb.append("}"); sb.append(" LIMIT ").append(limit); - Query query = QueryFactory.create(sb.toString()); - QueryExecution queryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - ResultSet results = queryExec.execSelect(); + SparqlQuery query = new SparqlQuery(sb.toString(), endpoint); + ResultSetRewindable sparqlResults; + if(useCache){ + sparqlResults = cache.executeSparqlQuery(new SparqlQuery(sb.toString(), endpoint)); + } else { + sparqlResults = query.send(); + } + QuerySolution solution; RDFNode rdfNodePredicate; RDFNode rdfNodeObject; OWLLiteral literal; - while(results.hasNext()){ - solution = results.nextSolution(); + while(sparqlResults.hasNext()){ + if(mon.isCancelled()){ + break; + } + solution = sparqlResults.nextSolution(); rdfNodePredicate = solution.getResource("?predicate"); rdfNodeObject = solution.get("?object"); //skip if object is a blank node @@ -1500,181 +1326,7 @@ return axioms; } - private int getAxiomCount(){ - StringBuilder sb = new StringBuilder(); -// sb.append("SELECT COUNT(*) WHERE {"); -// sb.append("?s").append(" <").append(OWL.disjointWith).append("> ").append("?o}"); - sb.append("select * where {?s ?p ?o} group by ?s having(count(distinct) < 5)"); - - Query query = QueryFactory.create(sb.toString()); - QueryExecution queryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - ResultSet results = queryExec.execSelect(); - System.out.println(results.nextSolution()); - - return 1; - } - - private Set<OWLAxiom> retrieveSubClassAxiomsForClass(OWLClass cl){ - logger.info("Retrieving subClassOf axioms for class " + cl); - queryMonitor.start(); - - Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); - QuerySolution solution; - RDFNode rdfNode; - - Query sparqlQuery = createSimpleSelectSPARQLQuery("?x", OWLVocabulary.RDFS_SUBCLASS_OF, - cl.toStringID(), "regex(?x,\"http://dbpedia.org/ontology/\", \"i\")", RESULT_LIMIT); - QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, sparqlQuery, defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); - if(!sparqlResults.hasNext()){ - logger.info("Got empty SPARQL result. Trying to get informations from linked data uri."); - try{ - axioms.addAll(manager.loadOntology(IRI.create(cl.toStringID())).getLogicalAxioms()); - } catch (Exception e){ - logger.info("No linked data retrieved."); - } - } else { - OWLClass subClass; - while(sparqlResults.hasNext()){ - solution = sparqlResults.nextSolution(); - - rdfNode = solution.getResource("?x"); - if(rdfNode.isAnon()){ - System.out.println("BLANKNODE detected in solution " + solution); - continue; - } - - subClass = factory.getOWLClass(IRI.create(rdfNode.toString())); - - axioms.add(factory.getOWLSubClassOfAxiom(subClass, cl)); - } - } - - queryMonitor.stop(); - logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); - return axioms; - } - - private Set<OWLObjectPropertyDomainAxiom> retrievePropertyDomainAxiomsForClass(OWLClass cl){ - logger.info("Retrieving objectPropertyDomain axioms for class " + cl); - queryMonitor.start(); - - Query sparqlQuery = createSimpleSelectSPARQLQuery("?s", OWLVocabulary.RDFS_domain, cl.toStringID(), - "regex(?s,\"http://dbpedia.org/ontology/\", \"i\")", RESULT_LIMIT); - QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, sparqlQuery, defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); - - Set<OWLObjectPropertyDomainAxiom> axioms = new HashSet<OWLObjectPropertyDomainAxiom>(); - - QuerySolution solution; - RDFNode rdfNodeSubject; - OWLObjectProperty property; - while(sparqlResults.hasNext()){ - solution = sparqlResults.nextSolution(); - - rdfNodeSubject = solution.getResource("?s"); - - property = factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())); - - axioms.add(factory.getOWLObjectPropertyDomainAxiom(property, cl)); - } - queryMonitor.stop(); - logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); - return axioms; - } - - private Set<OWLObjectPropertyRangeAxiom> retrievePropertyRangeAxiomsForClass(OWLClass cl){ - logger.info("Retrieving objectPropertyRange axioms for class " + cl); - queryMonitor.start(); - - Query sparqlQuery = createSimpleSelectSPARQLQuery("?s", OWLVocabulary.RDFS_range, cl.toStringID(), - "regex(?s,\"http://dbpedia.org/ontology/\", \"i\")", RESULT_LIMIT); - QueryExecution sparqlQueryExec = QueryExecutionFactory.sparqlService(endpointURI, sparqlQuery, defaultGraphURI); - ResultSet sparqlResults = sparqlQueryExec.execSelect(); - - Set<OWLObjectPropertyRangeAxiom> axioms = new HashSet<OWLObjectPropertyRangeAxiom>(); - - QuerySolution solution; - RDFNode rdfNodeSubject; - OWLObjectProperty property; - while(sparqlResults.hasNext()){ - solution = sparqlResults.nextSolution(); - - rdfNodeSubject = solution.getResource("?s"); - - property = factory.getOWLObjectProperty(IRI.create(rdfNodeSubject.toString())); - - axioms.add(factory.getOWLObjectPropertyRangeAxiom(property, cl)); - } - queryMonitor.stop(); - logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); - return axioms; - } - - - private Set<OWLAxiom> retrieveAxiomsForClass(OWLClass cl, boolean retrieveABoxAxioms){ - Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); - axioms.addAll(retrieveSubClassAxiomsForClass(cl)); - axioms.addAll(retrievePropertyDomainAxiomsForClass(cl)); - axioms.addAll(retrievePropertyRangeAxiomsForClass(cl)); - if(retrieveABoxAxioms){ - axioms.addAll(retrieveClassAssertionAxiomsForClass(cl, AXIOM_COUNT)); - } - return axioms; - } - - private Set<OWLAxiom> retrieveAxiomsForClassSingleQuery(OWLClass cl, boolean retrieveABoxAxioms){ - logger.info("Retrieving axioms for class " + cl); - Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); - queryMonitor.start(); - - StringBuilder sb = new StringBuilder(); - sb.append("SELECT * WHERE {"); - sb.append("{").append("<").append(cl.toStringID()).append("> <").append(OWLVocabulary.RDFS_SUBCLASS_OF).append("> ?superClass.").append("FILTER regex(?superClass,\"http://dbpedia.org/ontology/\", \"i\")}"); - sb.append("UNION"); - sb.append("{").append("?subClass ").append("<").append(OWLVocabulary.RDFS_SUBCLASS_OF).append("> <").append(cl.toStringID()).append(">.").append("FILTER regex(?subClass,\"http://dbpedia.org/ontology/\", \"i\")}"); - sb.append("UNION"); - sb.append("{").append("?domainProperty ").append("<").append(OWLVocabulary.RDFS_domain).append("> <").append(cl.toStringID()).append(">.").append("FILTER regex(?domainProperty,\"http://dbpedia.org/ontology/\", \"i\")}"); - sb.append("UNION"); - sb.append("{").append("?rangeProperty ").append("<").append(OWLVocabulary.RDFS_range).append("> <").append(cl.toStringID()).append(">.").append("FILTER regex(?rangeProperty,\"http://dbpedia.org/ontology/\", \"i\")}"); - if(retrieveABoxAxioms){ - sb.append("UNION"); - sb.append("{").append("?instance ").append("<").append(OWLVocabulary.RDF_TYPE).append("> <").append(cl.toStringID()).append(">}"); - } - sb.append("}"); -// sb.append("LIMIT ").append(RESULT_LIMIT); - - Query query = QueryFactory.create(sb.toString()); - QueryExecution queryExec = QueryExecutionFactory.sparqlService(endpointURI, query, defaultGraphURI); - ResultSet results = queryExec.execSelect(); - QuerySolution solution; - RDFNode rdfNode; - while(results.hasNext()){ - solution = results.nextSolution(); - if(solution.varNames().next().equals("subClass")){ - rdfNode = solution.getResource("?subClass"); - axioms.add(factory.getOWLSubClassOfAxiom(factory.getOWLClass(IRI.create(rdfNode.toString())), cl)); - } else if(solution.varNames().next().equals("superClass")){ - rdfNode = solution.getResource("?superClass"); - axioms.add(factory.getOWLSubClassOfAxiom(cl, factory.getOWLClass(IRI.create(rdfNode.toString())))); - } else if(solution.varNames().next().equals("domainProperty")){ - rdfNode = solution.getResource("?domainProperty"); - axioms.add(factory.getOWLObjectPropertyDomainAxiom(factory.getOWLObjectProperty(IRI.create(rdfNode.toString())), cl)); - } else if(solution.varNames().next().equals("rangeProperty")){ - rdfNode = solution.getResource("?rangeProperty"); - axioms.add(factory.getOWLObjectPropertyRangeAxiom(factory.getOWLObjectProperty(IRI.create(rdfNode.toString())), cl)); - } else if(solution.varNames().next().equals("instance")){ - rdfNode = solution.getResource("?instance"); - axioms.add(factory.getOWLClassAssertionAxiom(cl, factory.getOWLNamedIndividual(IRI.create(rdfNode.toString())))); - } - - } - queryMonitor.stop(); - logger.info("Found " + axioms.size() + " axioms in " + queryMonitor.getLastValue() + " ms"); - return axioms; - } - private Set<OWLAxiom> getAxiomsFromLinkedDataSource(IRI iri){ logger.info("Trying to get informations from linked data uri " + iri); Set<OWLAxiom> axioms = new HashSet<OWLAxiom>(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java 2010-07-20 08:06:33 UTC (rev 2206) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java 2010-07-21 05:48:18 UTC (rev 2207) @@ -28,6 +28,7 @@ import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JButton; +import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; @@ -76,7 +77,7 @@ private JComboBox comboBox; private JTextField defaultGraphField; - private JButton extractButton; + private JButton searchStopButton; private JLabel messageLabel; private String progressMessage; @@ -84,6 +85,9 @@ private boolean canceled; private JProgressBar progressBar; + private JCheckBox useLinkedDataCheckBox; + private JCheckBox useCacheCheckBox; + private IncrementalInconsistencyFinder inc; private SparqlExtractOptionsPanel optionsPanel; @@ -179,10 +183,10 @@ endPointHelpPanel.setBorder(new TitledBorder("SPARQL endpoint")); panel.add(endPointHelpPanel, c); - extractButton = createButton("Search", 's'); - extractButton.setEnabled(false); + searchStopButton = createButton("Search", 's'); + searchStopButton.setEnabled(false); c.fill = GridBagConstraints.NONE; - panel.add(extractButton, c); + panel.add(searchStopButton, c); messageLabel = new JLabel(""); panel.add(messageLabel, c); @@ -190,6 +194,14 @@ progressBar = new JProgressBar(); panel.add(progressBar, c); + c.anchor = GridBagConstraints.WEST; + + useCacheCheckBox = new JCheckBox("Use cache"); + panel.add(useCacheCheckBox, c); + + useLinkedDataCheckBox = new JCheckBox("Use linked data"); + panel.add(useLinkedDataCheckBox, c); + JLabel padding = new JLabel(); c.weighty = 1.0; panel.add(padding, c); @@ -276,6 +288,7 @@ } private void searchInconsistency() { + canceled = false; messageLabel.setText("Checking SPARQL endpoint availability"); setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); mon = new ProgressMonitor(this, "Extracting fragment", "", 0, 100); @@ -309,6 +322,12 @@ } + private void stopSearching() { + canceled = true; + setCursor(Cursor.getDefaultCursor()); +// extractTask.cancel(true); + } + @SuppressWarnings("unused") private boolean URLExists(){ try { @@ -370,10 +389,20 @@ } private void setExtractButtonEnabledToValidInput(){ - extractButton.setEnabled(urlIsValid()); + searchStopButton.setEnabled(urlIsValid()); } + private void showSearchButton(){ + searchStopButton.setText("Search"); + searchStopButton.setActionCommand("Search"); + } + private void showStopButton(){ + searchStopButton.setText("Stop"); + searchStopButton.setActionCommand("Stop"); + } + + public OWLOntology getOWLOntology(){ return inc.getOntology(); } @@ -402,6 +431,8 @@ String defaultGraphURI = defaultGraphField.getText(); try { inc = new IncrementalInconsistencyFinder(); + inc.setUseLinkedData(useLinkedDataCheckBox.isSelected()); + inc.setUseCache(useCacheCheckBox.isSelected()); inc.setProgressMonitor(mon); inc.run(endpointURI, defaultGraphURI); } catch (OWLOntol... [truncated message content] |
From: <lor...@us...> - 2010-07-21 15:26:30
|
Revision: 2209 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2209&view=rev Author: lorenz_b Date: 2010-07-21 15:26:22 +0000 (Wed, 21 Jul 2010) Log Message: ----------- Finished SPARQL debug component for now. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/SPARULTranslator.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-07-21 08:24:55 UTC (rev 2208) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2010-07-21 15:26:22 UTC (rev 2209) @@ -1,7 +1,10 @@ package org.dllearner.tools.ore; import java.awt.Color; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; @@ -35,12 +38,14 @@ import org.dllearner.tools.ore.cache.DLSyntaxRenderingCache; import org.dllearner.tools.ore.cache.ManchesterSyntaxRenderingCache; import org.dllearner.tools.ore.cache.OWLEntityRenderingCache; +import org.dllearner.tools.ore.sparql.SPARULTranslator; import org.dllearner.tools.ore.ui.DescriptionLabel; import org.dllearner.tools.ore.ui.editor.OWLEntityFinder; import org.dllearner.tools.ore.ui.rendering.KeywordColorMap; import org.dllearner.tools.ore.ui.rendering.OWLEntityRenderer; import org.dllearner.utilities.owl.OWLAPIConverter; import org.mindswap.pellet.exceptions.InconsistentOntologyException; +import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; @@ -51,7 +56,9 @@ import org.semanticweb.owlapi.model.OWLObject; import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLOntologyStorageException; import org.semanticweb.owlapi.model.UnknownOWLOntologyException; @@ -193,6 +200,28 @@ } + public void saveChangesAsSPARUL(File file) throws OWLOntologyStorageException{ + try { + List<OWLOntologyChange> changes = OREManager.getInstance().getModifier().getChanges(); + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLOntology ontology = manager.createOntology(IRI.create("t")); + String str = new SPARULTranslator(manager, ontology, false).translate(changes); + FileWriter writer = new FileWriter(file); + BufferedWriter out = new BufferedWriter(writer); + out.write(str); + out.close(); + writer.close(); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + + } + + + } + public void makeOWAToCWA(){ reasoner.dematerialise(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java 2010-07-21 08:24:55 UTC (rev 2208) +++ trunk/src/dl-learner/org/dllearner/tools/ore/sparql/IncrementalInconsistencyFinder.java 2010-07-21 15:26:22 UTC (rev 2209) @@ -15,16 +15,13 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.utilities.JamonMonitorLogger; -import org.dllearner.utilities.owl.OWLVocabulary; import org.mindswap.pellet.PelletOptions; -import org.semanticweb.HermiT.Reasoner.ReasonerFactory; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; -import org.semanticweb.owlapi.model.OWLClassExpression; import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDataProperty; import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; @@ -39,12 +36,8 @@ import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLPropertyDomainAxiom; -import org.semanticweb.owlapi.reasoner.Node; import org.semanticweb.owlapi.reasoner.OWLReasoner; -import aterm.ATermAppl; - -import com.clarkparsia.owlapi.explanation.BlackBoxExplanation; import com.clarkparsia.owlapi.explanation.PelletExplanation; import com.clarkparsia.owlapiv3.XSD; import com.clarkparsia.pellet.owlapiv3.PelletReasoner; @@ -78,14 +71,9 @@ // private static final String ENDPOINT_URL = "http://localhost:8890/sparql"; // private static String DEFAULT_GRAPH_URI = "http://opencyc2.org"; //(version 2.0) - private static int RESULT_LIMIT = 100; private static int OFFSET = 100; - private static int RECURSION_DEPTH = 100; private static int AXIOM_COUNT = 100; - //stop if algorithm founds unsatisfiable class or ontology is inconsistent - private static boolean BREAK_AFTER_ERROR_FOUND = true; - private OWLOntology ontology; private OWLOntologyManager manager; private OWLDataFactory factory; @@ -100,6 +88,8 @@ private boolean useLinkedData; private boolean useCache; + private Set<String> linkedDataNamespaces; + private PelletExplanation expGen; private SparqlEndpoint endpoint; @@ -115,17 +105,16 @@ SimpleLayout layout = new SimpleLayout(); ConsoleAppender consoleAppender = new ConsoleAppender(layout); -// DailyRollingFileAppender fileAppender = new DailyRollingFileAppender(layout, "log/incremental.log", "'.'yyyy-MM-dd_HH"); logger.removeAllAppenders(); logger.addAppender(consoleAppender); -// logger.addAppender(fileAppender); - logger.setLevel(Level.INFO); + logger.setLevel(Level.OFF); PelletOptions.USE_COMPLETION_QUEUE = true; PelletOptions.USE_INCREMENTAL_CONSISTENCY = true; PelletOptions.USE_SMART_RESTORE = false; cache = Cache.getDefaultCache(); + linkedDataNamespaces = new HashSet<String>(); } @@ -136,7 +125,6 @@ public void run(String endpointURI, String defaultGraphURI){ this.endpointURI = endpointURI; this.defaultGraphURI = defaultGraphURI; - try { this.endpoint = new SparqlEndpoint(new URL(endpointURI), Collections.singletonList(defaultGraphURI), Collections.EMPTY_LIST); } catch (MalformedURLException e) { @@ -182,7 +170,7 @@ mon.setSize(disjointWithCount + equivalentClassCount + subClassOfCount + domainCount + rangeCount + subPropertyOfCount + equivalentPropertyCount + inverseOfCount + functionalCount - + inverseFunctionalCount + transitiveCount); + + inverseFunctionalCount + transitiveCount + classAssertionCount); Set<OWLClass> visitedClasses = new HashSet<OWLClass>(); @@ -195,7 +183,6 @@ Set<OWLAxiom> subClassOfAxioms = new HashSet<OWLAxiom>(); Set<OWLClassAssertionAxiom> classAssertionAxioms = new HashSet<OWLClassAssertionAxiom>(); - boolean schemaComplete = false; int i = 0; while(true){ //first we expand the ontology schema @@ -286,10 +273,10 @@ break; } //removal due to find other inconsistencies not evolving this axiom - manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( - factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Organisation")), - factory.getOWLClass(IRI.create("http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing")) - )); +// manager.removeAxiom(ontology, factory.getOWLDisjointClassesAxiom( +// factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Organisation")), +// factory.getOWLClass(IRI.create("http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing")) +// )); // manager.removeAxiom(ontology, factory.getOWLObjectPropertyRangeAxiom( // factory.getOWLObjectProperty(IRI.create("http://dbpedia.org/ontology/artist")), // factory.getOWLClass(IRI.create("http://dbpedia.org/ontology/Person")))); @@ -427,14 +414,29 @@ if(mon.isCancelled()){ break; } - if(cls.toStringID().contains("#")){ - if(visitedLinkedDataResources.contains(cls)){ - continue; + if(!linkedDataNamespaces.isEmpty()){ + for(String namespace : linkedDataNamespaces){ + if(cls.toStringID().startsWith(namespace)){ + if(visitedLinkedDataResources.contains(cls)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(cls.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(cls); + break; + } } - manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(cls.getIRI())); - mon.setProgress(ontology.getLogicalAxiomCount()); - visitedLinkedDataResources.add(cls); + } else { + if(cls.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(cls)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(cls.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(cls); + } } + } if(mon.isCancelled()){ break; @@ -446,13 +448,27 @@ if(mon.isCancelled()){ break; } - if(prop.toStringID().contains("#")){ - if(visitedLinkedDataResources.contains(prop)){ - continue; + if(!linkedDataNamespaces.isEmpty()){ + for(String namespace : linkedDataNamespaces){ + if(prop.toStringID().startsWith(namespace)){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(prop); + break; + } } - manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); - mon.setProgress(ontology.getLogicalAxiomCount()); - visitedLinkedDataResources.add(prop); + } else { + if(prop.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(prop); + } } } if(mon.isCancelled()){ @@ -465,13 +481,27 @@ if(mon.isCancelled()){ break; } - if(prop.toStringID().contains("#")){ - if(visitedLinkedDataResources.contains(prop)){ - continue; + if(!linkedDataNamespaces.isEmpty()){ + for(String namespace : linkedDataNamespaces){ + if(prop.toStringID().startsWith(namespace)){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(prop); + break; + } } - manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); - mon.setProgress(ontology.getLogicalAxiomCount()); - visitedLinkedDataResources.add(prop); + } else { + if(prop.toStringID().contains("#")){ + if(visitedLinkedDataResources.contains(prop)){ + continue; + } + manager.addAxioms(ontology, getAxiomsFromLinkedDataSource(prop.getIRI())); + mon.setProgress(ontology.getLogicalAxiomCount()); + visitedLinkedDataResources.add(prop); + } } } if(mon.isCancelled()){ @@ -497,41 +527,6 @@ showStats(); logger.info("Ontology is consistent: " + reasoner.isConsistent()); -// ((PelletReasoner)reasoner).getKB().setDoExplanation(true); -// for(ATermAppl a : ((PelletReasoner)reasoner).getKB().getExplanationSet()){ -// System.err.println(a); -// } -// for(Set<OWLAxiom> exp : expGen.getInconsistencyExplanations()){ -// for(OWLAxiom ax : exp){ -// System.out.println(ax); -// for(OWLClass cls : ax.getClassesInSignature()){ -// System.out.println(cls + " = " + getLabel(cls.toStringID())); -// } -// for(OWLObjectProperty prop : ax.getObjectPropertiesInSignature()){ -// System.out.println(prop + " = " + getLabel(prop.toStringID())); -// } -// for(OWLNamedIndividual ind : ax.getIndividualsInSignature()){ -// System.out.println(ind + " = " + getLabel(ind.toStringID())); -// } -// for(OWLDataProperty prop : ax.getDataPropertiesInSignature()){ -// System.out.println(prop + " = " + getLabel(prop.toStringID())); -// } -// } -// -// } -// try { -// ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); -// PrintWriter out = new PrintWriter( System.out ); -// renderer.startRendering( out ); -// renderer.render(expGen.getInconsistencyExplanations()); -// renderer.endRendering(); -// } catch (UnsupportedOperationException e) { -// e.printStackTrace(); -// } catch (OWLException e) { -// e.printStackTrace(); -// } catch (IOException e) { -// e.printStackTrace(); -// } } @@ -560,9 +555,11 @@ this.useCache = useCache; } + public void setLinkedDataNamespaces(Set<String> namespaces){ + this.linkedDataNamespaces = namespaces; + } - private int getAxiomCountForPredicate(Property predicate){ StringBuilder sb = new StringBuilder(); sb.append("SELECT COUNT(*) WHERE {"); Added: trunk/src/dl-learner/org/dllearner/tools/ore/sparql/SPARULTranslator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/sparql/SPARULTranslator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/sparql/SPARULTranslator.java 2010-07-21 15:26:22 UTC (rev 2209) @@ -0,0 +1,72 @@ +package org.dllearner.tools.ore.sparql; + +import java.util.List; + +import org.coode.owlapi.rdf.model.AbstractTranslator; +import org.coode.owlapi.rdf.model.RDFLiteralNode; +import org.coode.owlapi.rdf.model.RDFNode; +import org.coode.owlapi.rdf.model.RDFResourceNode; +import org.coode.owlapi.rdf.model.RDFTriple; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.RemoveAxiom; + +public class SPARULTranslator extends AbstractTranslator<RDFNode, RDFResourceNode, RDFResourceNode, RDFLiteralNode> { + + private StringBuilder sb; + + public SPARULTranslator(OWLOntologyManager manager, OWLOntology ontology, + boolean useStrongTyping) { + super(manager, ontology, useStrongTyping); + // TODO Auto-generated constructor stub + } + + public String translate(List<OWLOntologyChange> changes){ + sb = new StringBuilder(); + for(OWLOntologyChange change : changes){ + sb.append(change instanceof RemoveAxiom ? "DELETE DATA" : "INSERT DATA"); + sb.append("{"); + change.getAxiom().accept(this); + sb.append("}"); + sb.append("\n"); + } + + return sb.toString(); + } + + @Override + protected void addTriple(RDFResourceNode subject, RDFResourceNode pred, + RDFNode object) { + sb.append(subject).append(" ").append(pred).append(" ").append(object); + + } + + @Override + protected RDFResourceNode getAnonymousNode(Object key) { + return new RDFResourceNode(System.identityHashCode(key)); + } + + @Override + protected RDFLiteralNode getLiteralNode(String literal, IRI datatype) { + return new RDFLiteralNode(literal, datatype); + } + + @Override + protected RDFLiteralNode getLiteralNode(String literal, String lang) { + return new RDFLiteralNode(literal, lang); + } + + @Override + protected RDFResourceNode getPredicateNode(IRI iri) { + return new RDFResourceNode(iri); + } + + @Override + protected RDFResourceNode getResourceNode(IRI iri) { + return new RDFResourceNode(iri); + } + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java 2010-07-21 08:24:55 UTC (rev 2208) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DebugFromSparqlDialog.java 2010-07-21 15:26:22 UTC (rev 2209) @@ -10,6 +10,8 @@ import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; @@ -19,13 +21,16 @@ import java.net.URL; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.Box; +import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; @@ -33,10 +38,14 @@ import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; +import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JToggleButton; +import javax.swing.ListSelectionModel; import javax.swing.ProgressMonitor; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; @@ -78,6 +87,8 @@ private JTextField defaultGraphField; private JButton searchStopButton; + private JButton addNamespaceButton; + private JButton deleteNamespaceButton; private JLabel messageLabel; private String progressMessage; @@ -87,10 +98,15 @@ private JCheckBox useLinkedDataCheckBox; private JCheckBox useCacheCheckBox; + private JCheckBox restrictNamespacesCheckBox; + private JList linkedDataNamespaceslist; + private DefaultListModel linkedDataNamespaceslistModel; + + private IncrementalInconsistencyFinder inc; - private SparqlExtractOptionsPanel optionsPanel; + private JPanel optionsPanel; private JToggleButton optionsButton; private ImageIcon toggledIcon = new ImageIcon(OREApplication.class.getResource("toggled.gif")); private ImageIcon untoggledIcon = new ImageIcon(OREApplication.class.getResource("untoggled.gif")); @@ -188,31 +204,138 @@ c.fill = GridBagConstraints.NONE; panel.add(searchStopButton, c); + progressBar = new JProgressBar(); + panel.add(progressBar, c); + messageLabel = new JLabel(""); panel.add(messageLabel, c); - progressBar = new JProgressBar(); - panel.add(progressBar, c); + optionsButton = new JToggleButton(new AbstractAction("Advanced options") { + + /** + * + */ + private static final long serialVersionUID = -4395104616001102604L; + + @Override + public void actionPerformed(ActionEvent e) { + JToggleButton button = (JToggleButton) e.getSource(); + + if (!button.getModel().isSelected()) { + collapseOptionsPanel(); + } else { + expandOptionsPanel(); + } + + } + }); + optionsButton.setIcon(untoggledIcon); + optionsButton.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); + optionsButton.setHorizontalAlignment(JButton.LEADING); // optional + optionsButton.setBorderPainted(false); + optionsButton.setContentAreaFilled(false); + optionsButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + optionsButton.setBorderPainted(true); + optionsButton.setContentAreaFilled(true); + }; + @Override + public void mouseExited(MouseEvent e) { + optionsButton.setBorderPainted(false); + optionsButton.setContentAreaFilled(false); + } + }); + c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.WEST; + panel.add(optionsButton, c); + + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + optionsPanel = createSPARQLOptionsPanel(); + panel.add(optionsPanel, c); + optionsPanel.setVisible(false); + JLabel padding = new JLabel(); + c.weighty = 1.0; + panel.add(padding, c); + getContentPane().add(panel, BorderLayout.CENTER); + } + + private JPanel createSPARQLOptionsPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.HORIZONTAL; + + c.gridwidth = GridBagConstraints.REMAINDER; + useCacheCheckBox = new JCheckBox("Use cache"); panel.add(useCacheCheckBox, c); + c.gridwidth = 1; useLinkedDataCheckBox = new JCheckBox("Use linked data"); + useLinkedDataCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + restrictNamespacesCheckBox.setEnabled(useLinkedDataCheckBox.isSelected()); + linkedDataNamespaceslist.setEnabled(restrictNamespacesCheckBox.isSelected() && useLinkedDataCheckBox.isSelected()); + addNamespaceButton.setEnabled(restrictNamespacesCheckBox.isSelected() && useLinkedDataCheckBox.isSelected()); + deleteNamespaceButton.setEnabled(restrictNamespacesCheckBox.isSelected() && useLinkedDataCheckBox.isSelected()); + } + }); panel.add(useLinkedDataCheckBox, c); - JLabel padding = new JLabel(); - c.weighty = 1.0; - panel.add(padding, c); - getContentPane().add(panel, BorderLayout.CENTER); + c.gridwidth = GridBagConstraints.REMAINDER; + restrictNamespacesCheckBox = new JCheckBox("Restrict namespaces to:"); + restrictNamespacesCheckBox.setEnabled(false); + restrictNamespacesCheckBox.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + linkedDataNamespaceslist.setEnabled(restrictNamespacesCheckBox.isSelected() && useLinkedDataCheckBox.isSelected()); + addNamespaceButton.setEnabled(restrictNamespacesCheckBox.isSelected() && useLinkedDataCheckBox.isSelected()); + deleteNamespaceButton.setEnabled(restrictNamespacesCheckBox.isSelected() && useLinkedDataCheckBox.isSelected()); + } + }); + panel.add(restrictNamespacesCheckBox, c); + c.weightx = 1.0; + c.gridx = 1; + linkedDataNamespaceslistModel = new DefaultListModel(); + linkedDataNamespaceslist = new JList(linkedDataNamespaceslistModel); + linkedDataNamespaceslist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + linkedDataNamespaceslist.setSelectedIndex(0); + linkedDataNamespaceslist.setVisibleRowCount(5); + linkedDataNamespaceslist.setEnabled(false); + JScrollPane listScrollPane = new JScrollPane(linkedDataNamespaceslist); + c.fill = GridBagConstraints.HORIZONTAL; + panel.add(listScrollPane, c); + + Box buttonBox = Box.createHorizontalBox(); + addNamespaceButton = createButton("Add", 'a'); + addNamespaceButton.setEnabled(false); + buttonBox.add(addNamespaceButton); + + buttonBox.add(Box.createHorizontalGlue()); + buttonBox.add(Box.createHorizontalStrut(4)); + deleteNamespaceButton = createButton("Delete", 'a'); + deleteNamespaceButton.setEnabled(false); + buttonBox.add(deleteNamespaceButton); + + JPanel buttonPanel = new JPanel(); + buttonPanel.add(buttonBox); + c.anchor = GridBagConstraints.WEST; + c.fill = GridBagConstraints.HORIZONTAL; + panel.add(buttonPanel, c); + + return panel; } - @SuppressWarnings("unused") private void addPredefinedEndpoints(){ endpointToDefaultGraph = new HashMap<URI, List<String>>(); endpointToDefaultGraph.put(URI.create("http://dbpedia-live.openlinksw.com/sparql/"), Collections.singletonList("http://dbpedia.org")); - endpointToDefaultGraph.put(URI.create("http://localhost:8890/sparql"), Collections.singletonList("http://opencyc2.org")); +// endpointToDefaultGraph.put(URI.create("http://localhost:8890/sparql"), Collections.singletonList("http://opencyc2.org")); for(URI url : endpointToDefaultGraph.keySet()){ comboBox.addItem(url.toString()); } @@ -228,26 +351,12 @@ private void expandOptionsPanel(){ optionsButton.setIcon(toggledIcon); - Dimension dialogSize = getSize (); - Dimension detailSize = optionsPanel.getPreferredSize (); - dialogSize.height += detailSize.height; - setSize (dialogSize); optionsPanel.setVisible(true); - // Cause the new layout to take effect - invalidate (); - validate (); } private void collapseOptionsPanel(){ optionsButton.setIcon(untoggledIcon); - Dimension dialogSize = getSize (); - Dimension detailSize = optionsPanel.getPreferredSize (); - dialogSize.height -= detailSize.height; - setSize (dialogSize); optionsPanel.setVisible(false); - // Cause the new layout to take effect - invalidate (); - validate (); } private JButton createButton (String label, char mnemonic) { @@ -426,12 +535,21 @@ messageLabel.setText("<html><font color=\"red\">Could not connect to SPARQL endpoint</html>"); cancel(true); } - + messageLabel.setText("Searching ..."); String endpointURI = comboBox.getSelectedItem().toString(); String defaultGraphURI = defaultGraphField.getText(); try { inc = new IncrementalInconsistencyFinder(); inc.setUseLinkedData(useLinkedDataCheckBox.isSelected()); + if(restrictNamespacesCheckBox.isSelected()){ + Set<String> namespaces = new HashSet<String>(); + for(int i = 0; i < linkedDataNamespaceslistModel.size(); i++){ + namespaces.add((String)linkedDataNamespaceslistModel.get(i)); + } + inc.setLinkedDataNamespaces(namespaces); + } else { + inc.setLinkedDataNamespaces(Collections.<String>emptySet()); + } inc.setUseCache(useCacheCheckBox.isSelected()); inc.setProgressMonitor(mon); inc.run(endpointURI, defaultGraphURI); @@ -476,6 +594,22 @@ canceled = true; returnCode = CANCEL_RETURN_CODE; closeDialog(); + } else if(e.getActionCommand().equals("Add")){ + String s = (String)JOptionPane.showInputDialog( + this, + "Enter linked data namespace", + "Enter namespace", + JOptionPane.PLAIN_MESSAGE, + null, + null, + ""); + if(s != null){ + linkedDataNamespaceslistModel.addElement(s); + } + } else if(e.getActionCommand().equals("Delete")){ + if(linkedDataNamespaceslist.getSelectedValue() != null){ + linkedDataNamespaceslistModel.removeElement(linkedDataNamespaceslist.getSelectedValue()); + } } else if(e.getActionCommand().equals("endpoints")){ messageLabel.setText(""); JComboBox cb = (JComboBox)e.getSource(); @@ -546,7 +680,7 @@ SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - messageLabel.setText(progressMessage); +// messageLabel.setText(progressMessage); } }); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java 2010-07-21 08:24:55 UTC (rev 2208) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/OverrideFileChooser.java 2010-07-21 15:26:22 UTC (rev 2209) @@ -22,7 +22,11 @@ int ans = JOptionPane.showConfirmDialog(null, "" + f.getName() + " already exists. Overwrite?", "Confirm Overwrite", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (ans == JOptionPane.OK_OPTION) { try { - OREManager.getInstance().saveOntology(f); + if(getFileFilter().getDescription().equals("SPARUL")){ + OREManager.getInstance().saveChangesAsSPARUL(f); + } else { + OREManager.getInstance().saveOntology(f); + } super.approveSelection(); } catch (OWLOntologyStorageException e) { JOptionPane.showMessageDialog(this, "Could not save file: " + e.getCause(), "Error", JOptionPane.ERROR_MESSAGE); @@ -31,7 +35,11 @@ } } else { try { - OREManager.getInstance().saveOntology(f); + if(getFileFilter().getDescription().equals("SPARUL")){ + OREManager.getInstance().saveChangesAsSPARUL(f); + } else { + OREManager.getInstance().saveOntology(f); + } super.approveSelection(); } catch (OWLOntologyStorageException e) { JOptionPane.showMessageDialog(this, "Could not save file: " + e.getCause(), "Error", JOptionPane.ERROR_MESSAGE); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2010-07-21 08:24:55 UTC (rev 2208) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2010-07-21 15:26:22 UTC (rev 2209) @@ -23,16 +23,30 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; +import java.util.Set; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; +import org.coode.owlapi.rdf.model.RDFTranslator; import org.dllearner.tools.ore.LearningManager; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.LearningManager.LearningMode; +import org.dllearner.tools.ore.sparql.SPARULTranslator; import org.dllearner.tools.ore.ui.OverrideFileChooser; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.SavePanel; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyFormat; +import org.semanticweb.owlapi.model.OWLOntologyManager; /** * Wizard panel descriptor that provides saving ontology and going back to class choose panel. @@ -55,6 +69,22 @@ setPanelDescriptorIdentifier(IDENTIFIER); setPanelComponent(savePanel); + fc.addChoosableFileFilter(new FileFilter() { + + @Override + public String getDescription() { + return "SPARUL"; + } + + @Override + public boolean accept(File f) { + if (f.isDirectory()) { + return true; + } + return f.getName().toLowerCase().endsWith(".sparul") + || f.getName().toLowerCase().endsWith(".sparul"); + } + }); fc.setFileFilter(new FileFilter() { @Override @@ -72,6 +102,7 @@ } }); + } @Override @@ -124,6 +155,7 @@ } private boolean saveOntology(){ + int ret = fc.showSaveDialog(savePanel); if(ret == JFileChooser.APPROVE_OPTION){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2010-07-21 08:24:55 UTC (rev 2208) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2010-07-21 15:26:22 UTC (rev 2209) @@ -91,7 +91,7 @@ box.add(Box.createVerticalStrut(strutHeight)); - debugFromSparqlEndpointLink = new LinkLabel("Debug OWL-Ontology from Sparql-Endpoint"); + debugFromSparqlEndpointLink = new LinkLabel("Search inconsistency at Sparql-Endpoint"); debugFromSparqlEndpointLink.setName("debugFromSparqlEndpointLink"); box.add(debugFromSparqlEndpointLink); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |