dispatch main and privacy sensitive position info

This commit is contained in:
Boris De Vloed
2023-01-12 10:26:26 +00:00
parent 2576f86068
commit 94fc9ac78e
17 changed files with 2308 additions and 45 deletions

View File

@@ -8,6 +8,10 @@ const SLEEP_BETWEEN_BATCHES = parseInt(process.env.SLEEP_BETWEEN_BATCHES || 1000
const SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION || 10000);
const SLEEP_TIME_AFTER_FAILED_DB_OPERATION = parseInt(process.env.SLEEP_TIME_AFTER_FAILED_DB_OPERATION || 60000);
const INGEST_GRAPH = process.env.INGEST_GRAPH || `http://mu.semte.ch/graphs/organisatieportaal`;
const PRIVACY_SENSITIVE_GRAPH = process.env.PRIVACY_SENSITIVE_GRAPH || `http://mu.semte.ch/graphs/privacy-centric-graph`;
const UNFILTERED_MAPPING = 'main';
const MAIN_INFO_MAPPING = 'main-info';
const PRIVATE_INFO_MAPPING = 'private-info';
if (!process.env.FILE_SYNC_GRAPH)
@@ -25,5 +29,8 @@ module.exports = {
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION,
INGEST_GRAPH,
FILE_SYNC_GRAPH
PRIVACY_SENSITIVE_GRAPH,
UNFILTERED_MAPPING,
MAIN_INFO_MAPPING,
PRIVATE_INFO_MAPPING,
};

View File

