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. |