From c13f025ed6dc09bc424313c672244d36392ce1f9 Mon Sep 17 00:00:00 2001 From: bdc34 Date: Tue, 30 Mar 2010 20:42:39 +0000 Subject: [PATCH] Changed ObjectPropertyStatementDaoJena so that it creates ObjectProperties the same way as ObjectPropertyDaoJena, Filter RDF generated for linked data requests. NIHVIVO-170 --- .../webapp/controller/EntityController.java | 31 ++++++++++++------- .../dao/jena/ObjectPropertyDaoJena.java | 2 +- .../jena/ObjectPropertyStatementDaoJena.java | 18 +++++++---- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/EntityController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/EntityController.java index f1b239d8c..45f2e1d55 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/EntityController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/EntityController.java @@ -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 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 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; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java index 8ca534b4d..4986006d2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java @@ -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; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java index 77e6a679d..c897e89e4 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java @@ -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 uriToObjectProperty = new HashMap(); + + ObjectPropertyDaoJena opDaoJena = new ObjectPropertyDaoJena(getWebappDaoFactory()); Resource ind = getOntModel().getResource(entity.getURI()); List objPropertyStmtList = new ArrayList(); 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");