Skip to content

Instantly share code, notes, and snippets.

@MatsAnd
Last active October 27, 2020 10:21
Show Gist options
  • Save MatsAnd/00ca2bfb65de125052bd69f1012b892e to your computer and use it in GitHub Desktop.
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
(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'])
})()
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')
}
`
}
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