Skip to content

Commit 6405b99

Browse files
committed
Assume differrently structured profile-JSON
1 parent 6f98df9 commit 6405b99

File tree

3 files changed

+69
-17
lines changed

3 files changed

+69
-17
lines changed

dev/dev.js

+26-9
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,31 @@ async function devExtractMedatada() {
116116
}
117117

118118
async function devConvertUserProfileToTurtle() {
119-
let userProfileJsonArrayStr = JSON.stringify({
120-
triples: [{
121-
subject: "https://foerderfunke.org/default#mainPerson",
122-
predicate: "https://foerderfunke.org/default#hasResidence",
123-
object: "Berlin"
124-
}]
119+
let userProfileJsonStr = JSON.stringify({
120+
"ff:hasFirstNames": "Max",
121+
"ff:hasFamilyName": "Mustermann",
122+
"ff:hasBirthday": "1992-05-17",
123+
"ff:paysRentCold": 900,
124+
"ff:hasLivingArea": 80,
125+
"ff:hasResidence": "Berlin",
126+
"ff:hasParentingSetup": "ff:Elternpaar",
127+
"ff:receivesWohngeld": 450,
128+
"ff:hasIncomeBrutto": 2700,
129+
"ff:hasIncomeNetto": 1600,
130+
"ff:hasChild": [
131+
{
132+
"ff:hasBirthday": "2013-01-23",
133+
"ff:hasMaritalStatus": "LD",
134+
"ff:receivesKindergeld": 250
135+
},
136+
{
137+
"ff:hasBirthday": "2008-02-15",
138+
"ff:hasMaritalStatus": "LD",
139+
"ff:receivesKindergeld": 250
140+
}
141+
]
125142
})
126-
let turtleStr = await convertUserProfileToTurtle(JSON.parse(userProfileJsonArrayStr))
143+
let turtleStr = await convertUserProfileToTurtle(JSON.parse(userProfileJsonStr))
127144
console.log(turtleStr)
128145
}
129146

@@ -147,5 +164,5 @@ async function devValidateSingleDatafieldValue() {
147164
// devValidateOneStrings()
148165
// devValidateUserProfile()
149166
// devExtractMedatada()
150-
// devConvertUserProfileToTurtle()
151-
devValidateSingleDatafieldValue()
167+
devConvertUserProfileToTurtle()
168+
// devValidateSingleDatafieldValue()

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@foerderfunke/matching-engine",
3-
"version": "0.4.2",
3+
"version": "0.4.3",
44
"description": "Checks eligibilities by validating a user profile against requirement profiles",
55
"author": "@foerderfunke",
66
"license": "MIT",

src/utils.js

+42-7
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,53 @@ export async function extractDatafieldsMetadata(datafieldsStr) {
172172
return metadata
173173
}
174174

175-
export async function convertUserProfileToTurtle(userProfileJsonArray) {
175+
export async function convertUserProfileToTurtle(userProfileJson) {
176176
const writer = new N3Writer({ prefixes: {
177+
xsd: "http://www.w3.org/2001/XMLSchema#",
177178
ff: "https://foerderfunke.org/default#"
178179
}})
179180
writer.addQuad(
180181
namedNode("https://foerderfunke.org/default#mainPerson"),
181182
namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),
182183
namedNode("https://foerderfunke.org/default#Citizen")
183184
)
184-
for (let triple of userProfileJsonArray.triples) {
185-
writer.addQuad(
186-
namedNode(triple.subject),
187-
namedNode(triple.predicate),
188-
determineObjectType(triple.object)
189-
)
185+
186+
for (let [key, value] of Object.entries(userProfileJson)) {
187+
if (key.startsWith("ff:")) key = "https://foerderfunke.org/default#" + key.slice(3)
188+
189+
if (Array.isArray(value)) {
190+
for (let i = 0; i < value.length; i++) {
191+
let arrayElement = value[i]
192+
let instanceClass = "https://foerderfunke.org/default#Child" // read from datafields.ttl TODO
193+
let instanceLocalName = instanceClass.split("#")[1].toLowerCase() + i
194+
let subject = namedNode("https://foerderfunke.org/default#" + instanceLocalName)
195+
writer.addQuad(
196+
namedNode("https://foerderfunke.org/default#mainPerson"),
197+
namedNode(key),
198+
subject
199+
)
200+
writer.addQuad(
201+
subject,
202+
namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),
203+
namedNode(instanceClass)
204+
)
205+
// do this recursively instead TODO
206+
for (let [arrayElementKey, arrayElementValue] of Object.entries(arrayElement)) {
207+
if (arrayElementKey.startsWith("ff:")) arrayElementKey = "https://foerderfunke.org/default#" + arrayElementKey.slice(3)
208+
writer.addQuad(
209+
subject,
210+
namedNode(arrayElementKey),
211+
determineObjectType(arrayElementValue)
212+
)
213+
}
214+
}
215+
} else {
216+
writer.addQuad(
217+
namedNode("https://foerderfunke.org/default#mainPerson"),
218+
namedNode(key),
219+
determineObjectType(value)
220+
)
221+
}
190222
}
191223
return new Promise((resolve, reject) => {
192224
writer.end((error, result) => {
@@ -197,7 +229,10 @@ export async function convertUserProfileToTurtle(userProfileJsonArray) {
197229
}
198230

199231
function determineObjectType(objectStr) {
232+
objectStr = objectStr.toString()
200233
if (objectStr.startsWith("http")) return namedNode(objectStr)
234+
if (objectStr.startsWith("ff:")) return namedNode("https://foerderfunke.org/default#" + objectStr.slice(3))
235+
if (/^\d{4}-\d{2}-\d{2}$/.test(objectStr)) return literal(objectStr, { value: "xsd:date" })
201236
const num = Number(objectStr)
202237
if (!isNaN(num)) return literal(num)
203238
return literal(objectStr)

0 commit comments

Comments
 (0)