/** * Used to write Resources for a Subject. Literals will by-pass this method and use "Literal" * method. * * @param predicate PredicateNode * @param object ObjectNode * @param writer PrintWriter * @throws GraphException */ protected void writeStatement( Graph graph, SubjectNode subject, PredicateNode predicate, ObjectNode object, PrintWriter writer) throws GraphException { // Literals are written differently if (object instanceof Literal) { this.writeStatement(graph, subject, predicate, (Literal) object, writer); } else if (object instanceof BlankNode) { // write as: <predicateURI> *blank node as subject* </predicateURI> writer.println(" <" + this.getURI(predicate) + ">"); // write blank node as a "subject" this.writeSubject(graph, (BlankNode) object, writer); writer.println(" </" + this.getURI(predicate) + ">"); } else if (subject instanceof BlankNode) { // predicatNode representing RDF Type PredicateNode rdfTypeNode = null; try { rdfTypeNode = graph.getElementFactory().createResource(RDF.TYPE); } catch (GraphElementFactoryException factoryException) { throw new GraphException("Could not create RDF Type node.", factoryException); } // do not write the RDF Type element if (!rdfTypeNode.equals(predicate)) { // write as: <predicateURI rdf:resource="resourceURI"/> writer.println( " <" + this.getURI(predicate) + " " + RDF_PREFIX + ":resource=\"" + this.getNodeString(object) + "\"/>"); } } else { // write as: <predicateURI rdf:resource="resourceURI"/> writer.println( " <" + this.getURI(predicate) + " " + RDF_PREFIX + ":resource=\"" + this.getNodeString(object) + "\"/>"); } }
/** * Finds the RDF Type for a given subject. * * @param graph Graph * @param subject SubjectNode * @throws GraphException * @return ObjectNode */ protected ObjectNode getSubjectType(Graph graph, SubjectNode subject) throws GraphException { // value to be returned ObjectNode type = null; // validate graph if ((graph == null)) { throw new IllegalArgumentException("Graph argument must not be null."); } // predicatNode representing RDF Type PredicateNode rdfType = null; try { rdfType = graph.getElementFactory().createResource(RDF.TYPE); } catch (GraphElementFactoryException factoryException) { throw new GraphException("Could not create RDF Type node.", factoryException); } // get the Subject's RDF type ClosableIterator<Triple> typeIter = graph.find(subject, rdfType, null); if (typeIter != null) { // validate "first" triple and extract it's object (rdf type) if (typeIter.hasNext()) { Triple typeTriple = typeIter.next(); if (typeTriple != null) { type = ((Triple) typeTriple).getObject(); } else { throw new GraphException( "Could not find RDF type for Subject: " + subject + " . Invalid Triple returned."); } } // close the Iterator typeIter.close(); } return type; }