parse bundledAs and folder info .. in particular for aggregated URIs as in bag-of-bags-manifest.json
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/aaf3f2bd Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/aaf3f2bd Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/aaf3f2bd Branch: refs/heads/master Commit: aaf3f2bdea6ba9fb315ecde27ea5dc71b24aa559 Parents: b5dd34a Author: Stian Soiland-Reyes <[email protected]> Authored: Thu May 10 19:19:36 2018 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Thu May 10 19:20:21 2018 +0100 ---------------------------------------------------------------------- .../robundle/manifest/RDFToManifest.java | 53 +++++++++++++++++--- .../robundle/manifest/TestRDFToManifest.java | 11 ++-- 2 files changed, 50 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/aaf3f2bd/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 2976234..f0517eb 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 @@ -29,7 +29,9 @@ import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; @@ -93,8 +95,9 @@ public class RDFToManifest { private static final String PROV_AQ_RDF = "/ontologies/prov-aq.rdf"; private static final String PROV_O = "http://www.w3.org/ns/prov-o#"; private static final String PROV_O_RDF = "/ontologies/prov-o.rdf"; - @SuppressWarnings("unused") + private static final String RO = "http://purl.org/wf4ever/ro#"; + private static final String RO_OWL = "/ontologies/ro.owl"; private static <T> ClosableIterable<T> iterate(ExtendedIterator<T> iterator) { return new ClosableIterable<T>(iterator); @@ -167,6 +170,12 @@ public class RDFToManifest { private ObjectProperty alternateOf; + private ObjectProperty bundledAs; + + private DatatypeProperty entryName; + + private OntModel ro; + public RDFToManifest() { loadOntologies(); } @@ -258,7 +267,8 @@ public class RDFToManifest { hasProxy = ontModel.getObjectProperty(BUNDLE + "hasProxy"); hasAnnotation = ontModel.getObjectProperty(BUNDLE + "hasAnnotation"); inFolder = ontModel.getObjectProperty(BUNDLE + "inFolder"); - checkNotNull(hasProxy, hasAnnotation, inFolder); + bundledAs = ontModel.getObjectProperty(BUNDLE + "bundledAs"); + checkNotNull(hasProxy, hasAnnotation, inFolder, bundledAs); bundle = ontModel; } @@ -315,6 +325,7 @@ public class RDFToManifest { loadPAV(); loadPROVAQ(); loadOA(); + loadRO(); loadBundle(); } @@ -394,9 +405,13 @@ public class RDFToManifest { prov = ontModel; } - @SuppressWarnings("deprecation") - private static void setPathProxy(PathMetadata meta, URI proxy) { - meta.setProxy(proxy); + protected synchronized void loadRO() { + if (ro != null) + return; + OntModel ontModel = loadOntologyFromClasspath(RO_OWL, RO); + entryName = ontModel.getDatatypeProperty(RO + "entryName"); + checkNotNull(ontModel, entryName); + ro = ontModel; } public void readTo(InputStream manifestResourceAsStream, Manifest manifest, @@ -511,11 +526,14 @@ public class RDFToManifest { PathMetadata meta = manifest.getAggregation(relativizeFromBase( uriStr, root)); - // hasProxy Set<Individual> proxies = listObjectProperties(aggrResource, hasProxy); + if (proxies.isEmpty()) { + // FIXME: Jena does not follow OWL properties paths from hasProxy + proxies = listObjectProperties(aggrResource, bundledAs); + } if (!proxies.isEmpty()) { - // We can only deal with the first one + // Should really only be one anyway Individual proxy = proxies.iterator().next(); String proxyUri = null; @@ -525,9 +543,28 @@ public class RDFToManifest { proxyUri = proxy.getSameAs().getURI(); } + Proxy proxyInManifest = meta.getOrCreateBundledAs(); if (proxyUri != null) { - setPathProxy(meta, relativizeFromBase(proxyUri, root)); + proxyInManifest.setURI(relativizeFromBase(proxyUri, root)); + } + + RDFNode eName = proxy.getPropertyValue(entryName); + if (eName != null && eName.isLiteral()) { + proxyInManifest.setFilename(eName.asLiteral().getString());; } + RDFNode folder = proxy.getPropertyValue(inFolder); + if (folder != null && folder.isURIResource()) { + URI folderUri = URI.create(folder.asResource().getURI()); + if (! folderUri.resolve("/").equals(manifest.getBaseURI())) { + logger.warning("Invalid bundledAs folder, outside base URI of RO: " + folderUri); + continue; + } + Path folderPath = Paths.get(folderUri); + // Note: folder need NOT exist in zip file, so we don't need to do + // Files.createDirectories(folderPath); + proxyInManifest.setFolder(folderPath); + } + } // createdBy http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/aaf3f2bd/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestRDFToManifest.java ---------------------------------------------------------------------- diff --git a/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestRDFToManifest.java b/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestRDFToManifest.java index 7ebc5ad..12fd543 100644 --- a/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestRDFToManifest.java +++ b/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestRDFToManifest.java @@ -79,7 +79,6 @@ public class TestRDFToManifest { author.getUri()); assertEquals(URI.create("https://orcid.org/0000-0001-9842-9718"), author.getOrcid()); - // FIXME: The BDBag got this wrong and used "uri" instead of "content", and so // data/README accidentally became the ID of the annotation. @@ -108,11 +107,11 @@ public class TestRDFToManifest { Proxy bundledAs = a1.getBundledAs(); - // FIXME: Why is there no bundledAs? -// assertNotNull(bundledAs); -// assertEquals(ro.getPath("data"), -// bundledAs.getFolder()); -// assertEquals("bag1.zip", a1.getBundledAs().getFilename()); + assertNotNull(bundledAs); + // FIXME: Why is there no bundledAs data? + assertEquals(ro.getPath("data"), + bundledAs.getFolder()); + assertEquals("bag1.zip", a1.getBundledAs().getFilename()); // TODO: Enable fetching based on bundledAs URI? //ro.getRoot().resolve("data/bag1.zip")
