TAVERNA-1044: Support rdf:value below dct:W3CDTF bnode
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/commit/1db178fa Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/1db178fa Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/1db178fa Branch: refs/heads/master Commit: 1db178fa78a2ec7140dd6cf901d4738b4677aaa7 Parents: e33a636 Author: Stian Soiland-Reyes <[email protected]> Authored: Thu May 10 11:25:38 2018 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Thu May 10 11:25:38 2018 +0100 ---------------------------------------------------------------------- .../apache/taverna/robundle/utils/RDFUtils.java | 40 ++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1db178fa/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java ---------------------------------------------------------------------- diff --git a/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java b/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java index 716a723..2b13922 100644 --- a/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java +++ b/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java @@ -1,5 +1,7 @@ package org.apache.taverna.robundle.utils; +import static java.nio.file.attribute.FileTime.fromMillis; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -21,29 +23,53 @@ package org.apache.taverna.robundle.utils; import static org.apache.jena.datatypes.xsd.XSDDatatype.XSDdateTime; -import static java.nio.file.attribute.FileTime.fromMillis; import java.nio.file.attribute.FileTime; +import java.util.logging.Level; import java.util.logging.Logger; import org.apache.jena.datatypes.DatatypeFormatException; import org.apache.jena.datatypes.xsd.XSDDateTime; import org.apache.jena.rdf.model.Literal; import org.apache.jena.rdf.model.RDFNode; +import org.apache.jena.rdf.model.Statement; +import org.apache.jena.vocabulary.RDF; public class RDFUtils { private static final Logger logger = Logger.getLogger(RDFUtils.class .getCanonicalName()); public static FileTime literalAsFileTime(RDFNode rdfNode) { - if (rdfNode == null) - return null; - if (!rdfNode.isLiteral()) { - new Exception().printStackTrace(); - logger.warning("Expected literal. not " + rdfNode); + if (rdfNode == null) { return null; } - Literal literal = rdfNode.asLiteral(); + final Literal literal; + if (rdfNode.isLiteral()) { + literal = rdfNode.asLiteral(); + } else { + // TAVERNA-1044: not a literal, so assume a resource. + // Let's climb into rdf:value if it exists, in case we're in a + // <dct:W3CDTF> typed bnode. + Statement valueStmt = rdfNode.asResource().getProperty(RDF.value); + if (valueStmt == null) { + // Make our own exception so logger gets a stacktrace + Exception ex = new Exception("Can't find timestamp as literal"); + logger.log(Level.WARNING, + "Expected literal or resource with rdf:value. not " + rdfNode, + ex); + return null; + } + if (valueStmt.getObject().isLiteral()) { + literal = valueStmt.getObject().asLiteral(); + } else { + Exception ex = new Exception("Invalid timestamp literal"); + logger.log(Level.WARNING, + "Expected rdf:value statement with literal object, not" + valueStmt, + ex); + return null; + } + } + Object value = literal.getValue(); XSDDateTime dateTime; if (value instanceof XSDDateTime) {
