NIHVIVO-3452 SPARQL 1.1 for SPARQL page and ingest tools

This commit is contained in:
brianjlowe 2011-12-07 22:03:13 +00:00
parent c800d0c877
commit fb008e7410
4 changed files with 47 additions and 9 deletions

View file

@ -14,7 +14,6 @@ import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.RequestDispatcher; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException; import javax.servlet.ServletException;
@ -33,11 +32,9 @@ import com.hp.hpl.jena.query.DatasetFactory;
import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter; import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.query.Syntax;
import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.ModelFactory;
@ -51,6 +48,7 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseAdvancedDataToolsPages; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseAdvancedDataToolsPages;
import edu.cornell.mannlib.vitro.webapp.beans.Ontology; import edu.cornell.mannlib.vitro.webapp.beans.Ontology;
import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao; import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryUtils;
/** /**
@ -63,8 +61,6 @@ import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
public class SparqlQueryServlet extends BaseEditController { public class SparqlQueryServlet extends BaseEditController {
private static final Log log = LogFactory.getLog(SparqlQueryServlet.class.getName()); private static final Log log = LogFactory.getLog(SparqlQueryServlet.class.getName());
protected static final Syntax SYNTAX = Syntax.syntaxARQ;
protected static HashMap<String,ResultSetFormat>formatSymbols = new HashMap<String,ResultSetFormat>(); protected static HashMap<String,ResultSetFormat>formatSymbols = new HashMap<String,ResultSetFormat>();
static{ static{
formatSymbols.put( ResultSetFormat.syntaxXML.getSymbol(), ResultSetFormat.syntaxXML); formatSymbols.put( ResultSetFormat.syntaxXML.getSymbol(), ResultSetFormat.syntaxXML);
@ -225,7 +221,7 @@ public class SparqlQueryServlet extends BaseEditController {
QueryExecution qe = null; QueryExecution qe = null;
try{ try{
Query query = QueryFactory.create(queryParam, SYNTAX); Query query = SparqlQueryUtils.create(queryParam);
qe = QueryExecutionFactory.create(query, dataset); qe = QueryExecutionFactory.create(query, dataset);
if( query.isSelectType() ){ if( query.isSelectType() ){
ResultSet results = null; ResultSet results = null;

View file

@ -68,6 +68,7 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseAdvancedDataToolsPages; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseAdvancedDataToolsPages;
import edu.cornell.mannlib.vitro.webapp.beans.Ontology; import edu.cornell.mannlib.vitro.webapp.beans.Ontology;
import edu.cornell.mannlib.vitro.webapp.controller.Controllers; import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
import edu.cornell.mannlib.vitro.webapp.controller.SparqlQueryServlet;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao; import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
import edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDao; import edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDao;
@ -77,6 +78,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSDBModelMaker;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSpecialModelMaker; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSpecialModelMaker;
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent; import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent;
import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetup; import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetup;
import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryUtils;
import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils; import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils;
import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestWorkflowProcessor; import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestWorkflowProcessor;
import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaOutputUtils; import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaOutputUtils;
@ -920,7 +922,7 @@ public class JenaIngestController extends BaseEditController {
} }
} }
Model tempModel = ModelFactory.createDefaultModel(); Model tempModel = ModelFactory.createDefaultModel();
Query query = QueryFactory.create(queryStr, Syntax.syntaxARQ); Query query = SparqlQueryUtils.create(queryStr);
QueryExecution qexec = QueryExecutionFactory.create(query,source); QueryExecution qexec = QueryExecutionFactory.create(query,source);
try { try {
qexec.execConstruct(tempModel); qexec.execConstruct(tempModel);

View file

@ -2,6 +2,15 @@
package edu.cornell.mannlib.vitro.webapp.utils; package edu.cornell.mannlib.vitro.webapp.utils;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QueryParseException;
import com.hp.hpl.jena.query.Syntax;
/** /**
* Some utility methods that help when dealing with SPARQL queries. * Some utility methods that help when dealing with SPARQL queries.
*/ */
@ -13,6 +22,12 @@ public class SparqlQueryUtils {
private static final char[] REGEX_SPECIAL_CHARACTERS = "[\\^$.|?*+()]" private static final char[] REGEX_SPECIAL_CHARACTERS = "[\\^$.|?*+()]"
.toCharArray(); .toCharArray();
/**
* A list of SPARQL syntaxes to try when parsing queries
*/
public static final List<Syntax> SUPPORTED_SYNTAXES = Arrays.asList(
Syntax.syntaxARQ , Syntax.syntaxSPARQL_11);
/** /**
* Escape any regex special characters in the string. * Escape any regex special characters in the string.
* *
@ -41,4 +56,27 @@ public class SparqlQueryUtils {
return clean.toString(); return clean.toString();
} }
/**
* A convenience method to attempt parsing a query string with various syntaxes
* @param queryString
* @return Query
*/
public static Query create(String queryString) {
boolean parseSuccess = false;
Iterator<Syntax> syntaxIt = SUPPORTED_SYNTAXES.iterator();
Query query = null;
while (!parseSuccess && syntaxIt.hasNext()) {
Syntax syntax = syntaxIt.next();
try {
query = QueryFactory.create(queryString, syntax);
parseSuccess = true;
} catch (QueryParseException e) {
if (!syntaxIt.hasNext()) {
throw e;
}
}
}
return query;
}
} }

View file

@ -64,7 +64,7 @@
%> %>
</select> </select>
<textarea rows="16" cols="40" name="sparqlQueryStr" class="maxWidth"><c:choose> <textarea rows="25" cols="40" name="sparqlQueryStr" class="maxWidth"><c:choose>
<c:when test="${param.sparqlQueryStr != null}"> <c:when test="${param.sparqlQueryStr != null}">
${param.sparqlQueryStr} ${param.sparqlQueryStr}
</c:when> </c:when>
@ -83,10 +83,12 @@ if(prefixes != null){
String prefixText = (String) prefixItr.next(); String prefixText = (String) prefixItr.next();
if(prefixText.equals("(not yet specified)")){ if(prefixText.equals("(not yet specified)")){
count++; count++;
prefixText = "j." + count.toString(); prefixText = "p." + count.toString();
} }
String urlText = (String) prefixItr.next();%> String urlText = (String) prefixItr.next();%>
PREFIX <%=prefixText%>: <<%=urlText%>><%}}%> PREFIX <%=prefixText%>: <<%=urlText%>><%}}%>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>