import { uuid, sparqlEscapeUri, sparqlEscapeString } from "mu"; import { querySudo as query, updateSudo as update } from '@lblod/mu-auth-sudo'; export async function isKbo(subject) { const queryStr = ` ASK { VALUES ?g { } GRAPH ?g { ${sparqlEscapeUri(subject)} a ; ?kbo . ?id ${sparqlEscapeUri(subject)} ; ?notation . FILTER (?notation IN ("KBO nummer"@nl, "KBO nummer")) } } `; const result = await query(queryStr); return result.boolean; } export async function getIdentifiers(kboStructuredId) { const queryStr = ` SELECT DISTINCT ?kbo ?ovo ?ovoStructuredId WHERE { VALUES ?g { } GRAPH ?g { ${sparqlEscapeUri(kboStructuredId)} a ; ?kbo . ?kboId ${sparqlEscapeUri(kboStructuredId)} ; ?kboNotation . ?bestuurseeheid ?kboId . FILTER (?kboNotation IN ("KBO nummer"@nl, "KBO nummer")) OPTIONAL { ?bestuurseeheid ?ovoId . ?ovoId ?ovoStructuredId ; ?ovoNotation . OPTIONAL { ?ovoStructuredId ?ovo . } FILTER (?ovoNotation IN ("OVO-nummer"@nl, "OVO-nummer")) } } } `; const result = await query(queryStr); if (result.results.bindings.length) { const binding = result.results.bindings[0]; // We should only have one KBO/OVO couple return { kbo: binding.kbo.value, ovo: binding.ovo?.value, ovoStructuredId: binding.ovoStructuredId?.value, } } return null; } export async function constructOvoStructure(kboStructuredId) { const idUuid = uuid(); const idUri = `http://data.lblod.info/id/identificatoren/${idUuid}` const structuredIdUuid = uuid(); const structuredIdUri = `http://data.lblod.info/id/gestructureerdeIdentificatoren/${structuredIdUuid}` const updateStr = ` INSERT { GRAPH ?g { ?bestuurseenheid ${sparqlEscapeUri(idUri)} . ${sparqlEscapeUri(idUri)} a ; ${sparqlEscapeString(idUuid)} ; "OVO-nummer" ; ${sparqlEscapeUri(structuredIdUri)} . ${sparqlEscapeUri(structuredIdUri)} a ; ${sparqlEscapeString(structuredIdUuid)} . } } WHERE { VALUES ?g { } GRAPH ?g { ${sparqlEscapeUri(kboStructuredId)} a ; ?kbo . ?kboId ${sparqlEscapeUri(kboStructuredId)} ; ?notation . ?bestuurseenheid ?kboId . FILTER (?notation IN ("KBO nummer"@nl, "KBO nummer")) } } `; await update(updateStr); return structuredIdUri; } export async function updateOvoNumberAndUri(ovoStructuredIdUri, wegwijsOvo) { let updateStr = ` DELETE { GRAPH ?g { ?bestuureseenheid ?ovoUri . ${sparqlEscapeUri(ovoStructuredIdUri)} ?ovo . } } `; if (wegwijsOvo) { updateStr += ` INSERT { GRAPH ?g { ?bestuureseenheid ${sparqlEscapeUri(`http://data.vlaanderen.be/id/organisatie/${wegwijsOvo}`)} . ${sparqlEscapeUri(ovoStructuredIdUri)} ${sparqlEscapeString(wegwijsOvo)} . } } `; } updateStr += ` WHERE { VALUES ?g { } GRAPH ?g { ${sparqlEscapeUri(ovoStructuredIdUri)} a . OPTIONAL { ?bestuureseenheid / ${sparqlEscapeUri(ovoStructuredIdUri)} ; ?ovoUri . } OPTIONAL { ${sparqlEscapeUri(ovoStructuredIdUri)} ?ovo . } } } `; await update(updateStr); } export async function getAllOvoAndKboCouples() { const queryStr = ` SELECT DISTINCT ?kbo ?ovo ?kboStructuredId ?ovoStructuredId WHERE { VALUES ?g { } GRAPH ?g { ?kboId ?kboStructuredId ; ?kboNotation . ?kboStructuredId a ; ?kbo . ?bestuurseeheid ?kboId . FILTER (?kboNotation IN ("KBO nummer"@nl, "KBO nummer")) OPTIONAL { ?bestuurseeheid ?ovoId . ?ovoId ?ovoStructuredId ; ?ovoNotation . OPTIONAL { ?ovoStructuredId ?ovo . } FILTER (?ovoNotation IN ("OVO-nummer"@nl, "OVO-nummer")) } } } `; const result = await query(queryStr); if (result.results.bindings.length) { const bindings = result.results.bindings; return bindings.map(binding => { return { kbo: binding.kbo.value, kboStructuredId: binding.kboStructuredId.value, ovo: binding.ovo?.value, ovoStructuredId: binding.ovoStructuredId?.value, } }); } return null; } // Update queries: via mu-auth if it comes from the frontend ?