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. |