diff --git a/config/migrations/2022/20221004164323-uniformize-dates-or-organen-before-2023.sparql b/config/migrations/2022/20221004164323-uniformize-dates-or-organen-before-2023.sparql new file mode 100644 index 0000000..778ef8c --- /dev/null +++ b/config/migrations/2022/20221004164323-uniformize-dates-or-organen-before-2023.sparql @@ -0,0 +1,113 @@ +# Part 1: set dates for 2020-2023 + +PREFIX mandaat: +PREFIX ere: +PREFIX besluit: +PREFIX generiek: + +DELETE { + GRAPH { + ?orgaanInTime mandaat:bindingStart ?start . + ?orgaanInTime mandaat:bindingEinde ?end . + } +} INSERT { + GRAPH { + ?orgaanInTime mandaat:bindingStart "2020-04-01T00:00:00"^^xsd:dateTime . + ?orgaanInTime mandaat:bindingEinde "2023-03-31T00:00:00"^^xsd:dateTime . + } +} WHERE { + ?orgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + + OPTIONAL { ?orgaanInTime mandaat:bindingStart ?start . } + OPTIONAL { ?orgaanInTime mandaat:bindingEinde ?end . } + + { + SELECT DISTINCT ?bestuursorgaan MAX(?end) as ?maxEnd WHERE { + GRAPH { + VALUES ?type { + ere:BestuurVanDeEredienst + ere:CentraalBestuurVanDeEredienst + } + + ?bestuurseenheid a ?type . + + FILTER NOT EXISTS { + ?bestuurseenheid . + } + + ?bestuursorgaan besluit:bestuurt ?bestuurseenheid . + + ?orgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + + OPTIONAL { ?orgaanInTime mandaat:bindingStart ?start . } + OPTIONAL { + ?orgaanInTime mandaat:bindingEinde ?end . + FILTER( ?end != "2026-03-31T00:00:00"^^xsd:dateTime ) + FILTER( ?end != "2029-03-31T00:00:00"^^xsd:dateTime ) + } + } + } + GROUP BY ?bestuursorgaan + ORDER BY ?maxEnd + } + + # If we have a maxEnd value from the subquery, we want the organ in time that has the same end value to update it + # If there is no maxEnd value, then we need the orgaan that has no end value set + FILTER( IF(bound(?maxEnd), ?maxEnd = ?end, !bound(?end)) ) +} + +; + +# Part 2: set dates for 2017-2020 + +DELETE { + GRAPH { + ?orgaanInTime mandaat:bindingStart ?start . + ?orgaanInTime mandaat:bindingEinde ?end . + } +} INSERT { + GRAPH { + ?orgaanInTime mandaat:bindingStart "2017-04-01T00:00:00"^^xsd:dateTime . + ?orgaanInTime mandaat:bindingEinde "2020-03-31T00:00:00"^^xsd:dateTime . + } +} WHERE { + ?orgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + + OPTIONAL { ?orgaanInTime mandaat:bindingStart ?start . } + OPTIONAL { ?orgaanInTime mandaat:bindingEinde ?end . } + + { + SELECT DISTINCT ?bestuursorgaan MAX(?end) as ?maxEnd WHERE { + GRAPH { + VALUES ?type { + ere:BestuurVanDeEredienst + ere:CentraalBestuurVanDeEredienst + } + + ?bestuurseenheid a ?type . + + FILTER NOT EXISTS { + ?bestuurseenheid . + } + + ?bestuursorgaan besluit:bestuurt ?bestuurseenheid . + + ?orgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + + OPTIONAL { ?orgaanInTime mandaat:bindingStart ?start . } + OPTIONAL { + ?orgaanInTime mandaat:bindingEinde ?end . + FILTER( ?end != "2023-03-31T00:00:00"^^xsd:dateTime ) + FILTER( ?end != "2026-03-31T00:00:00"^^xsd:dateTime ) + FILTER( ?end != "2029-03-31T00:00:00"^^xsd:dateTime ) + } + } + } + GROUP BY ?bestuursorgaan + ORDER BY ?maxEnd + } + + # If we have a maxEnd value from the subquery, we want the organ in time that has the same end value to update it + # If there is no maxEnd value, then we need the orgaan that has no end value set + FILTER( IF(bound(?maxEnd), ?maxEnd = ?end, !bound(?end)) ) +}