From 8f0abd5dd5fb62fd9cf137a32cbe13013f3a0c6f Mon Sep 17 00:00:00 2001 From: Jesper Zedlitz <jesper@zedlitz.de> Date: Tue, 20 Feb 2024 17:02:36 +0100 Subject: [PATCH] convert schema:startDate to dcat:startDate --- .../opendata/catalogproxy/CatalogFilter.java | 31 +++++++++++++++++++ .../catalogproxy/CatalogFilterTest.java | 22 ++++++++++--- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java b/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java index 8cc4c02..14b02f2 100644 --- a/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java +++ b/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java @@ -79,6 +79,7 @@ public class CatalogFilter implements InitializingBean { addAccessRights(model); addRights(model); fixMediaType(model); + changeStartAndEndDate(model); return model; } @@ -352,4 +353,34 @@ public class CatalogFilter implements InitializingBean { } } + /** + * In DCAT-AP.de 2 the startDate changed its namespace from schema.org to DCAT. + */ + void changeStartAndEndDate(Model model) { + LinkedList<Statement> oldStatements = new LinkedList<>(); + + Selector selectorStart = new SimpleSelector(null, model.createProperty("http://schema.org/startDate"), (Object) null); + StmtIterator it = model.listStatements(selectorStart); + while (it.hasNext()) { + Statement stmt = it.next(); + oldStatements.add(stmt); + model.add(stmt.getSubject(), DCAT.startDate, stmt.getObject()); + } + it.close(); + + Selector selectorEnd = new SimpleSelector(null, model.createProperty("http://schema.org/endDate"), (Object) null); + it = model.listStatements(selectorEnd); + while (it.hasNext()) { + Statement stmt = it.next(); + oldStatements.add(stmt); + model.add(stmt.getSubject(), DCAT.endDate, stmt.getObject()); + } + it.close(); + + for (Statement stmt : oldStatements) { + model.remove(stmt); + } + + } + } diff --git a/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java b/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java index b705fb0..eb94bba 100644 --- a/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java +++ b/src/test/java/de/landsh/opendata/catalogproxy/CatalogFilterTest.java @@ -1,9 +1,6 @@ package de.landsh.opendata.catalogproxy; -import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.ModelFactory; -import org.apache.jena.rdf.model.ResIterator; -import org.apache.jena.rdf.model.Resource; +import org.apache.jena.rdf.model.*; import org.apache.jena.riot.RDFLanguages; import org.apache.jena.riot.RDFParser; import org.apache.jena.riot.system.ErrorHandlerFactory; @@ -263,4 +260,21 @@ public class CatalogFilterTest { assertNotNull(mediaType); assertEquals("https://www.iana.org/assignments/media-types/text/csv", mediaType.getURI()); } + + + /** + * In DCAT-AP.de 2 the startDate changed its namespace from schema.org to DCAT. + */ + @Test + public void dcatDate() throws IOException { + try (final InputStream inputStream = getClass().getResourceAsStream("/catalog.xml")) { + final Model model = catalogFilter.work(inputStream); + + Selector selectorSchema = new SimpleSelector(null, model.createProperty("http://schema.org/startDate"), (Object) null); + assertFalse(model.listStatements(selectorSchema).hasNext()); + + Selector selectorDCAT = new SimpleSelector(null, DCAT.startDate, (Object) null); + assertTrue(model.listStatements(selectorDCAT).hasNext()); + } + } } -- GitLab