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:
bdc34 2010-03-30 20:42:39 +00:00
parent 53d30323f0
commit c13f025ed6
3 changed files with 33 additions and 18 deletions

View file

@ -4,7 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.controller;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
@ -21,6 +20,7 @@ import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
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.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model;
@ -245,7 +245,7 @@ public class EntityController extends VitroHttpServlet {
if( ontModel == null)
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());
String format = "";
@ -479,7 +479,7 @@ public class EntityController extends VitroHttpServlet {
Resource i = ontModel.getResource(entity.getURI());
ModelMaker modelMaker = ontModel.getImportModelMaker();
Model newModel = modelMaker.createModel(entity.getURI(), false);
newModel = getRDF(entity, ontModel, newModel, true);
newModel = getRDF(entity, ontModel, newModel, 0);
try {
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
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());
List<DataPropertyStatement> dstates = entity.getDataPropertyStatements();
//System.out.println("data: "+dstates.size());
TypeMapper typeMapper = TypeMapper.getInstance();
for (DataPropertyStatement ds: dstates) {
Property dp = ontModel.getProperty(ds.getDatapropURI());
//if(!(dp instanceof DatatypeProperty)) System.out.println("not datatype prop "+dp.getURI());
//TODO: improve to handle languages and XSD data types
Literal lit = newModel.createLiteral(ds.getData());
Literal lit = null;
if ((ds.getLanguage()) != null && (ds.getLanguage().length()>0)) {
lit = ontModel.createLiteral(ds.getData(),ds.getLanguage());
} 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));
}
if(recurse) {
if( recurseDepth < 5 ){
List<ObjectPropertyStatement> ostates = entity.getObjectPropertyStatements();
//System.out.println("obj: "+ostates.size());
for (ObjectPropertyStatement os: ostates) {
ObjectProperty objProp = os.getProperty();
Property op = ontModel.getProperty(os.getPropertyURI());
Resource obj = ontModel.getResource(os.getObjectURI());
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;
}

View file

@ -66,7 +66,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp
entity.setPropertyList(props);
}
private ObjectProperty propertyFromOntProperty(OntProperty op) {
protected ObjectProperty propertyFromOntProperty(OntProperty op) {
if (op==null) {
return null;
}

View file

@ -3,7 +3,9 @@
package edu.cornell.mannlib.vitro.webapp.dao.jena;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.Property;
@ -52,6 +54,9 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
if (entity.getURI() == null)
return entity;
else {
Map<String, ObjectProperty> uriToObjectProperty = new HashMap<String,ObjectProperty>();
ObjectPropertyDaoJena opDaoJena = new ObjectPropertyDaoJena(getWebappDaoFactory());
Resource ind = getOntModel().getResource(entity.getURI());
List<ObjectPropertyStatement> objPropertyStmtList = new ArrayList<ObjectPropertyStatement>();
ClosableIterator propIt = ind.listProperties();
@ -71,12 +76,13 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
objPropertyStmt.setPropertyURI(st.getPredicate().getURI());
try {
Property prop = st.getPredicate();
ObjectProperty p = new ObjectProperty();
p.setURI(prop.getURI());
p.setNamespace(prop.getNameSpace());
p.setLocalName(prop.getLocalName());
//p.setDomainPublic(prop.getLabel(null));
objPropertyStmt.setProperty(p);
if( uriToObjectProperty.containsKey(prop.getURI())){
objPropertyStmt.setProperty(uriToObjectProperty.get(prop.getURI()));
}else{
ObjectProperty p = opDaoJena.propertyFromOntProperty(getOntModel().createOntProperty(prop.getURI()));
uriToObjectProperty.put(prop.getURI(), p);
objPropertyStmt.setProperty(uriToObjectProperty.get(prop.getURI()));
}
} catch (Throwable g) {
ObjectProperty q = new ObjectProperty();
q.setDomainPublic("error");