From: <lor...@us...> - 2013-04-10 10:06:41
|
Revision: 3915 http://sourceforge.net/p/dl-learner/code/3915 Author: lorenz_b Date: 2013-04-10 10:06:38 +0000 (Wed, 10 Apr 2013) Log Message: ----------- Fixed bug. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -58,7 +58,7 @@ public class OWLAxiomRenamer implements OWLAxiomVisitor { private OWLDataFactory df; - private OWLClassExpressionRenamer renamer; + private OWLClassExpressionRenamer expressionRenamer; private OWLAxiom renamedAxiom; public OWLAxiomRenamer(OWLDataFactory df) { @@ -67,7 +67,7 @@ public OWLAxiom rename(OWLAxiom axiom){ Map<OWLEntity, OWLEntity> renaming = new HashMap<OWLEntity, OWLEntity>(); - renamer = new OWLClassExpressionRenamer(df, renaming); + expressionRenamer = new OWLClassExpressionRenamer(df, renaming); axiom.accept(this); return renamedAxiom; } @@ -75,9 +75,9 @@ @Override public void visit(OWLSubClassOfAxiom axiom) { OWLClassExpression subClass = axiom.getSubClass(); - subClass = renamer.rename(subClass); + subClass = expressionRenamer.rename(subClass); OWLClassExpression superClass = axiom.getSuperClass(); - superClass = renamer.rename(superClass); + superClass = expressionRenamer.rename(superClass); renamedAxiom = df.getOWLSubClassOfAxiom(subClass, superClass); } @@ -120,18 +120,18 @@ @Override public void visit(OWLDataPropertyDomainAxiom axiom) { OWLDataPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLClassExpression domain = axiom.getDomain(); - domain = renamer.rename(domain); + domain = expressionRenamer.rename(domain); renamedAxiom = df.getOWLDataPropertyDomainAxiom(property, domain); } @Override public void visit(OWLObjectPropertyDomainAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLClassExpression domain = axiom.getDomain(); - domain = renamer.rename(domain); + domain = expressionRenamer.rename(domain); renamedAxiom = df.getOWLObjectPropertyDomainAxiom(property, domain); } @@ -158,9 +158,9 @@ @Override public void visit(OWLObjectPropertyRangeAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLClassExpression range = axiom.getRange(); - range = renamer.rename(range); + range = expressionRenamer.rename(range); renamedAxiom = df.getOWLObjectPropertyDomainAxiom(property, range); } @@ -171,7 +171,7 @@ @Override public void visit(OWLFunctionalObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLFunctionalObjectPropertyAxiom(property); } @@ -186,23 +186,23 @@ @Override public void visit(OWLSymmetricObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLSymmetricObjectPropertyAxiom(property); } @Override public void visit(OWLDataPropertyRangeAxiom axiom) { OWLDataPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLDataRange range = axiom.getRange(); - range = renamer.rename(range); + range = expressionRenamer.rename(range); renamedAxiom = df.getOWLDataPropertyRangeAxiom(property, range); } @Override public void visit(OWLFunctionalDataPropertyAxiom axiom) { OWLDataPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLFunctionalDataPropertyAxiom(property); } @@ -213,9 +213,9 @@ @Override public void visit(OWLClassAssertionAxiom axiom) { OWLClassExpression classExpression = axiom.getClassExpression(); - classExpression = renamer.rename(classExpression); + classExpression = expressionRenamer.rename(classExpression); OWLIndividual individual = axiom.getIndividual(); - individual = renamer.rename(individual); + individual = expressionRenamer.rename(individual); renamedAxiom = df.getOWLClassAssertionAxiom(classExpression, individual); } @@ -224,7 +224,7 @@ List<OWLClassExpression> classExpressions = axiom.getClassExpressionsAsList(); List<OWLClassExpression> renamedClassExpressions = new ArrayList<OWLClassExpression>(); for (OWLClassExpression expr : classExpressions) { - renamedClassExpressions.add(renamer.rename(expr)); + renamedClassExpressions.add(expressionRenamer.rename(expr)); } renamedAxiom = df.getOWLEquivalentClassesAxiom(new TreeSet<OWLClassExpression>(renamedClassExpressions)); } @@ -236,14 +236,14 @@ @Override public void visit(OWLTransitiveObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLTransitiveObjectPropertyAxiom(property); } @Override public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLIrreflexiveObjectPropertyAxiom(property); } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -20,6 +20,7 @@ package org.dllearner.algorithms.properties; import java.util.ArrayList; +import java.util.List; import org.dllearner.core.AbstractAxiomLearningAlgorithm; import org.dllearner.core.ComponentAnn; @@ -29,6 +30,8 @@ import org.dllearner.core.owl.DatatypeProperty; import org.dllearner.core.owl.FunctionalDatatypePropertyAxiom; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.learningproblems.AxiomScore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,7 +112,7 @@ all = qs.getLiteral("all").getInt(); } // get number of instances of s with <s p o> <s p o1> where o != o1 - query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o1)} }"; + query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o2)} }"; query = query.replace("%s", propertyToDescribe.getURI().toString()); rs = executeSelectQuery(query, workingModel); int functional = 1; @@ -140,7 +143,7 @@ if (numberOfSubjects > 0) { int functional = 0; - String query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o1)} }"; + String query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o2)} }"; query = query.replace("%s", propertyToDescribe.getURI().toString()); ResultSet rs = executeSelectQuery(query); if (rs.hasNext()) { @@ -153,4 +156,23 @@ declaredAsFunctional)); } } + + public static void main(String[] args) throws Exception { + FunctionalDataPropertyAxiomLearner l = new FunctionalDataPropertyAxiomLearner(new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpedia())); + l.setPropertyToDescribe(new DatatypeProperty("http://dbpedia.org/ontology/birthDate")); + l.setMaxExecutionTimeInSeconds(10); + l.setForceSPARQL_1_0_Mode(true); + l.init(); + l.start(); + List<EvaluatedAxiom> axioms = l.getCurrentlyBestEvaluatedAxioms(5); + System.out.println(axioms); + + for(EvaluatedAxiom axiom : axioms){ + printSubset(l.getPositiveExamples(axiom), 10); + printSubset(l.getNegativeExamples(axiom), 10); + l.explainScore(axiom); + System.out.println(((AxiomScore)axiom.getScore()).getTotalNrOfExamples()); + System.out.println(((AxiomScore)axiom.getScore()).getNrOfPositiveExamples()); + } + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -198,22 +198,24 @@ org.apache.log4j.Logger.getRootLogger().setLevel(Level.INFO); org.apache.log4j.Logger.getLogger(DataPropertyDomainAxiomLearner.class).setLevel(Level.INFO); - SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpediaLiveAKSW()); + SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpedia()); + SPARQLReasoner reasoner = new SPARQLReasoner(ks); reasoner.prepareSubsumptionHierarchy(); ObjectPropertyDomainAxiomLearner l = new ObjectPropertyDomainAxiomLearner(ks); l.setReasoner(reasoner); - l.setPropertyToDescribe(new ObjectProperty("http://dbpedia.org/ontology/anthem")); - l.setMaxExecutionTimeInSeconds(40); + l.setPropertyToDescribe(new ObjectProperty("http://dbpedia.org/ontology/birthPlace")); + l.setMaxExecutionTimeInSeconds(10); // l.addFilterNamespace("http://dbpedia.org/ontology/"); // l.setReturnOnlyNewAxioms(true); + l.setForceSPARQL_1_0_Mode(true); l.init(); l.start(); - System.out.println(l.getCurrentlyBestEvaluatedAxioms()); + System.out.println(l.getCurrentlyBestEvaluatedAxioms(0.7)); } } Modified: trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -307,7 +307,7 @@ } protected ResultSet executeSelectQuery(String query) { - logger.debug("Sending query\n{} ...", query); + logger.info("Sending query\n{} ...", query); if(ks.isRemote()){ SparqlEndpoint endpoint = ((SparqlEndpointKS) ks).getEndpoint(); QueryEngineHTTP queryExecution = new QueryEngineHTTP(endpoint.getURL().toString(), Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -27,10 +27,11 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import org.openjena.atlas.io.IO; -import org.openjena.riot.Lang; -import org.openjena.riot.RiotReader; -import org.openjena.riot.WebContent; +import org.apache.jena.atlas.io.IO; +import org.apache.jena.riot.Lang; +import org.apache.jena.riot.RDFLanguages; +import org.apache.jena.riot.RiotReader; +import org.apache.jena.riot.WebContent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -267,7 +268,7 @@ private Model execModel(Model model) { HttpQuery httpQuery = makeHttpQuery() ; - httpQuery.setAccept(WebContent.contentTypeNTriples) ; + httpQuery.setAccept(WebContent.contentTypeNTriplesAlt) ; InputStream in = httpQuery.exec() ; //Don't assume the endpoint actually gives back the content type we asked for @@ -282,7 +283,7 @@ //Try to select language appropriately here based on the model content type Lang lang = WebContent.contentTypeToLang(actualContentType); - if (!lang.isTriples()) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); + if (! RDFLanguages.isTriples(lang)) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); model.read(in, null, "N-TRIPLES") ; return model ; @@ -306,7 +307,7 @@ //Try to select language appropriately here based on the model content type Lang lang = WebContent.contentTypeToLang(actualContentType); - if (!lang.isTriples()) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); + if (! RDFLanguages.isTriples(lang)) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); return RiotReader.createIteratorTriples(in, lang, null); } @@ -527,9 +528,20 @@ //Check that this is a valid setting Lang lang = WebContent.contentTypeToLang(contentType); if (lang == null) throw new IllegalArgumentException("Given Content Type '" + contentType + "' is not supported by RIOT"); - if (!lang.isTriples()) throw new IllegalArgumentException("Given Content Type '" + contentType + " is not a RDF Graph format"); + if (! RDFLanguages.isTriples(lang)) throw new IllegalArgumentException("Given Content Type '" + contentType + " is not a RDF Graph format"); modelContentType = contentType; } + + @Override + public long getTimeout1() { return asMillis(readTimeout, readTimeoutUnit) ; } + + @Override + public long getTimeout2() { return asMillis(connectTimeout, connectTimeoutUnit) ; } + + private static long asMillis(long duration, TimeUnit timeUnit) + { + return (duration < 0 ) ? duration : timeUnit.toMillis(duration) ; + } } Modified: trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -61,7 +61,7 @@ return totalNrOfExamples; } - public int getNrOfpositiveExamples() { + public int getNrOfPositiveExamples() { return nrOfpositiveExamples; } Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -451,7 +451,7 @@ // Comparator<OWLNamedObject> namedObjectComparator = new Comparator<OWLNamedObject>() { public int compare(OWLNamedObject o1, OWLNamedObject o2) { - return o1.getIRI().compareTo(o2.getIRI()); + return o1.compareTo(o2); } }; Set<OWLClass> classes = new TreeSet<OWLClass>(namedObjectComparator); Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -460,6 +460,39 @@ } return types; } + + public Set<NamedClass> getOWLClasses() { + Set<NamedClass> types = new HashSet<NamedClass>(); + String query = String.format("SELECT DISTINCT ?class WHERE {?class a <%s>.}",OWL.Class.getURI()); + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + types.add(new NamedClass(qs.getResource("class").getURI())); + } + return types; + } + + /** + * Returns a set of classes which are siblings, i.e. on the same level + * in the class hierarchy. + * @param cls + * @param limit + * @return + */ + public Set<NamedClass> getSiblingClasses(NamedClass cls) { + Set<NamedClass> siblings = new HashSet<NamedClass>(); + String query = "SELECT ?sub WHERE { <" + cls.getName() + "> <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?super ."; + query += "?sub <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?super ."; + query += "FILTER( !SAMETERM(?sub, <" + cls.getName() + ">)) . }"; + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + siblings.add(new NamedClass(qs.getResource("sub").getURI())); + } + return siblings; + } @Override public boolean hasType(Description description, Individual individual) { @@ -490,12 +523,14 @@ if(limit != 0) { query += " LIMIT " + limit; } - + System.out.println(query); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); - individuals.add(new Individual(qs.getResource("ind").getURI())); + if(qs.get("ind").isURIResource()){ + individuals.add(new Individual(qs.getResource("ind").getURI())); + } } return individuals; } Modified: trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -9,7 +9,9 @@ import com.hp.hpl.jena.query.ParameterizedSparqlString; import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.vocabulary.RDFS; @@ -23,7 +25,12 @@ private ExtractionDBCache cache; private SparqlEndpoint endpoint; + private Model model; + public LabelShortFormProvider(Model model) { + this.model = model; + } + public LabelShortFormProvider(SparqlEndpoint endpoint) { this.endpoint = endpoint; } @@ -59,15 +66,20 @@ protected ResultSet executeSelect(Query query){ ResultSet rs = null; - if(cache != null){ - rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query.toString())); + if(endpoint != null){ + if(cache != null){ + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query.toString())); + } else { + QueryEngineHTTP qe = new QueryEngineHTTP(endpoint.getURL().toString(), query); + for(String uri : endpoint.getDefaultGraphURIs()){ + qe.addDefaultGraph(uri); + } + rs = qe.execSelect(); + } } else { - QueryEngineHTTP qe = new QueryEngineHTTP(endpoint.getURL().toString(), query); - for(String uri : endpoint.getDefaultGraphURIs()){ - qe.addDefaultGraph(uri); - } - rs = qe.execSelect(); + rs = QueryExecutionFactory.create(query, model).execSelect(); } + return rs; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |