From: <lor...@us...> - 2009-05-07 08:45:53
|
Revision: 1745 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1745&view=rev Author: lorenz_b Date: 2009-05-07 08:45:50 +0000 (Thu, 07 May 2009) Log Message: ----------- new panel to show explanations rendered in OWL-syntax or DL-syntax Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTest.java trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/UnsatClassesListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/information.png Added: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-05-07 08:45:50 UTC (rev 1745) @@ -0,0 +1,203 @@ +package org.dllearner.tools.ore; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; + +import javax.swing.ButtonGroup; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.DefaultTableModel; + +import org.jdesktop.swingx.JXList; +import org.jdesktop.swingx.JXTable; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; + +public class ExplanationPanel extends JPanel implements ListSelectionListener, ActionListener{ + + private JXList unsatList; + private JSplitPane splitPane; + private JScrollPane listScrollPane; + private JScrollPane explanationsScrollPane; + private JPanel explanationsPanel; + private JPanel buttonExplanationsPanel; + private JPanel buttonPanel; + private ButtonGroup explanationType; + private JRadioButton regularButton; + private JRadioButton laconicButton; + private OWLSyntaxTableCellRenderer tableRenderer; + private UnsatClassesListCellRenderer listRenderer; + + + private ExplanationManager manager; + private OWLClass unsatClass; + /** + * + */ + private static final long serialVersionUID = 2213073383532597460L; + + public ExplanationPanel(ExplanationManager manager){ + + this.manager = manager; + + Dimension minimumSize = new Dimension(400, 400); + + tableRenderer = new OWLSyntaxTableCellRenderer(); + listRenderer = new UnsatClassesListCellRenderer(manager); + + + + unsatList = new JXList(manager.getUnsatisfiableClasses().toArray()); + unsatList.addListSelectionListener(this); + unsatList.setCellRenderer(listRenderer); + listScrollPane = new JScrollPane(unsatList); + listScrollPane.setPreferredSize(minimumSize); + + explanationsPanel = new JPanel(); + explanationsPanel.setLayout(new GridLayout(0,1)); + explanationsScrollPane = new JScrollPane(explanationsPanel); + explanationsScrollPane.setPreferredSize(minimumSize); + + regularButton = new JRadioButton("regular", true); + regularButton.setActionCommand("regular"); + regularButton.addActionListener(this); + laconicButton = new JRadioButton("laconic"); + laconicButton.setActionCommand("laconic"); + laconicButton.addActionListener(this); + explanationType = new ButtonGroup(); + explanationType.add(regularButton); + explanationType.add(laconicButton); + buttonPanel = new JPanel(); + buttonPanel.add(regularButton); + buttonPanel.add(laconicButton); + + buttonExplanationsPanel = new JPanel(); + buttonExplanationsPanel.setLayout(new BorderLayout()); + buttonExplanationsPanel.add(explanationsScrollPane, BorderLayout.CENTER); + buttonExplanationsPanel.add(buttonPanel, BorderLayout.NORTH); + + splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, buttonExplanationsPanel); + splitPane.setOneTouchExpandable(true); + splitPane.setDividerLocation(150); + + + add(splitPane); + } + + private void addExplanationTable(List<OWLAxiom> explanation, int number){ + + + JXTable expTable = new JXTable(); + DefaultTableModel model = new DefaultTableModel(); + model.addColumn("axiom", explanation.toArray()); + expTable.setModel(model); + expTable.setDefaultRenderer(Object.class, tableRenderer); + + + +// DLSyntaxObjectRenderer r = new DLSyntaxObjectRenderer(); +// Vector<String> t = new Vector<String>(); +// for(OWLAxiom ax : explanation) +// t.add(r.render(ax)); +// model.addColumn("axiom", t); + +// expTable.setModel(new ExplanationTableModel()); +// expTable.setDefaultRenderer(JButton.class, new ExplanationTableCellRenderer(expTable.getDefaultRenderer(JButton.class))); +// expTable.addMouseListener(new JTableButtonMouseListener(expTable)); + + expTable.getColumn(0).sizeWidthToFit(); + expTable.setSize(300, 300); + expTable.setEditable(false); + + + + + +// JPanel tablePanel = new JPanel();tablePanel.setLayout(new GridLayout(0,1)); +// +// tablePanel.add(expTable); +// tablePanel.setPreferredSize(new Dimension(300, 300)); +// tablePanel.setBorder(BorderFactory.createTitledBorder("explanation " + number)); + + explanationsPanel.add(new JScrollPane(expTable)); + + } + + private void clearExplanationsPanel(){ + explanationsPanel.removeAll(); + } + + private void showLaconicExplanations(){ + clearExplanationsPanel(); + int counter = 1; + for(List<OWLAxiom> explanation : manager.getOrderedLaconicUnsatisfiableExplanations(unsatClass)){ + addExplanationTable(explanation, counter); + counter++; + } + this.updateUI(); + } + + private void showRegularExplanations(){ + clearExplanationsPanel(); + int counter = 1; + for(List<OWLAxiom> explanation : manager.getOrderedUnsatisfiableExplanations(unsatClass)){ + addExplanationTable(explanation, counter); + counter++; + } + this.updateUI(); + } + + + @Override + public void valueChanged(ListSelectionEvent e) { + + unsatClass = (OWLClass)((JXList)e.getSource()).getSelectedValue(); + + if(regularButton.isSelected()){ + showRegularExplanations(); + } else { + showLaconicExplanations(); + } + + } + + + + @Override + public void actionPerformed(ActionEvent e) { + if(e.getActionCommand().equals("regular")){ + showRegularExplanations(); + } else if(e.getActionCommand().equals("laconic") && !unsatList.isSelectionEmpty()){ + showLaconicExplanations(); + + } + + } + + public static void main(String[] args){ + + String file = "file:examples/ore/tambis.owl"; + + ExplanationManager manager = ExplanationManager.getExplanationManager(file); + ExplanationPanel panel = new ExplanationPanel(manager); + + + JFrame test = new JFrame(); + test.setLayout(new GridLayout(0, 1)); + test.setSize(new Dimension(800, 500)); + test.add(panel); + test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + test.setVisible(true); + + +} +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTest.java 2009-05-07 08:42:31 UTC (rev 1744) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTest.java 2009-05-07 08:45:50 UTC (rev 1745) @@ -15,19 +15,23 @@ import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyManager; +import com.clarkparsia.explanation.PelletExplanation; +import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; + @SuppressWarnings("unused") public class ExplanationTest { // private static final String file = "file:examples/ore/inconsistent.owl"; - private static final String file = "file:examples/ore/buggyPolicy.owl"; + private static final String file = "file:examples/ore/koala.owl"; private static final String NS = "http://cohse.semanticweb.org/ontologies/people#"; /** * @param args */ public static void main(String[] args) { - /* + + try { PelletExplanation.setup(); @@ -94,8 +98,8 @@ // TODO Auto-generated catch block e.printStackTrace(); } - */ - } + + } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java 2009-05-07 08:45:50 UTC (rev 1745) @@ -0,0 +1,108 @@ +package org.dllearner.tools.ore; + +import java.io.StringWriter; +import java.util.StringTokenizer; + +import javax.swing.table.DefaultTableCellRenderer; + +import org.semanticweb.owl.model.OWLAxiom; + +import com.clarkparsia.explanation.io.manchester.Keyword; +import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxObjectRenderer; +import com.clarkparsia.explanation.io.manchester.TextBlockWriter; + +public class OWLSyntaxTableCellRenderer extends DefaultTableCellRenderer { + + /** + * + */ + private static final long serialVersionUID = 6528440084244154347L; + + + private StringWriter buffer; + private TextBlockWriter writer; + private ManchesterSyntaxObjectRenderer renderer; +// private List<String> oldAxioms; + + public OWLSyntaxTableCellRenderer(){ + super(); + buffer = new StringWriter(); + writer = new TextBlockWriter(buffer); + renderer = new ManchesterSyntaxObjectRenderer(writer); + renderer.setWrapLines( false ); + renderer.setSmartIndent( true ); +// oldAxioms = new ArrayList<String>(); + + } + @Override + protected void setValue(Object value) { + + if(value instanceof OWLAxiom){ + + + ((OWLAxiom)value).accept(renderer); + + writer.flush(); + String newAxiom = buffer.toString(); +// System.out.println("new axiom " + newAxiom); +// if(!oldAxioms.isEmpty()){ +// StringTokenizer st = new StringTokenizer(newAxiom); +// int index; +// String token = st.nextToken(); +// for(String s : oldAxioms){System.out.println("old axiom " + s); +// +// +// if(s.contains(token)){ +// index = s.indexOf(token); +// if(index>0){ +// StringBuffer bf = new StringBuffer(); +// for(int i = 0;i<=index+10;i++){ +// bf.append(" "); +// } +// bf.append(newAxiom); +// newAxiom = bf.toString(); +// break; +// } +// } +// +// } +// } + StringTokenizer st = new StringTokenizer(newAxiom); + + StringBuffer bf = new StringBuffer(); + bf.append("<html>"); + String token; + while(st.hasMoreTokens()){ + token = st.nextToken(); + String color = "black"; + boolean isReserved = false; + for(Keyword key : Keyword.values()){ + if(token.equals(key.getLabel())){ + color = key.getColor(); + isReserved = true;break; + } + } + if(isReserved){ + bf.append("<font color=" + color + ">" + token + " </font>"); + } else { + bf.append(" " + token + " "); + } + } + bf.append("</html>"); + newAxiom = bf.toString(); + setText(newAxiom); +// oldAxioms.add(buffer.toString()); + buffer.getBuffer().delete(0, buffer.toString().length()); + } else { + super.setValue(value); + } + +// ManchesterOWLSyntaxOWLObjectRendererImpl renderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + + +//// DLSyntaxObjectRenderer renderer = new DLSyntaxObjectRenderer(); +// setText(renderer.render((OWLAxiom) value)); + + + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-05-07 08:42:31 UTC (rev 1744) +++ trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-05-07 08:45:50 UTC (rev 1745) @@ -22,12 +22,21 @@ 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.KnowledgeSource; import org.dllearner.core.LearningAlgorithm; +import org.dllearner.core.LearningProblem; +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.OWLAPIReasoner; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL; import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; -import org.dllearner.utilities.learn.LearnSPARQLConfiguration; /** * Test class for SPARQL mode. @@ -38,6 +47,7 @@ @SuppressWarnings("unused") public static void main(String[] args){ + ComponentManager cm = ComponentManager.getInstance(); SparqlEndpoint endPoint = SparqlEndpoint.getEndpointDBpedia(); @@ -49,26 +59,33 @@ AutomaticNegativeExampleFinderSPARQL neg = new AutomaticNegativeExampleFinderSPARQL(posExamples, task, new TreeSet<String>()); SortedSet<String> negExamples = neg.getNegativeExamples(20); + System.out.println(negExamples); - LearnSPARQLConfiguration conf = new LearnSPARQLConfiguration(); - // TODO Please update class to either use ComponentManager or - // add a convenience constructor to org.dllearner.utilities.components.ComponentCombo -// LearnSparql learn = new LearnSparql(conf); - LearningAlgorithm la = null; - -// try { - //la = learn.learn(posExamples, negExamples, OWLAPIReasoner.class); -// } catch (ComponentInitException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } catch (LearningProblemUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - la.start(); + try { + String example = "http://dbpedia.org/resource/Angela_Merkel"; + + + + KnowledgeSource ks = cm.knowledgeSource(SparqlKnowledgeSource.class); + cm.applyConfigEntry(ks, "predefinedEndpoint", "DBPEDIA"); + ks.init(); + ReasonerComponent reasoner = cm.reasoner(OWLAPIReasoner.class, ks); + reasoner.init(); + LearningProblem lp = cm.learningProblem(ClassLearningProblem.class, reasoner); + lp.init(); + LearningAlgorithm la = cm.learningAlgorithm(CELOE.class, lp, reasoner); + la.init(); + + la.start(); + } catch (ComponentInitException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (LearningProblemUnsupportedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/UnsatClassesListCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/UnsatClassesListCellRenderer.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/UnsatClassesListCellRenderer.java 2009-05-07 08:45:50 UTC (rev 1745) @@ -0,0 +1,50 @@ +package org.dllearner.tools.ore; + +import java.awt.Color; +import java.awt.Component; +import java.util.Set; + +import javax.swing.DefaultListCellRenderer; +import javax.swing.ImageIcon; +import javax.swing.JList; + +import org.semanticweb.owl.model.OWLClass; + +public class UnsatClassesListCellRenderer extends DefaultListCellRenderer { + + /** + * + */ + private static final long serialVersionUID = -6705062445027715783L; + + private ExplanationManager manager; + private Set<OWLClass> rootClasses; + + public UnsatClassesListCellRenderer(ExplanationManager man){ + this.manager = man; + rootClasses = manager.getRootUnsatisfiableClasses(); + } + + @Override + public Component getListCellRendererComponent(JList list, Object value, + int index, boolean isSelected, boolean cellHasFocus) { + + + if(rootClasses.contains((OWLClass)value)){ + setText(value.toString() ); + setIcon(new ImageIcon("src/dl-learner/org/dllearner/tools/ore/information.png")); + setHorizontalTextPosition(LEADING); + } + else { + setText(value.toString()); + setIcon(null); + } + if(isSelected){ + setBackground(new Color(242, 242, 242)); + } else { + setBackground(Color.WHITE); + } + return this; + } + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/information.png =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/information.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |