work on triple store independence including NIHVIVO-3751 NIHVIVO-3644 NIHVIVO-3743 and NIHVIVO-3745
This commit is contained in:
parent
25e2cb820e
commit
423ec922d8
11 changed files with 297 additions and 170 deletions
|
@ -57,7 +57,7 @@ public class Classes2ClassesOperationController extends BaseEditController {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
VClassDao vcDao = request.getFullWebappDaoFactory().getVClassDao();
|
VClassDao vcDao = request.getAssertionsWebappDaoFactory().getVClassDao();
|
||||||
|
|
||||||
String modeStr = request.getParameter("opMode");
|
String modeStr = request.getParameter("opMode");
|
||||||
modeStr = (modeStr == null) ? "" : modeStr;
|
modeStr = (modeStr == null) ? "" : modeStr;
|
||||||
|
|
|
@ -15,9 +15,12 @@ import com.hp.hpl.jena.datatypes.RDFDatatype;
|
||||||
import com.hp.hpl.jena.datatypes.TypeMapper;
|
import com.hp.hpl.jena.datatypes.TypeMapper;
|
||||||
import com.hp.hpl.jena.ontology.OntClass;
|
import com.hp.hpl.jena.ontology.OntClass;
|
||||||
import com.hp.hpl.jena.ontology.OntModel;
|
import com.hp.hpl.jena.ontology.OntModel;
|
||||||
|
import com.hp.hpl.jena.ontology.OntModelSpec;
|
||||||
import com.hp.hpl.jena.ontology.OntProperty;
|
import com.hp.hpl.jena.ontology.OntProperty;
|
||||||
import com.hp.hpl.jena.ontology.Restriction;
|
import com.hp.hpl.jena.ontology.Restriction;
|
||||||
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.ModelFactory;
|
||||||
import com.hp.hpl.jena.rdf.model.Resource;
|
import com.hp.hpl.jena.rdf.model.Resource;
|
||||||
import com.hp.hpl.jena.shared.Lock;
|
import com.hp.hpl.jena.shared.Lock;
|
||||||
|
|
||||||
|
@ -59,16 +62,50 @@ public class RestrictionOperationController extends BaseEditController {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: I need to de-spaghettify this and remap this controller, now that I know what I'm doing
|
|
||||||
|
|
||||||
if ( (request.getParameter("_cancel") == null ) ) {
|
if ( (request.getParameter("_cancel") == null ) ) {
|
||||||
|
processRestriction(request, epo, ontModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if no page forwarder was set, just go back to referring page:
|
||||||
|
String referer = epo.getReferer();
|
||||||
|
if (referer == null) {
|
||||||
|
response.sendRedirect(defaultLandingPage);
|
||||||
|
} else {
|
||||||
|
response.sendRedirect(referer);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e, e);
|
||||||
|
try {
|
||||||
|
response.sendRedirect(defaultLandingPage);
|
||||||
|
return;
|
||||||
|
} catch (Exception f) {
|
||||||
|
log.error(f, f);
|
||||||
|
throw new RuntimeException(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processRestriction(VitroRequest request, EditProcessObject epo, OntModel ontModel) {
|
||||||
ontModel.enterCriticalSection(Lock.WRITE);
|
ontModel.enterCriticalSection(Lock.WRITE);
|
||||||
try {
|
try {
|
||||||
|
|
||||||
ontModel.getBaseModel().notifyEvent(new EditEvent(request.getFullWebappDaoFactory().getUserURI(),true));
|
ontModel.getBaseModel().notifyEvent(new EditEvent(request.getFullWebappDaoFactory().getUserURI(),true));
|
||||||
|
|
||||||
if ( request.getParameter("_action") != null && request.getParameter("_action").equals("delete") ) {
|
if ("delete".equals(request.getParameter("_action"))) {
|
||||||
|
processDelete(request, ontModel);
|
||||||
|
} else {
|
||||||
|
processCreate(request, epo, ontModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
ontModel.getBaseModel().notifyEvent(new EditEvent(request.getFullWebappDaoFactory().getUserURI(),false));
|
||||||
|
ontModel.leaveCriticalSection();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processDelete(VitroRequest request, OntModel ontModel) {
|
||||||
|
|
||||||
String restId = request.getParameter("restrictionId");
|
String restId = request.getParameter("restrictionId");
|
||||||
|
|
||||||
|
@ -94,13 +131,25 @@ public class RestrictionOperationController extends BaseEditController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* removing by graph subtraction so that statements with blank nodes
|
||||||
|
* stick together and are processed appropriately by the bulk update
|
||||||
|
* handler
|
||||||
|
*/
|
||||||
if ( rest != null ) {
|
if ( rest != null ) {
|
||||||
rest.remove();
|
Model temp = ModelFactory.createDefaultModel();
|
||||||
|
temp.add(rest.listProperties());
|
||||||
|
ontModel.getBaseModel().remove(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
private void processCreate(VitroRequest request, EditProcessObject epo, OntModel origModel) {
|
||||||
|
|
||||||
|
Model temp = ModelFactory.createDefaultModel();
|
||||||
|
Model dynamicUnion = ModelFactory.createUnion(temp, origModel);
|
||||||
|
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, dynamicUnion);
|
||||||
|
|
||||||
OntProperty onProperty = ontModel.getOntProperty( (String) request.getParameter("onProperty") );
|
OntProperty onProperty = ontModel.getOntProperty( (String) request.getParameter("onProperty") );
|
||||||
|
|
||||||
|
@ -171,33 +220,7 @@ public class RestrictionOperationController extends BaseEditController {
|
||||||
ontClass.addEquivalentClass(rest);
|
ontClass.addEquivalentClass(rest);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
origModel.add(temp);
|
||||||
|
|
||||||
} finally {
|
|
||||||
ontModel.getBaseModel().notifyEvent(new EditEvent(request.getFullWebappDaoFactory().getUserURI(),false));
|
|
||||||
ontModel.leaveCriticalSection();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//if no page forwarder was set, just go back to referring page:
|
|
||||||
String referer = epo.getReferer();
|
|
||||||
if (referer == null) {
|
|
||||||
response.sendRedirect(defaultLandingPage);
|
|
||||||
} else {
|
|
||||||
response.sendRedirect(referer);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e, e);
|
|
||||||
try {
|
|
||||||
response.sendRedirect(defaultLandingPage);
|
|
||||||
return;
|
|
||||||
} catch (Exception f) {
|
|
||||||
log.error(f, f);
|
|
||||||
throw new RuntimeException(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,7 @@ class IndividualResponseBuilder {
|
||||||
|
|
||||||
private IndividualTemplateModel getIndividualTemplateModel(
|
private IndividualTemplateModel getIndividualTemplateModel(
|
||||||
Individual individual) {
|
Individual individual) {
|
||||||
individual.sortForDisplay();
|
//individual.sortForDisplay();
|
||||||
return new IndividualTemplateModel(individual, vreq);
|
return new IndividualTemplateModel(individual, vreq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -671,7 +671,7 @@ public class DataPropertyDaoJena extends PropertyDaoJena implements
|
||||||
static {
|
static {
|
||||||
List<String> namespaceFilters = new ArrayList<String>();
|
List<String> namespaceFilters = new ArrayList<String>();
|
||||||
for (String namespace : EXCLUDED_NAMESPACES) {
|
for (String namespace : EXCLUDED_NAMESPACES) {
|
||||||
namespaceFilters.add("( afn:namespace(?property) != \"" + namespace + "\" )");
|
namespaceFilters.add("( !regex(str(?property), \"^" + namespace + "\" ))");
|
||||||
}
|
}
|
||||||
PROPERTY_FILTERS = StringUtils.join(namespaceFilters, " && ");
|
PROPERTY_FILTERS = StringUtils.join(namespaceFilters, " && ");
|
||||||
}
|
}
|
||||||
|
@ -683,11 +683,11 @@ public class DataPropertyDaoJena extends PropertyDaoJena implements
|
||||||
" ?property a owl:DatatypeProperty . \n" +
|
" ?property a owl:DatatypeProperty . \n" +
|
||||||
" FILTER ( \n" +
|
" FILTER ( \n" +
|
||||||
" isLiteral(?object) && \n" +
|
" isLiteral(?object) && \n" +
|
||||||
" ( afn:namespace(?property) != \"" + VitroVocabulary.PUBLIC + "\" ) && \n" +
|
" ( !regex(str(?property), \"^" + VitroVocabulary.PUBLIC + "\" )) && \n" +
|
||||||
" ( afn:namespace(?property) != \"" + VitroVocabulary.OWL + "\" ) && \n" +
|
" ( !regex(str(?property), \"^" + VitroVocabulary.OWL + "\" )) && \n" +
|
||||||
// NIHVIVO-2790 vitro:moniker has been deprecated, but display existing values for editorial management (deletion is encouraged).
|
// NIHVIVO-2790 vitro:moniker has been deprecated, but display existing values for editorial management (deletion is encouraged).
|
||||||
// This property will be hidden from public display by default.
|
// This property will be hidden from public display by default.
|
||||||
" ( ?property = <" + VitroVocabulary.MONIKER + "> || afn:namespace(?property) != \"" + VitroVocabulary.vitroURI + "\" ) \n" +
|
" ( ?property = <" + VitroVocabulary.MONIKER + "> || !regex(str(?property), \"^" + VitroVocabulary.vitroURI + "\" )) \n" +
|
||||||
" ) \n" +
|
" ) \n" +
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
|
|
|
@ -785,12 +785,12 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp
|
||||||
static {
|
static {
|
||||||
List<String> namespaceFilters = new ArrayList<String>();
|
List<String> namespaceFilters = new ArrayList<String>();
|
||||||
for (String namespace : EXCLUDED_NAMESPACES) {
|
for (String namespace : EXCLUDED_NAMESPACES) {
|
||||||
namespaceFilters.add("( afn:namespace(?property) != \"" + namespace + "\" )");
|
namespaceFilters.add("( !regex(str(?property), \"^" + namespace + "\" ))");
|
||||||
}
|
}
|
||||||
// A hack to include the vitro:primaryLink and vitro:additionalLink properties in the list
|
// A hack to include the vitro:primaryLink and vitro:additionalLink properties in the list
|
||||||
namespaceFilters.add("( ?property = vitro:primaryLink ||" +
|
namespaceFilters.add("( ?property = vitro:primaryLink ||" +
|
||||||
"?property = vitro:additionalLink ||" +
|
"?property = vitro:additionalLink ||" +
|
||||||
"afn:namespace(?property) != \"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#\" )");
|
"!regex(str(?property), \"^http://vitro.mannlib.cornell.edu/ns/vitro/0.7#\" ))");
|
||||||
PROPERTY_FILTERS = StringUtils.join(namespaceFilters, " && ");
|
PROPERTY_FILTERS = StringUtils.join(namespaceFilters, " && ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,59 +1,62 @@
|
||||||
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import com.hp.hpl.jena.graph.Node;
|
||||||
import com.hp.hpl.jena.query.Dataset;
|
import com.hp.hpl.jena.query.Dataset;
|
||||||
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.shared.Lock;
|
import com.hp.hpl.jena.shared.Lock;
|
||||||
import com.hp.hpl.jena.sparql.core.DatasetGraph;
|
import com.hp.hpl.jena.sparql.core.DatasetGraph;
|
||||||
|
|
||||||
public class SparqlDataset implements Dataset {
|
public class SparqlDataset implements Dataset {
|
||||||
|
|
||||||
private String endpointURI;
|
private SparqlDatasetGraph g;
|
||||||
|
|
||||||
public SparqlDataset(String endpointURI) {
|
public SparqlDataset(SparqlDatasetGraph g) {
|
||||||
this.endpointURI = endpointURI;
|
this.g = g;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DatasetGraph asDatasetGraph() {
|
public DatasetGraph asDatasetGraph() {
|
||||||
// TODO Auto-generated method stub
|
return g;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
// TODO Auto-generated method stub
|
g.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean containsNamedModel(String arg0) {
|
public boolean containsNamedModel(String arg0) {
|
||||||
return true;
|
return g.containsGraph(Node.createURI(arg0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Model getDefaultModel() {
|
public Model getDefaultModel() {
|
||||||
// TODO Auto-generated method stub
|
return ModelFactory.createModelForGraph(g.getDefaultGraph());
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Lock getLock() {
|
public Lock getLock() {
|
||||||
// TODO Auto-generated method stub
|
return g.getLock();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Model getNamedModel(String arg0) {
|
public Model getNamedModel(String arg0) {
|
||||||
// TODO Auto-generated method stub
|
return ModelFactory.createModelForGraph(g.getGraph(Node.createURI(arg0)));
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<String> listNames() {
|
public Iterator<String> listNames() {
|
||||||
// TODO Auto-generated method stub
|
ArrayList<String> nameList = new ArrayList<String>();
|
||||||
return null;
|
Iterator<Node> nodeIt = g.listGraphNodes();
|
||||||
|
while (nodeIt.hasNext()) {
|
||||||
|
Node n = nodeIt.next();
|
||||||
|
nameList.add(n.getURI());
|
||||||
|
}
|
||||||
|
return nameList.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,11 @@ public class SparqlGraph implements GraphWithPerform {
|
||||||
+ sparqlNodeUpdate(t.getObject(), "") + " } "
|
+ sparqlNodeUpdate(t.getObject(), "") + " } "
|
||||||
+ ((graphURI != null) ? " } " : "");
|
+ ((graphURI != null) ? " } " : "");
|
||||||
|
|
||||||
//log.info(updateString);
|
|
||||||
|
if (graphURI != null) {
|
||||||
|
log.info("=====> update to graph " + graphURI);
|
||||||
|
}
|
||||||
|
log.info(updateString);
|
||||||
|
|
||||||
executeUpdate(updateString);
|
executeUpdate(updateString);
|
||||||
|
|
||||||
|
@ -195,7 +199,6 @@ public class SparqlGraph implements GraphWithPerform {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete(Triple arg0) throws DeleteDeniedException {
|
public void delete(Triple arg0) throws DeleteDeniedException {
|
||||||
//log.info("********************** DELETE!!!!!! ************************");
|
|
||||||
performDelete(arg0);
|
performDelete(arg0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,7 +231,7 @@ public class SparqlGraph implements GraphWithPerform {
|
||||||
literalBuff.append("^^<").append(node.getLiteralDatatypeURI()).append(">");
|
literalBuff.append("^^<").append(node.getLiteralDatatypeURI()).append(">");
|
||||||
} else if (node.getLiteralLanguage() != null && node.getLiteralLanguage() != "") {
|
} else if (node.getLiteralLanguage() != null && node.getLiteralLanguage() != "") {
|
||||||
literalBuff.append("@").append(node.getLiteralLanguage());
|
literalBuff.append("@").append(node.getLiteralLanguage());
|
||||||
; }
|
}
|
||||||
return literalBuff.toString();
|
return literalBuff.toString();
|
||||||
} else {
|
} else {
|
||||||
return varName;
|
return varName;
|
||||||
|
@ -243,6 +246,14 @@ public class SparqlGraph implements GraphWithPerform {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String sparqlNodeDelete(Node node, String varName) {
|
||||||
|
if (node.isBlank()) {
|
||||||
|
return "?" + node.getBlankNodeLabel().replaceAll("\\W", "");
|
||||||
|
} else {
|
||||||
|
return sparqlNode(node, varName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExtendedIterator<Triple> find(Node subject, Node predicate, Node object) {
|
public ExtendedIterator<Triple> find(Node subject, Node predicate, Node object) {
|
||||||
if (!isVar(subject) && !isVar(predicate) && !isVar(object)) {
|
if (!isVar(subject) && !isVar(predicate) && !isVar(object)) {
|
||||||
|
@ -265,7 +276,16 @@ public class SparqlGraph implements GraphWithPerform {
|
||||||
findQuery.append(" } ");
|
findQuery.append(" } ");
|
||||||
}
|
}
|
||||||
findQuery.append("\n}");
|
findQuery.append("\n}");
|
||||||
ResultSet rs = execSelect(findQuery.toString());
|
|
||||||
|
String queryString = findQuery.toString();
|
||||||
|
//log.info(queryString);
|
||||||
|
|
||||||
|
// //TODO remove me
|
||||||
|
// if (queryString.contains("individual/AI") && queryString.contains("label")) {
|
||||||
|
// throw new RuntimeException("break!");
|
||||||
|
// }
|
||||||
|
|
||||||
|
ResultSet rs = execSelect(queryString);
|
||||||
//rs = execSelect(findQuery.toString());
|
//rs = execSelect(findQuery.toString());
|
||||||
//rs = execSelect(findQuery.toString());
|
//rs = execSelect(findQuery.toString());
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,21 @@ public class SparqlGraphBulkUpdater extends SimpleBulkUpdateHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(Graph g, boolean arg1) {
|
public void add(Graph g, boolean arg1) {
|
||||||
|
log.info("adding graph");
|
||||||
|
Model[] model = separateStatementsWithBlankNodes(g);
|
||||||
|
addModel(model[1] /* nonBlankNodeModel */);
|
||||||
|
// replace following call with different method
|
||||||
|
addModel(model[0] /*blankNodeModel*/);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a pair of models. The first contains any statement containing at
|
||||||
|
* least one blank node. The second contains all remaining statements.
|
||||||
|
* @param g
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
private Model[] separateStatementsWithBlankNodes(Graph g) {
|
||||||
Model gm = ModelFactory.createModelForGraph(g);
|
Model gm = ModelFactory.createModelForGraph(g);
|
||||||
Model blankNodeModel = ModelFactory.createDefaultModel();
|
Model blankNodeModel = ModelFactory.createDefaultModel();
|
||||||
Model nonBlankNodeModel = ModelFactory.createDefaultModel();
|
Model nonBlankNodeModel = ModelFactory.createDefaultModel();
|
||||||
|
@ -77,12 +92,68 @@ public class SparqlGraphBulkUpdater extends SimpleBulkUpdateHandler {
|
||||||
blankNodeModel.add(stmt);
|
blankNodeModel.add(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addModel(nonBlankNodeModel);
|
Model[] result = new Model[2];
|
||||||
// replace following call with different method
|
result[0] = blankNodeModel;
|
||||||
addModel(blankNodeModel);
|
result[1] = nonBlankNodeModel;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(Graph g, boolean withReifications) {
|
||||||
|
delete(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(Graph g) {
|
||||||
|
Model[] model = separateStatementsWithBlankNodes(g);
|
||||||
|
deleteModel(model[1] /*statements without blank nodes*/);
|
||||||
|
// replace blank nodes in remaining statements with variables
|
||||||
|
|
||||||
|
StringBuffer patternBuff = new StringBuffer();
|
||||||
|
Iterator<Triple> tripIt = g.find(null, null, null);
|
||||||
|
while(tripIt.hasNext()) {
|
||||||
|
Triple t = tripIt.next();
|
||||||
|
patternBuff.append(SparqlGraph.sparqlNodeDelete(t.getSubject(), null));
|
||||||
|
patternBuff.append(" ");
|
||||||
|
patternBuff.append(SparqlGraph.sparqlNodeDelete(t.getPredicate(), null));
|
||||||
|
patternBuff.append(" ");
|
||||||
|
patternBuff.append(SparqlGraph.sparqlNodeDelete(t.getObject(), null));
|
||||||
|
patternBuff.append(" .\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuffer queryBuff = new StringBuffer();
|
||||||
|
String graphURI = graph.getGraphURI();
|
||||||
|
queryBuff.append("DELETE { " + ((graphURI != null) ? "GRAPH <" + graphURI + "> { " : "" ) + " \n");
|
||||||
|
queryBuff.append(patternBuff);
|
||||||
|
if (graphURI != null) {
|
||||||
|
queryBuff.append(" } \n");
|
||||||
|
}
|
||||||
|
queryBuff.append("} WHERE { \n");
|
||||||
|
if (graphURI != null) {
|
||||||
|
queryBuff.append(" GRAPH <" + graphURI + "> { \n");
|
||||||
|
}
|
||||||
|
queryBuff.append(patternBuff);
|
||||||
|
if (graphURI != null) {
|
||||||
|
queryBuff.append(" } \n");
|
||||||
|
}
|
||||||
|
queryBuff.append("} \n");
|
||||||
|
|
||||||
|
log.debug(queryBuff.toString());
|
||||||
|
|
||||||
|
graph.executeUpdate(queryBuff.toString());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addModel(Model model) {
|
public void addModel(Model model) {
|
||||||
|
verbModel(model, "INSERT");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteModel(Model model) {
|
||||||
|
verbModel(model, "DELETE");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verbModel(Model model, String verb) {
|
||||||
Model m = ModelFactory.createDefaultModel();
|
Model m = ModelFactory.createDefaultModel();
|
||||||
int testLimit = 1000;
|
int testLimit = 1000;
|
||||||
StmtIterator stmtIt = model.listStatements();
|
StmtIterator stmtIt = model.listStatements();
|
||||||
|
@ -96,7 +167,7 @@ public class SparqlGraphBulkUpdater extends SimpleBulkUpdateHandler {
|
||||||
m.write(sw, "N-TRIPLE");
|
m.write(sw, "N-TRIPLE");
|
||||||
StringBuffer updateStringBuff = new StringBuffer();
|
StringBuffer updateStringBuff = new StringBuffer();
|
||||||
String graphURI = graph.getGraphURI();
|
String graphURI = graph.getGraphURI();
|
||||||
updateStringBuff.append("INSERT DATA { " + ((graphURI != null) ? "GRAPH <" + graphURI + "> { " : "" ));
|
updateStringBuff.append(verb + " DATA { " + ((graphURI != null) ? "GRAPH <" + graphURI + "> { " : "" ));
|
||||||
updateStringBuff.append(sw);
|
updateStringBuff.append(sw);
|
||||||
updateStringBuff.append(((graphURI != null) ? " } " : "") + " }");
|
updateStringBuff.append(((graphURI != null) ? " } " : "") + " }");
|
||||||
|
|
||||||
|
@ -133,10 +204,6 @@ public class SparqlGraphBulkUpdater extends SimpleBulkUpdateHandler {
|
||||||
|
|
||||||
public static void removeAll(Graph g, Node s, Node p, Node o)
|
public static void removeAll(Graph g, Node s, Node p, Node o)
|
||||||
{
|
{
|
||||||
// OK, so the strategy here should be to remove all triples without blank nodes first
|
|
||||||
// Then, feel the entire remaining part of the graph as a DELETE WHERE
|
|
||||||
// with the blank nodes as variables?
|
|
||||||
|
|
||||||
ExtendedIterator<Triple> it = g.find( s, p, o );
|
ExtendedIterator<Triple> it = g.find( s, p, o );
|
||||||
try {
|
try {
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
|
|
|
@ -38,6 +38,7 @@ import com.hp.hpl.jena.query.ResultSet;
|
||||||
import com.hp.hpl.jena.query.Syntax;
|
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.Property;
|
||||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
import com.hp.hpl.jena.rdf.model.RDFNode;
|
||||||
import com.hp.hpl.jena.rdf.model.Resource;
|
import com.hp.hpl.jena.rdf.model.Resource;
|
||||||
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||||
|
@ -620,9 +621,13 @@ public class VClassDaoJena extends JenaBaseDao implements VClassDao {
|
||||||
supURIs.add(getClassURIStr(cls));
|
supURIs.add(getClassURIStr(cls));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
//TODO make this attempt respect the direct argument
|
log.debug(e,e);
|
||||||
// we'll try this again using a different method that doesn't try to convert to OntClass
|
// we'll try this again using a different method
|
||||||
List<Resource> supList = this.listDirectObjectPropertyValues(getOntModel().getResource(classURI), RDFS.subClassOf);
|
// that doesn't try to convert to OntClass
|
||||||
|
supURIs.clear();
|
||||||
|
List<Resource> supList = (direct)
|
||||||
|
? listDirectObjectPropertyValues(subClass, RDFS.subClassOf)
|
||||||
|
: listObjectPropertyValues(subClass, RDFS.subClassOf);
|
||||||
for (Resource res : supList) {
|
for (Resource res : supList) {
|
||||||
supURIs.add(getClassURIStr(res));
|
supURIs.add(getClassURIStr(res));
|
||||||
}
|
}
|
||||||
|
@ -630,6 +635,18 @@ public class VClassDaoJena extends JenaBaseDao implements VClassDao {
|
||||||
return supURIs;
|
return supURIs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Resource> listObjectPropertyValues(Resource res, Property prop) {
|
||||||
|
List<Resource> values = new ArrayList<Resource>();
|
||||||
|
StmtIterator stmtIt = res.listProperties(prop);
|
||||||
|
while (stmtIt.hasNext()) {
|
||||||
|
Statement s = stmtIt.nextStatement();
|
||||||
|
if (s.getObject().isResource()) {
|
||||||
|
values.add(s.getObject().asResource());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
public VClass getTopConcept() {
|
public VClass getTopConcept() {
|
||||||
VClass top = new VClass();
|
VClass top = new VClass();
|
||||||
if (getOntModel().getProfile().NAMESPACE().equals(RDFS.getURI())) {
|
if (getOntModel().getProfile().NAMESPACE().equals(RDFS.getURI())) {
|
||||||
|
|
|
@ -28,9 +28,7 @@ import org.apache.commons.logging.LogFactory;
|
||||||
import com.hp.hpl.jena.graph.Graph;
|
import com.hp.hpl.jena.graph.Graph;
|
||||||
import com.hp.hpl.jena.ontology.OntModel;
|
import com.hp.hpl.jena.ontology.OntModel;
|
||||||
import com.hp.hpl.jena.ontology.OntModelSpec;
|
import com.hp.hpl.jena.ontology.OntModelSpec;
|
||||||
import com.hp.hpl.jena.query.DataSource;
|
|
||||||
import com.hp.hpl.jena.query.Dataset;
|
import com.hp.hpl.jena.query.Dataset;
|
||||||
import com.hp.hpl.jena.query.DatasetFactory;
|
|
||||||
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;
|
||||||
import com.hp.hpl.jena.sdb.SDBFactory;
|
import com.hp.hpl.jena.sdb.SDBFactory;
|
||||||
|
@ -43,10 +41,9 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryConfig;
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryConfig;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.SingleContentOntModelSelector;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlDataset;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlDatasetGraph;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlDatasetGraph;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlGraphMultilingual;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlGraphMultilingual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactorySDB;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactorySDB;
|
||||||
import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase;
|
import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase;
|
||||||
|
|
||||||
|
@ -198,7 +195,7 @@ public class WebappDaoFactorySDBPrep implements Filter {
|
||||||
OntModel om = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, m);
|
OntModel om = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, m);
|
||||||
//oms = new SingleContentOntModelSelector(om, oms.getDisplayModel(), oms.getUserAccountsModel());
|
//oms = new SingleContentOntModelSelector(om, oms.getDisplayModel(), oms.getUserAccountsModel());
|
||||||
|
|
||||||
Dataset dataset = DatasetFactory.create(new SparqlDatasetGraph(endpointURI));
|
Dataset dataset = new SparqlDataset(new SparqlDatasetGraph(endpointURI));
|
||||||
|
|
||||||
//DataSource datasource = DatasetFactory.create();
|
//DataSource datasource = DatasetFactory.create();
|
||||||
//datasource.addNamedModel("fake:fake", m);
|
//datasource.addNamedModel("fake:fake", m);
|
||||||
|
|
|
@ -19,7 +19,6 @@ import com.hp.hpl.jena.graph.Graph;
|
||||||
import com.hp.hpl.jena.ontology.OntModel;
|
import com.hp.hpl.jena.ontology.OntModel;
|
||||||
import com.hp.hpl.jena.ontology.OntModelSpec;
|
import com.hp.hpl.jena.ontology.OntModelSpec;
|
||||||
import com.hp.hpl.jena.query.Dataset;
|
import com.hp.hpl.jena.query.Dataset;
|
||||||
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;
|
||||||
|
@ -32,7 +31,6 @@ import com.hp.hpl.jena.rdf.model.Resource;
|
||||||
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||||
import com.hp.hpl.jena.rdf.model.Statement;
|
import com.hp.hpl.jena.rdf.model.Statement;
|
||||||
import com.hp.hpl.jena.rdf.model.StmtIterator;
|
import com.hp.hpl.jena.rdf.model.StmtIterator;
|
||||||
import com.hp.hpl.jena.sdb.SDB;
|
|
||||||
import com.hp.hpl.jena.sdb.SDBFactory;
|
import com.hp.hpl.jena.sdb.SDBFactory;
|
||||||
import com.hp.hpl.jena.sdb.Store;
|
import com.hp.hpl.jena.sdb.Store;
|
||||||
import com.hp.hpl.jena.sdb.StoreDesc;
|
import com.hp.hpl.jena.sdb.StoreDesc;
|
||||||
|
@ -54,6 +52,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelSynchronizer;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelSynchronizer;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelectorImpl;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelectorImpl;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlDataset;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlDatasetGraph;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlDatasetGraph;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlGraph;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlGraph;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker;
|
||||||
|
@ -129,7 +128,7 @@ public class JenaDataSourceSetupSparql2 extends JenaDataSourceSetupBase
|
||||||
ctx).getProperty("VitroConnection.DataSource.endpointURI");
|
ctx).getProperty("VitroConnection.DataSource.endpointURI");
|
||||||
|
|
||||||
Graph g = new SparqlGraph(endpointURI);
|
Graph g = new SparqlGraph(endpointURI);
|
||||||
Dataset dataset = DatasetFactory.create(new SparqlDatasetGraph(endpointURI));
|
Dataset dataset = new SparqlDataset(new SparqlDatasetGraph(endpointURI));
|
||||||
setStartupDataset(dataset, ctx);
|
setStartupDataset(dataset, ctx);
|
||||||
|
|
||||||
// setStartupDataset(SDBFactory.connectDataset(store), ctx);
|
// setStartupDataset(SDBFactory.connectDataset(store), ctx);
|
||||||
|
@ -191,6 +190,7 @@ public class JenaDataSourceSetupSparql2 extends JenaDataSourceSetupBase
|
||||||
|
|
||||||
tboxAssertions.getBaseModel().register(new ModelSynchronizer(
|
tboxAssertions.getBaseModel().register(new ModelSynchronizer(
|
||||||
tboxAssertionsDB));
|
tboxAssertionsDB));
|
||||||
|
|
||||||
baseOms.setTBoxModel(tboxAssertions);
|
baseOms.setTBoxModel(tboxAssertions);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
log.error("Unable to load tbox assertion cache from DB", e);
|
log.error("Unable to load tbox assertion cache from DB", e);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue