-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathextract-metadata.js
50 lines (48 loc) · 2.01 KB
/
extract-metadata.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { getDetailsAboutDfs } from "./prematch.js"
import { rdfStringsToStore, rdfStringToStore, runSparqlSelectQueryOnStore } from "./utils.js"
export async function extractRequirementProfilesMetadata(requirementProfileStrings, lang) {
let store = await rdfStringsToStore(requirementProfileStrings)
let query = `
PREFIX ff: <https://foerderfunke.org/default#>
SELECT * WHERE {
?rpUri a ff:RequirementProfile .
OPTIONAL {
?rpUri ff:title ?title .
FILTER (lang(?title) = "${lang}")
} .
OPTIONAL { ?rpUri ff:leikaId ?leikaId } .
OPTIONAL { ?rpUri ff:category ?category } .
OPTIONAL { ?rpUri rdfs:seeAlso ?seeAlso } .
OPTIONAL { ?rpUri ff:validationStage ?validationStage } .
OPTIONAL {
?rpUri ff:benefitInfo ?benefitInfo .
FILTER (lang(?benefitInfo) = "${lang}")
} .
OPTIONAL {
?rpUri ff:ineligibleGeneralExplanation ?ineligibleGeneralExplanation .
FILTER (lang(?ineligibleGeneralExplanation) = "${lang}")
} .
}`
let metadata = {}
let rows = await runSparqlSelectQueryOnStore(query, store)
for (let row of rows) {
if (!metadata[row.rpUri]) {
metadata[row.rpUri] = {
uri: row.rpUri,
title: row.title ?? "",
leikaId: row.leikaId ?? "",
seeAlso: row.seeAlso ?? "",
validationStage: row.validationStage ?? "",
benefitInfo: row.benefitInfo ?? "",
ineligibleGeneralExplanation: row.ineligibleGeneralExplanation ?? "",
categories: []
}
}
if (row.category) metadata[row.rpUri].categories.push(row.category)
}
return metadata
}
export async function extractDatafieldsMetadata(datafieldsStr, lang) {
let store = await rdfStringToStore(datafieldsStr)
return await getDetailsAboutDfs([], store, lang)
}