From: <lor...@us...> - 2013-04-24 12:12:55
|
Revision: 3926 http://sourceforge.net/p/dl-learner/code/3926 Author: lorenz_b Date: 2013-04-24 12:12:51 +0000 (Wed, 24 Apr 2013) Log Message: ----------- Modified pattern analyzing class. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-21 11:20:26 UTC (rev 3925) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-24 12:12:51 UTC (rev 3926) @@ -11,19 +11,20 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.LinkedList; +import java.util.List; import java.util.Queue; import java.util.prefs.Preferences; -import org.coode.owlapi.functionalrenderer.OWLFunctionalSyntaxRenderer; import org.dllearner.kb.dataset.OWLOntologyDataset; import org.dllearner.kb.repository.OntologyRepository; import org.dllearner.kb.repository.OntologyRepositoryEntry; import org.ini4j.IniPreferences; import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.AbstractOWLRenderer; import org.semanticweb.owlapi.io.OWLObjectRenderer; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; @@ -31,16 +32,12 @@ import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; import org.semanticweb.owlapi.model.OWLLogicalAxiom; import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException; import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyID; import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; -import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; @@ -78,6 +75,8 @@ private PreparedStatement insertOntologyPatternPs; private OWLObjectRenderer axiomRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + + private boolean randomOrder = true; public OWLAxiomPatternFinder(OWLOntologyDataset dataset) { @@ -147,8 +146,8 @@ statement.execute("CREATE TABLE IF NOT EXISTS Pattern (" + "id MEDIUMINT NOT NULL AUTO_INCREMENT," - + "pattern VARCHAR(2000) NOT NULL," - + "pattern_pretty VARCHAR(2000) NOT NULL," + + "pattern VARCHAR(20000) NOT NULL," + + "pattern_pretty VARCHAR(20000) NOT NULL," + "PRIMARY KEY(id)," + "INDEX(pattern)) DEFAULT CHARSET=utf8"); @@ -164,8 +163,8 @@ + "ontology_id MEDIUMINT NOT NULL," + "pattern_id MEDIUMINT NOT NULL," + "occurrences INTEGER(8) NOT NULL," - + "FOREIGN KEY (ontology_id) REFERENCES Ontology(id)," - + "FOREIGN KEY (pattern_id) REFERENCES Pattern(id)," + + "FOREIGN KEY (ontology_id) REFERENCES Ontology(id) ON DELETE CASCADE," + + "FOREIGN KEY (pattern_id) REFERENCES Pattern(id) ON DELETE CASCADE," + "PRIMARY KEY(ontology_id, pattern_id)) DEFAULT CHARSET=utf8"); } catch (SQLException e) { e.printStackTrace(); @@ -191,6 +190,7 @@ insertPatternIdPs.setString(2, axiomRenderer.render(axiom)); insertPatternIdPs.execute(); } catch (SQLException e) { + System.out.println(axiomString.length()); e.printStackTrace(); } //get the auto generated ID @@ -218,6 +218,19 @@ return false; } + private void addOntologyError(URI physicalURI, Exception ex){ + String url = physicalURI.toString(); + //add ontology loading/parsing/... error entry + try { + insertOntologyPs.setString(1, url); + insertOntologyPs.setString(2, "ERROR:" + ex.getClass().getSimpleName() + "->" + ex.getMessage()); + insertOntologyPs.setString(3, repository.getName()); + insertOntologyPs.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + private int addOntology(URI physicalURI, OWLOntology ontology){ String url = physicalURI.toString(); String ontologyIRI = ontology.getOntologyID().getOntologyIRI().toString(); @@ -264,7 +277,7 @@ insertOntologyPatternPs.setInt(3, occurrences); insertOntologyPatternPs.execute(); } catch (SQLException e) { - e.printStackTrace(); + System.err.println("Adding pattern\n" + pattern + "\nfailed." + e.getMessage()); } } } @@ -272,6 +285,11 @@ public void start() { OWLAxiomRenamer renamer = new OWLAxiomRenamer(dataFactory); Collection<OntologyRepositoryEntry> entries = repository.getEntries(); + if(randomOrder){ + List<OntologyRepositoryEntry> entryList = new ArrayList<OntologyRepositoryEntry>(repository.getEntries()); + Collections.shuffle(entryList); + entries = entryList; + } Multiset<OWLAxiom> allAxiomPatterns = HashMultiset.create(); for (OntologyRepositoryEntry entry : entries) { URI uri = entry.getPhysicalURI(); @@ -290,8 +308,10 @@ // System.out.println(owlAxiom + ": " + allAxiomPatterns.count(owlAxiom)); } manager.removeOntology(ontology); - } catch (OWLOntologyCreationException e) { + } catch (OWLOntologyAlreadyExistsException e) { e.printStackTrace(); + } catch (Exception e){ + addOntologyError(uri, e); } } Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-21 11:20:26 UTC (rev 3925) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-24 12:12:51 UTC (rev 3926) @@ -90,7 +90,7 @@ } public Query asQuery(String rootVariable, OWLClassExpression expr){ - String queryString = "SELECT " + rootVariable + " WHERE {"; + String queryString = "SELECT DISTINCT " + rootVariable + " WHERE {"; queryString += convert(rootVariable, expr); queryString += "}"; return QueryFactory.create(queryString, Syntax.syntaxARQ); @@ -149,7 +149,7 @@ private String triple(String subject, String predicate, OWLLiteral object){ return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + - "\"" + object + "\"^^<" + object.getDatatype().toStringID() + ">.\n"; + render(object) + ".\n"; } private String triple(String subject, String predicate, OWLIndividual object){ @@ -157,6 +157,10 @@ (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + "<" + object.toStringID() + ">.\n"; } + + private String render(OWLLiteral literal){ + return "\"" + literal + "\"^^<" + literal.getDatatype().toStringID() + ">"; + } @Override public void visit(OWLObjectProperty property) { @@ -480,6 +484,20 @@ @Override public void visit(OWLDataOneOf node) { + String subject = variables.peek(); + if(modalDepth() == 1){ + sparql += triple(subject, "?p", "?o"); + } + sparql += "FILTER(" + subject + " IN ("; + String values = ""; + for (OWLLiteral value : node.getValues()) { + if(!values.isEmpty()){ + values += ","; + } + values += render(value); + } + sparql += values; + sparql += "))"; } @Override @@ -620,6 +638,10 @@ query = converter.asQuery(rootVar, expr).toString(); System.out.println(expr + "\n" + query); + expr = df.getOWLDataAllValuesFrom(dpT,df.getOWLDataOneOf(lit)); + query = converter.asQuery(rootVar, expr).toString(); + System.out.println(expr + "\n" + query); + } Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java 2013-04-21 11:20:26 UTC (rev 3925) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java 2013-04-24 12:12:51 UTC (rev 3926) @@ -1,6 +1,7 @@ package org.dllearner.algorithms.pattern; import org.dllearner.kb.repository.OntologyRepository; +import org.dllearner.kb.repository.bioportal.BioPortalRepository; import org.dllearner.kb.repository.tones.TONESRepository; import org.junit.Before; import org.junit.Test; @@ -23,5 +24,13 @@ OWLAxiomPatternFinder patternFinder = new OWLAxiomPatternFinder(repository); patternFinder.start(); } + + @Test + public void testBioPortalRepository(){ + OntologyRepository repository = new BioPortalRepository(); + repository.initialize(); + OWLAxiomPatternFinder patternFinder = new OWLAxiomPatternFinder(repository); + patternFinder.start(); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |