diff --git a/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java b/src/main/java/de/landsh/opendata/catalogproxy/CatalogFilter.java index 8cc4c02808f0c5c2a6e880e77032c2b31fb0a5c1..14b02f209bd98555d42e0cdb53ca32d54c40146f 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 b705fb06cb2553032852176a15f89419919c8b48..eb94bbae5ea410c0a534f55d2004a2c84eb2b73b 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()); + } + } }