TAVERNA-1046: Pick up ORCID from manifest

Note that this modifies our "cached" bundle.jsonld context
to map "orcid" alternatively to prov:alternateOf -- this is not
currently reflected upstream in https://w3id.org/bundle/context


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/ea432007
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/ea432007
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/ea432007

Branch: refs/heads/master
Commit: ea4320079c79db73eb9bac3e7b73755bc6b2e57b
Parents: 3c9d0a9
Author: Stian Soiland-Reyes <[email protected]>
Authored: Thu May 10 18:17:19 2018 +0100
Committer: Stian Soiland-Reyes <[email protected]>
Committed: Thu May 10 18:17:19 2018 +0100

----------------------------------------------------------------------
 .../robundle/manifest/RDFToManifest.java        | 32 +++++++++++++++++---
 .../src/main/resources/contexts/bundle.jsonld   |  2 +-
 2 files changed, 28 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ea432007/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/RDFToManifest.java
----------------------------------------------------------------------
diff --git 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/RDFToManifest.java
 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/RDFToManifest.java
index c144f19..2976234 100644
--- 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/RDFToManifest.java
+++ 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/RDFToManifest.java
@@ -163,6 +163,10 @@ public class RDFToManifest {
 
        private OntClass standard;
 
+       private OntModel roterms;
+
+       private ObjectProperty alternateOf;
+
        public RDFToManifest() {
                loadOntologies();
        }
@@ -193,8 +197,26 @@ public class RDFToManifest {
                List<Agent> creators = new ArrayList<>();
                for (Individual agent : listObjectProperties(in, property)) {
                        Agent a = new Agent();
-                       if (agent.getURI() != null)
-                               a.setUri(relativizeFromBase(agent.getURI(), 
base));
+
+                       // Check for any ORCIDs, note that "orcid" is mapped as
+                       // prov:alternateOf in our modified bundle.jsonld
+                       for (Individual alternate : listObjectProperties(agent, 
alternateOf)) {
+                               if (alternate.isURIResource() && (
+                                               
alternate.getURI().startsWith("https://orcid.org/";) ||
+                                               
alternate.getURI().startsWith("http://orcid.org/";))) {
+                                       // TODO: Check against 
https://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier
+                                       
a.setOrcid(URI.create(alternate.getURI()));
+                                       break;
+                               }
+                       }
+                       if (agent.isURIResource()) {
+                               URI agentURI = 
relativizeFromBase(agent.getURI(), base);
+                               if ("orcid.org".equals(agentURI.getHost()) && 
a.getOrcid() == null) {
+                                       a.setOrcid(agentURI);
+                               } else {
+                                       a.setUri(agentURI);
+                               }
+                       }
 
                        RDFNode name = agent.getPropertyValue(foafName);
                        if (name != null && name.isLiteral())
@@ -366,8 +388,8 @@ public class RDFToManifest {
                if (prov != null)
                        return;
                OntModel ontModel = loadOntologyFromClasspath(PROV_O_RDF, 
PROV_O);
-
-               checkNotNull(ontModel);
+               alternateOf = ontModel.getObjectProperty(PROV + "alternateOf");
+               checkNotNull(ontModel, alternateOf);
 
                prov = ontModel;
        }
@@ -571,7 +593,7 @@ public class RDFToManifest {
                         */
                        for (Individual body : listObjectProperties(
                                        model.getOntResource(ann), hasBody)) {
-                               if (body.getURI() == null) {
+                               if (! body.isURIResource()) {
                                        logger.warning("Can't find annotation 
body for anonymous "
                                                        + body);
                                        continue;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ea432007/taverna-robundle/src/main/resources/contexts/bundle.jsonld
----------------------------------------------------------------------
diff --git a/taverna-robundle/src/main/resources/contexts/bundle.jsonld 
b/taverna-robundle/src/main/resources/contexts/bundle.jsonld
index cadb9ff..170777f 100644
--- a/taverna-robundle/src/main/resources/contexts/bundle.jsonld
+++ b/taverna-robundle/src/main/resources/contexts/bundle.jsonld
@@ -88,7 +88,7 @@
         "@id": "foaf:name"
     },
     "orcid": {
-        "@id": "roterms:orcid",
+        "@id": "prov:alternateOf",
         "@type": "@id"
     },
 

Reply via email to