Changed ObjectPropertyStatementDaoJena so that it creates ObjectProperties the same way as ObjectPropertyDaoJena, Filter RDF generated for linked data requests. NIHVIVO-170
This commit is contained in:
parent
53d30323f0
commit
c13f025ed6
3 changed files with 33 additions and 18 deletions
|
@ -4,7 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.controller;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.io.Writer;
|
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -21,6 +20,7 @@ import javax.servlet.http.HttpSession;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import com.hp.hpl.jena.datatypes.TypeMapper;
|
||||||
import com.hp.hpl.jena.ontology.OntModel;
|
import com.hp.hpl.jena.ontology.OntModel;
|
||||||
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;
|
||||||
|
@ -245,7 +245,7 @@ public class EntityController extends VitroHttpServlet {
|
||||||
if( ontModel == null)
|
if( ontModel == null)
|
||||||
ontModel = (Model)getServletContext().getAttribute("jenaOntModel");
|
ontModel = (Model)getServletContext().getAttribute("jenaOntModel");
|
||||||
|
|
||||||
Model newModel = getRDF(indiv, ontModel, ModelFactory.createDefaultModel(), true);
|
Model newModel = getRDF(indiv, ontModel, ModelFactory.createDefaultModel(), 0);
|
||||||
|
|
||||||
res.setContentType(rdfFormat.getMediaType());
|
res.setContentType(rdfFormat.getMediaType());
|
||||||
String format = "";
|
String format = "";
|
||||||
|
@ -479,7 +479,7 @@ public class EntityController extends VitroHttpServlet {
|
||||||
Resource i = ontModel.getResource(entity.getURI());
|
Resource i = ontModel.getResource(entity.getURI());
|
||||||
ModelMaker modelMaker = ontModel.getImportModelMaker();
|
ModelMaker modelMaker = ontModel.getImportModelMaker();
|
||||||
Model newModel = modelMaker.createModel(entity.getURI(), false);
|
Model newModel = modelMaker.createModel(entity.getURI(), false);
|
||||||
newModel = getRDF(entity, ontModel, newModel, true);
|
newModel = getRDF(entity, ontModel, newModel, 0);
|
||||||
try {
|
try {
|
||||||
ServletOutputStream outstream = res.getOutputStream();
|
ServletOutputStream outstream = res.getOutputStream();
|
||||||
/*
|
/*
|
||||||
|
@ -510,28 +510,37 @@ public class EntityController extends VitroHttpServlet {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adds data from ontModel about entity to newModel. Go down 1 level if recurse is true
|
// Adds data from ontModel about entity to newModel. Go down 1 level if recurse is true
|
||||||
private Model getRDF(Individual entity, Model ontModel, Model newModel, boolean recurse) {
|
private Model getRDF(Individual entity, Model ontModel, Model newModel, int recurseDepth ) {
|
||||||
Resource subj = ontModel.getResource(entity.getURI());
|
Resource subj = ontModel.getResource(entity.getURI());
|
||||||
|
|
||||||
List<DataPropertyStatement> dstates = entity.getDataPropertyStatements();
|
List<DataPropertyStatement> dstates = entity.getDataPropertyStatements();
|
||||||
//System.out.println("data: "+dstates.size());
|
//System.out.println("data: "+dstates.size());
|
||||||
|
TypeMapper typeMapper = TypeMapper.getInstance();
|
||||||
for (DataPropertyStatement ds: dstates) {
|
for (DataPropertyStatement ds: dstates) {
|
||||||
Property dp = ontModel.getProperty(ds.getDatapropURI());
|
Property dp = ontModel.getProperty(ds.getDatapropURI());
|
||||||
//if(!(dp instanceof DatatypeProperty)) System.out.println("not datatype prop "+dp.getURI());
|
Literal lit = null;
|
||||||
|
if ((ds.getLanguage()) != null && (ds.getLanguage().length()>0)) {
|
||||||
//TODO: improve to handle languages and XSD data types
|
lit = ontModel.createLiteral(ds.getData(),ds.getLanguage());
|
||||||
Literal lit = newModel.createLiteral(ds.getData());
|
} else if ((ds.getDatatypeURI() != null) && (ds.getDatatypeURI().length()>0)) {
|
||||||
|
lit = ontModel.createTypedLiteral(ds.getData(),typeMapper.getSafeTypeByName(ds.getDatatypeURI()));
|
||||||
|
} else {
|
||||||
|
lit = ontModel.createLiteral(ds.getData());
|
||||||
|
}
|
||||||
newModel.add(newModel.createStatement(subj, dp, lit));
|
newModel.add(newModel.createStatement(subj, dp, lit));
|
||||||
}
|
}
|
||||||
if(recurse) {
|
|
||||||
|
if( recurseDepth < 5 ){
|
||||||
List<ObjectPropertyStatement> ostates = entity.getObjectPropertyStatements();
|
List<ObjectPropertyStatement> ostates = entity.getObjectPropertyStatements();
|
||||||
//System.out.println("obj: "+ostates.size());
|
|
||||||
for (ObjectPropertyStatement os: ostates) {
|
for (ObjectPropertyStatement os: ostates) {
|
||||||
|
ObjectProperty objProp = os.getProperty();
|
||||||
Property op = ontModel.getProperty(os.getPropertyURI());
|
Property op = ontModel.getProperty(os.getPropertyURI());
|
||||||
Resource obj = ontModel.getResource(os.getObjectURI());
|
Resource obj = ontModel.getResource(os.getObjectURI());
|
||||||
newModel.add(newModel.createStatement(subj, op, obj));
|
newModel.add(newModel.createStatement(subj, op, obj));
|
||||||
newModel.add(getRDF(os.getObject(), ontModel, newModel, false));
|
if( objProp.getStubObjectRelation() )
|
||||||
|
newModel.add(getRDF(os.getObject(), ontModel, newModel, recurseDepth + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return newModel;
|
return newModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp
|
||||||
entity.setPropertyList(props);
|
entity.setPropertyList(props);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ObjectProperty propertyFromOntProperty(OntProperty op) {
|
protected ObjectProperty propertyFromOntProperty(OntProperty op) {
|
||||||
if (op==null) {
|
if (op==null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.hp.hpl.jena.ontology.OntModel;
|
import com.hp.hpl.jena.ontology.OntModel;
|
||||||
import com.hp.hpl.jena.rdf.model.Property;
|
import com.hp.hpl.jena.rdf.model.Property;
|
||||||
|
@ -52,6 +54,9 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
||||||
if (entity.getURI() == null)
|
if (entity.getURI() == null)
|
||||||
return entity;
|
return entity;
|
||||||
else {
|
else {
|
||||||
|
Map<String, ObjectProperty> uriToObjectProperty = new HashMap<String,ObjectProperty>();
|
||||||
|
|
||||||
|
ObjectPropertyDaoJena opDaoJena = new ObjectPropertyDaoJena(getWebappDaoFactory());
|
||||||
Resource ind = getOntModel().getResource(entity.getURI());
|
Resource ind = getOntModel().getResource(entity.getURI());
|
||||||
List<ObjectPropertyStatement> objPropertyStmtList = new ArrayList<ObjectPropertyStatement>();
|
List<ObjectPropertyStatement> objPropertyStmtList = new ArrayList<ObjectPropertyStatement>();
|
||||||
ClosableIterator propIt = ind.listProperties();
|
ClosableIterator propIt = ind.listProperties();
|
||||||
|
@ -71,12 +76,13 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
||||||
objPropertyStmt.setPropertyURI(st.getPredicate().getURI());
|
objPropertyStmt.setPropertyURI(st.getPredicate().getURI());
|
||||||
try {
|
try {
|
||||||
Property prop = st.getPredicate();
|
Property prop = st.getPredicate();
|
||||||
ObjectProperty p = new ObjectProperty();
|
if( uriToObjectProperty.containsKey(prop.getURI())){
|
||||||
p.setURI(prop.getURI());
|
objPropertyStmt.setProperty(uriToObjectProperty.get(prop.getURI()));
|
||||||
p.setNamespace(prop.getNameSpace());
|
}else{
|
||||||
p.setLocalName(prop.getLocalName());
|
ObjectProperty p = opDaoJena.propertyFromOntProperty(getOntModel().createOntProperty(prop.getURI()));
|
||||||
//p.setDomainPublic(prop.getLabel(null));
|
uriToObjectProperty.put(prop.getURI(), p);
|
||||||
objPropertyStmt.setProperty(p);
|
objPropertyStmt.setProperty(uriToObjectProperty.get(prop.getURI()));
|
||||||
|
}
|
||||||
} catch (Throwable g) {
|
} catch (Throwable g) {
|
||||||
ObjectProperty q = new ObjectProperty();
|
ObjectProperty q = new ObjectProperty();
|
||||||
q.setDomainPublic("error");
|
q.setDomainPublic("error");
|
||||||
|
|
Loading…
Add table
Reference in a new issue