From: <lor...@us...> - 2011-07-27 14:33:21
|
Revision: 2970 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2970&view=rev Author: lorenz_b Date: 2011-07-27 14:33:14 +0000 (Wed, 27 Jul 2011) Log Message: ----------- Started simple reasoner for working on SPARQL endpoints. Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Added: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-07-27 14:33:14 UTC (rev 2970) @@ -0,0 +1,342 @@ +package org.dllearner.reasoning; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.dllearner.core.IndividualReasoner; +import org.dllearner.core.SchemaReasoner; +import org.dllearner.core.owl.ClassHierarchy; +import org.dllearner.core.owl.Constant; +import org.dllearner.core.owl.DataRange; +import org.dllearner.core.owl.DatatypeProperty; +import org.dllearner.core.owl.DatatypePropertyHierarchy; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.core.owl.ObjectPropertyHierarchy; +import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.utilities.datastructures.SortedSetTuple; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.RDF; + +public class SPARQLReasoner implements SchemaReasoner, IndividualReasoner{ + + private SparqlEndpointKS ks; + + public SPARQLReasoner(SparqlEndpointKS ks) { + this.ks = ks; + } + + @Override + public Set<NamedClass> getTypes(Individual individual) { + Set<NamedClass> types = new HashSet<NamedClass>(); + String query = + "SELECT ?class WHERE {" + + inAngleBrackets(individual.getName()) + "a ?class.}"; + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + types.add(new NamedClass(qs.getResource("class").getURI())); + } + return types; + } + + @Override + public boolean hasType(Description description, Individual individual) { + if(!(description instanceof NamedClass)){ + throw new UnsupportedOperationException("Only named classes are supported."); + } + String query = String.format("ASK {%s a %s}",inAngleBrackets(individual.toString()), inAngleBrackets(((NamedClass)description).getName())); + boolean hasType = executeAskQuery(query); + return hasType; + } + + @Override + public SortedSet<Individual> hasType(Description description, Set<Individual> individuals) { + throw new UnsupportedOperationException(); + } + + @Override + public SortedSet<Individual> getIndividuals(Description description) { + if(!(description instanceof NamedClass)){ + throw new UnsupportedOperationException("Only named classes are supported."); + } + SortedSet<Individual> individuals = new TreeSet<Individual>(); + String query = String.format("SELECT ?ind WHERE {?ind a %s}", inAngleBrackets(((NamedClass)description).getName())); + + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + individuals.add(new Individual(qs.getResource("ind").getURI())); + } + return individuals; + } + + @Override + public SortedSetTuple<Individual> doubleRetrieval(Description description) { + throw new UnsupportedOperationException(); + } + + @Override + public Set<Individual> getRelatedIndividuals(Individual individual, ObjectProperty objectProperty) { + Set<Individual> individuals = new HashSet<Individual>(); + String query = String.format("SELECT ?ind WHERE {%s %s ?ind, FILTER(isIRI(?ind))}", inAngleBrackets(individual.getName()), inAngleBrackets(objectProperty.getName())); + + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + individuals.add(new Individual(qs.getResource("ind").getURI())); + } + return individuals; + } + + @Override + public Set<Constant> getRelatedValues(Individual individual, DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map<ObjectProperty, Set<Individual>> getObjectPropertyRelationships(Individual individual) { + Map<ObjectProperty, Set<Individual>> prop2individuals = new HashMap<ObjectProperty, Set<Individual>>(); + String query = String.format("select ?prop ?ind WHERE {" + + "%s ?prop ?ind." + + " FILTER(isIRI(?ind) && ?prop != %s && ?prop != %s)}", + inAngleBrackets(individual.getName()), inAngleBrackets(RDF.type.getURI()), inAngleBrackets(OWL.sameAs.getURI())); + + ResultSet rs = executeQuery(query); + QuerySolution qs; + Set<Individual> individuals; + ObjectProperty property; + Individual ind; + while(rs.hasNext()){ + qs = rs.next(); + ind = new Individual(qs.getResource("ind").getURI()); + property = new ObjectProperty(qs.getResource("prop").getURI()); + individuals = prop2individuals.get(property); + if(individuals == null){ + individuals = new HashSet<Individual>(); + prop2individuals.put(property, individuals); + } + individuals.add(ind); + + } + return prop2individuals; + } + + @Override + public Map<Individual, SortedSet<Individual>> getPropertyMembers(ObjectProperty objectProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map<Individual, SortedSet<Constant>> getDatatypeMembers(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map<Individual, SortedSet<Double>> getDoubleDatatypeMembers(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map<Individual, SortedSet<Integer>> getIntDatatypeMembers(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map<Individual, SortedSet<Boolean>> getBooleanDatatypeMembers(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortedSet<Individual> getTrueDatatypeMembers(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortedSet<Individual> getFalseDatatypeMembers(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map<Individual, SortedSet<String>> getStringDatatypeMembers(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set<NamedClass> getInconsistentClasses() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Description getDomain(ObjectProperty objectProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Description getDomain(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Description getRange(ObjectProperty objectProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public DataRange getRange(DatatypeProperty datatypeProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isSuperClassOf(Description superClass, Description subClass) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isEquivalentClass(Description class1, Description class2) { + // TODO Auto-generated method stub + return false; + } + + @Override + public Set<Description> getAssertedDefinitions(NamedClass namedClass) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set<Description> isSuperClassOf(Set<Description> superClasses, Description subClasses) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ClassHierarchy getClassHierarchy() { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortedSet<Description> getSuperClasses(Description description) { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortedSet<Description> getSubClasses(Description description) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ObjectPropertyHierarchy getObjectPropertyHierarchy() { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortedSet<ObjectProperty> getSuperProperties(ObjectProperty objectProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortedSet<ObjectProperty> getSubProperties(ObjectProperty objectProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public TreeSet<ObjectProperty> getMostGeneralProperties() { + throw new UnsupportedOperationException(); + } + + @Override + public TreeSet<ObjectProperty> getMostSpecialProperties() { + throw new UnsupportedOperationException(); + } + + @Override + public DatatypePropertyHierarchy getDatatypePropertyHierarchy() { + throw new UnsupportedOperationException(); + } + + @Override + public SortedSet<DatatypeProperty> getSuperProperties(DatatypeProperty dataProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public SortedSet<DatatypeProperty> getSubProperties(DatatypeProperty dataProperty) { + // TODO Auto-generated method stub + return null; + } + + @Override + public TreeSet<DatatypeProperty> getMostGeneralDatatypeProperties() { + throw new UnsupportedOperationException(); + } + + @Override + public TreeSet<DatatypeProperty> getMostSpecialDatatypeProperties() { + throw new UnsupportedOperationException(); + } + + private ResultSet executeQuery(String query){ + QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); + for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { + queryExecution.addDefaultGraph(dgu); + } + for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { + queryExecution.addNamedGraph(ngu); + } + ResultSet resultset = queryExecution.execSelect(); + return resultset; + } + + private boolean executeAskQuery(String query){ + QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); + for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { + queryExecution.addDefaultGraph(dgu); + } + for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { + queryExecution.addNamedGraph(ngu); + } + boolean ret = queryExecution.execAsk(); + return ret; + } + + private String inAngleBrackets(String s){ + return "<" + s + ">"; + } + +} Property changes on: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-07-28 13:02:07
|
Revision: 2972 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2972&view=rev Author: lorenz_b Date: 2011-07-28 13:02:01 +0000 (Thu, 28 Jul 2011) Log Message: ----------- Implemented more methods in SPARQL reasoner. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-07-28 08:30:40 UTC (rev 2971) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-07-28 13:02:01 UTC (rev 2972) @@ -5,7 +5,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -387,20 +386,46 @@ @Override public boolean isSuperClassOf(Description superClass, Description subClass) { - // TODO Auto-generated method stub - return false; + if(!(superClass instanceof NamedClass) && !(subClass instanceof NamedClass)){ + throw new IllegalArgumentException("Only named classes are supported."); + } + String query = String.format("ASK {%s %s %s.}", + inAngleBrackets(((NamedClass)subClass).getURI().toString()), + inAngleBrackets(RDFS.subClassOf.getURI()), + inAngleBrackets(((NamedClass)superClass).getURI().toString())); + boolean superClassOf = executeAskQuery(query); + return superClassOf; } @Override public boolean isEquivalentClass(Description class1, Description class2) { - // TODO Auto-generated method stub - return false; + if(!(class1 instanceof NamedClass) && !(class2 instanceof NamedClass)){ + throw new IllegalArgumentException("Only named classes are supported."); + } + String query = String.format("ASK {%s %s %s.}", + inAngleBrackets(((NamedClass)class1).getURI().toString()), + inAngleBrackets(OWL.equivalentClass.getURI()), + inAngleBrackets(((NamedClass)class2).getURI().toString())); + boolean equivalentClass = executeAskQuery(query); + return equivalentClass; } @Override public Set<Description> getAssertedDefinitions(NamedClass namedClass) { - // TODO Auto-generated method stub - return null; + Set<Description> definitions = new HashSet<Description>(); + String query = String.format("SELECT ?class {%s %s ?class. FILTER(isIRI(?class))} UNION {?class. %s %s. FILTER(isIRI(?class))}", + inAngleBrackets(namedClass.getURI().toString()), + inAngleBrackets(OWL.equivalentClass.getURI()), + inAngleBrackets(OWL.equivalentClass.getURI()), + inAngleBrackets(namedClass.getURI().toString()) + ); + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + definitions.add(new NamedClass(qs.getResource("class").getURI())); + } + return definitions; } @Override @@ -417,14 +442,41 @@ @Override public SortedSet<Description> getSuperClasses(Description description) { - // TODO Auto-generated method stub - return null; + if(!(description instanceof NamedClass)){ + throw new IllegalArgumentException("Only named classes are supported."); + } + SortedSet<Description> superClasses = new TreeSet<Description>(); + String query = String.format("SELECT ?sup {%s %s ?sup. FILTER(isIRI(?sup))}", + inAngleBrackets(((NamedClass)description).getURI().toString()), + inAngleBrackets(RDFS.subClassOf.getURI()) + ); + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + superClasses.add(new NamedClass(qs.getResource("sup").getURI())); + } + return superClasses; } @Override public SortedSet<Description> getSubClasses(Description description) { - // TODO Auto-generated method stub - return null; + if(!(description instanceof NamedClass)){ + throw new IllegalArgumentException("Only named classes are supported."); + } + SortedSet<Description> subClasses = new TreeSet<Description>(); + String query = String.format("SELECT ?sub {?sub %s %s. FILTER(isIRI(?sub))}", + inAngleBrackets(RDFS.subClassOf.getURI()), + inAngleBrackets(((NamedClass)description).getURI().toString()) + + ); + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + subClasses.add(new NamedClass(qs.getResource("sub").getURI())); + } + return subClasses; } @Override @@ -435,14 +487,35 @@ @Override public SortedSet<ObjectProperty> getSuperProperties(ObjectProperty objectProperty) { - // TODO Auto-generated method stub - return null; + SortedSet<ObjectProperty> superProperties = new TreeSet<ObjectProperty>(); + String query = String.format("SELECT ?sup {%s %s ?sup. FILTER(isIRI(?sup))}", + inAngleBrackets(objectProperty.getURI().toString()), + inAngleBrackets(RDFS.subPropertyOf.getURI()) + ); + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + superProperties.add(new ObjectProperty(qs.getResource("sup").getURI())); + } + return superProperties; } @Override public SortedSet<ObjectProperty> getSubProperties(ObjectProperty objectProperty) { - // TODO Auto-generated method stub - return null; + SortedSet<ObjectProperty> subProperties = new TreeSet<ObjectProperty>(); + String query = String.format("SELECT ?sub {?sub %s %s. FILTER(isIRI(?sub))}", + inAngleBrackets(RDFS.subPropertyOf.getURI()), + inAngleBrackets(objectProperty.getURI().toString()) + + ); + ResultSet rs = executeQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + subProperties.add(new ObjectProperty(qs.getResource("sub").getURI())); + } + return subProperties; } @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-08-15 13:22:21
|
Revision: 3044 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3044&view=rev Author: lorenz_b Date: 2011-08-15 13:22:15 +0000 (Mon, 15 Aug 2011) Log Message: ----------- Clean up. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-15 13:09:06 UTC (rev 3043) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-15 13:22:15 UTC (rev 3044) @@ -50,9 +50,7 @@ @Override public Set<NamedClass> getTypes(Individual individual) { Set<NamedClass> types = new HashSet<NamedClass>(); - String query = - "SELECT ?class WHERE {" + - inAngleBrackets(individual.getName()) + "a ?class.}"; + String query = String.format("SELECT ?class WHERE {<%s> a ?class.}", individual.getName()); ResultSet rs = executeQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -67,7 +65,7 @@ if(!(description instanceof NamedClass)){ throw new UnsupportedOperationException("Only named classes are supported."); } - String query = String.format("ASK {%s a %s}",inAngleBrackets(individual.toString()), inAngleBrackets(((NamedClass)description).getName())); + String query = String.format("ASK {<%s> a <%s>}", individual.toString(), ((NamedClass)description).getName()); boolean hasType = executeAskQuery(query); return hasType; } @@ -87,7 +85,7 @@ throw new UnsupportedOperationException("Only named classes are supported."); } SortedSet<Individual> individuals = new TreeSet<Individual>(); - String query = String.format("SELECT ?ind WHERE {?ind a %s}", inAngleBrackets(((NamedClass)description).getName())); + String query = String.format("SELECT ?ind WHERE {?ind a <%s>}", ((NamedClass)description).getName()); if(limit != 0) { query += " LIMIT " + limit; } @@ -109,7 +107,7 @@ @Override public Set<Individual> getRelatedIndividuals(Individual individual, ObjectProperty objectProperty) { Set<Individual> individuals = new HashSet<Individual>(); - String query = String.format("SELECT ?ind WHERE {%s %s ?ind, FILTER(isIRI(?ind))}", inAngleBrackets(individual.getName()), inAngleBrackets(objectProperty.getName())); + String query = String.format("SELECT ?ind WHERE {<%s> <%s> ?ind, FILTER(isIRI(?ind))}", individual.getName(), objectProperty.getName()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -130,9 +128,9 @@ public Map<ObjectProperty, Set<Individual>> getObjectPropertyRelationships(Individual individual) { Map<ObjectProperty, Set<Individual>> prop2individuals = new HashMap<ObjectProperty, Set<Individual>>(); String query = String.format("SELECT ?prop ?ind WHERE {" + - "%s ?prop ?ind." + - " FILTER(isIRI(?ind) && ?prop != %s && ?prop != %s)}", - inAngleBrackets(individual.getName()), inAngleBrackets(RDF.type.getURI()), inAngleBrackets(OWL.sameAs.getURI())); + "<%s> ?prop ?ind." + + " FILTER(isIRI(?ind) && ?prop != <%s> && ?prop != <%s>)}", + individual.getName(), RDF.type.getURI(), OWL.sameAs.getURI()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -158,9 +156,9 @@ public Map<Individual, SortedSet<Individual>> getPropertyMembers(ObjectProperty objectProperty) { Map<Individual, SortedSet<Individual>> subject2objects = new HashMap<Individual, SortedSet<Individual>>(); String query = String.format("SELECT ?s ?o WHERE {" + - "?s %s ?o." + + "?s <%s> ?o." + " FILTER(isIRI(?o))}", - inAngleBrackets(objectProperty.getName())); + objectProperty.getName()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -192,9 +190,9 @@ public Map<Individual, SortedSet<Double>> getDoubleDatatypeMembers(DatatypeProperty datatypeProperty) { Map<Individual, SortedSet<Double>> subject2objects = new HashMap<Individual, SortedSet<Double>>(); String query = String.format("SELECT ?s ?o WHERE {" + - "?s %s ?o." + - " FILTER(DATATYPE(?o) = %s)}", - inAngleBrackets(datatypeProperty.getName()), inAngleBrackets(XSD.DOUBLE.toStringID())); + "?s <%s> ?o." + + " FILTER(DATATYPE(?o) = <%s>)}", + datatypeProperty.getName(), XSD.DOUBLE.toStringID()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -220,9 +218,9 @@ public Map<Individual, SortedSet<Integer>> getIntDatatypeMembers(DatatypeProperty datatypeProperty) { Map<Individual, SortedSet<Integer>> subject2objects = new HashMap<Individual, SortedSet<Integer>>(); String query = String.format("SELECT ?s ?o WHERE {" + - "?s %s ?o." + - " FILTER(DATATYPE(?o) = %s)}", - inAngleBrackets(datatypeProperty.getName()), inAngleBrackets(XSD.INT.toStringID())); + "?s <%s> ?o." + + " FILTER(DATATYPE(?o) = <%s>)}", + datatypeProperty.getName(), XSD.INT.toStringID()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -248,9 +246,9 @@ public Map<Individual, SortedSet<Boolean>> getBooleanDatatypeMembers(DatatypeProperty datatypeProperty) { Map<Individual, SortedSet<Boolean>> subject2objects = new HashMap<Individual, SortedSet<Boolean>>(); String query = String.format("SELECT ?s ?o WHERE {" + - "?s %s ?o." + - " FILTER(DATATYPE(?o) = %s)}", - inAngleBrackets(datatypeProperty.getName()), inAngleBrackets(XSD.BOOLEAN.toStringID())); + "?s <%s> ?o." + + " FILTER(DATATYPE(?o) = <%s>)}", + datatypeProperty.getName(), XSD.BOOLEAN.toStringID()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -276,10 +274,10 @@ public SortedSet<Individual> getTrueDatatypeMembers(DatatypeProperty datatypeProperty) { SortedSet<Individual> members = new TreeSet<Individual>(); String query = String.format("SELECT ?ind WHERE {" + - "?ind %s ?o." + - " FILTER(isLiteral(?o) && DATATYPE(?o) = %s && ?o=%s)}", - inAngleBrackets(datatypeProperty.getName()), inAngleBrackets(XSD.BOOLEAN.toStringID()), - "\"true\"^^"+inAngleBrackets(XSD.BOOLEAN.toStringID())); + "?ind <%s> ?o." + + " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = <%s>)}", + datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), + "\"true\"^^<" + XSD.BOOLEAN.toStringID() + ">"); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -295,10 +293,10 @@ public SortedSet<Individual> getFalseDatatypeMembers(DatatypeProperty datatypeProperty) { SortedSet<Individual> members = new TreeSet<Individual>(); String query = String.format("SELECT ?ind WHERE {" + - "?ind %s ?o." + - " FILTER(isLiteral(?o) && DATATYPE(?o) = %s && ?o=%s)}", - inAngleBrackets(datatypeProperty.getName()), inAngleBrackets(XSD.BOOLEAN.toStringID()), - "\"false\"^^"+inAngleBrackets(XSD.BOOLEAN.toStringID())); + "?ind <%s> ?o." + + " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = <%s>)}", + datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), + "\"false\"^^<"+XSD.BOOLEAN.toStringID() + ">"); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -324,9 +322,9 @@ @Override public Description getDomain(ObjectProperty objectProperty) { String query = String.format("SELECT ?domain WHERE {" + - "%s %s ?domain. FILTER(isIRI(?domain))" + + "<%s> <%s> ?domain. FILTER(isIRI(?domain))" + "}", - inAngleBrackets(objectProperty.getName()), inAngleBrackets(RDFS.domain.getURI())); + objectProperty.getName(), RDFS.domain.getURI()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -347,9 +345,9 @@ @Override public Description getDomain(DatatypeProperty datatypeProperty) { String query = String.format("SELECT ?domain WHERE {" + - "%s %s ?domain. FILTER(isIRI(?domain))" + + "<%s> <%s> ?domain. FILTER(isIRI(?domain))" + "}", - inAngleBrackets(datatypeProperty.getName()), inAngleBrackets(RDFS.domain.getURI())); + datatypeProperty.getName(), RDFS.domain.getURI()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -370,9 +368,9 @@ @Override public Description getRange(ObjectProperty objectProperty) { String query = String.format("SELECT ?range WHERE {" + - "%s %s ?range. FILTER(isIRI(?range))" + + "<%s> <%s> ?range. FILTER(isIRI(?range))" + "}", - inAngleBrackets(objectProperty.getName()), inAngleBrackets(RDFS.range.getURI())); + objectProperty.getName(), RDFS.range.getURI()); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -401,10 +399,10 @@ if(!(superClass instanceof NamedClass) && !(subClass instanceof NamedClass)){ throw new IllegalArgumentException("Only named classes are supported."); } - String query = String.format("ASK {%s %s %s.}", - inAngleBrackets(((NamedClass)subClass).getURI().toString()), - inAngleBrackets(RDFS.subClassOf.getURI()), - inAngleBrackets(((NamedClass)superClass).getURI().toString())); + String query = String.format("ASK {<%s> <%s> <%s>.}", + ((NamedClass)subClass).getURI().toString(), + RDFS.subClassOf.getURI(), + ((NamedClass)superClass).getURI().toString()); boolean superClassOf = executeAskQuery(query); return superClassOf; } @@ -414,10 +412,10 @@ if(!(class1 instanceof NamedClass) && !(class2 instanceof NamedClass)){ throw new IllegalArgumentException("Only named classes are supported."); } - String query = String.format("ASK {%s %s %s.}", - inAngleBrackets(((NamedClass)class1).getURI().toString()), - inAngleBrackets(OWL.equivalentClass.getURI()), - inAngleBrackets(((NamedClass)class2).getURI().toString())); + String query = String.format("ASK {<%s> <%s> <%s>.}", + ((NamedClass)class1).getURI().toString(), + OWL.equivalentClass.getURI(), + ((NamedClass)class2).getURI().toString()); boolean equivalentClass = executeAskQuery(query); return equivalentClass; } @@ -425,11 +423,11 @@ @Override public Set<Description> getAssertedDefinitions(NamedClass namedClass) { Set<Description> definitions = new HashSet<Description>(); - String query = String.format("SELECT ?class { {%s %s ?class. FILTER(isIRI(?class))} UNION {?class. %s %s. FILTER(isIRI(?class))} }", - inAngleBrackets(namedClass.getURI().toString()), - inAngleBrackets(OWL.equivalentClass.getURI()), - inAngleBrackets(OWL.equivalentClass.getURI()), - inAngleBrackets(namedClass.getURI().toString()) + String query = String.format("SELECT ?class { {<%s> <%s> ?class. FILTER(isIRI(?class))} UNION {?class. <%s> <%s>. FILTER(isIRI(?class))} }", + namedClass.getURI().toString(), + OWL.equivalentClass.getURI(), + OWL.equivalentClass.getURI(), + namedClass.getURI().toString() ); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -458,9 +456,9 @@ throw new IllegalArgumentException("Only named classes are supported."); } SortedSet<Description> superClasses = new TreeSet<Description>(); - String query = String.format("SELECT ?sup {%s %s ?sup. FILTER(isIRI(?sup))}", - inAngleBrackets(((NamedClass)description).getURI().toString()), - inAngleBrackets(RDFS.subClassOf.getURI()) + String query = String.format("SELECT ?sup {<%s> <%s> ?sup. FILTER(isIRI(?sup))}", + ((NamedClass)description).getURI().toString(), + RDFS.subClassOf.getURI() ); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -477,9 +475,9 @@ throw new IllegalArgumentException("Only named classes are supported."); } SortedSet<Description> subClasses = new TreeSet<Description>(); - String query = String.format("SELECT ?sub {?sub %s %s. FILTER(isIRI(?sub))}", - inAngleBrackets(RDFS.subClassOf.getURI()), - inAngleBrackets(((NamedClass)description).getURI().toString()) + String query = String.format("SELECT ?sub {?sub <%s> <%s>. FILTER(isIRI(?sub))}", + RDFS.subClassOf.getURI(), + ((NamedClass)description).getURI().toString() ); ResultSet rs = executeQuery(query); @@ -500,9 +498,9 @@ @Override public SortedSet<ObjectProperty> getSuperProperties(ObjectProperty objectProperty) { SortedSet<ObjectProperty> superProperties = new TreeSet<ObjectProperty>(); - String query = String.format("SELECT ?sup {%s %s ?sup. FILTER(isIRI(?sup))}", - inAngleBrackets(objectProperty.getURI().toString()), - inAngleBrackets(RDFS.subPropertyOf.getURI()) + String query = String.format("SELECT ?sup {<%s> <%s> ?sup. FILTER(isIRI(?sup))}", + objectProperty.getURI().toString(), + RDFS.subPropertyOf.getURI() ); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -516,9 +514,9 @@ @Override public SortedSet<ObjectProperty> getSubProperties(ObjectProperty objectProperty) { SortedSet<ObjectProperty> subProperties = new TreeSet<ObjectProperty>(); - String query = String.format("SELECT ?sub {?sub %s %s. FILTER(isIRI(?sub))}", - inAngleBrackets(RDFS.subPropertyOf.getURI()), - inAngleBrackets(objectProperty.getURI().toString()) + String query = String.format("SELECT ?sub {?sub <%s> <%s>. FILTER(isIRI(?sub))}", + RDFS.subPropertyOf.getURI(), + objectProperty.getURI().toString() ); ResultSet rs = executeQuery(query); @@ -548,9 +546,9 @@ @Override public SortedSet<DatatypeProperty> getSuperProperties(DatatypeProperty dataProperty) { SortedSet<DatatypeProperty> superProperties = new TreeSet<DatatypeProperty>(); - String query = String.format("SELECT ?sup {%s %s ?sup. FILTER(isIRI(?sup))}", - inAngleBrackets(dataProperty.getURI().toString()), - inAngleBrackets(RDFS.subPropertyOf.getURI()) + String query = String.format("SELECT ?sup {<%s> <%s> ?sup. FILTER(isIRI(?sup))}", + dataProperty.getURI().toString(), + RDFS.subPropertyOf.getURI() ); ResultSet rs = executeQuery(query); QuerySolution qs; @@ -564,9 +562,9 @@ @Override public SortedSet<DatatypeProperty> getSubProperties(DatatypeProperty dataProperty) { SortedSet<DatatypeProperty> subProperties = new TreeSet<DatatypeProperty>(); - String query = String.format("SELECT ?sub {?sub %s %s. FILTER(isIRI(?sub))}", - inAngleBrackets(RDFS.subPropertyOf.getURI()), - inAngleBrackets(dataProperty.getURI().toString()) + String query = String.format("SELECT ?sub {?sub <%s> <%s>. FILTER(isIRI(?sub))}", + RDFS.subPropertyOf.getURI(), + dataProperty.getURI().toString() ); ResultSet rs = executeQuery(query); @@ -613,9 +611,6 @@ return ret; } - private String inAngleBrackets(String s){ - return "<" + s + ">"; - } public static void main(String[] args) { String NS = "http://dbpedia.org/ontology/"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-08-25 15:10:17
|
Revision: 3125 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3125&view=rev Author: lorenz_b Date: 2011-08-25 15:10:11 +0000 (Thu, 25 Aug 2011) Log Message: ----------- Added method to compute subsumption hierarchy. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-25 15:09:12 UTC (rev 3124) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-25 15:10:11 UTC (rev 3125) @@ -26,9 +26,11 @@ import java.util.Map; import java.util.Set; import java.util.SortedSet; +import java.util.TreeMap; import java.util.TreeSet; import org.dllearner.core.IndividualReasoner; +import org.dllearner.core.ReasoningMethodUnsupportedException; import org.dllearner.core.SchemaReasoner; import org.dllearner.core.owl.ClassHierarchy; import org.dllearner.core.owl.Constant; @@ -39,11 +41,15 @@ import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.Intersection; import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.Nothing; import org.dllearner.core.owl.ObjectProperty; import org.dllearner.core.owl.ObjectPropertyHierarchy; +import org.dllearner.core.owl.Thing; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.utilities.datastructures.SortedSetTuple; +import org.dllearner.utilities.owl.ConceptComparator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +70,47 @@ public SPARQLReasoner(SparqlEndpointKS ks) { this.ks = ks; } + + public final ClassHierarchy prepareSubsumptionHierarchy() { + logger.info("Preparing subsumption hierarchy ..."); + long startTime = System.currentTimeMillis(); + ConceptComparator conceptComparator = new ConceptComparator(); + TreeMap<Description, SortedSet<Description>> subsumptionHierarchyUp = new TreeMap<Description, SortedSet<Description>>( + conceptComparator); + TreeMap<Description, SortedSet<Description>> subsumptionHierarchyDown = new TreeMap<Description, SortedSet<Description>>( + conceptComparator); + // parents/children of top ... + SortedSet<Description> tmp = getSubClasses(Thing.instance); + subsumptionHierarchyUp.put(Thing.instance, new TreeSet<Description>()); + subsumptionHierarchyDown.put(Thing.instance, tmp); + + // ... bottom ... + tmp = getSuperClasses(Nothing.instance); + subsumptionHierarchyUp.put(Nothing.instance, tmp); + subsumptionHierarchyDown.put(Nothing.instance, new TreeSet<Description>()); + + // ... and named classes + Set<NamedClass> atomicConcepts = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); + for (NamedClass atom : atomicConcepts) { + tmp = getSubClasses(atom); + // quality control: we explicitly check that no reasoner implementation returns null here + if(tmp == null) { + logger.error("Class hierarchy: getSubClasses returned null instead of empty set."); + } + subsumptionHierarchyDown.put(atom, tmp); + + tmp = getSuperClasses(atom); + // quality control: we explicitly check that no reasoner implementation returns null here + if(tmp == null) { + logger.error("Class hierarchy: getSuperClasses returned null instead of empty set."); + } + subsumptionHierarchyUp.put(atom, tmp); + } + logger.info("... done in {}ms", (System.currentTimeMillis()-startTime)); + return new ClassHierarchy(subsumptionHierarchyUp, subsumptionHierarchyDown); + } + @Override public Set<NamedClass> getTypes(Individual individual) { Set<NamedClass> types = new HashSet<NamedClass>(); @@ -470,9 +516,12 @@ @Override public SortedSet<Description> getSuperClasses(Description description) { - if(!(description instanceof NamedClass)){ + if(!(description instanceof NamedClass || description instanceof Thing || description instanceof Nothing)){ throw new IllegalArgumentException("Only named classes are supported."); } + if(description instanceof Nothing){ + description = new NamedClass("http://www.w3.org/2002/07/owl#Nothing"); + } SortedSet<Description> superClasses = new TreeSet<Description>(); String query = String.format("SELECT ?sup {<%s> <%s> ?sup. FILTER(isIRI(?sup))}", ((NamedClass)description).getURI().toString(), @@ -505,9 +554,12 @@ @Override public SortedSet<Description> getSubClasses(Description description) { - if(!(description instanceof NamedClass)){ + if(!(description instanceof NamedClass || description instanceof Thing)){ throw new IllegalArgumentException("Only named classes are supported."); } + if(description instanceof Thing){ + description = new NamedClass(Thing.instance.getURI()); + } SortedSet<Description> subClasses = new TreeSet<Description>(); String query = String.format("SELECT ?sub {?sub <%s> <%s>. FILTER(isIRI(?sub))}", RDFS.subClassOf.getURI(), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-08-29 12:56:32
|
Revision: 3158 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3158&view=rev Author: lorenz_b Date: 2011-08-29 12:56:26 +0000 (Mon, 29 Aug 2011) Log Message: ----------- Added method to load schema. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-29 09:11:38 UTC (rev 3157) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-29 12:56:26 UTC (rev 3158) @@ -29,6 +29,9 @@ import java.util.TreeMap; import java.util.TreeSet; +import org.aksw.commons.sparql.api.core.QueryExecutionFactory; +import org.aksw.commons.sparql.api.http.QueryExecutionFactoryHttp; +import org.aksw.commons.sparql.api.pagination.core.QueryExecutionFactoryPaginated; import org.dllearner.core.IndividualReasoner; import org.dllearner.core.ReasoningMethodUnsupportedException; import org.dllearner.core.SchemaReasoner; @@ -56,8 +59,12 @@ import com.clarkparsia.owlapiv3.XSD; 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.Statement; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.OWL2; import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; @@ -110,12 +117,49 @@ logger.info("... done in {}ms", (System.currentTimeMillis()-startTime)); return new ClassHierarchy(subsumptionHierarchyUp, subsumptionHierarchyDown); } + + public void loadSchema(){ + Model model = ModelFactory.createDefaultModel(); + + //load class hierarchy + String query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o} WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o}"; + model.add(loadIncrementally(query)); + query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#equivalentClass> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#equivalentClass> ?o}"; + model.add(loadIncrementally(query)); + query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#disjointWith> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#disjointWith> ?o}"; + model.add(loadIncrementally(query)); + //load domain axioms + query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#domain> ?o} WHERE {?s <http://www.w3.org/2000/01/rdf-schema#domain> ?o}"; + model.add(loadIncrementally(query)); + //load range axioms + query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#range> ?o} WHERE {?s <http://www.w3.org/2000/01/rdf-schema#range> ?o}"; + model.add(loadIncrementally(query)); + //load property hierarchy + query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> ?o} WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> ?o}"; + model.add(loadIncrementally(query)); + query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#equivalentProperty> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#equivalentProperty> ?o}"; + model.add(loadIncrementally(query)); + query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#propertyDisjointWith> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#propertyDisjointWith> ?o}"; + model.add(loadIncrementally(query)); + + + for(Statement st : model.listStatements().toList()){ + System.out.println(st); + } + } + + private Model loadIncrementally(String query){ + QueryExecutionFactory f = new QueryExecutionFactoryHttp(ks.getEndpoint().getURL().toString(), ks.getEndpoint().getDefaultGraphURIs()); + f = new QueryExecutionFactoryPaginated(f, 1000); + Model model = f.createQueryExecution(query).execConstruct(); + return model; + } @Override public Set<NamedClass> getTypes(Individual individual) { Set<NamedClass> types = new HashSet<NamedClass>(); String query = String.format("SELECT ?class WHERE {<%s> a ?class.}", individual.getName()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -154,7 +198,7 @@ query += " LIMIT " + limit; } - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -173,7 +217,7 @@ Set<Individual> individuals = new HashSet<Individual>(); String query = String.format("SELECT ?ind WHERE {<%s> <%s> ?ind, FILTER(isIRI(?ind))}", individual.getName(), objectProperty.getName()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -196,7 +240,7 @@ " FILTER(isIRI(?ind) && ?prop != <%s> && ?prop != <%s>)}", individual.getName(), RDF.type.getURI(), OWL.sameAs.getURI()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Set<Individual> individuals; ObjectProperty property; @@ -224,7 +268,7 @@ " FILTER(isIRI(?o))}", objectProperty.getName()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; Individual obj; @@ -258,7 +302,7 @@ " FILTER(DATATYPE(?o) = <%s>)}", datatypeProperty.getName(), XSD.DOUBLE.toStringID()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; Double obj; @@ -286,7 +330,7 @@ " FILTER(DATATYPE(?o) = <%s>)}", datatypeProperty.getName(), XSD.INT.toStringID()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; Integer obj; @@ -314,7 +358,7 @@ " FILTER(DATATYPE(?o) = <%s>)}", datatypeProperty.getName(), XSD.BOOLEAN.toStringID()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; Boolean obj; @@ -343,7 +387,7 @@ datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), "\"true\"^^<" + XSD.BOOLEAN.toStringID() + ">"); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -362,7 +406,7 @@ datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), "\"false\"^^<"+XSD.BOOLEAN.toStringID() + ">"); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -390,7 +434,7 @@ "}", objectProperty.getName(), RDFS.domain.getURI()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; List<Description> domains = new ArrayList<Description>(); while(rs.hasNext()){ @@ -413,7 +457,7 @@ "}", datatypeProperty.getName(), RDFS.domain.getURI()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; List<Description> domains = new ArrayList<Description>(); while(rs.hasNext()){ @@ -436,7 +480,7 @@ "}", objectProperty.getName(), RDFS.range.getURI()); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; List<Description> ranges = new ArrayList<Description>(); while(rs.hasNext()){ @@ -493,7 +537,7 @@ OWL.equivalentClass.getURI(), namedClass.getURI().toString() ); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -527,7 +571,7 @@ ((NamedClass)description).getURI().toString(), RDFS.subClassOf.getURI() ); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -566,7 +610,7 @@ ((NamedClass)description).getURI().toString() ); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -588,7 +632,7 @@ objectProperty.getURI().toString(), RDFS.subPropertyOf.getURI() ); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -605,7 +649,7 @@ objectProperty.getURI().toString() ); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -636,7 +680,7 @@ dataProperty.getURI().toString(), RDFS.subPropertyOf.getURI() ); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -653,7 +697,7 @@ dataProperty.getURI().toString() ); - ResultSet rs = executeQuery(query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -672,7 +716,7 @@ throw new UnsupportedOperationException(); } - private ResultSet executeQuery(String query){ + private ResultSet executeSelectQuery(String query){ logger.info("Sending query \n {}", query); QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { @@ -697,12 +741,26 @@ return ret; } + private Model executeConstructQuery(String query){ + QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); + for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { + queryExecution.addDefaultGraph(dgu); + } + for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { + queryExecution.addNamedGraph(ngu); + } + Model ret = queryExecution.execConstruct(); + return ret; + } + public static void main(String[] args) { String NS = "http://dbpedia.org/ontology/"; SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpediaLiveAKSW()); SPARQLReasoner r = new SPARQLReasoner(ks); + r.loadSchema(); + // ObjectProperty oP = new ObjectProperty(NS + "league"); // for(Entry<Individual, SortedSet<Individual>> entry : r.getPropertyMembers(oP).entrySet()){ // System.out.println(entry.getKey()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-08-29 13:25:38
|
Revision: 3161 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3161&view=rev Author: lorenz_b Date: 2011-08-29 13:25:30 +0000 (Mon, 29 Aug 2011) Log Message: ----------- Extended schema loading method. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-29 13:02:23 UTC (rev 3160) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-29 13:25:30 UTC (rev 3161) @@ -53,6 +53,7 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.owl.ConceptComparator; +import org.semanticweb.owlapi.model.AxiomType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -141,8 +142,21 @@ model.add(loadIncrementally(query)); query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#propertyDisjointWith> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#propertyDisjointWith> ?o}"; model.add(loadIncrementally(query)); + Set<AxiomType> propertyCharacteristics = new HashSet<AxiomType>(); + propertyCharacteristics.add(AxiomType.TRANSITIVE_OBJECT_PROPERTY); + propertyCharacteristics.add(AxiomType.FUNCTIONAL_DATA_PROPERTY); + propertyCharacteristics.add(AxiomType.FUNCTIONAL_OBJECT_PROPERTY); + propertyCharacteristics.add(AxiomType.REFLEXIVE_OBJECT_PROPERTY); + propertyCharacteristics.add(AxiomType.IRREFLEXIVE_OBJECT_PROPERTY); + propertyCharacteristics.add(AxiomType.INVERSE_FUNCTIONAL_OBJECT_PROPERTY); + propertyCharacteristics.add(AxiomType.SYMMETRIC_OBJECT_PROPERTY); + propertyCharacteristics.add(AxiomType.ASYMMETRIC_OBJECT_PROPERTY); + + for(AxiomType type : propertyCharacteristics){ + query = "CONSTRUCT {?s a <%s>} WHERE {?s a %s}".replaceAll("%s", type.getName()); + model.add(loadIncrementally(query)); + } - for(Statement st : model.listStatements().toList()){ System.out.println(st); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-08-31 07:36:41
|
Revision: 3177 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3177&view=rev Author: lorenz_b Date: 2011-08-31 07:36:35 +0000 (Wed, 31 Aug 2011) Log Message: ----------- Small change. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-31 07:35:09 UTC (rev 3176) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-08-31 07:36:35 UTC (rev 3177) @@ -62,6 +62,7 @@ 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.rdf.model.Statement; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.vocabulary.OWL; @@ -142,24 +143,27 @@ model.add(loadIncrementally(query)); query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#propertyDisjointWith> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#propertyDisjointWith> ?o}"; model.add(loadIncrementally(query)); - Set<AxiomType> propertyCharacteristics = new HashSet<AxiomType>(); - propertyCharacteristics.add(AxiomType.TRANSITIVE_OBJECT_PROPERTY); - propertyCharacteristics.add(AxiomType.FUNCTIONAL_DATA_PROPERTY); - propertyCharacteristics.add(AxiomType.FUNCTIONAL_OBJECT_PROPERTY); - propertyCharacteristics.add(AxiomType.REFLEXIVE_OBJECT_PROPERTY); - propertyCharacteristics.add(AxiomType.IRREFLEXIVE_OBJECT_PROPERTY); - propertyCharacteristics.add(AxiomType.INVERSE_FUNCTIONAL_OBJECT_PROPERTY); - propertyCharacteristics.add(AxiomType.SYMMETRIC_OBJECT_PROPERTY); - propertyCharacteristics.add(AxiomType.ASYMMETRIC_OBJECT_PROPERTY); + //load inverse relation + query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#inverseOf> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#inverseOf> ?o}"; + model.add(loadIncrementally(query)); + //load property characteristics + Set<Resource> propertyCharacteristics = new HashSet<Resource>(); + propertyCharacteristics.add(OWL.FunctionalProperty); + propertyCharacteristics.add(OWL.InverseFunctionalProperty); + propertyCharacteristics.add(OWL.SymmetricProperty); + propertyCharacteristics.add(OWL.TransitiveProperty); + propertyCharacteristics.add(OWL2.ReflexiveProperty); + propertyCharacteristics.add(OWL2.IrreflexiveProperty); + propertyCharacteristics.add(OWL2.AsymmetricProperty); - for(AxiomType type : propertyCharacteristics){ - query = "CONSTRUCT {?s a <http://www.w3.org/2002/07/owl#%s>} WHERE {?s a <http://www.w3.org/2002/07/owl#%s>}".replaceAll("%s", type.getName()); + for(Resource propChar : propertyCharacteristics){ + query = "CONSTRUCT {?s a <%s>} WHERE {?s a <%s>}".replaceAll("%s", propChar.getURI()); model.add(loadIncrementally(query)); } - for(Statement st : model.listStatements().toList()){ - System.out.println(st); - } +// for(Statement st : model.listStatements().toList()){ +// System.out.println(st); +// } } private Model loadIncrementally(String query){ @@ -397,7 +401,7 @@ SortedSet<Individual> members = new TreeSet<Individual>(); String query = String.format("SELECT ?ind WHERE {" + "?ind <%s> ?o." + - " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = <%s>)}", + " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = %s)}", datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), "\"true\"^^<" + XSD.BOOLEAN.toStringID() + ">"); @@ -416,7 +420,7 @@ SortedSet<Individual> members = new TreeSet<Individual>(); String query = String.format("SELECT ?ind WHERE {" + "?ind <%s> ?o." + - " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = <%s>)}", + " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = %s)}", datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), "\"false\"^^<"+XSD.BOOLEAN.toStringID() + ">"); @@ -775,23 +779,7 @@ long startTime = System.currentTimeMillis(); r.loadSchema(); System.out.println("Time needed: " + (System.currentTimeMillis()-startTime) + "ms"); -// ObjectProperty oP = new ObjectProperty(NS + "league"); -// for(Entry<Individual, SortedSet<Individual>> entry : r.getPropertyMembers(oP).entrySet()){ -// System.out.println(entry.getKey()); -// System.out.println(entry.getValue()); -// } -// -// DatatypeProperty dP = new DatatypeProperty(NS+ "areaLand"); -// for(Entry<Individual, SortedSet<Double>> entry : r.getDoubleDatatypeMembers(dP).entrySet()){ -// System.out.println(entry.getKey()); -// System.out.println(entry.getValue()); -// } - DatatypeProperty dP = new DatatypeProperty(NS+ "internationally"); - for(Individual ind : r.getTrueDatatypeMembers(dP)){ - System.out.println(ind); - } - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-09-02 06:51:25
|
Revision: 3218 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3218&view=rev Author: lorenz_b Date: 2011-09-02 06:51:19 +0000 (Fri, 02 Sep 2011) Log Message: ----------- Uncommented lines, which only work with AKSW commons 0.2. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-09-02 06:49:17 UTC (rev 3217) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-09-02 06:51:19 UTC (rev 3218) @@ -198,20 +198,20 @@ private Model loadIncrementally(String query){ System.out.println(StringUtils.md5Hash(query)); - try { +// try { QueryExecutionFactory f = new QueryExecutionFactoryHttp(ks.getEndpoint().getURL().toString(), ks.getEndpoint().getDefaultGraphURIs()); - f = new QueryExecutionFactoryCache(f, new CacheImpl(CacheCoreH2.create("cache", 60 * 24 *5))); +// f = new QueryExecutionFactoryCache(f, new CacheImpl(CacheCoreH2.create("cache", 60 * 24 *5))); // System.out.println("SPARQLReasoner.loadIncrementally needs to be rewritten for aksw-commons 0.1"); // System.exit(0); f = new QueryExecutionFactoryPaginated(f, 1000); Model model = f.createQueryExecution(query).execConstruct(); return model; - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (SQLException e) { - e.printStackTrace(); - } - return null; +// } catch (ClassNotFoundException e) { +// e.printStackTrace(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// return null; } @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-09-08 09:49:43
|
Revision: 3246 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3246&view=rev Author: lorenz_b Date: 2011-09-08 09:49:37 +0000 (Thu, 08 Sep 2011) Log Message: ----------- Added cache option. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-09-08 09:29:51 UTC (rev 3245) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-09-08 09:49:37 UTC (rev 3246) @@ -37,8 +37,11 @@ import org.aksw.commons.sparql.api.http.QueryExecutionFactoryHttp; import org.aksw.commons.sparql.api.pagination.core.QueryExecutionFactoryPaginated; import org.aksw.commons.util.strings.StringUtils; +import org.dllearner.core.ComponentAnn; import org.dllearner.core.IndividualReasoner; import org.dllearner.core.SchemaReasoner; +import org.dllearner.core.config.BooleanEditor; +import org.dllearner.core.config.ConfigOption; import org.dllearner.core.owl.ClassHierarchy; import org.dllearner.core.owl.Constant; import org.dllearner.core.owl.DataRange; @@ -53,12 +56,15 @@ import org.dllearner.core.owl.ObjectPropertyHierarchy; import org.dllearner.core.owl.Thing; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.owl.ConceptComparator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.propertyeditors.StringTrimmerEditor; import com.clarkparsia.owlapiv3.XSD; import com.hp.hpl.jena.query.QuerySolution; @@ -73,15 +79,26 @@ import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; +@ComponentAnn(name = "SPARQL Reasoner", shortName = "spr", version = 0.1) public class SPARQLReasoner implements SchemaReasoner, IndividualReasoner{ private static final Logger logger = LoggerFactory.getLogger(SPARQLReasoner.class); + @ConfigOption(name = "useCache", description = "Whether to use a DB cache", defaultValue = "true", required = false, propertyEditorClass = BooleanEditor.class) + private boolean useCache = true; + + private ExtractionDBCache cache; + private SparqlEndpointKS ks; private ClassHierarchy hierarchy; + public SPARQLReasoner(SparqlEndpointKS ks) { this.ks = ks; + + if(useCache){ + cache = new ExtractionDBCache("cache"); + } } public final ClassHierarchy prepareSubsumptionHierarchy() { @@ -779,14 +796,19 @@ private ResultSet executeSelectQuery(String query){ logger.info("Sending query \n {}", query); - QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); - for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { - queryExecution.addDefaultGraph(dgu); + ResultSet resultset = null; + if(useCache){ + resultset = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(ks.getEndpoint(), query)); + } else { + QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); + for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { + queryExecution.addDefaultGraph(dgu); + } + for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { + queryExecution.addNamedGraph(ngu); + } + resultset = queryExecution.execSelect(); } - for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { - queryExecution.addNamedGraph(ngu); - } - ResultSet resultset = queryExecution.execSelect(); return resultset; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-12-01 22:06:23
|
Revision: 3464 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3464&view=rev Author: lorenz_b Date: 2011-12-01 22:06:17 +0000 (Thu, 01 Dec 2011) Log Message: ----------- Added method to get inverse properties. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-01 21:44:18 UTC (rev 3463) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-01 22:06:17 UTC (rev 3464) @@ -579,6 +579,20 @@ return cnt; } + + public SortedSet<ObjectProperty> getInverseObjectProperties(ObjectProperty property){ + SortedSet<ObjectProperty> inverseObjectProperties = new TreeSet<ObjectProperty>(); + String query = "SELECT ?p WHERE {" + + "{<%p> <%ax> ?p.} UNION {?p <%ax> <%p>}}".replace("%p", property.getName()).replace("%ax", OWL.inverseOf.getURI()); + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + inverseObjectProperties.add(new ObjectProperty(qs.getResource("p").getURI())); + + } + return inverseObjectProperties; + } @Override public DataRange getRange(DatatypeProperty datatypeProperty) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-12-04 15:51:05
|
Revision: 3467 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3467&view=rev Author: lorenz_b Date: 2011-12-04 15:50:59 +0000 (Sun, 04 Dec 2011) Log Message: ----------- Added method to get the popularity for a property. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-04 15:48:34 UTC (rev 3466) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-04 15:50:59 UTC (rev 3467) @@ -580,6 +580,17 @@ } + public int getPropertyCount(ObjectProperty property){ + String query = String.format("SELECT COUNT(*) WHERE {" + + "?s <%s> ?o." + + "}", + property.getName()); + ResultSet rs = executeSelectQuery(query); + int cnt = rs.next().get(rs.getResultVars().get(0)).asLiteral().getInt(); + return cnt; + + } + public SortedSet<ObjectProperty> getInverseObjectProperties(ObjectProperty property){ SortedSet<ObjectProperty> inverseObjectProperties = new TreeSet<ObjectProperty>(); String query = "SELECT ?p WHERE {" + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-12-15 13:26:15
|
Revision: 3504 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3504&view=rev Author: lorenz_b Date: 2011-12-15 13:26:09 +0000 (Thu, 15 Dec 2011) Log Message: ----------- Fixed problem with superflous triple <A rdfs:subClassof A>. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-15 11:11:12 UTC (rev 3503) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-15 13:26:09 UTC (rev 3504) @@ -698,6 +698,7 @@ qs = rs.next(); superClasses.add(new NamedClass(qs.getResource("sup").getURI())); } + superClasses.remove(description); return superClasses; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-05-02 20:44:07
|
Revision: 3678 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3678&view=rev Author: lorenz_b Date: 2012-05-02 20:44:00 +0000 (Wed, 02 May 2012) Log Message: ----------- Small modification to avoid loading YAGO schema. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2012-05-02 15:22:07 UTC (rev 3677) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2012-05-02 20:44:00 UTC (rev 3678) @@ -199,7 +199,7 @@ Model model = ModelFactory.createDefaultModel(); //load class hierarchy - String query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o} WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o}"; + String query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o} WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o.FILTER(!REGEX(STR(?s), 'http://dbpedia.org/class/yago/'))}"; model.add(loadIncrementally(query)); query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#equivalentClass> ?o} WHERE {?s <http://www.w3.org/2002/07/owl#equivalentClass> ?o}"; model.add(loadIncrementally(query)); @@ -277,6 +277,8 @@ // System.exit(0); f = new QueryExecutionFactoryPaginated(f, 1000); Model model = f.createQueryExecution(query).execConstruct(); + System.out.println(query); + System.out.println("Got " + model.size() + " triple."); return model; // } catch (ClassNotFoundException e) { // e.printStackTrace(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-07-15 17:49:11
|
Revision: 3791 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3791&view=rev Author: lorenz_b Date: 2012-07-15 17:49:04 +0000 (Sun, 15 Jul 2012) Log Message: ----------- Added methods to check if property is objectproperty or dataproperty. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2012-07-13 13:21:30 UTC (rev 3790) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2012-07-15 17:49:04 UTC (rev 3791) @@ -727,6 +727,18 @@ return null; } + public boolean isObjectProperty(String propertyURI){ + String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.ObjectProperty.getURI()); + boolean isObjectProperty = executeAskQuery(query); + return isObjectProperty; + } + + public boolean isDataProperty(String propertyURI){ + String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.DatatypeProperty.getURI()); + boolean isObjectProperty = executeAskQuery(query); + return isObjectProperty; + } + public int getIndividualsCount(NamedClass nc){ String query = String.format("SELECT (COUNT(?s) AS ?cnt) WHERE {" + "?s a <%s>." + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moa...@us...> - 2013-05-15 13:09:35
|
Revision: 3980 http://sourceforge.net/p/dl-learner/code/3980 Author: moahmedsherif Date: 2013-05-15 13:09:32 +0000 (Wed, 15 May 2013) Log Message: ----------- add getParentClasses() and getChildClasses() Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-10 21:55:32 UTC (rev 3979) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-15 13:09:32 UTC (rev 3980) @@ -498,6 +498,44 @@ return siblings; } + /** + * Returns a set of classes which are Parent of current class + * in the class hierarchy. + * @param cls + * @param limit + * @return + */ + public Set<NamedClass> getParentClasses(NamedClass cls) { + Set<NamedClass> parents = new HashSet<NamedClass>(); + String query = "SELECT DISTINCT ?parentClass WHERE { <" + cls.getName() + "> <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?parentClass }"; + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + parents.add(new NamedClass(qs.getResource("parentClass").getURI())); + } + return parents; + } + + /** + * Returns a set of classes which are children of current class + * in the class hierarchy. + * @param cls + * @param limit + * @return + */ + public Set<NamedClass> getChildClasses(NamedClass cls) { + Set<NamedClass> children = new HashSet<NamedClass>(); + String query = "SELECT DISTINCT ?childClass WHERE { ?childClass <http://www.w3.org/2000/01/rdf-schema#subClassOf> <" + cls.getName() + ">}"; + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + children.add(new NamedClass(qs.getResource("childClass").getURI())); + } + return children; + } + @Override public boolean hasType(Description description, Individual individual) { if(!(description instanceof NamedClass)){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moa...@us...> - 2013-05-17 15:47:57
|
Revision: 3981 http://sourceforge.net/p/dl-learner/code/3981 Author: moahmedsherif Date: 2013-05-17 15:47:53 +0000 (Fri, 17 May 2013) Log Message: ----------- fix add parent class individuals and random individuals Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-15 13:09:32 UTC (rev 3980) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-17 15:47:53 UTC (rev 3981) @@ -85,60 +85,60 @@ @ComponentAnn(name = "SPARQL Reasoner", shortName = "spr", version = 0.1) public class SPARQLReasoner implements SchemaReasoner, IndividualReasoner { - + private static final Logger logger = LoggerFactory.getLogger(SPARQLReasoner.class); - + @ConfigOption(name = "useCache", description = "Whether to use a DB cache", defaultValue = "true", required = false, propertyEditorClass = BooleanEditor.class) private boolean useCache = true; - + private ExtractionDBCache cache; - + private SparqlEndpointKS ks; private ClassHierarchy hierarchy; private OntModel model; - + private Map<NamedClass, Integer> classPopularityMap; private Map<ObjectProperty, Integer> objectPropertyPopularityMap; private Map<DatatypeProperty, Integer> dataPropertyPopularityMap; - - + + public SPARQLReasoner(SparqlEndpointKS ks) { this.ks = ks; - + if(useCache){ cache = new ExtractionDBCache("cache"); } classPopularityMap = new HashMap<NamedClass, Integer>(); objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); } - + public SPARQLReasoner(SparqlEndpointKS ks, ExtractionDBCache cache) { this.ks = ks; this.cache = cache; - + classPopularityMap = new HashMap<NamedClass, Integer>(); objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); } - + public SPARQLReasoner(OntModel model) { this.model = model; - + classPopularityMap = new HashMap<NamedClass, Integer>(); objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); } - + public void precomputePopularity(){ precomputeClassPopularity(); precomputeDataPropertyPopularity(); precomputeObjectPropertyPopularity(); } - + public void precomputeClassPopularity(){ logger.info("Precomputing class popularity ..."); - + Set<NamedClass> classes = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); String queryTemplate = "SELECT (COUNT(*) AS ?cnt) WHERE {?s a <%s>}"; - + ResultSet rs; for(NamedClass nc : classes){ rs = executeSelectQuery(String.format(queryTemplate, nc.getName())); @@ -146,14 +146,14 @@ classPopularityMap.put(nc, cnt); } } - + public void precomputeObjectPropertyPopularity(){ logger.info("Precomputing object property popularity ..."); objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); - + Set<ObjectProperty> properties = new SPARQLTasks(ks.getEndpoint()).getAllObjectProperties(); String queryTemplate = "SELECT (COUNT(*) AS ?cnt) WHERE {?s <%s> ?o}"; - + ResultSet rs; for(ObjectProperty op : properties){ rs = executeSelectQuery(String.format(queryTemplate, op.getName())); @@ -161,14 +161,14 @@ objectPropertyPopularityMap.put(op, cnt); } } - + public void precomputeDataPropertyPopularity(){ logger.info("Precomputing data property popularity ..."); dataPropertyPopularityMap = new HashMap<DatatypeProperty, Integer>(); - + Set<DatatypeProperty> properties = new SPARQLTasks(ks.getEndpoint()).getAllDataProperties(); String queryTemplate = "SELECT (COUNT(*) AS ?cnt) WHERE {?s <%s> ?o}"; - + ResultSet rs; for(DatatypeProperty dp : properties){ rs = executeSelectQuery(String.format(queryTemplate, dp.getName())); @@ -176,7 +176,7 @@ dataPropertyPopularityMap.put(dp, cnt); } } - + public int getSubjectCountForProperty(Property p, long timeout){ int cnt = -1; String query = String.format( @@ -186,10 +186,10 @@ if(rs.hasNext()){ cnt = rs.next().getLiteral("cnt").getInt(); } - + return cnt; } - + public int getObjectCountForProperty(ObjectProperty p, long timeout){ int cnt = -1; String query = String.format( @@ -199,52 +199,52 @@ if(rs.hasNext()){ cnt = rs.next().getLiteral("cnt").getInt(); } - + return cnt; } - + public int getPopularity(NamedClass nc){ if(classPopularityMap != null && classPopularityMap.containsKey(nc)){ return classPopularityMap.get(nc); } else { String queryTemplate = "SELECT (COUNT(*) AS ?cnt) WHERE {?s a <%s>}"; - + ResultSet rs = executeSelectQuery(String.format(queryTemplate, nc.getName())); int cnt = rs.next().getLiteral("cnt").getInt(); classPopularityMap.put(nc, cnt); return cnt; } - + } - + public int getPopularity(ObjectProperty op){ if(objectPropertyPopularityMap != null && objectPropertyPopularityMap.containsKey(op)){ return objectPropertyPopularityMap.get(op); } else { String queryTemplate = "SELECT (COUNT(*) AS ?cnt) WHERE {?s <%s> ?o}"; - + ResultSet rs = executeSelectQuery(String.format(queryTemplate, op.getName())); int cnt = rs.next().getLiteral("cnt").getInt(); objectPropertyPopularityMap.put(op, cnt); return cnt; } - + } - + public int getPopularity(DatatypeProperty dp){ if(dataPropertyPopularityMap.containsKey(dp)){ return dataPropertyPopularityMap.get(dp); } else { String queryTemplate = "SELECT (COUNT(*) AS ?cnt) WHERE {?s <%s> ?o}"; - + ResultSet rs = executeSelectQuery(String.format(queryTemplate, dp.getName())); int cnt = rs.next().getLiteral("cnt").getInt(); dataPropertyPopularityMap.put(dp, cnt); return cnt; } - + } - + public final ClassHierarchy prepareSubsumptionHierarchy() { logger.info("Preparing subsumption hierarchy ..."); long startTime = System.currentTimeMillis(); @@ -263,7 +263,7 @@ tmp = getSuperClasses(Nothing.instance); subsumptionHierarchyUp.put(Nothing.instance, tmp); subsumptionHierarchyDown.put(Nothing.instance, new TreeSet<Description>(conceptComparator)); - + // ... and named classes Set<NamedClass> atomicConcepts; if(ks.isRemote()){ @@ -276,7 +276,7 @@ } } } - + for (NamedClass atom : atomicConcepts) { tmp = getSubClasses(atom); // quality control: we explicitly check that no reasoner implementation returns null here @@ -296,7 +296,7 @@ hierarchy = new ClassHierarchy(subsumptionHierarchyUp, subsumptionHierarchyDown); return hierarchy; } - + public final ClassHierarchy prepareSubsumptionHierarchyFast() { logger.info("Preparing subsumption hierarchy ..."); long startTime = System.currentTimeMillis(); @@ -305,7 +305,7 @@ conceptComparator); TreeMap<Description, SortedSet<Description>> subsumptionHierarchyDown = new TreeMap<Description, SortedSet<Description>>( conceptComparator); - + String queryTemplate = "SELECT * WHERE {?sub <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?sup} LIMIT <%d> OFFSET <%d>"; int limit = 1000; int offset = 0; @@ -337,15 +337,15 @@ } offset += limit; } - + logger.info("... done in {}ms", (System.currentTimeMillis()-startTime)); hierarchy = new ClassHierarchy(subsumptionHierarchyUp, subsumptionHierarchyDown); return hierarchy; } - + public Model loadSchema(){ Model model = ModelFactory.createDefaultModel(); - + //load class hierarchy String query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o} WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o.FILTER(!REGEX(STR(?s), 'http://dbpedia.org/class/yago/'))}"; model.add(loadIncrementally(query)); @@ -372,7 +372,7 @@ "WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> ?o. ?s a <http://www.w3.org/2002/07/owl#ObjectProperty>}"; model.add(loadIncrementally(query)); query = "CONSTRUCT {?s <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> ?o. ?s a <http://www.w3.org/2002/07/owl#DatatypeProperty>} " + - "WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> ?o. ?s a <http://www.w3.org/2002/07/owl#DatatypeProperty>}"; + "WHERE {?s <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> ?o. ?s a <http://www.w3.org/2002/07/owl#DatatypeProperty>}"; model.add(loadIncrementally(query)); query = "CONSTRUCT {?s <http://www.w3.org/2002/07/owl#equivalentProperty> ?o. ?s a <http://www.w3.org/2002/07/owl#ObjectProperty>} " + "WHERE {?s <http://www.w3.org/2002/07/owl#equivalentProperty> ?o. ?s a <http://www.w3.org/2002/07/owl#ObjectProperty>}"; @@ -391,7 +391,7 @@ model.add(loadIncrementally(query)); //load property characteristics Set<Resource> propertyCharacteristics = new HashSet<Resource>(); -// propertyCharacteristics.add(OWL.FunctionalProperty); + // propertyCharacteristics.add(OWL.FunctionalProperty); propertyCharacteristics.add(OWL.InverseFunctionalProperty); propertyCharacteristics.add(OWL.SymmetricProperty); propertyCharacteristics.add(OWL.TransitiveProperty); @@ -406,34 +406,34 @@ //for functional properties we have to distinguish between data and object properties, //i.e. we have to keep the property type information, otherwise conversion to OWLAPI ontology makes something curious query = "CONSTRUCT {?s a <%s>. ?s a <http://www.w3.org/2002/07/owl#ObjectProperty>} WHERE {?s a <%s>.?s a <http://www.w3.org/2002/07/owl#ObjectProperty>}". - replaceAll("%s", OWL.FunctionalProperty.getURI()); + replaceAll("%s", OWL.FunctionalProperty.getURI()); model.add(loadIncrementally(query)); query = "CONSTRUCT {?s a <%s>. ?s a <http://www.w3.org/2002/07/owl#DatatypeProperty>} WHERE {?s a <%s>.?s a <http://www.w3.org/2002/07/owl#DatatypeProperty>}". - replaceAll("%s", OWL.FunctionalProperty.getURI()); + replaceAll("%s", OWL.FunctionalProperty.getURI()); model.add(loadIncrementally(query)); - - + + return model; } - + private Model loadIncrementally(String query){ System.out.println(StringUtils.md5Hash(query)); -// try { - QueryExecutionFactory f = new QueryExecutionFactoryHttp(ks.getEndpoint().getURL().toString(), ks.getEndpoint().getDefaultGraphURIs()); -// f = new QueryExecutionFactoryCache(f, new CacheImpl(CacheCoreH2.create("cache", 60 * 24 *5))); -// System.out.println("SPARQLReasoner.loadIncrementally needs to be rewritten for aksw-commons 0.1"); -// System.exit(0); - f = new QueryExecutionFactoryPaginated(f, 1000); - Model model = f.createQueryExecution(query).execConstruct(); - System.out.println(query); - System.out.println("Got " + model.size() + " triple."); - return model; -// } catch (ClassNotFoundException e) { -// e.printStackTrace(); -// } catch (SQLException e) { -// e.printStackTrace(); -// } -// return null; + // try { + QueryExecutionFactory f = new QueryExecutionFactoryHttp(ks.getEndpoint().getURL().toString(), ks.getEndpoint().getDefaultGraphURIs()); + // f = new QueryExecutionFactoryCache(f, new CacheImpl(CacheCoreH2.create("cache", 60 * 24 *5))); + // System.out.println("SPARQLReasoner.loadIncrementally needs to be rewritten for aksw-commons 0.1"); + // System.exit(0); + f = new QueryExecutionFactoryPaginated(f, 1000); + Model model = f.createQueryExecution(query).execConstruct(); + System.out.println(query); + System.out.println("Got " + model.size() + " triple."); + return model; + // } catch (ClassNotFoundException e) { + // e.printStackTrace(); + // } catch (SQLException e) { + // e.printStackTrace(); + // } + // return null; } @Override @@ -448,11 +448,11 @@ } return types; } - + public Set<NamedClass> getTypes() { return getTypes((String)null); } - + public Set<NamedClass> getTypes(String namespace) { Set<NamedClass> types = new TreeSet<NamedClass>(); String query = String.format("SELECT DISTINCT ?class WHERE {[] a ?class." + (namespace != null ? ("FILTER(REGEX(?class,'^" + namespace + "'))") : "") + "}"); @@ -464,7 +464,7 @@ } 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()); @@ -476,7 +476,7 @@ } return types; } - + /** * Returns a set of classes which are siblings, i.e. on the same level * in the class hierarchy. @@ -516,7 +516,7 @@ } return parents; } - + /** * Returns a set of classes which are children of current class * in the class hierarchy. @@ -535,7 +535,7 @@ } return children; } - + @Override public boolean hasType(Description description, Individual individual) { if(!(description instanceof NamedClass)){ @@ -575,7 +575,64 @@ } return individuals; } + + /** + * @param cls + * @param limit + * @return Random Individuals not including any of the input class individuals + * @author sherif + */ + public SortedSet<Individual> getRandomIndividuals(NamedClass cls, int limit) { + SortedSet<Individual> individuals = new TreeSet<Individual>(); + String query = + " SELECT DISTINCT ?ind WHERE {"+ + "?ind ?p ?o ."+ + "FILTER(NOT EXISTS { ?ind a <" + cls.getName() + "> } ) }"; + if(limit != 0) { + query += " LIMIT " + limit; + } + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + if(qs.get("ind").isURIResource()){ + individuals.add(new Individual(qs.getResource("ind").getURI())); + } + } + return individuals; + } + + /** + * @param cls + * @param limit + * @return Super class of the input class Individuals not including any of the input class individuals + * @author sherif + */ + public SortedSet<Individual> getSuperClassIndividuals(NamedClass cls, int limit) { + SortedSet<Individual> individuals = new TreeSet<Individual>(); + Set<NamedClass> parentClasses = getParentClasses(cls); + + for(NamedClass parentClass : parentClasses){ + String query = + " SELECT DISTINCT ?ind WHERE { "+ + "?ind a <" + parentClass.getName() + "> ."+ + "FILTER(NOT EXISTS { ?ind a <" + cls.getName() + "> } ) }"; + if(limit != 0) { + query += " LIMIT " + limit/parentClasses.size(); + } + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + if(qs.get("ind").isURIResource()){ + individuals.add(new Individual(qs.getResource("ind").getURI())); + } + } + } + return individuals; + } + @Override public SortedSetTuple<Individual> doubleRetrieval(Description description) { throw new UnsupportedOperationException(); @@ -585,7 +642,7 @@ public Set<Individual> getRelatedIndividuals(Individual individual, ObjectProperty objectProperty) { Set<Individual> individuals = new HashSet<Individual>(); String query = String.format("SELECT ?ind WHERE {<%s> <%s> ?ind, FILTER(isIRI(?ind))}", individual.getName(), objectProperty.getName()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -608,7 +665,7 @@ "<%s> ?prop ?ind." + " FILTER(isIRI(?ind) && ?prop != <%s> && ?prop != <%s>)}", individual.getName(), RDF.type.getURI(), OWL.sameAs.getURI()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Set<Individual> individuals; @@ -624,7 +681,7 @@ prop2individuals.put(property, individuals); } individuals.add(ind); - + } return prop2individuals; } @@ -636,7 +693,7 @@ "?s <%s> ?o." + " FILTER(isIRI(?o))}", objectProperty.getName()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; @@ -652,7 +709,7 @@ subject2objects.put(sub, objects); } objects.add(obj); - + } return subject2objects; } @@ -670,7 +727,7 @@ "?s <%s> ?o." + " FILTER(DATATYPE(?o) = <%s>)}", datatypeProperty.getName(), XSD.DOUBLE.toStringID()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; @@ -686,7 +743,7 @@ subject2objects.put(sub, objects); } objects.add(obj); - + } return subject2objects; } @@ -698,7 +755,7 @@ "?s <%s> ?o." + " FILTER(DATATYPE(?o) = <%s>)}", datatypeProperty.getName(), XSD.INT.toStringID()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; @@ -714,7 +771,7 @@ subject2objects.put(sub, objects); } objects.add(obj); - + } return subject2objects; } @@ -726,7 +783,7 @@ "?s <%s> ?o." + " FILTER(DATATYPE(?o) = <%s>)}", datatypeProperty.getName(), XSD.BOOLEAN.toStringID()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; Individual sub; @@ -742,7 +799,7 @@ subject2objects.put(sub, objects); } objects.add(obj); - + } return subject2objects; } @@ -755,13 +812,13 @@ " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = %s)}", datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), "\"true\"^^<" + XSD.BOOLEAN.toStringID() + ">"); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); members.add(new Individual(qs.getResource("ind").getURI())); - + } return members; } @@ -774,13 +831,13 @@ " FILTER(isLiteral(?o) && DATATYPE(?o) = <%s> && ?o = %s)}", datatypeProperty.getName(), XSD.BOOLEAN.toStringID(), "\"false\"^^<"+XSD.BOOLEAN.toStringID() + ">"); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); members.add(new Individual(qs.getResource("ind").getURI())); - + } return members; } @@ -802,14 +859,14 @@ "<%s> <%s> ?domain. FILTER(isIRI(?domain))" + "}", objectProperty.getName(), RDFS.domain.getURI()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; List<Description> domains = new ArrayList<Description>(); while(rs.hasNext()){ qs = rs.next(); domains.add(new NamedClass(qs.getResource("domain").getURI())); - + } if(domains.size() == 1){ return domains.get(0); @@ -825,14 +882,14 @@ "<%s> <%s> ?domain. FILTER(isIRI(?domain))" + "}", datatypeProperty.getName(), RDFS.domain.getURI()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; List<Description> domains = new ArrayList<Description>(); while(rs.hasNext()){ qs = rs.next(); domains.add(new NamedClass(qs.getResource("domain").getURI())); - + } if(domains.size() == 1){ return domains.get(0); @@ -848,14 +905,14 @@ "<%s> <%s> ?range. FILTER(isIRI(?range))" + "}", objectProperty.getName(), RDFS.range.getURI()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; List<Description> ranges = new ArrayList<Description>(); while(rs.hasNext()){ qs = rs.next(); ranges.add(new NamedClass(qs.getResource("range").getURI())); - + } if(ranges.size() == 1){ return ranges.get(0); @@ -864,13 +921,13 @@ } return null; } - + public boolean isObjectProperty(String propertyURI){ String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.ObjectProperty.getURI()); boolean isObjectProperty = executeAskQuery(query); return isObjectProperty; } - + public boolean isObjectProperty(String propertyURI, boolean analyzeData){ String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.ObjectProperty.getURI()); boolean isObjectProperty = executeAskQuery(query); @@ -880,14 +937,14 @@ } return isObjectProperty; } - + public boolean isDataProperty(String propertyURI){ if(propertyURI.equals("http://www.w3.org/2000/01/rdf-schema#label")) return true; String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.DatatypeProperty.getURI()); boolean isDataProperty = executeAskQuery(query); return isDataProperty; } - + public boolean isDataProperty(String propertyURI, boolean analyzeData){ if(propertyURI.equals("http://www.w3.org/2000/01/rdf-schema#label")) return true; String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.DatatypeProperty.getURI()); @@ -898,7 +955,7 @@ } return isDataProperty; } - + public int getIndividualsCount(NamedClass nc){ String query = String.format("SELECT (COUNT(?s) AS ?cnt) WHERE {" + "?s a <%s>." + @@ -907,17 +964,17 @@ ResultSet rs = executeSelectQuery(query); int cnt = rs.next().get(rs.getResultVars().get(0)).asLiteral().getInt(); return cnt; - + } - + public int getPropertyCount(ObjectProperty property){ String query = String.format("SELECT (COUNT(*) AS ?cnt) WHERE {?s <%s> ?o.}", property.getName()); ResultSet rs = executeSelectQuery(query); int cnt = rs.next().get(rs.getResultVars().get(0)).asLiteral().getInt(); return cnt; - + } - + public SortedSet<ObjectProperty> getInverseObjectProperties(ObjectProperty property){ SortedSet<ObjectProperty> inverseObjectProperties = new TreeSet<ObjectProperty>(); String query = "SELECT ?p WHERE {" + @@ -927,7 +984,7 @@ while(rs.hasNext()){ qs = rs.next(); inverseObjectProperties.add(new ObjectProperty(qs.getResource("p").getURI())); - + } return inverseObjectProperties; } @@ -938,14 +995,14 @@ "<%s> <%s> ?range. FILTER(isIRI(?range))" + "}", datatypeProperty.getName(), RDFS.range.getURI()); - + ResultSet rs = executeSelectQuery(query); QuerySolution qs; DataRange range = null; while(rs.hasNext()){ qs = rs.next(); range = new Datatype(qs.getResource("range").getURI()); - + } return range; } @@ -957,8 +1014,8 @@ } String query = String.format("ASK {<%s> <%s> <%s>.}", ((NamedClass)subClass).getURI().toString(), - RDFS.subClassOf.getURI(), - ((NamedClass)superClass).getURI().toString()); + RDFS.subClassOf.getURI(), + ((NamedClass)superClass).getURI().toString()); boolean superClassOf = executeAskQuery(query); return superClassOf; } @@ -970,8 +1027,8 @@ } String query = String.format("ASK {<%s> <%s> <%s>.}", ((NamedClass)class1).getURI().toString(), - OWL.equivalentClass.getURI(), - ((NamedClass)class2).getURI().toString()); + OWL.equivalentClass.getURI(), + ((NamedClass)class2).getURI().toString()); boolean equivalentClass = executeAskQuery(query); return equivalentClass; } @@ -984,7 +1041,7 @@ OWL.equivalentClass.getURI(), OWL.equivalentClass.getURI(), namedClass.getURI().toString() - ); + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1017,7 +1074,7 @@ String query = String.format("SELECT ?sup {<%s> <%s> ?sup. FILTER(isIRI(?sup))}", ((NamedClass)description).getURI().toString(), RDFS.subClassOf.getURI() - ); + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1027,7 +1084,7 @@ superClasses.remove(description); return superClasses; } - + public SortedSet<Description> getSuperClasses(Description description, boolean direct){ if(!(description instanceof NamedClass)){ throw new IllegalArgumentException("Only named classes are supported."); @@ -1038,9 +1095,9 @@ "{ SELECT ?x ?y WHERE { ?x rdfs:subClassOf ?y } }" + "OPTION ( TRANSITIVE, T_DISTINCT, t_in(?x), t_out(?y), t_step('path_id') as ?path, t_step(?x) as ?route, t_step('step_no') AS ?jump, T_DIRECTION 3 )" + "FILTER ( ?x = <%s> )}", ((NamedClass)description).getURI().toString()); - - - + + + return superClasses; } @@ -1048,7 +1105,7 @@ public SortedSet<Description> getSubClasses(Description description) { return getSubClasses(description, false); } - + public SortedSet<Description> getSubClasses(Description description, boolean useVirtuoso) { if(!(description instanceof NamedClass || description instanceof Thing)){ throw new IllegalArgumentException("Only named classes are supported."); @@ -1064,8 +1121,8 @@ query = String.format("SELECT ?sub {?sub <%s> <%s>. FILTER(isIRI(?sub))}", RDFS.subClassOf.getURI(), ((NamedClass)description).getURI().toString() - - ); + + ); } ResultSet rs = executeSelectQuery(query); QuerySolution qs; @@ -1076,13 +1133,13 @@ subClasses.remove(description); return subClasses; } - + private String getAllSubClassesVirtuosoQuery(Description description){ String query = String.format( "SELECT DISTINCT ?sub WHERE {"+ - "{SELECT ?sub ?o where {?sub rdfs:subClassOf ?o.}}"+ - "OPTION ( TRANSITIVE, t_distinct, t_in(?sub), t_out(?o), t_min (1), t_max (8), t_step ('step_no') as ?dist ) ."+ - "FILTER(?o = <%s>)}", description.toString()); + "{SELECT ?sub ?o where {?sub rdfs:subClassOf ?o.}}"+ + "OPTION ( TRANSITIVE, t_distinct, t_in(?sub), t_out(?o), t_min (1), t_max (8), t_step ('step_no') as ?dist ) ."+ + "FILTER(?o = <%s>)}", description.toString()); return query; } @@ -1098,7 +1155,7 @@ String query = String.format("SELECT ?sup {<%s> <%s> ?sup. FILTER(isIRI(?sup))}", objectProperty.getURI().toString(), RDFS.subPropertyOf.getURI() - ); + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1114,8 +1171,8 @@ String query = String.format("SELECT ?sub {?sub <%s> <%s>. FILTER(isIRI(?sub))}", RDFS.subPropertyOf.getURI(), objectProperty.getURI().toString() - - ); + + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1124,13 +1181,13 @@ } return subProperties; } - + public SortedSet<ObjectProperty> getEquivalentProperties(ObjectProperty objectProperty) { SortedSet<ObjectProperty> superProperties = new TreeSet<ObjectProperty>(); String query = String.format("SELECT ?equ {<%s> <%s> ?equ. FILTER(isIRI(?equ))}", objectProperty.getURI().toString(), OWL.equivalentProperty.getURI() - ); + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1139,13 +1196,13 @@ } return superProperties; } - + public SortedSet<DatatypeProperty> getEquivalentProperties(DatatypeProperty objectProperty) { SortedSet<DatatypeProperty> superProperties = new TreeSet<DatatypeProperty>(); String query = String.format("SELECT ?equ {<%s> <%s> ?equ. FILTER(isIRI(?equ))}", objectProperty.getURI().toString(), OWL.equivalentProperty.getURI() - ); + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1176,7 +1233,7 @@ String query = String.format("SELECT ?sup {<%s> <%s> ?sup. FILTER(isIRI(?sup))}", dataProperty.getURI().toString(), RDFS.subPropertyOf.getURI() - ); + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1192,8 +1249,8 @@ String query = String.format("SELECT ?sub {?sub <%s> <%s>. FILTER(isIRI(?sub))}", RDFS.subPropertyOf.getURI(), dataProperty.getURI().toString() - - ); + + ); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -1212,7 +1269,7 @@ public TreeSet<DatatypeProperty> getMostSpecialDatatypeProperties() { throw new UnsupportedOperationException(); } - + private ResultSet executeSelectQuery(String query){ logger.debug("Sending query \n {}", query); ResultSet rs = null; @@ -1232,11 +1289,11 @@ } else { QueryExecution qExec = com.hp.hpl.jena.query.QueryExecutionFactory.create(query, ((LocalModelBasedSparqlEndpointKS)ks).getModel()); rs = qExec.execSelect(); - + } return rs; } - + private ResultSet executeSelectQuery(String query, long timeout){ logger.debug("Sending query \n {}", query); ResultSet rs = null; @@ -1263,7 +1320,7 @@ } return rs; } - + /** * Returns TRUE if the class hierarchy was computed before. * @return @@ -1271,15 +1328,15 @@ public boolean isPrepared(){ return hierarchy != null; } - + public void setCache(ExtractionDBCache cache) { this.cache = cache; } - + public void setUseCache(boolean useCache) { this.useCache = useCache; } - + private boolean executeAskQuery(String query){ boolean ret; if(ks.isRemote()){ @@ -1291,35 +1348,35 @@ queryExecution.addNamedGraph(ngu); } ret = queryExecution.execAsk(); - + } else { QueryExecution qExec = com.hp.hpl.jena.query.QueryExecutionFactory.create(query, ((LocalModelBasedSparqlEndpointKS)ks).getModel()); ret = qExec.execAsk(); } - + return ret; } - - + + public static void main(String[] args) throws Exception{ -// QueryEngineHTTP e = new QueryEngineHTTP("http://bibleontology.com/sparql/index.jsp", -// "SELECT DISTINCT ?type WHERE {?s a ?type) LIMIT 10"); -// e.addParam("type1", "xml");System.out.println(e.toString()); -// e.execSelect(); - - + // QueryEngineHTTP e = new QueryEngineHTTP("http://bibleontology.com/sparql/index.jsp", + // "SELECT DISTINCT ?type WHERE {?s a ?type) LIMIT 10"); + // e.addParam("type1", "xml");System.out.println(e.toString()); + // e.execSelect(); + + SparqlEndpointKS ks = new SparqlEndpointKS(new SparqlEndpoint(new URL("http://live.dbpedia.org/sparql/"))); SPARQLReasoner r = new SPARQLReasoner(ks); long startTime = System.currentTimeMillis(); ClassHierarchy h = r.prepareSubsumptionHierarchyFast(); System.out.println(h.toString(false)); -// Model schema = r.loadSchema(); -// for(Statement st : schema.listStatements().toList()){ -// System.out.println(st); -// } + // Model schema = r.loadSchema(); + // for(Statement st : schema.listStatements().toList()){ + // System.out.println(st); + // } System.out.println(h.getSubClasses(new NamedClass("http://dbpedia.org/ontology/Bridge"), false)); System.out.println("Time needed: " + (System.currentTimeMillis()-startTime) + "ms"); - + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <moa...@us...> - 2013-05-22 15:35:42
|
Revision: 3982 http://sourceforge.net/p/dl-learner/code/3982 Author: moahmedsherif Date: 2013-05-22 15:35:39 +0000 (Wed, 22 May 2013) Log Message: ----------- add getRandomIndividuals() Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-17 15:47:53 UTC (rev 3981) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-22 15:35:39 UTC (rev 3982) @@ -22,6 +22,7 @@ import java.net.SocketTimeoutException; import java.net.URL; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -576,6 +577,37 @@ return individuals; } + /** + * @param wantedClass + * @param excludeClass + * @param limit + * @return get individual of class wantedClass excluding all individual of type excludeClass + * @author sherif + */ + public SortedSet<Individual> getIndividualsExcluding(Description wantedClass, Description excludeClass, int limit) { + + if(!(wantedClass instanceof NamedClass)){ + throw new UnsupportedOperationException("Only named classes are supported."); + } + SortedSet<Individual> individuals = new TreeSet<Individual>(); + String query = + "SELECT DISTINCT ?ind WHERE {" + + "?ind a <"+((NamedClass)wantedClass).getName() + "> . " + + "FILTER(NOT EXISTS { ?ind a <" + ((NamedClass)excludeClass).getName() + "> } )}"; + if(limit != 0) { + query += " LIMIT " + limit; + } + System.out.println("query: "+query); + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + if(qs.get("ind").isURIResource()){ + individuals.add(new Individual(qs.getResource("ind").getURI())); + } + } + return individuals; + } /** * @param cls @@ -602,6 +634,40 @@ } return individuals; } + + /** + * @param cls + * @param limit + * @return Random Individuals not including any of the input classes individuals + * @author sherif + */ + public SortedSet<Individual> getRandomIndividuals(Set<NamedClass> cls, int limit) { + SortedSet<Individual> individuals = new TreeSet<Individual>(); + + String filterStr=""; + for(NamedClass nc : cls){ + filterStr = filterStr.concat("FILTER(NOT EXISTS { ?ind a <").concat(nc.getName()).concat("> } ) "); + } + + String query = + " SELECT DISTINCT ?ind WHERE {"+ + "?ind ?p ?o ."+ + filterStr+ " }"; + if(limit != 0) { + query += " LIMIT " + limit; + } + + System.out.println("!!!!!!!!!!!!!!!!!!!! "+query); + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + if(qs.get("ind").isURIResource()){ + individuals.add(new Individual(qs.getResource("ind").getURI())); + } + } + return individuals; + } /** * @param cls @@ -618,9 +684,14 @@ " SELECT DISTINCT ?ind WHERE { "+ "?ind a <" + parentClass.getName() + "> ."+ "FILTER(NOT EXISTS { ?ind a <" + cls.getName() + "> } ) }"; + + if(limit != 0) { query += " LIMIT " + limit/parentClasses.size(); } + + System.out.println("---------------------------------------------- "+query); + ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -629,7 +700,10 @@ individuals.add(new Individual(qs.getResource("ind").getURI())); } } + System.out.println(individuals.size()); + System.out.println(individuals); } + return individuals; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-05-24 09:16:44
|
Revision: 3984 http://sourceforge.net/p/dl-learner/code/3984 Author: lorenz_b Date: 2013-05-24 09:16:41 +0000 (Fri, 24 May 2013) Log Message: ----------- Prepare reasoner only once. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-24 07:56:26 UTC (rev 3983) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-05-24 09:16:41 UTC (rev 3984) @@ -101,6 +101,8 @@ private Map<NamedClass, Integer> classPopularityMap; private Map<ObjectProperty, Integer> objectPropertyPopularityMap; private Map<DatatypeProperty, Integer> dataPropertyPopularityMap; + + private boolean prepared = false; public SPARQLReasoner(SparqlEndpointKS ks) { @@ -247,54 +249,57 @@ } public final ClassHierarchy prepareSubsumptionHierarchy() { - logger.info("Preparing subsumption hierarchy ..."); - long startTime = System.currentTimeMillis(); - ConceptComparator conceptComparator = new ConceptComparator(); - TreeMap<Description, SortedSet<Description>> subsumptionHierarchyUp = new TreeMap<Description, SortedSet<Description>>( - conceptComparator); - TreeMap<Description, SortedSet<Description>> subsumptionHierarchyDown = new TreeMap<Description, SortedSet<Description>>( - conceptComparator); + if(!prepared){ + logger.info("Preparing subsumption hierarchy ..."); + long startTime = System.currentTimeMillis(); + ConceptComparator conceptComparator = new ConceptComparator(); + TreeMap<Description, SortedSet<Description>> subsumptionHierarchyUp = new TreeMap<Description, SortedSet<Description>>( + conceptComparator); + TreeMap<Description, SortedSet<Description>> subsumptionHierarchyDown = new TreeMap<Description, SortedSet<Description>>( + conceptComparator); - // parents/children of top ... - SortedSet<Description> tmp = getSubClasses(Thing.instance); - subsumptionHierarchyUp.put(Thing.instance, new TreeSet<Description>(conceptComparator)); - subsumptionHierarchyDown.put(Thing.instance, tmp); + // parents/children of top ... + SortedSet<Description> tmp = getSubClasses(Thing.instance); + subsumptionHierarchyUp.put(Thing.instance, new TreeSet<Description>(conceptComparator)); + subsumptionHierarchyDown.put(Thing.instance, tmp); - // ... bottom ... - tmp = getSuperClasses(Nothing.instance); - subsumptionHierarchyUp.put(Nothing.instance, tmp); - subsumptionHierarchyDown.put(Nothing.instance, new TreeSet<Description>(conceptComparator)); + // ... bottom ... + tmp = getSuperClasses(Nothing.instance); + subsumptionHierarchyUp.put(Nothing.instance, tmp); + subsumptionHierarchyDown.put(Nothing.instance, new TreeSet<Description>(conceptComparator)); - // ... and named classes - Set<NamedClass> atomicConcepts; - if(ks.isRemote()){ - atomicConcepts = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); - } else { - atomicConcepts = new TreeSet<NamedClass>(); - for(OntClass cls : ((LocalModelBasedSparqlEndpointKS)ks).getModel().listClasses().toList()){ - if(!cls.isAnon()){ - atomicConcepts.add(new NamedClass(cls.getURI())); + // ... and named classes + Set<NamedClass> atomicConcepts; + if(ks.isRemote()){ + atomicConcepts = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); + } else { + atomicConcepts = new TreeSet<NamedClass>(); + for(OntClass cls : ((LocalModelBasedSparqlEndpointKS)ks).getModel().listClasses().toList()){ + if(!cls.isAnon()){ + atomicConcepts.add(new NamedClass(cls.getURI())); + } } } - } - for (NamedClass atom : atomicConcepts) { - tmp = getSubClasses(atom); - // quality control: we explicitly check that no reasoner implementation returns null here - if(tmp == null) { - logger.error("Class hierarchy: getSubClasses returned null instead of empty set."); - } - subsumptionHierarchyDown.put(atom, tmp); + for (NamedClass atom : atomicConcepts) { + tmp = getSubClasses(atom); + // quality control: we explicitly check that no reasoner implementation returns null here + if(tmp == null) { + logger.error("Class hierarchy: getSubClasses returned null instead of empty set."); + } + subsumptionHierarchyDown.put(atom, tmp); - tmp = getSuperClasses(atom); - // quality control: we explicitly check that no reasoner implementation returns null here - if(tmp == null) { - logger.error("Class hierarchy: getSuperClasses returned null instead of empty set."); - } - subsumptionHierarchyUp.put(atom, tmp); - } - logger.info("... done in {}ms", (System.currentTimeMillis()-startTime)); - hierarchy = new ClassHierarchy(subsumptionHierarchyUp, subsumptionHierarchyDown); + tmp = getSuperClasses(atom); + // quality control: we explicitly check that no reasoner implementation returns null here + if(tmp == null) { + logger.error("Class hierarchy: getSuperClasses returned null instead of empty set."); + } + subsumptionHierarchyUp.put(atom, tmp); + } + logger.info("... done in {}ms", (System.currentTimeMillis()-startTime)); + hierarchy = new ClassHierarchy(subsumptionHierarchyUp, subsumptionHierarchyDown); + prepared = true; + } return hierarchy; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-06-21 13:36:23
|
Revision: 4004 http://sourceforge.net/p/dl-learner/code/4004 Author: lorenz_b Date: 2013-06-21 13:36:20 +0000 (Fri, 21 Jun 2013) Log Message: ----------- Added namespace filter. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-06-18 15:14:54 UTC (rev 4003) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-06-21 13:36:20 UTC (rev 4004) @@ -94,7 +94,6 @@ @ConfigOption(name = "useCache", description = "Whether to use a DB cache", defaultValue = "true", required = false, propertyEditorClass = BooleanEditor.class) private boolean useCache = true; - private ExtractionDBCache cache; private QueryExecutionFactory qef; private SparqlEndpointKS ks; @@ -111,18 +110,11 @@ public SPARQLReasoner(SparqlEndpointKS ks) { - this.ks = ks; - - if(useCache){ - cache = new ExtractionDBCache("cache"); - } - classPopularityMap = new HashMap<NamedClass, Integer>(); - objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); + this(ks, (String)null); } - - public SPARQLReasoner(SparqlEndpointKS ks, ExtractionDBCache cache) { + + public SPARQLReasoner(SparqlEndpointKS ks, String cacheDirectory) { this.ks = ks; - this.cache = cache; classPopularityMap = new HashMap<NamedClass, Integer>(); objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); @@ -130,10 +122,10 @@ if(ks.isRemote()){ SparqlEndpoint endpoint = ks.getEndpoint(); qef = new QueryExecutionFactoryHttp(endpoint.getURL().toString(), endpoint.getDefaultGraphURIs()); - if(cache != null){ + if(cacheDirectory != null){ try { long timeToLive = TimeUnit.DAYS.toMillis(30); - CacheCoreEx cacheBackend = CacheCoreH2.create(cache.getCacheDirectory(), timeToLive, true); + CacheCoreEx cacheBackend = CacheCoreH2.create(cacheDirectory, timeToLive, true); CacheEx cacheFrontend = new CacheExImpl(cacheBackend); qef = new QueryExecutionFactoryCacheEx(qef, cacheFrontend); } catch (ClassNotFoundException e) { @@ -149,6 +141,10 @@ } } + public SPARQLReasoner(SparqlEndpointKS ks, ExtractionDBCache cache) { + this(ks, cache.getCacheDirectory()); + } + public SPARQLReasoner(OntModel model) { this.model = model; @@ -1410,7 +1406,7 @@ } public void setCache(ExtractionDBCache cache) { - this.cache = cache; +// this.cache = cache; } public void setUseCache(boolean useCache) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-06-27 18:48:28
|
Revision: 4007 http://sourceforge.net/p/dl-learner/code/4007 Author: lorenz_b Date: 2013-06-27 18:48:26 +0000 (Thu, 27 Jun 2013) Log Message: ----------- Added method to get classes filtered by namespace remotely. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-06-27 18:47:37 UTC (rev 4006) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-06-27 18:48:26 UTC (rev 4007) @@ -504,6 +504,18 @@ } return types; } + + public Set<NamedClass> getOWLClasses(String namespace) { + Set<NamedClass> types = new HashSet<NamedClass>(); + String query = String.format("SELECT DISTINCT ?class WHERE {?class a <%s>. FILTER(REGEX(?class,'%s'))}",OWL.Class.getURI(), namespace); + 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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-06-28 11:53:30
|
Revision: 4009 http://sourceforge.net/p/dl-learner/code/4009 Author: lorenz_b Date: 2013-06-28 11:53:26 +0000 (Fri, 28 Jun 2013) Log Message: ----------- Added methods without timeout. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-06-28 08:47:48 UTC (rev 4008) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-06-28 11:53:26 UTC (rev 4009) @@ -214,7 +214,20 @@ return cnt; } + + public int getSubjectCountForProperty(Property p){ + int cnt = -1; + String query = String.format( + "SELECT (COUNT(DISTINCT ?s) AS ?cnt) WHERE {?s <%s> ?o.}", + p.getName()); + ResultSet rs = executeSelectQuery(query); + if(rs.hasNext()){ + cnt = rs.next().getLiteral("cnt").getInt(); + } + return cnt; + } + public int getObjectCountForProperty(ObjectProperty p, long timeout){ int cnt = -1; String query = String.format( @@ -227,7 +240,20 @@ return cnt; } + + public int getObjectCountForProperty(ObjectProperty p){ + int cnt = -1; + String query = String.format( + "SELECT (COUNT(DISTINCT ?o) AS ?cnt) WHERE {?s <%s> ?o.}", + p.getName()); + ResultSet rs = executeSelectQuery(query); + if(rs.hasNext()){ + cnt = rs.next().getLiteral("cnt").getInt(); + } + return cnt; + } + public int getPopularity(NamedClass nc){ if(classPopularityMap != null && classPopularityMap.containsKey(nc)){ return classPopularityMap.get(nc); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-08-27 11:57:27
|
Revision: 4027 http://sourceforge.net/p/dl-learner/code/4027 Author: lorenz_b Date: 2013-08-27 11:57:25 +0000 (Tue, 27 Aug 2013) Log Message: ----------- Added new constructor. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-08-19 09:54:07 UTC (rev 4026) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-08-27 11:57:25 UTC (rev 4027) @@ -34,7 +34,6 @@ import java.util.TreeSet; import java.util.concurrent.TimeUnit; -import org.aksw.commons.util.strings.StringUtils; import org.aksw.jena_sparql_api.cache.core.QueryExecutionFactoryCacheEx; import org.aksw.jena_sparql_api.cache.extra.CacheCoreEx; import org.aksw.jena_sparql_api.cache.extra.CacheCoreH2; @@ -43,7 +42,6 @@ import org.aksw.jena_sparql_api.core.QueryExecutionFactory; import org.aksw.jena_sparql_api.http.QueryExecutionFactoryHttp; import org.aksw.jena_sparql_api.model.QueryExecutionFactoryModel; -import org.aksw.jena_sparql_api.pagination.core.QueryExecutionFactoryPaginated; import org.dllearner.core.ComponentAnn; import org.dllearner.core.IndividualReasoner; import org.dllearner.core.SchemaReasoner; @@ -145,7 +143,24 @@ qef = new QueryExecutionFactoryModel(((LocalModelBasedSparqlEndpointKS)ks).getModel()); } } + + public SPARQLReasoner(SparqlEndpointKS ks, CacheCoreEx cacheBackend) { + this.ks = ks; + classPopularityMap = new HashMap<NamedClass, Integer>(); + objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); + + if(ks.isRemote()){ + SparqlEndpoint endpoint = ks.getEndpoint(); + qef = new QueryExecutionFactoryHttp(endpoint.getURL().toString(), endpoint.getDefaultGraphURIs()); + CacheEx cacheFrontend = new CacheExImpl(cacheBackend); + qef = new QueryExecutionFactoryCacheEx(qef, cacheFrontend); +// qef = new QueryExecutionFactoryPaginated(qef, 10000); + } else { + qef = new QueryExecutionFactoryModel(((LocalModelBasedSparqlEndpointKS)ks).getModel()); + } + } + public SPARQLReasoner(SparqlEndpointKS ks, ExtractionDBCache cache) { this(ks, cache.getCacheDirectory()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-10-03 09:14:39
|
Revision: 4115 http://sourceforge.net/p/dl-learner/code/4115 Author: lorenz_b Date: 2013-10-03 09:14:35 +0000 (Thu, 03 Oct 2013) Log Message: ----------- Added method which returns a set of domains and ranges instead of the intersection. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-10-03 08:53:06 UTC (rev 4114) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-10-03 09:14:35 UTC (rev 4115) @@ -570,7 +570,7 @@ return schema; } - private Model loadIncrementally(String query){System.err.println(query); + private Model loadIncrementally(String query){ QueryExecutionFactory old = qef; qef = new QueryExecutionFactoryPaginated(qef, 10000); QueryExecution qe = qef.createQueryExecution(query); @@ -1200,7 +1200,24 @@ } return null; } + + public SortedSet<NamedClass> getDomains(ObjectProperty objectProperty) { + String query = String.format("SELECT ?domain WHERE {" + + "<%s> <%s> ?domain. FILTER(isIRI(?domain))" + + "}", + objectProperty.getName(), RDFS.domain.getURI()); + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + SortedSet<NamedClass> domains = new TreeSet<NamedClass>(); + while(rs.hasNext()){ + qs = rs.next(); + domains.add(new NamedClass(qs.getResource("domain").getURI())); + + } + return domains; + } + @Override public Description getDomain(DatatypeProperty datatypeProperty) { String query = String.format("SELECT ?domain WHERE {" + @@ -1237,7 +1254,6 @@ while(rs.hasNext()){ qs = rs.next(); ranges.add(new NamedClass(qs.getResource("range").getURI())); - } if(ranges.size() == 1){ return ranges.get(0); @@ -1246,7 +1262,23 @@ } return null; } + + public SortedSet<NamedClass> getRanges(ObjectProperty objectProperty) { + String query = String.format("SELECT ?range WHERE {" + + "<%s> <%s> ?range. FILTER(isIRI(?range))" + + "}", + objectProperty.getName(), RDFS.range.getURI()); + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + SortedSet<NamedClass> ranges = new TreeSet<NamedClass>(); + while(rs.hasNext()){ + qs = rs.next(); + ranges.add(new NamedClass(qs.getResource("range").getURI())); + } + return ranges; + } + public boolean isObjectProperty(String propertyURI){ String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.ObjectProperty.getURI()); boolean isObjectProperty = executeAskQuery(query); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-11-25 14:20:16
|
Revision: 4175 http://sourceforge.net/p/dl-learner/code/4175 Author: lorenz_b Date: 2013-11-25 14:20:13 +0000 (Mon, 25 Nov 2013) Log Message: ----------- Fixed bug. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-11-25 09:47:35 UTC (rev 4174) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-11-25 14:20:13 UTC (rev 4175) @@ -125,6 +125,8 @@ classPopularityMap = new HashMap<NamedClass, Integer>(); objectPropertyPopularityMap = new HashMap<ObjectProperty, Integer>(); + dataPropertyPopularityMap = new HashMap<DatatypeProperty, Integer>(); + individualPopularityMap = new HashMap<Individual, Integer>(); if(ks.isRemote()){ SparqlEndpoint endpoint = ks.getEndpoint(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2014-01-02 13:07:21
|
Revision: 4209 http://sourceforge.net/p/dl-learner/code/4209 Author: lorenz_b Date: 2014-01-02 13:07:18 +0000 (Thu, 02 Jan 2014) Log Message: ----------- Fixed bug. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-12-10 15:41:36 UTC (rev 4208) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2014-01-02 13:07:18 UTC (rev 4209) @@ -408,22 +408,22 @@ } public boolean isFunctional(ObjectProperty property){ - String query = "ASK {<" + property + "> a " + OWL.FunctionalProperty.getURI() + "}"; + String query = "ASK {<" + property + "> a <" + OWL.FunctionalProperty.getURI() + ">}"; return qef.createQueryExecution(query).execAsk(); } public boolean isInverseFunctional(ObjectProperty property){ - String query = "ASK {<" + property + "> a " + OWL.InverseFunctionalProperty.getURI() + "}"; + String query = "ASK {<" + property + "> a <" + OWL.InverseFunctionalProperty.getURI() + ">}"; return qef.createQueryExecution(query).execAsk(); } public boolean isAsymmetric(ObjectProperty property){ - String query = "ASK {<" + property + "> a " + OWL2.AsymmetricProperty.getURI() + "}"; + String query = "ASK {<" + property + "> a <" + OWL2.AsymmetricProperty.getURI() + ">}"; return qef.createQueryExecution(query).execAsk(); } public boolean isIrreflexive(ObjectProperty property){ - String query = "ASK {<" + property + "> a " + OWL2.IrreflexiveProperty.getURI() + "}"; + String query = "ASK {<" + property + "> a <" + OWL2.IrreflexiveProperty.getURI() + ">}"; return qef.createQueryExecution(query).execAsk(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |