@@ -172,21 +172,53 @@ export async function extractDatafieldsMetadata(datafieldsStr) {
172
172
return metadata
173
173
}
174
174
175
- export async function convertUserProfileToTurtle ( userProfileJsonArray ) {
175
+ export async function convertUserProfileToTurtle ( userProfileJson ) {
176
176
const writer = new N3Writer ( { prefixes : {
177
+ xsd : "http://www.w3.org/2001/XMLSchema#" ,
177
178
ff : "https://foerderfunke.org/default#"
178
179
} } )
179
180
writer . addQuad (
180
181
namedNode ( "https://foerderfunke.org/default#mainPerson" ) ,
181
182
namedNode ( "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" ) ,
182
183
namedNode ( "https://foerderfunke.org/default#Citizen" )
183
184
)
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
+ }
190
222
}
191
223
return new Promise ( ( resolve , reject ) => {
192
224
writer . end ( ( error , result ) => {
@@ -197,7 +229,10 @@ export async function convertUserProfileToTurtle(userProfileJsonArray) {
197
229
}
198
230
199
231
function determineObjectType ( objectStr ) {
232
+ objectStr = objectStr . toString ( )
200
233
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" } )
201
236
const num = Number ( objectStr )
202
237
if ( ! isNaN ( num ) ) return literal ( num )
203
238
return literal ( objectStr )
0 commit comments