You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(120) |
Sep
(36) |
Oct
(116) |
Nov
(17) |
Dec
(44) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(143) |
Feb
(192) |
Mar
(74) |
Apr
(84) |
May
(105) |
Jun
(64) |
Jul
(49) |
Aug
(120) |
Sep
(159) |
Oct
(156) |
Nov
(51) |
Dec
(28) |
2009 |
Jan
(17) |
Feb
(55) |
Mar
(33) |
Apr
(57) |
May
(54) |
Jun
(28) |
Jul
(6) |
Aug
(16) |
Sep
(38) |
Oct
(30) |
Nov
(26) |
Dec
(52) |
2010 |
Jan
(7) |
Feb
(91) |
Mar
(65) |
Apr
(2) |
May
(14) |
Jun
(25) |
Jul
(38) |
Aug
(48) |
Sep
(80) |
Oct
(70) |
Nov
(75) |
Dec
(77) |
2011 |
Jan
(68) |
Feb
(53) |
Mar
(51) |
Apr
(35) |
May
(65) |
Jun
(101) |
Jul
(29) |
Aug
(230) |
Sep
(95) |
Oct
(49) |
Nov
(110) |
Dec
(63) |
2012 |
Jan
(41) |
Feb
(42) |
Mar
(25) |
Apr
(46) |
May
(51) |
Jun
(44) |
Jul
(45) |
Aug
(29) |
Sep
(12) |
Oct
(9) |
Nov
(17) |
Dec
(2) |
2013 |
Jan
(12) |
Feb
(14) |
Mar
(7) |
Apr
(16) |
May
(54) |
Jun
(27) |
Jul
(11) |
Aug
(5) |
Sep
(85) |
Oct
(27) |
Nov
(37) |
Dec
(32) |
2014 |
Jan
(8) |
Feb
(29) |
Mar
(5) |
Apr
(3) |
May
(22) |
Jun
(3) |
Jul
(4) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <dc...@us...> - 2013-05-02 10:57:45
|
Revision: 3935 http://sourceforge.net/p/dl-learner/code/3935 Author: dcherix Date: 2013-05-02 10:57:42 +0000 (Thu, 02 May 2013) Log Message: ----------- Added profile to create a standalone executable war Modified Paths: -------------- trunk/interfaces/pom.xml Modified: trunk/interfaces/pom.xml =================================================================== --- trunk/interfaces/pom.xml 2013-05-02 10:29:57 UTC (rev 3934) +++ trunk/interfaces/pom.xml 2013-05-02 10:57:42 UTC (rev 3935) @@ -4,7 +4,7 @@ <artifactId>interfaces</artifactId> - <packaging>jar</packaging> + <packaging>${packaging.type}</packaging> <name>Interfaces: GUI, CLI, Web Service</name> <url>http://aksw.org/Projects/DLLearner</url> @@ -19,11 +19,81 @@ <release.name>1.0-beta-2</release.name> <dist-dir>dl-learner-dist</dist-dir> <install-dir>share/dl-learner</install-dir> + <packaging.type>jar</packaging.type> </properties> <profiles> <profile> + <id>jetty</id> + <properties> + <packaging.type>war</packaging.type> + </properties> + <build> + <plugins> + <!-- <plugin> <groupId>org.simplericity.jettyconsole</groupId> <artifactId>jetty-console-maven-plugin</artifactId> + <version>1.50</version> <executions> <execution> <goals> <goal>createconsole</goal> + </goals> <configuration> <backgroundImage>${basedir}/src/main/resources/dl.gif</backgroundImage> + <additionalDependencies> <additionalDependency> <artifactId>jetty-console-log4j-plugin</artifactId> + </additionalDependency> </additionalDependencies> </configuration> </execution> + </executions> </plugin> --> + <plugin> + <groupId>org.apache.tomcat.maven</groupId> + <artifactId>tomcat7-maven-plugin</artifactId> + <version>2.1</version> + <executions> + <execution> + <id>tomcat-run</id> + <goals> + <goal>exec-war-only</goal> + </goals> + <phase>package</phase> + <configuration> + <path>/interfaces</path> + <enableNaming>false</enableNaming> + <finalName>dl-learner-standalone.jar</finalName> + <charset>utf-8</charset> + <extraDependencies> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>jul-to-slf4j</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <version>${slf4j.version}</version> + </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j.version}</version> + </dependency> + </extraDependencies> + <extraResources> + <extraRexource> + <directory>${basedir}/src/main/resources/</directory> + <includes> + <include>log4j.properties</include> + </includes> + </extraRexource> + </extraResources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> <id>release</id> + <properties> + <packaging.type>jar</packaging.type> + </properties> <build> <finalName>interfaces</finalName> <plugins> @@ -128,6 +198,9 @@ </profile> <profile> <id>debpackage</id> + <properties> + <packaging.type>jar</packaging.type> + </properties> <build> <finalName>dl-learner</finalName> <plugins> @@ -345,12 +418,12 @@ <logTimeZone>GMT</logTimeZone> </requestLog> <connectors> - <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> - <port>9099</port> - <maxIdleTime>60000</maxIdleTime> - </connector> - </connectors> - + <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> + <port>9099</port> + <maxIdleTime>60000</maxIdleTime> + </connector> + </connectors> + </configuration> <!--execution is used for testing --> <!--executions> <execution> <id>start-jetty</id> <phase>pre-integration-test</phase> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-05-02 10:30:01
|
Revision: 3934 http://sourceforge.net/p/dl-learner/code/3934 Author: lorenz_b Date: 2013-05-02 10:29:57 +0000 (Thu, 02 May 2013) Log Message: ----------- Updated pattern script. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-05-02 09:46:14 UTC (rev 3933) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-05-02 10:29:57 UTC (rev 3934) @@ -242,7 +242,9 @@ if(!(ex instanceof UnparsableOntologyException)){ errorMessage += (ex.getMessage() != null ? ("->" + ex.getMessage()) : ""); } - errorMessage = errorMessage.substring(0, 1900); + if(errorMessage.length() > 1900){ + errorMessage = errorMessage.substring(0, 1900); + } insertOntologyErrorPs.setString(2, errorMessage); insertOntologyErrorPs.setString(3, repository.getName()); insertOntologyErrorPs.execute(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-05-02 09:46:18
|
Revision: 3933 http://sourceforge.net/p/dl-learner/code/3933 Author: lorenz_b Date: 2013-05-02 09:46:14 +0000 (Thu, 02 May 2013) Log Message: ----------- Limited length of error message to avoid SQL errors. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-05-02 08:43:07 UTC (rev 3932) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-05-02 09:46:14 UTC (rev 3933) @@ -28,6 +28,7 @@ import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.OWLObjectRenderer; +import org.semanticweb.owlapi.io.UnparsableOntologyException; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; @@ -237,7 +238,12 @@ //add ontology loading/parsing/... error entry try { insertOntologyErrorPs.setString(1, url); - insertOntologyErrorPs.setString(2, "ERROR:" + ex.getClass().getSimpleName() + (ex.getMessage() != null ? ("->" + ex.getMessage()) : "")); + String errorMessage = "ERROR:" + ex.getClass().getSimpleName(); + if(!(ex instanceof UnparsableOntologyException)){ + errorMessage += (ex.getMessage() != null ? ("->" + ex.getMessage()) : ""); + } + errorMessage = errorMessage.substring(0, 1900); + insertOntologyErrorPs.setString(2, errorMessage); insertOntologyErrorPs.setString(3, repository.getName()); insertOntologyErrorPs.execute(); } catch (SQLException e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-05-02 08:43:10
|
Revision: 3932 http://sourceforge.net/p/dl-learner/code/3932 Author: lorenz_b Date: 2013-05-02 08:43:07 +0000 (Thu, 02 May 2013) Log Message: ----------- Added noise aware LGG generator. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java 2013-05-02 08:43:07 UTC (rev 3932) @@ -0,0 +1,42 @@ +package org.dllearner.algorithms.qtl.operations.lgg; + +import java.util.Collection; + +import org.dllearner.algorithms.qtl.datastructures.QueryTree; + +public class EvaluatedQueryTree<N> implements Comparable<EvaluatedQueryTree<N>>{ + + private QueryTree<N> tree; + private Collection<QueryTree<N>> uncoveredExamples; + private double score; + + public EvaluatedQueryTree(QueryTree<N> tree, Collection<QueryTree<N>> uncoveredExamples, double score) { + this.tree = tree; + this.uncoveredExamples = uncoveredExamples; + this.score = score; + } + + public QueryTree<N> getTree() { + return tree; + } + + public Collection<QueryTree<N>> getUncoveredExamples() { + return uncoveredExamples; + } + + public double getScore() { + return score; + } + + @Override + public int compareTo(EvaluatedQueryTree<N> other) { + double diff = score - other.getScore(); + if(diff == 0){ + return -1; + } else if(diff > 0){ + return -1; + } else { + return 1; + } + } +} \ No newline at end of file Added: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java 2013-05-02 08:43:07 UTC (rev 3932) @@ -0,0 +1,111 @@ +package org.dllearner.algorithms.qtl.operations.lgg; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.dllearner.algorithms.qtl.datastructures.QueryTree; + +public class NoiseSensitiveLGG<N> { + + private LGGGenerator<N> lggGenerator = new LGGGeneratorImpl<N>(); + + private Queue<EvaluatedQueryTree<N>> todoList; + private SortedSet<EvaluatedQueryTree<N>> solutions; + + public NoiseSensitiveLGG() { + } + + public List<EvaluatedQueryTree<N>> computeLGG(List<QueryTree<N>> trees){ + init(trees); + EvaluatedQueryTree<N> currentElement; + do{ + //pick best element from todo list + currentElement = todoList.poll(); + for (QueryTree<N> example : currentElement.getUncoveredExamples()) { + QueryTree<N> tree = currentElement.getTree(); + //compute the LGG + QueryTree<N> lgg = lggGenerator.getLGG(tree, example); + //compute examples which are not covered by LGG + Collection<QueryTree<N>> uncoveredExamples = new HashSet<QueryTree<N>>(); + for (QueryTree<N> queryTree : trees) { + boolean subsumed = queryTree.isSubsumedBy(lgg); + if(!subsumed){ + uncoveredExamples.add(queryTree); + } + } + //compute score + double score = (trees.size() - uncoveredExamples.size()) / (double)trees.size(); + //add to todo list, if not already contained in todo list or solution list + EvaluatedQueryTree<N> solution = new EvaluatedQueryTree<N>(lgg, uncoveredExamples, score); + todo(solution); + } + solutions.add(currentElement); +// todoList.remove(currentElement); + } while(!terminationCriteriaSatisfied()); + return new ArrayList<EvaluatedQueryTree<N>>(solutions); + } + + private void init(List<QueryTree<N>> trees){ + todoList = new PriorityQueue<EvaluatedQueryTree<N>>(); + solutions = new TreeSet<EvaluatedQueryTree<N>>(); +// EvaluatedQueryTree<N> dummy = new EvaluatedQueryTree<N>(new QueryTreeImpl<N>((N)"TOP"), trees, 0d); +// todoList.add(dummy); + //compute distinct trees + Collection<QueryTree<N>> distinctTrees = new HashSet<QueryTree<N>>(); + for (QueryTree<N> queryTree : trees) { + boolean distinct = true; + for (QueryTree<N> otherTree : distinctTrees) { + if(queryTree.isSubsumedBy(otherTree)){ + distinct = false; + break; + } + } + if(distinct){ + distinctTrees.add(queryTree); + } + } + for (QueryTree<N> queryTree : distinctTrees) { + Collection<QueryTree<N>> uncoveredExamples = new HashSet<QueryTree<N>>(distinctTrees); + uncoveredExamples.remove(queryTree); + double score = (trees.size() - uncoveredExamples.size()) / (double)trees.size(); + todoList.add(new EvaluatedQueryTree<N>(queryTree, uncoveredExamples, score)); + } + } + + /** + * Add tree to todo list if not already contained in that list or the solutions. + * @param solution + */ + private void todo(EvaluatedQueryTree<N> solution){ + //check if not already contained in todo list + for (EvaluatedQueryTree<N> evTree : todoList) { + if(sameTrees(solution.getTree(), evTree.getTree())){ + return; + } + } + //check if not already contained in solutions + for (EvaluatedQueryTree<N> evTree : solutions) { + if(sameTrees(solution.getTree(), evTree.getTree())){ + return; + } + } + todoList.add(solution); + } + + private boolean sameTrees(QueryTree<N> tree1, QueryTree<N> tree2){ + return tree1.isSubsumedBy(tree2) && tree2.isSubsumedBy(tree1); + } + + private boolean terminationCriteriaSatisfied(){ + return todoList.isEmpty(); + } + + + +} Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-05-02 07:35:58 UTC (rev 3931) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-05-02 08:43:07 UTC (rev 3932) @@ -119,7 +119,7 @@ String var = variablesMapping.get(owlEntity); queryString += var; } - }System.out.println(queryString); + } return QueryFactory.create(queryString, Syntax.syntaxARQ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-05-02 07:36:03
|
Revision: 3931 http://sourceforge.net/p/dl-learner/code/3931 Author: lorenz_b Date: 2013-05-02 07:35:58 +0000 (Thu, 02 May 2013) Log Message: ----------- Some improvements in pattern detection workflow. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-30 11:06:03 UTC (rev 3930) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-05-02 07:35:58 UTC (rev 3931) @@ -14,9 +14,11 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Queue; +import java.util.Set; import java.util.prefs.Preferences; import org.dllearner.kb.dataset.OWLOntologyDataset; @@ -26,6 +28,7 @@ import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.OWLObjectRenderer; +import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLDataFactory; @@ -70,6 +73,7 @@ private Connection conn; private PreparedStatement selectOntologyIdPs; private PreparedStatement insertOntologyPs; + private PreparedStatement insertOntologyErrorPs; private PreparedStatement selectPatternIdPs; private PreparedStatement insertPatternIdPs; private PreparedStatement insertOntologyPatternPs; @@ -91,7 +95,9 @@ createTables(); try { selectOntologyIdPs = conn.prepareStatement("SELECT id FROM Ontology WHERE url=?"); - insertOntologyPs = conn.prepareStatement("INSERT INTO Ontology (url, iri, repository) VALUES(?,?,?)"); + insertOntologyPs = conn.prepareStatement("INSERT INTO Ontology (url, iri, repository, logical_axioms, tbox_axioms, rbox_axioms" + + ", abox_axioms, classes, object_properties, data_properties, individuals) VALUES(?,?,?,?,?,?,?,?,?,?,?)"); + insertOntologyErrorPs = conn.prepareStatement("INSERT INTO Ontology (url, iri, repository) VALUES(?,?,?)"); selectPatternIdPs = conn.prepareStatement("SELECT id FROM Pattern WHERE pattern=?"); insertPatternIdPs = conn.prepareStatement("INSERT INTO Pattern (pattern,pattern_pretty) VALUES(?,?)"); insertOntologyPatternPs = conn.prepareStatement("INSERT INTO Ontology_Pattern (ontology_id, pattern_id, occurrences) VALUES(?,?,?)"); @@ -156,6 +162,14 @@ + "url VARCHAR(2000) NOT NULL," + "iri VARCHAR(2000) NOT NULL," + "repository VARCHAR(200) NOT NULL," + + "logical_axioms MEDIUMINT DEFAULT 0," + + "tbox_axioms MEDIUMINT DEFAULT 0," + + "rbox_axioms MEDIUMINT DEFAULT 0," + + "abox_axioms MEDIUMINT DEFAULT 0," + + "classes MEDIUMINT DEFAULT 0," + + "object_properties MEDIUMINT DEFAULT 0," + + "data_properties MEDIUMINT DEFAULT 0," + + "individuals MEDIUMINT DEFAULT 0," + "PRIMARY KEY(id)," + "INDEX(url)) DEFAULT CHARSET=utf8"); @@ -222,10 +236,10 @@ String url = physicalURI.toString(); //add ontology loading/parsing/... error entry try { - insertOntologyPs.setString(1, url); - insertOntologyPs.setString(2, "ERROR:" + ex.getClass().getSimpleName() + "->" + ex.getMessage()); - insertOntologyPs.setString(3, repository.getName()); - insertOntologyPs.execute(); + insertOntologyErrorPs.setString(1, url); + insertOntologyErrorPs.setString(2, "ERROR:" + ex.getClass().getSimpleName() + (ex.getMessage() != null ? ("->" + ex.getMessage()) : "")); + insertOntologyErrorPs.setString(3, repository.getName()); + insertOntologyErrorPs.execute(); } catch (SQLException e) { e.printStackTrace(); } @@ -233,7 +247,10 @@ private int addOntology(URI physicalURI, OWLOntology ontology){ String url = physicalURI.toString(); - String ontologyIRI = ontology.getOntologyID().getOntologyIRI().toString(); + String ontologyIRI = "Anonymous"; + if(!ontology.getOntologyID().isAnonymous()){ + ontologyIRI = ontology.getOntologyID().getOntologyIRI().toString(); + } //check for existing entry try { selectOntologyIdPs.setString(1, url); @@ -249,6 +266,20 @@ insertOntologyPs.setString(1, url); insertOntologyPs.setString(2, ontologyIRI); insertOntologyPs.setString(3, repository.getName()); + Set<OWLAxiom> logicalAxioms = new HashSet<OWLAxiom>(); + logicalAxioms.addAll(ontology.getLogicalAxioms()); + Set<OWLAxiom> tbox = AxiomType.getAxiomsOfTypes(logicalAxioms, new ArrayList<AxiomType>(AxiomType.TBoxAxiomTypes).toArray(new AxiomType[AxiomType.TBoxAxiomTypes.size()])); + Set<OWLAxiom> rbox = AxiomType.getAxiomsOfTypes(logicalAxioms, new ArrayList<AxiomType>(AxiomType.RBoxAxiomTypes).toArray(new AxiomType[AxiomType.RBoxAxiomTypes.size()])); + Set<OWLAxiom> abox = AxiomType.getAxiomsOfTypes(logicalAxioms, new ArrayList<AxiomType>(AxiomType.ABoxAxiomTypes).toArray(new AxiomType[AxiomType.ABoxAxiomTypes.size()])); + + insertOntologyPs.setInt(4, ontology.getLogicalAxiomCount()); + insertOntologyPs.setInt(5, tbox.size()); + insertOntologyPs.setInt(6, rbox.size()); + insertOntologyPs.setInt(7, abox.size()); + insertOntologyPs.setInt(8, ontology.getClassesInSignature(true).size()); + insertOntologyPs.setInt(9, ontology.getObjectPropertiesInSignature(true).size()); + insertOntologyPs.setInt(10, ontology.getDataPropertiesInSignature(true).size()); + insertOntologyPs.setInt(11, ontology.getIndividualsInSignature(true).size()); insertOntologyPs.execute(); } catch (SQLException e) { e.printStackTrace(); @@ -293,9 +324,11 @@ Multiset<OWLAxiom> allAxiomPatterns = HashMultiset.create(); for (OntologyRepositoryEntry entry : entries) { URI uri = entry.getPhysicalURI(); +// if(uri.toString().startsWith("http://rest.bioontology.org/bioportal/ontologies/download/42764")){ if (!ontologyProcessed(uri)) { System.out.println("Loading \"" + entry.getOntologyShortName() + "\" from "+ uri); try { + manager = OWLManager.createOWLOntologyManager(); OWLOntology ontology = manager.loadOntology(IRI.create(uri)); Multiset<OWLAxiom> axiomPatterns = HashMultiset.create(); for (OWLLogicalAxiom axiom : ontology.getLogicalAxioms()) { Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-30 11:06:03 UTC (rev 3930) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-05-02 07:35:58 UTC (rev 3931) @@ -1,8 +1,10 @@ package org.dllearner.utilities.owl; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.Stack; import org.aksw.commons.collections.diff.ModelDiff; @@ -31,6 +33,7 @@ import org.semanticweb.owlapi.model.OWLEntity; import org.semanticweb.owlapi.model.OWLIndividual; import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLNamedIndividual; import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom; import org.semanticweb.owlapi.model.OWLObjectComplementOf; import org.semanticweb.owlapi.model.OWLObjectExactCardinality; @@ -62,7 +65,7 @@ private String sparql = ""; private Stack<String> variables = new Stack<String>(); - private Map<OWLEntity, String> variablesMapping; + private Map<OWLEntity, String> variablesMapping = new HashMap<OWLEntity, String>(); private int classCnt = 0; private int propCnt = 0; @@ -71,6 +74,7 @@ private OWLDataFactory df = new OWLDataFactoryImpl(); private Map<Integer, Boolean> intersection; + private Set<? extends OWLEntity> variableEntities; public OWLClassExpressionToSPARQLConverter() { } @@ -90,13 +94,37 @@ } public Query asQuery(String rootVariable, OWLClassExpression expr){ - String queryString = "SELECT DISTINCT " + rootVariable + " WHERE {"; - queryString += convert(rootVariable, expr); + return asQuery(rootVariable, expr, Collections.<OWLEntity>emptySet()); + } + + public Query asQuery(String rootVariable, OWLClassExpression expr, Set<? extends OWLEntity> variableEntities){ + this.variableEntities = variableEntities; + String queryString = "SELECT DISTINCT "; + String triplePattern = convert(rootVariable, expr); + if(variableEntities.isEmpty()){ + queryString += rootVariable + " WHERE {"; + } else { + for (OWLEntity owlEntity : variableEntities) { + String var = variablesMapping.get(owlEntity); + queryString += var + " "; + } + queryString += "COUNT(" + rootVariable + ") WHERE {"; + } + + queryString += triplePattern; queryString += "}"; + if(!variableEntities.isEmpty()){ + queryString += "GROUP BY "; + for (OWLEntity owlEntity : variableEntities) { + String var = variablesMapping.get(owlEntity); + queryString += var; + } + }System.out.println(queryString); return QueryFactory.create(queryString, Syntax.syntaxARQ); } private void reset(){ + variablesMapping.clear(); variables.clear(); classCnt = 0; propCnt = 0; @@ -143,7 +171,7 @@ private String triple(String subject, String predicate, String object){ return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + - (object.startsWith("?") ? object : "<" + object + ">") + ".\n"; + (object.startsWith("?") ? object : object) + ".\n"; } private String triple(String subject, String predicate, OWLLiteral object){ @@ -152,12 +180,46 @@ render(object) + ".\n"; } + private String triple(String subject, String predicate, OWLEntity object){ + return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + + render(object) + ".\n"; + } + + private String triple(String subject, OWLEntity predicate, OWLEntity object){ + return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + + render(predicate) + " " + + render(object) + ".\n"; + } + + private String triple(String subject, OWLEntity predicate, String object){ + return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + + render(predicate) + " " + + object + ".\n"; + } + + private String triple(String subject, OWLEntity predicate, OWLLiteral object){ + return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + + render(predicate) + " " + + render(object) + ".\n"; + } + private String triple(String subject, String predicate, OWLIndividual object){ return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + "<" + object.toStringID() + ">.\n"; } + private String render(OWLEntity entity){ + String s; + if(variableEntities.contains(entity)){ + s = getVariable(entity); + } else { + s = "<" + entity.toStringID() + ">"; + } + return s; + } + private String render(OWLLiteral literal){ return "\"" + literal + "\"^^<" + literal.getDatatype().toStringID() + ">"; } @@ -176,7 +238,7 @@ @Override public void visit(OWLClass ce) { - sparql += triple(variables.peek(), "a", ce.toStringID()); + sparql += triple(variables.peek(), "a", render(ce)); } @Override @@ -220,9 +282,9 @@ OWLObjectPropertyExpression propertyExpression = ce.getProperty(); if(propertyExpression.isAnonymous()){ //property expression is inverse of a property - sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), variables.peek()); + sparql += triple(objectVariable, propertyExpression.getNamedProperty(), variables.peek()); } else { - sparql += triple(variables.peek(), propertyExpression.getNamedProperty().toStringID(), objectVariable); + sparql += triple(variables.peek(), propertyExpression.getNamedProperty(), objectVariable); } OWLClassExpression filler = ce.getFiller(); if(filler.isAnonymous()){ @@ -230,7 +292,7 @@ filler.accept(this); variables.pop(); } else { - sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + sparql += triple(objectVariable, "a", filler.asOWLClass()); } } @@ -240,7 +302,7 @@ String subject = variables.peek(); String objectVariable = buildIndividualVariable(); OWLObjectPropertyExpression propertyExpression = ce.getProperty(); - String predicate = propertyExpression.getNamedProperty().toStringID(); + OWLObjectProperty predicate = propertyExpression.getNamedProperty(); OWLClassExpression filler = ce.getFiller(); if(propertyExpression.isAnonymous()){ //property expression is inverse of a property @@ -269,12 +331,12 @@ @Override public void visit(OWLObjectHasValue ce) { OWLObjectPropertyExpression propertyExpression = ce.getProperty(); - OWLIndividual value = ce.getValue(); + OWLNamedIndividual value = ce.getValue().asOWLNamedIndividual(); if(propertyExpression.isAnonymous()){ //property expression is inverse of a property - sparql += triple(value.toStringID(), propertyExpression.getNamedProperty().toStringID(), variables.peek()); + sparql += triple(value.toStringID(), propertyExpression.getNamedProperty(), variables.peek()); } else { - sparql += triple(variables.peek(), propertyExpression.getNamedProperty().toStringID(), value.toStringID()); + sparql += triple(variables.peek(), propertyExpression.getNamedProperty(), value); } } @@ -287,9 +349,9 @@ sparql += "{SELECT " + subjectVariable + " WHERE {"; if(propertyExpression.isAnonymous()){ //property expression is inverse of a property - sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), subjectVariable); + sparql += triple(objectVariable, propertyExpression.getNamedProperty(), subjectVariable); } else { - sparql += triple(subjectVariable, propertyExpression.getNamedProperty().toStringID(), objectVariable); + sparql += triple(subjectVariable, propertyExpression.getNamedProperty(), objectVariable); } OWLClassExpression filler = ce.getFiller(); if(filler.isAnonymous()){ @@ -299,7 +361,7 @@ filler.accept(this); variables.pop(); } else { - sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + sparql += triple(objectVariable, "a", filler.asOWLClass()); } sparql += "} GROUP BY " + subjectVariable + " HAVING(COUNT(" + objectVariable + ")>=" + cardinality + ")}"; @@ -315,9 +377,9 @@ sparql += "{SELECT " + subjectVariable + " WHERE {"; if(propertyExpression.isAnonymous()){ //property expression is inverse of a property - sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), subjectVariable); + sparql += triple(objectVariable, propertyExpression.getNamedProperty(), subjectVariable); } else { - sparql += triple(subjectVariable, propertyExpression.getNamedProperty().toStringID(), objectVariable); + sparql += triple(subjectVariable, propertyExpression.getNamedProperty(), objectVariable); } OWLClassExpression filler = ce.getFiller(); if(filler.isAnonymous()){ @@ -327,7 +389,7 @@ filler.accept(this); variables.pop(); } else { - sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + sparql += triple(objectVariable, "a", filler.asOWLClass()); } sparql += "} GROUP BY " + subjectVariable + " HAVING(COUNT(" + objectVariable + ")=" + cardinality + ")}"; @@ -342,9 +404,9 @@ sparql += "{SELECT " + subjectVariable + " WHERE {"; if(propertyExpression.isAnonymous()){ //property expression is inverse of a property - sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), subjectVariable); + sparql += triple(objectVariable, propertyExpression.getNamedProperty(), subjectVariable); } else { - sparql += triple(subjectVariable, propertyExpression.getNamedProperty().toStringID(), objectVariable); + sparql += triple(subjectVariable, propertyExpression.getNamedProperty(), objectVariable); } OWLClassExpression filler = ce.getFiller(); if(filler.isAnonymous()){ @@ -354,7 +416,7 @@ filler.accept(this); variables.pop(); } else { - sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + sparql += triple(objectVariable, "a", filler.asOWLClass()); } sparql += "} GROUP BY " + subjectVariable + " HAVING(COUNT(" + objectVariable + ")<=" + cardinality + ")}"; @@ -364,7 +426,7 @@ public void visit(OWLObjectHasSelf ce) { String subject = variables.peek(); OWLObjectPropertyExpression property = ce.getProperty(); - sparql += triple(subject, property.getNamedProperty().toStringID(), subject); + sparql += triple(subject, property.getNamedProperty(), subject); } @Override @@ -390,7 +452,7 @@ public void visit(OWLDataSomeValuesFrom ce) { String objectVariable = buildIndividualVariable(); OWLDataPropertyExpression propertyExpression = ce.getProperty(); - sparql += triple(variables.peek(), propertyExpression.asOWLDataProperty().toStringID(), objectVariable); + sparql += triple(variables.peek(), propertyExpression.asOWLDataProperty(), objectVariable); OWLDataRange filler = ce.getFiller(); variables.push(objectVariable); filler.accept(this); @@ -426,7 +488,7 @@ public void visit(OWLDataHasValue ce) { OWLDataPropertyExpression propertyExpression = ce.getProperty(); OWLLiteral value = ce.getValue(); - sparql += triple(variables.peek(), propertyExpression.asOWLDataProperty().toStringID(), value); + sparql += triple(variables.peek(), propertyExpression.asOWLDataProperty(), value); } @Override @@ -436,7 +498,7 @@ OWLDataPropertyExpression propertyExpression = ce.getProperty(); int cardinality = ce.getCardinality(); sparql += "{SELECT " + subjectVariable + " WHERE {"; - sparql += triple(subjectVariable, propertyExpression.asOWLDataProperty().toStringID(), objectVariable); + sparql += triple(subjectVariable, propertyExpression.asOWLDataProperty(), objectVariable); OWLDataRange filler = ce.getFiller(); variables.push(objectVariable); filler.accept(this); @@ -452,7 +514,7 @@ OWLDataPropertyExpression propertyExpression = ce.getProperty(); int cardinality = ce.getCardinality(); sparql += "{SELECT " + subjectVariable + " WHERE {"; - sparql += triple(subjectVariable, propertyExpression.asOWLDataProperty().toStringID(), objectVariable); + sparql += triple(subjectVariable, propertyExpression.asOWLDataProperty(), objectVariable); OWLDataRange filler = ce.getFiller(); variables.push(objectVariable); filler.accept(this); @@ -468,7 +530,7 @@ OWLDataPropertyExpression propertyExpression = ce.getProperty(); int cardinality = ce.getCardinality(); sparql += "{SELECT " + subjectVariable + " WHERE {"; - sparql += triple(subjectVariable, propertyExpression.asOWLDataProperty().toStringID(), objectVariable); + sparql += triple(subjectVariable, propertyExpression.asOWLDataProperty(), objectVariable); OWLDataRange filler = ce.getFiller(); variables.push(objectVariable); filler.accept(this); @@ -642,6 +704,13 @@ query = converter.asQuery(rootVar, expr).toString(); System.out.println(expr + "\n" + query); + //variable entity + expr = df.getOWLObjectIntersectionOf( + df.getOWLObjectSomeValuesFrom(propR, clsB), + clsB); + query = converter.asQuery(rootVar, expr, Collections.singleton(propR)).toString(); + System.out.println(expr + "\n" + query); + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-30 11:06:06
|
Revision: 3930 http://sourceforge.net/p/dl-learner/code/3930 Author: lorenz_b Date: 2013-04-30 11:06:03 +0000 (Tue, 30 Apr 2013) Log Message: ----------- Added class which fills JENA model with explicit type statements for entities. Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLEntityTypeAdder.java Added: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLEntityTypeAdder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLEntityTypeAdder.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLEntityTypeAdder.java 2013-04-30 11:06:03 UTC (rev 3930) @@ -0,0 +1,50 @@ +package org.dllearner.utilities.owl; + +import java.util.HashSet; +import java.util.Set; + +import com.google.common.collect.Sets; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.Property; +import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.rdf.model.Statement; +import com.hp.hpl.jena.rdf.model.StmtIterator; +import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; + +public class OWLEntityTypeAdder { + + /** + * Infers the type of predicates p_i by analyzing the object of the triples using p_i and adds the + * entity type assertion to the model, i.e. for a data property dp <dp a owl:DatatypeProperty> + * will be added. + * @param model + */ + public static void addEntityTypes(Model model){ + StmtIterator iterator = model.listStatements(); + Set<Property> objectPropertyPredicates = new HashSet<Property>(); + Set<Property> dataPropertyPredicates = new HashSet<Property>(); + while(iterator.hasNext()){ + Statement st = iterator.next(); + Property predicate = st.getPredicate(); + if(!predicate.getURI().startsWith(RDF.getURI()) && !predicate.getURI().startsWith(RDFS.getURI())){ + RDFNode object = st.getObject(); + if(object.isLiteral()){ + dataPropertyPredicates.add(predicate); + } else if(object.isResource()){ + objectPropertyPredicates.add(predicate); + } + } + } + iterator.close(); + + for (Property property : Sets.difference(objectPropertyPredicates, dataPropertyPredicates)) { + model.add(property, RDF.type, OWL.ObjectProperty); + } + for (Property property : Sets.difference(dataPropertyPredicates, objectPropertyPredicates)) { + model.add(property, RDF.type, OWL.DatatypeProperty); + } + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-30 11:05:16
|
Revision: 3929 http://sourceforge.net/p/dl-learner/code/3929 Author: lorenz_b Date: 2013-04-30 11:05:12 +0000 (Tue, 30 Apr 2013) Log Message: ----------- Removed experimental classes.Updated LGG. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java trunk/components-core/src/main/java/org/dllearner/core/EvaluatedAxiom.java trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java Removed Paths: ------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java Deleted: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -1,286 +0,0 @@ -package org.dllearner.algorithms.pattern; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.ToStringRenderer; -import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; -import org.semanticweb.owlapi.model.OWLAnnotationPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLAnnotationPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLAxiomVisitor; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLDatatypeDefinitionAxiom; -import org.semanticweb.owlapi.model.OWLDeclarationAxiom; -import org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom; -import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointUnionAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; -import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLHasKeyAxiom; -import org.semanticweb.owlapi.model.OWLIndividual; -import org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.model.OWLReflexiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLSameIndividualAxiom; -import org.semanticweb.owlapi.model.OWLSubAnnotationPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom; -import org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.PrefixManager; -import org.semanticweb.owlapi.model.SWRLRule; -import org.semanticweb.owlapi.util.DefaultPrefixManager; - -import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer; - -import com.hp.hpl.jena.query.Query; -import com.hp.hpl.jena.query.QueryFactory; -import com.hp.hpl.jena.query.Syntax; - -public class PatternAxiomToSPARQLConverter implements OWLAxiomVisitor { - - private String root = "?x"; - private PatternExpressionToSPARQLConverter expressionConverter; - private String sparql; - - public PatternAxiomToSPARQLConverter() { - } - - public Query convert(OWLAxiom axiom) { - expressionConverter = new PatternExpressionToSPARQLConverter(); - - sparql = "SELECT " + root + " WHERE {\n"; - axiom.accept(this); - sparql += "}"; - - return QueryFactory.create(sparql, Syntax.syntaxARQ); - } - - @Override - public void visit(OWLAnnotationAssertionAxiom axiom) { - } - - @Override - public void visit(OWLSubAnnotationPropertyOfAxiom axiom) { - } - - @Override - public void visit(OWLAnnotationPropertyDomainAxiom axiom) { - } - - @Override - public void visit(OWLAnnotationPropertyRangeAxiom axiom) { - } - - @Override - public void visit(OWLDeclarationAxiom axiom) { - } - - @Override - public void visit(OWLSubClassOfAxiom axiom) { - OWLClassExpression subClass = axiom.getSubClass(); - sparql += expressionConverter.convert(root, subClass); - OWLClassExpression superClass = axiom.getSuperClass(); - sparql += expressionConverter.convert(root, superClass); - } - - @Override - public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom) { - } - - @Override - public void visit(OWLAsymmetricObjectPropertyAxiom axiom) { - } - - @Override - public void visit(OWLReflexiveObjectPropertyAxiom axiom) { - } - - @Override - public void visit(OWLDisjointClassesAxiom axiom) { - } - - @Override - public void visit(OWLDataPropertyDomainAxiom axiom) { - } - - @Override - public void visit(OWLObjectPropertyDomainAxiom axiom) { - } - - @Override - public void visit(OWLEquivalentObjectPropertiesAxiom axiom) { - } - - @Override - public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) { - } - - @Override - public void visit(OWLDifferentIndividualsAxiom axiom) { - } - - @Override - public void visit(OWLDisjointDataPropertiesAxiom axiom) { - } - - @Override - public void visit(OWLDisjointObjectPropertiesAxiom axiom) { - } - - @Override - public void visit(OWLObjectPropertyRangeAxiom axiom) { - } - - @Override - public void visit(OWLObjectPropertyAssertionAxiom axiom) { - } - - @Override - public void visit(OWLFunctionalObjectPropertyAxiom axiom) { - } - - @Override - public void visit(OWLSubObjectPropertyOfAxiom axiom) { - } - - @Override - public void visit(OWLDisjointUnionAxiom axiom) { - } - - @Override - public void visit(OWLSymmetricObjectPropertyAxiom axiom) { - } - - @Override - public void visit(OWLDataPropertyRangeAxiom axiom) { - } - - @Override - public void visit(OWLFunctionalDataPropertyAxiom axiom) { - } - - @Override - public void visit(OWLEquivalentDataPropertiesAxiom axiom) { - } - - @Override - public void visit(OWLClassAssertionAxiom axiom) { - } - - @Override - public void visit(OWLEquivalentClassesAxiom axiom) { - } - - @Override - public void visit(OWLDataPropertyAssertionAxiom axiom) { - } - - @Override - public void visit(OWLTransitiveObjectPropertyAxiom axiom) { - } - - @Override - public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { - } - - @Override - public void visit(OWLSubDataPropertyOfAxiom axiom) { - } - - @Override - public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) { - } - - @Override - public void visit(OWLSameIndividualAxiom axiom) { - } - - @Override - public void visit(OWLSubPropertyChainOfAxiom axiom) { - } - - @Override - public void visit(OWLInverseObjectPropertiesAxiom axiom) { - } - - @Override - public void visit(OWLHasKeyAxiom axiom) { - } - - @Override - public void visit(OWLDatatypeDefinitionAxiom axiom) { - } - - @Override - public void visit(SWRLRule axiom) { - } - - public static void main(String[] args) throws Exception { - ToStringRenderer.getInstance().setRenderer(new DLSyntaxObjectRenderer()); - PatternAxiomToSPARQLConverter converter = new PatternAxiomToSPARQLConverter(); - - OWLOntologyManager man = OWLManager.createOWLOntologyManager(); - OWLDataFactory df = man.getOWLDataFactory(); - PrefixManager pm = new DefaultPrefixManager("http://examples.org/ontology#"); - - OWLClass clsA = df.getOWLClass("A", pm); - OWLClass clsB = df.getOWLClass("B", pm); - OWLClass clsC = df.getOWLClass("C", pm); - - OWLObjectProperty propR = df.getOWLObjectProperty("r", pm); - OWLObjectProperty propS = df.getOWLObjectProperty("s", pm); - - OWLIndividual indA = df.getOWLNamedIndividual("a", pm); - OWLIndividual indB = df.getOWLNamedIndividual("b", pm); - - OWLAxiom axiom = df.getOWLSubClassOfAxiom( - clsA, - clsB); - Query query = converter.convert(axiom); - System.out.println(axiom + "\n" + query); - - axiom = df.getOWLSubClassOfAxiom( - clsA, - df.getOWLObjectSomeValuesFrom(propR, clsB)); - query = converter.convert(axiom); - System.out.println(axiom + "\n" + query); - - axiom = df.getOWLSubClassOfAxiom( - clsA, - df.getOWLObjectIntersectionOf( - df.getOWLObjectSomeValuesFrom(propR, clsB), - clsB)); - query = converter.convert(axiom); - System.out.println(axiom + "\n" + query); - - axiom = df.getOWLSubClassOfAxiom( - clsA, - df.getOWLObjectAllValuesFrom(propR, clsB)); - query = converter.convert(axiom); - System.out.println(axiom + "\n" + query); - - } - -} Deleted: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -1,207 +0,0 @@ -package org.dllearner.algorithms.pattern; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.Stack; - -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLClassExpressionVisitor; -import org.semanticweb.owlapi.model.OWLDataAllValuesFrom; -import org.semanticweb.owlapi.model.OWLDataExactCardinality; -import org.semanticweb.owlapi.model.OWLDataHasValue; -import org.semanticweb.owlapi.model.OWLDataMaxCardinality; -import org.semanticweb.owlapi.model.OWLDataMinCardinality; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom; -import org.semanticweb.owlapi.model.OWLObjectComplementOf; -import org.semanticweb.owlapi.model.OWLObjectExactCardinality; -import org.semanticweb.owlapi.model.OWLObjectHasSelf; -import org.semanticweb.owlapi.model.OWLObjectHasValue; -import org.semanticweb.owlapi.model.OWLObjectIntersectionOf; -import org.semanticweb.owlapi.model.OWLObjectInverseOf; -import org.semanticweb.owlapi.model.OWLObjectMaxCardinality; -import org.semanticweb.owlapi.model.OWLObjectMinCardinality; -import org.semanticweb.owlapi.model.OWLObjectOneOf; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; -import org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom; -import org.semanticweb.owlapi.model.OWLObjectUnionOf; -import org.semanticweb.owlapi.model.OWLPropertyExpressionVisitor; - -public class PatternExpressionToSPARQLConverter implements OWLClassExpressionVisitor, OWLPropertyExpressionVisitor{ - - private String sparql = ""; - private Stack<String> variables = new Stack<String>(); - private Map<OWLEntity, String> variablesMapping; - - private int classCnt = 0; - private int propCnt = 0; - private int indCnt = 0; - - public PatternExpressionToSPARQLConverter() { - variablesMapping = new HashMap<OWLEntity, String>(); - } - - public String convert(String root, OWLClassExpression expr){ - sparql = ""; - variables.push(root); - expr.accept(this); - return sparql; - } - - private String getVariable(OWLEntity entity){ - String var = variablesMapping.get(entity); - if(var == null){ - if(entity.isOWLClass()){ - var = "?cls" + classCnt++; - } else if(entity.isOWLObjectProperty() || entity.isOWLDataProperty()){ - var = "?p" + propCnt++; - } else if(entity.isOWLNamedIndividual()){ - var = buildIndividualVariable(); - } - variablesMapping.put(entity, var); - } - return var; - } - - private String buildIndividualVariable(){ - return "?s" + indCnt++; - } - - private String triple(String subject, String predicate, String object){ - return subject + " " + predicate + " " + object + ".\n"; - } - - @Override - public void visit(OWLClass expr) { - sparql += variables.peek() + " a " + getVariable(expr) +".\n"; - } - - @Override - public void visit(OWLObjectProperty property) { - - } - - @Override - public void visit(OWLDataProperty property) { - } - - @Override - public void visit(OWLObjectIntersectionOf expr) { - Set<OWLClassExpression> operands = expr.getOperands(); - String variable = variables.peek(); - for (OWLClassExpression operand : operands) { - sparql += convert(variable, operand); - } - } - - @Override - public void visit(OWLObjectUnionOf expr) { - } - - @Override - public void visit(OWLObjectComplementOf expr) { - } - - @Override - public void visit(OWLObjectSomeValuesFrom expr) { - String variable = variables.peek(); - OWLObjectPropertyExpression property = expr.getProperty(); - if(!property.isAnonymous()){ - String objectVariable = buildIndividualVariable(); - variables.push(objectVariable); - //build the triple for the property - sparql += triple(variable, getVariable(property.asOWLObjectProperty()), objectVariable); - //build the rest according to the role filler - OWLClassExpression filler = expr.getFiller(); - filler.accept(this); - variables.pop(); - - } else { - System.err.println("TODO: complex property expressions"); - } - - } - - @Override - public void visit(OWLObjectAllValuesFrom expr) { - String variable = variables.peek(); - OWLObjectPropertyExpression property = expr.getProperty(); - if(!property.isAnonymous()){ - String objectVariable = buildIndividualVariable(); - variables.push(objectVariable); - //build the triple for the property - sparql += triple(variable, getVariable(property.asOWLObjectProperty()), objectVariable); - OWLClassExpression filler = expr.getFiller(); - filler.accept(this); - //build the rest according to the role filler - sparql += "FILTER NOT EXISTS{"; - objectVariable = buildIndividualVariable(); - variables.push(objectVariable); - sparql += triple(variable, getVariable(property.asOWLObjectProperty()), objectVariable); - variables.pop(); - sparql += "}"; - - - } else { - System.err.println("TODO: complex property expressions"); - } - } - - @Override - public void visit(OWLObjectHasValue expr) { - } - - @Override - public void visit(OWLObjectMinCardinality expr) { - } - - @Override - public void visit(OWLObjectExactCardinality expr) { - } - - @Override - public void visit(OWLObjectMaxCardinality expr) { - } - - @Override - public void visit(OWLObjectHasSelf expr) { - } - - @Override - public void visit(OWLObjectOneOf expr) { - } - - @Override - public void visit(OWLDataSomeValuesFrom expr) { - } - - @Override - public void visit(OWLDataAllValuesFrom expr) { - } - - @Override - public void visit(OWLDataHasValue expr) { - } - - @Override - public void visit(OWLDataMinCardinality expr) { - } - - @Override - public void visit(OWLDataExactCardinality expr) { - } - - @Override - public void visit(OWLDataMaxCardinality expr) { - } - - @Override - public void visit(OWLObjectInverseOf property) { - } - -} Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -146,6 +146,17 @@ // this.configurator = new QTLConfigurator(this); } + public QTL(AbstractLearningProblem learningProblem, SparqlEndpointKS endpointKS, ExtractionDBCache cache) throws LearningProblemUnsupportedException{ + if(!(learningProblem instanceof PosOnlyLP || learningProblem instanceof PosNegLP)){ + throw new LearningProblemUnsupportedException(learningProblem.getClass(), getClass()); + } + this.learningProblem = learningProblem; + this.endpointKS = endpointKS; + this.cache = cache; + +// this.configurator = new QTLConfigurator(this); + } + public QTL(SPARQLEndpointEx endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; this.cache = cache; @@ -162,6 +173,22 @@ negExampleTrees = new ArrayList<QueryTree<String>>(); } + public QTL(SparqlEndpointKS endpointKS, ExtractionDBCache cache) { + this.endpointKS = endpointKS; + this.cache = cache; + + treeCache = new QueryTreeCache(); + cbdGenerator = new CachingConciseBoundedDescriptionGenerator(new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache)); + cbdGenerator.setRecursionDepth(maxQueryTreeDepth); + + lggGenerator = new LGGGeneratorImpl<String>(); + nbr = new NBR<String>(endpoint, cache); + nbr.setMaxExecutionTimeInSeconds(maxExecutionTimeInSeconds); + + posExampleTrees = new ArrayList<QueryTree<String>>(); + negExampleTrees = new ArrayList<QueryTree<String>>(); + } + public QTL(Model model) { this.model = model; @@ -280,16 +307,20 @@ Model model; QueryTree<String> tree; for(String resource : resources){ - logger.info("Generating tree for " + resource); - model = cbdGenerator.getConciseBoundedDescription(resource); - applyFilters(model); - tree = treeCache.getQueryTree(resource, model); - if(logger.isDebugEnabled()){ - logger.debug("Tree for resource " + resource); - logger.debug(tree.getStringRepresentation()); - + try { + logger.debug("Generating tree for " + resource); + model = cbdGenerator.getConciseBoundedDescription(resource); + applyFilters(model); + tree = treeCache.getQueryTree(resource, model); + if(logger.isDebugEnabled()){ + logger.debug("Tree for resource " + resource); + logger.debug(tree.getStringRepresentation()); + + } + trees.add(tree); + } catch (Exception e) { + logger.error("Failed to create tree for resource " + resource + ".", e); } - trees.add(tree); } return trees; } @@ -367,7 +398,9 @@ if(logger.isDebugEnabled()){ logger.debug("LGG: \n" + lgg.getStringRepresentation()); } - logger.info(lgg.toSPARQLQueryString(true, enableNumericLiteralFilters, prefixes)); + if(logger.isInfoEnabled()){ + logger.info(lgg.toSPARQLQueryString(true, enableNumericLiteralFilters, prefixes)); + } } public void setEnableNumericLiteralFilters(boolean enableNumericLiteralFilters) { @@ -421,6 +454,10 @@ return list; } + public QueryTree<String> getLgg() { + return lgg; + } + public static void main(String[] args) throws Exception { Set<String> positiveExamples = new HashSet<String>(); positiveExamples.add("http://dbpedia.org/resource/Liverpool_F.C."); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -26,6 +26,7 @@ import java.util.Set; import org.dllearner.algorithms.qtl.datastructures.impl.QueryTreeImpl; +import org.semanticweb.owlapi.model.OWLClassExpression; import com.hp.hpl.jena.datatypes.RDFDatatype; import com.hp.hpl.jena.query.Query; @@ -136,6 +137,8 @@ Query toSPARQLQuery(); + OWLClassExpression asOWLClassExpression(); + int getTriplePatternCount(); Query toQuery(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -21,7 +21,6 @@ import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -41,7 +40,16 @@ import org.dllearner.algorithms.qtl.datastructures.NodeRenderer; import org.dllearner.algorithms.qtl.datastructures.QueryTree; import org.dllearner.algorithms.qtl.filters.Filters; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.vocab.OWL2Datatype; +import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; + import com.hp.hpl.jena.datatypes.BaseDatatype; import com.hp.hpl.jena.datatypes.RDFDatatype; import com.hp.hpl.jena.datatypes.xsd.XSDDatatype; @@ -53,6 +61,7 @@ import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.sparql.syntax.ElementGroup; import com.hp.hpl.jena.sparql.syntax.ElementTriplesBlock; +import com.hp.hpl.jena.vocabulary.RDF; /** * @@ -80,6 +89,7 @@ private boolean isLiteralNode = false; private boolean isResourceNode = false; + private boolean isBlankNode = false; private List<Literal> literals = new ArrayList<Literal>(); @@ -163,6 +173,14 @@ this.isLiteralNode = isLiteralNode; } + public void setBlankNode(boolean isBlankNode) { + this.isBlankNode = isBlankNode; + } + + public boolean isBlankNode() { + return isBlankNode; + } + @Override public boolean isResourceNode() { return isResourceNode; @@ -728,7 +746,7 @@ for(String filter : filters){ sb.append(filter).append("\n"); } - sb.append("}");System.out.println(sb.toString()); + sb.append("}"); Query query = QueryFactory.create(sb.toString(), Syntax.syntaxARQ); query.setPrefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); query.setPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#"); @@ -869,9 +887,9 @@ } else if(objectLabel.startsWith("http:")){ object = Node.createURI(objectLabel); } else { - System.out.println(objectLabel); +// System.out.println(objectLabel); String[] split = objectLabel.split("@"); - System.out.println(Arrays.toString(split)); +// System.out.println(Arrays.toString(split)); if(split.length == 2){ object = Node.createLiteral(split[0], split[1], null); } else { @@ -917,5 +935,73 @@ } } + public OWLClassExpression asOWLClassExpression(){ + OWLDataFactory df = new OWLDataFactoryImpl(); + QueryTree<N> root = getRoot(); + Set<OWLClassExpression> classExpressions = buildOWLClassExpressions(df, root); + if(classExpressions.size() == 1){ + return classExpressions.iterator().next(); + } else { + return df.getOWLObjectIntersectionOf(classExpressions); + } + } + + private Set<OWLClassExpression> buildOWLClassExpressions(OWLDataFactory df, QueryTree<N> tree){ + Set<OWLClassExpression> classExpressions = new HashSet<OWLClassExpression>(); + + List<QueryTree<N>> children = tree.getChildren(); + for(QueryTree<N> child : children){ + String childLabel = (String) child.getUserObject(); + String predicateString = (String) tree.getEdge(child); + if(predicateString.equals(RDF.type.getURI())){ + classExpressions.add(df.getOWLClass(IRI.create(childLabel))); + } else { + if(child.isLiteralNode()){ + OWLDataProperty p = df.getOWLDataProperty(IRI.create((String) tree.getEdge(child))); + if(childLabel.equals("?")){ + List<Literal> literals = child.getLiterals(); + Literal lit = literals.iterator().next(); + RDFDatatype datatype = lit.getDatatype(); + String datatypeURI; + if(datatype == null){ + datatypeURI = OWL2Datatype.RDF_PLAIN_LITERAL.getURI().toString(); + } else { + datatypeURI = datatype.getURI(); + } + classExpressions.add(df.getOWLDataSomeValuesFrom(p, df.getOWLDatatype(IRI.create(datatypeURI)))); + } else { + List<Literal> literals = child.getLiterals(); + Literal lit = literals.iterator().next(); + RDFDatatype datatype = lit.getDatatype(); + OWLLiteral owlLiteral; + if(datatype == null){ + owlLiteral = df.getOWLLiteral(lit.getLexicalForm(), lit.getLanguage()); + } else { + owlLiteral = df.getOWLLiteral(lit.getLexicalForm(), df.getOWLDatatype(IRI.create(datatype.getURI()))); + } + classExpressions.add(df.getOWLDataHasValue(p, owlLiteral)); + } + } else { + OWLObjectProperty p = df.getOWLObjectProperty(IRI.create((String) tree.getEdge(child))); + OWLClassExpression filler; + if(child.isVarNode()){ + Set<OWLClassExpression> fillerClassExpressions = buildOWLClassExpressions(df, child); + if(fillerClassExpressions.isEmpty()){ + filler = df.getOWLThing(); + } else if(fillerClassExpressions.size() == 1){ + filler = fillerClassExpressions.iterator().next(); + } else { + filler = df.getOWLObjectIntersectionOf(fillerClassExpressions); + } + classExpressions.add(df.getOWLObjectSomeValuesFrom(p, filler)); + } else { + classExpressions.add(df.getOWLObjectHasValue(p, df.getOWLNamedIndividual(IRI.create(childLabel)))); + } + } + } + } + return classExpressions; + } + } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -250,12 +250,12 @@ || lit.getDatatype() == XSDDatatype.XSDint || lit.getDatatype() == XSDDatatype.XSDdecimal){ subTree.addLiteral(lit); + } else { + subTree.addLiteral(lit); } + tree.addChild(subTree, st.getPredicate().toString()); } else if(objectFilter.isRelevantResource(object.asResource().getURI())){ - if(object.asResource().isAnon()){ - System.out.println(object); - } if(!tree.getUserObjectPathToRoot().contains(st.getObject().toString())){ subTree = new QueryTreeImpl<String>(st.getObject().toString()); subTree.setResourceNode(true); @@ -263,6 +263,9 @@ if(depth < maxDepth){ fillTree(subTree, resource2Statements, depth); } + if(object.isAnon()){ + subTree.setBlankNode(true); + } } } else if(object.isAnon()){ Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -121,7 +121,10 @@ } QueryTree<N> lgg = new QueryTreeImpl<N>(tree1.getUserObject()); - lgg.setLiteralNode(tree1.isLiteralNode()); + if(tree1.isResourceNode() && tree2.isResourceNode()){ + lgg.setResourceNode(true); + + } // if(!lgg.getUserObject().equals(tree2.getUserObject())){ // lgg.setUserObject((N)"?"); @@ -144,15 +147,19 @@ // } if(!lgg.getUserObject().equals(tree2.getUserObject())){ lgg.setUserObject((N)"?"); + lgg.setLiteralNode(false); + lgg.setResourceNode(false); } if(tree1.isLiteralNode() && tree2.isLiteralNode()){ RDFDatatype d1 = tree1.getDatatype(); RDFDatatype d2 = tree2.getDatatype(); - if(d1 != null && d2 != null && d1 == d2){ +// if(d1 != null && d2 != null && d1 == d2){ + if(d1 == d2){ ((QueryTreeImpl<N>)lgg).addLiterals(((QueryTreeImpl<N>)tree1).getLiterals()); ((QueryTreeImpl<N>)lgg).addLiterals(((QueryTreeImpl<N>)tree2).getLiterals()); } + lgg.setLiteralNode(true); } Set<QueryTreeImpl<N>> addedChildren; Modified: trunk/components-core/src/main/java/org/dllearner/core/EvaluatedAxiom.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/EvaluatedAxiom.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/core/EvaluatedAxiom.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -21,8 +21,8 @@ import java.io.PrintWriter; import java.io.StringWriter; +import java.text.DecimalFormat; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,8 +30,8 @@ import org.apache.commons.codec.digest.DigestUtils; import org.dllearner.core.owl.Axiom; import org.dllearner.utilities.EnrichmentVocabulary; +import org.dllearner.utilities.PrefixCCMap; import org.dllearner.utilities.owl.OWLAPIConverter; -import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAnnotation; import org.semanticweb.owlapi.model.OWLAxiom; @@ -46,6 +46,8 @@ public class EvaluatedAxiom { + private static DecimalFormat df = new DecimalFormat("##0.0"); + private Axiom axiom; private Score score; @@ -113,5 +115,26 @@ return ind2Axioms; } + public static String prettyPrint(List<EvaluatedAxiom> learnedAxioms) { + String str = "suggested axioms and their score in percent:\n"; + if(learnedAxioms.isEmpty()) { + return " no axiom suggested\n"; + } else { + for (EvaluatedAxiom learnedAxiom : learnedAxioms) { + str += " " + prettyPrint(learnedAxiom) + "\n"; + } + } + return str; + } + + public static String prettyPrint(EvaluatedAxiom axiom) { + double acc = axiom.getScore().getAccuracy() * 100; + String accs = df.format(acc); + if(accs.length()==3) { accs = " " + accs; } + if(accs.length()==4) { accs = " " + accs; } + String str = accs + "%\t" + axiom.getAxiom().toManchesterSyntaxString(null, PrefixCCMap.getInstance()); + return str; + } + } Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -720,8 +720,11 @@ // convert data back to DL-Learner structures SortedSet<Individual> is = new TreeSet<Individual>(); - for (OWLNamedIndividual oi : inds) - is.add(new Individual(oi.toStringID())); + for (OWLNamedIndividual oi : inds){ + if(oi != null){ + is.add(new Individual(oi.toStringID())); + } + } map.put(i, is); } return map; Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -84,7 +84,7 @@ import com.hp.hpl.jena.vocabulary.RDFS; @ComponentAnn(name = "SPARQL Reasoner", shortName = "spr", version = 0.1) -public class SPARQLReasoner implements SchemaReasoner, IndividualReasoner{ +public class SPARQLReasoner implements SchemaReasoner, IndividualReasoner { private static final Logger logger = LoggerFactory.getLogger(SPARQLReasoner.class); @@ -450,7 +450,7 @@ } public Set<NamedClass> getTypes() { - Set<NamedClass> types = new HashSet<NamedClass>(); + Set<NamedClass> types = new TreeSet<NamedClass>(); String query = String.format("SELECT DISTINCT ?class WHERE {[] a ?class.}"); ResultSet rs = executeSelectQuery(query); QuerySolution qs; @@ -519,7 +519,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>}", ((NamedClass)description).getName()); + String query = String.format("SELECT DISTINCT ?ind WHERE {?ind a <%s>}", ((NamedClass)description).getName()); if(limit != 0) { query += " LIMIT " + limit; } Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java 2013-04-25 08:12:24 UTC (rev 3928) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java 2013-04-30 11:05:12 UTC (rev 3929) @@ -51,6 +51,8 @@ import org.semanticweb.owlapi.model.OWLNamedIndividual; import org.semanticweb.owlapi.model.OWLObjectProperty; +import eu.trowl.vocab.RDF; + /** * A collection of methods for exchanging objects between OWL API and * DL-Learner. @@ -191,7 +193,9 @@ return OWL2Datatype.DATE.getDatatype(); else if(iri.equals(OWL2Datatype.DATETIME.getIRI())) return OWL2Datatype.DATETIME.getDatatype(); - throw new Error("Unsupported datatype " + dataType + ". Please inform a DL-Learner developer to add it."); + else + return new Datatype(dataType.getIRI().toString()); +// throw new Error("Unsupported datatype " + dataType + ". Please inform a DL-Learner developer to add it."); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-25 08:12:31
|
Revision: 3928 http://sourceforge.net/p/dl-learner/code/3928 Author: lorenz_b Date: 2013-04-25 08:12:24 +0000 (Thu, 25 Apr 2013) Log Message: ----------- Improved script. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-24 12:41:48 UTC (rev 3927) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-25 08:12:24 UTC (rev 3928) @@ -146,10 +146,10 @@ statement.execute("CREATE TABLE IF NOT EXISTS Pattern (" + "id MEDIUMINT NOT NULL AUTO_INCREMENT," - + "pattern VARCHAR(20000) NOT NULL," - + "pattern_pretty VARCHAR(20000) NOT NULL," + + "pattern TEXT NOT NULL," + + "pattern_pretty TEXT NOT NULL," + "PRIMARY KEY(id)," - + "INDEX(pattern)) DEFAULT CHARSET=utf8"); + + "INDEX(pattern(8000))) DEFAULT CHARSET=utf8"); statement.execute("CREATE TABLE IF NOT EXISTS Ontology (" + "id MEDIUMINT NOT NULL AUTO_INCREMENT," @@ -294,7 +294,7 @@ for (OntologyRepositoryEntry entry : entries) { URI uri = entry.getPhysicalURI(); if (!ontologyProcessed(uri)) { - System.out.println("Loading " + uri); + System.out.println("Loading \"" + entry.getOntologyShortName() + "\" from "+ uri); try { OWLOntology ontology = manager.loadOntology(IRI.create(uri)); Multiset<OWLAxiom> axiomPatterns = HashMultiset.create(); @@ -311,6 +311,7 @@ } catch (OWLOntologyAlreadyExistsException e) { e.printStackTrace(); } catch (Exception e){ + e.printStackTrace(); addOntologyError(uri, e); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-24 12:41:52
|
Revision: 3927 http://sourceforge.net/p/dl-learner/code/3927 Author: lorenz_b Date: 2013-04-24 12:41:48 +0000 (Wed, 24 Apr 2013) Log Message: ----------- Updated Surefire plugin. Modified Paths: -------------- trunk/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-04-24 12:12:51 UTC (rev 3926) +++ trunk/pom.xml 2013-04-24 12:41:48 UTC (rev 3927) @@ -53,7 +53,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> - <version>2.4.3</version> + <version>2.14.1</version> </plugin> <!--Maven Compiler Plugin --> <plugin> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-24 12:12:55
|
Revision: 3926 http://sourceforge.net/p/dl-learner/code/3926 Author: lorenz_b Date: 2013-04-24 12:12:51 +0000 (Wed, 24 Apr 2013) Log Message: ----------- Modified pattern analyzing class. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-21 11:20:26 UTC (rev 3925) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-24 12:12:51 UTC (rev 3926) @@ -11,19 +11,20 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.LinkedList; +import java.util.List; import java.util.Queue; import java.util.prefs.Preferences; -import org.coode.owlapi.functionalrenderer.OWLFunctionalSyntaxRenderer; import org.dllearner.kb.dataset.OWLOntologyDataset; import org.dllearner.kb.repository.OntologyRepository; import org.dllearner.kb.repository.OntologyRepositoryEntry; import org.ini4j.IniPreferences; import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.AbstractOWLRenderer; import org.semanticweb.owlapi.io.OWLObjectRenderer; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; @@ -31,16 +32,12 @@ import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; import org.semanticweb.owlapi.model.OWLLogicalAxiom; import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException; import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyID; import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; -import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; @@ -78,6 +75,8 @@ private PreparedStatement insertOntologyPatternPs; private OWLObjectRenderer axiomRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + + private boolean randomOrder = true; public OWLAxiomPatternFinder(OWLOntologyDataset dataset) { @@ -147,8 +146,8 @@ statement.execute("CREATE TABLE IF NOT EXISTS Pattern (" + "id MEDIUMINT NOT NULL AUTO_INCREMENT," - + "pattern VARCHAR(2000) NOT NULL," - + "pattern_pretty VARCHAR(2000) NOT NULL," + + "pattern VARCHAR(20000) NOT NULL," + + "pattern_pretty VARCHAR(20000) NOT NULL," + "PRIMARY KEY(id)," + "INDEX(pattern)) DEFAULT CHARSET=utf8"); @@ -164,8 +163,8 @@ + "ontology_id MEDIUMINT NOT NULL," + "pattern_id MEDIUMINT NOT NULL," + "occurrences INTEGER(8) NOT NULL," - + "FOREIGN KEY (ontology_id) REFERENCES Ontology(id)," - + "FOREIGN KEY (pattern_id) REFERENCES Pattern(id)," + + "FOREIGN KEY (ontology_id) REFERENCES Ontology(id) ON DELETE CASCADE," + + "FOREIGN KEY (pattern_id) REFERENCES Pattern(id) ON DELETE CASCADE," + "PRIMARY KEY(ontology_id, pattern_id)) DEFAULT CHARSET=utf8"); } catch (SQLException e) { e.printStackTrace(); @@ -191,6 +190,7 @@ insertPatternIdPs.setString(2, axiomRenderer.render(axiom)); insertPatternIdPs.execute(); } catch (SQLException e) { + System.out.println(axiomString.length()); e.printStackTrace(); } //get the auto generated ID @@ -218,6 +218,19 @@ return false; } + private void addOntologyError(URI physicalURI, Exception ex){ + String url = physicalURI.toString(); + //add ontology loading/parsing/... error entry + try { + insertOntologyPs.setString(1, url); + insertOntologyPs.setString(2, "ERROR:" + ex.getClass().getSimpleName() + "->" + ex.getMessage()); + insertOntologyPs.setString(3, repository.getName()); + insertOntologyPs.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + private int addOntology(URI physicalURI, OWLOntology ontology){ String url = physicalURI.toString(); String ontologyIRI = ontology.getOntologyID().getOntologyIRI().toString(); @@ -264,7 +277,7 @@ insertOntologyPatternPs.setInt(3, occurrences); insertOntologyPatternPs.execute(); } catch (SQLException e) { - e.printStackTrace(); + System.err.println("Adding pattern\n" + pattern + "\nfailed." + e.getMessage()); } } } @@ -272,6 +285,11 @@ public void start() { OWLAxiomRenamer renamer = new OWLAxiomRenamer(dataFactory); Collection<OntologyRepositoryEntry> entries = repository.getEntries(); + if(randomOrder){ + List<OntologyRepositoryEntry> entryList = new ArrayList<OntologyRepositoryEntry>(repository.getEntries()); + Collections.shuffle(entryList); + entries = entryList; + } Multiset<OWLAxiom> allAxiomPatterns = HashMultiset.create(); for (OntologyRepositoryEntry entry : entries) { URI uri = entry.getPhysicalURI(); @@ -290,8 +308,10 @@ // System.out.println(owlAxiom + ": " + allAxiomPatterns.count(owlAxiom)); } manager.removeOntology(ontology); - } catch (OWLOntologyCreationException e) { + } catch (OWLOntologyAlreadyExistsException e) { e.printStackTrace(); + } catch (Exception e){ + addOntologyError(uri, e); } } Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-21 11:20:26 UTC (rev 3925) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-24 12:12:51 UTC (rev 3926) @@ -90,7 +90,7 @@ } public Query asQuery(String rootVariable, OWLClassExpression expr){ - String queryString = "SELECT " + rootVariable + " WHERE {"; + String queryString = "SELECT DISTINCT " + rootVariable + " WHERE {"; queryString += convert(rootVariable, expr); queryString += "}"; return QueryFactory.create(queryString, Syntax.syntaxARQ); @@ -149,7 +149,7 @@ private String triple(String subject, String predicate, OWLLiteral object){ return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + - "\"" + object + "\"^^<" + object.getDatatype().toStringID() + ">.\n"; + render(object) + ".\n"; } private String triple(String subject, String predicate, OWLIndividual object){ @@ -157,6 +157,10 @@ (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + "<" + object.toStringID() + ">.\n"; } + + private String render(OWLLiteral literal){ + return "\"" + literal + "\"^^<" + literal.getDatatype().toStringID() + ">"; + } @Override public void visit(OWLObjectProperty property) { @@ -480,6 +484,20 @@ @Override public void visit(OWLDataOneOf node) { + String subject = variables.peek(); + if(modalDepth() == 1){ + sparql += triple(subject, "?p", "?o"); + } + sparql += "FILTER(" + subject + " IN ("; + String values = ""; + for (OWLLiteral value : node.getValues()) { + if(!values.isEmpty()){ + values += ","; + } + values += render(value); + } + sparql += values; + sparql += "))"; } @Override @@ -620,6 +638,10 @@ query = converter.asQuery(rootVar, expr).toString(); System.out.println(expr + "\n" + query); + expr = df.getOWLDataAllValuesFrom(dpT,df.getOWLDataOneOf(lit)); + query = converter.asQuery(rootVar, expr).toString(); + System.out.println(expr + "\n" + query); + } Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java 2013-04-21 11:20:26 UTC (rev 3925) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java 2013-04-24 12:12:51 UTC (rev 3926) @@ -1,6 +1,7 @@ package org.dllearner.algorithms.pattern; import org.dllearner.kb.repository.OntologyRepository; +import org.dllearner.kb.repository.bioportal.BioPortalRepository; import org.dllearner.kb.repository.tones.TONESRepository; import org.junit.Before; import org.junit.Test; @@ -23,5 +24,13 @@ OWLAxiomPatternFinder patternFinder = new OWLAxiomPatternFinder(repository); patternFinder.start(); } + + @Test + public void testBioPortalRepository(){ + OntologyRepository repository = new BioPortalRepository(); + repository.initialize(); + OWLAxiomPatternFinder patternFinder = new OWLAxiomPatternFinder(repository); + patternFinder.start(); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-21 11:20:29
|
Revision: 3925 http://sourceforge.net/p/dl-learner/code/3925 Author: lorenz_b Date: 2013-04-21 11:20:26 +0000 (Sun, 21 Apr 2013) Log Message: ----------- Continued OWL class expression to SPARQL converter. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.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-04-19 14:04:20 UTC (rev 3924) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-04-21 11:20:26 UTC (rev 3925) @@ -523,7 +523,6 @@ if(limit != 0) { query += " LIMIT " + limit; } - System.out.println(query); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-19 14:04:20 UTC (rev 3924) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-21 11:20:26 UTC (rev 3925) @@ -1,5 +1,6 @@ package org.dllearner.utilities.owl; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Stack; @@ -69,6 +70,8 @@ private OWLDataFactory df = new OWLDataFactoryImpl(); + private Map<Integer, Boolean> intersection; + public OWLClassExpressionToSPARQLConverter() { } @@ -89,7 +92,7 @@ public Query asQuery(String rootVariable, OWLClassExpression expr){ String queryString = "SELECT " + rootVariable + " WHERE {"; queryString += convert(rootVariable, expr); - queryString += "}";System.out.println(queryString); + queryString += "}"; return QueryFactory.create(queryString, Syntax.syntaxARQ); } @@ -99,6 +102,7 @@ propCnt = 0; indCnt = 0; sparql = ""; + intersection = new HashMap<Integer, Boolean>(); } private String getVariable(OWLEntity entity){ @@ -124,6 +128,18 @@ return variables.size(); } + private boolean inIntersection(){ + return intersection.containsKey(modalDepth()) ? intersection.get(modalDepth()) : false; + } + + private void enterIntersection(){ + intersection.put(modalDepth(), true); + } + + private void leaveIntersection(){ + intersection.remove(modalDepth()); + } + private String triple(String subject, String predicate, String object){ return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + @@ -161,10 +177,12 @@ @Override public void visit(OWLObjectIntersectionOf ce) { + enterIntersection(); List<OWLClassExpression> operands = ce.getOperandsAsList(); for (OWLClassExpression operand : operands) { operand.accept(this); } + leaveIntersection(); } @Override @@ -183,6 +201,13 @@ @Override public void visit(OWLObjectComplementOf ce) { + String subject = variables.peek(); + if(!inIntersection() && modalDepth() == 1){ + sparql += triple(subject, "?p", "?o"); + } + sparql += "FILTER NOT EXISTS {"; + ce.getOperand().accept(this); + sparql += "}"; } @Override @@ -197,17 +222,9 @@ } OWLClassExpression filler = ce.getFiller(); if(filler.isAnonymous()){ - if(filler instanceof OWLObjectOneOf){ - variables.push(objectVariable); - filler.accept(this); - variables.pop(); - } else { - String var = buildIndividualVariable(); - variables.push(var); - sparql += triple(objectVariable, "a", var); - filler.accept(this); - variables.pop(); - } + variables.push(objectVariable); + filler.accept(this); + variables.pop(); } else { sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); } @@ -378,6 +395,27 @@ @Override public void visit(OWLDataAllValuesFrom ce) { + String subject = variables.peek(); + String objectVariable = buildIndividualVariable(); + OWLDataPropertyExpression propertyExpression = ce.getProperty(); + String predicate = propertyExpression.asOWLDataProperty().toStringID(); + OWLDataRange filler = ce.getFiller(); + sparql += triple(variables.peek(), predicate, objectVariable); + + String var = buildIndividualVariable(); + sparql += "{SELECT " + subject + " (COUNT(" + var + ") AS ?cnt1) WHERE {"; + sparql += triple(subject, predicate, var); + variables.push(var); + filler.accept(this); + variables.pop(); + sparql += "} GROUP BY " + subject + "}"; + + var = buildIndividualVariable(); + sparql += "{SELECT " + subject + " (COUNT(" + var + ") AS ?cnt2) WHERE {"; + sparql += triple(subject, predicate, var); + sparql += "} GROUP BY " + subject + "}"; + + sparql += "FILTER(?cnt1=?cnt2)"; } @Override @@ -561,6 +599,27 @@ query = converter.asQuery(rootVar, expr).toString(); System.out.println(expr + "\n" + query); + expr = df.getOWLObjectComplementOf(clsB); + query = converter.asQuery(rootVar, expr).toString(); + System.out.println(expr + "\n" + query); + + expr = df.getOWLObjectIntersectionOf( + clsA, + df.getOWLObjectComplementOf(clsB)); + query = converter.asQuery(rootVar, expr).toString(); + System.out.println(expr + "\n" + query); + + expr = df.getOWLObjectSomeValuesFrom(propR, + df.getOWLObjectIntersectionOf( + clsA, + df.getOWLObjectComplementOf(clsB))); + query = converter.asQuery(rootVar, expr).toString(); + System.out.println(expr + "\n" + query); + + expr = df.getOWLDataAllValuesFrom(dpT, booleanRange); + query = converter.asQuery(rootVar, expr).toString(); + System.out.println(expr + "\n" + query); + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-19 14:04:25
|
Revision: 3924 http://sourceforge.net/p/dl-learner/code/3924 Author: lorenz_b Date: 2013-04-19 14:04:20 +0000 (Fri, 19 Apr 2013) Log Message: ----------- Added class expression to SPARQL rewriter. Modified Paths: -------------- trunk/components-core/pom.xml trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionOrderingComparator.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLLiteralRenamer.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLObjectComparator.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java trunk/components-core/src/main/resources/db_settings.ini.dist Modified: trunk/components-core/pom.xml =================================================================== --- trunk/components-core/pom.xml 2013-04-15 20:53:29 UTC (rev 3923) +++ trunk/components-core/pom.xml 2013-04-19 14:04:20 UTC (rev 3924) @@ -112,13 +112,32 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.ini4j</groupId> + <artifactId>ini4j</artifactId> + </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> - <version>3.4.4</version> + <version>3.4</version> </dependency> <dependency> + <groupId>net.sourceforge.owlapi</groupId> + <artifactId>owlapi-dlsyntax</artifactId> + <version>3.3</version> + </dependency> + <dependency> + <groupId>net.sourceforge.owlapi</groupId> + <artifactId>owlapi-functional</artifactId> + <version>3.3</version> + </dependency> + + <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-reasoner</artifactId> </dependency> Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-15 20:53:29 UTC (rev 3923) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -1,22 +1,46 @@ package org.dllearner.algorithms.pattern; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; import java.net.URI; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.util.Collection; import java.util.LinkedList; import java.util.Queue; +import java.util.prefs.Preferences; +import org.coode.owlapi.functionalrenderer.OWLFunctionalSyntaxRenderer; import org.dllearner.kb.dataset.OWLOntologyDataset; import org.dllearner.kb.repository.OntologyRepository; import org.dllearner.kb.repository.OntologyRepositoryEntry; +import org.ini4j.IniPreferences; +import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.AbstractOWLRenderer; +import org.semanticweb.owlapi.io.OWLObjectRenderer; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; import org.semanticweb.owlapi.model.OWLLogicalAxiom; import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyID; import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.reasoner.OWLReasoner; +import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; + +import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; @@ -45,6 +69,15 @@ private OntologyRepository repository; private OWLOntologyManager manager; private OWLDataFactory dataFactory; + + private Connection conn; + private PreparedStatement selectOntologyIdPs; + private PreparedStatement insertOntologyPs; + private PreparedStatement selectPatternIdPs; + private PreparedStatement insertPatternIdPs; + private PreparedStatement insertOntologyPatternPs; + + private OWLObjectRenderer axiomRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); public OWLAxiomPatternFinder(OWLOntologyDataset dataset) { @@ -54,33 +87,228 @@ this.repository = repository; manager = OWLManager.createOWLOntologyManager(); dataFactory = manager.getOWLDataFactory(); + + initDBConnection(); + createTables(); + try { + selectOntologyIdPs = conn.prepareStatement("SELECT id FROM Ontology WHERE url=?"); + insertOntologyPs = conn.prepareStatement("INSERT INTO Ontology (url, iri, repository) VALUES(?,?,?)"); + selectPatternIdPs = conn.prepareStatement("SELECT id FROM Pattern WHERE pattern=?"); + insertPatternIdPs = conn.prepareStatement("INSERT INTO Pattern (pattern,pattern_pretty) VALUES(?,?)"); + insertOntologyPatternPs = conn.prepareStatement("INSERT INTO Ontology_Pattern (ontology_id, pattern_id, occurrences) VALUES(?,?,?)"); + } catch (SQLException e) { + e.printStackTrace(); + } } - public void start(){ + private String render(OWLAxiom axiom){ + try { + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLOntology ontology = man.createOntology(); + man.addAxiom(ontology, axiom); + StringWriter sw = new StringWriter(); + org.coode.owlapi.functionalrenderer.OWLObjectRenderer r = new org.coode.owlapi.functionalrenderer.OWLObjectRenderer(man, ontology, sw); + axiom.accept(r); + return sw.toString(); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + return null; + } + + private void initDBConnection() { + try { + InputStream is = this.getClass().getClassLoader().getResourceAsStream("db_settings.ini"); + Preferences prefs = new IniPreferences(is); + String dbServer = prefs.node("database").get("server", null); + String dbName = prefs.node("database").get("name", null); + String dbUser = prefs.node("database").get("user", null); + String dbPass = prefs.node("database").get("pass", null); + + Class.forName("com.mysql.jdbc.Driver"); + String url = "jdbc:mysql://" + dbServer + "/" + dbName; + conn = DriverManager.getConnection(url, dbUser, dbPass); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InvalidFileFormatException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void createTables(){ + try { + Statement statement = conn.createStatement(); + + statement.execute("CREATE TABLE IF NOT EXISTS Pattern (" + + "id MEDIUMINT NOT NULL AUTO_INCREMENT," + + "pattern VARCHAR(2000) NOT NULL," + + "pattern_pretty VARCHAR(2000) NOT NULL," + + "PRIMARY KEY(id)," + + "INDEX(pattern)) DEFAULT CHARSET=utf8"); + + statement.execute("CREATE TABLE IF NOT EXISTS Ontology (" + + "id MEDIUMINT NOT NULL AUTO_INCREMENT," + + "url VARCHAR(2000) NOT NULL," + + "iri VARCHAR(2000) NOT NULL," + + "repository VARCHAR(200) NOT NULL," + + "PRIMARY KEY(id)," + + "INDEX(url)) DEFAULT CHARSET=utf8"); + + statement.execute("CREATE TABLE IF NOT EXISTS Ontology_Pattern (" + + "ontology_id MEDIUMINT NOT NULL," + + "pattern_id MEDIUMINT NOT NULL," + + "occurrences INTEGER(8) NOT NULL," + + "FOREIGN KEY (ontology_id) REFERENCES Ontology(id)," + + "FOREIGN KEY (pattern_id) REFERENCES Pattern(id)," + + "PRIMARY KEY(ontology_id, pattern_id)) DEFAULT CHARSET=utf8"); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + + private int addPattern(OWLAxiom axiom){ + String axiomString = render(axiom); + //check for existing entry + try { + selectPatternIdPs.setString(1, axiomString); + ResultSet rs = selectPatternIdPs.executeQuery(); + if(rs.next()){ + return rs.getInt(1); + } + } catch (SQLException e) { + e.printStackTrace(); + } + //add pattern entry + try { + insertPatternIdPs.setString(1, axiomString); + insertPatternIdPs.setString(2, axiomRenderer.render(axiom)); + insertPatternIdPs.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + //get the auto generated ID + try { + selectPatternIdPs.setString(1, axiomString); + ResultSet rs = selectPatternIdPs.executeQuery(); + if(rs.next()){ + return rs.getInt(1); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return -1; + } + + private boolean ontologyProcessed(URI uri){ + //check if ontology was already processed + try { + selectOntologyIdPs.setString(1, uri.toString()); + ResultSet rs = selectOntologyIdPs.executeQuery(); + return rs.next(); + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + private int addOntology(URI physicalURI, OWLOntology ontology){ + String url = physicalURI.toString(); + String ontologyIRI = ontology.getOntologyID().getOntologyIRI().toString(); + //check for existing entry + try { + selectOntologyIdPs.setString(1, url); + ResultSet rs = selectOntologyIdPs.executeQuery(); + if(rs.next()){ + return rs.getInt(1); + } + } catch (SQLException e) { + e.printStackTrace(); + } + //add ontology entry + try { + insertOntologyPs.setString(1, url); + insertOntologyPs.setString(2, ontologyIRI); + insertOntologyPs.setString(3, repository.getName()); + insertOntologyPs.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + //get the auto generated ID + try { + selectOntologyIdPs.setString(1, url); + ResultSet rs = selectOntologyIdPs.executeQuery(); + if(rs.next()){ + return rs.getInt(1); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return -1; + } + + private void addOntologyPatterns(URI physicalURI, OWLOntology ontology, Multiset<OWLAxiom> patterns){ + int ontologyId = addOntology(physicalURI, ontology); + for (OWLAxiom pattern : patterns.elementSet()) { + try { + int patternId = addPattern(pattern); + int occurrences = patterns.count(pattern); + insertOntologyPatternPs.setInt(1, ontologyId); + insertOntologyPatternPs.setInt(2, patternId); + insertOntologyPatternPs.setInt(3, occurrences); + insertOntologyPatternPs.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + public void start() { OWLAxiomRenamer renamer = new OWLAxiomRenamer(dataFactory); Collection<OntologyRepositoryEntry> entries = repository.getEntries(); - Multiset<OWLAxiom> multiset = HashMultiset.create(); + Multiset<OWLAxiom> allAxiomPatterns = HashMultiset.create(); for (OntologyRepositoryEntry entry : entries) { - try { - URI uri = entry.getPhysicalURI(); - OWLOntology ontology = manager.loadOntology(IRI.create(uri)); - for(OWLLogicalAxiom axiom : ontology.getLogicalAxioms()){ - OWLAxiom renamedAxiom = renamer.rename(axiom); - multiset.add(renamedAxiom); + URI uri = entry.getPhysicalURI(); + if (!ontologyProcessed(uri)) { + System.out.println("Loading " + uri); + try { + OWLOntology ontology = manager.loadOntology(IRI.create(uri)); + Multiset<OWLAxiom> axiomPatterns = HashMultiset.create(); + for (OWLLogicalAxiom axiom : ontology.getLogicalAxioms()) { + OWLAxiom renamedAxiom = renamer.rename(axiom); + axiomPatterns.add(renamedAxiom); + } + allAxiomPatterns.addAll(axiomPatterns); + addOntologyPatterns(uri, ontology, axiomPatterns); + for (OWLAxiom owlAxiom : Multisets.copyHighestCountFirst(allAxiomPatterns).elementSet()) { +// System.out.println(owlAxiom + ": " + allAxiomPatterns.count(owlAxiom)); + } + manager.removeOntology(ontology); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); } - } catch (OWLOntologyCreationException e) { - e.printStackTrace(); } - for (OWLAxiom owlAxiom : Multisets.copyHighestCountFirst(multiset).elementSet()) { - System.out.println(owlAxiom + ": " + multiset.count(owlAxiom)); - } + } - for (OWLAxiom owlAxiom : Multisets.copyHighestCountFirst(multiset).elementSet()) { - System.out.println(owlAxiom + ": " + multiset.count(owlAxiom)); - } } public static void main(String[] args) throws Exception { + String ontologyURL = "ontologyURL"; + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLDataFactory dataFactory = man.getOWLDataFactory(); + OWLFunctionalDataPropertyAxiom axiom = dataFactory.getOWLFunctionalDataPropertyAxiom(dataFactory.getOWLDataProperty(IRI.create("http://ex.org/p"))); + OWLOntology ontology = man.createOntology(); + man.addAxiom(ontology, axiom); + StringWriter sw = new StringWriter(); + org.coode.owlapi.functionalrenderer.OWLObjectRenderer r = new org.coode.owlapi.functionalrenderer.OWLObjectRenderer(man, ontology, sw); + axiom.accept(r); + System.out.println(sw.toString()); } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-04-15 20:53:29 UTC (rev 3923) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -2,8 +2,10 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeSet; import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; @@ -12,6 +14,7 @@ import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLAxiomVisitor; +import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; import org.semanticweb.owlapi.model.OWLClassExpression; import org.semanticweb.owlapi.model.OWLDataFactory; @@ -108,14 +111,26 @@ @Override public void visit(OWLAsymmetricObjectPropertyAxiom axiom) { + OWLObjectPropertyExpression property = axiom.getProperty(); + property = expressionRenamer.rename(property); + renamedAxiom = df.getOWLAsymmetricObjectPropertyAxiom(property); } @Override public void visit(OWLReflexiveObjectPropertyAxiom axiom) { + OWLObjectPropertyExpression property = axiom.getProperty(); + property = expressionRenamer.rename(property); + renamedAxiom = df.getOWLReflexiveObjectPropertyAxiom(property); } @Override public void visit(OWLDisjointClassesAxiom axiom) { + Set<OWLClassExpression> classExpressions = axiom.getClassExpressions(); + Set<OWLClassExpression> renamedClassExpressions = new HashSet<OWLClassExpression>(); + for (OWLClassExpression classExpression : classExpressions) { + renamedClassExpressions.add(expressionRenamer.rename(classExpression)); + } + renamedAxiom = df.getOWLDisjointClassesAxiom(renamedClassExpressions); } @Override @@ -138,22 +153,46 @@ @Override public void visit(OWLEquivalentObjectPropertiesAxiom axiom) { + Set<OWLObjectPropertyExpression> properties = axiom.getProperties(); + Set<OWLObjectPropertyExpression> renamedProperties = new HashSet<OWLObjectPropertyExpression>(); + for (OWLObjectPropertyExpression property : properties) { + renamedProperties.add(expressionRenamer.rename(property)); + } + renamedAxiom = df.getOWLEquivalentObjectPropertiesAxiom(renamedProperties); } @Override public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) { +// axiom. } @Override public void visit(OWLDifferentIndividualsAxiom axiom) { + Set<OWLIndividual> renamedIndividuals = new HashSet<OWLIndividual>(); + for(OWLIndividual ind : axiom.getIndividuals()){ + renamedIndividuals.add(expressionRenamer.rename(ind)); + } + renamedAxiom = df.getOWLDifferentIndividualsAxiom(renamedIndividuals); } @Override public void visit(OWLDisjointDataPropertiesAxiom axiom) { + Set<OWLDataPropertyExpression> properties = axiom.getProperties(); + Set<OWLDataPropertyExpression> renamedProperties = new HashSet<OWLDataPropertyExpression>(); + for (OWLDataPropertyExpression property : properties) { + renamedProperties.add(expressionRenamer.rename(property)); + } + renamedAxiom = df.getOWLDisjointDataPropertiesAxiom(renamedProperties); } @Override public void visit(OWLDisjointObjectPropertiesAxiom axiom) { + Set<OWLObjectPropertyExpression> properties = axiom.getProperties(); + Set<OWLObjectPropertyExpression> renamedProperties = new HashSet<OWLObjectPropertyExpression>(); + for (OWLObjectPropertyExpression property : properties) { + renamedProperties.add(expressionRenamer.rename(property)); + } + renamedAxiom = df.getOWLDisjointObjectPropertiesAxiom(renamedProperties); } @Override @@ -194,6 +233,14 @@ @Override public void visit(OWLDisjointUnionAxiom axiom) { + OWLClass cls = axiom.getOWLClass(); + cls = expressionRenamer.rename(cls).asOWLClass(); + Set<OWLClassExpression> classExpressions = axiom.getClassExpressions(); + Set<OWLClassExpression> renamedClassExpressions = new HashSet<OWLClassExpression>(); + for (OWLClassExpression classExpression : classExpressions) { + renamedClassExpressions.add(expressionRenamer.rename(classExpression)); + } + renamedAxiom = df.getOWLDisjointUnionAxiom(cls, renamedClassExpressions); } @Override @@ -221,6 +268,12 @@ @Override public void visit(OWLEquivalentDataPropertiesAxiom axiom) { + Set<OWLDataPropertyExpression> properties = axiom.getProperties(); + Set<OWLDataPropertyExpression> renamedProperties = new HashSet<OWLDataPropertyExpression>(); + for (OWLDataPropertyExpression property : properties) { + renamedProperties.add(expressionRenamer.rename(property)); + } + renamedAxiom = df.getOWLEquivalentDataPropertiesAxiom(renamedProperties); } @Override @@ -278,10 +331,18 @@ @Override public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) { + OWLObjectPropertyExpression property = axiom.getProperty(); + property = expressionRenamer.rename(property); + renamedAxiom = df.getOWLInverseFunctionalObjectPropertyAxiom(property); } @Override public void visit(OWLSameIndividualAxiom axiom) { + Set<OWLIndividual> renamedIndividuals = new HashSet<OWLIndividual>(); + for(OWLIndividual ind : axiom.getIndividuals()){ + renamedIndividuals.add(expressionRenamer.rename(ind)); + } + renamedAxiom = df.getOWLSameIndividualAxiom(renamedIndividuals); } @Override @@ -290,6 +351,11 @@ @Override public void visit(OWLInverseObjectPropertiesAxiom axiom) { + OWLObjectPropertyExpression firstProperty = axiom.getFirstProperty(); + firstProperty = expressionRenamer.rename(firstProperty); + OWLObjectPropertyExpression secondProperty = axiom.getSecondProperty(); + secondProperty = expressionRenamer.rename(secondProperty); + renamedAxiom = df.getOWLInverseObjectPropertiesAxiom(firstProperty, secondProperty); } @Override Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionOrderingComparator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionOrderingComparator.java 2013-04-15 20:53:29 UTC (rev 3923) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionOrderingComparator.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -5,6 +5,7 @@ import java.util.List; import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.util.OWLObjectTypeIndexProvider; import uk.ac.manchester.cs.owl.owlapi.OWLClassExpressionImpl; import uk.ac.manchester.cs.owl.owlapi.OWLClassImpl; @@ -32,6 +33,8 @@ OWLObjectMaxCardinalityImpl.class, OWLObjectExactCardinalityImpl.class ); + + private final OWLObjectTypeIndexProvider indexProvider = new OWLObjectTypeIndexProvider(); @Override public int compare(OWLClassExpression o1, OWLClassExpression o2) { Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java 2013-04-15 20:53:29 UTC (rev 3923) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -1,10 +1,6 @@ package org.dllearner.algorithms.pattern; -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.Arrays; +import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -58,23 +54,46 @@ import org.semanticweb.owlapi.model.OWLObjectUnionOf; import org.semanticweb.owlapi.model.OWLPropertyExpression; import org.semanticweb.owlapi.model.OWLPropertyExpressionVisitor; -import org.semanticweb.owlapi.util.OWLClassExpressionVisitorAdapter; public class OWLClassExpressionRenamer implements OWLClassExpressionVisitor, OWLPropertyExpressionVisitor, OWLIndividualVisitor, OWLDataRangeVisitor { private static final String NS = "http://dl-learner.org/pattern/"; - private Queue<String> classVarQueue = new LinkedList<String>(Arrays.asList("A", "B", "C" , "D", "E", "F", "G")); - private Queue<String> propertyVarQueue = new LinkedList<String>(Arrays.asList("p", "q", "r" , "s", "t")); - private Queue<String> individualVarQueue = new LinkedList<String>(Arrays.asList("a", "b", "c" , "d", "e", "f", "g")); private OWLDataFactory df; private Map<OWLEntity, OWLEntity> renaming; private OWLObject renamedOWLObject; - private OWLClassExpressionOrderingComparator comparator = new OWLClassExpressionOrderingComparator(); +// private OWLClassExpressionOrderingComparator comparator = new OWLClassExpressionOrderingComparator(); + private OWLObjectComparator comparator = new OWLObjectComparator(); + private Queue<String> classVarQueue = new LinkedList<String>(); + private Queue<String> propertyVarQueue = new LinkedList<String>(); + private Queue<String> individualVarQueue = new LinkedList<String>(); + private OWLLiteralRenamer literalRenamer; + + private boolean normalizeCardinalities = true; + private boolean normalizeHasValue = true; + private boolean normalizeOneOf = true; + public OWLClassExpressionRenamer(OWLDataFactory df, Map<OWLEntity, OWLEntity> renaming) { this.df = df; this.renaming = renaming; + + literalRenamer = new OWLLiteralRenamer(df); + + for(int i = 65; i <= 90; i++){ + classVarQueue.add(String.valueOf((char)i)); + } + for(int j = 2; j <=5; j++){ + for(int i = 65; i <= 90; i++){ + classVarQueue.add(String.valueOf((char)i) + "_" + j); + } + } + for(int i = 97; i <= 111; i++){ + individualVarQueue.add(String.valueOf((char)i)); + } + for(int i = 112; i <= 122; i++){ + propertyVarQueue.add(String.valueOf((char)i)); + } } public OWLClassExpression rename(OWLClassExpression expr){ @@ -103,7 +122,7 @@ public OWLLiteral rename(OWLLiteral lit){ renamedOWLObject = null; - renamedOWLObject = lit; + renamedOWLObject = literalRenamer.rename(lit); return (OWLLiteral) renamedOWLObject; } @@ -134,6 +153,7 @@ OWLDataPropertyExpression property = desc.getProperty(); property = rename(property); OWLLiteral value = desc.getValue(); + value = rename(value); renamedOWLObject = df.getOWLDataHasValue(property, value); } @@ -178,6 +198,9 @@ OWLClassExpression filler = desc.getFiller(); filler = rename(filler); int cardinality = desc.getCardinality(); + if(normalizeCardinalities){ + cardinality = 1; + } renamedOWLObject = df.getOWLObjectMinCardinality(cardinality, property, filler); } @@ -188,6 +211,9 @@ OWLClassExpression filler = desc.getFiller(); filler = rename(filler); int cardinality = desc.getCardinality(); + if(normalizeCardinalities){ + cardinality = 1; + } renamedOWLObject = df.getOWLObjectExactCardinality(cardinality, property, filler); } @@ -198,6 +224,9 @@ OWLClassExpression filler = desc.getFiller(); filler = rename(filler); int cardinality = desc.getCardinality(); + if(normalizeCardinalities){ + cardinality = 1; + } renamedOWLObject = df.getOWLObjectMaxCardinality(cardinality, property, filler); } @@ -243,6 +272,9 @@ OWLDataRange filler = desc.getFiller(); filler = rename(filler); int cardinality = desc.getCardinality(); + if(normalizeCardinalities){ + cardinality = 1; + } renamedOWLObject = df.getOWLDataMinCardinality(cardinality, property, filler); } @@ -253,6 +285,9 @@ OWLDataRange filler = desc.getFiller(); filler = rename(filler); int cardinality = desc.getCardinality(); + if(normalizeCardinalities){ + cardinality = 1; + } renamedOWLObject = df.getOWLDataExactCardinality(cardinality, property, filler); } @@ -263,6 +298,9 @@ OWLDataRange filler = desc.getFiller(); filler = rename(filler); int cardinality = desc.getCardinality(); + if(normalizeCardinalities){ + cardinality = 1; + } renamedOWLObject = df.getOWLDataMaxCardinality(cardinality, property, filler); } @@ -355,19 +393,37 @@ } @Override - public void visit(OWLDataComplementOf arg0) { + public void visit(OWLDataComplementOf desc) { + OWLDataRange dataRange = desc.getDataRange(); + dataRange = rename(dataRange); + renamedOWLObject = df.getOWLDataComplementOf(dataRange); } @Override - public void visit(OWLDataIntersectionOf arg0) { + public void visit(OWLDataIntersectionOf desc) { + List<OWLDataRange> operands = new ArrayList<OWLDataRange>(desc.getOperands()); + Collections.sort(operands, comparator); + SortedSet<OWLDataRange> renamedOperands = new TreeSet<OWLDataRange>(comparator); + for(OWLDataRange expr : operands){ + renamedOperands.add(rename(expr)); + } + renamedOWLObject = df.getOWLDataIntersectionOf(renamedOperands); } @Override - public void visit(OWLDataUnionOf arg0) { + public void visit(OWLDataUnionOf desc) { + List<OWLDataRange> operands = new ArrayList<OWLDataRange>(desc.getOperands()); + Collections.sort(operands, comparator); + SortedSet<OWLDataRange> renamedOperands = new TreeSet<OWLDataRange>(comparator); + for(OWLDataRange expr : operands){ + renamedOperands.add(rename(expr)); + } + renamedOWLObject = df.getOWLDataUnionOf(renamedOperands); } @Override - public void visit(OWLDatatypeRestriction arg0) { + public void visit(OWLDatatypeRestriction desc) { + renamedOWLObject = desc; } } Added: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLLiteralRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLLiteralRenamer.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLLiteralRenamer.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -0,0 +1,44 @@ +package org.dllearner.algorithms.pattern; + +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLDatatype; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.vocab.OWL2Datatype; + +public class OWLLiteralRenamer { + + private OWLDataFactory dataFactory; + + public OWLLiteralRenamer(OWLDataFactory dataFactory) { + this.dataFactory = dataFactory; + } + + public OWLLiteral rename(OWLLiteral literal){ + OWLLiteral renamedLiteral = literal; + OWLDatatype datatype = literal.getDatatype(); + if(datatype.isRDFPlainLiteral()){ + if(literal.hasLang()){ + renamedLiteral = dataFactory.getOWLLiteral("plain", literal.getLang()); + } else { + renamedLiteral = dataFactory.getOWLLiteral("plain"); + } + } else { + if(datatype.getIRI().equals(OWL2Datatype.XSD_STRING.getIRI())){ + renamedLiteral = dataFactory.getOWLLiteral("string", datatype); + } else if(datatype.getIRI().equals(OWL2Datatype.XSD_DOUBLE.getIRI()) || + datatype.getIRI().equals(OWL2Datatype.XSD_DECIMAL.getIRI()) || + datatype.getIRI().equals(OWL2Datatype.XSD_FLOAT.getIRI())){ + renamedLiteral = dataFactory.getOWLLiteral("1.0", datatype); + } else if(datatype.getIRI().equals(OWL2Datatype.XSD_INT.getIRI()) || + datatype.getIRI().equals(OWL2Datatype.XSD_INTEGER.getIRI()) || + datatype.getIRI().equals(OWL2Datatype.XSD_LONG.getIRI()) || + datatype.getIRI().equals(OWL2Datatype.XSD_BYTE.getIRI()) || + datatype.getIRI().equals(OWL2Datatype.XSD_SHORT.getIRI())){ + renamedLiteral = dataFactory.getOWLLiteral("1", datatype); + } + } + renamedLiteral = dataFactory.getOWLLiteral("", OWL2Datatype.RDF_PLAIN_LITERAL); + return renamedLiteral; + } + +} Added: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLObjectComparator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLObjectComparator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLObjectComparator.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -0,0 +1,21 @@ +package org.dllearner.algorithms.pattern; + +import java.util.Comparator; + +import org.semanticweb.owlapi.model.OWLObject; +import org.semanticweb.owlapi.util.OWLObjectTypeIndexProvider; + +public class OWLObjectComparator implements Comparator<OWLObject> { + + private final OWLObjectTypeIndexProvider indexProvider = new OWLObjectTypeIndexProvider(); + + @Override + public int compare(OWLObject o1, OWLObject o2) { + int diff = indexProvider.getTypeIndex(o1) - indexProvider.getTypeIndex(o2); + if(diff == 0){ + return o1.compareTo(o2); + } else { + return diff; + } + } +} Added: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternAxiomToSPARQLConverter.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -0,0 +1,286 @@ +package org.dllearner.algorithms.pattern; + +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.ToStringRenderer; +import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; +import org.semanticweb.owlapi.model.OWLAnnotationPropertyDomainAxiom; +import org.semanticweb.owlapi.model.OWLAnnotationPropertyRangeAxiom; +import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLAxiomVisitor; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; +import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom; +import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; +import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom; +import org.semanticweb.owlapi.model.OWLDatatypeDefinitionAxiom; +import org.semanticweb.owlapi.model.OWLDeclarationAxiom; +import org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom; +import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; +import org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom; +import org.semanticweb.owlapi.model.OWLDisjointObjectPropertiesAxiom; +import org.semanticweb.owlapi.model.OWLDisjointUnionAxiom; +import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom; +import org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom; +import org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom; +import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; +import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLHasKeyAxiom; +import org.semanticweb.owlapi.model.OWLIndividual; +import org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom; +import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom; +import org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; +import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom; +import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.OWLReflexiveObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLSameIndividualAxiom; +import org.semanticweb.owlapi.model.OWLSubAnnotationPropertyOfAxiom; +import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; +import org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom; +import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom; +import org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom; +import org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom; +import org.semanticweb.owlapi.model.PrefixManager; +import org.semanticweb.owlapi.model.SWRLRule; +import org.semanticweb.owlapi.util.DefaultPrefixManager; + +import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer; + +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.Syntax; + +public class PatternAxiomToSPARQLConverter implements OWLAxiomVisitor { + + private String root = "?x"; + private PatternExpressionToSPARQLConverter expressionConverter; + private String sparql; + + public PatternAxiomToSPARQLConverter() { + } + + public Query convert(OWLAxiom axiom) { + expressionConverter = new PatternExpressionToSPARQLConverter(); + + sparql = "SELECT " + root + " WHERE {\n"; + axiom.accept(this); + sparql += "}"; + + return QueryFactory.create(sparql, Syntax.syntaxARQ); + } + + @Override + public void visit(OWLAnnotationAssertionAxiom axiom) { + } + + @Override + public void visit(OWLSubAnnotationPropertyOfAxiom axiom) { + } + + @Override + public void visit(OWLAnnotationPropertyDomainAxiom axiom) { + } + + @Override + public void visit(OWLAnnotationPropertyRangeAxiom axiom) { + } + + @Override + public void visit(OWLDeclarationAxiom axiom) { + } + + @Override + public void visit(OWLSubClassOfAxiom axiom) { + OWLClassExpression subClass = axiom.getSubClass(); + sparql += expressionConverter.convert(root, subClass); + OWLClassExpression superClass = axiom.getSuperClass(); + sparql += expressionConverter.convert(root, superClass); + } + + @Override + public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom) { + } + + @Override + public void visit(OWLAsymmetricObjectPropertyAxiom axiom) { + } + + @Override + public void visit(OWLReflexiveObjectPropertyAxiom axiom) { + } + + @Override + public void visit(OWLDisjointClassesAxiom axiom) { + } + + @Override + public void visit(OWLDataPropertyDomainAxiom axiom) { + } + + @Override + public void visit(OWLObjectPropertyDomainAxiom axiom) { + } + + @Override + public void visit(OWLEquivalentObjectPropertiesAxiom axiom) { + } + + @Override + public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) { + } + + @Override + public void visit(OWLDifferentIndividualsAxiom axiom) { + } + + @Override + public void visit(OWLDisjointDataPropertiesAxiom axiom) { + } + + @Override + public void visit(OWLDisjointObjectPropertiesAxiom axiom) { + } + + @Override + public void visit(OWLObjectPropertyRangeAxiom axiom) { + } + + @Override + public void visit(OWLObjectPropertyAssertionAxiom axiom) { + } + + @Override + public void visit(OWLFunctionalObjectPropertyAxiom axiom) { + } + + @Override + public void visit(OWLSubObjectPropertyOfAxiom axiom) { + } + + @Override + public void visit(OWLDisjointUnionAxiom axiom) { + } + + @Override + public void visit(OWLSymmetricObjectPropertyAxiom axiom) { + } + + @Override + public void visit(OWLDataPropertyRangeAxiom axiom) { + } + + @Override + public void visit(OWLFunctionalDataPropertyAxiom axiom) { + } + + @Override + public void visit(OWLEquivalentDataPropertiesAxiom axiom) { + } + + @Override + public void visit(OWLClassAssertionAxiom axiom) { + } + + @Override + public void visit(OWLEquivalentClassesAxiom axiom) { + } + + @Override + public void visit(OWLDataPropertyAssertionAxiom axiom) { + } + + @Override + public void visit(OWLTransitiveObjectPropertyAxiom axiom) { + } + + @Override + public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { + } + + @Override + public void visit(OWLSubDataPropertyOfAxiom axiom) { + } + + @Override + public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) { + } + + @Override + public void visit(OWLSameIndividualAxiom axiom) { + } + + @Override + public void visit(OWLSubPropertyChainOfAxiom axiom) { + } + + @Override + public void visit(OWLInverseObjectPropertiesAxiom axiom) { + } + + @Override + public void visit(OWLHasKeyAxiom axiom) { + } + + @Override + public void visit(OWLDatatypeDefinitionAxiom axiom) { + } + + @Override + public void visit(SWRLRule axiom) { + } + + public static void main(String[] args) throws Exception { + ToStringRenderer.getInstance().setRenderer(new DLSyntaxObjectRenderer()); + PatternAxiomToSPARQLConverter converter = new PatternAxiomToSPARQLConverter(); + + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLDataFactory df = man.getOWLDataFactory(); + PrefixManager pm = new DefaultPrefixManager("http://examples.org/ontology#"); + + OWLClass clsA = df.getOWLClass("A", pm); + OWLClass clsB = df.getOWLClass("B", pm); + OWLClass clsC = df.getOWLClass("C", pm); + + OWLObjectProperty propR = df.getOWLObjectProperty("r", pm); + OWLObjectProperty propS = df.getOWLObjectProperty("s", pm); + + OWLIndividual indA = df.getOWLNamedIndividual("a", pm); + OWLIndividual indB = df.getOWLNamedIndividual("b", pm); + + OWLAxiom axiom = df.getOWLSubClassOfAxiom( + clsA, + clsB); + Query query = converter.convert(axiom); + System.out.println(axiom + "\n" + query); + + axiom = df.getOWLSubClassOfAxiom( + clsA, + df.getOWLObjectSomeValuesFrom(propR, clsB)); + query = converter.convert(axiom); + System.out.println(axiom + "\n" + query); + + axiom = df.getOWLSubClassOfAxiom( + clsA, + df.getOWLObjectIntersectionOf( + df.getOWLObjectSomeValuesFrom(propR, clsB), + clsB)); + query = converter.convert(axiom); + System.out.println(axiom + "\n" + query); + + axiom = df.getOWLSubClassOfAxiom( + clsA, + df.getOWLObjectAllValuesFrom(propR, clsB)); + query = converter.convert(axiom); + System.out.println(axiom + "\n" + query); + + } + +} Added: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/PatternExpressionToSPARQLConverter.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -0,0 +1,207 @@ +package org.dllearner.algorithms.pattern; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.Stack; + +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.model.OWLClassExpressionVisitor; +import org.semanticweb.owlapi.model.OWLDataAllValuesFrom; +import org.semanticweb.owlapi.model.OWLDataExactCardinality; +import org.semanticweb.owlapi.model.OWLDataHasValue; +import org.semanticweb.owlapi.model.OWLDataMaxCardinality; +import org.semanticweb.owlapi.model.OWLDataMinCardinality; +import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom; +import org.semanticweb.owlapi.model.OWLObjectComplementOf; +import org.semanticweb.owlapi.model.OWLObjectExactCardinality; +import org.semanticweb.owlapi.model.OWLObjectHasSelf; +import org.semanticweb.owlapi.model.OWLObjectHasValue; +import org.semanticweb.owlapi.model.OWLObjectIntersectionOf; +import org.semanticweb.owlapi.model.OWLObjectInverseOf; +import org.semanticweb.owlapi.model.OWLObjectMaxCardinality; +import org.semanticweb.owlapi.model.OWLObjectMinCardinality; +import org.semanticweb.owlapi.model.OWLObjectOneOf; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; +import org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom; +import org.semanticweb.owlapi.model.OWLObjectUnionOf; +import org.semanticweb.owlapi.model.OWLPropertyExpressionVisitor; + +public class PatternExpressionToSPARQLConverter implements OWLClassExpressionVisitor, OWLPropertyExpressionVisitor{ + + private String sparql = ""; + private Stack<String> variables = new Stack<String>(); + private Map<OWLEntity, String> variablesMapping; + + private int classCnt = 0; + private int propCnt = 0; + private int indCnt = 0; + + public PatternExpressionToSPARQLConverter() { + variablesMapping = new HashMap<OWLEntity, String>(); + } + + public String convert(String root, OWLClassExpression expr){ + sparql = ""; + variables.push(root); + expr.accept(this); + return sparql; + } + + private String getVariable(OWLEntity entity){ + String var = variablesMapping.get(entity); + if(var == null){ + if(entity.isOWLClass()){ + var = "?cls" + classCnt++; + } else if(entity.isOWLObjectProperty() || entity.isOWLDataProperty()){ + var = "?p" + propCnt++; + } else if(entity.isOWLNamedIndividual()){ + var = buildIndividualVariable(); + } + variablesMapping.put(entity, var); + } + return var; + } + + private String buildIndividualVariable(){ + return "?s" + indCnt++; + } + + private String triple(String subject, String predicate, String object){ + return subject + " " + predicate + " " + object + ".\n"; + } + + @Override + public void visit(OWLClass expr) { + sparql += variables.peek() + " a " + getVariable(expr) +".\n"; + } + + @Override + public void visit(OWLObjectProperty property) { + + } + + @Override + public void visit(OWLDataProperty property) { + } + + @Override + public void visit(OWLObjectIntersectionOf expr) { + Set<OWLClassExpression> operands = expr.getOperands(); + String variable = variables.peek(); + for (OWLClassExpression operand : operands) { + sparql += convert(variable, operand); + } + } + + @Override + public void visit(OWLObjectUnionOf expr) { + } + + @Override + public void visit(OWLObjectComplementOf expr) { + } + + @Override + public void visit(OWLObjectSomeValuesFrom expr) { + String variable = variables.peek(); + OWLObjectPropertyExpression property = expr.getProperty(); + if(!property.isAnonymous()){ + String objectVariable = buildIndividualVariable(); + variables.push(objectVariable); + //build the triple for the property + sparql += triple(variable, getVariable(property.asOWLObjectProperty()), objectVariable); + //build the rest according to the role filler + OWLClassExpression filler = expr.getFiller(); + filler.accept(this); + variables.pop(); + + } else { + System.err.println("TODO: complex property expressions"); + } + + } + + @Override + public void visit(OWLObjectAllValuesFrom expr) { + String variable = variables.peek(); + OWLObjectPropertyExpression property = expr.getProperty(); + if(!property.isAnonymous()){ + String objectVariable = buildIndividualVariable(); + variables.push(objectVariable); + //build the triple for the property + sparql += triple(variable, getVariable(property.asOWLObjectProperty()), objectVariable); + OWLClassExpression filler = expr.getFiller(); + filler.accept(this); + //build the rest according to the role filler + sparql += "FILTER NOT EXISTS{"; + objectVariable = buildIndividualVariable(); + variables.push(objectVariable); + sparql += triple(variable, getVariable(property.asOWLObjectProperty()), objectVariable); + variables.pop(); + sparql += "}"; + + + } else { + System.err.println("TODO: complex property expressions"); + } + } + + @Override + public void visit(OWLObjectHasValue expr) { + } + + @Override + public void visit(OWLObjectMinCardinality expr) { + } + + @Override + public void visit(OWLObjectExactCardinality expr) { + } + + @Override + public void visit(OWLObjectMaxCardinality expr) { + } + + @Override + public void visit(OWLObjectHasSelf expr) { + } + + @Override + public void visit(OWLObjectOneOf expr) { + } + + @Override + public void visit(OWLDataSomeValuesFrom expr) { + } + + @Override + public void visit(OWLDataAllValuesFrom expr) { + } + + @Override + public void visit(OWLDataHasValue expr) { + } + + @Override + public void visit(OWLDataMinCardinality expr) { + } + + @Override + public void visit(OWLDataExactCardinality expr) { + } + + @Override + public void visit(OWLDataMaxCardinality expr) { + } + + @Override + public void visit(OWLObjectInverseOf property) { + } + +} Added: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-04-19 14:04:20 UTC (rev 3924) @@ -0,0 +1,568 @@ +package org.dllearner.utilities.owl; + +import java.util.List; +import java.util.Map; +import java.util.Stack; + +import org.aksw.commons.collections.diff.ModelDiff; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.ToStringRenderer; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.model.OWLClassExpressionVisitor; +import org.semanticweb.owlapi.model.OWLDataAllValuesFrom; +import org.semanticweb.owlapi.model.OWLDataComplementOf; +import org.semanticweb.owlapi.model.OWLDataExactCardinality; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLDataHasValue; +import org.semanticweb.owlapi.model.OWLDataIntersectionOf; +import org.semanticweb.owlapi.model.OWLDataMaxCardinality; +import org.semanticweb.owlapi.model.OWLDataMinCardinality; +import org.semanticweb.owlapi.model.OWLDataOneOf; +import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLDataPropertyExpression; +import org.semanticweb.owlapi.model.OWLDataRange; +import org.semanticweb.owlapi.model.OWLDataRangeVisitor; +import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom; +import org.semanticweb.owlapi.model.OWLDataUnionOf; +import org.semanticweb.owlapi.model.OWLDatatype; +import org.semanticweb.owlapi.model.OWLDatatypeRestriction; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLIndividual; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom; +import org.semanticweb.owlapi.model.OWLObjectComplementOf; +import org.semanticweb.owlapi.model.OWLObjectExactCardinality; +import org.semanticweb.owlapi.model.OWLObjectHasSelf; +import org.semanticweb.owlapi.model.OWLObjectHasValue; +import org.semanticweb.owlapi.model.OWLObjectIntersectionOf; +import org.semanticweb.owlapi.model.OWLObjectInverseOf; +import org.semanticweb.owlapi.model.OWLObjectMaxCardinality; +import org.semanticweb.owlapi.model.OWLObjectMinCardinality; +import org.semanticweb.owlapi.model.OWLObjectOneOf; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; +import org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom; +import org.semanticweb.owlapi.model.OWLObjectUnionOf; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.OWLPropertyExpression; +import org.semanticweb.owlapi.model.OWLPropertyExpressionVisitor; +import org.semanticweb.owlapi.model.PrefixManager; +import org.semanticweb.owlapi.util.DefaultPrefixManager; + +import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; +import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer; + +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.Syntax; + +public class OWLClassExpressionToSPARQLConverter implements OWLClassExpressionVisitor, OWLPropertyExpressionVisitor, OWLDataRangeVisitor{ + + private String sparql = ""; + private Stack<String> variables = new Stack<String>(); + private Map<OWLEntity, String> variablesMapping; + + private int classCnt = 0; + private int propCnt = 0; + private int indCnt = 0; + + private OWLDataFactory df = new OWLDataFactoryImpl(); + + public OWLClassExpressionToSPARQLConverter() { + } + + public String convert(String rootVariable, OWLClassExpression expr){ + reset(); + variables.push(rootVariable); + expr.accept(this); + return sparql; + } + + public String convert(String rootVariable, OWLPropertyExpression expr){ + variables.push(rootVariable); + sparql = ""; + expr.accept(this); + return sparql; + } + + public Query asQuery(String rootVariable, OWLClassExpression expr){ + String queryString = "SELECT " + rootVariable + " WHERE {"; + queryString += convert(rootVariable, expr); + queryString += "}";System.out.println(queryString); + return QueryFactory.create(queryString, Syntax.syntaxARQ); + } + + private void reset(){ + variables.clear(); + classCnt = 0; + propCnt = 0; + indCnt = 0; + sparql = ""; + } + + private String getVariable(OWLEntity entity){ + String var = variablesMapping.get(entity); + if(var == null){ + if(entity.isOWLClass()){ + var = "?cls" + classCnt++; + } else if(entity.isOWLObjectProperty() || entity.isOWLDataProperty()){ + var = "?p" + propCnt++; + } else if(entity.isOWLNamedIndividual()){ + var = buildIndividualVariable(); + } + variablesMapping.put(entity, var); + } + return var; + } + + private String buildIndividualVariable(){ + return "?s" + indCnt++; + } + + private int modalDepth(){ + return variables.size(); + } + + private String triple(String subject, String predicate, String object){ + return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + + (object.startsWith("?") ? object : "<" + object + ">") + ".\n"; + } + + private String triple(String subject, String predicate, OWLLiteral object){ + return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + + "\"" + object + "\"^^<" + object.getDatatype().toStringID() + ">.\n"; + } + + private String triple(String subject, String predicate, OWLIndividual object){ + return (subject.startsWith("?") ? subject : "<" + subject + ">") + " " + + (predicate.startsWith("?") || predicate.equals("a") ? predicate : "<" + predicate + ">") + " " + + "<" + object.toStringID() + ">.\n"; + } + + @Override + public void visit(OWLObjectProperty property) { + } + + @Override + public void visit(OWLObjectInverseOf property) { + } + + @Override + public void visit(OWLDataProperty property) { + } + + @Override + public void visit(OWLClass ce) { + sparql += triple(variables.peek(), "a", ce.toStringID()); + } + + @Override + public void visit(OWLObjectIntersectionOf ce) { + List<OWLClassExpression> operands = ce.getOperandsAsList(); + for (OWLClassExpression operand : operands) { + operand.accept(this); + } + } + + @Override + public void visit(OWLObjectUnionOf ce) { + List<OWLClassExpression> operands = ce.getOperandsAsList(); + for (int i = 0; i < operands.size()-1; i++) { + sparql += "{"; + operands.get(i).accept(this); + sparql += "}"; + sparql += " UNION "; + } + sparql += "{"; + operands.get(operands.size()-1).accept(this); + sparql += "}"; + } + + @Override + public void visit(OWLObjectComplementOf ce) { + } + + @Override + public void visit(OWLObjectSomeValuesFrom ce) { + String objectVariable = buildIndividualVariable(); + OWLObjectPropertyExpression propertyExpression = ce.getProperty(); + if(propertyExpression.isAnonymous()){ + //property expression is inverse of a property + sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), variables.peek()); + } else { + sparql += triple(variables.peek(), propertyExpression.getNamedProperty().toStringID(), objectVariable); + } + OWLClassExpression filler = ce.getFiller(); + if(filler.isAnonymous()){ + if(filler instanceof OWLObjectOneOf){ + variables.push(objectVariable); + filler.accept(this); + variables.pop(); + } else { + String var = buildIndividualVariable(); + variables.push(var); + sparql += triple(objectVariable, "a", var); + filler.accept(this); + variables.pop(); + } + } else { + sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + } + + } + + @Override + public void visit(OWLObjectAllValuesFrom ce) { + String subject = variables.peek(); + String objectVariable = buildIndividualVariable(); + OWLObjectPropertyExpression propertyExpression = ce.getProperty(); + String predicate = propertyExpression.getNamedProperty().toStringID(); + OWLClassExpression filler = ce.getFiller(); + if(propertyExpression.isAnonymous()){ + //property expression is inverse of a property + sparql += triple(objectVariable, predicate, variables.peek()); + } else { + sparql += triple(variables.peek(), predicate, objectVariable); + } + + String var = buildIndividualVariable(); + sparql += "{SELECT " + subject + " (COUNT(" + var + ") AS ?cnt1) WHERE {"; + sparql += triple(subject, predicate, var); + variables.push(var); + filler.accept(this); + variables.pop(); + sparql += "} GROUP BY " + subject + "}"; + + var = buildIndividualVariable(); + sparql += "{SELECT " + subject + " (COUNT(" + var + ") AS ?cnt2) WHERE {"; + sparql += triple(subject, predicate, var); + sparql += "} GROUP BY " + subject + "}"; + + sparql += "FILTER(?cnt1=?cnt2)"; + + } + + @Override + public void visit(OWLObjectHasValue ce) { + OWLObjectPropertyExpression propertyExpression = ce.getProperty(); + OWLIndividual value = ce.getValue(); + if(propertyExpression.isAnonymous()){ + //property expression is inverse of a property + sparql += triple(value.toStringID(), propertyExpression.getNamedProperty().toStringID(), variables.peek()); + } else { + sparql += triple(variables.peek(), propertyExpression.getNamedProperty().toStringID(), value.toStringID()); + } + } + + @Override + public void visit(OWLObjectMinCardinality ce) { + String subjectVariable = variables.peek(); + String objectVariable = buildIndividualVariable(); + OWLObjectPropertyExpression propertyExpression = ce.getProperty(); + int cardinality = ce.getCardinality(); + sparql += "{SELECT " + subjectVariable + " WHERE {"; + if(propertyExpression.isAnonymous()){ + //property expression is inverse of a property + sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), subjectVariable); + } else { + sparql += triple(subjectVariable, propertyExpression.getNamedProperty().toStringID(), objectVariable); + } + OWLClassExpression filler = ce.getFiller(); + if(filler.isAnonymous()){ + String var = buildIndividualVariable(); + variables.push(var); + sparql += triple(objectVariable, "a", var); + filler.accept(this); + variables.pop(); + } else { + sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + } + + sparql += "} GROUP BY " + subjectVariable + " HAVING(COUNT(" + objectVariable + ")>=" + cardinality + ")}"; + + } + + @Override + public void visit(OWLObjectExactCardinality ce) { + String subjectVariable = variables.peek(); + String objectVariable = buildIndividualVariable(); + OWLObjectPropertyExpression propertyExpression = ce.getProperty(); + int cardinality = ce.getCardinality(); + sparql += "{SELECT " + subjectVariable + " WHERE {"; + if(propertyExpression.isAnonymous()){ + //property expression is inverse of a property + sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), subjectVariable); + } else { + sparql += triple(subjectVariable, propertyExpression.getNamedProperty().toStringID(), objectVariable); + } + OWLClassExpression filler = ce.getFiller(); + if(filler.isAnonymous()){ + String var = buildIndividualVariable(); + variables.push(var); + sparql += triple(objectVariable, "a", var); + filler.accept(this); + variables.pop(); + } else { + sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + } + + sparql += "} GROUP BY " + subjectVariable + " HAVING(COUNT(" + objectVariable + ")=" + cardinality + ")}"; + } + + @Override + public void visit(OWLObjectMaxCardinality ce) { + String subjectVariable = variables.peek(); + String objectVariable = buildIndividualVariable(); + OWLObjectPropertyExpression propertyExpression = ce.getProperty(); + int cardinality = ce.getCardinality(); + sparql += "{SELECT " + subjectVariable + " WHERE {"; + if(propertyExpression.isAnonymous()){ + //property expression is inverse of a property + sparql += triple(objectVariable, propertyExpression.getNamedProperty().toStringID(), subjectVariable); + } else { + sparql += triple(subjectVariable, propertyExpression.getNamedProperty().toStringID(), objectVariable); + } + OWLClassExpression filler = ce.getFiller(); + if(filler.isAnonymous()){ + String var = buildIndividualVariable(); + variables.push(var); + sparql += triple(objectVariable, "a", var); + filler.accept(this); + variables.pop(); + } else { + sparql += triple(objectVariable, "a", filler.asOWLClass().toStringID()); + } + + sparql += "} GROUP BY " + subjectVariable + " HAVING(COUNT(" + objectVariable + ")<=" + cardinality + ")}"; + } + + @Override + public void visit(OWLObjectHasSelf ce) { + String subject = variables.peek(); + OWLObjectPropertyExpression property = ce.getProperty(); + sparql += triple(subject, property.getNamedProperty().toStringID(), subject); + } + + @Override + public void visit(OWLObjectOneOf ce) { + String subject = variables.peek(); + if(modalDepth() == 1){ + sparql += triple(subject, "?p", "?o"); + } + sparql += "FILTER(" + subject + " IN ("; + String values = ""; + for (OWLIndividual ind : ce.getIndividuals()) { + if(!values.isEmpty()){ + values += ","; + } + values += "<" + ind.toStringID() + ">"; + } + sparql += values; + sparql += ... [truncated message content] |
From: <lor...@us...> - 2013-04-15 20:53:34
|
Revision: 3923 http://sourceforge.net/p/dl-learner/code/3923 Author: lorenz_b Date: 2013-04-15 20:53:29 +0000 (Mon, 15 Apr 2013) Log Message: ----------- Updated Guava lib. Modified Paths: -------------- trunk/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-04-15 20:52:41 UTC (rev 3922) +++ trunk/pom.xml 2013-04-15 20:53:29 UTC (rev 3923) @@ -392,7 +392,7 @@ <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> - <version>r07</version> + <version>14.0</version> </dependency> <dependency> <groupId>com.dumontierlab</groupId> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-15 20:52:45
|
Revision: 3922 http://sourceforge.net/p/dl-learner/code/3922 Author: lorenz_b Date: 2013-04-15 20:52:41 +0000 (Mon, 15 Apr 2013) Log Message: ----------- Continued pattern learning algorithm. Added classes for remote ontology repositories and local datasets. Modified Paths: -------------- trunk/components-core/pom.xml trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLAxiomRenamerTest.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/kb/dataset/ trunk/components-core/src/main/java/org/dllearner/kb/dataset/AbstractOWLOntologyDataset.java trunk/components-core/src/main/java/org/dllearner/kb/dataset/BioPortalDataset.java trunk/components-core/src/main/java/org/dllearner/kb/dataset/OWLOntologyDataset.java trunk/components-core/src/main/java/org/dllearner/kb/dataset/TONESDataset.java trunk/components-core/src/main/java/org/dllearner/kb/repository/ trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepository.java trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryEntry.java trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryManager.java trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/ trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/BioPortalRepository.java trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/Data.java trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyAclEntry.java trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyBean.java trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/Success.java trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/UserAcl.java trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/UserEntry.java trunk/components-core/src/main/java/org/dllearner/kb/repository/tones/ trunk/components-core/src/main/java/org/dllearner/kb/repository/tones/TONESRepository.java trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLPatternDetectionTest.java Modified: trunk/components-core/pom.xml =================================================================== --- trunk/components-core/pom.xml 2013-04-12 10:57:03 UTC (rev 3921) +++ trunk/components-core/pom.xml 2013-04-15 20:52:41 UTC (rev 3922) @@ -281,6 +281,26 @@ <artifactId>simmetrics</artifactId> <version>1.6.2</version> </dependency> + <dependency> + <groupId>com.thoughtworks.xstream</groupId> + <artifactId>xstream</artifactId> + <version>1.4.3</version> + </dependency> + <dependency> + <groupId>xpp3</groupId> + <artifactId>xpp3_min</artifactId> + <version>1.1.4c</version> + </dependency> + <dependency> + <groupId>net.sf.kxml</groupId> + <artifactId>kxml2-min</artifactId> + <version>2.3.0</version> + </dependency> + + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> </dependencies> <dependencyManagement> <dependencies> Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-12 10:57:03 UTC (rev 3921) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -1,55 +1,27 @@ package org.dllearner.algorithms.pattern; -import java.util.ArrayList; -import java.util.Arrays; +import java.net.URI; import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Queue; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; +import org.dllearner.kb.dataset.OWLOntologyDataset; +import org.dllearner.kb.repository.OntologyRepository; +import org.dllearner.kb.repository.OntologyRepositoryEntry; import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.expression.OWLEntityChecker; -import org.semanticweb.owlapi.expression.ParserException; -import org.semanticweb.owlapi.io.ToStringRenderer; -import org.semanticweb.owlapi.model.EntityType; import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAnnotationProperty; import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassExpression; import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLDatatype; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLObjectIntersectionOf; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLObjectUnionOf; +import org.semanticweb.owlapi.model.OWLLogicalAxiom; import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; -import org.semanticweb.owlapi.util.IRIShortFormProvider; -import org.semanticweb.owlapi.util.OWLAxiomVisitorAdapter; -import org.semanticweb.owlapi.util.OWLClassExpressionVisitorAdapter; -import org.semanticweb.owlapi.util.SimpleIRIShortFormProvider; -import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; -import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer; - -import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; + public class OWLAxiomPatternFinder { private static Queue<String> classVarQueue = new LinkedList<String>(); @@ -69,133 +41,46 @@ } }; + + private OntologyRepository repository; + private OWLOntologyManager manager; + private OWLDataFactory dataFactory; - public OWLAxiomPatternFinder(OWLOntology ontology) { - generalizeAxioms(ontology.getLogicalAxioms()); + public OWLAxiomPatternFinder(OWLOntologyDataset dataset) { + } - private void generalizeAxioms(Collection<? extends OWLAxiom> axioms){ - ManchesterOWLSyntaxOWLObjectRendererImpl renderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); - String NS = "http://dl-learner.org/pattern/"; - IRIShortFormProvider sfp = new SimpleIRIShortFormProvider(); -// renderer.setShortFormProvider(new FullIRIEntityShortFromProvider()); - for(OWLAxiom axiom : axioms){ - OWLAxiom nnfAxiom = axiom.getNNF(); - String renderedAxiom = renderer.render(nnfAxiom); - final OWLDataFactory dataFactory = new OWLDataFactoryImpl(); - Map<OWLEntity, OWLEntity> map = new HashMap<OWLEntity, OWLEntity>(); - Queue<String> classVarQueue = new LinkedList<String>(this.classVarQueue); - Queue<String> propertyVarQueue = new LinkedList<String>(this.propertyVarQueue); - Queue<String> individualVarQueue = new LinkedList<String>(this.individualVarQueue); - Queue<String> datatypeVarQueue = new LinkedList<String>(this.datatypeVarQueue); - final Set<String> classNames = new HashSet<String>(); - final Set<String> objectPropertyNames = new HashSet<String>(); - final Set<String> dataPropertyNames = new HashSet<String>(); - final Set<String> individualNames = new HashSet<String>(); - final Set<String> datatypeNames = new HashSet<String>(); - for(OWLEntity entity : axiom.getSignature()){ - if(entity.isOWLClass()){ - if(entity.asOWLClass().isBuiltIn()){ - - } else { - OWLEntity newEntity = dataFactory.getOWLEntity(EntityType.CLASS, IRI.create(NS + classVarQueue.poll())); - map.put(entity, newEntity); - classNames.add(newEntity.toStringID()); - } - } else if(entity.isOWLObjectProperty()){ - OWLEntity newEntity = dataFactory.getOWLEntity(EntityType.OBJECT_PROPERTY, IRI.create(NS + propertyVarQueue.poll())); - map.put(entity, newEntity); - objectPropertyNames.add(newEntity.toStringID()); - } else if(entity.isOWLDataProperty()){ - OWLEntity newEntity = dataFactory.getOWLEntity(EntityType.DATA_PROPERTY, IRI.create(NS + propertyVarQueue.poll())); - map.put(entity, newEntity); - dataPropertyNames.add(newEntity.toStringID()); - } else if(entity.isOWLNamedIndividual()){ - OWLEntity newEntity = dataFactory.getOWLEntity(EntityType.NAMED_INDIVIDUAL, IRI.create(NS + individualVarQueue.poll())); - map.put(entity, newEntity); - individualNames.add(newEntity.toStringID()); - } else if(entity.isOWLDatatype()){ -// OWLEntity newEntity = dataFactory.getOWLEntity(EntityType.DATATYPE, IRI.create(datatypeVarQueue.poll())); - OWLEntity newEntity = dataFactory.getOWLEntity(EntityType.DATATYPE, IRI.create(sfp.getShortForm(entity.getIRI()))); -// OWLEntity newEntity = entity; - map.put(entity, newEntity); - datatypeNames.add(newEntity.toStringID()); + public OWLAxiomPatternFinder(OntologyRepository repository) { + this.repository = repository; + manager = OWLManager.createOWLOntologyManager(); + dataFactory = manager.getOWLDataFactory(); + } + + public void start(){ + OWLAxiomRenamer renamer = new OWLAxiomRenamer(dataFactory); + Collection<OntologyRepositoryEntry> entries = repository.getEntries(); + Multiset<OWLAxiom> multiset = HashMultiset.create(); + for (OntologyRepositoryEntry entry : entries) { + try { + URI uri = entry.getPhysicalURI(); + OWLOntology ontology = manager.loadOntology(IRI.create(uri)); + for(OWLLogicalAxiom axiom : ontology.getLogicalAxioms()){ + OWLAxiom renamedAxiom = renamer.rename(axiom); + multiset.add(renamedAxiom); } + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); } -// System.out.println(renderedAxiom); - for (Entry<OWLEntity, OWLEntity> entry : map.entrySet()) { - OWLEntity key = entry.getKey(); - OWLEntity value = entry.getValue(); - renderedAxiom = renderedAxiom.replaceAll("\\b" + sfp.getShortForm(key.getIRI()) + "\\b", value.toStringID()); + for (OWLAxiom owlAxiom : Multisets.copyHighestCountFirst(multiset).elementSet()) { + System.out.println(owlAxiom + ": " + multiset.count(owlAxiom)); } - ManchesterOWLSyntaxEditorParser parser = new ManchesterOWLSyntaxEditorParser(dataFactory, renderedAxiom); - parser.setOWLEntityChecker(new OWLEntityChecker() { - - @Override - public OWLObjectProperty getOWLObjectProperty(String iri) { - return objectPropertyNames.contains(iri) ? dataFactory.getOWLObjectProperty(IRI.create(iri)) : null; - } - - @Override - public OWLNamedIndividual getOWLIndividual(String iri) { - return individualNames.contains(iri) ? dataFactory.getOWLNamedIndividual(IRI.create(iri)) : null; - } - - @Override - public OWLDatatype getOWLDatatype(String iri) { - return datatypeNames.contains(iri) ? dataFactory.getOWLDatatype(IRI.create(iri)) : null; - } - - @Override - public OWLDataProperty getOWLDataProperty(String iri) { - return dataPropertyNames.contains(iri) ? dataFactory.getOWLDataProperty(IRI.create(iri)) : null; - } - - @Override - public OWLClass getOWLClass(String iri) { - if(iri.equals("Thing")){ - return dataFactory.getOWLThing(); - } else if(iri.equals("Nothing")){ - return dataFactory.getOWLNothing(); - } else { - return classNames.contains(iri) ? dataFactory.getOWLClass(IRI.create(iri)) : null; - } - } - - @Override - public OWLAnnotationProperty getOWLAnnotationProperty(String iri) { - return null; - } - }); - try { - OWLAxiom parsedAxiom = parser.parseAxiom(); - System.out.println(parsedAxiom); - } catch (ParserException e) { - e.printStackTrace(); - } } + for (OWLAxiom owlAxiom : Multisets.copyHighestCountFirst(multiset).elementSet()) { + System.out.println(owlAxiom + ": " + multiset.count(owlAxiom)); + } } public static void main(String[] args) throws Exception { - ToStringRenderer.getInstance().setRenderer(new DLSyntaxObjectRenderer()); - String ontologyURL = "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl"; - OWLOntologyManager man = OWLManager.createOWLOntologyManager(); - OWLDataFactory dataFactory = man.getOWLDataFactory(); - OWLOntology ontology = man.loadOntology(IRI.create(ontologyURL)); - OWLAxiomRenamer renamer = new OWLAxiomRenamer(dataFactory); - Multiset<OWLAxiom> multiset = HashMultiset.create(); - for (OWLAxiom axiom : ontology.getLogicalAxioms()) { - OWLAxiom renamedAxiom = renamer.rename(axiom); - multiset.add(renamedAxiom); -// System.out.println(axiom + "-->" + renamedAxiom); - } - for (OWLAxiom owlAxiom : multiset.elementSet()) { - System.out.println(owlAxiom + ": " + multiset.count(owlAxiom)); - } - - -// OWLAxiomPatternFinder pf = new OWLAxiomPatternFinder(ontology); } - } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-04-12 10:57:03 UTC (rev 3921) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -38,6 +38,7 @@ import org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom; import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom; import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLLiteral; import org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom; import org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom; import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; @@ -166,6 +167,13 @@ @Override public void visit(OWLObjectPropertyAssertionAxiom axiom) { + OWLObjectPropertyExpression property = axiom.getProperty(); + property = expressionRenamer.rename(property); + OWLIndividual subject = axiom.getSubject(); + subject = expressionRenamer.rename(subject); + OWLIndividual object = axiom.getObject(); + object = expressionRenamer.rename(object); + renamedAxiom = df.getOWLObjectPropertyAssertionAxiom(property, subject, object); } @Override @@ -177,6 +185,11 @@ @Override public void visit(OWLSubObjectPropertyOfAxiom axiom) { + OWLObjectPropertyExpression subProperty = axiom.getSubProperty(); + subProperty = expressionRenamer.rename(subProperty); + OWLObjectPropertyExpression superProperty = axiom.getSuperProperty(); + superProperty = expressionRenamer.rename(superProperty); + renamedAxiom = df.getOWLSubObjectPropertyOfAxiom(subProperty, superProperty); } @Override @@ -231,6 +244,13 @@ @Override public void visit(OWLDataPropertyAssertionAxiom axiom) { + OWLDataPropertyExpression property = axiom.getProperty(); + property = expressionRenamer.rename(property); + OWLIndividual subject = axiom.getSubject(); + subject = expressionRenamer.rename(subject); + OWLLiteral object = axiom.getObject(); + object = expressionRenamer.rename(object); + renamedAxiom = df.getOWLDataPropertyAssertionAxiom(property, subject, object); } @Override @@ -249,6 +269,11 @@ @Override public void visit(OWLSubDataPropertyOfAxiom axiom) { + OWLDataPropertyExpression subProperty = axiom.getSubProperty(); + subProperty = expressionRenamer.rename(subProperty); + OWLDataPropertyExpression superProperty = axiom.getSuperProperty(); + superProperty = expressionRenamer.rename(superProperty); + renamedAxiom = df.getOWLSubDataPropertyOfAxiom(subProperty, superProperty); } @Override Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java 2013-04-12 10:57:03 UTC (rev 3921) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -64,9 +64,9 @@ private static final String NS = "http://dl-learner.org/pattern/"; - private Queue<String> classVarQueue = new LinkedList<String>(Arrays.asList("A", "B", "C" , "D")); - private Queue<String> propertyVarQueue = new LinkedList<String>(Arrays.asList("p", "q", "r" , "s")); - private Queue<String> individualVarQueue = new LinkedList<String>(Arrays.asList("a", "b", "c" , "d")); + private Queue<String> classVarQueue = new LinkedList<String>(Arrays.asList("A", "B", "C" , "D", "E", "F", "G")); + private Queue<String> propertyVarQueue = new LinkedList<String>(Arrays.asList("p", "q", "r" , "s", "t")); + private Queue<String> individualVarQueue = new LinkedList<String>(Arrays.asList("a", "b", "c" , "d", "e", "f", "g")); private OWLDataFactory df; private Map<OWLEntity, OWLEntity> renaming; private OWLObject renamedOWLObject; @@ -101,6 +101,12 @@ return (OWLDataRange) renamedOWLObject; } + public OWLLiteral rename(OWLLiteral lit){ + renamedOWLObject = null; + renamedOWLObject = lit; + return (OWLLiteral) renamedOWLObject; + } + @Override public void visit(OWLObjectIntersectionOf desc) { List<OWLClassExpression> operands = desc.getOperandsAsList(); @@ -325,6 +331,12 @@ @Override public void visit(OWLAnonymousIndividual ind) { + OWLEntity newEntity = renaming.get(ind); + if(newEntity == null){ + newEntity = df.getOWLNamedIndividual(getIRI(individualVarQueue.poll())); +// renaming.put(ind, newEntity); + } + renamedOWLObject = (OWLNamedIndividual)newEntity; } @Override @@ -333,7 +345,13 @@ } @Override - public void visit(OWLDataOneOf arg0) { + public void visit(OWLDataOneOf desc) { + Set<OWLLiteral> literals = desc.getValues(); + Set<OWLLiteral> renamedLiterals = new TreeSet<OWLLiteral>(); + for (OWLLiteral lit : literals) { + renamedLiterals.add(rename(lit)); + } + renamedOWLObject = df.getOWLDataOneOf(renamedLiterals); } @Override Modified: trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java 2013-04-12 10:57:03 UTC (rev 3921) +++ trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -28,6 +28,7 @@ import org.dllearner.core.KnowledgeSource; import org.dllearner.core.config.ConfigOption; import org.dllearner.core.config.ListStringEditor; +import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.springframework.beans.propertyeditors.URLEditor; @@ -44,6 +45,7 @@ public class SparqlEndpointKS implements KnowledgeSource { private SparqlEndpoint endpoint; + private ExtractionDBCache cache; private boolean supportsSPARQL_1_1 = false; private boolean isRemote = true; private boolean initialized = false; @@ -64,9 +66,18 @@ } public SparqlEndpointKS(SparqlEndpoint endpoint) { + this(endpoint, null); + } + + public SparqlEndpointKS(SparqlEndpoint endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; + this.cache = cache; } + public ExtractionDBCache getCache() { + return cache; + } + @Override public void init() throws ComponentInitException { if(!initialized){ Added: trunk/components-core/src/main/java/org/dllearner/kb/dataset/AbstractOWLOntologyDataset.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/dataset/AbstractOWLOntologyDataset.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/dataset/AbstractOWLOntologyDataset.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,342 @@ +package org.dllearner.kb.dataset; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeSet; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.semanticweb.HermiT.Configuration; +import org.semanticweb.HermiT.Reasoner; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.reasoner.ConsoleProgressMonitor; +import org.semanticweb.owlapi.reasoner.OWLReasoner; +import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; +import org.semanticweb.owlapi.reasoner.SimpleConfiguration; + +import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; +import com.google.common.io.Files; + +public abstract class AbstractOWLOntologyDataset implements OWLOntologyDataset{ + + protected Collection<OWLOntology> ontologies = new TreeSet<OWLOntology>(); + protected Collection<OWLOntology> correctOntologies = new TreeSet<OWLOntology>(); + protected Collection<OWLOntology> incoherentOntologies = new TreeSet<OWLOntology>(); + protected Collection<OWLOntology> inconsistentOntologies = new TreeSet<OWLOntology>(); + + protected String name; + + protected File directory; + protected File correctSubdirectory; + protected File inconsistentSubdirectory; + protected File incoherentSubdirectory; + protected File errorSubdirectory; + protected File tooLargeSubdirectory; + + protected OWLReasonerFactory reasonerFactory = PelletReasonerFactory.getInstance(); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + + protected Map<URL, String> ontologyURLs = new HashMap<URL, String>(); + + private final int nrOfThreads = 1; + private boolean analyze = false; + + public AbstractOWLOntologyDataset(String name, boolean analyze) { + this.name = name; + this.analyze = analyze; + //create file structure + directory = new File(datasetDirectory, name); + directory.mkdirs(); + correctSubdirectory = new File(directory, "correct"); + correctSubdirectory.mkdirs(); + incoherentSubdirectory = new File(directory, "incoherent"); + incoherentSubdirectory.mkdirs(); + inconsistentSubdirectory = new File(directory, "inconsistent"); + inconsistentSubdirectory.mkdirs(); + tooLargeSubdirectory = new File(directory, "too_large"); + tooLargeSubdirectory.mkdirs(); + errorSubdirectory = new File(directory, "error"); + errorSubdirectory.mkdirs(); + addOntologyURLs(); + initialize(); + } + + public AbstractOWLOntologyDataset(String name) { + this(name, false); + } + + private boolean analyzed(URL url){ + String filename = getFilename(url); + for(File parent : Arrays.asList(tooLargeSubdirectory, correctSubdirectory, incoherentSubdirectory, inconsistentSubdirectory, errorSubdirectory)){ + File file = new File(parent, filename); + if(file.exists()){ + return true; + } + } + return false; + } + + private Set<String> load403Errors(){ + Set<String> errors = new HashSet<String>(); + try { + if(new File(directory, "403.txt").exists()){ + errors = new HashSet<String>(Files.readLines(new File(directory, "403.txt"), Charset.defaultCharset())); + } + } catch (IOException e) { + e.printStackTrace(); + } + return errors; + } + + private boolean analyzedDataset(){ + return new File(directory + "/" + "analyzed").exists(); + } + + public void initialize(){ + //check if dataset was already analyzed + boolean analyzed = analyzedDataset(); + if(!analyzed){ + Set<String> errors = load403Errors(); + ExecutorService threadPool = Executors.newFixedThreadPool(nrOfThreads); + List<Entry<URL, String>> urlList = new ArrayList<java.util.Map.Entry<URL, String>>(ontologyURLs.entrySet()); + Collections.shuffle(urlList); + for (java.util.Map.Entry<URL, String> entry : urlList) { + URL url = entry.getKey(); + if(!errors.contains(url.toString()) && !analyzed(url)){ + threadPool.submit(new OntologyLoadingTask(url)); + } + } + threadPool.shutdown(); + try { + threadPool.awaitTermination(100, TimeUnit.MINUTES); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try { + new File(directory + "/" + "analyzed").createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + + } + } + + protected abstract void addOntologyURLs(); + + private void analyzeAndCategorizeOntology(OWLOntology ontology, String filename){ + System.out.println("Analyzing ontology " + filename + "..."); + OWLReasoner reasoner; + File from = new File(man.getOntologyDocumentIRI(ontology).toURI()); + try { + Configuration conf = new Configuration(); + conf.reasonerProgressMonitor = new ConsoleProgressMonitor(); + conf.ignoreUnsupportedDatatypes = true; + reasoner = new Reasoner(conf, ontology); + int logicalAxiomCount = ontology.getLogicalAxiomCount(); + boolean consistent = reasoner.isConsistent(); + Set<OWLClass> unsatisfiableClasses = null; + + if(consistent){ + unsatisfiableClasses = reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom(); + if(!unsatisfiableClasses.isEmpty()){ + File to = new File(incoherentSubdirectory, filename); + Files.move(from, to); + } else { + File to = new File(correctSubdirectory, filename); + Files.move(from, to); + } + } else { + File to = new File(inconsistentSubdirectory, filename); + Files.move(from, to); + } + System.out.println(consistent + "\t" + logicalAxiomCount + "\t" + ((unsatisfiableClasses != null) ? unsatisfiableClasses.size() : "n/a")); + reasoner.dispose(); + } catch (Exception e){ + e.printStackTrace(); + try { + reasoner = reasonerFactory.createNonBufferingReasoner(ontology, new SimpleConfiguration(new ConsoleProgressMonitor())); + int logicalAxiomCount = ontology.getLogicalAxiomCount(); + boolean consistent = reasoner.isConsistent(); + Set<OWLClass> unsatisfiableClasses = null; + if(consistent){ + unsatisfiableClasses = reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom(); + if(!unsatisfiableClasses.isEmpty()){ + File to = new File(incoherentSubdirectory, filename); + Files.move(from, to); + } else { + File to = new File(correctSubdirectory, filename); + Files.move(from, to); + } + } else { + File to = new File(inconsistentSubdirectory, filename); + Files.move(from, to); + } + System.out.println(consistent + "\t" + logicalAxiomCount + "\t" + ((unsatisfiableClasses != null) ? unsatisfiableClasses.size() : "n/a")); + reasoner.dispose(); + } catch (Exception e1){ + File to = new File(errorSubdirectory, filename); + try { + Files.move(from, to); + } catch (IOException e2) { + e2.printStackTrace(); + } + } + } + } + + protected OWLOntology loadOWLOntology(URL url) { + OWLOntology ontology = loadFromLocal(url); + if(ontology == null){ + File file = null; + try { + file = downloadFile(url); + if(file != null){ + ontology = man.loadOntologyFromOntologyDocument(file); + } + } catch (Exception e) { + e.printStackTrace(); + String filename = getFilename(url); + File to = new File(errorSubdirectory, filename); + try { + Files.move(file, to); + } catch (IOException e2) { + e2.printStackTrace(); + } + } + } + return ontology; + } + + private OWLOntology loadFromLocal(URL url){ + String filename = getFilename(url); + for(File parent : Arrays.asList(directory)){ + File file = new File(parent, filename); + if(file.exists()){ + try { + OWLOntology ontology = man.loadOntologyFromOntologyDocument(file); + return ontology; + } catch(Exception e){ + e.printStackTrace(); + File to = new File(errorSubdirectory, filename); + try { + Files.move(file, to); + } catch (IOException e2) { + e2.printStackTrace(); + } + } + } + } + return null; + } + + private String getFilename(URL url){ + return ontologyURLs.get(url); +// String filename = url.toString().substring(url.toString().lastIndexOf("/")); +// return filename; + } + + /** + * Download the file such that later on we can load it from the local file system. + */ + protected File downloadFile(URL url){ + + String filename = getFilename(url); + File file = new File(directory + "/" + filename); + if(!file.exists()){ + System.out.print("Downloading file..."); + try { + InputStream is = url.openConnection().getInputStream(); + OutputStream out = new FileOutputStream(file); + int read = 0; + byte[] bytes = new byte[1024]; + + while ((read = is.read(bytes)) != -1) { + out.write(bytes, 0, read); + } + + is.close(); + out.flush(); + out.close(); + System.out.println("done."); + return file; + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + add403Error(url); + } + } + return null; + } + + private void add403Error(URL url){ + try { + Files.append(url.toString() + "\n", new File(directory, "403.txt"), Charset.defaultCharset()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public Collection<OWLOntology> loadOntologies() { + return ontologies; + } + + @Override + public Collection<OWLOntology> loadIncoherentOntologies() { + return incoherentOntologies; + } + + @Override + public Collection<OWLOntology> loadInconsistentOntologies() { + return inconsistentOntologies; + } + + class OntologyLoadingTask implements Runnable{ + + private URL url; + + public OntologyLoadingTask(URL url) { + this.url = url; + } + + @Override + public void run() { + System.out.println("Processing " + ontologyURLs.get(url)); + OWLOntology ontology = loadOWLOntology(url); + if(ontology != null){ + if(analyze){ + analyzeAndCategorizeOntology(ontology, getFilename(url)); + } else { + ontologies.add(ontology); + } + } + } + + } + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/dataset/BioPortalDataset.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/dataset/BioPortalDataset.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/dataset/BioPortalDataset.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,34 @@ +package org.dllearner.kb.dataset; + +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URLEncoder; + +import org.dllearner.kb.repository.OntologyRepositoryEntry; +import org.dllearner.kb.repository.bioportal.BioPortalRepository; + +public class BioPortalDataset extends AbstractOWLOntologyDataset{ + + private static final String name = "BioPortal"; + + public BioPortalDataset() { + super(name); + } + + @Override + protected void addOntologyURLs() { + BioPortalRepository bioportal = new BioPortalRepository(); + bioportal.initialize(); + for (OntologyRepositoryEntry entry : bioportal.getEntries()) { + try { + String name = URLEncoder.encode(entry.getOntologyShortName(), "UTF-8"); + super.ontologyURLs.put(entry.getPhysicalURI().toURL(), name); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/dataset/OWLOntologyDataset.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/dataset/OWLOntologyDataset.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/dataset/OWLOntologyDataset.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,16 @@ +package org.dllearner.kb.dataset; + +import java.io.File; +import java.util.Collection; + +import org.semanticweb.owlapi.model.OWLOntology; + +public interface OWLOntologyDataset { + + static File datasetDirectory = new File("dataset"); + + Collection<OWLOntology> loadOntologies(); + Collection<OWLOntology> loadIncoherentOntologies(); + Collection<OWLOntology> loadInconsistentOntologies(); + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/dataset/TONESDataset.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/dataset/TONESDataset.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/dataset/TONESDataset.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,36 @@ +package org.dllearner.kb.dataset; + +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URLEncoder; + +import org.dllearner.kb.repository.OntologyRepositoryEntry; +import org.dllearner.kb.repository.tones.TONESRepository; + +public class TONESDataset extends AbstractOWLOntologyDataset{ + + private static final String name = "TONES"; + + public TONESDataset() { + super(name); + } + + @Override + protected void addOntologyURLs() { + TONESRepository tones = new TONESRepository(); + tones.initialize(); + for (OntologyRepositoryEntry entry : tones.getEntries()) { + try { + String name = URLEncoder.encode(entry.getOntologyShortName(), "UTF-8"); + ontologyURLs.put(entry.getPhysicalURI().toURL(), name); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + + + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepository.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepository.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepository.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,32 @@ +package org.dllearner.kb.repository; + +import java.util.Collection; +import java.util.List; + +public interface OntologyRepository { + + /** + * Gets the name of the repository + * @return A short name for the repository + */ + String getName(); + + /** + * Gets a description of the location of the repository + * @return A human readable description of the repository location + */ + String getLocation(); + + + /** + * Ensures the repository is up to date + */ + void refresh(); + + void initialize(); + + Collection<OntologyRepositoryEntry> getEntries(); + + List<Object> getMetaDataKeys(); + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryEntry.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryEntry.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryEntry.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,33 @@ +package org.dllearner.kb.repository; + +import java.net.URI; + +public interface OntologyRepositoryEntry { + /** + * Gets a short human readable name for this entry + * @return A short human readable name + */ + String getOntologyShortName(); + + + /** + * Gets the URI of the ontology that is described by this entry. + * @return The ontology URI. + */ + URI getOntologyURI(); + + + /** + * Gets the physical URI of the ontology that is described by this entry. + * @return The physical URI. + */ + URI getPhysicalURI(); + + + /** + * Gets associated metadata. + * @param key The key that describes the metadata + * @return The metadata or <code>null</code> if there is no metadata associated with this key. + */ + String getMetaData(Object key); +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryManager.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryManager.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/OntologyRepositoryManager.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,32 @@ +package org.dllearner.kb.repository; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class OntologyRepositoryManager { + private static OntologyRepositoryManager instance; + + private List<OntologyRepository> repositories; + + private OntologyRepositoryManager() { + repositories = new ArrayList<OntologyRepository>(); + } + + public static synchronized OntologyRepositoryManager getManager() { + if(instance == null) { + instance = new OntologyRepositoryManager(); + } + return instance; + } + + + public void addRepository(OntologyRepository repository) { + repositories.add(repository); + } + + public Collection<OntologyRepository> getOntologyRepositories() { + return Collections.unmodifiableList(repositories); + } +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/BioPortalRepository.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/BioPortalRepository.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/BioPortalRepository.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,166 @@ +package org.dllearner.kb.repository.bioportal; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.apache.log4j.Logger; +import org.dllearner.kb.repository.OntologyRepository; +import org.dllearner.kb.repository.OntologyRepositoryEntry; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLOntology; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.KXml2Driver; + +public class BioPortalRepository implements OntologyRepository { + + private static final Logger log = Logger.getLogger(BioPortalRepository.class); + + private String apiKey = "8fadfa2c-47de-4487-a1f5-b7af7378d693"; + private String serviceURL = "http://rest.bioontology.org/bioportal/ontologies"; + + private List<OntologyRepositoryEntry> entries = new ArrayList<OntologyRepositoryEntry>(); + + @Override + public String getName() { + return "BioPortal"; + } + + @Override + public String getLocation() { + return "http://www.bioontology.org/"; + } + + @Override + public void initialize() { + refresh(); + } + + @Override + public void refresh() { + fillRepository(); + } + + private void fillRepository(){ + XStream xstream = new XStream(new KXml2Driver()); + xstream.alias("success", Success.class); + xstream.alias("data", Data.class); + xstream.alias("ontologyBean", OntologyBean.class); +// xstream.alias("userAcl", UserAcl.class); + xstream.alias("userEntry", UserEntry.class); + + InputStream is = null; + try { + is = getInputStream(new URL(withAPIKey(serviceURL))); + } catch (IOException e) { + e.printStackTrace(); + } + if (is == null) { + return; + } + Success success = (Success) xstream.fromXML(is); + if (success == null) { + return; + } + List<OntologyBean> beans = success.getData().getOntologyBeans(); + entries = new ArrayList<OntologyRepositoryEntry>(); + for(OntologyBean bean : beans){ + URI physicalURI = URI.create(withAPIKey(serviceURL + "/download/" + bean.getId())); + String shortName = bean.getDisplayLabel(); + boolean add = false; + for(String filename : bean.getFilenames()){ + if(filename.endsWith(".owl") || filename.endsWith("rdf") || filename.endsWith(".obo") || filename.endsWith(".nt") || filename.endsWith("*.ttl")){ + add = true; + break; + } + } + if(add){ + entries.add(new RepositoryEntry(physicalURI, physicalURI, shortName)); + } + } + log.info("Loaded " + entries.size() + " ontology entries from BioPortal."); + } + + @Override + public Collection<OntologyRepositoryEntry> getEntries() { + return entries; + } + + @Override + public List<Object> getMetaDataKeys() { + // TODO Auto-generated method stub + return null; + } + + private InputStream getInputStream(URL url) throws IOException { + if (url.getProtocol().equals("http")) { + URLConnection conn; + conn = url.openConnection(); + conn.setRequestProperty("Accept", "application/rdf+xml"); + conn.addRequestProperty("Accept", "text/xml"); + conn.addRequestProperty("Accept", "*/*"); + return conn.getInputStream(); + } else { + return url.openStream(); + } + } + + private String withAPIKey(String url){ + return url + "?apikey=" + apiKey; + } + + public static void main(String[] args) throws Exception{ + Collection<OntologyRepositoryEntry> entries = new BioPortalRepository().getEntries(); + for(OntologyRepositoryEntry entry : entries){ + System.out.println("Loading " + entry.getOntologyShortName()); + System.out.println("From " + entry.getPhysicalURI()); + OWLOntology ont = OWLManager.createOWLOntologyManager().loadOntology(IRI.create(entry.getPhysicalURI())); + System.out.println(ont.getAxiomCount()); + } + + } + + private class RepositoryEntry implements OntologyRepositoryEntry { + + private String shortName; + + private URI ontologyURI; + + private URI physicalURI; + + public RepositoryEntry(URI ontologyURI, URI physicalURI, String shortName) { + this.ontologyURI = ontologyURI; + this.physicalURI = physicalURI; + this.shortName = shortName; + } + + + public String getOntologyShortName() { + return shortName; + } + + + public URI getOntologyURI() { + return ontologyURI; + } + + + public URI getPhysicalURI() { + return physicalURI; + } + + + public String getMetaData(Object key) { + return null; + } + + } + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/Data.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/Data.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/Data.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,16 @@ +package org.dllearner.kb.repository.bioportal; + +import java.util.ArrayList; +import java.util.List; + +public class Data { + List<OntologyBean> list = new ArrayList<OntologyBean>(); + + public void setOntologyBeans(List<OntologyBean> list) { + this.list = list; + } + + public List<OntologyBean> getOntologyBeans() { + return list; + } +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyAclEntry.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyAclEntry.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyAclEntry.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,45 @@ +package org.dllearner.kb.repository.bioportal; + +public class OntologyAclEntry { + private String ontologyId; + private String isOwner; + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "OntologyAclEntry [isOwner=" + isOwner + ", ontologyId=" + + ontologyId + "]"; + } + + /** + * @return the ontologyId + */ + public String getOntologyId() { + return ontologyId; + } + + /** + * @param ontologyId + * the ontologyId to set + */ + public void setOntologyId(String ontologyId) { + this.ontologyId = ontologyId; + } + + /** + * @return the isOwner + */ + public String getIsOwner() { + return isOwner; + } + + /** + * @param isOwner + * the isOwner to set + */ + public void setIsOwner(String isOwner) { + this.isOwner = isOwner; + } +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyBean.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyBean.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/OntologyBean.java 2013-04-15 20:52:41 UTC (rev 3922) @@ -0,0 +1,564 @@ +package org.dllearner.kb.repository.bioportal; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Simplified version of the + * <code>org.ncbo.stanford.bean.concept.OntologyBean</code> class used to decode + * the "ontologyBean" element from a successful REST call to a BioPortal + * ontology service + * + * @author csnyulas + * + */ +public class OntologyBean implements Comparable<OntologyBean> { + + public static final String DEFAULT_SYNONYM_SLOT = "http://www.w3.org/2004/02/skos/core#altLabel"; + public static final String DEFAULT_PREFERRED_NAME_SLOT = "http://www.w3.org/2004/02/skos/core#prefLabel"; + public static final String DEFAULT_DEFINITION_SLOT = "http://www.w3.org/2004/02/skos/core#definition"; + public static final String DEFAULT_AUTHOR_SLOT = "http://purl.org/dc/elements/1.1/creator"; + + private Integer id; + private Integer ontologyId; + // virtual view id(s) on the virtual ontology + private List<Integer> virtualViewIds = new ArrayList<Integer>(0); + private Integer internalVersionNumber; + private List<Integer> userIds; + private String versionNumber; + private String versionStatus; + private Byte isRemote; + private Byte isReviewed; + private Integer statusId; + private Date dateCreated; + private Date dateReleased; + private String oboFoundryId; + private Byte isManual; + private String displayLabel; + private String description; + private String abbreviation; + private String format; + private String contactName; + private String contactEmail; + private String homepage; + private String documentation; + private String publication; + private String urn; + private String codingScheme; + private String targetTerminologies; + private Byte isFlat; + private Byte isFoundry; + private Byte isMetadataOnly; + private String synonymSlot; + private String preferredNameSlot; + private String documentationSlot; + private String authorSlot; + private String slotWithUniqueValue; + private Integer preferredMaximumSubclassLimit; + private String obsoleteParent; + private String naturalLanguage; + private String obsoleteProperty; + private String licenseInformation; + + private String viewingRestriction; + + private List<UserEntry> userAcl = new ArrayList<UserEntry>(0); + + private boolean isView = false; + + // category id(s) + private List<Integer> categoryIds = new ArrayList<Integer>(0); + + // group id(s) + private List<Integer> groupIds = new ArrayList<Integer>(0); + + // file name(s) + private List<String> filenames = new ArrayList<String>(0); + + // source fileItem + // private FileItem fileItem; + + // destination directory + private String filePath; + + // Download location of ontology + private String downloadLocation; + + // views on this ontology version + private List<Integer> hasViews = new ArrayList<Integer>(0); + + // view specific properties + private List<Integer> viewOnOntologyVersionId = new ArrayList<Integer>(0); + private String viewDefinition; + private String viewDefinitionLanguage; + private String viewGenerationEngine; + + @Override + public String toString() { + final int max = 80; + String viewDef = this.getViewDefinition(); + + if (viewDef != null && viewDef.length() > max) { + viewDef = viewDef.substring(0, max) + "..."; + } + + String name = isView ? "OntologyView " : "Ontology "; + + return name + "{Id: " + this.getId() + ", Ontology Id: " + this.getOntologyId() + ", Virtual View Ids: " + + this.getVirtualViewIds() + ", Remote: " + this.getIsRemote() + ", Obo Foundry Id: " + + this.getOboFoundryId() + ", Internal Version Number: " + this.getInternalVersionNumber() + + ", Date Created: " + this.getDateCreated() + ", User Ids: " + this.getUserIds() + + ", Version Number: " + this.getVersionNumber() + ", Version Status: " + this.getVersionStatus() + + ", Display Label: " + this.getDisplayLabel() + ", Description: " + this.getDescription() + + ", Abbreviation: " + this.getAbbreviation() + ", Format: " + this.getFormat() + ", Contact Name: " + + this.getContactName() + ", Contact Email: " + this.getContactEmail() + ", Foundry: " + + this.getIsFoundry() + " Coding Scheme: " + this.getCodingScheme() + ", Target Terminologies: " + + this.getTargetTerminologies() + ", Synonym Slot: " + this.getSynonymSlot() + + ", Preferred Name Slot: " + this.getPreferredNameSlot() + ", View Definition: " + viewDef + + ", View Definition Language: " + this.getViewDefinitionLanguage() + ", View Generation Engine: " + + this.getViewGenerationEngine() + ", View on Ontology Versions: " + this.getViewOnOntologyVersionId() + + "}"; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getOntologyId() { + return ontologyId; + } + + public void setOntologyId(Integer ontologyId) { + this.ontologyId = ontologyId; + } + + public List<Integer> getVirtualViewIds() { + return virtualViewIds; + } + + public void setVirtualViewIds(List<Integer> virtualViewIds) { + this.virtualViewIds = virtualViewIds; + } + + public Integer getInternalVersionNumber() { + return internalVersionNumber; + } + + public void setInternalVersionNumber(Integer internalVersionNumber) { + this.internalVersionNumber = internalVersionNumber; + } + + public List<Integer> getUserIds() { + return userIds; + } + + public void setUserIds(List<Integer> userIds) { + this.userIds = userIds; + } + + public String getVersionNumber() { + return versionNumber; + } + + public void setVersionNumber(String versionNumber) { + this.versionNumber = versionNumber; + } + + public String getVersionStatus() { + return versionStatus; + } + + public void setVersionStatus(String versionStatus) { + this.versionStatus = versionStatus; + } + + public Byte getIsRemote() { + return isRemote; + } + + public void setIsRemote(Byte isRemote) { + this.isRemote = isRemote; + } + + public Byte getIsReviewed() { + return isReviewed; + } + + public void setIsReviewed(Byte isReviewed) { + this.isReviewed = isReviewed; + } + + public Integer getStatusId() { + return statusId; + } + + public void setStatusId(Integer statusId) { + this.statusId = statusId; + } + + public Date getDateCreated() { + return dateCreated; + } + + public void setDateCreated(Date dateCreated) { + this.dateCreated = dateCreated; + } + + public Date getDateReleased() { + return dateReleased; + } + + public void setDateReleased(Date dateReleased) { + this.dateReleased = dateReleased; + } + + public String getOboFoundryId() { + return oboFoundryId; + } + + public void setOboFoundryId(String oboFoundryId) { + this.oboFoundryId = oboFoundryId; + } + + public Byte getIsManual() { + return isManual; + } + + public void setIsManual(Byte isManual) { + this.isManual = isManual; + } + + public String getDisplayLabel() { + return displayLabel; + } + + public void setDisplayLabel(String displayLabel) { + this.displayLabel = displayLabel; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getAbbreviation() { + return abbreviation; + } + + public void setAbbreviation(String abbreviation) { + this.abbreviation = abbreviation; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getContactName() { + return contactName; + } + + public void setContactName(String contactName) { + this.contactName = contactName; + } + + public String getContactEmail() { + return contactEmail; + } + + public void setContactEmail(String contactEmail) { + this.contactEmail = contactEmail; + } + + public String getHomepage() { + return homepage; + } + + public void setHomepage(String homepage) { + this.homepage = homepage; + } + + public String getDocumentation() { + return documentation; + } + + public void setDocumentation(String documentation) { + this.documentation = documentation; + } + + public String getPublication() { + return publication; + } + + public void setPublication(String publication) { + this.publication = publication; + } + + public String getUrn() { + return urn; + } + + public void setUrn(String urn) { + this.urn = urn; + } + + public String getCodingScheme() { + return codingScheme; + } + + public void setCodingScheme(String codingScheme) { + this.codingScheme = codingScheme; + } + + public String getTargetTerminologies() { + return targetTerminologies; + } + + public void setTargetTerminologies(String targetTerminologies) { + this.targetTerminologies = targetTerminologies; + } + + public Byte getIsFlat() { + return isFlat; + } + + public void setIsFlat(Byte isFlat) { + this.isFlat = isFlat; + } + + public Byte getIsFoundry() { + return isFoundry; + } + + public void setIsFoundry(Byte isFoundry) { + this.isFoundry = isFoundry; + } + + public Byte getIsMetadataOnly() { + return isMetadataOnly; + } + + public void setIsMetadataOnly(Byte isMetadataOnly) { + this.isMetadataOnly = isMetadataOnly; + } + + public String getSynonymSlot() { + return synonymSlot; + } + + public void setSynonymSlot(String synonymSlot) { + this.synonymSlot = synonymSlot; + } + + public String getPreferredNameSlot() { + return preferredNameSlot; + } + + public void setPreferredNameSlot(String preferredNameSlot) { + this.preferredNameSlot = preferredNameSlot; + } + + public String getDocumentationSlot() { + return documentationSlot; + } + + public void setDocumentationSlot(String documentationSlot) { + this.documentationSlot = documentationSlot; + } + + public String getAuthorSlot() { + return authorSlot; + } + + public void setAuthorSlot(String authorSlot) { + this.authorSlot = authorSlot; + } + + public String getSlotWithUniqueValue() { + return slotWithUniqueValue; + } + + public void setSlotWithUniqueValue(String slotWithUniqueValue) { + this.slotWithUniqueValue = slotWithUniqueValue; + } + + public Integer getPreferredMaximumSubclassLimit() { + return preferredMaximumSubclassLimit; + } + + public void setPreferredMaximumSubclassLimit(Integer preferredMaximumSubclassLimit) { + this.preferredMaximumSubclassLimit = preferredMaximumSubclassLimit; + } + + public boolean isView() { + return isView; + } + + public void setView(boolean isView) { + this.isView = isView; + } + + public List<Integer> getCategoryIds() { + return categoryIds; + } + + public void setCategoryIds(List<Integer> categoryIds) { + this.categoryIds = categoryIds; + } + + public List<Integer> getGroupIds() { + return groupIds; + } + + public void setGroupIds(List<Integer> groupIds) { + this.groupIds = groupIds; + } + + public List<String> getFilenames() { + return filenames; + } + + public void setFilenames(List<String> filenames) { + this.filenames = filenames; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public List<Integer> getHasViews() { + return hasViews; + } + + public void setHasViews(List<Integer> hasViews) { + this.hasViews = hasViews; + } + + public List<Integer> getViewOnOntologyVersionId() { + return viewOnOntologyVersionId; + } + + public void setViewOnOntologyVersionId(List<Integer> viewOnOntologyVersionId) { + this.viewOnOntologyVersionId = viewOnOntologyVersionId; + } + + public String getViewDefinition() { + return viewDefinition; + } + + public void setViewDefinition(String viewDefinition) { + this.viewDefinition = viewDefinition; + } + + public String getViewDefinitionLanguage() { + return viewDefinitionLanguage; + } + + public void setViewDefinitionLanguage(String viewDefinitionLanguage) { + this.viewDefinitionLanguage = viewDefinitionLanguage; + } + + public String getViewGenerationEngine() { + return viewGenerationEngine; + } + + public void setViewGenerationEngine(String viewGenerationEngine) { + this.viewGenerationEngine = viewGenerationEngine; + } + + public static String getDefaultPreferredNameSlot() { + return DEFAULT_PREFERRED_NAME_SLOT; + } + + public static String getDefaultDefinitionSlot() { + return DEFAULT_DEFINITION_SLOT; + } + + public static String getDefaultAuthorSlot() { + return DEFAULT_AUTHOR_SLOT; + } + + public String getDownloadLocation() { + return downloadLocation; + } + + public void setDownloadLocation(String downloadLocation) { + this.downloadLocation = downloadLocation; + } + + /** + * @return the userAcl + */ + public List<UserEntry> getUserAcl() { + return userAcl; + } + + /** + * @param userAcl + * the userAcl to set + */ + public void setUserAcl(List<UserEntry> userAcl) { + this.userAcl = userAcl; + } + + public String getViewingRestriction() { + return viewingRestriction; + } + + public void setViewingRestriction(String viewingRestriction) { + this.viewingRestriction = viewingRestriction; + } + + public String getObsoleteParent() { + return obsoleteParent; + } + + public void setObsoleteParent(String obsoleteParent) { + this.obsoleteParent = obsoleteParent; + } + + public String getNaturalLanguage() { + return naturalLanguage; + } + + public void setNaturalLanguage(String naturalLanguage) { + this.naturalLanguage = naturalLanguage; + } + + public String getObsoleteProperty() { + return obsoleteProperty; + } + + public void setObsoleteProperty(String obsoleteProperty) { + this.obsoleteProperty = obsoleteProperty; + } + + public String getLicenseInformation() { + return licenseInformation; + } + + public void setLicenseInformation(String licenseInformation) { + this.licenseInformation = licenseInformation; + } + + @Override + public int compareTo(OntologyBean o) { + return this.displayLabel.compareTo(o.getDisplayLabel()); + } + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/Success.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/bioportal/Success.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/biopo... [truncated message content] |
From: <lor...@us...> - 2013-04-12 10:57:06
|
Revision: 3921 http://sourceforge.net/p/dl-learner/code/3921 Author: lorenz_b Date: 2013-04-12 10:57:03 +0000 (Fri, 12 Apr 2013) Log Message: ----------- Updated QTL. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/Filters.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/QuestionBasedQueryTreeFilter.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-12 10:21:20 UTC (rev 3920) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-12 10:57:03 UTC (rev 3921) @@ -20,6 +20,7 @@ package org.dllearner.algorithms.qtl; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -40,6 +41,7 @@ import org.dllearner.algorithms.qtl.exception.NegativeTreeCoverageExecption; import org.dllearner.algorithms.qtl.exception.TimeOutException; import org.dllearner.algorithms.qtl.filters.QueryTreeFilter; +import org.dllearner.algorithms.qtl.filters.QuestionBasedQueryTreeFilter; import org.dllearner.algorithms.qtl.operations.NBR; import org.dllearner.algorithms.qtl.operations.lgg.LGGGenerator; import org.dllearner.algorithms.qtl.operations.lgg.LGGGeneratorImpl; @@ -365,7 +367,7 @@ if(logger.isDebugEnabled()){ logger.debug("LGG: \n" + lgg.getStringRepresentation()); } - logger.info(lgg.toSPARQLQueryString(enableNumericLiteralFilters, prefixes)); + logger.info(lgg.toSPARQLQueryString(true, enableNumericLiteralFilters, prefixes)); } public void setEnableNumericLiteralFilters(boolean enableNumericLiteralFilters) { @@ -429,6 +431,7 @@ PosOnlyLP lp = new PosOnlyLP(); lp.setPositiveExamples(Helper.getIndividualSet(positiveExamples)); QTL qtl = new QTL(lp, ks); + qtl.addQueryTreeFilter(new QuestionBasedQueryTreeFilter(Arrays.asList("soccer club", "Premier League"))); qtl.init(); qtl.start(); String query = qtl.getBestSPARQLQuery(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java 2013-04-12 10:21:20 UTC (rev 3920) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java 2013-04-12 10:57:03 UTC (rev 3921) @@ -130,9 +130,9 @@ String toSPARQLQueryString(); - String toSPARQLQueryString(boolean filtered); + String toSPARQLQueryString(boolean filterMeaninglessProperties, boolean useNumericalFilters); - String toSPARQLQueryString(boolean filtered, Map<String, String> prefixMap); + String toSPARQLQueryString(boolean filterMeaninglessProperties, boolean useNumericalFilters, Map<String, String> prefixMap); Query toSPARQLQuery(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java 2013-04-12 10:21:20 UTC (rev 3920) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java 2013-04-12 10:57:03 UTC (rev 3921) @@ -703,7 +703,7 @@ StringBuilder sb = new StringBuilder(); sb.append("SELECT DISTINCT ?x0 WHERE {\n"); List<String> filters = new ArrayList<String>(); - buildSPARQLQueryString(this, sb, false, filters); + buildSPARQLQueryString(this, sb, true, false, filters); for(String filter : filters){ sb.append(filter).append("\n"); } @@ -711,13 +711,12 @@ return sb.toString(); } - @Override - public String toSPARQLQueryString(boolean filtered) { - return toSPARQLQueryString(filtered, Collections.<String, String>emptyMap()); + public String toSPARQLQueryString(boolean filterMeaninglessProperties, boolean useNumericalFilters) { + return toSPARQLQueryString(filterMeaninglessProperties, useNumericalFilters, Collections.<String, String>emptyMap()); } @Override - public String toSPARQLQueryString(boolean filtered, Map<String, String> prefixMap) { + public String toSPARQLQueryString(boolean filterMeaninglessProperties, boolean useNumericalFilters, Map<String, String> prefixMap) { if(children.isEmpty()){ return "SELECT ?x0 WHERE {?x0 ?y ?z.}"; } @@ -725,11 +724,11 @@ StringBuilder sb = new StringBuilder(); List<String> filters = new ArrayList<String>(); sb.append("SELECT DISTINCT ?x0 WHERE {\n"); - buildSPARQLQueryString(this, sb, filtered, filters); + buildSPARQLQueryString(this, sb, filterMeaninglessProperties, useNumericalFilters, filters); for(String filter : filters){ sb.append(filter).append("\n"); } - sb.append("}"); + sb.append("}");System.out.println(sb.toString()); Query query = QueryFactory.create(sb.toString(), Syntax.syntaxARQ); query.setPrefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); query.setPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#"); @@ -742,12 +741,14 @@ return query.toString(); } - private void buildSPARQLQueryString(QueryTree<N> tree, StringBuilder sb, boolean filtered, List<String> filters){ + private void buildSPARQLQueryString(QueryTree<N> tree, StringBuilder sb, boolean filterMeaninglessProperties, boolean useNumericalFilters, List<String> filters){ Object subject = null; if(tree.getUserObject().equals("?")){ subject = "?x" + cnt++; - if(tree.isLiteralNode() && !tree.getLiterals().isEmpty()){ - filters.add(getFilter(subject.toString(), tree.getLiterals())); + if(useNumericalFilters){ + if(tree.isLiteralNode() && !tree.getLiterals().isEmpty()){ + filters.add(getFilter(subject.toString(), tree.getLiterals())); + } } } else { subject = "<" + tree.getUserObject() + ">"; @@ -757,7 +758,7 @@ if(!tree.isLeaf()){ for(QueryTree<N> child : tree.getChildren()){ predicate = tree.getEdge(child); - if(filtered){ + if(filterMeaninglessProperties){ if(Filters.getAllFilterProperties().contains(predicate.toString())){ continue; } @@ -771,7 +772,7 @@ } sb.append(subject).append(" <").append(predicate).append("> ").append(object).append(".\n"); if(!objectIsResource){ - buildSPARQLQueryString(child, sb, filtered, filters); + buildSPARQLQueryString(child, sb, filterMeaninglessProperties, useNumericalFilters, filters); } } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/Filters.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/Filters.java 2013-04-12 10:21:20 UTC (rev 3920) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/Filters.java 2013-04-12 10:57:03 UTC (rev 3921) @@ -57,6 +57,7 @@ filters.add(FOAF.name.toString()); filters.add(FOAF.firstName.toString()); // filters.add(FOAF.givenname.toString()); + filters.add(FOAF.primaryTopic.toString()); return filters; } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/QuestionBasedQueryTreeFilter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/QuestionBasedQueryTreeFilter.java 2013-04-12 10:21:20 UTC (rev 3920) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/filters/QuestionBasedQueryTreeFilter.java 2013-04-12 10:57:03 UTC (rev 3921) @@ -1,5 +1,6 @@ package org.dllearner.algorithms.qtl.filters; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -15,7 +16,7 @@ public class QuestionBasedQueryTreeFilter implements QueryTreeFilter{ -private Set<String> questionWords; + private Collection<String> questionWords; private AbstractStringMetric qGramMetric; private AbstractStringMetric levensteinMetric; @@ -25,7 +26,7 @@ private int topK = 3; private double topKSumThreshold = 0.8; - public QuestionBasedQueryTreeFilter(Set<String> questionWords){ + public QuestionBasedQueryTreeFilter(Collection<String> questionWords){ this.questionWords = questionWords; qGramMetric = new QGramsDistance(); levensteinMetric = new Levenshtein(); @@ -39,7 +40,7 @@ return copy; } - public Set<String> getQuestionWords(){ + public Collection<String> getQuestionWords(){ return questionWords; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-04-12 10:21:23
|
Revision: 3920 http://sourceforge.net/p/dl-learner/code/3920 Author: jenslehmann Date: 2013-04-12 10:21:20 +0000 (Fri, 12 Apr 2013) Log Message: ----------- minor QTL change Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-12 09:59:53 UTC (rev 3919) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-12 10:21:20 UTC (rev 3920) @@ -424,11 +424,9 @@ positiveExamples.add("http://dbpedia.org/resource/Liverpool_F.C."); positiveExamples.add("http://dbpedia.org/resource/Chelsea_F.C."); - ComponentManager cm = ComponentManager.getInstance(); SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpedia()); ks.init(); PosOnlyLP lp = new PosOnlyLP(); - cm.getPool().registerComponent(lp); lp.setPositiveExamples(Helper.getIndividualSet(positiveExamples)); QTL qtl = new QTL(lp, ks); qtl.init(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-04-12 09:59:56
|
Revision: 3919 http://sourceforge.net/p/dl-learner/code/3919 Author: jenslehmann Date: 2013-04-12 09:59:53 +0000 (Fri, 12 Apr 2013) Log Message: ----------- changed endpoint Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-11 08:03:30 UTC (rev 3918) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-04-12 09:59:53 UTC (rev 3919) @@ -425,7 +425,7 @@ positiveExamples.add("http://dbpedia.org/resource/Chelsea_F.C."); ComponentManager cm = ComponentManager.getInstance(); - SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpediaLiveAKSW()); + SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpedia()); ks.init(); PosOnlyLP lp = new PosOnlyLP(); cm.getPool().registerComponent(lp); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-04-11 08:03:35
|
Revision: 3918 http://sourceforge.net/p/dl-learner/code/3918 Author: christinaunger Date: 2013-04-11 08:03:30 +0000 (Thu, 11 Apr 2013) Log Message: ----------- German lexicon Modified Paths: -------------- trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex Added Paths: ----------- trunk/components-ext/src/main/resources/tbsl/lexicon/german.lex Modified: trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2013-04-10 10:07:59 UTC (rev 3917) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/english.lex 2013-04-11 08:03:30 UTC (rev 3918) @@ -166,7 +166,7 @@ there || (DP (NP EX:'there')) || <x,l1,<<e,t>,t>,[l1:[|]],[],[],[]> -// NUMBERS (1-10) +// NUMBERS (1-20) // --------------------- one || (NP NUM:'one' NP*) || <x,l1,<e,t>,[l1:[x|count(x,1)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,1)]],[],[],[ SLOT_arg/LITERAL/x ]> @@ -179,8 +179,8 @@ eight || (NP NUM:'eight' NP*) || <x,l1,<e,t>,[l1:[x|count(x,8)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,8)]],[],[],[ SLOT_arg/LITERAL/x ]> nine || (NP NUM:'nine' NP*) || <x,l1,<e,t>,[l1:[x|count(x,9)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,9)]],[],[],[ SLOT_arg/LITERAL/x ]> ten || (NP NUM:'ten' NP*) || <x,l1,<e,t>,[l1:[x|count(x,10)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> - eleven || (NP NUM:'one' NP*) || <x,l1,<e,t>,[l1:[x|count(x,11)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,11)]],[],[],[ SLOT_arg/LITERAL/x ]> - twelve || (NP NUM:'two' NP*) || <x,l1,<e,t>,[l1:[x|count(x,12)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,12)]],[],[],[ SLOT_arg/LITERAL/x ]> + eleven || (NP NUM:'eleven' NP*) || <x,l1,<e,t>,[l1:[x|count(x,11)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,11)]],[],[],[ SLOT_arg/LITERAL/x ]> + twelve || (NP NUM:'twelve' NP*) || <x,l1,<e,t>,[l1:[x|count(x,12)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,12)]],[],[],[ SLOT_arg/LITERAL/x ]> thirteen || (NP NUM:'thirteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,13)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,13)]],[],[],[ SLOT_arg/LITERAL/x ]> fourteen || (NP NUM:'fourteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,14)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,14)]],[],[],[ SLOT_arg/LITERAL/x ]> fifteen || (NP NUM:'fifteen' NP*) || <x,l1,<e,t>,[l1:[x|count(x,15)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,15)]],[],[],[ SLOT_arg/LITERAL/x ]> @@ -210,3 +210,4 @@ eighteen || (NUM NUM:'eighteen') || <x,l1,e,[l1:[x|count(x,18)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,18)]],[],[],[ SLOT_arg/LITERAL/x ]> nineteen || (NUM NUM:'nineteen') || <x,l1,e,[l1:[x|count(x,19)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,19)]],[],[],[ SLOT_arg/LITERAL/x ]> twenty || (NUM NUM:'twenty') || <x,l1,e,[l1:[x|count(x,20)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,20)]],[],[],[ SLOT_arg/LITERAL/x ]> + Added: trunk/components-ext/src/main/resources/tbsl/lexicon/german.lex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/lexicon/german.lex (rev 0) +++ trunk/components-ext/src/main/resources/tbsl/lexicon/german.lex 2013-04-11 08:03:30 UTC (rev 3918) @@ -0,0 +1,275 @@ + +// SEIN +// ---- + + ist || (S DP[subject] (VP V:'ist' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + ist || (S DP[subject] (VP V:'ist' ADJ[comp])) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + war || (S DP[subject] (VP V:'war' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + war || (S DP[subject] (VP V:'war' ADJ[comp])) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + + sind || (S DP[subject] (VP V:'sind' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + sind || (S DP[subject] (VP V:'sind' ADJ[comp])) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + waren || (S DP[subject] (VP V:'waren' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + waren || (S DP[subject] (VP V:'waren' ADJ[comp])) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + + die .+ ist || (NP NP* (S C:'die' (VP DP[object] V:'ist'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + der .+ ist || (NP NP* (S C:'der' (VP DP[object] V:'ist'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + das .+ ist || (NP NP* (S C:'das' (VP DP[object] V:'ist'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + die .+ war || (NP NP* (S C:'die' (VP DP[object] V:'war'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + der .+ war || (NP NP* (S C:'der' (VP DP[object] V:'war'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + das .+ war || (NP NP* (S C:'das' (VP DP[object] V:'war'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + die .+ sind || (NP NP* (S C:'die' (VP DP[object] V:'sind'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + die .+ waren || (NP NP* (S C:'die' (VP DP[object] V:'waren'))) || <x, l1, t, [ l1:[ | x=y ] ], [ (l2,y,object,<<e,t>,t>) ], [ l2=l1 ],[]> + + gibt es || (S V:'gibt' DP:'es' DP[dp]) || <x, l1, t, [ l1:[ | ] ], [ (l2,x,dp,<<e,t>,t>) ], [ l2=l1 ],[]> + gibt es || (S DP[dp] (VP V:'gibt' DP:'es')) || <x, l1, t, [ l1:[ | ] ], [ (l2,x,dp,<<e,t>,t>) ], [ l2=l1 ],[]> + + +// SEIN: YES/NO QUESTIONS + + ist || (S (VP V:'ist' DP[subject] DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + ist || (S (VP V:'ist' DP[subject] ADJ[comp])) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + war || (S V:'was' DP[subject] DP[object]) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + war || (S V:'was' DP[subject] ADJ[comp]) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + sind || (S V:'sind' DP[subject] DP[object]) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + sind || (S V:'sind' DP[subject] ADJ[comp]) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + waren || (S V:'waren' DP[subject] DP[object]) || <x, l1, t, [ l1:[ | ], l2:[ | x=y ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + waren || (S V:'waren' DP[subject] ADJ[comp]) || <x, l1, t, [ l1:[ | x=y ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + + did || (S V:'did' S*) || <x,l1,t,[ l1:[|] ],[],[],[]> + +// IMPERATIVES +// ------------ + + gib mir || (S (VP V:'gib' (DP N:'mir') DP[object])) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + zeige mir || (S (VP V:'zeige' (DP N:'mir') DP[object])) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + zeig mir || (S (VP V:'zeig' (DP N:'mir') DP[object])) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + zeige || (S (VP V:'zeige' DP[object])) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + zeig || (S (VP V:'zeig' DP[object])) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + liste .+ auf || (S (VP V:'liste' DP[object] V:'auf')) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + finde || (S (VP V:'finde' DP[object])) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + suche || (S (VP V:'suche' DP[object])) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + suche .+ raus || (S (VP V:'suche' DP[object] V:'raus')) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + suche .+ zusammen || (S (VP V:'suche' DP[object] V:'zusammen')) || <x,l1,t,[ l1:[ ?x | x=y ] ],[ (l2,y,object,<<e,t>,t>) ],[ l1=l2 ],[]> + + + +// DETERMINER +// ---------- + + ein || (DP DET:'ein' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] SOME y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + eine || (DP DET:'eine' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] SOME y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + einen || (DP DET:'einen' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] SOME y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + einem || (DP DET:'einem' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] SOME y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + einige || (DP DET:'einige' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] SOME y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + einigen || (DP DET:'einigen' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] SOME y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + alle || (DP DET:'alle' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] EVERY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + allen || (DP DET:'allen' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] EVERY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + all die || (DP DET:'all' DET:'die' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + all den || (DP DET:'all' DET:'den' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + jede || (DP DET:'jede' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] EVERY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + jeder || (DP DET:'jeder' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] EVERY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + jedes || (DP DET:'jedes' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] EVERY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + jedem || (DP DET:'jedem' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] EVERY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + jeden || (DP DET:'jeden' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] EVERY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + kein || (DP DET:'kein' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] NO y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + keine || (DP DET:'keine' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] NO y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + keinem || (DP DET:'keinem' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] NO y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + keinen || (DP DET:'keinen' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] NO y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + die meisten || (DP DET:'die' ADJ:'meisten' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] THEMOST y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + den meisten || (DP DET:'den' ADJ:'meisten' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] THEMOST y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + die wenigsten || (DP DET:'die' ADJ:'wenigsten' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] THELEAST y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + den wenigsten || (DP DET:'den' ADJ:'wenigsten' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] THELEAST y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + wenige || (DP DET:'wenig' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] AFEW y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + wenig || (DP DET:'wenig' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] AFEW y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + manche || (DP DET:'manche' NP[noun]) || <x, l1, <<e,t>,t>, [ l1:[ x | ] ], [ (l2,x,noun,<e,t>) ], [ l2=l1 ],[]> + welche || (DP DET:'welche' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + welcher || (DP DET:'welcher' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + welches || (DP DET:'welches' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + welchen || (DP DET:'welchen' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + welchem || (DP DET:'welchem' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + was fuer || (DP DET:'was' DET:'fuer' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + was fuer ein || (DP DET:'was' DET:'fuer' DET:'ein' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + was fuer eine || (DP DET:'was' DET:'fuer' DET:'eine' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ ?y | ] ], [ (l2,y,noun,<e,t>) ], [ l2=l1 ],[]> + viele || (DP DET:'viele' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] MANY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + vielen || (DP DET:'vielen' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] MANY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + viel || (DP DET:'viel' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] MANY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[]> + der || (DP DET:'der' NP[noun]) || <x, l1, <<e,t>,t>, [ l1:[x|] ], [ (l2,x,noun,<e,t>) ], [ l2=l1 ],[]> + die || (DP DET:'die' NP[noun]) || <x, l1, <<e,t>,t>, [ l1:[x|] ], [ (l2,x,noun,<e,t>) ], [ l2=l1 ],[]> + das || (DP DET:'das' NP[noun]) || <x, l1, <<e,t>,t>, [ l1:[x|] ], [ (l2,x,noun,<e,t>) ], [ l2=l1 ],[]> + dem || (DP DET:'dem' NP[noun]) || <x, l1, <<e,t>,t>, [ l1:[x|] ], [ (l2,x,noun,<e,t>) ], [ l2=l1 ],[]> + den || (DP DET:'den' NP[noun]) || <x, l1, <<e,t>,t>, [ l1:[x|] ], [ (l2,x,noun,<e,t>) ], [ l2=l1 ],[]> + mindestens || (DP DET:'mindestens' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), greaterorequal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | greaterorequal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + hoechstens || (DP DET:'hoechstens' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), lessorequal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | lessorequal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + mehr als || (DP DET:'mehr' DET:'als' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), greater(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | greater(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + weniger als || (DP DET:'weniger' DET:'als' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), less(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | less(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + genau || (DP DET:'genau' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), equal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | equal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + insgesamt || (DP DET:'insgesamt' NUM[num] NP[noun]) || <y,l1,<<e,t>,t>,[ l1:[ y,c | count(y,c), equal(c,x) ] ],[(l2,y,noun,<e,t>),(l3,x,num,e)],[l2=l1,l3=l1],[ SLOT_arg/RESOURCE/y ]> ;; <y,l1,<<e,t>,t>,[l1:[ y | equal(y,x) ]],[(l2,y,noun,<e,t>),(l3,x,num,e)],[ l1=l2, l2=l3 ],[ SLOT_arg/LITERAL/y ]> + // also sum(a,x,s) ? + + andere || (NP ADJ:'other' NP*) || <x,l1,<e,t>,[ l1:[ | ] ], [],[],[]> + andere || (NP ADJ:'other' NP*) || <x,l1,<e,t>,[ l1:[ | ] ], [],[],[]> + andere || (NP ADJ:'other' NP*) || <x,l1,<e,t>,[ l1:[ | ] ], [],[],[]> + + die wenigsten || (ADJ DET:'die' DET:'wenigsten' ADJ*) || <x,l1,<e,t>,[ l1:[ | minimum(a,x,x) ] ], [],[],[]> + den wenigsten || (ADJ DET:'den' DET:'wenigsten' ADJ*) || <x,l1,<e,t>,[ l1:[ | minimum(a,x,x) ] ], [],[],[]> + + wieviele || (DET DET:'wieviele') || <x,l1,e, [ l1:[ ?x | ] ], [],[],[ SLOT_arg/DATATYPEPROPERTY/x ]> + wieviel || (DET DET:'wieviel') || <x,l1,e, [ l1:[ ?c,x | count(a,x,c) ] ], [],[],[ SLOT_arg/OBJECTPROPERTY_CLASS/x ]> + ein || (DET DET:'ein') || <x,l1,e, [ l1:[ x |] ], [],[],[]> + eine || (DET DET:'eine') || <x,l1,e, [ l1:[ x |] ], [],[],[]> + welche || (DET DET:'welche') || <x,l1,e, [ l1:[ ?x |] ], [],[],[]> + welcher || (DET DET:'welcher') || <x,l1,e, [ l1:[ ?x |] ], [],[],[]> + welches || (DET DET:'welches') || <x,l1,e, [ l1:[ ?x |] ], [],[],[]> + + der || (DET DET:'der') || <x,l1,e, [ l1:[ x |] ], [],[],[]> + die || (DET DET:'die') || <x,l1,e, [ l1:[ x |] ], [],[],[]> + das || (DET DET:'das') || <x,l1,e, [ l1:[ x |] ], [],[],[]> + den || (DET DET:'den') || <x,l1,e, [ l1:[ x |] ], [],[],[]> + dam || (DET DET:'dem') || <x,l1,e, [ l1:[ x |] ], [],[],[]> + die meisten || (DET DET:'die' DET:'meisten') || <y, l1, e, [ l1:[ | l2:[ y | ] THEMOST y l3:[|] ] ], [], [],[]> + den meisten || (DET DET:'den' DET:'meisten') || <y, l1, e, [ l1:[ | l2:[ y | ] THEMOST y l3:[|] ] ], [], [],[]> + die wenigsten || (DET DET:'die' DET:'wenigsten') || <y, l1, e, [ l1:[ | l2:[ y | ] THELEAST y l3:[|] ] ], [], [],[]> + den wenigsten || (DET DET:'den' DET:'wenigsten') || <y, l1, e, [ l1:[ | l2:[ y | ] THELEAST y l3:[|] ] ], [], [],[]> + + + // NECESSARY "CHEAT" + hoechste || (NP ADJ:'hoechste' NP*) || <x, l1, e, [ l1:[ | maximum(x) ] ], [], [],[]> ;; <x, l1, e, [ l1:[ j | SLOT_high(x,j), maximum(j) ] ],[],[],[ SLOT_high/DATATYPEPROPERTY/height ]> + hoechsten || (NP ADJ:'hoechsten' NP*) || <x, l1, e, [ l1:[ | maximum(x) ] ], [], [],[]> ;; <x, l1, e, [ l1:[ j | SLOT_high(x,j), maximum(j) ] ],[],[],[ SLOT_high/DATATYPEPROPERTY/height ]> + + // WIE + // wie || (DP DET:'wie' ADJ[adj]) || <x,l1,<<e,t>,t>,[ l1:[?x,|] ],[ (x,l2,adj,<e,t>) ],[l2=l1],[]> + + +// EMPTY STUFF +// ------------ + + auch || (VP ADV:'auch' VP*) || <x,l1,t,[ l1:[|] ],[],[],[]> + auch || (DP ADV:'auch' DP*) || <x,l1,<<e,t>,t>,[ l1:[|] ],[],[],[]> + + hat || (S DP[subject] (VP V:'hat' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | empty(x,y) ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + haben || (S DP[subject] (VP V:'haben' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | empty(x,y) ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + hatte || (S DP[subject] (VP V:'hatte' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | empty(x,y) ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + hatten || (S DP[subject] (VP V:'hatten' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | empty(x,y) ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + +// mit || (NP NP* (PP P:'mit' DP[dp])) || <x,l1,<e,t>,[ l1:[| empty(x,y) ] ],[(l2,y,dp,<<e,t>,t>)],[l2=l1],[]> + +// people || (NP N:'people') || <x,l1,<e,t>,[ l1:[|] ],[],[],[]> + + +// WH WORDS +// -------- + + was || (DP WH:'was') || <x, l1, <<e,t>,t>, [ l1:[ ?x | ] ], [], [], []> + wer || (DP WH:'wer') || <x, l1, <<e,t>,t>, [ l1:[ ?x | ] ], [], [], []> + wen || (DP WH:'wen') || <x, l1, <<e,t>,t>, [ l1:[ ?x | ] ], [], [], []> + wem || (DP WH:'wem') || <x, l1, <<e,t>,t>, [ l1:[ ?x | ] ], [], [], []> + +// welche || (DP WH:'welche') || <x, l1, <<e,t>,t>, [ l1:[ ?x | ] ], [], [], []> +// welches || (DP WH:'welche') || <x, l1, <<e,t>,t>, [ l1:[ ?x | ] ], [], [], []> +// welcher || (DP WH:'welche') || <x, l1, <<e,t>,t>, [ l1:[ ?x | ] ], [], [], []> + + wieviel || (DP WH:'wieviel' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] HOWMANY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[ SLOT_arg/RESOURCE/y ]> + wieviele || (DP WH:'wieviele' NP[noun]) || <y, l1, <<e,t>,t>, [ l1:[ | l2:[ y | ] HOWMANY y l3:[|] ] ], [ (l4,y,noun,<e,t>) ], [ l4=l2 ],[ SLOT_arg/RESOURCE/y ]> + + wann || (S WH:'wann' S[s]) || <x, l1, t, [ l1:[ ?x | SLOT_p(y,x) ] ], [(l2,y,s,t)], [l2=l1], [ SLOT_p/PROPERTY/date ]> + wann || (DP WH:'wann') || <y, l1, <<e,t>,t>, [ l1:[ ?x | SLOT_p(y,x) ] ], [], [], [ SLOT_p/PROPERTY/date ]> + wo || (S WH:'wo' S[s]) || <x, l1, t, [ l1:[ ?x | SLOT_p(y,x) ] ], [(l2,y,s,t)], [l2=l1], [ SLOT_p/PROPERTY/place ]> + wo || (DP WH:'wo') || <y, l1, <<e,t>,t>, [ l1:[ ?x | SLOT_p(y,x) ] ], [], [], [ SLOT_p/PROPERTY/place ]> + wo in || (DP WH:'wo' (PP P:'in' DP[dp])) || <y, l1, <<e,t>,t>, [ l1:[ ?x | SLOT_p(y,x), SLOT_in(x,z) ] ], [(l2,z,dp,<<e,t>,t>)], [l2=l1], [ SLOT_p/PROPERTY/place ]> + + +// NEGATION +// -------- + + nicht || (ADJ NEG:'nicht' ADJ*) || <x,l2,t,[ l1:[ | NOT l2:[|] ] ],[],[],[]> + nicht || (VP NEG:'nicht' VP*) || <x,l2,t,[ l1:[ | NOT l2:[|] ] ],[],[],[]> + hat nicht || (VP V:'hat' NEG:'nicht' VP*) || <x,l2,t,[ l1:[ | NOT l2:[|] ] ],[],[],[]> + haben nicht || (VP V:'haben' NEG:'nicht' VP*) || <x,l2,t,[ l1:[ | NOT l2:[|] ] ],[],[],[]> + hatte nicht || (VP V:'hatte' NEG:'nicht' VP*) || <x,l2,t,[ l1:[ | NOT l2:[|] ] ],[],[],[]> + hatten nicht || (VP V:'hatten' NEG:'nicht' VP*) || <x,l2,t,[ l1:[ | NOT l2:[|] ] ],[],[],[]> + + ist nicht || (S DP[subject] (VP V:'ist' NEG:'nicht' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | NOT [ | x=y ] ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + ist nicht || (S DP[subject] (VP V:'ist' NEG:'nicht' ADJ[comp])) || <x, l1, t, [ l1:[ | NOT [ | x=y ] ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + war nicht || (S DP[subject] (VP V:'war' NEG:'nicht' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | NOT [ | x=y ] ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + war nicht || (S DP[subject] (VP V:'war' NEG:'nicht' ADJ[comp])) || <x, l1, t, [ l1:[ | NOT [ | x=y ] ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + sind nicht || (S DP[subject] (VP V:'sind' NEG:'nicht' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | NOT [ | x=y ] ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + sind nicht || (S DP[subject] (VP V:'sind' NEG:'nicht' ADJ[comp])) || <x, l1, t, [ l1:[ | NOT [ | x=y ] ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + waren nicht || (S DP[subject] (VP V:'waren' NEG:'nicht' DP[object])) || <x, l1, t, [ l1:[ | ], l2:[ | NOT [ | x=y ] ] ], [ (l3,x,subject,<<e,t>,t>), (l4,y,object,<<e,t>,t>) ], [ l3<l1, l4<l1, l2<scope(l3), l2<scope(l4) ],[]> + waren nicht || (S DP[subject] (VP V:'waren' NEG:'nicht' ADJ[comp])) || <x, l1, t, [ l1:[ | NOT [ | x=y ] ]], [ (l2,x,subject,<<e,t>,t>), (l3,y,comp,<e,t>) ], [ l2=l1, l3=l2 ],[]> + + +// COORDINATION +// ------------ + + und || (S S* CC:'und' S[s]) || <x,l1,t,[l1:[|]],[(l2,y,s,t)],[l1=l2],[]> + und || (DP DP* CC:'und' DP[dp]) || <x,l1,<<e,t>,t>,[l1:[|]],[(l2,y,dp,<<e,t>,t>)],[l1=l2],[]> + und || (NP NP* CC:'und' NP[np]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,np,<e,t>)],[l1=l2],[]> + und || (PP PP* CC:'und' PP[pp]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,pp,<e,t>)],[l1=l2],[]> + und || (ADJ ADJ* CC:'und' ADJ[adj]) || <x,l1,<e,t>,[l1:[|]],[(l2,y,adj,<e,t>)],[l1=l2],[]> + + aber || (S S* CC:'aber' S[s]) || <x,l1,t,[l1:[|]],[(l2,y,s,t)],[l1=l2],[]> + aber || (DP DP* CC:'aber' DP[dp]) || <x,l1,<<e,t>,t>,[l1:[|]],[(l2,y,dp,<<e,t>,t>)],[l1=l2],[]> + aber || (NP NP* CC:'aber' NP[np]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,np,<e,t>)],[l1=l2],[]> + aber || (PP PP* CC:'aber' PP[pp]) || <x,l1,<e,t>,[l1:[|x=y]],[(l2,y,pp,<e,t>)],[l1=l2],[]> + aber || (ADJ ADJ* CC:'aber' ADJ[adj]) || <x,l1,<e,t>,[l1:[|]],[(l2,y,adj,<e,t>)],[l1=l2],[]> + + sowohl .+ als auch || (NP CC:'sowohl' NP* CC:'als' CC:'auch' NP[np]) || <x,l1,<e,t>,[l1:[|]],[(l2,y,np,<e,t>)],[l1=l2],[]> + + oder || (S S[cc1] CC:'oder' S[cc2]) || <x, l1, t, [ l1:[ | l2:[|] OR l3:[|] ] ], [ (l5,x,cc1,t),(l4,y,cc2,t) ], [ l5=l2,l4=l3 ],[]> + oder || (DP DP[cc1] CC:'oder' DP[cc2]) || <x, l1, <<e,t>,t>, [ l1:[ | l2:[|] OR l3:[|], x=y ] ], [ (l5,x,cc1,<<e,t>,t>),(l4,y,cc2,<<e,t>,t>) ], [ l5=l2,l4=l3 ],[]> + oder || (NP NP[cc1] CC:'oder' NP[cc2]) || <x, l1, <e,t>, [ l1:[ | l2:[|] OR l3:[|], x=y ] ], [ (l5,x,cc1,<e,t>),(l4,y,cc2,<e,t>) ], [ l5=l2,l4=l3 ],[]> + oder || (ADJ ADJ* CC:'oder' ADJ[cc]) || - + + +// EXPLETIVE +// ---------- + + es || (DP NP:'es') || <x,l1,<<e,t>,t>,[l1:[|]],[],[],[]> + + +// NUMBERS (1-20) +// --------------- + + eins || (NP NUM:'eins' NP*) || <x,l1,<e,t>,[l1:[x|count(x,1)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,1)]],[],[],[ SLOT_arg/LITERAL/x ]> + zwei || (NP NUM:'zwei' NP*) || <x,l1,<e,t>,[l1:[x|count(x,2)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,2)]],[],[],[ SLOT_arg/LITERAL/x ]> + drei || (NP NUM:'drei' NP*) || <x,l1,<e,t>,[l1:[x|count(x,3)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,3)]],[],[],[ SLOT_arg/LITERAL/x ]> + vier || (NP NUM:'vier' NP*) || <x,l1,<e,t>,[l1:[x|count(x,4)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,4)]],[],[],[ SLOT_arg/LITERAL/x ]> + fuenf || (NP NUM:'fuenf' NP*) || <x,l1,<e,t>,[l1:[x|count(x,5)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,5)]],[],[],[ SLOT_arg/LITERAL/x ]> + sechs || (NP NUM:'sechs' NP*) || <x,l1,<e,t>,[l1:[x|count(x,6)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,6)]],[],[],[ SLOT_arg/LITERAL/x ]> + sieben || (NP NUM:'sieben' NP*) || <x,l1,<e,t>,[l1:[x|count(x,7)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,7)]],[],[],[ SLOT_arg/LITERAL/x ]> + acht || (NP NUM:'acht' NP*) || <x,l1,<e,t>,[l1:[x|count(x,8)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,8)]],[],[],[ SLOT_arg/LITERAL/x ]> + neun || (NP NUM:'neun' NP*) || <x,l1,<e,t>,[l1:[x|count(x,9)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,9)]],[],[],[ SLOT_arg/LITERAL/x ]> + zehn || (NP NUM:'zehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,10)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> + elf || (NP NUM:'elf' NP*) || <x,l1,<e,t>,[l1:[x|count(x,11)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,11)]],[],[],[ SLOT_arg/LITERAL/x ]> + zwoelf || (NP NUM:'zwoelf' NP*) || <x,l1,<e,t>,[l1:[x|count(x,12)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,12)]],[],[],[ SLOT_arg/LITERAL/x ]> + dreizehn || (NP NUM:'dreizehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,13)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,13)]],[],[],[ SLOT_arg/LITERAL/x ]> + vierzehn || (NP NUM:'vierzehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,14)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,14)]],[],[],[ SLOT_arg/LITERAL/x ]> + fuenfzehn || (NP NUM:'fuenfzehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,15)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,15)]],[],[],[ SLOT_arg/LITERAL/x ]> + sechzehn || (NP NUM:'sechzehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,16)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,16)]],[],[],[ SLOT_arg/LITERAL/x ]> + siebzehn || (NP NUM:'siebzehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,17)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,17)]],[],[],[ SLOT_arg/LITERAL/x ]> + achtzehn || (NP NUM:'achtzehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,18)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,18)]],[],[],[ SLOT_arg/LITERAL/x ]> + neunzehn || (NP NUM:'neunzehn' NP*) || <x,l1,<e,t>,[l1:[x|count(x,19)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,19)]],[],[],[ SLOT_arg/LITERAL/x ]> + zwanzig || (NP NUM:'zwanzig' NP*) || <x,l1,<e,t>,[l1:[x|count(x,20)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,<e,t>,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> + + eins || (NUM NUM:'eins') || <x,l1,e,[l1:[x|count(x,1)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,1)]],[],[],[ SLOT_arg/LITERAL/x ]> + zwei || (NUM NUM:'zwei') || <x,l1,e,[l1:[x|count(x,2)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,2)]],[],[],[ SLOT_arg/LITERAL/x ]> + drei || (NUM NUM:'drei') || <x,l1,e,[l1:[x|count(x,3)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,3)]],[],[],[ SLOT_arg/LITERAL/x ]> + vier || (NUM NUM:'vier') || <x,l1,e,[l1:[x|count(x,4)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,4)]],[],[],[ SLOT_arg/LITERAL/x ]> + fuenf || (NUM NUM:'fuenf') || <x,l1,e,[l1:[x|count(x,5)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,5)]],[],[],[ SLOT_arg/LITERAL/x ]> + sechs || (NUM NUM:'sechs') || <x,l1,e,[l1:[x|count(x,6)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,6)]],[],[],[ SLOT_arg/LITERAL/x ]> + sieben || (NUM NUM:'sieben') || <x,l1,e,[l1:[x|count(x,7)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,7)]],[],[],[ SLOT_arg/LITERAL/x ]> + acht || (NUM NUM:'acht') || <x,l1,e,[l1:[x|count(x,8)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,8)]],[],[],[ SLOT_arg/LITERAL/x ]> + neun || (NUM NUM:'neun') || <x,l1,e,[l1:[x|count(x,9)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,9)]],[],[],[ SLOT_arg/LITERAL/x ]> + zehn || (NUM NUM:'zehn') || <x,l1,e,[l1:[x|count(x,10)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,10)]],[],[],[ SLOT_arg/LITERAL/x ]> + elf || (NUM NUM:'elf') || <x,l1,e,[l1:[x|count(x,11)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,11)]],[],[],[ SLOT_arg/LITERAL/x ]> + zwoelf || (NUM NUM:'zwoelf') || <x,l1,e,[l1:[x|count(x,12)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,12)]],[],[],[ SLOT_arg/LITERAL/x ]> + dreizehn || (NUM NUM:'dreizehn') || <x,l1,e,[l1:[x|count(x,13)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,13)]],[],[],[ SLOT_arg/LITERAL/x ]> + vierzehn || (NUM NUM:'vierzehn') || <x,l1,e,[l1:[x|count(x,14)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,14)]],[],[],[ SLOT_arg/LITERAL/x ]> + fuenfzehn || (NUM NUM:'fuenfzehn') || <x,l1,e,[l1:[x|count(x,15)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,15)]],[],[],[ SLOT_arg/LITERAL/x ]> + sechzehn || (NUM NUM:'sechzehn') || <x,l1,e,[l1:[x|count(x,16)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,16)]],[],[],[ SLOT_arg/LITERAL/x ]> + siebzehn || (NUM NUM:'siebzehn') || <x,l1,e,[l1:[x|count(x,17)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,17)]],[],[],[ SLOT_arg/LITERAL/x ]> + achtzehn || (NUM NUM:'achtzehn') || <x,l1,e,[l1:[x|count(x,18)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,18)]],[],[],[ SLOT_arg/LITERAL/x ]> + neunzehn || (NUM NUM:'neunzehn') || <x,l1,e,[l1:[x|count(x,19)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,19)]],[],[],[ SLOT_arg/LITERAL/x ]> + zwanzig || (NUM NUM:'zwanzig') || <x,l1,e,[l1:[x|count(x,20)]],[],[],[ SLOT_arg/RESOURCE/x ]> ;; <x,l1,e,[l1:[x|equal(x,20)]],[],[],[ SLOT_arg/LITERAL/x ]> + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-10 10:08:02
|
Revision: 3917 http://sourceforge.net/p/dl-learner/code/3917 Author: lorenz_b Date: 2013-04-10 10:07:59 +0000 (Wed, 10 Apr 2013) Log Message: ----------- Added JUNIT test for pattern detection. Added Paths: ----------- trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/ trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLAxiomRenamerTest.java Added: trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLAxiomRenamerTest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLAxiomRenamerTest.java (rev 0) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/pattern/OWLAxiomRenamerTest.java 2013-04-10 10:07:59 UTC (rev 3917) @@ -0,0 +1,95 @@ +package org.dllearner.algorithms.pattern; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.semanticweb.owlapi.io.ToStringRenderer; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLIndividual; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.PrefixManager; +import org.semanticweb.owlapi.util.DefaultPrefixManager; + +import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; +import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer; + +public class OWLAxiomRenamerTest { + private OWLDataFactory df; + + private OWLClass clsA; + private OWLClass clsB; + private OWLClass clsC; + private OWLObjectProperty propR; + private OWLObjectProperty propS; + private OWLIndividual indA; + private OWLIndividual indB; + + private OWLAxiomRenamer renamer; + + @Before + public void setUp() throws Exception { + df = new OWLDataFactoryImpl(); + PrefixManager pm = new DefaultPrefixManager("http://examples.org/ontology#"); + + clsA = df.getOWLClass("A", pm); + clsB = df.getOWLClass("B", pm); + clsC = df.getOWLClass("C", pm); + + propR = df.getOWLObjectProperty("r", pm); + propS = df.getOWLObjectProperty("s", pm); + + indA = df.getOWLNamedIndividual("a", pm); + indB = df.getOWLNamedIndividual("b", pm); + + renamer = new OWLAxiomRenamer(df); + } + + @Test + public void testRename() { + ToStringRenderer.getInstance().setRenderer(new DLSyntaxObjectRenderer()); + OWLAxiom ax1 = df.getOWLSubClassOfAxiom(clsA, clsB); + OWLAxiom ax2 = df.getOWLSubClassOfAxiom(clsB, clsC); + + System.out.print(ax1 + "->");ax1 = renamer.rename(ax1);System.out.println(ax1); + System.out.print(ax2 + "->");ax2 = renamer.rename(ax2);System.out.println(ax1); + assertEquals(ax1, ax2); + + ax1 = df.getOWLSubClassOfAxiom( + clsA, + df.getOWLObjectIntersectionOf( + clsB, + df.getOWLObjectSomeValuesFrom(propR, clsC))); + ax2 = df.getOWLSubClassOfAxiom( + clsA, + df.getOWLObjectIntersectionOf( + df.getOWLObjectSomeValuesFrom(propS, clsB), + clsC)); + System.out.print(ax1 + "->");ax1 = renamer.rename(ax1);System.out.println(ax1); + System.out.print(ax2 + "->");ax2 = renamer.rename(ax2);System.out.println(ax2); + assertEquals(ax1, ax2); + + ax1 = df.getOWLSubClassOfAxiom( + clsA, + df.getOWLObjectIntersectionOf( + clsB, + df.getOWLObjectSomeValuesFrom( + propR, + df.getOWLObjectUnionOf(clsB, clsA)))); + ax2 = df.getOWLSubClassOfAxiom( + clsA, + df.getOWLObjectIntersectionOf( + df.getOWLObjectSomeValuesFrom( + propS, + df.getOWLObjectUnionOf(clsB, clsA)), + clsB)); + System.out.print(ax1 + "->");ax1 = renamer.rename(ax1);System.out.println(ax1); + System.out.print(ax2 + "->");ax2 = renamer.rename(ax2);System.out.println(ax2); + assertEquals(ax1, ax2); + + + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-10 10:07:14
|
Revision: 3916 http://sourceforge.net/p/dl-learner/code/3916 Author: lorenz_b Date: 2013-04-10 10:07:10 +0000 (Wed, 10 Apr 2013) Log Message: ----------- Updated JENA. Modified Paths: -------------- trunk/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-04-10 10:06:38 UTC (rev 3915) +++ trunk/pom.xml 2013-04-10 10:07:10 UTC (rev 3916) @@ -257,7 +257,7 @@ <dependency> <groupId>org.apache.jena</groupId> <artifactId>jena-arq</artifactId> - <version>2.9.2</version> + <version>2.10.0</version> </dependency> <!--Junits --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-04-10 10:06:41
|
Revision: 3915 http://sourceforge.net/p/dl-learner/code/3915 Author: lorenz_b Date: 2013-04-10 10:06:38 +0000 (Wed, 10 Apr 2013) Log Message: ----------- Fixed bug. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -58,7 +58,7 @@ public class OWLAxiomRenamer implements OWLAxiomVisitor { private OWLDataFactory df; - private OWLClassExpressionRenamer renamer; + private OWLClassExpressionRenamer expressionRenamer; private OWLAxiom renamedAxiom; public OWLAxiomRenamer(OWLDataFactory df) { @@ -67,7 +67,7 @@ public OWLAxiom rename(OWLAxiom axiom){ Map<OWLEntity, OWLEntity> renaming = new HashMap<OWLEntity, OWLEntity>(); - renamer = new OWLClassExpressionRenamer(df, renaming); + expressionRenamer = new OWLClassExpressionRenamer(df, renaming); axiom.accept(this); return renamedAxiom; } @@ -75,9 +75,9 @@ @Override public void visit(OWLSubClassOfAxiom axiom) { OWLClassExpression subClass = axiom.getSubClass(); - subClass = renamer.rename(subClass); + subClass = expressionRenamer.rename(subClass); OWLClassExpression superClass = axiom.getSuperClass(); - superClass = renamer.rename(superClass); + superClass = expressionRenamer.rename(superClass); renamedAxiom = df.getOWLSubClassOfAxiom(subClass, superClass); } @@ -120,18 +120,18 @@ @Override public void visit(OWLDataPropertyDomainAxiom axiom) { OWLDataPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLClassExpression domain = axiom.getDomain(); - domain = renamer.rename(domain); + domain = expressionRenamer.rename(domain); renamedAxiom = df.getOWLDataPropertyDomainAxiom(property, domain); } @Override public void visit(OWLObjectPropertyDomainAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLClassExpression domain = axiom.getDomain(); - domain = renamer.rename(domain); + domain = expressionRenamer.rename(domain); renamedAxiom = df.getOWLObjectPropertyDomainAxiom(property, domain); } @@ -158,9 +158,9 @@ @Override public void visit(OWLObjectPropertyRangeAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLClassExpression range = axiom.getRange(); - range = renamer.rename(range); + range = expressionRenamer.rename(range); renamedAxiom = df.getOWLObjectPropertyDomainAxiom(property, range); } @@ -171,7 +171,7 @@ @Override public void visit(OWLFunctionalObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLFunctionalObjectPropertyAxiom(property); } @@ -186,23 +186,23 @@ @Override public void visit(OWLSymmetricObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLSymmetricObjectPropertyAxiom(property); } @Override public void visit(OWLDataPropertyRangeAxiom axiom) { OWLDataPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); OWLDataRange range = axiom.getRange(); - range = renamer.rename(range); + range = expressionRenamer.rename(range); renamedAxiom = df.getOWLDataPropertyRangeAxiom(property, range); } @Override public void visit(OWLFunctionalDataPropertyAxiom axiom) { OWLDataPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLFunctionalDataPropertyAxiom(property); } @@ -213,9 +213,9 @@ @Override public void visit(OWLClassAssertionAxiom axiom) { OWLClassExpression classExpression = axiom.getClassExpression(); - classExpression = renamer.rename(classExpression); + classExpression = expressionRenamer.rename(classExpression); OWLIndividual individual = axiom.getIndividual(); - individual = renamer.rename(individual); + individual = expressionRenamer.rename(individual); renamedAxiom = df.getOWLClassAssertionAxiom(classExpression, individual); } @@ -224,7 +224,7 @@ List<OWLClassExpression> classExpressions = axiom.getClassExpressionsAsList(); List<OWLClassExpression> renamedClassExpressions = new ArrayList<OWLClassExpression>(); for (OWLClassExpression expr : classExpressions) { - renamedClassExpressions.add(renamer.rename(expr)); + renamedClassExpressions.add(expressionRenamer.rename(expr)); } renamedAxiom = df.getOWLEquivalentClassesAxiom(new TreeSet<OWLClassExpression>(renamedClassExpressions)); } @@ -236,14 +236,14 @@ @Override public void visit(OWLTransitiveObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLTransitiveObjectPropertyAxiom(property); } @Override public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { OWLObjectPropertyExpression property = axiom.getProperty(); - property = renamer.rename(property); + property = expressionRenamer.rename(property); renamedAxiom = df.getOWLIrreflexiveObjectPropertyAxiom(property); } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/properties/FunctionalDataPropertyAxiomLearner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -20,6 +20,7 @@ package org.dllearner.algorithms.properties; import java.util.ArrayList; +import java.util.List; import org.dllearner.core.AbstractAxiomLearningAlgorithm; import org.dllearner.core.ComponentAnn; @@ -29,6 +30,8 @@ import org.dllearner.core.owl.DatatypeProperty; import org.dllearner.core.owl.FunctionalDatatypePropertyAxiom; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.learningproblems.AxiomScore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,7 +112,7 @@ all = qs.getLiteral("all").getInt(); } // get number of instances of s with <s p o> <s p o1> where o != o1 - query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o1)} }"; + query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o2)} }"; query = query.replace("%s", propertyToDescribe.getURI().toString()); rs = executeSelectQuery(query, workingModel); int functional = 1; @@ -140,7 +143,7 @@ if (numberOfSubjects > 0) { int functional = 0; - String query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o1)} }"; + String query = "SELECT (COUNT(DISTINCT ?s) AS ?functional) WHERE {?s <%s> ?o1. FILTER NOT EXISTS {?s <%s> ?o2. FILTER(?o1 != ?o2)} }"; query = query.replace("%s", propertyToDescribe.getURI().toString()); ResultSet rs = executeSelectQuery(query); if (rs.hasNext()) { @@ -153,4 +156,23 @@ declaredAsFunctional)); } } + + public static void main(String[] args) throws Exception { + FunctionalDataPropertyAxiomLearner l = new FunctionalDataPropertyAxiomLearner(new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpedia())); + l.setPropertyToDescribe(new DatatypeProperty("http://dbpedia.org/ontology/birthDate")); + l.setMaxExecutionTimeInSeconds(10); + l.setForceSPARQL_1_0_Mode(true); + l.init(); + l.start(); + List<EvaluatedAxiom> axioms = l.getCurrentlyBestEvaluatedAxioms(5); + System.out.println(axioms); + + for(EvaluatedAxiom axiom : axioms){ + printSubset(l.getPositiveExamples(axiom), 10); + printSubset(l.getNegativeExamples(axiom), 10); + l.explainScore(axiom); + System.out.println(((AxiomScore)axiom.getScore()).getTotalNrOfExamples()); + System.out.println(((AxiomScore)axiom.getScore()).getNrOfPositiveExamples()); + } + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/properties/ObjectPropertyDomainAxiomLearner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -198,22 +198,24 @@ org.apache.log4j.Logger.getRootLogger().setLevel(Level.INFO); org.apache.log4j.Logger.getLogger(DataPropertyDomainAxiomLearner.class).setLevel(Level.INFO); - SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpediaLiveAKSW()); + SparqlEndpointKS ks = new SparqlEndpointKS(SparqlEndpoint.getEndpointDBpedia()); + SPARQLReasoner reasoner = new SPARQLReasoner(ks); reasoner.prepareSubsumptionHierarchy(); ObjectPropertyDomainAxiomLearner l = new ObjectPropertyDomainAxiomLearner(ks); l.setReasoner(reasoner); - l.setPropertyToDescribe(new ObjectProperty("http://dbpedia.org/ontology/anthem")); - l.setMaxExecutionTimeInSeconds(40); + l.setPropertyToDescribe(new ObjectProperty("http://dbpedia.org/ontology/birthPlace")); + l.setMaxExecutionTimeInSeconds(10); // l.addFilterNamespace("http://dbpedia.org/ontology/"); // l.setReturnOnlyNewAxioms(true); + l.setForceSPARQL_1_0_Mode(true); l.init(); l.start(); - System.out.println(l.getCurrentlyBestEvaluatedAxioms()); + System.out.println(l.getCurrentlyBestEvaluatedAxioms(0.7)); } } Modified: trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -307,7 +307,7 @@ } protected ResultSet executeSelectQuery(String query) { - logger.debug("Sending query\n{} ...", query); + logger.info("Sending query\n{} ...", query); if(ks.isRemote()){ SparqlEndpoint endpoint = ((SparqlEndpointKS) ks).getEndpoint(); QueryEngineHTTP queryExecution = new QueryEngineHTTP(endpoint.getURL().toString(), Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -27,10 +27,11 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import org.openjena.atlas.io.IO; -import org.openjena.riot.Lang; -import org.openjena.riot.RiotReader; -import org.openjena.riot.WebContent; +import org.apache.jena.atlas.io.IO; +import org.apache.jena.riot.Lang; +import org.apache.jena.riot.RDFLanguages; +import org.apache.jena.riot.RiotReader; +import org.apache.jena.riot.WebContent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -267,7 +268,7 @@ private Model execModel(Model model) { HttpQuery httpQuery = makeHttpQuery() ; - httpQuery.setAccept(WebContent.contentTypeNTriples) ; + httpQuery.setAccept(WebContent.contentTypeNTriplesAlt) ; InputStream in = httpQuery.exec() ; //Don't assume the endpoint actually gives back the content type we asked for @@ -282,7 +283,7 @@ //Try to select language appropriately here based on the model content type Lang lang = WebContent.contentTypeToLang(actualContentType); - if (!lang.isTriples()) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); + if (! RDFLanguages.isTriples(lang)) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); model.read(in, null, "N-TRIPLES") ; return model ; @@ -306,7 +307,7 @@ //Try to select language appropriately here based on the model content type Lang lang = WebContent.contentTypeToLang(actualContentType); - if (!lang.isTriples()) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); + if (! RDFLanguages.isTriples(lang)) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); return RiotReader.createIteratorTriples(in, lang, null); } @@ -527,9 +528,20 @@ //Check that this is a valid setting Lang lang = WebContent.contentTypeToLang(contentType); if (lang == null) throw new IllegalArgumentException("Given Content Type '" + contentType + "' is not supported by RIOT"); - if (!lang.isTriples()) throw new IllegalArgumentException("Given Content Type '" + contentType + " is not a RDF Graph format"); + if (! RDFLanguages.isTriples(lang)) throw new IllegalArgumentException("Given Content Type '" + contentType + " is not a RDF Graph format"); modelContentType = contentType; } + + @Override + public long getTimeout1() { return asMillis(readTimeout, readTimeoutUnit) ; } + + @Override + public long getTimeout2() { return asMillis(connectTimeout, connectTimeoutUnit) ; } + + private static long asMillis(long duration, TimeUnit timeUnit) + { + return (duration < 0 ) ? duration : timeUnit.toMillis(duration) ; + } } Modified: trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/learningproblems/AxiomScore.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -61,7 +61,7 @@ return totalNrOfExamples; } - public int getNrOfpositiveExamples() { + public int getNrOfPositiveExamples() { return nrOfpositiveExamples; } Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -451,7 +451,7 @@ // Comparator<OWLNamedObject> namedObjectComparator = new Comparator<OWLNamedObject>() { public int compare(OWLNamedObject o1, OWLNamedObject o2) { - return o1.getIRI().compareTo(o2.getIRI()); + return o1.compareTo(o2); } }; Set<OWLClass> classes = new TreeSet<OWLClass>(namedObjectComparator); Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -460,6 +460,39 @@ } return types; } + + public Set<NamedClass> getOWLClasses() { + Set<NamedClass> types = new HashSet<NamedClass>(); + String query = String.format("SELECT DISTINCT ?class WHERE {?class a <%s>.}",OWL.Class.getURI()); + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + types.add(new NamedClass(qs.getResource("class").getURI())); + } + return types; + } + + /** + * Returns a set of classes which are siblings, i.e. on the same level + * in the class hierarchy. + * @param cls + * @param limit + * @return + */ + public Set<NamedClass> getSiblingClasses(NamedClass cls) { + Set<NamedClass> siblings = new HashSet<NamedClass>(); + String query = "SELECT ?sub WHERE { <" + cls.getName() + "> <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?super ."; + query += "?sub <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?super ."; + query += "FILTER( !SAMETERM(?sub, <" + cls.getName() + ">)) . }"; + ResultSet rs = executeSelectQuery(query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + siblings.add(new NamedClass(qs.getResource("sub").getURI())); + } + return siblings; + } @Override public boolean hasType(Description description, Individual individual) { @@ -490,12 +523,14 @@ if(limit != 0) { query += " LIMIT " + limit; } - + System.out.println(query); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); - individuals.add(new Individual(qs.getResource("ind").getURI())); + if(qs.get("ind").isURIResource()){ + individuals.add(new Individual(qs.getResource("ind").getURI())); + } } return individuals; } Modified: trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java 2013-03-20 12:08:41 UTC (rev 3914) +++ trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java 2013-04-10 10:06:38 UTC (rev 3915) @@ -9,7 +9,9 @@ import com.hp.hpl.jena.query.ParameterizedSparqlString; import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.vocabulary.RDFS; @@ -23,7 +25,12 @@ private ExtractionDBCache cache; private SparqlEndpoint endpoint; + private Model model; + public LabelShortFormProvider(Model model) { + this.model = model; + } + public LabelShortFormProvider(SparqlEndpoint endpoint) { this.endpoint = endpoint; } @@ -59,15 +66,20 @@ protected ResultSet executeSelect(Query query){ ResultSet rs = null; - if(cache != null){ - rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query.toString())); + if(endpoint != null){ + if(cache != null){ + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query.toString())); + } else { + QueryEngineHTTP qe = new QueryEngineHTTP(endpoint.getURL().toString(), query); + for(String uri : endpoint.getDefaultGraphURIs()){ + qe.addDefaultGraph(uri); + } + rs = qe.execSelect(); + } } else { - QueryEngineHTTP qe = new QueryEngineHTTP(endpoint.getURL().toString(), query); - for(String uri : endpoint.getDefaultGraphURIs()){ - qe.addDefaultGraph(uri); - } - rs = qe.execSelect(); + rs = QueryExecutionFactory.create(query, model).execSelect(); } + return rs; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-03-20 12:08:44
|
Revision: 3914 http://sourceforge.net/p/dl-learner/code/3914 Author: lorenz_b Date: 2013-03-20 12:08:41 +0000 (Wed, 20 Mar 2013) Log Message: ----------- Started OWL axiom pattern detection. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/AbstractRenderer.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/FullIRIEntityShortFromProvider.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/ManchesterOWLSyntaxEditorParser.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/ManchesterOWLSyntaxOWLObjectRendererImpl.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/ManchesterOWLSyntaxObjectRenderer.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionOrderingComparator.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLClassExpressionRenamer.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/AbstractRenderer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/AbstractRenderer.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/AbstractRenderer.java 2013-03-20 12:08:41 UTC (rev 3914) @@ -0,0 +1,219 @@ +package org.dllearner.algorithms.pattern; + +/* + * This file is part of the OWL API. + * + * The contents of this file are subject to the LGPL License, Version 3.0. + * + * Copyright (C) 2011, The University of Manchester + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + * + * Alternatively, the contents of this file may be used under the terms of the Apache License, Version 2.0 + * in which case, the provisions of the Apache License Version 2.0 are applicable instead of those above. + * + * Copyright 2011, University of Manchester + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntax; +import org.semanticweb.owlapi.io.OWLRendererException; +import org.semanticweb.owlapi.io.OWLRendererIOException; +import org.semanticweb.owlapi.util.ShortFormProvider; + +/** + * Author: Matthew Horridge<br> + * The University Of Manchester<br> + * Bio-Health Informatics Group<br> + * Date: 25-Apr-2007<br><br> + */ +@SuppressWarnings("javadoc") +public class AbstractRenderer { + + private ShortFormProvider shortFormProvider; + + private int lastNewLinePos = -1; + + private int currentPos; + + private Writer writer; + + private List<Integer> tabs; + + private boolean useTabbing = true; + + private boolean useWrapping = true; + + public AbstractRenderer(Writer writer, ShortFormProvider shortFormProvider) { + this.writer = writer; + this.shortFormProvider = shortFormProvider; + tabs = new ArrayList<Integer>(); + pushTab(0); + } + + + public void setUseTabbing(boolean useTabbing) { + this.useTabbing = useTabbing; + } + + + public void setUseWrapping(boolean useWrapping) { + this.useWrapping = useWrapping; + } + + + public boolean isUseWrapping() { + return useWrapping; + } + + + public boolean isUseTabbing() { + return useTabbing; + } + + +// public void setShortFormProvider(ShortFormProvider shortFormProvider) { +// this.shortFormProvider = shortFormProvider; +// } + + + public void flush() throws OWLRendererException { + try { + writer.flush(); + } + catch (IOException e) { + throw new OWLRendererIOException(e); + } + } + + protected void pushTab(int size) { + tabs.add(0, size); + } + + protected void incrementTab(int increment) { + int base = 0; + if(!tabs.isEmpty()) { + base = tabs.get(0); + } + tabs.add(0, base + increment); + } + + protected void popTab() { + tabs.remove(0); + } + + protected void writeTab() { + int tab = tabs.get(0); + for(int i = 0; i < tab; i++) { + write(" "); + } + } + + protected int getIndent() { + return currentPos - lastNewLinePos - 2; + } + + + protected void write(String s) { + if(s == null) { + return; + } + int indexOfNewLine = s.indexOf('\n'); + if(indexOfNewLine != -1) { + lastNewLinePos = currentPos + indexOfNewLine; + } + currentPos += s.length(); + try { + writer.write(s); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + protected void write(char ch) { + write(Character.toString(ch)); + } + + protected void write(String s, int lineLen) { + StringTokenizer tokenizer = new StringTokenizer(s, " \n\t-", true); + int currentLineLength = 0; + while(tokenizer.hasMoreTokens()) { + String curToken = tokenizer.nextToken(); + write(curToken); + if(curToken.equals("\n")) { + writeTab(); + } + currentLineLength += curToken.length(); + if(currentLineLength > lineLen && curToken.trim().length() != 0 && tokenizer.hasMoreTokens()) { + writeNewLine(); + currentLineLength = 0; + } + } + } + + protected void writeSpace() { + write(" "); + } + + protected void write(ManchesterOWLSyntax keyword) { + write(" ", keyword, keyword.isSectionKeyword() ? ": " : " "); + } + + protected void writeFrameKeyword(ManchesterOWLSyntax keyword) { + write("", keyword, ": "); + } + + protected void writeSectionKeyword(ManchesterOWLSyntax keyword) { + write(" ", keyword, ": "); + } + + protected void writeNewLine() { + write("\n"); + if (useTabbing) { + writeTab(); + } + } + + protected void write(String prefix, ManchesterOWLSyntax keyword, String suffix) { + write(prefix); + write(keyword.toString()); + write(suffix); + } + + protected ShortFormProvider getShortFormProvider() { + return shortFormProvider; + } + +} + Added: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/FullIRIEntityShortFromProvider.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/FullIRIEntityShortFromProvider.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/FullIRIEntityShortFromProvider.java 2013-03-20 12:08:41 UTC (rev 3914) @@ -0,0 +1,17 @@ +package org.dllearner.algorithms.pattern; + +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.util.ShortFormProvider; + +public class FullIRIEntityShortFromProvider implements ShortFormProvider{ + + @Override + public void dispose() { + } + + @Override + public String getShortForm(OWLEntity entity) { + return entity.toStringID(); + } + +} Added: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/ManchesterOWLSyntaxEditorParser.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/ManchesterOWLSyntaxEditorParser.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/ManchesterOWLSyntaxEditorParser.java 2013-03-20 12:08:41 UTC (rev 3914) @@ -0,0 +1,4129 @@ +package org.dllearner.algorithms.pattern; + +/* + * This file is part of the OWL API. + * + * The contents of this file are subject to the LGPL License, Version 3.0. + * + * Copyright (C) 2011, The University of Manchester + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + * + * Alternatively, the contents of this file may be used under the terms of the Apache License, Version 2.0 + * in which case, the provisions of the Apache License Version 2.0 are applicable instead of those above. + * + * Copyright 2011, University of Manchester + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntax; +import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxOntologyFormat; +import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxOntologyHeader; +import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxTokenizer; +import org.coode.owlapi.manchesterowlsyntax.OntologyAxiomPair; +import org.semanticweb.owlapi.expression.OWLEntityChecker; +import org.semanticweb.owlapi.expression.OWLOntologyChecker; +import org.semanticweb.owlapi.expression.ParserException; +import org.semanticweb.owlapi.model.AddAxiom; +import org.semanticweb.owlapi.model.AddImport; +import org.semanticweb.owlapi.model.AddOntologyAnnotation; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLAnnotation; +import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; +import org.semanticweb.owlapi.model.OWLAnnotationProperty; +import org.semanticweb.owlapi.model.OWLAnnotationSubject; +import org.semanticweb.owlapi.model.OWLAnnotationValue; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLClassAxiom; +import org.semanticweb.owlapi.model.OWLClassExpression; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLDataPropertyCharacteristicAxiom; +import org.semanticweb.owlapi.model.OWLDataPropertyExpression; +import org.semanticweb.owlapi.model.OWLDataRange; +import org.semanticweb.owlapi.model.OWLDatatype; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLFacetRestriction; +import org.semanticweb.owlapi.model.OWLImportsDeclaration; +import org.semanticweb.owlapi.model.OWLIndividual; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLNamedIndividual; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.OWLObjectPropertyAxiom; +import org.semanticweb.owlapi.model.OWLObjectPropertyCharacteristicAxiom; +import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.model.OWLOntologyID; +import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.OWLPropertyAssertionAxiom; +import org.semanticweb.owlapi.model.OWLPropertyExpression; +import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; +import org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom; +import org.semanticweb.owlapi.model.SWRLAtom; +import org.semanticweb.owlapi.model.SWRLBuiltInAtom; +import org.semanticweb.owlapi.model.SWRLDArgument; +import org.semanticweb.owlapi.model.SWRLDifferentIndividualsAtom; +import org.semanticweb.owlapi.model.SWRLIArgument; +import org.semanticweb.owlapi.model.SWRLIndividualArgument; +import org.semanticweb.owlapi.model.SWRLLiteralArgument; +import org.semanticweb.owlapi.model.SWRLRule; +import org.semanticweb.owlapi.model.SWRLSameIndividualAtom; +import org.semanticweb.owlapi.model.SWRLVariable; +import org.semanticweb.owlapi.model.SetOntologyID; +import org.semanticweb.owlapi.model.UnloadableImportException; +import org.semanticweb.owlapi.util.DefaultPrefixManager; +import org.semanticweb.owlapi.util.NamespaceUtil; +import org.semanticweb.owlapi.vocab.DublinCoreVocabulary; +import org.semanticweb.owlapi.vocab.Namespaces; +import org.semanticweb.owlapi.vocab.OWL2Datatype; +import org.semanticweb.owlapi.vocab.OWLFacet; +import org.semanticweb.owlapi.vocab.OWLRDFVocabulary; +import org.semanticweb.owlapi.vocab.SWRLBuiltInsVocabulary; +import org.semanticweb.owlapi.vocab.XSDVocabulary; + + +/** + * Author: Matthew Horridge<br> The University Of Manchester<br> Bio-Health Informatics Group<br> Date: + * 10-Sep-2007<br><br> + * <p/> + * A parser for the Manchester OWL Syntax. All properties must be defined before they are used. For example, consider + * the restriction hasPart some Leg. The parser must know in advance whether or not hasPart is an object property or a + * data property so that Leg gets parsed correctly. In a tool, such as an editor, it is expected that hasPart will + * already exists as either a data property or an object property. If a complete ontology is being parsed, it is + * expected that hasPart will have been defined at the top of the file before it is used in any class expressions or + * property assertions (e.g. ObjectProperty: hasPart) + */ +@SuppressWarnings({"unused","javadoc"}) +public class ManchesterOWLSyntaxEditorParser { + + // This parser was built by hand! After struggling with terrible + // error messages produced by ANTLR (or JavaCC) I decides to construct + // this parser by hand. The error messages that this parser generates + // are specific to the Manchester OWL Syntax and are such that it should + // be easy to use this parser in tools such as editors. + + private OWLOntologyLoaderConfiguration configuration; + + protected OWLDataFactory dataFactory; + + private List<ManchesterOWLSyntaxTokenizer.Token> tokens; + + private int tokenIndex; + + private OWLEntityChecker owlEntityChecker; + + private OWLOntologyChecker owlOntologyChecker = new OWLOntologyChecker() { + public OWLOntology getOntology(String name) { + return null; + } + }; + + private String base; + + private Set<String> classNames; + + private Set<String> objectPropertyNames; + + private Set<String> dataPropertyNames; + + private Set<String> individualNames; + + private Set<String> dataTypeNames; + + private Set<String> annotationPropertyNames; + + private Map<String, SWRLBuiltInsVocabulary> ruleBuiltIns = new TreeMap<String, SWRLBuiltInsVocabulary>(); + + private DefaultPrefixManager pm = new DefaultPrefixManager(); + + public static final String AND = ManchesterOWLSyntax.AND.toString(); + + public static final String OR = ManchesterOWLSyntax.OR.toString(); + + public static final String INVERSE = ManchesterOWLSyntax.INVERSE.toString(); + + public static final String SOME = ManchesterOWLSyntax.SOME.toString(); + + public static final String SELF = ManchesterOWLSyntax.SELF.toString(); + + public static final String ONLY = ManchesterOWLSyntax.ONLY.toString(); + + public static final String VALUE = ManchesterOWLSyntax.VALUE.toString(); + + public static final String MIN = ManchesterOWLSyntax.MIN.toString(); + + public static final String MAX = ManchesterOWLSyntax.MAX.toString(); + + public static final String EXACTLY = ManchesterOWLSyntax.EXACTLY.toString(); + + public static final String ONLYSOME = ManchesterOWLSyntax.ONLYSOME.toString(); + + public static final String NOT = ManchesterOWLSyntax.NOT.toString(); + + public static final String CLASS = ManchesterOWLSyntax.CLASS.toString() + ":"; + + public static final String DATATYPE = ManchesterOWLSyntax.DATATYPE.toString() + ":"; + + public static final String SUB_CLASS_OF = ManchesterOWLSyntax.SUBCLASS_OF.toString() + ":"; + + public static final String SUPER_CLASS_OF = ManchesterOWLSyntax.SUPERCLASS_OF.toString() + ":"; + + public static final String INSTANCES = "Instances:"; + + public static final String EQUIVALENT_TO = ManchesterOWLSyntax.EQUIVALENT_TO.toString() + ":"; + + public static final String EQUIVALENT_CLASSES = ManchesterOWLSyntax.EQUIVALENT_CLASSES.toString() + ":"; + + public static final String EQUIVALENT_PROPERTIES = ManchesterOWLSyntax.EQUIVALENT_PROPERTIES.toString() + ":"; + + public static final String DISJOINT_WITH = ManchesterOWLSyntax.DISJOINT_WITH.toString() + ":"; + + public static final String DISJOINT_UNION_OF = ManchesterOWLSyntax.DISJOINT_UNION_OF.toString() + ":"; + + public static final String HAS_KEY = ManchesterOWLSyntax.HAS_KEY.toString() + ":"; + + public static final String DISJOINT_CLASSES = ManchesterOWLSyntax.DISJOINT_CLASSES.toString() + ":"; + + public static final String DISJOINT_PROPERTIES = ManchesterOWLSyntax.DISJOINT_PROPERTIES.toString() + ":"; + + public static final String OBJECT_PROPERTY = ManchesterOWLSyntax.OBJECT_PROPERTY.toString() + ":"; + + public static final String DATA_PROPERTY = ManchesterOWLSyntax.DATA_PROPERTY.toString() + ":"; + + public static final String ANNOTATION_PROPERTY = ManchesterOWLSyntax.ANNOTATION_PROPERTY.toString() + ":"; + + public static final String SUB_PROPERTY_OF = ManchesterOWLSyntax.SUB_PROPERTY_OF.toString() + ":"; + + public static final String SUPER_PROPERTY_OF = ManchesterOWLSyntax.SUPER_PROPERTY_OF.toString() + ":"; + + public static final String DOMAIN = ManchesterOWLSyntax.DOMAIN.toString() + ":"; + + public static final String RANGE = ManchesterOWLSyntax.RANGE.toString() + ":"; + + public static final String INVERSES = ManchesterOWLSyntax.INVERSES.toString() + ":"; + + public static final String CHARACTERISTICS = ManchesterOWLSyntax.CHARACTERISTICS.toString() + ":"; + + public static final String INDIVIDUAL = ManchesterOWLSyntax.INDIVIDUAL.toString() + ":"; + + public static final String INDIVIDUALS = ManchesterOWLSyntax.INDIVIDUALS.toString() + ":"; + + public static final String ANNOTATIONS = ManchesterOWLSyntax.ANNOTATIONS.toString() + ":"; + + public static final String TYPES = ManchesterOWLSyntax.TYPES.toString() + ":"; + + public static final String TYPE = ManchesterOWLSyntax.TYPE.toString() + ":"; + + public static final String FACTS = ManchesterOWLSyntax.FACTS.toString() + ":"; + + public static final String SAME_AS = ManchesterOWLSyntax.SAME_AS.toString() + ":"; + + public static final String SAME_INDIVIDUAL = ManchesterOWLSyntax.SAME_INDIVIDUAL.toString() + ":"; + + public static final String DIFFERENT_FROM = ManchesterOWLSyntax.DIFFERENT_FROM.toString() + ":"; + + public static final String DIFFERENT_INDIVIDUALS = ManchesterOWLSyntax.DIFFERENT_INDIVIDUALS.toString() + ":"; + + public static final String VALUE_PARTITION = "ValuePartition:"; + + public static final String ONTOLOGY = ManchesterOWLSyntax.ONTOLOGY.toString() + ":"; + + public static final String PREFIX = ManchesterOWLSyntax.PREFIX.toString() + ":"; + + public static final String IMPORT = ManchesterOWLSyntax.IMPORT.toString() + ":"; + + public static final String SUB_PROPERTY_CHAIN = ManchesterOWLSyntax.SUB_PROPERTY_CHAIN.toString() + ":"; + + public static final String FUNCTIONAL = ManchesterOWLSyntax.FUNCTIONAL.toString() + ":"; + + public static final String INVERSE_FUNCTIONAL = ManchesterOWLSyntax.INVERSE_FUNCTIONAL.toString() + ":"; + + public static final String SYMMETRIC = ManchesterOWLSyntax.SYMMETRIC.toString() + ":"; + + public static final String ANTI_SYMMETRIC = ManchesterOWLSyntax.ANTI_SYMMETRIC.toString() + ":"; + + public static final String ASYMMETRIC = ManchesterOWLSyntax.ASYMMETRIC.toString() + ":"; + + public static final String TRANSITIVE = ManchesterOWLSyntax.TRANSITIVE.toString() + ":"; + + public static final String REFLEXIVE = ManchesterOWLSyntax.REFLEXIVE.toString() + ":"; + + public static final String IRREFLEXIVE = ManchesterOWLSyntax.IRREFLEXIVE.toString() + ":"; + + public static final String INVERSE_OF = ManchesterOWLSyntax.INVERSE_OF + ":"; + + public static final String RULE = ManchesterOWLSyntax.RULE + ":"; + + private Set<String> potentialKeywords; + + private OWLOntology defaultOntology = null; + + private boolean allowEmptyFrameSections = false; + + + private Map<String, AnnotatedListItemParser<OWLDataProperty, ?>> dataPropertyFrameSections = new HashMap<String, AnnotatedListItemParser<OWLDataProperty, ?>>(); + + + public ManchesterOWLSyntaxEditorParser(OWLDataFactory dataFactory, String s) { + this(new OWLOntologyLoaderConfiguration(), dataFactory, s); + } + + public boolean isAllowEmptyFrameSections() { + return allowEmptyFrameSections; + } + + public void setAllowEmptyFrameSections(boolean allowEmptyFrameSections) { + this.allowEmptyFrameSections = allowEmptyFrameSections; + } + + public ManchesterOWLSyntaxEditorParser(OWLOntologyLoaderConfiguration configuration, OWLDataFactory dataFactory, String s) { + this.configuration = configuration; + this.dataFactory = dataFactory; + potentialKeywords = new HashSet<String>(); + + classNames = new HashSet<String>(); + objectPropertyNames = new HashSet<String>(); + dataPropertyNames = new HashSet<String>(); + individualNames = new HashSet<String>(); + dataTypeNames = new HashSet<String>(); + annotationPropertyNames = new HashSet<String>(); + pm.setPrefix("rdf:", Namespaces.RDF.toString()); + pm.setPrefix("rdfs:", Namespaces.RDFS.toString()); + pm.setPrefix("owl:", Namespaces.OWL.toString()); + pm.setPrefix("dc:", DublinCoreVocabulary.NAME_SPACE); + NamespaceUtil u = new NamespaceUtil(); + + initialiseClassFrameSections(); + initialiseObjectPropertyFrameSections(); + initialiseDataPropertyFrameSections(); + initialiseAnnotationPropertyFrameSections(); + initialiseIndividualFrameSections(); + + + for (XSDVocabulary v : XSDVocabulary.values()) { + dataTypeNames.add(v.getIRI().getFragment()); + dataTypeNames.add("xsd:" + v.getIRI().getFragment()); + } + dataTypeNames.add(OWLRDFVocabulary.RDF_XML_LITERAL.getIRI().getFragment()); + dataTypeNames.add("rdf:" + OWLRDFVocabulary.RDF_XML_LITERAL.getIRI().getFragment()); + + dataTypeNames.add(dataFactory.getTopDatatype().getIRI().getFragment()); + + for (IRI iri : OWLRDFVocabulary.BUILT_IN_ANNOTATION_PROPERTY_IRIS) { + String[] res = u.split(iri.toString(), null); + annotationPropertyNames.add(u.getPrefix(res[0]) + ":" + res[1]); + } + + base = "http://www.semanticweb.org#"; + owlEntityChecker = new DefaultEntityChecker(); + tokens = new ArrayList<ManchesterOWLSyntaxTokenizer.Token>(); + tokens.addAll(getTokenizer(s).tokenize()); + tokenIndex = 0; + + for (SWRLBuiltInsVocabulary v : SWRLBuiltInsVocabulary.values()) { + ruleBuiltIns.put(v.getShortName(), v); + ruleBuiltIns.put(v.getIRI().toQuotedString(), v); + } + } + + protected ManchesterOWLSyntaxTokenizer getTokenizer(String s) { + return new ManchesterOWLSyntaxTokenizer(s); + } + + public OWLDataFactory getDataFactory() { + return dataFactory; + } + + private Map<String, AnnotatedListItemParser<OWLClass, ?>> classFrameSections = new HashMap<String, AnnotatedListItemParser<OWLClass, ?>>(); + + public void initialiseClassFrameSections() { + initialiseSection(new EntityAnnotationsListItemParser<OWLClass>(), classFrameSections); + initialiseSection(new ClassSubClassOfListItemParser(), classFrameSections); + initialiseSection(new ClassEquivalentToListItemParser(), classFrameSections); + initialiseSection(new ClassDisjointWithListItemParser(), classFrameSections); + initialiseSection(new ClassHasKeyListItemParser(), classFrameSections); + // Extensions + initialiseSection(new ClassSuperClassOfListItemParser(), classFrameSections); + initialiseSection(new ClassDisjointClassesListItemParser(), classFrameSections); + initialiseSection(new ClassIndividualsListItemParser(), classFrameSections); + } + + private Map<String, AnnotatedListItemParser<OWLObjectProperty, ?>> objectPropertyFrameSections = new HashMap<String, AnnotatedListItemParser<OWLObjectProperty, ?>>(); + + private void initialiseObjectPropertyFrameSections() { + initialiseSection(new EntityAnnotationsListItemParser<OWLObjectProperty>(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertySubPropertyOfListItemParser(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertyEquivalentToListItemParser(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertyDisjointWithListItemParser(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertyDomainListItemParser(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertyRangeListItemParser(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertyInverseOfListItemParser(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertyCharacteristicsItemParser(), objectPropertyFrameSections); + initialiseSection(new ObjectPropertySubPropertyChainListItemParser(), objectPropertyFrameSections); + // Extensions + initialiseSection(new ObjectPropertySuperPropertyOfListItemParser(), objectPropertyFrameSections); + } + + private void initialiseDataPropertyFrameSections() { + initialiseSection(new DataPropertySubPropertyOfListItemParser(), dataPropertyFrameSections); + initialiseSection(new DataPropertyEquivalentToListItemParser(), dataPropertyFrameSections); + initialiseSection(new DataPropertyDisjointWithListItemParser(), dataPropertyFrameSections); + initialiseSection(new DataPropertyDomainListItemParser(), dataPropertyFrameSections); + initialiseSection(new DataPropertyRangeListItemParser(), dataPropertyFrameSections); + initialiseSection(new DataPropertyCharacteristicsItemParser(), dataPropertyFrameSections); + initialiseSection(new EntityAnnotationsListItemParser<OWLDataProperty>(), dataPropertyFrameSections); + } + + + private Map<String, AnnotatedListItemParser<OWLAnnotationProperty, ?>> annotationPropertyFrameSections = new HashMap<String, AnnotatedListItemParser<OWLAnnotationProperty, ?>>(); + + private void initialiseAnnotationPropertyFrameSections() { + initialiseSection(new AnnotationPropertySubPropertyOfListItemParser(), annotationPropertyFrameSections); + initialiseSection(new AnnotationPropertyDomainListItemParser(), annotationPropertyFrameSections); + initialiseSection(new AnnotationPropertyRangeListItemParser(), annotationPropertyFrameSections); + initialiseSection(new EntityAnnotationsListItemParser<OWLAnnotationProperty>(), annotationPropertyFrameSections); + } + + private Map<String, AnnotatedListItemParser<OWLIndividual, ?>> individualFrameSections = new HashMap<String, AnnotatedListItemParser<OWLIndividual, ?>>(); + + public void initialiseIndividualFrameSections() { + initialiseSection(new IndividualAnnotationItemParser(), individualFrameSections); + initialiseSection(new IndividualTypesItemParser(), individualFrameSections); + initialiseSection(new IndividualFactsItemParser(), individualFrameSections); + initialiseSection(new IndividualSameAsItemParser(), individualFrameSections); + initialiseSection(new IndividualDifferentFromItemParser(), individualFrameSections); + // Extensions + initialiseSection(new IndividualDifferentIndividualsItemParser(), individualFrameSections); + } + + + + protected List<ManchesterOWLSyntaxTokenizer.Token> getTokens() { + return tokens; + } + + + protected void reset() { + tokenIndex = 0; + } + + + public String getBase() { + return base; + } + + + public void setBase(String base) { + this.base = base; + } + + + public OWLEntityChecker getOWLEntityChecker() { + return owlEntityChecker; + } + + + public void setOWLEntityChecker(OWLEntityChecker owlEntityChecker) { + this.owlEntityChecker = owlEntityChecker; + } + + + public boolean isOntologyName(String name) { + return owlOntologyChecker.getOntology(name) != null; + } + + + public boolean isClassName(String name) { + return classNames.contains(name) || owlEntityChecker != null && owlEntityChecker.getOWLClass(name) != null; + } + + + public OWLOntology getOntology(String name) { + return owlOntologyChecker.getOntology(name); + } + + + public void setOWLOntologyChecker(OWLOntologyChecker owlOntologyChecker) { + this.owlOntologyChecker = owlOntologyChecker; + } + + + public boolean isObjectPropertyName(String name) { + return objectPropertyNames.contains(name) || owlEntityChecker != null && owlEntityChecker.getOWLObjectProperty(name) != null; + } + + + public boolean isAnnotationPropertyName(String name) { + return annotationPropertyNames.contains(name) || owlEntityChecker != null && owlEntityChecker.getOWLAnnotationProperty(name) != null; + } + + + public boolean isDataPropertyName(String name) { + return dataPropertyNames.contains(name) || owlEntityChecker != null && owlEntityChecker.getOWLDataProperty(name) != null; + } + + + public boolean isIndividualName(String name) { + return individualNames.contains(name) || owlEntityChecker != null && owlEntityChecker.getOWLIndividual(name) != null; + } + + + public boolean isDatatypeName(String name) { + return dataTypeNames.contains(name) || owlEntityChecker != null && owlEntityChecker.getOWLDatatype(name) != null; + } + + + public boolean isSWRLBuiltin(String name) { + return ruleBuiltIns.containsKey(name); + } + + + public OWLClass getOWLClass(String name) { + OWLClass cls = owlEntityChecker.getOWLClass(name); + if (cls == null && classNames.contains(name)) { + cls = dataFactory.getOWLClass(getIRI(name)); + } + return cls; + } + + + public OWLObjectProperty getOWLObjectProperty(String name) { + OWLObjectProperty prop = owlEntityChecker.getOWLObjectProperty(name); + if (prop == null && objectPropertyNames.contains(name)) { + prop = dataFactory.getOWLObjectProperty(getIRI(name)); + } + return prop; + } + + + public OWLIndividual getOWLIndividual(String name) { + if (name.startsWith("_:")) { + return dataFactory.getOWLAnonymousIndividual(name); + } + return getOWLNamedIndividual(name); + } + + private OWLNamedIndividual getOWLNamedIndividual(String name) { + OWLNamedIndividual ind = owlEntityChecker.getOWLIndividual(name); + if (ind == null && individualNames.contains(name)) { + ind = dataFactory.getOWLNamedIndividual(getIRI(name)); + } + return ind; + } + + + public OWLDataProperty getOWLDataProperty(String name) { + OWLDataProperty prop = owlEntityChecker.getOWLDataProperty(name); + if (prop == null && dataPropertyNames.contains(name)) { + prop = dataFactory.getOWLDataProperty(getIRI(name)); + } + return prop; + } + + + public OWLDatatype getOWLDatatype(String name) { + OWLDatatype dt = owlEntityChecker.getOWLDatatype(name); + if (dt == null && dataTypeNames.contains(name)) { + dt = dataFactory.getOWLDatatype(getIRI(name)); + } + return dt; + } + + + public OWLAnnotationProperty getOWLAnnotationProperty(String name) { + OWLAnnotationProperty prop = owlEntityChecker.getOWLAnnotationProperty(name); + if (prop == null && annotationPropertyNames.contains(name)) { + prop = dataFactory.getOWLAnnotationProperty(getIRI(name)); + } + return prop; + } + + + protected ManchesterOWLSyntaxTokenizer.Token getLastToken() { + if (tokenIndex - 1 > -1) { + return tokens.get(tokenIndex - 1); +// return tokenIndex < tokens.size() ? tokens.get(tokenIndex) : tokens.get(tokens.size() - 1); + } + else { + return tokens.get(0); + } + } + + + protected String peekToken() { + return getToken().getToken(); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // Tokenizer + // + //////////////////////////////////////////////////////////////////////////////////////////////////// + + + protected String consumeToken() { + String token = getToken().getToken(); + if (tokenIndex < tokens.size() - 1) { + tokenIndex++; + } + + return token; + } + + + protected void consumeToken(String expected) throws ParserException { + String tok = consumeToken(); + if (!tok.equals(expected)) { + throw createException(expected); + } + } + + + public ManchesterOWLSyntaxTokenizer.Token getToken() { + return tokens.get((tokenIndex < tokens.size()) ? tokenIndex : tokenIndex - 1); + } + + + public int getTokenPos() { + return getToken().getPos(); + } + + + public int getTokenCol() { + return getToken().getCol(); + } + + + public int getTokenRow() { + return getToken().getRow(); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // Parser + // + //////////////////////////////////////////////////////////////////////////////////////////////////// + + + /** + * Parses an OWL class expression that is represented in Manchester OWL Syntax + * @return The parsed class expression + * @throws ParserException If a class expression could not be parsed. + */ + public OWLClassExpression parseClassExpression() throws ParserException { + OWLClassExpression desc = parseIntersection(); + if (!consumeToken().equals(ManchesterOWLSyntaxTokenizer.EOF)) { + throw createException(ManchesterOWLSyntaxTokenizer.EOF); + } + return desc; + } + + + public OWLClassExpression parseIntersection() throws ParserException { + Set<OWLClassExpression> ops = new HashSet<OWLClassExpression>(); + String kw = AND; + while (kw.equalsIgnoreCase(AND)) { + potentialKeywords.remove(AND); + ops.add(parseUnion()); + potentialKeywords.add(AND); + kw = peekToken(); + if (kw.equalsIgnoreCase(AND)) { + kw = consumeToken(); + } + else if (kw.equalsIgnoreCase("that")) { + consumeToken(); + kw = AND; + } + } + if (ops.size() == 1) { + return ops.iterator().next(); + } + else { + return dataFactory.getOWLObjectIntersectionOf(ops); + } + } + + + public OWLClassExpression parseUnion() throws ParserException { + Set<OWLClassExpression> ops = new HashSet<OWLClassExpression>(); + String kw = OR; + while (kw.equalsIgnoreCase(OR)) { + potentialKeywords.remove(OR); + ops.add(parseNonNaryClassExpression()); + potentialKeywords.add(OR); + kw = peekToken(); + if (kw.equalsIgnoreCase(OR)) { + kw = consumeToken(); + } + } + if (ops.size() == 1) { + return ops.iterator().next(); + } + else { + return dataFactory.getOWLObjectUnionOf(ops); + } + } + + + public OWLObjectPropertyExpression parseObjectPropertyExpression(boolean allowUndeclared) throws ParserException { + String tok = consumeToken(); + if (tok.equalsIgnoreCase(INVERSE)) { + String open = peekToken(); + boolean brackets = false; + if (open.equals("(")) { + consumeToken(); + brackets = true; + } + OWLObjectPropertyExpression prop = parseObjectPropertyExpression(); + if (brackets) { + String close = consumeToken(); + if (!close.equals(")")) { + throw createException(")"); + } + } + return dataFactory.getOWLObjectInverseOf(prop); + } + else { + if (!allowUndeclared && !isObjectPropertyName(tok)) { + throw createException(false, true, false, false, false, false, INVERSE); + } + return getOWLObjectProperty(tok); + } + } + + + public OWLObjectPropertyExpression parseObjectPropertyExpression() throws ParserException { + return parseObjectPropertyExpression(false); + } + + + public OWLPropertyExpression<?,?> parsePropertyExpression() throws ParserException { + String tok = peekToken(); + if (isObjectPropertyName(tok)) { + return parseObjectPropertyExpression(); + } + else if (tok.equalsIgnoreCase(INVERSE)) { + return parseObjectPropertyExpression(); + } + else if (isDataPropertyName(tok)) { + return parseDataProperty(); + } + else { + consumeToken(); + throw createException(false, true, true, false, false, false, INVERSE); + } + } + + + public OWLClassExpression parseRestriction() throws ParserException { + String tok = peekToken(); + if (isObjectPropertyName(tok) || tok.equalsIgnoreCase(INVERSE)) { + return parseObjectRestriction(); + } + else if (isDataPropertyName(tok)) { + return parseDataRestriction(); + } + else { + consumeToken(); + throw createException(false, true, true, false); + } + } + + + /** + * Parses all class expressions except ObjectIntersectionOf and ObjectUnionOf + * @return The class expression which was parsed + * @throws ParserException if a non-nary class expression could not be parsed + */ + public OWLClassExpression parseNonNaryClassExpression() throws ParserException { + + String tok = peekToken(); + if (tok.equalsIgnoreCase(NOT)) { + consumeToken(); + OWLClassExpression complemented = parseNestedClassExpression(false); + return dataFactory.getOWLObjectComplementOf(complemented); + } + else if (isObjectPropertyName(tok) || tok.equalsIgnoreCase(INVERSE)) { + return parseObjectRestriction(); + } + else if (isDataPropertyName(tok)) { + // Data restriction + return parseDataRestriction(); + } + else if (tok.equals("{")) { + return parseObjectOneOf(); + } + else if (tok.equals("(")) { + return parseNestedClassExpression(false); + } + else if (isClassName(tok)) { + consumeToken(); + return getOWLClass(tok); + } + // Add option for strict class name checking + else { + consumeToken(); + throw createException(true, true, true, false, false, false, "(", "{", NOT, INVERSE); + } + } + + + public OWLClassExpression parseObjectRestriction() throws ParserException { + OWLObjectPropertyExpression prop = parseObjectPropertyExpression(); + String kw = consumeToken(); + if (kw.equalsIgnoreCase(SOME)) { + String possSelfToken = peekToken(); + if (possSelfToken.equalsIgnoreCase(SELF)) { + consumeToken(); + return dataFactory.getOWLObjectHasSelf(prop); + } + else { + OWLClassExpression filler = null; + try { + filler = parseNestedClassExpression(false); + } + catch (ParserException e) { + Set<String> keywords = new HashSet<String>(); + keywords.addAll(e.getExpectedKeywords()); + keywords.add(SELF); + throw createException(e.isClassNameExpected(), e.isObjectPropertyNameExpected(), e.isDataPropertyNameExpected(), e.isIndividualNameExpected(), e.isDatatypeNameExpected(), e.isAnnotationPropertyNameExpected(), keywords.toArray(new String[keywords.size()])); + } + return dataFactory.getOWLObjectSomeValuesFrom(prop, filler); + } + } + else if (kw.equalsIgnoreCase(ONLY)) { + OWLClassExpression filler = parseNestedClassExpression(false); + return dataFactory.getOWLObjectAllValuesFrom(prop, filler); + } + else if (kw.equalsIgnoreCase(VALUE)) { + String indName = consumeToken(); + if (!isIndividualName(indName)) { + throw createException(false, false, false, true); + } + return dataFactory.getOWLObjectHasValue(prop, getOWLIndividual(indName)); + } + else if (kw.equalsIgnoreCase(MIN)) { + int card = parseInteger(); + OWLClassExpression filler = parseNestedClassExpression(true); + if (filler != null) { + return dataFactory.getOWLObjectMinCardinality(card, prop, filler); + } + else { + return dataFactory.getOWLObjectMinCardinality(card, prop); + } + } + else if (kw.equalsIgnoreCase(MAX)) { + int card = parseInteger(); + OWLClassExpression filler = parseNestedClassExpression(true); + if (filler != null) { + return dataFactory.getOWLObjectMaxCardinality(card, prop, filler); + } + else { + return dataFactory.getOWLObjectMaxCardinality(card, prop); + } + } + else if (kw.equalsIgnoreCase(EXACTLY)) { + int card = parseInteger(); + OWLClassExpression filler = parseNestedClassExpression(true); + if (filler != null) { + return dataFactory.getOWLObjectExactCardinality(card, prop, filler); + } + else { + return dataFactory.getOWLObjectExactCardinality(card, prop); + } + } + else if (kw.equalsIgnoreCase(ONLYSOME)) { + String tok = peekToken(); + Set<OWLClassExpression> descs = new HashSet<OWLClassExpression>(); + if (!tok.equals("[")) { + descs.add(parseIntersection()); + } + else { + descs.addAll(parseClassExpressionList("[", "]")); + } + Set<OWLClassExpression> ops = new HashSet<OWLClassExpression>(); + for (OWLClassExpression desc : descs) { + ops.add(dataFactory.getOWLObjectSomeValuesFrom(prop, desc)); + } + OWLClassExpression filler; + if (descs.size() == 1) { + filler = descs.iterator().next(); + } + else { + filler = dataFactory.getOWLObjectUnionOf(descs); + } + ops.add(dataFactory.getOWLObjectAllValuesFrom(prop, filler)); + return dataFactory.getOWLObjectIntersectionOf(ops); + } + else if (kw.equalsIgnoreCase(SELF)) { + return dataFactory.getOWLObjectHasSelf(prop); + } + else { + // Error! + throw createException(SOME, ONLY, VALUE, MIN, MAX, EXACTLY, SELF); + } + } + + + public OWLClassExpression parseDataRestriction() throws ParserException { + OWLDataPropertyExpression prop = parseDataProperty(); + String kw = consumeToken(); + if (kw.equalsIgnoreCase(SOME)) { + OWLDataRange rng = parseDataRange(); + if(rng==null) { + throw new ParserException(getTokenSequence(), getTokenPos(), getTokenRow(), getTokenCol(), true, false, false, false, true, false, Collections.<String>emptySet()); +// return dataFactory.getOWLDataSomeValuesFrom(prop, rng) + } + return dataFactory.getOWLDataSomeValuesFrom(prop, rng); + } + else if (kw.equalsIgnoreCase(ONLY)) { + OWLDataRange rng = parseDataRange(); + return dataFactory.getOWLDataAllValuesFrom(prop, rng); + } + else if (kw.equalsIgnoreCase(VALUE)) { + OWLLiteral con = parseConstant(); + return dataFactory.getOWLDataHasValue(prop, con); + } + else if (kw.equalsIgnoreCase(MIN)) { + int card = parseInteger(); + OWLDataRange rng = parseDataRange(); + if (rng != null) { + return dataFactory.getOWLDataMinCardinality(card, prop, rng); + } + else { + return dataFactory.getOWLDataMinCardinality(card, prop); + } + } + else if (kw.equalsIgnoreCase(EXACTLY)) { + int card = parseInteger(); + OWLDataRange rng = parseDataRange(); + if (rng != null) { + return dataFactory.getOWLDataExactCardinality(card, prop, rng); + } + else { + return dataFactory.getOWLDataExactCardinality(card, prop); + } + } + else if (kw.equalsIgnoreCase(MAX)) { + int card = parseInteger(); + OWLDataRange rng = parseDataRange(); + if (rng != null) { + return dataFactory.getOWLDataMaxCardinality(card, prop, rng); + } + else { + return dataFactory.getOWLDataMaxCardinality(card, prop); + } + } + throw createException(SOME, ONLY, VALUE, MIN, EXACTLY, MAX); + } + + + public OWLFacet parseFacet() throws ParserException { + String facet = consumeToken(); + if (facet.equals(">")) { + if (peekToken().equals("=")) { + consumeToken(); + return OWLFacet.MIN_INCLUSIVE; + } + else { + return OWLFacet.MIN_EXCLUSIVE; + } + } + else if (facet.equals("<")) { + if (peekToken().equals("=")) { + consumeToken(); + return OWLFacet.MAX_INCLUSIVE; + } + else { + return OWLFacet.MAX_EXCLUSIVE; + } + } + return OWLFacet.getFacetBySymbolicName(facet); + } + + + public OWLDatatype parseDatatype() throws ParserException { + String name = consumeToken(); + return getOWLDatatype(name); + } + + + public OWLDataRange parseDataRange() throws ParserException { + return parseDataIntersectionOf(); + } + + public OWLDataRange parseDataIntersectionOf() throws ParserException { + String sep = AND; + Set<OWLDataRange> ranges = new HashSet<OWLDataRange>(); + while (sep.equals(AND)) { + ranges.add(parseDataUnionOf()); + sep = peekToken(); + if (sep.equals(AND)) { + consumeToken(); + } + } + if (ranges.size() == 1) { + return ranges.iterator().next(); + } + else { + return dataFactory.getOWLDataIntersectionOf(ranges); + } + } + + public OWLDataRange parseDataUnionOf() throws ParserException { + String sep = OR; + Set<OWLDataRange> ranges = new HashSet<OWLDataRange>(); + while (sep.equals(OR)) { + ranges.add(parseDataRangePrimary()); + sep = peekToken(); + if (sep.equals(OR)) { + consumeToken(); + } + } + if (ranges.size() == 1) { + return ranges.iterator().next(); + } + else { + return dataFactory.getOWLDataUnionOf(ranges); + } + } + + private OWLDataRange parseDataRangePrimary() throws ParserException { + String tok = peekToken(); + + if (isDatatypeName(tok)) { + consumeToken(); + OWLDatatype datatype = getOWLDatatype(tok); + String next = peekToken(); + if (next.equals("[")) { + // Restricted data range + consumeToken(); + String sep = ","; + Set<OWLFacetRestriction> facetRestrictions = new HashSet<OWLFacetRestriction>(); + while (sep.equals(",")) { + OWLFacet fv = parseFacet(); + if (fv == null) { + throw createException(OWLFacet.getFacets().toArray(new String[OWLFacet.getFacetIRIs().size()])); + } + OWLLiteral con = parseConstant(); + // if (!con.isRDFPlainLiteral()) { + // con = dataFactory.getOWLLiteral(con.getLiteral()); + // } + facetRestrictions.add(dataFactory.getOWLFacetRestriction(fv, con)); + sep = consumeToken(); + } + if (!sep.equals("]")) { + throw createException("]"); + } + return dataFactory.getOWLDatatypeRestriction(datatype, facetRestrictions); + } + else { + return datatype; + } + } + else if (tok.equalsIgnoreCase(NOT)) { + return parseDataComplementOf(); + } + else if (tok.equals("{")) { + return parseDataOneOf(); + } + else if (tok.equals("(")) { + consumeToken(); + OWLDataRange rng = parseDataRange(); + consumeToken(")"); + return rng; + } + else if (!tok.equals(ManchesterOWLSyntaxTokenizer.EOF)) { + consumeToken(); + throw createException(false, false, false, false, true, false, NOT, "{"); + } + return null; + } + + + public Set<OWLDataRange> parseDataRangeList() throws ParserException { + String sep = ","; + Set<OWLDataRange> ranges = new HashSet<OWLDataRange>(); + while (sep.equals(",")) { + potentialKeywords.remove(","); + OWLDataRange rng = parseDataRange(); + ranges.add(rng); + potentialKeywords.add(","); + sep = peekToken(); + if (sep.equals(",")) { + consumeToken(); + } + } + return ranges; + } + + + private OWLDataRange parseDataOneOf() throws ParserException { + consumeToken(); + Set<OWLLiteral> cons = new HashSet<OWLLiteral>(); + String sep = ","; + while (sep.equals(",")) { + OWLLiteral con = parseConstant(); + cons.add(con); + sep = consumeToken(); + } + if (!sep.equals("}")) { + throw createException(",", "}"); + } + return dataFactory.getOWLDataOneOf(cons); + } + + + private OWLDataRange parseDataComplementOf() throws ParserException { + String not = consumeToken(); + if (!not.equalsIgnoreCase(NOT)) { + throw createException(NOT); + } + OWLDataRange complementedDataRange = parseDataRangePrimary(); + return dataFactory.getOWLDataComplementOf(complementedDataRange); + } + + public OWLLiteral parseLiteral() throws ParserException { + String tok = consumeToken(); + if (tok.startsWith("\"")) { + String lit = ""; + if (tok.length() > 2) { + lit = tok.substring(1, tok.length() - 1); + } + if (peekToken().equals("^")) { + consumeToken(); + if (!peekToken().equals("^")) { + throw createException("^"); + } + consumeToken(); + return dataFactory.getOWLLiteral(lit, parseDatatype()); + } + else if (peekToken().startsWith("@")) { + // Plain literal with a language tag + String lang = consumeToken().substring(1); + return dataFactory.getOWLLiteral(lit, lang); + } + else { + // Plain literal without a language tag + return dataFactory.getOWLLiteral(lit, ""); + } + } + else { + try { + int i = Integer.parseInt(tok); + return dataFactory.getOWLLiteral(tok, OWL2Datatype.XSD_INTEGER); + } + catch (NumberFormatException e) { + // Ignore - not interested + } + if (tok.endsWith("f")||tok.endsWith("F")) { + try { + // XXX this extra F might qualify as Float a Double INF/-INF + float f = Float.parseFloat(tok.replace("INF", "Infinity").replace("inf", "Infinity")); + return dataFactory.getOWLLiteral(Float.toString(f).replace("Infinity", "INF"), OWL2Datatype.XSD_FLOAT); + } + catch (NumberFormatException e) { + // Ignore - not interested + } + } + try { + double d = Double.parseDouble(tok); + return dataFactory.getOWLLiteral(tok, OWL2Datatype.XSD_DOUBLE); + } + catch (NumberFormatException e) { + // Ignore - not interested + } + + if (tok.equals("true")) { + return dataFactory.getOWLLiteral(true); + } + else if (tok.equals("false")) { + return dataFactory.getOWLLiteral(false); + } + } + throw createException(false, false, false, false, false, false, "true", "false", "$integer$", "$float$", "$double$", "\"$Literal$\"", "\"$Literal$\"^^<datatype>", "\"$Literal$\"@<lang>"); + } + + /** + * @deprecated Use {@link #parseLiteral()} instead + */ + @Deprecated + public OWLLiteral parseConstant() throws ParserException { + return parseLiteral(); + } + + + public int parseInteger() throws ParserException { + String i = consumeToken(); + try { + return Integer.parseInt(i); + } + catch (NumberFormatException e) { + throw new ParserException(Arrays.asList(getToken().getToken()), getTokenPos(), getTokenRow(), true, getTokenCol()); + } + } + + + public String getLineCol() { + return "Encountered " + getLastToken() + " at " + getTokenRow() + ":" + getTokenCol() + " "; + } + + + private OWLClassExpression parseNestedClassExpression(boolean lookaheadCheck) throws ParserException { + String tok = peekToken(); + if (tok.equals("(")) { + consumeToken(); + OWLClassExpression desc = parseIntersection(); + String closeBracket = consumeToken(); + if (!closeBracket.equals(")")) { + // Error! + throw createException(")"); + } + return desc; + } + else if (tok.equals("{")) { + return parseObjectOneOf(); + } + else if (isClassName(tok)) { + String name = consumeToken(); + return getOWLClass(name); + } + else if (!tok.equals(ManchesterOWLSyntaxTokenizer.EOF) || !lookaheadCheck) { + consumeToken(); + throw createException(true, false, false, false, false, false, "(", "{"); + } + return null; + } + + + public OWLClassExpression parseObjectOneOf() throws ParserException { + String open = consumeToken(); + if (!open.equals("{")) { + throw createException("{"); + } + String sep = ","; + Set<OWLIndividual> inds = new HashSet<OWLIndividual>(); + while (sep.equals(",")) { + OWLIndividual ind = parseIndividual(); + inds.add(ind); + sep = peekToken(); + if (sep.equals(",")) { + consumeToken(); + } + } + String close = consumeToken(); + if (!close.equals("}")) { + throw createException("}", ","); + } + return dataFactory.getOWLObjectOneOf(inds); + } + + + + private <F> void initialiseSection(AnnotatedListItemParser<F, ?> parser, Map<String, AnnotatedListItemParser<F, ?>> map, String ... synonyms) { + map.put(parser.getFrameSectionKeyword(), parser); + for(String syn : synonyms) { + map.put(syn, parser); + } + } + + public Set<OntologyAxiomPair> parseFrames() throws ParserException { + Set<OntologyAxiomPair> axioms = new HashSet<OntologyAxiomPair>(); + Set<String> possible = new HashSet<String>(); + resetPossible(possible); + while (true) { + String tok = peekToken(); + if (tok.equalsIgnoreCase(CLASS)) { + potentialKeywords.clear(); + resetPossible(possible); + axioms.addAll(parseClassFrame()); + possible.addAll(classFrameSections.keySet()); + } + else if (tok.equalsIgnoreCase(OBJECT_PROPERTY)) { + potentialKeywords.clear(); + resetPossible(possible); + axioms.addAll(parseObjectPropertyFrame()); + possible.addAll(objectPropertyFrameSections.keySet()); + } + else if (tok.equalsIgnoreCase(DATA_PROPERTY)) { + potentialKeywords.clear(); + resetPossible(possible); + axioms.addAll(parseDataPropertyFrame()); + possible.ad... [truncated message content] |
From: <lor...@us...> - 2013-03-19 13:41:06
|
Revision: 3913 http://sourceforge.net/p/dl-learner/code/3913 Author: lorenz_b Date: 2013-03-19 13:40:46 +0000 (Tue, 19 Mar 2013) Log Message: ----------- Changed SPARQL kb constructors. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java trunk/components-ext/src/main/java/org/dllearner/common/index/HierarchicalIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java trunk/pom.xml trunk/scripts/pom.xml Modified: trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-03-18 12:24:44 UTC (rev 3912) +++ trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-03-19 13:40:46 UTC (rev 3913) @@ -37,6 +37,10 @@ this.model = model; } + public LocalModelBasedSparqlEndpointKS(Model model) { + this.model = ModelFactory.createOntologyModel(enableReasoning ? OntModelSpec.OWL_MEM : OntModelSpec.OWL_MEM_RDFS_INF, model); + } + @Override public void init() throws ComponentInitException { Model baseModel = ModelFactory.createDefaultModel(); Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-03-18 12:24:44 UTC (rev 3912) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-03-19 13:40:46 UTC (rev 3913) @@ -439,7 +439,7 @@ @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()); + String query = String.format("SELECT DISTINCT ?class WHERE {<%s> a ?class.}", individual.getName()); ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ @@ -448,6 +448,18 @@ } return types; } + + public Set<NamedClass> getTypes() { + Set<NamedClass> types = new HashSet<NamedClass>(); + String query = String.format("SELECT ?class WHERE {[] a ?class.}"); + ResultSet rs = executeSelectQuery(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) { Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/HierarchicalIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/HierarchicalIndex.java 2013-03-18 12:24:44 UTC (rev 3912) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/HierarchicalIndex.java 2013-03-19 13:40:46 UTC (rev 3913) @@ -15,6 +15,14 @@ this.primaryIndex = primaryIndex; this.secondaryIndex = secondaryIndex; } + + public Index getPrimaryIndex() { + return primaryIndex; + } + + public Index getSecondaryIndex() { + return secondaryIndex; + } @Override public List<String> getResources(String queryString) { Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java 2013-03-18 12:24:44 UTC (rev 3912) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java 2013-03-19 13:40:46 UTC (rev 3913) @@ -115,6 +115,7 @@ SolrQuery query = new SolrQuery(solrString); query.setRows(limit); query.setStart(offset); + query.addField("uri"); if(sortField != null){ query.addSortField(sortField, ORDER.desc); } Modified: trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java =================================================================== --- trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2013-03-18 12:24:44 UTC (rev 3912) +++ trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2013-03-19 13:40:46 UTC (rev 3913) @@ -25,6 +25,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -32,7 +33,9 @@ import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.math.BigInteger; +import java.net.Authenticator; import java.net.MalformedURLException; +import java.net.PasswordAuthentication; import java.net.SocketTimeoutException; import java.net.URI; import java.net.URISyntaxException; @@ -41,19 +44,21 @@ import java.security.SecureRandom; import java.text.DecimalFormat; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; 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; import joptsimple.OptionException; import joptsimple.OptionParser; import joptsimple.OptionSet; +import joptsimple.OptionSpec; import org.aksw.commons.jena_owlapi.Conversion; import org.apache.log4j.ConsoleAppender; @@ -61,8 +66,6 @@ import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxOntologyFormat; -import org.dllearner.algorithms.DisjointClassesLearner; -import org.dllearner.algorithms.SimpleSubclassLearner; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.algorithms.properties.AsymmetricObjectPropertyAxiomLearner; import org.dllearner.algorithms.properties.DataPropertyDomainAxiomLearner; @@ -91,9 +94,9 @@ import org.dllearner.core.ComponentInitException; import org.dllearner.core.EvaluatedAxiom; import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.KnowledgeSource; import org.dllearner.core.LearningAlgorithm; import org.dllearner.core.LearningProblemUnsupportedException; -import org.dllearner.core.OntologyFormat; import org.dllearner.core.Score; import org.dllearner.core.config.ConfigHelper; import org.dllearner.core.config.ConfigOption; @@ -105,11 +108,13 @@ import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; import org.dllearner.core.owl.SubClassAxiom; +import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; -import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.Heuristics.HeuristicType; @@ -118,14 +123,10 @@ import org.dllearner.utilities.EnrichmentVocabulary; import org.dllearner.utilities.Helper; import org.dllearner.utilities.PrefixCCMap; -import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; -import org.dllearner.utilities.owl.DLLearnerAxiomConvertVisitor; import org.dllearner.utilities.owl.OWLAPIAxiomConvertVisitor; -import org.dllearner.utilities.owl.OWLAPIConverter; -import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; import org.semanticweb.owlapi.io.SystemOutDocumentTarget; @@ -144,10 +145,18 @@ import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; +import com.clarkparsia.owlapiv3.XSD; +import com.google.common.collect.Sets; import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.sparql.engine.http.QueryExceptionHTTP; +import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; /** * Command Line Interface for Enrichment. @@ -210,6 +219,7 @@ private double threshold = 0.7; private int chunksize = 1000; private boolean omitExistingAxioms; + private List<String> allowedNamespaces = new ArrayList<String>(); private boolean useInference; private SPARQLReasoner reasoner; @@ -227,13 +237,15 @@ // private CommonPrefixMap prefixes = new CommonPrefixMap(); // cache for SparqKnowledgeSource - SparqlKnowledgeSource ksCached; + KnowledgeSource ksCached; AbstractReasonerComponent rcCached; private Set<OWLAxiom> learnedOWLAxioms; private Set<EvaluatedAxiom> learnedEvaluatedAxioms; - public Enrichment(SparqlEndpoint se, Entity resource, double threshold, int nrOfAxiomsToLearn, boolean useInference, boolean verbose, int chunksize, int maxExecutionTimeInSeconds, boolean omitExistingAxioms) { + public Enrichment(SparqlEndpoint se, Entity resource, double threshold, int nrOfAxiomsToLearn, + boolean useInference, boolean verbose, int chunksize, + int maxExecutionTimeInSeconds, boolean omitExistingAxioms) { this.se = se; this.resource = resource; this.verbose = verbose; @@ -276,8 +288,8 @@ dataPropertyAlgorithms.add(SubDataPropertyOfAxiomLearner.class); classAlgorithms = new LinkedList<Class<? extends LearningAlgorithm>>(); - classAlgorithms.add(DisjointClassesLearner.class); - classAlgorithms.add(SimpleSubclassLearner.class); +// classAlgorithms.add(DisjointClassesLearner.class); +// classAlgorithms.add(SimpleSubclassLearner.class); classAlgorithms.add(CELOE.class); algorithmRuns = new LinkedList<AlgorithmRun>(); @@ -286,6 +298,10 @@ learnedEvaluatedAxioms = new HashSet<EvaluatedAxiom>(); } + public void setAllowedNamespaces(List<String> allowedNamespaces) { + this.allowedNamespaces = allowedNamespaces; + } + public void start() throws ComponentInitException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, LearningProblemUnsupportedException, MalformedURLException { // instantiate SPARQL endpoint wrapper component @@ -310,7 +326,9 @@ if(resource == null) { // loop over all entities and call appropriate algorithms - Set<NamedClass> classes = st.getAllClasses(); + + Set<NamedClass> classes = reasoner.getTypes();//st.getAllClasses(); + filterByNamespaces(classes); int entities = 0; for(NamedClass nc : classes) { try { @@ -323,24 +341,26 @@ break; } } - entities = 0; - Set<ObjectProperty> objectProperties = st.getAllObjectProperties(); - for(ObjectProperty property : objectProperties) { - runObjectPropertyAlgorithms(ks, property); - entities++; - if(maxEntitiesPerType != -1 && entities > maxEntitiesPerType) { - break; - } - } - entities = 0; - Set<DatatypeProperty> dataProperties = st.getAllDataProperties(); - for(DatatypeProperty property : dataProperties) { - runDataPropertyAlgorithms(ks, property); - entities++; - if(maxEntitiesPerType != -1 && entities > maxEntitiesPerType) { - break; - } - } +// entities = 0; +// Set<ObjectProperty> objectProperties = st.getAllObjectProperties(); +// filterByNamespaces(objectProperties); +// for(ObjectProperty property : objectProperties) { +// runObjectPropertyAlgorithms(ks, property); +// entities++; +// if(maxEntitiesPerType != -1 && entities > maxEntitiesPerType) { +// break; +// } +// } +// entities = 0; +// Set<DatatypeProperty> dataProperties = st.getAllDataProperties(); +// filterByNamespaces(dataProperties); +// for(DatatypeProperty property : dataProperties) { +// runDataPropertyAlgorithms(ks, property); +// entities++; +// if(maxEntitiesPerType != -1 && entities > maxEntitiesPerType) { +// break; +// } +// } } else { if(resource instanceof ObjectProperty) { System.out.println(resource + " appears to be an object property. Running appropriate algorithms.\n"); @@ -363,13 +383,32 @@ } } + private <T extends Entity> void filterByNamespaces(Collection<T> entities){ + if(allowedNamespaces != null && !allowedNamespaces.isEmpty()){ + for (Iterator<T> iterator = entities.iterator(); iterator.hasNext();) { + T entity = iterator.next();System.out.println(entity.getName()); + boolean startsWithAllowedNamespace = false; + for (String ns : allowedNamespaces) { + if(entity.getName().startsWith(ns)){ + startsWithAllowedNamespace = true; + break; + } + } + if(!startsWithAllowedNamespace){ + iterator.remove(); + } + } + } + } + @SuppressWarnings("unchecked") private void runClassLearningAlgorithms(SparqlEndpointKS ks, NamedClass nc) throws ComponentInitException { -// System.out.println("Running algorithms for class " + nc); + System.out.println("Running algorithms for class " + nc); for (Class<? extends LearningAlgorithm> algorithmClass : classAlgorithms) { if(algorithmClass == CELOE.class) { - applyCELOE(ks, nc, false, false); - applyCELOE(ks, nc, true, true); +// applyCELOE(ks, nc, false, false); +// applyCELOE(ks, nc, true, true); + applyCELOE(ks, nc, true, false); } else { applyLearningAlgorithm((Class<AxiomLearningAlgorithm>)algorithmClass, ks, nc); } @@ -377,14 +416,14 @@ } private void runObjectPropertyAlgorithms(SparqlEndpointKS ks, ObjectProperty property) throws ComponentInitException { -// System.out.println("Running algorithms for object property " + property); + System.out.println("Running algorithms for object property " + property); for (Class<? extends AxiomLearningAlgorithm> algorithmClass : objectPropertyAlgorithms) { applyLearningAlgorithm(algorithmClass, ks, property); } } private void runDataPropertyAlgorithms(SparqlEndpointKS ks, DatatypeProperty property) throws ComponentInitException { -// System.out.println("Running algorithms for data property " + property); + System.out.println("Running algorithms for data property " + property); for (Class<? extends AxiomLearningAlgorithm> algorithmClass : dataPropertyAlgorithms) { applyLearningAlgorithm(algorithmClass, ks, property); } @@ -394,24 +433,55 @@ // get instances of class as positive examples SPARQLReasoner sr = new SPARQLReasoner(ks); + System.out.print("finding positives ... "); + long startTime = System.currentTimeMillis(); SortedSet<Individual> posExamples = sr.getIndividuals(nc, 20); + long runTime = System.currentTimeMillis() - startTime; if(posExamples.isEmpty()){ System.out.println("Skipping CELOE because class " + nc.toString() + " is empty."); return Collections.emptyList(); } SortedSet<String> posExStr = Helper.getStringSet(posExamples); + System.out.println("done (" + posExStr.size()+ " examples found in " + runTime + " ms)"); // use own implementation of negative example finder - long startTime = System.currentTimeMillis(); System.out.print("finding negatives ... "); + startTime = System.currentTimeMillis(); AutomaticNegativeExampleFinderSPARQL2 finder = new AutomaticNegativeExampleFinderSPARQL2(ks.getEndpoint()); SortedSet<String> negExStr = finder.getNegativeExamples(nc.getName(), posExStr); - negExStr = SetManipulation.fuzzyShrink(negExStr, 20); + negExStr = SetManipulation.stableShrink(negExStr, 20); SortedSet<Individual> negExamples = Helper.getIndividualSet(negExStr); SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>(posExamples, negExamples); - long runTime = System.currentTimeMillis() - startTime; - System.out.println("done (" + negExStr.size()+ " examples fround in " + runTime + " ms)"); + runTime = System.currentTimeMillis() - startTime; + System.out.println("done (" + negExStr.size()+ " examples found in " + runTime + " ms)"); + AbstractReasonerComponent rc; + KnowledgeSource ksFragment; + if(reuseKnowledgeSource){ + ksFragment = ksCached; + rc = rcCached; + } else { + System.out.print("extracting fragment ... "); + startTime = System.currentTimeMillis(); + ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(ks.getEndpoint(), cache, 2); + Model model = ModelFactory.createDefaultModel(); + for(Individual example : Sets.union(posExamples, negExamples)){ + Model cbd = cbdGen.getConciseBoundedDescription(example.getName()); + model.add(cbd); + } + filter(model); + runTime = System.currentTimeMillis() - startTime; + System.out.println("done (" + model.size()+ " triples found in " + runTime + " ms)"); + OWLOntology ontology = asOWLOntology(model); + ksFragment = new OWLAPIOntology(ontology); +// ksFragment.init(); + rc = new FastInstanceChecker(ksFragment); + rc.init(); + ksCached = ksFragment; + rcCached = rc; + } + + /*//old way to get SPARQL fragment SparqlKnowledgeSource ks2; AbstractReasonerComponent rc; if(reuseKnowledgeSource) { @@ -439,7 +509,7 @@ rc.init(); ksCached = ks2; rcCached = rc; - } + }*/ ClassLearningProblem lp = new ClassLearningProblem(rc); lp.setClassToDescribe(nc); @@ -684,6 +754,50 @@ // return model; // } + private OWLOntology asOWLOntology(Model model) { + try { + FileOutputStream fos = null; + try { + fos = new FileOutputStream("bug.ttl"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + model.write(baos, "TURTLE", null); + model.write(fos, "TURTLE", null); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLOntology ontology = man.loadOntologyFromOntologyDocument(new ByteArrayInputStream(baos.toByteArray())); + return ontology; + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + return null; + } + + private void filter(Model model) { + // filter out triples with String literals, as there often occur are + // some syntax errors and they are not relevant for learning + List<Statement> statementsToRemove = new ArrayList<Statement>(); + for (Iterator<Statement> iter = model.listStatements().toList().iterator(); iter.hasNext();) { + Statement st = iter.next(); + RDFNode object = st.getObject(); + if (object.isLiteral()) { + // statementsToRemove.add(st); + Literal lit = object.asLiteral(); + if (lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)) { + st.changeObject("shortened", "en"); + } + } + //remove statements like <x a owl:Class> + if(st.getPredicate().equals(RDF.type)){ + if(object.equals(RDFS.Class.asNode()) || object.equals(OWL.Class.asNode()) || object.equals(RDFS.Literal.asNode())){ + statementsToRemove.add(st); + } + } + } + model.remove(statementsToRemove); + } + Model getModel(List<OWLAxiom> axioms) { Model model = ModelFactory.createDefaultModel(); try { @@ -793,7 +907,7 @@ "The resource for which enrichment axioms should be suggested.").withOptionalArg().ofType(URI.class); parser.acceptsAll(asList("o", "output"), "Specify a file where the output can be written.") .withOptionalArg().ofType(File.class); - // TODO: other interestig formats: html, manchester, sparul + // TODO: other interesting formats: html, manchester, sparul parser.acceptsAll(asList("f", "format"), "Format of the generated output (plain, rdf/xml, turtle, n-triples).").withOptionalArg() .ofType(String.class).defaultsTo("plain"); @@ -815,7 +929,16 @@ "Specifies the max execution time for each algorithm run and each entity.").withRequiredArg().ofType(Integer.class).defaultsTo(10); parser.acceptsAll(asList("omitExistingAxioms"), "Specifies whether return only axioms which not already exist in the knowlegde base.").withOptionalArg().ofType(Boolean.class).defaultsTo(false); + OptionSpec<String> allowedNamespacesOption = parser.accepts( "ns" ).withRequiredArg().ofType( String.class ) + .withValuesSeparatedBy( ',' ); + + //username and password if endpoint is protected + parser.acceptsAll(asList("u", "username"), "Specify the username.") + .withOptionalArg().ofType(String.class); + parser.acceptsAll(asList("pw", "password"), "Specify the password.") + .withOptionalArg().ofType(String.class); + // parse options and display a message for the user in case of problems OptionSet options = null; try { @@ -865,6 +988,19 @@ System.out.println("The specified resource appears not be a proper URI."); System.exit(0); } + //set credentials if needed + if(options.has("username") && options.has("password")){ + final String username = (String) options.valueOf("username"); + final String password = (String) options.valueOf("password"); + Authenticator.setDefault (new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password.toCharArray()); + } + }); + } + + LinkedList<String> defaultGraphURIs = new LinkedList<String>(); if(graph != null) { defaultGraphURIs.add(graph.toString()); @@ -912,9 +1048,13 @@ if(options.has("o") && (!options.has("f") || options.valueOf("f").equals("plain"))) { PrintStream printStream = new PrintStream(new FileOutputStream(f)); System.setOut(printStream); - } + } + //extract namespaces to which the analyzed entities will be restricted + List<String> allowedNamespaces = options.valuesOf(allowedNamespacesOption); + Enrichment e = new Enrichment(se, resource, threshold, maxNrOfResults, useInference, false, chunksize, maxExecutionTimeInSeconds, omitExistingAxioms); + e.setAllowedNamespaces(allowedNamespaces); e.start(); SparqlEndpointKS ks = new SparqlEndpointKS(se); @@ -927,6 +1067,8 @@ axioms.addAll(e.toRDF(run.getAxioms(), run.getAlgorithm(), run.getParameters(), ks)); } Model model = e.getModel(axioms); + OutputStream os = options.has("o") ? new FileOutputStream((File)options.valueOf("o")) : System.out; + if(options.valueOf("f").equals("turtle")) { if(options.has("o")) { model.write(new FileOutputStream(f), "TURTLE"); Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-18 12:24:44 UTC (rev 3912) +++ trunk/pom.xml 2013-03-19 13:40:46 UTC (rev 3913) @@ -123,7 +123,7 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> - <version>3.4</version> + <version>3.4.4</version> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> Modified: trunk/scripts/pom.xml =================================================================== --- trunk/scripts/pom.xml 2013-03-18 12:24:44 UTC (rev 3912) +++ trunk/scripts/pom.xml 2013-03-19 13:40:46 UTC (rev 3913) @@ -116,7 +116,6 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> -<!-- <version>3.4.4-SNAPSHOT</version> --> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-03-18 12:24:48
|
Revision: 3912 http://sourceforge.net/p/dl-learner/code/3912 Author: lorenz_b Date: 2013-03-18 12:24:44 +0000 (Mon, 18 Mar 2013) Log Message: ----------- Some updates. Modified Paths: -------------- trunk/components-core/pom.xml trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/ExtractionDBCache.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Modified: trunk/components-core/pom.xml =================================================================== --- trunk/components-core/pom.xml 2013-03-12 09:29:04 UTC (rev 3911) +++ trunk/components-core/pom.xml 2013-03-18 12:24:44 UTC (rev 3912) @@ -116,12 +116,23 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> + <version>3.4.4</version> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-reasoner</artifactId> </dependency> <dependency> + <groupId>net.sourceforge.owlapi</groupId> + <artifactId>owlapi-debugging</artifactId> + <version>3.3</version> +</dependency> +<dependency> + <groupId>net.sourceforge.owlapi</groupId> + <artifactId>owlapi-modularity</artifactId> + <version>3.3</version> +</dependency> +<dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-util</artifactId> </dependency> @@ -135,6 +146,10 @@ <groupId>org.mortbay.jetty</groupId> <artifactId>org.mortbay.jetty</artifactId> </exclusion> + <exclusion> + <artifactId>owlapi</artifactId> + <groupId>net.sourceforge.owlapi</groupId> + </exclusion> </exclusions> </dependency> Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java 2013-03-12 09:29:04 UTC (rev 3911) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/properties/DisjointObjectPropertyAxiomLearner.java 2013-03-18 12:24:44 UTC (rev 3912) @@ -116,7 +116,7 @@ //compute the overlap if exist Map<ObjectProperty, Integer> property2Overlap = new HashMap<ObjectProperty, Integer>(); String query = String.format("SELECT ?p (COUNT(*) AS ?cnt) WHERE {?s <%s> ?o. ?s ?p ?o.} GROUP BY ?p", propertyToDescribe.getName()); - ResultSet rs = executeSelectQuery(query); + System.out.println(query);ResultSet rs = executeSelectQuery(query); QuerySolution qs; while(rs.hasNext()){ qs = rs.next(); @@ -336,13 +336,13 @@ } public static void main(String[] args) throws Exception{ - SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); + SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpediaLiveAKSW(); // endpoint = new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList())); DisjointObjectPropertyAxiomLearner l = new DisjointObjectPropertyAxiomLearner(new SparqlEndpointKS(endpoint));//.getEndpointDBpediaLiveAKSW())); l.setPropertyToDescribe(new ObjectProperty("http://dbpedia.org/ontology/league")); l.setMaxExecutionTimeInSeconds(10); l.init(); - l.getReasoner().precomputeObjectPropertyPopularity(); +// l.getReasoner().precomputeObjectPropertyPopularity(); l.start(); for(EvaluatedAxiom ax : l.getCurrentlyBestEvaluatedAxioms(Integer.MAX_VALUE)){ System.out.println(ax); Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java 2013-03-12 09:29:04 UTC (rev 3911) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java 2013-03-18 12:24:44 UTC (rev 3912) @@ -13,4 +13,5 @@ public void setRestrictToNamespaces(List<String> namespaces); public void setRecursionDepth(int maxRecursionDepth); + } Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/ExtractionDBCache.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ExtractionDBCache.java 2013-03-12 09:29:04 UTC (rev 3911) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ExtractionDBCache.java 2013-03-18 12:24:44 UTC (rev 3912) @@ -38,9 +38,9 @@ import com.hp.hpl.jena.query.ResultSetRewindable; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.jamonapi.Monitor; import com.jamonapi.MonitorFactory; +//import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; /** * The class is used to cache information about resources to a database. Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java 2013-03-12 09:29:04 UTC (rev 3911) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java 2013-03-18 12:24:44 UTC (rev 3912) @@ -20,6 +20,7 @@ package org.dllearner.kb.sparql; import java.net.URL; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -49,6 +50,10 @@ this.namedGraphURIs=namedGraphURIs; } + public SparqlEndpoint(URL url, String defaultGraphURI) { + this(url, Collections.singletonList(defaultGraphURI), Collections.<String>emptyList()); + } + public URL getURL() { return this.url; } Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-03-12 09:29:04 UTC (rev 3911) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-03-18 12:24:44 UTC (rev 3912) @@ -783,12 +783,34 @@ return isObjectProperty; } - public boolean isDataProperty(String propertyURI){ - String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.DatatypeProperty.getURI()); + public boolean isObjectProperty(String propertyURI, boolean analyzeData){ + String query = String.format("ASK {<%s> a <%s>}", propertyURI, OWL.ObjectProperty.getURI()); boolean isObjectProperty = executeAskQuery(query); + if(!isObjectProperty && analyzeData){ + query = String.format("ASK {?s <%s> ?o.FILTER(isURI(?o))}", propertyURI); + isObjectProperty = executeAskQuery(query); + } 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()); + boolean isDataProperty = executeAskQuery(query); + if(!isDataProperty && analyzeData){ + query = String.format("ASK {?s <%s> ?o.FILTER(isLITERAL(?o))}", propertyURI); + isDataProperty = executeAskQuery(query); + } + return isDataProperty; + } + 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: <dc...@us...> - 2013-03-12 09:29:07
|
Revision: 3911 http://sourceforge.net/p/dl-learner/code/3911 Author: dcherix Date: 2013-03-12 09:29:04 +0000 (Tue, 12 Mar 2013) Log Message: ----------- statics paths removed Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2013-03-04 15:00:36 UTC (rev 3910) +++ trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2013-03-12 09:29:04 UTC (rev 3911) @@ -88,369 +88,387 @@ * @author Sebastian Hellmann */ public class DBpediaClassLearnerCELOE { - - public static String endpointurl = "http://live.dbpedia.org/sparql"; - public static int examplesize = 30; - - private static org.apache.log4j.Logger logger = org.apache.log4j.Logger - .getLogger(DBpediaClassLearnerCELOE.class); - - SparqlEndpoint sparqlEndpoint = null; - private Cache cache; - - public DBpediaClassLearnerCELOE() { - // OPTIONAL: if you want to do some case distinctions in the learnClass - // method, you could add - // parameters to the constructure e.g. YAGO_ - try { - sparqlEndpoint = new SparqlEndpoint(new URL(endpointurl)); - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - cache = new Cache("basCache"); - } - - public static void main(String args[]) - throws LearningProblemUnsupportedException, IOException, Exception { - for (int i = 0; i < 4; i++) { - DBpediaClassLearnerCELOE dcl = new DBpediaClassLearnerCELOE(); - Set<String> classesToLearn = dcl.getClasses(); - Monitor mon = MonitorFactory.start("Learn DBpedia"); - KB kb = dcl.learnAllClasses(classesToLearn); - mon.stop(); - kb.export(new File("/home/dcherix/dllearner/old/result"+i+".owl"), - OntologyFormat.RDF_XML); - // Set<String> pos = - // dcl.getPosEx("http://dbpedia.org/ontology/Person"); - // dcl.getNegEx("http://dbpedia.org/ontology/Person", pos); - logger.info("Test" + i + ":\n" - + JamonMonitorLogger.getStringForAllSortedByLabel()); - System.gc(); - } - } - - public KB learnAllClasses(Set<String> classesToLearn) { - KB kb = new KB(); - for (String classToLearn : classesToLearn) { - logger.info("Leanring class: " + classToLearn); - try { - Description d = learnClass(classToLearn); - if (d == null - || d.toKBSyntaxString().equals( - new Thing().toKBSyntaxString())) { - logger.error("Description was " + d + ", continueing"); - continue; - } - kb.addAxiom(new EquivalentClassesAxiom(new NamedClass( - classToLearn), d)); - kb.export(new File( - "/home/dcherix/dllearner/old/result_partial.owl"), - OntologyFormat.RDF_XML); - - } catch (Exception e) { - logger.warn("", e); - } - this.dropCache(); - } - - return kb; - } - - public Description learnClass(String classToLearn) throws Exception { - // TODO: use aksw-commons-sparql instead of sparql-scala - SortedSet<String> posEx = new TreeSet<String>(getPosEx(classToLearn)); - logger.info("Found " + posEx.size() + " positive examples"); - if (posEx.isEmpty()) { - return null; - } - SortedSet<String> negEx = new TreeSet<String>(getNegEx(classToLearn, - posEx)); - - posEx = SetManipulation.fuzzyShrink(posEx, examplesize); - negEx = SetManipulation.fuzzyShrink(negEx, examplesize); - - SortedSet<Individual> posExamples = Helper.getIndividualSet(posEx); - SortedSet<Individual> negExamples = Helper.getIndividualSet(negEx); - SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>( - posExamples, negExamples); - - ComponentManager cm = ComponentManager.getInstance(); - - SparqlKnowledgeSource ks = cm - .knowledgeSource(SparqlKnowledgeSource.class); - ks.setInstances(Datastructures.individualSetToStringSet(examples - .getCompleteSet())); - // ks.getConfigurator().setPredefinedEndpoint("DBPEDIA"); // TODO: - // probably the official endpoint is too slow? - ks.setUrl(new URL(endpointurl)); - ks.setUseLits(false); - ks.setUseCacheDatabase(true); - ks.setUseCache(true); - ks.setRecursionDepth(1); - ks.setCloseAfterRecursion(true); - ks.setSaveExtractedFragment(true); - ks.setPredList(new HashSet<String>(Arrays.asList(new String[] { - "http://dbpedia.org/property/wikiPageUsesTemplate", - "http://dbpedia.org/ontology/wikiPageExternalLink", - "http://dbpedia.org/property/wordnet_type", - "http://www.w3.org/2002/07/owl#sameAs" }))); - - ks.setObjList(new HashSet<String>(Arrays.asList(new String[] { - "http://dbpedia.org/class/yago/", - "http://dbpedia.org/resource/Category:" }))); - - ks.init(); - - AbstractReasonerComponent rc = cm.reasoner(FastInstanceChecker.class, - ks); - rc.init(); - - PosNegLPStandard lp = cm.learningProblem(PosNegLPStandard.class, rc); - lp.setPositiveExamples(posExamples); - lp.setNegativeExamples(negExamples); - lp.setAccuracyMethod("fmeasure"); - lp.setUseApproximations(false); - lp.init(); - - CELOE la = cm.learningAlgorithm(CELOE.class, lp, rc); - // CELOEConfigurator cc = la.getConfigurator(); - la.setMaxExecutionTimeInSeconds(100); - la.init(); - RhoDRDown op = (RhoDRDown) la.getOperator(); - - op.setUseNegation(false); - op.setUseAllConstructor(false); - op.setUseCardinalityRestrictions(false); - op.setUseHasValueConstructor(true); - la.setNoisePercentage(20); - la.setIgnoredConcepts(new HashSet<NamedClass>(Arrays - .asList(new NamedClass[] { new NamedClass(classToLearn) }))); - la.init(); - - // to write the above configuration in a conf file (optional) - Config cf = new Config(cm, ks, rc, lp, la); - new ConfigSave(cf).saveFile(new File("/dev/null")); - - la.start(); - - cm.freeAllComponents(); - return la.getCurrentlyBestDescription(); - } - - public Set<String> getClasses() throws Exception { - OntModel model = ModelFactory.createOntologyModel(); - model.read(new FileInputStream( - "/home/dcherix/Downloads/dbpedia_3.6.owl"), null); - Set<OntClass> classes = model.listClasses().toSet(); - Set<String> results = new HashSet<String>(); - for (OntClass ontClass : classes) { - results.add(ontClass.getURI()); - } - return results; - } - - // gets all DBpedia Classes - // public Set<String> getClasses() throws Exception { - // SparqlTemplate st = SparqlTemplate.getInstance("allClasses.vm"); - // st.setLimit(0); - // st.addFilter(sparqlEndpoint.like("classes", new - // HashSet<String>(Arrays.asList(new - // String[]{"http://dbpedia.org/ontology/"})))); - // VelocityContext vc = st.putSgetVelocityContext(); - // String query = st.getQuery(); - // return new - // HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint.executeSelect(query))); - // } - // - public Set<String> getPosEx(String clazz) throws Exception { -// SparqlTemplate st = SparqlTemplate.getInstance("instancesOfClass.vm"); -// st.setLimit(0); -// VelocityContext vc = st.getVelocityContext(); -// vc.put("class", clazz); -// String queryString = st.getQuery(); - StringBuilder queryString = new StringBuilder(); - queryString.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"); - queryString.append(" SELECT ?instances WHERE { ?instances rdf:type <"); - queryString.append(clazz); - queryString.append("> }"); - System.out.println(queryString); - return this.executeResourceQuery(queryString.toString()); - } - - /** - * gets all direct classes of all instances and has a look, what the most - * common is - * - * @param clazz - * @param posEx - * @return - * @throws Exception - */ - public String selectClass(String clazz, Set<String> posEx) throws Exception { - Map<String, Integer> m = new HashMap<String, Integer>(); - // TODO: use aksw-commons-sparql instead of sparql-scala - /* - * for (String pos : posEx) { SparqlTemplate st = - * SparqlTemplate.getInstance("directClassesOfInstance.vm"); - * st.setLimit(0); st.addFilter(sparqlEndpoint.like("direct", new - * HashSet<String>(Arrays.asList(new - * String[]{"http://dbpedia.org/ontology/"})))); VelocityContext vc = - * st.getVelocityContext(); vc.put("instance", pos); String query = - * st.getQuery(); Set<String> classes = new - * HashSet<String>(ResultSetRenderer - * .asStringSet(sparqlEndpoint.executeSelect(query))); - * classes.remove(clazz); for (String s : classes) { if (m.get(s) == - * null) { m.put(s, 0); } m.put(s, m.get(s).intValue() + 1); } } - */ - - int max = 0; - String maxClass = ""; - for (String key : m.keySet()) { - if (m.get(key).intValue() > max) { - maxClass = key; - } - } - - return maxClass; - } - - /** - * gets instances of a class or random instances - * - * @param clazz - * @param posEx - * @return - * @throws Exception - */ - - public Set<String> getNegEx(String clazz, Set<String> posEx) - throws Exception { - Set<String> negEx = new HashSet<String>(); - // TODO: use aksw-commons-sparql instead of sparql-scala - /* - * String targetClass = getParallelClass(clazz); - * logger.info("using class for negatives: " + targetClass); if - * (targetClass != null) { - * - * SparqlTemplate st = - * SparqlTemplate.getInstance("instancesOfClass.vm"); st.setLimit(0); - * VelocityContext vc = st.getVelocityContext(); vc.put("class", - * targetClass); // st.addFilter(sparqlEndpoint.like("class", new - * HashSet<String>(Arrays.asList(new - * String[]{"http://dbpedia.org/ontology/"})))); String query = - * st.getQuery(); // negEx.addAll(new - * HashSet<String>(ResultSetRenderer.asStringSet - * (sparqlEndpoint.executeSelect(query)))); } else { - * - * SparqlTemplate st = SparqlTemplate.getInstance("someInstances.vm"); - * st.setLimit(posEx.size() + 100); VelocityContext vc = - * st.getVelocityContext(); String query = st.getQuery(); // - * negEx.addAll(new - * HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint - * .executeSelect(query)))); } negEx.removeAll(posEx); - */ - - String targetClass = getParallelClass(clazz); - logger.info("using class for negatives: " + targetClass); - if (targetClass != null) { - SparqlTemplate st = SparqlTemplate - .getInstance("instancesOfClass2.vm"); - st.setLimit(0); - VelocityContext vc = st.getVelocityContext(); - vc.put("class", targetClass); - st.addFilter("FILTER ( ?class LIKE (<http://dbpedia.org/ontology/%>"); - - String query = st.getQuery(); - negEx.addAll(this.executeResourceQuery(query)); - } else { - SparqlTemplate st = SparqlTemplate.getInstance("someInstances.vm"); - st.setLimit(posEx.size() + 100); - VelocityContext vc = st.getVelocityContext(); - String query = st.getQuery(); - negEx.addAll(this.executeResourceQuery(query)); - } - negEx.removeAll(posEx); - return negEx; - - } - - public String getParallelClass(String clazz) throws Exception { - // TODO: use aksw-commons-sparql instead of sparql-scala - // SparqlTemplate st = SparqlTemplate.getInstance("parallelClass.vm"); - // st.setLimit(0); - // VelocityContext vc = st.getVelocityContext(); - // vc.put("class", clazz); - // String query = st.getQuery(); - // Set<String> parClasses = new - // HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint.executeSelect(query))); - // for (String s : parClasses) { - // return s; - // } - SparqlTemplate st = SparqlTemplate.getInstance("parallelClass.vm"); - st.setLimit(0); - VelocityContext vc = st.getVelocityContext(); - vc.put("class", clazz); - String query = st.getQuery(); - Set<String> parClasses = this.executeClassQuery(query); - for (String s : parClasses) { - if (s.startsWith("http://dbpedia.org/ontology")) { - if (!s.endsWith("Unknown")) { - return s; - } - } - } - return null; - } - - public Set<String> executeResourceQuery(String queryString) { -// Query query = QueryFactory.create(queryString); -// QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointurl, -// query); -// ResultSet resultSet = qexec.execSelect(); - ResultSetRewindable resultSet = SparqlQuery.convertJSONtoResultSet(cache.executeSparqlQuery(new SparqlQuery(queryString,sparqlEndpoint))); - QuerySolution solution; - Set<String> results = new HashSet<String>(); - while (resultSet.hasNext()) { - solution = resultSet.next(); - results.add(solution.getResource("instances").getURI()); - } - return results; - } - - public Set<String> executeClassQuery(String queryString) { -// Query query = QueryFactory.create(queryString); -// QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointurl, -// query); -// ResultSet resultSet = qexec.execSelect(); - ResultSetRewindable resultSet = SparqlQuery.convertJSONtoResultSet(cache.executeSparqlQuery(new SparqlQuery(queryString,sparqlEndpoint))); - QuerySolution solution; - Set<String> results = new HashSet<String>(); - while (resultSet.hasNext()) { - solution = resultSet.next(); - results.add(solution.getResource("sub").getURI()); - } - return results; - } - - private void dropCache(){ - try { - Class.forName("org.h2.Driver"); - String databaseName="extraction"; - String databaseDirectory="cache"; - Connection conn = DriverManager.getConnection("jdbc:h2:"+databaseDirectory+"/"+databaseName, "sa", ""); - Statement st = conn.createStatement(); - st.execute("DELETE FROM QUERY_CACHE"); - st.close(); - conn.close(); - System.gc(); - } catch (ClassNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - + + public static String endpointurl = "http://live.dbpedia.org/sparql"; + public static int examplesize = 30; + + private static org.apache.log4j.Logger logger = org.apache.log4j.Logger + .getLogger(DBpediaClassLearnerCELOE.class); + private static String output; + private static String input; + + SparqlEndpoint sparqlEndpoint = null; + private Cache cache; + + public DBpediaClassLearnerCELOE() { + // OPTIONAL: if you want to do some case distinctions in the learnClass + // method, you could add + // parameters to the constructure e.g. YAGO_ + try { + sparqlEndpoint = new SparqlEndpoint(new URL(endpointurl)); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + cache = new Cache("basCache"); + } + + public static void main(String args[]) throws LearningProblemUnsupportedException, IOException, + Exception { + if (args.length < 3) { + usage(); + return; + } + int iter; + try { + output = args[1]; + input = args[0]; + iter = Integer.parseInt(args[2]); + } catch (Exception e) { + usage(); + return; + } + for (int i = 0; i < iter; i++) { + DBpediaClassLearnerCELOE dcl = new DBpediaClassLearnerCELOE(); + Set<String> classesToLearn = dcl.getClasses(); + Monitor mon = MonitorFactory.start("Learn DBpedia"); + KB kb = dcl.learnAllClasses(classesToLearn); + mon.stop(); + kb.export(new File(output + "/result" + i + ".owl"), OntologyFormat.RDF_XML); + // Set<String> pos = + // dcl.getPosEx("http://dbpedia.org/ontology/Person"); + // dcl.getNegEx("http://dbpedia.org/ontology/Person", pos); + logger.info("Test" + i + ":\n" + JamonMonitorLogger.getStringForAllSortedByLabel()); + System.gc(); + } + } + + /** + * Show the required parameters for usage + */ + private static void usage() { + System.out.println("***************************************************************"); + System.out.println("* Usage: java DBpediaClassLearnerCELOE input output iteration *"); + System.out.println("* As input is the dbpedia schema as owl necessary *"); + System.out.println("* As output is a directory for the owl results file expected *"); + System.out.println("***************************************************************"); + } + + public KB learnAllClasses(Set<String> classesToLearn) { + KB kb = new KB(); + for (String classToLearn : classesToLearn) { + logger.info("Learning class: " + classToLearn); + try { + Description d = learnClass(classToLearn); + if (d == null || d.toKBSyntaxString().equals(new Thing().toKBSyntaxString())) { + logger.error("Description was " + d + ", continueing"); + continue; + } + kb.addAxiom(new EquivalentClassesAxiom(new NamedClass(classToLearn), d)); + kb.export(new File(output+"/result_partial.owl"), + OntologyFormat.RDF_XML); + + } catch (Exception e) { + logger.warn("", e); + } + this.dropCache(); + } + + return kb; + } + + public Description learnClass(String classToLearn) throws Exception { + // TODO: use aksw-commons-sparql instead of sparql-scala + SortedSet<String> posEx = new TreeSet<String>(getPosEx(classToLearn)); + logger.info("Found " + posEx.size() + " positive examples"); + if (posEx.isEmpty()) { + return null; + } + SortedSet<String> negEx = new TreeSet<String>(getNegEx(classToLearn, posEx)); + + posEx = SetManipulation.fuzzyShrink(posEx, examplesize); + negEx = SetManipulation.fuzzyShrink(negEx, examplesize); + + SortedSet<Individual> posExamples = Helper.getIndividualSet(posEx); + SortedSet<Individual> negExamples = Helper.getIndividualSet(negEx); + SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>(posExamples, + negExamples); + + ComponentManager cm = ComponentManager.getInstance(); + + SparqlKnowledgeSource ks = cm.knowledgeSource(SparqlKnowledgeSource.class); + ks.setInstances(Datastructures.individualSetToStringSet(examples.getCompleteSet())); + // ks.getConfigurator().setPredefinedEndpoint("DBPEDIA"); // TODO: + // probably the official endpoint is too slow? + ks.setUrl(new URL(endpointurl)); + ks.setUseLits(false); + ks.setUseCacheDatabase(true); + ks.setUseCache(true); + ks.setRecursionDepth(1); + ks.setCloseAfterRecursion(true); + ks.setSaveExtractedFragment(true); + ks.setPredList(new HashSet<String>(Arrays + .asList(new String[] { "http://dbpedia.org/property/wikiPageUsesTemplate", + "http://dbpedia.org/ontology/wikiPageExternalLink", + "http://dbpedia.org/property/wordnet_type", + "http://www.w3.org/2002/07/owl#sameAs" }))); + + ks.setObjList(new HashSet<String>(Arrays.asList(new String[] { + "http://dbpedia.org/class/yago/", "http://dbpedia.org/resource/Category:" }))); + + ks.init(); + + AbstractReasonerComponent rc = cm.reasoner(FastInstanceChecker.class, ks); + rc.init(); + + PosNegLPStandard lp = cm.learningProblem(PosNegLPStandard.class, rc); + lp.setPositiveExamples(posExamples); + lp.setNegativeExamples(negExamples); + lp.setAccuracyMethod("fmeasure"); + lp.setUseApproximations(false); + lp.init(); + + CELOE la = cm.learningAlgorithm(CELOE.class, lp, rc); + // CELOEConfigurator cc = la.getConfigurator(); + la.setMaxExecutionTimeInSeconds(100); + la.init(); + RhoDRDown op = (RhoDRDown) la.getOperator(); + + op.setUseNegation(false); + op.setUseAllConstructor(false); + op.setUseCardinalityRestrictions(false); + op.setUseHasValueConstructor(true); + la.setNoisePercentage(20); + la.setIgnoredConcepts(new HashSet<NamedClass>(Arrays + .asList(new NamedClass[] { new NamedClass(classToLearn) }))); + la.init(); + + // to write the above configuration in a conf file (optional) + Config cf = new Config(cm, ks, rc, lp, la); + new ConfigSave(cf).saveFile(new File("/dev/null")); + + la.start(); + + cm.freeAllComponents(); + return la.getCurrentlyBestDescription(); + } + + public Set<String> getClasses() throws Exception { + OntModel model = ModelFactory.createOntologyModel(); + model.read(new FileInputStream(input), null); + Set<OntClass> classes = model.listClasses().toSet(); + Set<String> results = new HashSet<String>(); + for (OntClass ontClass : classes) { + results.add(ontClass.getURI()); + } + return results; + } + + // gets all DBpedia Classes + // public Set<String> getClasses() throws Exception { + // SparqlTemplate st = SparqlTemplate.getInstance("allClasses.vm"); + // st.setLimit(0); + // st.addFilter(sparqlEndpoint.like("classes", new + // HashSet<String>(Arrays.asList(new + // String[]{"http://dbpedia.org/ontology/"})))); + // VelocityContext vc = st.putSgetVelocityContext(); + // String query = st.getQuery(); + // return new + // HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint.executeSelect(query))); + // } + // + public Set<String> getPosEx(String clazz) throws Exception { + // SparqlTemplate st = + // SparqlTemplate.getInstance("instancesOfClass.vm"); + // st.setLimit(0); + // VelocityContext vc = st.getVelocityContext(); + // vc.put("class", clazz); + // String queryString = st.getQuery(); + StringBuilder queryString = new StringBuilder(); + queryString.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"); + queryString.append(" SELECT ?instances WHERE { ?instances rdf:type <"); + queryString.append(clazz); + queryString.append("> }"); + System.out.println(queryString); + return this.executeResourceQuery(queryString.toString()); + } + + /** + * gets all direct classes of all instances and has a look, what the most + * common is + * + * @param clazz + * @param posEx + * @return + * @throws Exception + */ + public String selectClass(String clazz, Set<String> posEx) throws Exception { + Map<String, Integer> m = new HashMap<String, Integer>(); + // TODO: use aksw-commons-sparql instead of sparql-scala + /* + * for (String pos : posEx) { SparqlTemplate st = + * SparqlTemplate.getInstance("directClassesOfInstance.vm"); + * st.setLimit(0); st.addFilter(sparqlEndpoint.like("direct", new + * HashSet<String>(Arrays.asList(new + * String[]{"http://dbpedia.org/ontology/"})))); VelocityContext vc = + * st.getVelocityContext(); vc.put("instance", pos); String query = + * st.getQuery(); Set<String> classes = new + * HashSet<String>(ResultSetRenderer + * .asStringSet(sparqlEndpoint.executeSelect(query))); + * classes.remove(clazz); for (String s : classes) { if (m.get(s) == + * null) { m.put(s, 0); } m.put(s, m.get(s).intValue() + 1); } } + */ + + int max = 0; + String maxClass = ""; + for (String key : m.keySet()) { + if (m.get(key).intValue() > max) { + maxClass = key; + } + } + + return maxClass; + } + + /** + * gets instances of a class or random instances + * + * @param clazz + * @param posEx + * @return + * @throws Exception + */ + + public Set<String> getNegEx(String clazz, Set<String> posEx) throws Exception { + Set<String> negEx = new HashSet<String>(); + // TODO: use aksw-commons-sparql instead of sparql-scala + /* + * String targetClass = getParallelClass(clazz); + * logger.info("using class for negatives: " + targetClass); if + * (targetClass != null) { + * + * SparqlTemplate st = + * SparqlTemplate.getInstance("instancesOfClass.vm"); st.setLimit(0); + * VelocityContext vc = st.getVelocityContext(); vc.put("class", + * targetClass); // st.addFilter(sparqlEndpoint.like("class", new + * HashSet<String>(Arrays.asList(new + * String[]{"http://dbpedia.org/ontology/"})))); String query = + * st.getQuery(); // negEx.addAll(new + * HashSet<String>(ResultSetRenderer.asStringSet + * (sparqlEndpoint.executeSelect(query)))); } else { + * + * SparqlTemplate st = SparqlTemplate.getInstance("someInstances.vm"); + * st.setLimit(posEx.size() + 100); VelocityContext vc = + * st.getVelocityContext(); String query = st.getQuery(); // + * negEx.addAll(new + * HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint + * .executeSelect(query)))); } negEx.removeAll(posEx); + */ + + String targetClass = getParallelClass(clazz); + logger.info("using class for negatives: " + targetClass); + if (targetClass != null) { + SparqlTemplate st = SparqlTemplate.getInstance("instancesOfClass2.vm"); + st.setLimit(0); + VelocityContext vc = st.getVelocityContext(); + vc.put("class", targetClass); + st.addFilter("FILTER ( ?class LIKE (<http://dbpedia.org/ontology/%>"); + + String query = st.getQuery(); + negEx.addAll(this.executeResourceQuery(query)); + } else { + SparqlTemplate st = SparqlTemplate.getInstance("someInstances.vm"); + st.setLimit(posEx.size() + 100); + VelocityContext vc = st.getVelocityContext(); + String query = st.getQuery(); + negEx.addAll(this.executeResourceQuery(query)); + } + negEx.removeAll(posEx); + return negEx; + + } + + public String getParallelClass(String clazz) throws Exception { + // TODO: use aksw-commons-sparql instead of sparql-scala + // SparqlTemplate st = SparqlTemplate.getInstance("parallelClass.vm"); + // st.setLimit(0); + // VelocityContext vc = st.getVelocityContext(); + // vc.put("class", clazz); + // String query = st.getQuery(); + // Set<String> parClasses = new + // HashSet<String>(ResultSetRenderer.asStringSet(sparqlEndpoint.executeSelect(query))); + // for (String s : parClasses) { + // return s; + // } + SparqlTemplate st = SparqlTemplate.getInstance("parallelClass.vm"); + st.setLimit(0); + VelocityContext vc = st.getVelocityContext(); + vc.put("class", clazz); + String query = st.getQuery(); + Set<String> parClasses = this.executeClassQuery(query); + for (String s : parClasses) { + if (s.startsWith("http://dbpedia.org/ontology")) { + if (!s.endsWith("Unknown")) { + return s; + } + } + } + return null; + } + + public Set<String> executeResourceQuery(String queryString) { + // Query query = QueryFactory.create(queryString); + // QueryExecution qexec = + // QueryExecutionFactory.sparqlService(endpointurl, + // query); + // ResultSet resultSet = qexec.execSelect(); + ResultSetRewindable resultSet = SparqlQuery.convertJSONtoResultSet(cache + .executeSparqlQuery(new SparqlQuery(queryString, sparqlEndpoint))); + QuerySolution solution; + Set<String> results = new HashSet<String>(); + while (resultSet.hasNext()) { + solution = resultSet.next(); + results.add(solution.getResource("instances").getURI()); + } + return results; + } + + public Set<String> executeClassQuery(String queryString) { + // Query query = QueryFactory.create(queryString); + // QueryExecution qexec = + // QueryExecutionFactory.sparqlService(endpointurl, + // query); + // ResultSet resultSet = qexec.execSelect(); + ResultSetRewindable resultSet = SparqlQuery.convertJSONtoResultSet(cache + .executeSparqlQuery(new SparqlQuery(queryString, sparqlEndpoint))); + QuerySolution solution; + Set<String> results = new HashSet<String>(); + while (resultSet.hasNext()) { + solution = resultSet.next(); + results.add(solution.getResource("sub").getURI()); + } + return results; + } + + private void dropCache() { + try { + Class.forName("org.h2.Driver"); + String databaseName = "extraction"; + String databaseDirectory = "cache"; + Connection conn = DriverManager.getConnection("jdbc:h2:" + databaseDirectory + "/" + + databaseName, "sa", ""); + Statement st = conn.createStatement(); + st.execute("DELETE FROM QUERY_CACHE"); + st.close(); + conn.close(); + System.gc(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } \ No newline at end of file Modified: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java 2013-03-04 15:00:36 UTC (rev 3910) +++ trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java 2013-03-12 09:29:04 UTC (rev 3911) @@ -90,6 +90,8 @@ private static org.apache.log4j.Logger logger = org.apache.log4j.Logger .getLogger(NewSparqlCompDBpediaClassLearnerCELOE.class); + private static String output; + private static String input; SparqlEndpoint sparqlEndpoint = null; @@ -107,6 +109,19 @@ public static void main(String args[]) throws LearningProblemUnsupportedException, IOException, Exception { + if (args.length < 3) { + usage(); + return; + } + int iter; + try { + output = args[1]; + input = args[0]; + iter = Integer.parseInt(args[2]); + } catch (Exception e) { + usage(); + return; + } for (int i = 0; i < 4; i++) { NewSparqlCompDBpediaClassLearnerCELOE dcl = new NewSparqlCompDBpediaClassLearnerCELOE(); Set<String> classesToLearn = dcl.getClasses(); @@ -114,7 +129,7 @@ Monitor mon = MonitorFactory.start("Learn DBpedia"); KB kb = dcl.learnAllClasses(classesToLearn); mon.stop(); - kb.export(new File("/home/dcherix/dllearner/simple/result" + i + kb.export(new File(output+"/result" + i + ".owl"), OntologyFormat.RDF_XML); // Set<String> pos = // dcl.getPosEx("http://dbpedia.org/ontology/Person"); @@ -125,6 +140,17 @@ .getStringForAllSortedByLabel()); } } + + /** + * Show the required parameters for usage + */ + private static void usage() { + System.out.println("***************************************************************"); + System.out.println("* Usage: java DBpediaClassLearnerCELOE input output iteration *"); + System.out.println("* As input is the dbpedia schema as owl necessary *"); + System.out.println("* As output is a directory for the owl results file expected *"); + System.out.println("***************************************************************"); + } public KB learnAllClasses(Set<String> classesToLearn) { KB kb = new KB(); @@ -141,7 +167,7 @@ kb.addAxiom(new EquivalentClassesAxiom(new NamedClass( classToLearn), d)); kb.export(new File( - "/home/dcherix/dllearner/simple/result_partial.owl"), + output+"/result_partial.owl"), OntologyFormat.RDF_XML); } catch (Exception e) { @@ -184,7 +210,7 @@ // ks.setUseCacheDatabase(true); ks.setRecursionDepth(1); ArrayList<String> ontologyUrls = new ArrayList<String>(); - ontologyUrls.add("http://downloads.dbpedia.org/3.6/dbpedia_3.6.owl"); + ontologyUrls.add(new File(input).toURI().toURL().toString()); ks.setOntologySchemaUrls(ontologyUrls); ks.setAboxfilter("FILTER (!regex(str(?p), '^http://dbpedia.org/property/wikiPageUsesTemplate') && " + "!regex(str(?p), '^http://dbpedia.org/ontology/wikiPageExternalLink') && " @@ -247,7 +273,7 @@ public Set<String> getClasses() throws Exception { OntModel model = ModelFactory.createOntologyModel(); model.read(new FileInputStream( - "/home/dcherix/Downloads/dbpedia_3.6.owl"), null); + input), null); Set<OntClass> classes = model.listClasses().toSet(); Set<String> results = new HashSet<String>(); int i = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |