/* The contents of this file are subject to the license and copyright terms * detailed in the license directory at the root of the source tree (also * available online at http://fedora-commons.org/license/). */ package fedora.server.storage; import java.io.InputStream; import java.net.URI; import java.util.HashSet; import java.util.Set; import org.jrdf.graph.Literal; import org.jrdf.graph.ObjectNode; import org.jrdf.graph.Triple; import org.trippi.RDFFormat; import org.trippi.TripleIterator; import org.trippi.TrippiException; import fedora.server.errors.GeneralException; import fedora.server.errors.ServerException; import fedora.server.storage.types.Datastream; import fedora.server.storage.types.RelationshipTuple; public abstract class RDFRelationshipReader { public static Set<RelationshipTuple> readRelationships(Datastream ds) throws ServerException { if (ds == null) { return new HashSet<RelationshipTuple>(); } try { return readRelationships(ds.getContentStream()); } catch (TrippiException e) { throw new GeneralException(e.getMessage(), e); } } public static Set<RelationshipTuple> readRelationships(InputStream dsContent) throws TrippiException { Set<RelationshipTuple> tuples = new HashSet<RelationshipTuple>(); TripleIterator iter = null; try { iter = TripleIterator.fromStream(dsContent, RDFFormat.RDF_XML); Triple triple; ObjectNode objectNode; boolean isLiteral; URI datatypeURI; String subject, predicate, object, datatype; while (iter.hasNext()) { triple = iter.next(); subject = triple.getSubject().toString(); predicate = triple.getPredicate().toString(); objectNode = triple.getObject(); isLiteral = objectNode instanceof Literal; datatype = null; if (isLiteral) { object = ((Literal) objectNode).getLexicalForm(); datatypeURI = ((Literal) objectNode).getDatatypeURI(); if (datatypeURI != null) { datatype = datatypeURI.toString(); } } else { object = triple.getObject().toString(); } tuples.add(new RelationshipTuple(subject, predicate, object, isLiteral, datatype)); } } finally { if (iter != null) { iter.close(); } } return tuples; } }