@@ -1,13 +1,14 @@
const { transformStatements, batchedDbUpdate, partition, deleteFromAllGraphs } = require('./util');
const { BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
DIRECT_DATABASE_ENDPOINT,
MU_CALL_SCOPE_ID_INITIAL_SYNC,
const {
BATCH_SIZE,
MAX_DB_RETRY_ATTEMPTS,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
INGEST_GRAPH,
FILE_SYNC_GRAPH
PRIVACY_SENSITIVE_GRAPH,
UNFILTERED_MAPPING,
MAIN_INFO_MAPPING,
PRIVATE_INFO_MAPPING,
} = require('./config');
/**
@@ -34,7 +35,7 @@ async function dispatch(lib, data) {
const insertStatements = inserts.map(o => `${o.subject} ${o.predicate} ${o.object}.`);
if (deleteStatements.length) {
await transformStatements(fetch, deleteStatements).then(
await transformStatements(fetch, deleteStatements, UNFILTERED_MAPPING).then(
transformedStatements => {
deleteFromAllGraphs(
muAuthSudo.updateSudo,
@@ -51,22 +52,40 @@ async function dispatch(lib, data) {
if (insertStatements.length) {
await transformStatements(fetch, insertStatements).then(
await transformStatements(fetch, insertStatements, MAIN_INFO_MAPPING).then(
transformedStatements => {
batchedDbUpdate(
muAuthSudo.updateSudo,
INGEST_GRAPH,
transformedStatements,
{ 'mu-call-scope-id': 'http://redpencil.data.gift/id/concept/muScope/deltas/write-for-dispatch' },
process.env.MU_SPARQL_ENDPOINT, //Note: this is the default endpoint through auth
BATCH_SIZE,
MAX_DB_RETRY_ATTEMPTS,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
"INSERT"
);
if (transformedStatements.length) {
batchedDbUpdate(
muAuthSudo.updateSudo,
INGEST_GRAPH,
transformedStatements,
{ 'mu-call-scope-id': 'http://redpencil.data.gift/id/concept/muScope/deltas/write-for-dispatch' },
process.env.MU_SPARQL_ENDPOINT, //Note: this is the default endpoint through auth
BATCH_SIZE,
MAX_DB_RETRY_ATTEMPTS,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
);
}
}
)
);
await transformStatements(fetch, insertStatements, PRIVATE_INFO_MAPPING).then(
transformedStatements => {
if (transformedStatements.length) {
batchedDbUpdate(
muAuthSudo.updateSudo,
PRIVACY_SENSITIVE_GRAPH,
transformedStatements,
{ 'mu-call-scope-id': 'http://redpencil.data.gift/id/concept/muScope/deltas/write-for-dispatch' },
process.env.MU_SPARQL_ENDPOINT, //Note: this is the default endpoint through auth
BATCH_SIZE,
MAX_DB_RETRY_ATTEMPTS,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
);
}
}
);
}
}
}

View File

@@ -1,4 +1,4 @@
const { transformStatements, batchedDbUpdate, partition } = require('./util');
const { transformStatements, batchedDbUpdate, } = require('./util');
const { BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
DIRECT_DATABASE_ENDPOINT,
MU_CALL_SCOPE_ID_INITIAL_SYNC,
@@ -7,7 +7,9 @@ const { BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION,
INGEST_GRAPH,
FILE_SYNC_GRAPH
PRIVACY_SENSITIVE_GRAPH,
MAIN_INFO_MAPPING,
PRIVATE_INFO_MAPPING
} = require('./config');
const endpoint = BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES ? DIRECT_DATABASE_ENDPOINT : process.env.MU_SPARQL_ENDPOINT;
@@ -36,21 +38,40 @@ async function dispatch(lib, data) {
if (termObjects.length) {
originalInsertTriples = termObjects.map(o => `${o.subject} ${o.predicate} ${o.object}.`)
await transformStatements(fetch, originalInsertTriples).then(
await transformStatements(fetch, originalInsertTriples, MAIN_INFO_MAPPING).then(
transformedInsertTriples => {
batchedDbUpdate(
muAuthSudo.updateSudo,
INGEST_GRAPH,
transformedInsertTriples,
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
endpoint,
BATCH_SIZE,
MAX_DB_RETRY_ATTEMPTS,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
)
if (transformedInsertTriples.length) {
batchedDbUpdate(
muAuthSudo.updateSudo,
INGEST_GRAPH,
transformedInsertTriples,
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
endpoint,
BATCH_SIZE,
MAX_DB_RETRY_ATTEMPTS,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
)
}
}
)
);
await transformStatements(fetch, originalInsertTriples, PRIVATE_INFO_MAPPING).then(
transformedInsertTriples => {
if (transformedInsertTriples.length) {
batchedDbUpdate(
muAuthSudo.updateSudo,
PRIVACY_SENSITIVE_GRAPH,
transformedInsertTriples,
{ 'mu-call-scope-id': MU_CALL_SCOPE_ID_INITIAL_SYNC },
endpoint,
BATCH_SIZE,
MAX_DB_RETRY_ATTEMPTS,
SLEEP_BETWEEN_BATCHES,
SLEEP_TIME_AFTER_FAILED_DB_OPERATION
)
}
}
);
}
}

View File

@@ -115,13 +115,13 @@ function partition(arr, fn) {
* Send triples to reasoning service for conversion
*
*/
function transformTriples(fetch, triples) {
return operationWithRetry(mainConversion(fetch, triples), 0,
function transformTriples(fetch, triples, mapping) {
return operationWithRetry(mainConversion(fetch, triples, mapping), 0,
MAX_REASONING_RETRY_ATTEMPTS, SLEEP_TIME_AFTER_FAILED_REASONING_OPERATION);
}
function mainConversion(fetch, triples) {
function mainConversion(fetch, triples, mapping) {
let formdata = new URLSearchParams();
formdata.append("data", triples);
@@ -131,15 +131,17 @@ function mainConversion(fetch, triples) {
redirect: 'follow'
};
return fetch("http://reasoner/reason/dl2op/main", requestOptions)
return fetch(`http://reasoner/reason/dl2op/${mapping}`, requestOptions)
.then(response => response.text());
}
function transformStatements(fetch, triples) {
return transformTriples(fetch, triples.join('\n')).then(
function transformStatements(fetch, triples, mapping) {
return transformTriples(fetch, triples.join('\n'), mapping).then(
graph => {
statements = graph.replace(/\n{2,}/g, '').split('\n')
console.log(`CONVERSION: FROM ${triples.length} triples to ${statements.length}`)
statements = graph ? graph.split('\n') : [];
console.log(`CONVERSION ${mapping}: FROM ${triples.length} triples to ${statements.length}`)
console.log(statements)
return statements
}
)

View File

@@ -0,0 +1,33 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Inverse properties
{
?s org:holds ?o.
} => {
?o org:heldBy ?s.
}.
{
?s org:heldBy ?o.
} => {
?o org:holds ?s.
}.

View File

@@ -0,0 +1,150 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
# Hence the mapping is in two steps.
# The first step maps the DL persoon:gebruikteVoornaam to the OP counterpart
# and drops the DL persoon:gebruikteVoornaam statements with e:becomes
# A second reasoning will map DL foaf:name to OP persoon:gebruikteVoornaam
# Doing both at once would lead all DL foaf:names to incorrectly become foaf:givennames
# in OP
# First name
# persoon:gebruikteVoornaam => foaf:givenName
# Alternatieve voornaam
# foaf:name => persoon:gebruikteVoornaam
# Test Mock DL
# <http://example.org/person> persoon_loket:gebruikteVoornaam "Didier".
{
{
?s persoon_loket:gebruikteVoornaam ?o
} e:becomes {
?s foaf:givenName ?o
}
} => {
?s foaf:givenName ?o
}.
# First name
# persoon:gebruikteVoornaam => foaf:givenName (done in pre-processing)
# Alternatieve voornaam
# foaf:name => persoon:gebruikteVoornaam
# Test Mock LLB
# <http://example.org/person> foaf:name "Didier".
{
{
?s foaf:name ?o
} e:becomes {
?s persoon:gebruikteVoornaam ?o
}
} => {
?s persoon:gebruikteVoornaam ?o
}.
# Test
# ex:s <http://data.vlaanderen.be/ns/mandaat#start> "2019-01-01T19:32:52+00:00"^^xsd:dateTime.
{
?s mandaat:start ?startDateTime.
# use backward arrow rule defined below
?startDateTime :dateFromDateTime ?startDate.
{
?s mandaat:start ?startDateTime
} e:becomes {
?s mandaat:start ?startDate
}.
} => {
?s mandaat:start ?startDate
}.
# ex:s <http://data.vlaanderen.be/ns/mandaat#einde> "2019-02-01T10:32:52+00:00"^^xsd:dateTime.
{
?s mandaat:einde ?eindeDateTime.
# use backward arrow rule defined below
?eindeDateTime :dateFromDateTime ?eindeDate.
{
?s mandaat:einde ?eindeDateTime
} e:becomes {
?s mandaat:einde ?eindeDate
}.
} => {
?s mandaat:einde ?eindeDate
}.
# Backward arrow rule is like a function call.
# Removes time info in the returned date
# The user in DL selects a date via the UI.
# These dates are persisted as midnight dateTimes in UTC.
# Meaning that 1st of July is stored as
# "2022-06-30T22:00:00Z"^^xsd:dateTime
# and 1 December
# "2022-11-30T23:00:00Z"^^xsd:dateTime
# So, the following rule adds 2 hours to the datetime, and then takes the date part of the UTC date time
# to come to the date that the DL user selected (in CE(S)T)
{
?dateTime :dateFromDateTime ?date
} <= {
(?dateTimeLiteral xsd:dateTime) log:dtlit ?dateTime.
(?dateTime "PT2H"^^xsd:dayTimeDuration) func:add-dayTimeDuration-to-dateTime ?localDateTime.
(?localDateTimeLiteral xsd:dateTime) log:dtlit ?localDateTime.
(?localDateTimeLiteral 0 11) func:substring ?dateLiteral.
(?dateLiteral xsd:date) log:dtlit ?date.
}.
# ex:orgA besluit:classificatie <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000002>.
{
{
?s besluit:classificatie ?o
} e:becomes {
?s org:classification ?o
}
} => {
?s org:classification ?o
}.
# fix typo V -> v
# <http://data.lblod.info/id/adressen/606D972BC20E70000900001C> <https://data.vlaanderen.be/ns/adres#AdresVoorstelling.huisnummer> "1" .
{
{
?s adres:AdresVoorstelling.huisnummer ?o
} e:becomes {
?s adres:Adresvoorstelling.huisnummer ?o
}
} => {
?s adres:Adresvoorstelling.huisnummer ?o
}.
# Tijdspecialisatie
{
{
?s mandaat:isTijdspecialisatieVan ?o.
} e:becomes {
?s generiek:isTijdspecialisatieVan ?o.
}
} => {
?s generiek:isTijdspecialisatieVan ?o.
}.

View File

@@ -0,0 +1,534 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Map from http persoon to https persoon namespace.
## classes:
{
{
?s a persoon_loket:Afstamming
} e:becomes {
?s a persoon:Afstamming
}
} => {
?s a persoon:Afstamming
}.
{
{
?s a persoon_loket:BurgerlijkeStaat
} e:becomes {
?s a persoon:BurgerlijkeStaat
}
} => {
?s a persoon:BurgerlijkeStaat
}.
{
{
?s a persoon_loket:Domicilie
} e:becomes {
?s a persoon:Domicilie
}
} => {
?s a persoon:Domicilie
}.
{
{
?s a persoon_loket:Geboorte
} e:becomes {
?s a persoon:Geboorte
}
} => {
?s a persoon:Geboorte
}.
{
{
?s a persoon_loket:GeenInwoner
} e:becomes {
?s a persoon:GeenInwoner
}
} => {
?s a persoon:GeenInwoner
}.
{
{
?s a persoon_loket:GeregistreerdPersoon
} e:becomes {
?s a persoon:GeregistreerdPersoon
}
} => {
?s a persoon:GeregistreerdPersoon
}.
{
{
?s a persoon_loket:Gezin
} e:becomes {
?s a persoon:Gezin
}
} => {
?s a persoon:Gezin
}.
{
{
?s a persoon_loket:Gezinsrelatie
} e:becomes {
?s a persoon:Gezinsrelatie
}
} => {
?s a persoon:Gezinsrelatie
}.
{
{
?s a persoon_loket:Huwelijk
} e:becomes {
?s a persoon:Huwelijk
}
} => {
?s a persoon:Huwelijk
}.
{
{
?s a persoon_loket:Inwoner
} e:becomes {
?s a persoon:Inwoner
}
} => {
?s a persoon:Inwoner
}.
{
{
?s a persoon_loket:Inwonerschap
} e:becomes {
?s a persoon:Inwonerschap
}
} => {
?s a persoon:Inwonerschap
}.
{
{
?s a persoon_loket:Nationaliteit
} e:becomes {
?s a persoon:Nationaliteit
}
} => {
?s a persoon:Nationaliteit
}.
{
{
?s a persoon_loket:Overlijden
} e:becomes {
?s a persoon:Overlijden
}
} => {
?s a persoon:Overlijden
}.
{
{
?s a persoon_loket:PermanentInwoner
} e:becomes {
?s a persoon:PermanentInwoner
}
} => {
?s a persoon:PermanentInwoner
}.
{
{
?s a persoon_loket:Persoonsgebeurtenis
} e:becomes {
?s a persoon:Persoonsgebeurtenis
}
} => {
?s a persoon:Persoonsgebeurtenis
}.
{
{
?s a persoon_loket:Persoonsrelatie
} e:becomes {
?s a persoon:Persoonsrelatie
}
} => {
?s a persoon:Persoonsrelatie
}.
{
{
?s a persoon_loket:Samenwonen
} e:becomes {
?s a persoon:Samenwonen
}
} => {
?s a persoon:Samenwonen
}.
{
{
?s a persoon_loket:Staatsburger
} e:becomes {
?s a persoon:Staatsburger
}
} => {
?s a persoon:Staatsburger
}.
{
{
?s a persoon_loket:Staatsburgerschap
} e:becomes {
?s a persoon:Staatsburgerschap
}
} => {
?s a persoon:Staatsburgerschap
}.
{
{
?s a persoon_loket:TijdelijkInwoner
} e:becomes {
?s a persoon:TijdelijkInwoner
}
} => {
?s a persoon:TijdelijkInwoner
}.
{
{
?s a persoon_loket:Verblijfplaats
} e:becomes {
?s a persoon:Verblijfplaats
}
} => {
?s a persoon:Verblijfplaats
}.
{
{
?s a persoon_loket:Voogdij
} e:becomes {
?s a persoon:Voogdij
}
} => {
?s a persoon:Voogdij
}.
{
{
?s a persoon_loket:Vreemdeling
} e:becomes {
?s a persoon:Vreemdeling
}
} => {
?s a persoon:Vreemdeling
}.
## properties
{
{
?s persoon_loket:afstammingsType ?o
} e:becomes {
?s persoon:afstammingsType ?o
}
} => {
?s persoon:afstammingsType ?o
}.
{
{
?s persoon_loket:alternatieveNaam ?o
} e:becomes {
?s persoon:alternatieveNaam ?o
}
} => {
?s persoon:alternatieveNaam ?o
}.
{
{
?s persoon_loket:datum ?o
} e:becomes {
?s persoon:datum ?o
}
} => {
?s persoon:datum ?o
}.
{
{
?s persoon_loket:datumVanAfstamming ?o
} e:becomes {
?s persoon:datumVanAfstamming ?o
}
} => {
?s persoon:datumVanAfstamming ?o
}.
{
{
?s persoon_loket:gebruikteVoornaam ?o
} e:becomes {
?s persoon:gebruikteVoornaam ?o
}
} => {
?s persoon:gebruikteVoornaam ?o
}.
{
{
?s persoon_loket:geslacht ?o
} e:becomes {
?s persoon:geslacht ?o
}
} => {
?s persoon:geslacht ?o
}.
{
{
?s persoon_loket:gezinsadres ?o
} e:becomes {
?s persoon:gezinsadres ?o
}
} => {
?s persoon:gezinsadres ?o
}.
{
{
?s persoon_loket:gezinsrelatietype ?o
} e:becomes {
?s persoon:gezinsrelatietype ?o
}
} => {
?s persoon:gezinsrelatietype ?o
}.
{
{
?s persoon_loket:heeftBurgerlijkeStaat ?o
} e:becomes {
?s persoon:heeftBurgerlijkeStaat ?o
}
} => {
?s persoon:heeftBurgerlijkeStaat ?o
}.
{
{
?s persoon_loket:heeftGeboorte ?o
} e:becomes {
?s persoon:heeftGeboorte ?o
}
} => {
?s persoon:heeftGeboorte ?o
}.
{
{
?s persoon_loket:heeftInwonerschap ?o
} e:becomes {
?s persoon:heeftInwonerschap ?o
}
} => {
?s persoon:heeftInwonerschap ?o
}.
{
{
?s persoon_loket:heeftNationaliteit ?o
} e:becomes {
?s persoon:heeftNationaliteit ?o
}
} => {
?s persoon:heeftNationaliteit ?o
}.
{
{
?s persoon_loket:heeftOverlijden ?o
} e:becomes {
?s persoon:heeftOverlijden ?o
}
} => {
?s persoon:heeftOverlijden ?o
}.
{
{
?s persoon_loket:heeftPersoonsrelatie ?o
} e:becomes {
?s persoon:heeftPersoonsrelatie ?o
}
} => {
?s persoon:heeftPersoonsrelatie ?o
}.
{
{
?s persoon_loket:heeftStaatsburgerschap ?o
} e:becomes {
?s persoon:heeftStaatsburgerschap ?o
}
} => {
?s persoon:heeftStaatsburgerschap ?o
}.
{
{
?s persoon_loket:heeftVerblijfplaats ?o
} e:becomes {
?s persoon:heeftVerblijfplaats ?o
}
} => {
?s persoon:heeftVerblijfplaats ?o
}.
{
{
?s persoon_loket:Inwonerschap.binnenJurisdictie ?o
} e:becomes {
?s persoon:Inwonerschap.binnenJurisdictie ?o
}
} => {
?s persoon:Inwonerschap.binnenJurisdictie ?o
}.
{
{
?s persoon_loket:isHoofdVan ?o
} e:becomes {
?s persoon:isHoofdVan ?o
}
} => {
?s persoon:isHoofdVan ?o
}.
{
{
?s persoon_loket:isLidVan ?o
} e:becomes {
?s persoon:isLidVan ?o
}
} => {
?s persoon:isLidVan ?o
}.
{
{
?s persoon_loket:isRelatieMet ?o
} e:becomes {
?s persoon:isRelatieMet ?o
}
} => {
?s persoon:isRelatieMet ?o
}.
{
{
?s persoon_loket:land ?o
} e:becomes {
?s persoon:land ?o
}
} => {
?s persoon:land ?o
}.
{
{
?s persoon_loket:nationaliteit ?o
} e:becomes {
?s persoon:nationaliteit ?o
}
} => {
?s persoon:nationaliteit ?o
}.
{
{
?s persoon_loket:plaats ?o
} e:becomes {
?s persoon:plaats ?o
}
} => {
?s persoon:plaats ?o
}.
{
{
?s persoon_loket:registratie ?o
} e:becomes {
?s persoon:registratie ?o
}
} => {
?s persoon:registratie ?o
}.
{
{
?s persoon_loket:Staatsburgerschap.binnenJurisdictie ?o
} e:becomes {
?s persoon:Staatsburgerschap.binnenJurisdictie ?o
}
} => {
?s persoon:Staatsburgerschap.binnenJurisdictie ?o
}.
{
{
?s persoon_loket:type ?o
} e:becomes {
?s persoon:type ?o
}
} => {
?s persoon:type ?o
}.
{
{
?s persoon_loket:verblijfsadres ?o
} e:becomes {
?s persoon:verblijfsadres ?o
}
} => {
?s persoon:verblijfsadres ?o
}.
{
{
?s persoon_loket:volledigeNaam ?o
} e:becomes {
?s persoon:volledigeNaam ?o
}
} => {
?s persoon:volledigeNaam ?o
}.

View File

@@ -0,0 +1,538 @@
# Generated by producer-config-to-query.ipynb
## CLASSES
{
?s a <http://data.lblod.info/vocabularies/contacthub/AgentInPositie>
} => {
?s a <http://data.lblod.info/vocabularies/contacthub/AgentInPositie>
}.
{
?s a <http://data.lblod.info/vocabularies/erediensten/EredienstMandataris>
} => {
?s a <http://data.lblod.info/vocabularies/erediensten/EredienstMandataris>
}.
{
?s a <http://data.lblod.info/vocabularies/erediensten/RolBedienaar>
} => {
?s a <http://data.lblod.info/vocabularies/erediensten/RolBedienaar>
}.
{
?s a <http://data.lblod.info/vocabularies/leidinggevenden/Bestuursfunctie>
} => {
?s a <http://data.lblod.info/vocabularies/leidinggevenden/Bestuursfunctie>
}.
{
?s a <http://data.lblod.info/vocabularies/leidinggevenden/Functionaris>
} => {
?s a <http://data.lblod.info/vocabularies/leidinggevenden/Functionaris>
}.
{
?s a <http://data.lblod.info/vocabularies/leidinggevenden/FunctionarisStatusCode>
} => {
?s a <http://data.lblod.info/vocabularies/leidinggevenden/FunctionarisStatusCode>
}.
{
?s a <http://data.vlaanderen.be/ns/besluit#Bestuurseenheid>
} => {
?s a <http://data.vlaanderen.be/ns/besluit#Bestuurseenheid>
}.
{
?s a <http://data.vlaanderen.be/ns/besluit#Bestuursorgaan>
} => {
?s a <http://data.vlaanderen.be/ns/besluit#Bestuursorgaan>
}.
{
?s a <http://data.vlaanderen.be/ns/mandaat#Fractie>
} => {
?s a <http://data.vlaanderen.be/ns/mandaat#Fractie>
}.
{
?s a <http://data.vlaanderen.be/ns/mandaat#Mandaat>
} => {
?s a <http://data.vlaanderen.be/ns/mandaat#Mandaat>
}.
{
?s a <http://data.vlaanderen.be/ns/mandaat#Mandataris>
} => {
?s a <http://data.vlaanderen.be/ns/mandaat#Mandataris>
}.
# {
# ?s a <https://data.vlaanderen.be/ns/persoon#Geboorte>
# } => {
# ?s a <https://data.vlaanderen.be/ns/persoon#Geboorte>
# }.
{
?s a <http://mu.semte.ch/vocabularies/ext/BeleidsdomeinCode>
} => {
?s a <http://mu.semte.ch/vocabularies/ext/BeleidsdomeinCode>
}.
{
?s a <http://mu.semte.ch/vocabularies/ext/BestuurseenheidClassificatieCode>
} => {
?s a <http://mu.semte.ch/vocabularies/ext/BestuurseenheidClassificatieCode>
}.
{
?s a <http://mu.semte.ch/vocabularies/ext/BestuursfunctieCode>
} => {
?s a <http://mu.semte.ch/vocabularies/ext/BestuursfunctieCode>
}.
{
?s a <http://mu.semte.ch/vocabularies/ext/BestuursorgaanClassificatieCode>
} => {
?s a <http://mu.semte.ch/vocabularies/ext/BestuursorgaanClassificatieCode>
}.
{
?s a <http://mu.semte.ch/vocabularies/ext/MandatarisStatusCode>
} => {
?s a <http://mu.semte.ch/vocabularies/ext/MandatarisStatusCode>
}.
{
?s a <http://schema.org/ContactPoint>
} => {
?s a <http://schema.org/ContactPoint>
}.
# {
# ?s a <http://www.w3.org/ns/adms#Identifier>
# } => {
# ?s a <http://www.w3.org/ns/adms#Identifier>
# }.
{
?s a <http://www.w3.org/ns/locn#Address>
} => {
?s a <http://www.w3.org/ns/locn#Address>
}.
{
?s a <http://www.w3.org/ns/org#Membership>
} => {
?s a <http://www.w3.org/ns/org#Membership>
}.
{
?s a <http://www.w3.org/ns/person#Person>
} => {
?s a <http://www.w3.org/ns/person#Person>
}.
{
?s a <http://www.w3.org/ns/prov#Location>
} => {
?s a <http://www.w3.org/ns/prov#Location>
}.
## PROPERTIES
{
?s <http://data.lblod.info/vocabularies/contacthub/eindedatum> ?o
} => {
?s <http://data.lblod.info/vocabularies/contacthub/eindedatum> ?o
}.
{
?s <http://data.lblod.info/vocabularies/contacthub/startdatum> ?o
} => {
?s <http://data.lblod.info/vocabularies/contacthub/startdatum> ?o
}.
{
?s <http://data.lblod.info/vocabularies/erediensten/geplandeEinddatumAanstelling> ?o
} => {
?s <http://data.lblod.info/vocabularies/erediensten/geplandeEinddatumAanstelling> ?o
}.
{
?s <http://data.lblod.info/vocabularies/leidinggevenden/adresRegisterId> ?o
} => {
?s <http://data.lblod.info/vocabularies/leidinggevenden/adresRegisterId> ?o
}.
{
?s <http://data.lblod.info/vocabularies/leidinggevenden/heeftBestuursfunctie> ?o
} => {
?s <http://data.lblod.info/vocabularies/leidinggevenden/heeftBestuursfunctie> ?o
}.
{
?s <http://data.vlaanderen.be/ns/besluit#bestuurt> ?o
} => {
?s <http://data.vlaanderen.be/ns/besluit#bestuurt> ?o
}.
{
?s <http://data.vlaanderen.be/ns/besluit#werkingsgebied> ?o
} => {
?s <http://data.vlaanderen.be/ns/besluit#werkingsgebied> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#aantalHouders> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#aantalHouders> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#beleidsdomein> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#beleidsdomein> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#bindingEinde> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#bindingEinde> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#bindingStart> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#bindingStart> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#einde> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#einde> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#isBestuurlijkeAliasVan> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#isBestuurlijkeAliasVan> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#isTijdelijkVervangenDoor> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#isTijdelijkVervangenDoor> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#rangorde> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#rangorde> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#start> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#start> ?o
}.
{
?s <http://data.vlaanderen.be/ns/mandaat#status> ?o
} => {
?s <http://data.vlaanderen.be/ns/mandaat#status> ?o
}.
{
?s <https://data.vlaanderen.be/ns/generiek#isTijdspecialisatieVan> ?o
} => {
?s <https://data.vlaanderen.be/ns/generiek#isTijdspecialisatieVan> ?o
}.
# {
# ?s <https://data.vlaanderen.be/ns/persoon#datum> ?o
# } => {
# ?s <https://data.vlaanderen.be/ns/persoon#datum> ?o
# }.
{
?s <https://data.vlaanderen.be/ns/persoon#gebruikteVoornaam> ?o
} => {
?s <https://data.vlaanderen.be/ns/persoon#gebruikteVoornaam> ?o
}.
{
?s <https://data.vlaanderen.be/ns/persoon#geslacht> ?o
} => {
?s <https://data.vlaanderen.be/ns/persoon#geslacht> ?o
}.
# {
# ?s <https://data.vlaanderen.be/ns/persoon#heeftGeboorte> ?o
# } => {
# ?s <https://data.vlaanderen.be/ns/persoon#heeftGeboorte> ?o
# }.
{
?s <https://data.vlaanderen.be/ns/persoon#heeftNationaliteit> ?o
} => {
?s <https://data.vlaanderen.be/ns/persoon#heeftNationaliteit> ?o
}.
{
?s <http://mu.semte.ch/vocabularies/core/uuid> ?o
} => {
?s <http://mu.semte.ch/vocabularies/core/uuid> ?o
}.
{
?s <http://mu.semte.ch/vocabularies/ext/secondaryContactPoint> ?o
} => {
?s <http://mu.semte.ch/vocabularies/ext/secondaryContactPoint> ?o
}.
{
?s <http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> ?o
} => {
?s <http://mu.semte.ch/vocabularies/ext/werkingsgebiedNiveau> ?o
}.
{
?s <http://schema.org/contactPoint> ?o
} => {
?s <http://schema.org/contactPoint> ?o
}.
{
?s <http://schema.org/contactType> ?o
} => {
?s <http://schema.org/contactType> ?o
}.
{
?s <http://schema.org/email> ?o
} => {
?s <http://schema.org/email> ?o
}.
{
?s <http://schema.org/faxNumber> ?o
} => {
?s <http://schema.org/faxNumber> ?o
}.
{
?s <http://schema.org/telephone> ?o
} => {
?s <http://schema.org/telephone> ?o
}.
{
?s <http://schema.org/url> ?o
} => {
?s <http://schema.org/url> ?o
}.
# {
# ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?o
# } => {
# ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?o
# }.
{
?s <http://www.w3.org/2000/01/rdf-schema#label> ?o
} => {
?s <http://www.w3.org/2000/01/rdf-schema#label> ?o
}.
# {
# ?s <http://www.w3.org/2002/07/owl#sameAs> ?o
# } => {
# ?s <http://www.w3.org/2002/07/owl#sameAs> ?o
# }.
{
?s <http://www.w3.org/2004/02/skos/core#altLabel> ?o
} => {
?s <http://www.w3.org/2004/02/skos/core#altLabel> ?o
}.
# {
# ?s <http://www.w3.org/2004/02/skos/core#notation> ?o
# } => {
# ?s <http://www.w3.org/2004/02/skos/core#notation> ?o
# }.
{
?s <http://www.w3.org/2004/02/skos/core#prefLabel> ?o
} => {
?s <http://www.w3.org/2004/02/skos/core#prefLabel> ?o
}.
{
?s <http://www.w3.org/2004/02/skos/core#scopeNote> ?o
} => {
?s <http://www.w3.org/2004/02/skos/core#scopeNote> ?o
}.
# {
# ?s <http://www.w3.org/ns/adms#identifier> ?o
# } => {
# ?s <http://www.w3.org/ns/adms#identifier> ?o
# }.
{
?s <http://www.w3.org/ns/locn#address> ?o
} => {
?s <http://www.w3.org/ns/locn#address> ?o
}.
{
?s <http://www.w3.org/ns/locn#addressArea> ?o
} => {
?s <http://www.w3.org/ns/locn#addressArea> ?o
}.
{
?s <http://www.w3.org/ns/locn#adminUnit1> ?o
} => {
?s <http://www.w3.org/ns/locn#adminUnit1> ?o
}.
{
?s <http://www.w3.org/ns/locn#adminUnit2> ?o
} => {
?s <http://www.w3.org/ns/locn#adminUnit2> ?o
}.
{
?s <http://www.w3.org/ns/locn#adminUnitL2> ?o
} => {
?s <http://www.w3.org/ns/locn#adminUnitL2> ?o
}.
{
?s <http://www.w3.org/ns/locn#fullAddress> ?o
} => {
?s <http://www.w3.org/ns/locn#fullAddress> ?o
}.
{
?s <http://www.w3.org/ns/locn#postCode> ?o
} => {
?s <http://www.w3.org/ns/locn#postCode> ?o
}.
{
?s <http://www.w3.org/ns/locn#thoroughfare> ?o
} => {
?s <http://www.w3.org/ns/locn#thoroughfare> ?o
}.
{
?s <http://www.w3.org/ns/org#classification> ?o
} => {
?s <http://www.w3.org/ns/org#classification> ?o
}.
{
?s <http://www.w3.org/ns/org#hasMembership> ?o
} => {
?s <http://www.w3.org/ns/org#hasMembership> ?o
}.
{
?s <http://www.w3.org/ns/org#hasPost> ?o
} => {
?s <http://www.w3.org/ns/org#hasPost> ?o
}.
{
?s <http://www.w3.org/ns/org#heldBy> ?o
} => {
?s <http://www.w3.org/ns/org#heldBy> ?o
}.
{
?s <http://www.w3.org/ns/org#holds> ?o
} => {
?s <http://www.w3.org/ns/org#holds> ?o
}.
{
?s <http://www.w3.org/ns/org#linkedTo> ?o
} => {
?s <http://www.w3.org/ns/org#linkedTo> ?o
}.
{
?s <http://www.w3.org/ns/org#memberOf> ?o
} => {
?s <http://www.w3.org/ns/org#memberOf> ?o
}.
{
?s <http://www.w3.org/ns/org#organisation> ?o
} => {
?s <http://www.w3.org/ns/org#organisation> ?o
}.
{
?s <http://www.w3.org/ns/org#role> ?o
} => {
?s <http://www.w3.org/ns/org#role> ?o
}.
{
?s <http://xmlns.com/foaf/0.1/familyName> ?o
} => {
?s <http://xmlns.com/foaf/0.1/familyName> ?o
}.
{
?s <http://xmlns.com/foaf/0.1/givenName> ?o
} => {
?s <http://xmlns.com/foaf/0.1/givenName> ?o
}.
{
?s <https://data.vlaanderen.be/ns/adres#Adresvoorstelling.busnummer> ?o
} => {
?s <https://data.vlaanderen.be/ns/adres#Adresvoorstelling.busnummer> ?o
}.
{
?s <https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> ?o
} => {
?s <https://data.vlaanderen.be/ns/adres#Adresvoorstelling.huisnummer> ?o
}.
{
?s <https://data.vlaanderen.be/ns/adres#gemeentenaam> ?o
} => {
?s <https://data.vlaanderen.be/ns/adres#gemeentenaam> ?o
}.
{
?s <https://data.vlaanderen.be/ns/adres#land> ?o
} => {
?s <https://data.vlaanderen.be/ns/adres#land> ?o
}.
{
?s <https://data.vlaanderen.be/ns/adres#postcode> ?o
} => {
?s <https://data.vlaanderen.be/ns/adres#postcode> ?o
}.
{
?s <https://data.vlaanderen.be/ns/adres#verwijstNaar> ?o
} => {
?s <https://data.vlaanderen.be/ns/adres#verwijstNaar> ?o
}.
{
?s <https://www.w3.org/ns/regorg#legalName> ?o
} => {
?s <https://www.w3.org/ns/regorg#legalName> ?o
}.

View File

@@ -0,0 +1,27 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Retract empty strings
{
{
?s ?p ""
} e:becomes {}.
} => {}.

View File

@@ -0,0 +1,62 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Rijksregisternummer
# Extend identifiers to match OP's model
# <http://example.org/tst#subject> skos:notation "00010100105".
{
?identifier skos:notation ?notation.
?notation string:notEqualIgnoringCase "Rijksregisternummer".
?identifier log:uri ?identifierString.
(?identifierString "STRUCTURED_IDENTIFIER") string:concatenation ?hashInput.
?hashInput crypto:md5 ?uuid.
("http://data.lblod.info/id/gestructureerdeIdentificatoren/" ?uuid) string:concatenation ?structuredIdString.
?structuredIdentifier log:uri ?structuredIdString.
{
?identifier skos:notation ?notation.
} e:becomes {
?identifier
generiek:gestructureerdeIdentificator ?structuredIdentifier ;
skos:notation "Rijksregisternummer" .
}.
} => {
?identifier
generiek:gestructureerdeIdentificator ?structuredIdentifier ;
skos:notation "Rijksregisternummer" .
?structuredIdentifier a generiek:GestructureerdeIdentificator ;
mu:uuid ?uuid ;
generiek:lokaleIdentificator ?notation
}.
# identifier property in the export is only used for RRN.
{
{
?s adms:identifier ?o
} e:becomes {
?s persoon:registratie ?o
}
} => {
?s persoon:registratie ?o
}.

View File

@@ -0,0 +1,33 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Inverse properties
{
?s org:holds ?o.
} => {
?o org:heldBy ?s.
}.
{
?s org:heldBy ?o.
} => {
?o org:holds ?s.
}.

View File

@@ -0,0 +1,150 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# DL and OP both use persoon:gebruikteVoornaam but with different semantics (!)
# Hence the mapping is in two steps.
# The first step maps the DL persoon:gebruikteVoornaam to the OP counterpart
# and drops the DL persoon:gebruikteVoornaam statements with e:becomes
# A second reasoning will map DL foaf:name to OP persoon:gebruikteVoornaam
# Doing both at once would lead all DL foaf:names to incorrectly become foaf:givennames
# in OP
# First name
# persoon:gebruikteVoornaam => foaf:givenName
# Alternatieve voornaam
# foaf:name => persoon:gebruikteVoornaam
# Test Mock DL
# <http://example.org/person> persoon_loket:gebruikteVoornaam "Didier".
{
{
?s persoon_loket:gebruikteVoornaam ?o
} e:becomes {
?s foaf:givenName ?o
}
} => {
?s foaf:givenName ?o
}.
# First name
# persoon:gebruikteVoornaam => foaf:givenName (done in pre-processing)
# Alternatieve voornaam
# foaf:name => persoon:gebruikteVoornaam
# Test Mock LLB
# <http://example.org/person> foaf:name "Didier".
{
{
?s foaf:name ?o
} e:becomes {
?s persoon:gebruikteVoornaam ?o
}
} => {
?s persoon:gebruikteVoornaam ?o
}.
# Test
# ex:s <http://data.vlaanderen.be/ns/mandaat#start> "2019-01-01T19:32:52+00:00"^^xsd:dateTime.
{
?s mandaat:start ?startDateTime.
# use backward arrow rule defined below
?startDateTime :dateFromDateTime ?startDate.
{
?s mandaat:start ?startDateTime
} e:becomes {
?s mandaat:start ?startDate
}.
} => {
?s mandaat:start ?startDate
}.
# ex:s <http://data.vlaanderen.be/ns/mandaat#einde> "2019-02-01T10:32:52+00:00"^^xsd:dateTime.
{
?s mandaat:einde ?eindeDateTime.
# use backward arrow rule defined below
?eindeDateTime :dateFromDateTime ?eindeDate.
{
?s mandaat:einde ?eindeDateTime
} e:becomes {
?s mandaat:einde ?eindeDate
}.
} => {
?s mandaat:einde ?eindeDate
}.
# Backward arrow rule is like a function call.
# Removes time info in the returned date
# The user in DL selects a date via the UI.
# These dates are persisted as midnight dateTimes in UTC.
# Meaning that 1st of July is stored as
# "2022-06-30T22:00:00Z"^^xsd:dateTime
# and 1 December
# "2022-11-30T23:00:00Z"^^xsd:dateTime
# So, the following rule adds 2 hours to the datetime, and then takes the date part of the UTC date time
# to come to the date that the DL user selected (in CE(S)T)
{
?dateTime :dateFromDateTime ?date
} <= {
(?dateTimeLiteral xsd:dateTime) log:dtlit ?dateTime.
(?dateTime "PT2H"^^xsd:dayTimeDuration) func:add-dayTimeDuration-to-dateTime ?localDateTime.
(?localDateTimeLiteral xsd:dateTime) log:dtlit ?localDateTime.
(?localDateTimeLiteral 0 11) func:substring ?dateLiteral.
(?dateLiteral xsd:date) log:dtlit ?date.
}.
# ex:orgA besluit:classificatie <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000002>.
{
{
?s besluit:classificatie ?o
} e:becomes {
?s org:classification ?o
}
} => {
?s org:classification ?o
}.
# fix typo V -> v
# <http://data.lblod.info/id/adressen/606D972BC20E70000900001C> <https://data.vlaanderen.be/ns/adres#AdresVoorstelling.huisnummer> "1" .
{
{
?s adres:AdresVoorstelling.huisnummer ?o
} e:becomes {
?s adres:Adresvoorstelling.huisnummer ?o
}
} => {
?s adres:Adresvoorstelling.huisnummer ?o
}.
# Tijdspecialisatie
{
{
?s mandaat:isTijdspecialisatieVan ?o.
} e:becomes {
?s generiek:isTijdspecialisatieVan ?o.
}
} => {
?s generiek:isTijdspecialisatieVan ?o.
}.

View File

@@ -0,0 +1,534 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Map from http persoon to https persoon namespace.
## classes:
{
{
?s a persoon_loket:Afstamming
} e:becomes {
?s a persoon:Afstamming
}
} => {
?s a persoon:Afstamming
}.
{
{
?s a persoon_loket:BurgerlijkeStaat
} e:becomes {
?s a persoon:BurgerlijkeStaat
}
} => {
?s a persoon:BurgerlijkeStaat
}.
{
{
?s a persoon_loket:Domicilie
} e:becomes {
?s a persoon:Domicilie
}
} => {
?s a persoon:Domicilie
}.
{
{
?s a persoon_loket:Geboorte
} e:becomes {
?s a persoon:Geboorte
}
} => {
?s a persoon:Geboorte
}.
{
{
?s a persoon_loket:GeenInwoner
} e:becomes {
?s a persoon:GeenInwoner
}
} => {
?s a persoon:GeenInwoner
}.
{
{
?s a persoon_loket:GeregistreerdPersoon
} e:becomes {
?s a persoon:GeregistreerdPersoon
}
} => {
?s a persoon:GeregistreerdPersoon
}.
{
{
?s a persoon_loket:Gezin
} e:becomes {
?s a persoon:Gezin
}
} => {
?s a persoon:Gezin
}.
{
{
?s a persoon_loket:Gezinsrelatie
} e:becomes {
?s a persoon:Gezinsrelatie
}
} => {
?s a persoon:Gezinsrelatie
}.
{
{
?s a persoon_loket:Huwelijk
} e:becomes {
?s a persoon:Huwelijk
}
} => {
?s a persoon:Huwelijk
}.
{
{
?s a persoon_loket:Inwoner
} e:becomes {
?s a persoon:Inwoner
}
} => {
?s a persoon:Inwoner
}.
{
{
?s a persoon_loket:Inwonerschap
} e:becomes {
?s a persoon:Inwonerschap
}
} => {
?s a persoon:Inwonerschap
}.
{
{
?s a persoon_loket:Nationaliteit
} e:becomes {
?s a persoon:Nationaliteit
}
} => {
?s a persoon:Nationaliteit
}.
{
{
?s a persoon_loket:Overlijden
} e:becomes {
?s a persoon:Overlijden
}
} => {
?s a persoon:Overlijden
}.
{
{
?s a persoon_loket:PermanentInwoner
} e:becomes {
?s a persoon:PermanentInwoner
}
} => {
?s a persoon:PermanentInwoner
}.
{
{
?s a persoon_loket:Persoonsgebeurtenis
} e:becomes {
?s a persoon:Persoonsgebeurtenis
}
} => {
?s a persoon:Persoonsgebeurtenis
}.
{
{
?s a persoon_loket:Persoonsrelatie
} e:becomes {
?s a persoon:Persoonsrelatie
}
} => {
?s a persoon:Persoonsrelatie
}.
{
{
?s a persoon_loket:Samenwonen
} e:becomes {
?s a persoon:Samenwonen
}
} => {
?s a persoon:Samenwonen
}.
{
{
?s a persoon_loket:Staatsburger
} e:becomes {
?s a persoon:Staatsburger
}
} => {
?s a persoon:Staatsburger
}.
{
{
?s a persoon_loket:Staatsburgerschap
} e:becomes {
?s a persoon:Staatsburgerschap
}
} => {
?s a persoon:Staatsburgerschap
}.
{
{
?s a persoon_loket:TijdelijkInwoner
} e:becomes {
?s a persoon:TijdelijkInwoner
}
} => {
?s a persoon:TijdelijkInwoner
}.
{
{
?s a persoon_loket:Verblijfplaats
} e:becomes {
?s a persoon:Verblijfplaats
}
} => {
?s a persoon:Verblijfplaats
}.
{
{
?s a persoon_loket:Voogdij
} e:becomes {
?s a persoon:Voogdij
}
} => {
?s a persoon:Voogdij
}.
{
{
?s a persoon_loket:Vreemdeling
} e:becomes {
?s a persoon:Vreemdeling
}
} => {
?s a persoon:Vreemdeling
}.
## properties
{
{
?s persoon_loket:afstammingsType ?o
} e:becomes {
?s persoon:afstammingsType ?o
}
} => {
?s persoon:afstammingsType ?o
}.
{
{
?s persoon_loket:alternatieveNaam ?o
} e:becomes {
?s persoon:alternatieveNaam ?o
}
} => {
?s persoon:alternatieveNaam ?o
}.
{
{
?s persoon_loket:datum ?o
} e:becomes {
?s persoon:datum ?o
}
} => {
?s persoon:datum ?o
}.
{
{
?s persoon_loket:datumVanAfstamming ?o
} e:becomes {
?s persoon:datumVanAfstamming ?o
}
} => {
?s persoon:datumVanAfstamming ?o
}.
{
{
?s persoon_loket:gebruikteVoornaam ?o
} e:becomes {
?s persoon:gebruikteVoornaam ?o
}
} => {
?s persoon:gebruikteVoornaam ?o
}.
{
{
?s persoon_loket:geslacht ?o
} e:becomes {
?s persoon:geslacht ?o
}
} => {
?s persoon:geslacht ?o
}.
{
{
?s persoon_loket:gezinsadres ?o
} e:becomes {
?s persoon:gezinsadres ?o
}
} => {
?s persoon:gezinsadres ?o
}.
{
{
?s persoon_loket:gezinsrelatietype ?o
} e:becomes {
?s persoon:gezinsrelatietype ?o
}
} => {
?s persoon:gezinsrelatietype ?o
}.
{
{
?s persoon_loket:heeftBurgerlijkeStaat ?o
} e:becomes {
?s persoon:heeftBurgerlijkeStaat ?o
}
} => {
?s persoon:heeftBurgerlijkeStaat ?o
}.
{
{
?s persoon_loket:heeftGeboorte ?o
} e:becomes {
?s persoon:heeftGeboorte ?o
}
} => {
?s persoon:heeftGeboorte ?o
}.
{
{
?s persoon_loket:heeftInwonerschap ?o
} e:becomes {
?s persoon:heeftInwonerschap ?o
}
} => {
?s persoon:heeftInwonerschap ?o
}.
{
{
?s persoon_loket:heeftNationaliteit ?o
} e:becomes {
?s persoon:heeftNationaliteit ?o
}
} => {
?s persoon:heeftNationaliteit ?o
}.
{
{
?s persoon_loket:heeftOverlijden ?o
} e:becomes {
?s persoon:heeftOverlijden ?o
}
} => {
?s persoon:heeftOverlijden ?o
}.
{
{
?s persoon_loket:heeftPersoonsrelatie ?o
} e:becomes {
?s persoon:heeftPersoonsrelatie ?o
}
} => {
?s persoon:heeftPersoonsrelatie ?o
}.
{
{
?s persoon_loket:heeftStaatsburgerschap ?o
} e:becomes {
?s persoon:heeftStaatsburgerschap ?o
}
} => {
?s persoon:heeftStaatsburgerschap ?o
}.
{
{
?s persoon_loket:heeftVerblijfplaats ?o
} e:becomes {
?s persoon:heeftVerblijfplaats ?o
}
} => {
?s persoon:heeftVerblijfplaats ?o
}.
{
{
?s persoon_loket:Inwonerschap.binnenJurisdictie ?o
} e:becomes {
?s persoon:Inwonerschap.binnenJurisdictie ?o
}
} => {
?s persoon:Inwonerschap.binnenJurisdictie ?o
}.
{
{
?s persoon_loket:isHoofdVan ?o
} e:becomes {
?s persoon:isHoofdVan ?o
}
} => {
?s persoon:isHoofdVan ?o
}.
{
{
?s persoon_loket:isLidVan ?o
} e:becomes {
?s persoon:isLidVan ?o
}
} => {
?s persoon:isLidVan ?o
}.
{
{
?s persoon_loket:isRelatieMet ?o
} e:becomes {
?s persoon:isRelatieMet ?o
}
} => {
?s persoon:isRelatieMet ?o
}.
{
{
?s persoon_loket:land ?o
} e:becomes {
?s persoon:land ?o
}
} => {
?s persoon:land ?o
}.
{
{
?s persoon_loket:nationaliteit ?o
} e:becomes {
?s persoon:nationaliteit ?o
}
} => {
?s persoon:nationaliteit ?o
}.
{
{
?s persoon_loket:plaats ?o
} e:becomes {
?s persoon:plaats ?o
}
} => {
?s persoon:plaats ?o
}.
{
{
?s persoon_loket:registratie ?o
} e:becomes {
?s persoon:registratie ?o
}
} => {
?s persoon:registratie ?o
}.
{
{
?s persoon_loket:Staatsburgerschap.binnenJurisdictie ?o
} e:becomes {
?s persoon:Staatsburgerschap.binnenJurisdictie ?o
}
} => {
?s persoon:Staatsburgerschap.binnenJurisdictie ?o
}.
{
{
?s persoon_loket:type ?o
} e:becomes {
?s persoon:type ?o
}
} => {
?s persoon:type ?o
}.
{
{
?s persoon_loket:verblijfsadres ?o
} e:becomes {
?s persoon:verblijfsadres ?o
}
} => {
?s persoon:verblijfsadres ?o
}.
{
{
?s persoon_loket:volledigeNaam ?o
} e:becomes {
?s persoon:volledigeNaam ?o
}
} => {
?s persoon:volledigeNaam ?o
}.

View File

@@ -0,0 +1,63 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Rijksregisternummer
# Extend identifiers to match OP's model
# <http://example.org/tst#subject> skos:notation "00010100105".
{
?identifier
generiek:gestructureerdeIdentificator ?structuredIdentifier ;
skos:notation "Rijksregisternummer" .
?structuredIdentifier a generiek:GestructureerdeIdentificator ;
mu:uuid ?uuid ;
generiek:lokaleIdentificator ?notation
} => {
?identifier
generiek:gestructureerdeIdentificator ?structuredIdentifier ;
skos:notation "Rijksregisternummer" .
?structuredIdentifier a generiek:GestructureerdeIdentificator ;
mu:uuid ?uuid ;
generiek:lokaleIdentificator ?notation
}.
# identifier property in the export is only used for RRN.
{
?s persoon:registratie ?o
} => {
?s persoon:registratie ?o
}.
# Birth and related attributes
{
?s a persoon:Geboorte;
?p ?o.
} => {
?s a persoon:Geboorte;
?p ?o.
}.
{
?s persoon:heeftGeboorte ?o
} => {
?s persoon:heeftGeboorte ?o
}.

View File

@@ -0,0 +1,27 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Retract empty strings
{
{
?s ?p ""
} e:becomes {}.
} => {}.

View File

@@ -0,0 +1,62 @@
PREFIX : <#>
PREFIX adms: <http://www.w3.org/ns/adms#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX crypto: <http://www.w3.org/2000/10/swap/crypto#>
PREFIX e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>
PREFIX ex: <http://example.org/test#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX func: <http://www.w3.org/2007/rif-builtin-function#>
PREFIX generiek: <https://data.vlaanderen.be/ns/generiek#>
PREFIX log: <http://www.w3.org/2000/10/swap/log#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX persoon: <https://data.vlaanderen.be/ns/persoon#>
PREFIX persoon_loket: <http://data.vlaanderen.be/ns/persoon#>
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX string: <http://www.w3.org/2000/10/swap/string#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Rijksregisternummer
# Extend identifiers to match OP's model
# <http://example.org/tst#subject> skos:notation "00010100105".
{
?identifier skos:notation ?notation.
?notation string:notEqualIgnoringCase "Rijksregisternummer".
?identifier log:uri ?identifierString.
(?identifierString "STRUCTURED_IDENTIFIER") string:concatenation ?hashInput.
?hashInput crypto:md5 ?uuid.
("http://data.lblod.info/id/gestructureerdeIdentificatoren/" ?uuid) string:concatenation ?structuredIdString.
?structuredIdentifier log:uri ?structuredIdString.
{
?identifier skos:notation ?notation.
} e:becomes {
?identifier
generiek:gestructureerdeIdentificator ?structuredIdentifier ;
skos:notation "Rijksregisternummer" .
}.
} => {
?identifier
generiek:gestructureerdeIdentificator ?structuredIdentifier ;
skos:notation "Rijksregisternummer" .
?structuredIdentifier a generiek:GestructureerdeIdentificator ;
mu:uuid ?uuid ;
generiek:lokaleIdentificator ?notation
}.
# identifier property in the export is only used for RRN.
{
{
?s adms:identifier ?o
} e:becomes {
?s persoon:registratie ?o
}
} => {
?s persoon:registratie ?o
}.

View File

@@ -201,7 +201,7 @@ services:
restart: always
logging: *default-logging
reasoner:
image: eyereasoner/reasoning-service:1.0.0
image: eyereasoner/reasoning-service:1.0.1
volumes:
- ./config/reasoner:/config
################################################################################
@@ -524,11 +524,12 @@ services:
DCR_DELTA_SYNC_JOB_OPERATION: "http://redpencil.data.gift/id/jobs/concept/JobOperation/deltas/consumer/wsSensitiveDeltaFileSyncing"
DCR_JOB_CREATOR_URI: "http://data.lblod.info/services/id/worship-services-sensitive-consumer"
DCR_DISABLE_INITIAL_SYNC: "true"
FILE_SYNC_GRAPH: "http://mu.semte.ch/graphs/temp/original-physical-files-data"
DCR_KEEP_DELTA_FILES: "true"
DCR_DELTA_FILE_FOLDER: "/consumer-files"
BYPASS_MU_AUTH_FOR_EXPENSIVE_QUERIES: "false"
volumes:
- ./config/worship-services-sensitive-consumer/positions-dispatching:/config/triples-dispatching/custom-dispatching
- ./config/loket-consumer/positions-dispatching:/config/triples-dispatching/custom-dispatching
restart: always
labels:
- "logging=true"