From: <lor...@us...> - 2011-11-11 09:22:14
|
Revision: 3395 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3395&view=rev Author: lorenz_b Date: 2011-11-11 09:22:08 +0000 (Fri, 11 Nov 2011) Log Message: ----------- Added method to select resources randomly - very slow. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-10 14:58:27 UTC (rev 3394) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-11 09:22:08 UTC (rev 3395) @@ -55,6 +55,28 @@ return resources; } + private Set<String> extractSampleResourcesRandom(int size){ + logger.info("Extracting " + sampleSize + "sample resources..."); + long startTime = System.currentTimeMillis(); + Set<String> resources = new HashSet<String>(); + + String query = "SELECT COUNT(DISTINCT ?s) WHERE {?s a ?type}"; + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + int max = rs.next().getLiteral(rs.getResultVars().get(0)).getInt(); + + for(int i = 0; i < size; i++){ + int random = (int)(Math.random() * max); + query = String.format("SELECT DISTINCT ?s WHERE {?s a ?type} LIMIT 1 OFFSET %d", random); + System.out.println(random); + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + resources.add(rs.next().getResource("s").getURI());System.out.println(resources); + } + + + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); + return resources; + } + private OWLOntology extractSampleModule(Set<String> resources){ logger.info("Extracting sample module..."); long startTime = System.currentTimeMillis(); @@ -94,8 +116,8 @@ OWLOntology sample; OWLOntology merged; OWLReasoner reasoner; - for(int i = 0; i < 10; i++){ - Set<String> resources = extractSampleResources(i * sampleSize); + for(int i = 0; i < 1; i++){ + Set<String> resources = extractSampleResourcesRandom(sampleSize); sample = extractSampleModule(resources); Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-11-23 07:25:47
|
Revision: 3429 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3429&view=rev Author: lorenz_b Date: 2011-11-23 07:25:39 +0000 (Wed, 23 Nov 2011) Log Message: ----------- Continued script. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-22 21:19:51 UTC (rev 3428) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-23 07:25:39 UTC (rev 3429) @@ -4,11 +4,15 @@ import java.io.ByteArrayOutputStream; import java.net.URL; import java.util.Collections; +import java.util.EnumSet; import java.util.HashSet; import java.util.Set; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.apache.log4j.SimpleLayout; import org.dllearner.algorithm.qtl.util.ModelGenerator; import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; import org.dllearner.kb.sparql.ExtractionDBCache; @@ -16,11 +20,14 @@ import org.dllearner.kb.sparql.SparqlQuery; 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.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.reasoner.OWLReasoner; +import com.clarkparsia.owlapi.explanation.PelletExplanation; +import com.clarkparsia.pellet.owlapiv3.PelletReasoner; import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.Model; @@ -31,32 +38,47 @@ private SparqlEndpoint endpoint; private ExtractionDBCache cache = new ExtractionDBCache("cache"); - private int sampleSize = 1000; - private int depth = 3; + private int sampleSize = 10; + private int depth = 5; + private int nrOfChunks = 10; + private int maxNrOfExplanations = 10; private Logger logger = Logger.getLogger(SPARQLSampleDebugging.class); + static {PelletExplanation.setup();} + public SPARQLSampleDebugging(SparqlEndpoint endpoint) { this.endpoint = endpoint; } - private Set<String> extractSampleResources(int offset){ - logger.info("Extracting " + sampleSize + "sample resources..."); + private Set<String> extractSampleResourcesChunked(int size){ + logger.info("Extracting " + sampleSize + " sample resources..."); long startTime = System.currentTimeMillis(); Set<String> resources = new HashSet<String>(); - String query = String.format("SELECT DISTINCT ?s WHERE {?s a ?type} LIMIT %d OFFSET %d", sampleSize, offset); + String query = "SELECT COUNT(DISTINCT ?s) WHERE {?s a ?type}"; ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + int max = rs.next().getLiteral(rs.getResultVars().get(0)).getInt(); - while(rs.hasNext()){ - resources.add(rs.next().getResource("s").getURI()); + for(int i = 0; i < nrOfChunks; i++){ + int offset = (int)(Math.random() * max); + offset = Math.min(offset, offset-(size/nrOfChunks)); + + query = String.format("SELECT DISTINCT ?s WHERE {?s a ?type} LIMIT %d OFFSET %d", (size/nrOfChunks), offset); + logger.info(query); + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + + while(rs.hasNext()){ + resources.add(rs.next().getResource("s").getURI()); + } } + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); return resources; } - private Set<String> extractSampleResourcesRandom(int size){ - logger.info("Extracting " + sampleSize + "sample resources..."); + private Set<String> extractSampleResourcesSingle(int size){ + logger.info("Extracting " + sampleSize + " sample resources..."); long startTime = System.currentTimeMillis(); Set<String> resources = new HashSet<String>(); @@ -67,9 +89,8 @@ for(int i = 0; i < size; i++){ int random = (int)(Math.random() * max); query = String.format("SELECT DISTINCT ?s WHERE {?s a ?type} LIMIT 1 OFFSET %d", random); - System.out.println(random); rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); - resources.add(rs.next().getResource("s").getURI());System.out.println(resources); + resources.add(rs.next().getResource("s").getURI()); } @@ -90,9 +111,31 @@ } + private Set<Set<OWLAxiom>> computeExplanations(OWLOntology ontology){ + logger.info("Computing explanations..."); + long startTime = System.currentTimeMillis(); + boolean useGlassBox = true; + PelletExplanation expGen = new PelletExplanation(ontology, useGlassBox); + Set<Set<OWLAxiom>> explanations = expGen.getInconsistencyExplanations(maxNrOfExplanations); + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); + return explanations; + } + + private Set<Set<OWLAxiom>> computeExplanations(PelletReasoner reasoner){ + logger.info("Computing explanations..."); + long startTime = System.currentTimeMillis(); + PelletExplanation expGen = new PelletExplanation(reasoner); + Set<Set<OWLAxiom>> explanations = expGen.getInconsistencyExplanations(maxNrOfExplanations); + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); + return explanations; + } + private OWLOntology loadReferenceOntology() throws OWLOntologyCreationException{ + long startTime = System.currentTimeMillis(); + logger.info("Loading reference ontology..."); OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument( getClass().getClassLoader().getResourceAsStream("dbpedia_0.75.owl")); + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); return ontology; } @@ -113,38 +156,112 @@ public void run() throws OWLOntologyCreationException{ OWLOntology reference = loadReferenceOntology(); + Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); + ontologies.add(reference); OWLOntology sample; OWLOntology merged; OWLReasoner reasoner; - for(int i = 0; i < 1; i++){ - Set<String> resources = extractSampleResourcesRandom(sampleSize); + for(int i = 0; i < 100; i++){ + Set<String> resources = extractSampleResourcesChunked(sampleSize); sample = extractSampleModule(resources); - Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); ontologies.add(sample); - ontologies.add(reference); merged = OWLManager.createOWLOntologyManager().createOntology(IRI.create("http://merged.en"), ontologies); reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(merged); + Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); + pelletLogger.setLevel(Level.OFF); + boolean isConsistent = reasoner.isConsistent(); logger.info("Consistent: " + isConsistent); - System.out.println(isConsistent); reasoner.dispose(); + if(!isConsistent){ + Set<Set<OWLAxiom>> explanations = computeExplanations(merged); + for(Set<OWLAxiom> explanation : explanations){ + System.out.println(explanation); + } + break; + + } + ontologies.remove(sample); + } } + public void run2() throws OWLOntologyCreationException{ + OWLOntology reference = loadReferenceOntology(); + OWLReasoner reasoner = PelletReasonerFactory.getInstance().createReasoner(reference); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + + Set<String> resources = extractSampleResourcesChunked(sampleSize); + for(String resource : resources){ + logger.info("Resource " + resource); + OWLOntology module = extractSampleModule(Collections.singleton(resource)); + man.addAxioms(reference, module.getLogicalAxioms()); + reasoner.flush(); + logger.info(reasoner.getRootOntology().getLogicalAxiomCount()); + boolean isConsistent = reasoner.isConsistent(); + logger.info("Consistent: " + isConsistent); + if(!isConsistent){ + Set<Set<OWLAxiom>> explanations = computeExplanations(reference); + for(Set<OWLAxiom> explanation : explanations){ + logger.info(explanation); + } + } + man.removeAxioms(reference, module.getLogicalAxioms()); + + } + + } + + public void run3() throws OWLOntologyCreationException{ + OWLOntology reference = loadReferenceOntology(); + Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); + ontologies.add(reference); + PelletReasoner reasoner; + OWLOntology merged; + OWLOntology module; + + Set<String> resources = extractSampleResourcesChunked(sampleSize); + for(String resource : resources){ + logger.info("Resource " + resource); + module = extractSampleModule(Collections.singleton(resource)); + ontologies.add(module); + merged = OWLManager.createOWLOntologyManager().createOntology(IRI.create("http://merged.en"), ontologies); + reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(merged); + boolean isConsistent = reasoner.isConsistent(); + logger.info("Consistent: " + isConsistent); + if(!isConsistent){ + Set<Set<OWLAxiom>> explanations = computeExplanations(reasoner); + for(Set<OWLAxiom> explanation : explanations){ + logger.info(explanation); + } + } + ontologies.remove(module); + reasoner.dispose(); + + } + + } + /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Logger.getRootLogger().setLevel(Level.INFO); + Logger.getRootLogger().removeAllAppenders(); + Logger.getRootLogger().addAppender(new ConsoleAppender(new SimpleLayout())); + Logger.getRootLogger().addAppender(new FileAppender(new SimpleLayout(), "log/debug.log")); Logger.getLogger(SPARQLSampleDebugging.class).setLevel(Level.INFO); + java.util.logging.Logger pelletLogger = java.util.logging.Logger.getLogger("com.clarkparsia.pellet"); + pelletLogger.setLevel(java.util.logging.Level.OFF); + SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); - new SPARQLSampleDebugging(endpoint).run(); + new SPARQLSampleDebugging(endpoint).run3(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-11-27 22:14:28
|
Revision: 3438 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3438&view=rev Author: lorenz_b Date: 2011-11-27 22:14:21 +0000 (Sun, 27 Nov 2011) Log Message: ----------- Added simple method which checks consistency with anti-pattern. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-24 18:11:01 UTC (rev 3437) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-27 22:14:21 UTC (rev 3438) @@ -2,10 +2,13 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.net.URL; import java.util.Collections; -import java.util.EnumSet; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.apache.log4j.ConsoleAppender; @@ -19,6 +22,7 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; 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.OWLOntology; @@ -29,19 +33,26 @@ import com.clarkparsia.owlapi.explanation.PelletExplanation; 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.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.rdf.model.Resource; +import com.hp.hpl.jena.vocabulary.OWL; public class SPARQLSampleDebugging { private SparqlEndpoint endpoint; private ExtractionDBCache cache = new ExtractionDBCache("cache"); - private int sampleSize = 10; - private int depth = 5; - private int nrOfChunks = 10; - private int maxNrOfExplanations = 10; + private int sampleSize = 100; + private int depth = 4; + private int nrOfChunks = 100; + private int maxNrOfExplanations = 20; private Logger logger = Logger.getLogger(SPARQLSampleDebugging.class); @@ -235,9 +246,22 @@ logger.info("Consistent: " + isConsistent); if(!isConsistent){ Set<Set<OWLAxiom>> explanations = computeExplanations(reasoner); + logger.info("Found " + explanations.size() + " explanations."); + Map<AxiomType, Integer> axiomType2CountMap = new HashMap<AxiomType, Integer>(); for(Set<OWLAxiom> explanation : explanations){ logger.info(explanation); + for(OWLAxiom axiom : explanation){ + Integer cnt = axiomType2CountMap.get(axiom.getAxiomType()); + if(cnt == null){ + cnt = Integer.valueOf(0); + } + cnt = Integer.valueOf(cnt + 1); + axiomType2CountMap.put(axiom.getAxiomType(), cnt); + } } + for(Entry<AxiomType, Integer> entry : axiomType2CountMap.entrySet()){ + logger.info(entry.getKey() + "\t: " + entry.getValue()); + } } ontologies.remove(module); reasoner.dispose(); @@ -246,6 +270,32 @@ } + public void runPatternBasedDetection(){ + Model model = ModelFactory.createDefaultModel(); + + //read schema + InputStream in = getClass().getClassLoader().getResourceAsStream("dbpedia_0.75.owl"); + model.read(in, null); + + //read data + ModelGenerator modelGen = new ModelGenerator(endpoint, cache); + model.add(modelGen.createModel("http://dbpedia.org/resource/Leipzig", Strategy.CHUNKS, depth)); + + //query for conflicts + String queryString = "SELECT ?s WHERE {?type1 <" + OWL.disjointWith + "> ?type2. ?s a ?type1. ?s a ?type2.} LIMIT 1"; + Query query = QueryFactory.create(queryString) ; + QueryExecution qexec = QueryExecutionFactory.create(query, model) ; + try { + ResultSet results = qexec.execSelect() ; + for ( ; results.hasNext() ; ) + { + QuerySolution soln = results.nextSolution() ; + Resource r = soln.getResource("s") ; + System.out.println(r.getURI()); + } + } finally { qexec.close() ; } + } + /** * @param args * @throws Exception @@ -261,7 +311,8 @@ SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); - new SPARQLSampleDebugging(endpoint).run3(); + new SPARQLSampleDebugging(endpoint).runPatternBasedDetection(); +// new SPARQLSampleDebugging(endpoint).run3(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-11-28 09:58:42
|
Revision: 3440 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3440&view=rev Author: lorenz_b Date: 2011-11-28 09:58:31 +0000 (Mon, 28 Nov 2011) Log Message: ----------- Extended script to write into database. Added methods to compute unsatisfiable object and data properties. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-28 08:24:14 UTC (rev 3439) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-28 09:58:31 UTC (rev 3440) @@ -2,14 +2,27 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; import java.io.InputStream; +import java.io.ObjectOutputStream; import java.net.URL; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Types; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.prefs.Preferences; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; @@ -21,13 +34,20 @@ import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; +import org.ini4j.IniPreferences; +import org.ini4j.InvalidFileFormatException; 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.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.reasoner.InferenceType; import org.semanticweb.owlapi.reasoner.OWLReasoner; import com.clarkparsia.owlapi.explanation.PelletExplanation; @@ -41,8 +61,8 @@ import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.RDFS; public class SPARQLSampleDebugging { @@ -56,12 +76,69 @@ private Logger logger = Logger.getLogger(SPARQLSampleDebugging.class); + private Connection conn; + private PreparedStatement ps; + static {PelletExplanation.setup();} public SPARQLSampleDebugging(SparqlEndpoint endpoint) { this.endpoint = endpoint; + initDBConnection(); } + private void initDBConnection() { + try { + String iniFile = "db_settings.ini"; + Preferences prefs = new IniPreferences(new FileReader(iniFile)); + String dbServer = prefs.node("database").get("server", null); + String dbName = prefs.node("database").get("name", null); + String dbUser = prefs.node("database").get("user", null); + String dbPass = prefs.node("database").get("pass", null); + + Class.forName("com.mysql.jdbc.Driver"); + String url = "jdbc:mysql://" + dbServer + "/" + dbName; + conn = DriverManager.getConnection(url, dbUser, dbPass); + + ps = conn.prepareStatement("INSERT INTO debugging_evaluation (" + + "resource, fragement_size , consistent, nr_of_justifications, justifications, justificationsObject) " + "VALUES(?,?,?,?,?,?)"); + + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InvalidFileFormatException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void writeToDB(String resource, int fragementSize, boolean consistent, Set<Set<OWLAxiom>> explanations) { + try { + ps.setString(1, resource); + ps.setInt(2, fragementSize); + ps.setBoolean(3, consistent); + if(explanations == null){ + ps.setInt(4, 0); + ps.setNull(5, Types.NULL); + ps.setObject(6, Types.NULL); + } else { + ps.setInt(4, explanations.size()); + ps.setString(5, explanations.toString()); + ps.setObject(6, explanations); + } + + + ps.executeUpdate(); + } catch (SQLException e) { + logger.error("Error while writing to DB.", e); + e.printStackTrace(); + } + + } + private Set<String> extractSampleResourcesChunked(int size){ logger.info("Extracting " + sampleSize + " sample resources..."); long startTime = System.currentTimeMillis(); @@ -227,11 +304,49 @@ } + private Set<OWLObjectProperty> getUnsatisfiableObjectProperties(PelletReasoner reasoner){ + SortedSet<OWLObjectProperty> properties = new TreeSet<OWLObjectProperty>(new Comparator<OWLObjectProperty>() { + @Override + public int compare(OWLObjectProperty o1, OWLObjectProperty o2) { + return o1.toString().compareTo(o2.toString()); + } + }); + OWLDataFactory f = OWLManager.createOWLOntologyManager().getOWLDataFactory(); + for(OWLObjectProperty p : reasoner.getRootOntology().getObjectPropertiesInSignature()){ + boolean satisfiable = reasoner.isSatisfiable(f.getOWLObjectExactCardinality(1, p)); + if(!satisfiable){ + properties.add(p); + } + } + return properties; + + } + + private Set<OWLDataProperty> getUnsatisfiableDataProperties(PelletReasoner reasoner){ + SortedSet<OWLDataProperty> properties = new TreeSet<OWLDataProperty>(); + OWLDataFactory f = OWLManager.createOWLOntologyManager().getOWLDataFactory(); + for(OWLDataProperty p : reasoner.getRootOntology().getDataPropertiesInSignature()){ + boolean satisfiable = reasoner.isSatisfiable(f.getOWLDataExactCardinality(1, p)); + if(!satisfiable){ + properties.add(p); + } + } + return properties; + + } + public void run3() throws OWLOntologyCreationException{ OWLOntology reference = loadReferenceOntology(); Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); ontologies.add(reference); - PelletReasoner reasoner; + PelletReasoner reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(reference); + reasoner.precomputeInferences(InferenceType.CLASS_HIERARCHY); + Set<OWLClass> unsatisfiableClasses = reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom(); + logger.info("Unsatisfiable classes(" + unsatisfiableClasses.size() + "): " + unsatisfiableClasses); + Set<OWLObjectProperty> unsatisfiableObjectProperties = getUnsatisfiableObjectProperties(reasoner); + logger.info("Unsatisfiable object properties(" + unsatisfiableObjectProperties.size() + "): " + unsatisfiableObjectProperties); + Set<OWLDataProperty> unsatisfiableDataProperties = getUnsatisfiableDataProperties(reasoner); + logger.info("Unsatisfiable data properties(" + unsatisfiableDataProperties.size() + "): " + unsatisfiableDataProperties); OWLOntology merged; OWLOntology module; @@ -244,8 +359,9 @@ reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(merged); boolean isConsistent = reasoner.isConsistent(); logger.info("Consistent: " + isConsistent); + Set<Set<OWLAxiom>> explanations = null; if(!isConsistent){ - Set<Set<OWLAxiom>> explanations = computeExplanations(reasoner); + explanations = computeExplanations(reasoner); logger.info("Found " + explanations.size() + " explanations."); Map<AxiomType, Integer> axiomType2CountMap = new HashMap<AxiomType, Integer>(); for(Set<OWLAxiom> explanation : explanations){ @@ -265,6 +381,7 @@ } ontologies.remove(module); reasoner.dispose(); + writeToDB(resource, module.getLogicalAxiomCount(), isConsistent, explanations); } @@ -283,6 +400,11 @@ //query for conflicts String queryString = "SELECT ?s WHERE {?type1 <" + OWL.disjointWith + "> ?type2. ?s a ?type1. ?s a ?type2.} LIMIT 1"; + queryString = "SELECT ?s ?p ?type1 ?type2 WHERE {" + + "?type1 <" + OWL.disjointWith + "> ?type2." + + "?p <" + RDFS.domain + "> ?type1. ?p <" + RDFS.domain + "> ?type2." + + " ?s ?p ?o1." + + " ?s ?p ?o2.} LIMIT 10"; Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.create(query, model) ; try { @@ -290,8 +412,10 @@ for ( ; results.hasNext() ; ) { QuerySolution soln = results.nextSolution() ; - Resource r = soln.getResource("s") ; - System.out.println(r.getURI()); + for(String var : results.getResultVars()){ + System.out.print(soln.get(var) + "|"); + } + System.out.println(); } } finally { qexec.close() ; } } @@ -312,7 +436,7 @@ SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); new SPARQLSampleDebugging(endpoint).runPatternBasedDetection(); -// new SPARQLSampleDebugging(endpoint).run3(); + new SPARQLSampleDebugging(endpoint).run3(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-11-28 10:43:16
|
Revision: 3442 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3442&view=rev Author: lorenz_b Date: 2011-11-28 10:43:10 +0000 (Mon, 28 Nov 2011) Log Message: ----------- Changed database writing because OWLAxioms are not serializable. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-28 10:01:07 UTC (rev 3441) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-28 10:43:10 UTC (rev 3442) @@ -7,6 +7,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.ObjectOutputStream; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; import java.net.URL; import java.sql.Connection; import java.sql.DriverManager; @@ -47,6 +49,7 @@ import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.OWLOntologyStorageException; import org.semanticweb.owlapi.reasoner.InferenceType; import org.semanticweb.owlapi.reasoner.OWLReasoner; @@ -127,7 +130,22 @@ } else { ps.setInt(4, explanations.size()); ps.setString(5, explanations.toString()); - ps.setObject(6, explanations); + try { + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLOntology ont = OWLManager.createOWLOntologyManager().createOntology(); + for(Set<OWLAxiom> axioms : explanations){ + man.addAxioms(ont, axioms); + } + Model model = convert(ont); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + model.write(baos, "N-TRIPLE"); + String modelStr = baos.toString("UTF-8"); + ps.setClob(6, new StringReader(modelStr)); + } catch (UnsupportedEncodingException e) { + logger.error("ERROR", e); + } catch (OWLOntologyCreationException e) { + logger.error("ERROR", e); + } } @@ -241,6 +259,29 @@ return retOnt; } + private Model convert(OWLOntology ontology) { + Model model = ModelFactory.createDefaultModel(); + ByteArrayInputStream bais = null; + try { + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + man.saveOntology(ontology, baos); + bais = new ByteArrayInputStream(baos.toByteArray()); + model.read(bais, null); + } catch (OWLOntologyStorageException e) { + e.printStackTrace(); + } finally { + try { + if(bais != null){ + bais.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return model; + } + public void run() throws OWLOntologyCreationException{ OWLOntology reference = loadReferenceOntology(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-11-28 11:22:09
|
Revision: 3443 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3443&view=rev Author: lorenz_b Date: 2011-11-28 11:22:01 +0000 (Mon, 28 Nov 2011) Log Message: ----------- Continued script. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-28 10:43:10 UTC (rev 3442) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-11-28 11:22:01 UTC (rev 3443) @@ -39,6 +39,7 @@ import org.ini4j.IniPreferences; import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; @@ -48,6 +49,7 @@ import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyFormat; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLOntologyStorageException; import org.semanticweb.owlapi.reasoner.InferenceType; @@ -72,9 +74,9 @@ private SparqlEndpoint endpoint; private ExtractionDBCache cache = new ExtractionDBCache("cache"); - private int sampleSize = 100; + private int sampleSize = 10; private int depth = 4; - private int nrOfChunks = 100; + private int nrOfChunks = 1; private int maxNrOfExplanations = 20; private Logger logger = Logger.getLogger(SPARQLSampleDebugging.class); @@ -265,7 +267,7 @@ try { OWLOntologyManager man = OWLManager.createOWLOntologyManager(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); - man.saveOntology(ontology, baos); + man.saveOntology(ontology, new RDFXMLOntologyFormat(), baos); bais = new ByteArrayInputStream(baos.toByteArray()); model.read(bais, null); } catch (OWLOntologyStorageException e) { @@ -476,7 +478,7 @@ SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); - new SPARQLSampleDebugging(endpoint).runPatternBasedDetection(); +// new SPARQLSampleDebugging(endpoint).runPatternBasedDetection(); new SPARQLSampleDebugging(endpoint).run3(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-12-05 08:54:01
|
Revision: 3468 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3468&view=rev Author: lorenz_b Date: 2011-12-05 08:53:54 +0000 (Mon, 05 Dec 2011) Log Message: ----------- Cleaned up script. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-12-04 15:50:59 UTC (rev 3467) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-12-05 08:53:54 UTC (rev 3468) @@ -2,11 +2,12 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; -import java.io.ObjectOutputStream; +import java.io.PrintWriter; import java.io.StringReader; import java.io.UnsupportedEncodingException; import java.net.URL; @@ -19,6 +20,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -46,16 +48,17 @@ import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; +import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyFormat; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLOntologyStorageException; import org.semanticweb.owlapi.reasoner.InferenceType; -import org.semanticweb.owlapi.reasoner.OWLReasoner; import com.clarkparsia.owlapi.explanation.PelletExplanation; +import com.clarkparsia.owlapi.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; import com.clarkparsia.pellet.owlapiv3.PelletReasoner; import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; import com.hp.hpl.jena.query.Query; @@ -64,8 +67,12 @@ 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.InfModel; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.reasoner.Reasoner; +import com.hp.hpl.jena.reasoner.ValidityReport; +import com.hp.hpl.jena.reasoner.ValidityReport.Report; import com.hp.hpl.jena.vocabulary.OWL; import com.hp.hpl.jena.vocabulary.RDFS; @@ -77,7 +84,7 @@ private int sampleSize = 10; private int depth = 4; private int nrOfChunks = 1; - private int maxNrOfExplanations = 20; + private int maxNrOfExplanations = 60; private Logger logger = Logger.getLogger(SPARQLSampleDebugging.class); @@ -105,7 +112,7 @@ conn = DriverManager.getConnection(url, dbUser, dbPass); ps = conn.prepareStatement("INSERT INTO debugging_evaluation (" - + "resource, fragement_size , consistent, nr_of_justifications, justifications, justificationsObject) " + "VALUES(?,?,?,?,?,?)"); + + "resource, fragment_size , consistent, nr_of_justifications, justifications, justificationsObject) " + "VALUES(?,?,?,?,?,?)"); } catch (ClassNotFoundException e) { e.printStackTrace(); @@ -219,6 +226,16 @@ } + private OWLOntology extractSampleModule(String resource){ + logger.info("Extracting sample module..."); + long startTime = System.currentTimeMillis(); + ModelGenerator modelGen = new ModelGenerator(endpoint, cache); + Model model = modelGen.createModel(resource, Strategy.CHUNKS, depth); + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); + return convert(model); + + } + private Set<Set<OWLAxiom>> computeExplanations(OWLOntology ontology){ logger.info("Computing explanations..."); long startTime = System.currentTimeMillis(); @@ -238,11 +255,24 @@ return explanations; } + private void computeExplanations(Model model){ + logger.info("Computing explanations..."); + Reasoner reasoner = org.mindswap.pellet.jena.PelletReasonerFactory.theInstance().create(); + InfModel infModel = ModelFactory.createInfModel(reasoner, model); + long startTime = System.currentTimeMillis(); + ValidityReport report = infModel.validate(); + Iterator<Report> i = report.getReports(); + while(i.hasNext()){ + System.out.println(i.next()); + } + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); + } + private OWLOntology loadReferenceOntology() throws OWLOntologyCreationException{ long startTime = System.currentTimeMillis(); logger.info("Loading reference ontology..."); OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument( - getClass().getClassLoader().getResourceAsStream("dbpedia_0.75.owl")); + getClass().getClassLoader().getResourceAsStream("dbpedia_0.75_no_datapropaxioms.owl"));System.out.println(ontology.getLogicalAxiomCount()); logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); return ontology; } @@ -284,69 +314,7 @@ return model; } - public void run() throws OWLOntologyCreationException{ - OWLOntology reference = loadReferenceOntology(); - - Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); - ontologies.add(reference); - OWLOntology sample; - OWLOntology merged; - OWLReasoner reasoner; - for(int i = 0; i < 100; i++){ - Set<String> resources = extractSampleResourcesChunked(sampleSize); - sample = extractSampleModule(resources); - - ontologies.add(sample); - - merged = OWLManager.createOWLOntologyManager().createOntology(IRI.create("http://merged.en"), ontologies); - - reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(merged); - Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); - pelletLogger.setLevel(Level.OFF); - - boolean isConsistent = reasoner.isConsistent(); - logger.info("Consistent: " + isConsistent); - reasoner.dispose(); - if(!isConsistent){ - Set<Set<OWLAxiom>> explanations = computeExplanations(merged); - for(Set<OWLAxiom> explanation : explanations){ - System.out.println(explanation); - } - break; - - } - ontologies.remove(sample); - - } - - } - public void run2() throws OWLOntologyCreationException{ - OWLOntology reference = loadReferenceOntology(); - OWLReasoner reasoner = PelletReasonerFactory.getInstance().createReasoner(reference); - OWLOntologyManager man = OWLManager.createOWLOntologyManager(); - - Set<String> resources = extractSampleResourcesChunked(sampleSize); - for(String resource : resources){ - logger.info("Resource " + resource); - OWLOntology module = extractSampleModule(Collections.singleton(resource)); - man.addAxioms(reference, module.getLogicalAxioms()); - reasoner.flush(); - logger.info(reasoner.getRootOntology().getLogicalAxiomCount()); - boolean isConsistent = reasoner.isConsistent(); - logger.info("Consistent: " + isConsistent); - if(!isConsistent){ - Set<Set<OWLAxiom>> explanations = computeExplanations(reference); - for(Set<OWLAxiom> explanation : explanations){ - logger.info(explanation); - } - } - man.removeAxioms(reference, module.getLogicalAxioms()); - - } - - } - private Set<OWLObjectProperty> getUnsatisfiableObjectProperties(PelletReasoner reasoner){ SortedSet<OWLObjectProperty> properties = new TreeSet<OWLObjectProperty>(new Comparator<OWLObjectProperty>() { @Override @@ -355,12 +323,29 @@ } }); OWLDataFactory f = OWLManager.createOWLOntologyManager().getOWLDataFactory(); + ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); + PrintWriter out = new PrintWriter( System.out ); for(OWLObjectProperty p : reasoner.getRootOntology().getObjectPropertiesInSignature()){ boolean satisfiable = reasoner.isSatisfiable(f.getOWLObjectExactCardinality(1, p)); if(!satisfiable){ properties.add(p); +// PelletExplanation expGen = new PelletExplanation(reasoner); +// try { +// Set<Set<OWLAxiom>> explanations = expGen.getUnsatisfiableExplanations(f.getOWLObjectExactCardinality(1, p),1); +// System.out.println(explanations); +// renderer.startRendering( out ); +// renderer.render(explanations); +// renderer.endRendering(); +// } catch (UnsupportedOperationException e) { +// e.printStackTrace(); +// } catch (OWLException e) { +// e.printStackTrace(); +// } catch (IOException e) { +// e.printStackTrace(); +// } } } + return properties; } @@ -378,8 +363,7 @@ } - public void run3() throws OWLOntologyCreationException{ - OWLOntology reference = loadReferenceOntology(); + public void run(OWLOntology reference) throws OWLOntologyCreationException{ Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); ontologies.add(reference); PelletReasoner reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(reference); @@ -394,7 +378,7 @@ OWLOntology module; Set<String> resources = extractSampleResourcesChunked(sampleSize); - for(String resource : resources){ + for(String resource : resources){resource = "http://dbpedia.org/resource/Leipzig"; logger.info("Resource " + resource); module = extractSampleModule(Collections.singleton(resource)); ontologies.add(module); @@ -424,17 +408,64 @@ } ontologies.remove(module); reasoner.dispose(); - writeToDB(resource, module.getLogicalAxiomCount(), isConsistent, explanations); - +// writeToDB(resource, module.getLogicalAxiomCount(), isConsistent, explanations); + break; } } + public void runOptimized(OWLOntology reference) throws OWLOntologyCreationException{ + PelletReasoner reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(reference); + reasoner.precomputeInferences(InferenceType.CLASS_HIERARCHY); + Set<OWLClass> unsatisfiableClasses = reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom(); + logger.info("Unsatisfiable classes(" + unsatisfiableClasses.size() + "): " + unsatisfiableClasses); + Set<OWLObjectProperty> unsatisfiableObjectProperties = getUnsatisfiableObjectProperties(reasoner); + logger.info("Unsatisfiable object properties(" + unsatisfiableObjectProperties.size() + "): " + unsatisfiableObjectProperties); + Set<OWLDataProperty> unsatisfiableDataProperties = getUnsatisfiableDataProperties(reasoner); + logger.info("Unsatisfiable data properties(" + unsatisfiableDataProperties.size() + "): " + unsatisfiableDataProperties); + OWLOntology module; + reasoner.isConsistent(); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + man.addOntologyChangeListener( reasoner ); + Set<String> resources = extractSampleResourcesChunked(sampleSize); + for(String resource : resources){ + logger.info("Resource " + resource);resource = "http://dbpedia.org/resource/Leipzig"; + module = extractSampleModule(Collections.singleton(resource)); + man.addAxioms(reference, module.getABoxAxioms(true)); + boolean isConsistent = reasoner.isConsistent(); + logger.info("Consistent: " + isConsistent); + Set<Set<OWLAxiom>> explanations = null; + if(!isConsistent){ + explanations = computeExplanations(reasoner); + logger.info("Found " + explanations.size() + " explanations."); + Map<AxiomType, Integer> axiomType2CountMap = new HashMap<AxiomType, Integer>(); + for(Set<OWLAxiom> explanation : explanations){ + logger.info(explanation); + for(OWLAxiom axiom : explanation){ + Integer cnt = axiomType2CountMap.get(axiom.getAxiomType()); + if(cnt == null){ + cnt = Integer.valueOf(0); + } + cnt = Integer.valueOf(cnt + 1); + axiomType2CountMap.put(axiom.getAxiomType(), cnt); + } + } + for(Entry<AxiomType, Integer> entry : axiomType2CountMap.entrySet()){ + logger.info(entry.getKey() + "\t: " + entry.getValue()); + } + } + man.removeAxioms(reference, module.getABoxAxioms(true)); +// writeToDB(resource, module.getLogicalAxiomCount(), isConsistent, explanations); + break; + } + + } + public void runPatternBasedDetection(){ Model model = ModelFactory.createDefaultModel(); //read schema - InputStream in = getClass().getClassLoader().getResourceAsStream("dbpedia_0.75.owl"); + InputStream in = getClass().getClassLoader().getResourceAsStream("dbpedia_0.75_no_datapropertyaxioms.owl"); model.read(in, null); //read data @@ -463,6 +494,41 @@ } finally { qexec.close() ; } } + public void checkFunctionalityViolation(){ + try { + OWLOntology ontology = loadReferenceOntology(); + + Set<String> properties = new TreeSet<String>(); + for(OWLAxiom ax : ontology.getAxioms(AxiomType.FUNCTIONAL_OBJECT_PROPERTY)){ + OWLObjectProperty prop = ((OWLFunctionalObjectPropertyAxiom)ax).getProperty().asOWLObjectProperty(); + properties.add(prop.toStringID()); + } + for(OWLAxiom ax : ontology.getAxioms(AxiomType.FUNCTIONAL_DATA_PROPERTY)){ + OWLDataProperty prop = ((OWLFunctionalDataPropertyAxiom)ax).getProperty().asOWLDataProperty(); + properties.add(prop.toStringID()); + } + for(String prop : properties){ + String query = "SELECT * WHERE {?s <%s> ?o1. ?s <%s> ?o2. FILTER(?o1 != ?o2)} LIMIT 1".replaceAll("%s", prop); + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + while(rs.hasNext()){ + QuerySolution qs = rs.next(); + logger.info("********************************************************"); + logger.info(prop); + logger.info(qs.get("s") + "-->" + qs.get("o1")); + logger.info(qs.get("s") + "-->" + qs.get("o2")); + } + + } + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + + } + + public void removeAxiomsWithNamespace(Set<String> namespaces){ + + } + /** * @param args * @throws Exception @@ -478,8 +544,28 @@ SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); -// new SPARQLSampleDebugging(endpoint).runPatternBasedDetection(); - new SPARQLSampleDebugging(endpoint).run3(); + + if(args.length != 1){ + System.out.println("Usage: SPARQLSampleDebugging <Schema-Ontology>"); + System.exit(0); + } + + OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(IRI.create(new File(args[0]).toURI())); + + SPARQLSampleDebugging debug = new SPARQLSampleDebugging(endpoint); + +// debug.checkFunctionalityViolation(); + + long s1 = System.currentTimeMillis(); + debug.runOptimized(ontology); + long s2 = System.currentTimeMillis()-s1; + + long s3 = System.currentTimeMillis(); + debug.run(ontology); + long s4 = System.currentTimeMillis()-s3; + + System.out.println(s2); + System.out.println(s4); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-12-05 15:20:22
|
Revision: 3473 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3473&view=rev Author: lorenz_b Date: 2011-12-05 15:20:13 +0000 (Mon, 05 Dec 2011) Log Message: ----------- Continued script. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-12-05 13:08:51 UTC (rev 3472) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2011-12-05 15:20:13 UTC (rev 3473) @@ -35,6 +35,7 @@ import org.apache.log4j.SimpleLayout; import org.dllearner.algorithm.qtl.util.ModelGenerator; import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; +import org.dllearner.core.owl.IrreflexiveObjectPropertyAxiom; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; @@ -44,12 +45,14 @@ import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDataProperty; import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom; import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -82,12 +85,16 @@ private ExtractionDBCache cache = new ExtractionDBCache("cache"); private int sampleSize = 10; - private int depth = 4; + private int depth = 2; private int nrOfChunks = 1; - private int maxNrOfExplanations = 60; + private int maxNrOfExplanations = 20; private Logger logger = Logger.getLogger(SPARQLSampleDebugging.class); + private Logger functionalLogger = Logger.getLogger("functionality"); + private Logger asymmetricLogger = Logger.getLogger("asymmetry"); + private Logger irreflexiveLogger = Logger.getLogger("irreflexivity"); + private Connection conn; private PreparedStatement ps; @@ -429,8 +436,8 @@ man.addOntologyChangeListener( reasoner ); Set<String> resources = extractSampleResourcesChunked(sampleSize); for(String resource : resources){ - logger.info("Resource " + resource);resource = "http://dbpedia.org/resource/Leipzig"; - module = extractSampleModule(Collections.singleton(resource)); + logger.info("Resource " + resource);resource = "http://dbpedia.org/resource/The_Man_Who_Wouldn%27t_Die"; + module = extractSampleModule(Collections.singleton(resource));computeExplanations(convert(module).add(convert(extractSampleModule(resource)))); man.addAxioms(reference, module.getABoxAxioms(true)); boolean isConsistent = reasoner.isConsistent(); logger.info("Consistent: " + isConsistent); @@ -512,10 +519,10 @@ ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); while(rs.hasNext()){ QuerySolution qs = rs.next(); - logger.info("********************************************************"); - logger.info(prop); - logger.info(qs.get("s") + "-->" + qs.get("o1")); - logger.info(qs.get("s") + "-->" + qs.get("o2")); + functionalLogger.info("********************************************************"); + functionalLogger.info(prop); + functionalLogger.info(qs.get("s") + "-->" + qs.get("o1")); + functionalLogger.info(qs.get("s") + "-->" + qs.get("o2")); } } @@ -525,6 +532,57 @@ } + public void checkIrreflexivityViolation(){ + try { + OWLOntology ontology = loadReferenceOntology(); + + Set<String> properties = new TreeSet<String>(); + for(OWLAxiom ax : ontology.getAxioms(AxiomType.IRREFLEXIVE_OBJECT_PROPERTY)){ + OWLObjectProperty prop = ((OWLIrreflexiveObjectPropertyAxiom)ax).getProperty().asOWLObjectProperty(); + properties.add(prop.toStringID()); + } + for(String prop : properties){ + String query = "SELECT * WHERE {?s <%s> ?s.} LIMIT 1".replaceAll("%s", prop); + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + while(rs.hasNext()){ + QuerySolution qs = rs.next(); + irreflexiveLogger.info("********************************************************"); + irreflexiveLogger.info(prop); + irreflexiveLogger.info(qs.get("s")); + } + + } + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + + } + + public void checkAsymmetryViolation(){ + try { + OWLOntology ontology = loadReferenceOntology(); + + Set<String> properties = new TreeSet<String>(); + for(OWLAxiom ax : ontology.getAxioms(AxiomType.ASYMMETRIC_OBJECT_PROPERTY)){ + OWLObjectProperty prop = ((OWLAsymmetricObjectPropertyAxiom)ax).getProperty().asOWLObjectProperty(); + properties.add(prop.toStringID()); + } + for(String prop : properties){ + String query = "SELECT * WHERE {?s <%s> ?o.?o <%s> ?s.FILTER(?s != ?o)} LIMIT 1".replaceAll("%s", prop); + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + while(rs.hasNext()){ + QuerySolution qs = rs.next(); + asymmetricLogger.info("********************************************************"); + asymmetricLogger.info(prop); + asymmetricLogger.info(qs.get("s") + "<-->" + qs.get("o")); + } + + } + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + } + public void removeAxiomsWithNamespace(Set<String> namespaces){ } @@ -538,6 +596,9 @@ Logger.getRootLogger().removeAllAppenders(); Logger.getRootLogger().addAppender(new ConsoleAppender(new SimpleLayout())); Logger.getRootLogger().addAppender(new FileAppender(new SimpleLayout(), "log/debug.log")); + Logger.getLogger("functionality").addAppender(new FileAppender(new SimpleLayout(), "log/functionality_violations.log")); + Logger.getLogger("irreflexivity").addAppender(new FileAppender(new SimpleLayout(), "log/irreflexivity_violations.log")); + Logger.getLogger("asymmetry").addAppender(new FileAppender(new SimpleLayout(), "log/asymmetry_violations.log")); Logger.getLogger(SPARQLSampleDebugging.class).setLevel(Level.INFO); java.util.logging.Logger pelletLogger = java.util.logging.Logger.getLogger("com.clarkparsia.pellet"); pelletLogger.setLevel(java.util.logging.Level.OFF); @@ -554,7 +615,9 @@ SPARQLSampleDebugging debug = new SPARQLSampleDebugging(endpoint); -// debug.checkFunctionalityViolation(); + debug.checkFunctionalityViolation(); + debug.checkAsymmetryViolation(); + debug.checkIrreflexivityViolation(); long s1 = System.currentTimeMillis(); debug.runOptimized(ontology); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-01-27 11:51:34
|
Revision: 3558 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3558&view=rev Author: lorenz_b Date: 2012-01-27 11:51:28 +0000 (Fri, 27 Jan 2012) Log Message: ----------- Small update. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-01-26 13:43:13 UTC (rev 3557) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-01-27 11:51:28 UTC (rev 3558) @@ -1,8 +1,9 @@ package org.dllearner.scripts; +import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; @@ -28,6 +29,8 @@ import java.util.TreeSet; import java.util.prefs.Preferences; +import org.apache.commons.compress.compressors.CompressorInputStream; +import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; @@ -35,7 +38,8 @@ import org.apache.log4j.SimpleLayout; import org.dllearner.algorithm.qtl.util.ModelGenerator; import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; -import org.dllearner.core.owl.IrreflexiveObjectPropertyAxiom; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; @@ -52,14 +56,18 @@ import org.semanticweb.owlapi.model.OWLDataProperty; import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLIndividual; import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom; import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.OWLObjectPropertyCharacteristicAxiom; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLOntologyStorageException; import org.semanticweb.owlapi.reasoner.InferenceType; +import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; + import com.clarkparsia.owlapi.explanation.PelletExplanation; import com.clarkparsia.owlapi.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; import com.clarkparsia.pellet.owlapiv3.PelletReasoner; @@ -85,9 +93,9 @@ private ExtractionDBCache cache = new ExtractionDBCache("cache"); private int sampleSize = 10; - private int depth = 2; + private int depth = 3; private int nrOfChunks = 1; - private int maxNrOfExplanations = 20; + private int maxNrOfExplanations = 10; private Logger logger = Logger.getLogger(SPARQLSampleDebugging.class); @@ -98,6 +106,8 @@ private Connection conn; private PreparedStatement ps; + private OWLDataFactory factory = new OWLDataFactoryImpl(); + static {PelletExplanation.setup();} public SPARQLSampleDebugging(SparqlEndpoint endpoint) { @@ -184,7 +194,7 @@ for(int i = 0; i < nrOfChunks; i++){ int offset = (int)(Math.random() * max); - offset = Math.min(offset, offset-(size/nrOfChunks)); + offset = Math.min(offset, offset-(size/nrOfChunks));offset = 236242; query = String.format("SELECT DISTINCT ?s WHERE {?s a ?type} LIMIT %d OFFSET %d", (size/nrOfChunks), offset); logger.info(query); @@ -236,10 +246,11 @@ private OWLOntology extractSampleModule(String resource){ logger.info("Extracting sample module..."); long startTime = System.currentTimeMillis(); - ModelGenerator modelGen = new ModelGenerator(endpoint, cache); - Model model = modelGen.createModel(resource, Strategy.CHUNKS, depth); + ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache); + Model model = cbdGen.getConciseBoundedDescription(resource, 3); + OWLOntology data = convert(model); logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); - return convert(model); + return data; } @@ -257,7 +268,13 @@ logger.info("Computing explanations..."); long startTime = System.currentTimeMillis(); PelletExplanation expGen = new PelletExplanation(reasoner); - Set<Set<OWLAxiom>> explanations = expGen.getInconsistencyExplanations(maxNrOfExplanations); + Set<Set<OWLAxiom>> explanations = new HashSet<Set<OWLAxiom>>(maxNrOfExplanations); + try { + explanations = expGen.getInconsistencyExplanations(maxNrOfExplanations); + } catch (Exception e) { + e.printStackTrace(); + logger.error(e); + } logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); return explanations; } @@ -279,7 +296,7 @@ long startTime = System.currentTimeMillis(); logger.info("Loading reference ontology..."); OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument( - getClass().getClassLoader().getResourceAsStream("dbpedia_0.75_no_datapropaxioms.owl"));System.out.println(ontology.getLogicalAxiomCount()); + getClass().getClassLoader().getResourceAsStream("dbpedia_0.75_no_datapropaxioms.owl")); logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); return ontology; } @@ -435,16 +452,26 @@ OWLOntologyManager man = OWLManager.createOWLOntologyManager(); man.addOntologyChangeListener( reasoner ); Set<String> resources = extractSampleResourcesChunked(sampleSize); + Model model; for(String resource : resources){ - logger.info("Resource " + resource);resource = "http://dbpedia.org/resource/The_Man_Who_Wouldn%27t_Die"; - module = extractSampleModule(Collections.singleton(resource));computeExplanations(convert(module).add(convert(extractSampleModule(resource)))); + logger.info("###################################################################"); + logger.info("Resource " + resource);//resource = "http://dbpedia.org/resource/The_Man_Who_Wouldn%27t_Die"; + module = extractSampleModule(resource); man.addAxioms(reference, module.getABoxAxioms(true)); + man.removeAxioms(reference, reference.getAxioms(AxiomType.DATA_PROPERTY_ASSERTION)); boolean isConsistent = reasoner.isConsistent(); logger.info("Consistent: " + isConsistent); Set<Set<OWLAxiom>> explanations = null; if(!isConsistent){ explanations = computeExplanations(reasoner); + model = convert(reference); + explanations.addAll(computeInconsistencyExplanationsByAsymmetryPattern(reference, model)); + explanations.addAll(computeInconsistencyExplanationsByIrreflexivityPattern(reference, model)); + explanations.addAll(computeInconsistencyExplanationsByFunctionalityPattern(reference, model)); logger.info("Found " + explanations.size() + " explanations."); + for(Set<OWLAxiom> exp : explanations){ + logger.info(exp + "\n"); + } Map<AxiomType, Integer> axiomType2CountMap = new HashMap<AxiomType, Integer>(); for(Set<OWLAxiom> explanation : explanations){ logger.info(explanation); @@ -457,13 +484,14 @@ axiomType2CountMap.put(axiom.getAxiomType(), cnt); } } + logger.info("Axiom type count:"); for(Entry<AxiomType, Integer> entry : axiomType2CountMap.entrySet()){ logger.info(entry.getKey() + "\t: " + entry.getValue()); } } man.removeAxioms(reference, module.getABoxAxioms(true)); // writeToDB(resource, module.getLogicalAxiomCount(), isConsistent, explanations); - break; +// break; } } @@ -501,10 +529,7 @@ } finally { qexec.close() ; } } - public void checkFunctionalityViolation(){ - try { - OWLOntology ontology = loadReferenceOntology(); - + public void checkFunctionalityViolation(OWLOntology ontology){ Set<String> properties = new TreeSet<String>(); for(OWLAxiom ax : ontology.getAxioms(AxiomType.FUNCTIONAL_OBJECT_PROPERTY)){ OWLObjectProperty prop = ((OWLFunctionalObjectPropertyAxiom)ax).getProperty().asOWLObjectProperty(); @@ -526,16 +551,9 @@ } } - } catch (OWLOntologyCreationException e) { - e.printStackTrace(); - } - } - public void checkIrreflexivityViolation(){ - try { - OWLOntology ontology = loadReferenceOntology(); - + public void checkIrreflexivityViolation(OWLOntology ontology){ Set<String> properties = new TreeSet<String>(); for(OWLAxiom ax : ontology.getAxioms(AxiomType.IRREFLEXIVE_OBJECT_PROPERTY)){ OWLObjectProperty prop = ((OWLIrreflexiveObjectPropertyAxiom)ax).getProperty().asOWLObjectProperty(); @@ -552,16 +570,9 @@ } } - } catch (OWLOntologyCreationException e) { - e.printStackTrace(); - } - } - public void checkAsymmetryViolation(){ - try { - OWLOntology ontology = loadReferenceOntology(); - + public void checkAsymmetryViolation(OWLOntology ontology){ Set<String> properties = new TreeSet<String>(); for(OWLAxiom ax : ontology.getAxioms(AxiomType.ASYMMETRIC_OBJECT_PROPERTY)){ OWLObjectProperty prop = ((OWLAsymmetricObjectPropertyAxiom)ax).getProperty().asOWLObjectProperty(); @@ -578,11 +589,102 @@ } } - } catch (OWLOntologyCreationException e) { - e.printStackTrace(); + } + + private Set<Set<OWLAxiom>> computeInconsistencyExplanationsByFunctionalityPattern(OWLOntology ontology, Model model){ + Set<Set<OWLAxiom>> explanations = new HashSet<Set<OWLAxiom>>(); + + for(OWLObjectProperty prop : extractObjectProperties(AxiomType.FUNCTIONAL_OBJECT_PROPERTY, ontology)){ + OWLAxiom axiom = factory.getOWLFunctionalObjectPropertyAxiom(prop); + String queryString = "SELECT DISTINCT * WHERE {?s <%s> ?o1. ?s <%s> ?o2. FILTER(?o1 != ?o2)}".replace("%s", prop.toStringID()); + Query query = QueryFactory.create(queryString) ; + QueryExecution qexec = QueryExecutionFactory.create(query, model) ; + try { + ResultSet results = qexec.execSelect(); + for (; results.hasNext();) { + Set<OWLAxiom> explanation = new HashSet<OWLAxiom>(); + explanation.add(axiom); + QuerySolution qs = results.next(); + OWLIndividual subject = factory.getOWLNamedIndividual(IRI.create(qs.getResource("s").getURI())); + OWLIndividual object1 = factory.getOWLNamedIndividual(IRI.create(qs.getResource("o1").getURI())); + OWLIndividual object2 = factory.getOWLNamedIndividual(IRI.create(qs.getResource("o2").getURI())); + OWLAxiom ax = factory.getOWLObjectPropertyAssertionAxiom(prop, subject, object1); + explanation.add(ax); + ax = factory.getOWLObjectPropertyAssertionAxiom(prop, subject, object2); + explanation.add(ax); + explanations.add(explanation); + } + } finally { + qexec.close(); + } } + return explanations; } + private Set<Set<OWLAxiom>> computeInconsistencyExplanationsByAsymmetryPattern(OWLOntology ontology, Model model){ + Set<Set<OWLAxiom>> explanations = new HashSet<Set<OWLAxiom>>(); + + for(OWLObjectProperty prop : extractObjectProperties(AxiomType.ASYMMETRIC_OBJECT_PROPERTY, ontology)){ + OWLAxiom axiom = factory.getOWLAsymmetricObjectPropertyAxiom(prop); + String queryString = "SELECT * WHERE {?s <%s> ?o. ?o <%s> ?s. FILTER(?o != ?s)}".replace("%s", prop.toStringID()); + Query query = QueryFactory.create(queryString) ; + QueryExecution qexec = QueryExecutionFactory.create(query, model) ; + try { + ResultSet results = qexec.execSelect(); + for (; results.hasNext();) { + Set<OWLAxiom> explanation = new HashSet<OWLAxiom>(); + explanation.add(axiom); + QuerySolution qs = results.nextSolution(); + OWLIndividual subject = factory.getOWLNamedIndividual(IRI.create(qs.getResource("s").getURI())); + OWLIndividual object = factory.getOWLNamedIndividual(IRI.create(qs.getResource("o").getURI())); + OWLAxiom ax = factory.getOWLObjectPropertyAssertionAxiom(prop, subject, object); + explanation.add(ax); + ax = factory.getOWLObjectPropertyAssertionAxiom(prop, object, subject); + explanation.add(ax); + explanations.add(explanation); + } + } finally { + qexec.close(); + } + } + return explanations; + } + + private Set<Set<OWLAxiom>> computeInconsistencyExplanationsByIrreflexivityPattern(OWLOntology ontology, Model model){ + Set<Set<OWLAxiom>> explanations = new HashSet<Set<OWLAxiom>>(); + + for(OWLObjectProperty prop : extractObjectProperties(AxiomType.IRREFLEXIVE_OBJECT_PROPERTY, ontology)){ + OWLAxiom axiom = factory.getOWLIrreflexiveObjectPropertyAxiom(prop); + String queryString = "SELECT * WHERE {?s <%s> ?s.}".replace("%s", prop.toStringID()); + Query query = QueryFactory.create(queryString) ; + QueryExecution qexec = QueryExecutionFactory.create(query, model) ; + try { + ResultSet results = qexec.execSelect(); + for (; results.hasNext();) { + Set<OWLAxiom> explanation = new HashSet<OWLAxiom>(); + explanation.add(axiom); + QuerySolution qs = results.nextSolution(); + OWLIndividual subject = factory.getOWLNamedIndividual(IRI.create(qs.getResource("s").getURI())); + OWLAxiom ax = factory.getOWLObjectPropertyAssertionAxiom(prop, subject, subject); + explanation.add(ax); + explanations.add(explanation); + } + } finally { + qexec.close(); + } + } + return explanations; + } + + private SortedSet<OWLObjectProperty> extractObjectProperties(AxiomType<? extends OWLAxiom> axiomType, OWLOntology ontology){ + SortedSet<OWLObjectProperty> properties = new TreeSet<OWLObjectProperty>(); + for(OWLAxiom ax : ontology.getAxioms(axiomType)){ + properties.add(((OWLObjectPropertyCharacteristicAxiom)ax).getProperty().asOWLObjectProperty()); + } +// properties.retainAll(data.getObjectPropertiesInSignature()); + return properties; + } + public void removeAxiomsWithNamespace(Set<String> namespaces){ } @@ -611,24 +713,28 @@ System.exit(0); } - OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(IRI.create(new File(args[0]).toURI())); + InputStream is = new BufferedInputStream(new FileInputStream(args[0])); + CompressorInputStream in = new CompressorStreamFactory().createCompressorInputStream("bzip2", is); + OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(in); + SPARQLSampleDebugging debug = new SPARQLSampleDebugging(endpoint); - debug.checkFunctionalityViolation(); - debug.checkAsymmetryViolation(); - debug.checkIrreflexivityViolation(); +// debug.checkFunctionalityViolation(ontology); +// debug.checkAsymmetryViolation(ontology); +// debug.checkIrreflexivityViolation(ontology); long s1 = System.currentTimeMillis(); debug.runOptimized(ontology); long s2 = System.currentTimeMillis()-s1; + System.out.println(s2); - long s3 = System.currentTimeMillis(); + /*long s3 = System.currentTimeMillis(); debug.run(ontology); long s4 = System.currentTimeMillis()-s3; System.out.println(s2); - System.out.println(s4); + System.out.println(s4);*/ } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-01-27 11:55:52
|
Revision: 3559 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3559&view=rev Author: lorenz_b Date: 2012-01-27 11:55:41 +0000 (Fri, 27 Jan 2012) Log Message: ----------- Option to load bzip2 compressed. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-01-27 11:51:28 UTC (rev 3558) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-01-27 11:55:41 UTC (rev 3559) @@ -714,10 +714,11 @@ } InputStream is = new BufferedInputStream(new FileInputStream(args[0])); - CompressorInputStream in = new CompressorStreamFactory().createCompressorInputStream("bzip2", is); + if(args[0].endsWith("bz2")){ + is = new CompressorStreamFactory().createCompressorInputStream("bzip2", is); + } + OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(is); - OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(in); - SPARQLSampleDebugging debug = new SPARQLSampleDebugging(endpoint); // debug.checkFunctionalityViolation(ontology); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-02-07 21:43:27
|
Revision: 3575 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3575&view=rev Author: lorenz_b Date: 2012-02-07 21:43:20 +0000 (Tue, 07 Feb 2012) Log Message: ----------- Added method to check if axiom is already entailed by DBpedia ontology. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-02-07 09:53:33 UTC (rev 3574) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-02-07 21:43:20 UTC (rev 3575) @@ -12,6 +12,7 @@ import java.io.PrintWriter; import java.io.StringReader; import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; import java.net.URL; import java.sql.Connection; import java.sql.DriverManager; @@ -30,6 +31,7 @@ import java.util.TreeSet; import java.util.prefs.Preferences; +import org.apache.commons.compress.compressors.CompressorException; import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; @@ -65,7 +67,13 @@ import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; import org.semanticweb.owlapi.model.OWLOntologyStorageException; +import org.semanticweb.owlapi.reasoner.ClassExpressionNotInProfileException; +import org.semanticweb.owlapi.reasoner.FreshEntitiesException; +import org.semanticweb.owlapi.reasoner.InconsistentOntologyException; import org.semanticweb.owlapi.reasoner.InferenceType; +import org.semanticweb.owlapi.reasoner.OWLReasoner; +import org.semanticweb.owlapi.reasoner.ReasonerInterruptedException; +import org.semanticweb.owlapi.reasoner.TimeOutException; import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; @@ -109,11 +117,18 @@ private OWLDataFactory factory = new OWLDataFactoryImpl(); + private OWLOntology dbpediaOntology; + private OWLReasoner dbpediaReasoner; + private OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + static {PelletExplanation.setup();} public SPARQLSampleDebugging(SparqlEndpoint endpoint) { this.endpoint = endpoint; initDBConnection(); + dbpediaOntology = loadDBpediaOntology(); + dbpediaReasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(dbpediaOntology); + dbpediaReasoner.precomputeInferences(InferenceType.CLASS_HIERARCHY); } private void initDBConnection() { @@ -302,6 +317,30 @@ return ontology; } + private OWLOntology loadDBpediaOntology() { + long startTime = System.currentTimeMillis(); + logger.info("Loading DBpedia reference ontology..."); + OWLOntology ontology = null; + try { + URL dbpediaURL = new URL("http://downloads.dbpedia.org/3.7/dbpedia_3.7.owl.bz2"); + InputStream is = dbpediaURL.openStream(); + is = new CompressorStreamFactory().createCompressorInputStream("bzip2", is); + ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(is); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (CompressorException e) { + e.printStackTrace(); + } + logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); + return ontology; + } + + + private OWLOntology convert(Model model) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); model.write(baos, "N-TRIPLE"); @@ -470,16 +509,13 @@ explanations.addAll(computeInconsistencyExplanationsByIrreflexivityPattern(reference, model)); explanations.addAll(computeInconsistencyExplanationsByFunctionalityPattern(reference, model)); logger.info("Found " + explanations.size() + " explanations."); - for(Set<OWLAxiom> exp : explanations){ - logger.info(exp + "\n"); - } Map<AxiomType, Integer> axiomType2CountMap = new HashMap<AxiomType, Integer>(); ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); try { FileWriter out = new FileWriter( "log/justifications.txt" ); renderer.startRendering(out ); for(Set<OWLAxiom> explanation : explanations){ - logger.info(explanation); + logger.info(explanation + "\n"); out.flush(); try { renderer.render( Collections.singleton(explanation) ); @@ -702,6 +738,42 @@ return properties; } + private boolean isLearnedAxiom(OWLAxiom axiom){ + return !dbpediaReasoner.isEntailed(axiom); + } + + private boolean containsUnsatisfiableObjectProperty(Set<OWLAxiom> justification){ + boolean value = false; + + OWLReasoner reasoner = null; + try { + OWLOntology ontology = manager.createOntology(justification); + manager.removeAxioms(ontology, ontology.getABoxAxioms(true)); + reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology); + for(OWLObjectProperty p : ontology.getObjectPropertiesInSignature()){ + boolean satisfiable = reasoner.isSatisfiable(factory.getOWLObjectExactCardinality(1, p)); + if(!satisfiable){ + value = true; + break; + } + } + } catch (TimeOutException e) { + e.printStackTrace(); + } catch (ClassExpressionNotInProfileException e) { + e.printStackTrace(); + } catch (FreshEntitiesException e) { + e.printStackTrace(); + } catch (InconsistentOntologyException e) { + e.printStackTrace(); + } catch (ReasonerInterruptedException e) { + e.printStackTrace(); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + reasoner.dispose(); + return value; + } + public void removeAxiomsWithNamespace(Set<String> namespaces){ } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-04-28 14:41:55
|
Revision: 3661 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3661&view=rev Author: lorenz_b Date: 2012-04-28 14:41:49 +0000 (Sat, 28 Apr 2012) Log Message: ----------- Removed unused method. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-04-28 14:02:44 UTC (rev 3660) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-04-28 14:41:49 UTC (rev 3661) @@ -24,7 +24,6 @@ import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Random; @@ -88,12 +87,8 @@ 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.InfModel; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.hp.hpl.jena.reasoner.Reasoner; -import com.hp.hpl.jena.reasoner.ValidityReport; -import com.hp.hpl.jena.reasoner.ValidityReport.Report; import com.hp.hpl.jena.vocabulary.OWL; import com.hp.hpl.jena.vocabulary.RDFS; @@ -304,19 +299,6 @@ return explanations; } - private void computeExplanations(Model model){ - logger.info("Computing explanations..."); - Reasoner reasoner = org.mindswap.pellet.jena.PelletReasonerFactory.theInstance().create(); - InfModel infModel = ModelFactory.createInfModel(reasoner, model); - long startTime = System.currentTimeMillis(); - ValidityReport report = infModel.validate(); - Iterator<Report> i = report.getReports(); - while(i.hasNext()){ - System.out.println(i.next()); - } - logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); - } - private OWLOntology loadReferenceOntology() throws OWLOntologyCreationException{ long startTime = System.currentTimeMillis(); logger.info("Loading reference ontology..."); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-07-05 07:24:36
|
Revision: 3772 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3772&view=rev Author: lorenz_b Date: 2012-07-05 07:24:27 +0000 (Thu, 05 Jul 2012) Log Message: ----------- Removed old class. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-07-04 15:42:53 UTC (rev 3771) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-07-05 07:24:27 UTC (rev 3772) @@ -39,8 +39,8 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; -import org.dllearner.algorithm.qtl.util.ModelGenerator; -import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; +import org.dllearner.common.index.ModelGenerator; +import org.dllearner.common.index.ModelGenerator.Strategy; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; @@ -258,10 +258,10 @@ private OWLOntology extractSampleModule(Set<String> resources){ logger.info("Extracting sample module..."); long startTime = System.currentTimeMillis(); - ModelGenerator modelGen = new ModelGenerator(endpoint, cache); + ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache); Model model = ModelFactory.createDefaultModel(); for(String resource : resources){ - model.add(modelGen.createModel(resource, Strategy.CHUNKS, depth)); + model.add(cbdGen.getConciseBoundedDescription(resource, depth)); } logger.info("...done in " + (System.currentTimeMillis()-startTime) + "ms."); return convert(model); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |