Model tplModel = FileManager.get().loadModel(metadataTemplate);
// iterate over template statements to replace placeholders
Model metadata = ModelFactory.createDefaultModel();
currentDocRepr = metadata.createResource();
StmtIterator it = tplModel.listStatements();
while (it.hasNext()) {
Statement stmt = it.nextStatement();
Resource subj = stmt.getSubject();
Property pred = stmt.getPredicate();
RDFNode obj = stmt.getObject();
try {
if (subj.toString().contains(metadataPlaceholderURIPrefix)){
subj = (Resource) parsePlaceholder(subj, controller, currentTime, currentDocRepr);
if (subj == null) {
// create a unique blank node with a fixed id.
subj = getModel().createResource(new AnonId(String.valueOf(stmt.getSubject().hashCode())));
}
}
if (obj.toString().contains(metadataPlaceholderURIPrefix)){
obj = parsePlaceholder(obj, controller, currentTime, currentDocRepr);
}
// only add statements with some objects
if (obj != null) {
stmt = metadata.createStatement(subj,pred,obj);
metadata.add(stmt);
}
} catch (Exception e) {
// something went wrong, oops - lets better remove the offending statement
metadata.remove(stmt);
e.printStackTrace();
}
}
// remove blank nodes that don't have any properties
boolean changes = true;
while ( changes ) {
changes = false;
StmtIterator stmtIt = metadata.listStatements();
List<Statement> remList = new ArrayList<Statement>();
while (stmtIt.hasNext()) {
Statement s = stmtIt.nextStatement();
if ( s.getObject().isAnon()
&& ! ((Resource) s.getObject().as(Resource.class)).listProperties().hasNext() ) {
remList.add(s);
changes = true;
}