Last active
October 27, 2020 10:21
-
-
Save MatsAnd/00ca2bfb65de125052bd69f1012b892e to your computer and use it in GitHub Desktop.
Henter fagkoder, programomraader og utdanningsprogram fra UDIRs sparql-endepunkt og lagrer dataene i hver sin json-fil
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(async () => { | |
const { post } = require('axios').default | |
const { stringify } = require('qs') | |
const { writeFile } = require('fs').promises | |
const config = require('./grep-config') | |
const repackUdirSparql = require('./repack-udir-sparql') | |
const logger = console.log | |
const extractGrepData = async (type, url, query) => { | |
const requestHeaders = { 'Content-Type': 'application/x-www-form-urlencoded', Accept: 'application/json' } | |
const request = stringify({ query }) | |
try { | |
logger('info', ['utils', 'extract-grep-data', type, 'post query']) | |
const { data } = await post(url, request, { headers: requestHeaders }) | |
const sparqlData = data.results.bindings || [] | |
logger('info', ['utils', 'extract-grep-data', type, 'response', sparqlData.length]) | |
await writeFile(`data/grep-${type}.json`, JSON.stringify(sparqlData.map(repackUdirSparql), null, 2), 'utf8') | |
} catch (error) { | |
logger('error', ['utils', 'extract-grep-data', type, 'error', error.message]) | |
} | |
} | |
logger('info', ['utils', 'extract-grep-data', 'start']) | |
await extractGrepData('fagkoder', config.SPARQL_URL, config.FAGKODER_QUERY) | |
await extractGrepData('programomraader', config.SPARQL_URL, config.PROGRAMOMRAADER_QUERY) | |
await extractGrepData('utdanningsprogram', config.SPARQL_URL, config.UTDANNINGSPROGRAM_QUERY) | |
logger('info', ['utils', 'extract-grep-data', 'finished']) | |
})() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = { | |
SPARQL_URL: process.env.GREP_SPARQL_URL || 'http://sandkasse-data.udir.no:7200/repositories/NavnFiksing', | |
FAGKODER_QUERY: process.env.GREP_FAGKODER_QUERY || ` | |
PREFIX u: <http://psi.udir.no/ontologi/kl06/> | |
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> | |
SELECT ?kode ?id ?uri ?data_url ?tittel_def ?tittel_nob ?tittel_nno ?tittel_sme ?tittel_smj ?tittel_sma ?tittel_eng ?kortform_def ?kortform_nob ?kortform_nno ?kortform_sme ?kortform_smj ?kortform_sma ?kortform_eng | |
WHERE { | |
?uri a u:fagkode ; | |
u:id ?id ; | |
u:kode ?kode ; | |
u:url-data ?data_url ; | |
u:tittel ?tittel_def ; | |
u:status ?status . | |
OPTIONAL { ?uri u:tittel ?tittel_nob . FILTER (lang(?tittel_nob) = 'nob') } . | |
OPTIONAL { ?uri u:tittel ?tittel_nno . FILTER (lang(?tittel_nno) = 'nno') } . | |
OPTIONAL { ?uri u:tittel ?tittel_sme . FILTER (lang(?tittel_sme) = 'sme') } . | |
OPTIONAL { ?uri u:tittel ?tittel_smj . FILTER (lang(?tittel_smj) = 'smj') } . | |
OPTIONAL { ?uri u:tittel ?tittel_sma . FILTER (lang(?tittel_sma) = 'sma') } . | |
OPTIONAL { ?uri u:tittel ?tittel_eng . FILTER (lang(?tittel_eng) = 'eng') } . | |
OPTIONAL { ?uri u:kortform ?kortform_def . FILTER (lang(?kortform_def) = 'default') } . | |
OPTIONAL { ?uri u:kortform ?kortform_nob . FILTER (lang(?kortform_nob) = 'nob') } . | |
OPTIONAL { ?uri u:kortform ?kortform_nno . FILTER (lang(?kortform_nno) = 'nno') } . | |
OPTIONAL { ?uri u:kortform ?kortform_sme . FILTER (lang(?kortform_sme) = 'sme') } . | |
OPTIONAL { ?uri u:kortform ?kortform_smj . FILTER (lang(?kortform_smj) = 'smj') } . | |
OPTIONAL { ?uri u:kortform ?kortform_sma . FILTER (lang(?kortform_sma) = 'sma') } . | |
OPTIONAL { ?uri u:kortform ?kortform_eng . FILTER (lang(?kortform_eng) = 'eng') } . | |
FILTER REGEX(str(?status), "publisert", "i") | |
FILTER (lang(?tittel_def) = 'default') | |
} | |
`, | |
UTDANNINGSPROGRAM_QUERY: process.env.GREP_UTDANNINGSPROGRAM_QUERY || ` | |
PREFIX u: <http://psi.udir.no/ontologi/kl06/> | |
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> | |
SELECT ?kode ?id ?uri ?data_url ?type_utdanningsprogram ?tittel_def ?tittel_nob ?tittel_nno ?tittel_sme ?tittel_smj ?tittel_sma ?tittel_eng ?kortform_def ?kortform_nob ?kortform_nno ?kortform_sme ?kortform_smj ?kortform_sma ?kortform_eng | |
WHERE { | |
?uri a u:utdanningsprogram ; | |
u:id ?id ; | |
u:kode ?kode ; | |
u:url-data ?data_url ; | |
u:tittel ?tittel_def ; | |
u:type-utdanningsprogram ?type_utdanningsprogram ; | |
u:status ?status . | |
OPTIONAL { ?uri u:tittel ?tittel_nob . FILTER (lang(?tittel_nob) = 'nob') } . | |
OPTIONAL { ?uri u:tittel ?tittel_nno . FILTER (lang(?tittel_nno) = 'nno') } . | |
OPTIONAL { ?uri u:tittel ?tittel_sme . FILTER (lang(?tittel_sme) = 'sme') } . | |
OPTIONAL { ?uri u:tittel ?tittel_smj . FILTER (lang(?tittel_smj) = 'smj') } . | |
OPTIONAL { ?uri u:tittel ?tittel_sma . FILTER (lang(?tittel_sma) = 'sma') } . | |
OPTIONAL { ?uri u:tittel ?tittel_eng . FILTER (lang(?tittel_eng) = 'eng') } . | |
OPTIONAL { ?uri u:kortform ?kortform_def . FILTER (lang(?kortform_def) = 'default') } . | |
OPTIONAL { ?uri u:kortform ?kortform_nob . FILTER (lang(?kortform_nob) = 'nob') } . | |
OPTIONAL { ?uri u:kortform ?kortform_nno . FILTER (lang(?kortform_nno) = 'nno') } . | |
OPTIONAL { ?uri u:kortform ?kortform_sme . FILTER (lang(?kortform_sme) = 'sme') } . | |
OPTIONAL { ?uri u:kortform ?kortform_smj . FILTER (lang(?kortform_smj) = 'smj') } . | |
OPTIONAL { ?uri u:kortform ?kortform_sma . FILTER (lang(?kortform_sma) = 'sma') } . | |
OPTIONAL { ?uri u:kortform ?kortform_eng . FILTER (lang(?kortform_eng) = 'eng') } . | |
FILTER REGEX(str(?status), "publisert", "i") | |
FILTER (lang(?tittel_def) = 'default') | |
} | |
`, | |
PROGRAMOMRAADER_QUERY: process.env.GREP_PROGRAMOMRAADER_QUERY || ` | |
PREFIX u: <http://psi.udir.no/ontologi/kl06/> | |
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> | |
SELECT ?kode ?id ?uri ?data_url ?type_utdanningsprogram ?tittel_def ?tittel_nob ?tittel_nno ?tittel_sme ?tittel_smj ?tittel_sma ?tittel_eng ?kortform_def ?kortform_nob ?kortform_nno ?kortform_sme ?kortform_smj ?kortform_sma ?kortform_eng | |
WHERE { | |
?uri a u:programomraade ; | |
u:id ?id ; | |
u:kode ?kode ; | |
u:url-data ?data_url ; | |
u:utdanningsprogram-referanse ?up ; | |
u:tittel ?tittel_def ; | |
u:status ?status . | |
OPTIONAL { ?uri u:tittel ?tittel_nob . FILTER (lang(?tittel_nob) = 'nob') } . | |
OPTIONAL { ?uri u:tittel ?tittel_nno . FILTER (lang(?tittel_nno) = 'nno') } . | |
OPTIONAL { ?uri u:tittel ?tittel_sme . FILTER (lang(?tittel_sme) = 'sme') } . | |
OPTIONAL { ?uri u:tittel ?tittel_smj . FILTER (lang(?tittel_smj) = 'smj') } . | |
OPTIONAL { ?uri u:tittel ?tittel_sma . FILTER (lang(?tittel_sma) = 'sma') } . | |
OPTIONAL { ?uri u:tittel ?tittel_eng . FILTER (lang(?tittel_eng) = 'eng') } . | |
OPTIONAL { ?uri u:kortform ?kortform_def . FILTER (lang(?kortform_def) = 'default') } . | |
OPTIONAL { ?uri u:kortform ?kortform_nob . FILTER (lang(?kortform_nob) = 'nob') } . | |
OPTIONAL { ?uri u:kortform ?kortform_nno . FILTER (lang(?kortform_nno) = 'nno') } . | |
OPTIONAL { ?uri u:kortform ?kortform_sme . FILTER (lang(?kortform_sme) = 'sme') } . | |
OPTIONAL { ?uri u:kortform ?kortform_smj . FILTER (lang(?kortform_smj) = 'smj') } . | |
OPTIONAL { ?uri u:kortform ?kortform_sma . FILTER (lang(?kortform_sma) = 'sma') } . | |
OPTIONAL { ?uri u:kortform ?kortform_eng . FILTER (lang(?kortform_eng) = 'eng') } . | |
?up u:type-utdanningsprogram ?type_utdanningsprogram . | |
FILTER REGEX(str(?status), "publisert", "i") | |
FILTER (lang(?tittel_def) = 'default') | |
} | |
` | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const getValue = (obj) => { | |
if (!obj) return undefined | |
if (!obj.value) return undefined | |
return obj.value | |
} | |
module.exports = (sparqlObj) => { | |
return { | |
id: getValue(sparqlObj.id), | |
kode: getValue(sparqlObj.kode), | |
url: getValue(sparqlObj.uri), | |
data_url: getValue(sparqlObj.data_url), | |
type_utdanningsprogram: getValue(sparqlObj.type_utdanningsprogram), | |
tittel: { | |
default: getValue(sparqlObj.tittel_def), | |
nob: getValue(sparqlObj.tittel_nob), | |
nno: getValue(sparqlObj.tittel_nno), | |
eng: getValue(sparqlObj.tittel_eng), | |
sme: getValue(sparqlObj.tittel_sme), | |
smj: getValue(sparqlObj.tittel_smj), | |
sma: getValue(sparqlObj.tittel_sma) | |
}, | |
kortform: { | |
default: getValue(sparqlObj.kortform_def), | |
nob: getValue(sparqlObj.kortform_nob), | |
nno: getValue(sparqlObj.kortform_nno), | |
eng: getValue(sparqlObj.kortform_eng), | |
sme: getValue(sparqlObj.kortform_sme), | |
smj: getValue(sparqlObj.kortform_smj), | |
sma: getValue(sparqlObj.kortform_sma) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment