From 8b1c32cb95b45a08f32a9b2e6c36dece0d8934f9 Mon Sep 17 00:00:00 2001 From: Jesper Zedlitz <jesper@zedlitz.de> Date: Fri, 27 Aug 2021 15:31:51 +0200 Subject: [PATCH] closes #closes #2 --- .../opendata/catalogproxy/CatalogFilter.java | 21 +++++++++++++++ .../catalogproxy/CatalogFilterTest.java | 27 ++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java b/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java index a5c6b75..67e90bb 100644 --- a/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java +++ b/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java @@ -74,6 +74,7 @@ public class CatalogFilter implements InitializingBean { rewriteDownloadAndAccessURLs(model); addDownloadURLs(model); addAccessRights(model); + addRights(model); return model; } @@ -292,4 +293,24 @@ public class CatalogFilter implements InitializingBean { urlReplacements.put(source, target); } } + + /** + * Add a dct:rights statement to Distributions. The German DCAT-AP.de treats dct:rights as a not so + * important optional property and relies on dct:license. However, the European data portal values the + * dct:rights property highly. + */ + void addRights(Model model) { + final ResIterator it = model.listSubjectsWithProperty(RDF.type, DCAT.Distribution); + while (it.hasNext()) { + final Resource distribution = it.next(); + + final Resource rights = distribution.getPropertyResourceValue(DCTerms.rights); + final Resource license = distribution.getPropertyResourceValue(DCTerms.license); + + if (rights == null && license != null) { + distribution.addProperty(DCTerms.rights, license); + } + } + } + } diff --git a/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java b/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java index 89bb0aa..3578986 100644 --- a/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java +++ b/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java @@ -156,7 +156,7 @@ public class CatalogFilterTest { /** * Check that a <code>dct:accessRights http://publications.europa.eu/resource/authority/access-right/PUBLIC</code> - * statement ist added to each dataset. + * statement has been added to each dataset. */ @Test public void work_will_add_accessRights() throws Exception { @@ -178,4 +178,29 @@ public class CatalogFilterTest { inputStream.close(); } + + /** + * Check that a dct:rights statement has been added to each distribution and is equal to the dct:license statement. + */ + @Test + public void work_will_add_rights() throws Exception { + final InputStream inputStream = getClass().getResourceAsStream("/with_collection.xml"); + final Model model = catalogFilter.work(inputStream); + + // Every dataset has a dct:accessRights statement + final ResIterator it = model.listSubjectsWithProperty(RDF.type, DCAT.Distribution); + int count = 0; + while (it.hasNext()) { + final Resource distribution = it.next(); + count++; + final Resource rights = distribution.getPropertyResourceValue(DCTerms.rights); + final Resource license = distribution.getPropertyResourceValue(DCTerms.license); + assertNotNull(rights); + assertEquals( license, rights); + } + + assertEquals(7, count); + + inputStream.close(); + } } -- GitLab