[use]
plugin = basics
plugin = xslt
# on définit quelques variables globales
[env]
path = lang
value = env('lang', 'en')
path = skosFilename
value = fix(`${env('TMPDIR', '/tmp')}/${env('loterreID', 'noid')}.skos`)
# On reçoit un tableau (array) en JSON que l'on découpe
[JSONParse]
separator = *
# Pour le premier élement du tableau
[singleton]
# on ajoute le nom du fichier skos qu el'on utilisera
[singleton/assign]
path = skos-file
value = env('skosFilename')
# et on le télécharge (sauf si le fichier est déjà dans le cache)
[singleton/expand]
path = skos-file
file = ./v1/fetch.cfg
cacheName = fix(`${env('loterreID', 'noid')}-${env('weekNumber')}`)
# on reformat le json pour une structure compatible avec le le json2xml de saxon
[replace]
path = string.0.key
value = id
path = string.0.$t
value = get('id')
path = string.1.key
value = value
path = string.1.$t
value = get('value')
# On fait des paquets de 10 objets
[group]
length = 10
[replace]
path = items
value = self()
# Pour chaqu paquet de 10 objets
[map]
path = items
# On transform le JSON en chaine XML
[map/XMLString]
rootElement = array
contentElement = map
rootNamespace = http://www.w3.org/2005/xpath-functions
# On tranform le XML produit via une feuille xslt
[map/xslt]
stylesheet = ./v1/annotate.xsl
param = env('lang').prepend('lang=')
param = env('skosFilename').prepend('vocabulary=')
; For local test param = vocabulary=/src/temp/QX8.skos
# on récupére le xml produit pour le transformer en JSON
[map/XMLParse]
separator = /root/record
# On dégroupe les paquets de 10
[exchange]
value = get('items')
# pour en faire un flux unique
[ungroup]
# on parcours le annotation produit par le feuille xsl
[map]
path = annotation
# on simplfie la structure json fabriquée automatique par xmlparse
[map/OBJFlatten]
# on supprimer les clé $t générée par xmlparse
[map/exchange]
value = self().mapKeys((value, key) => key.replace(/\/\$t/g, ''))
[map/assign]
path = arbreHierarchique
value = get('arbreHierarchique', []).castArray().map(item => (item.$t ? item.$t : item))
path = termeReconnu
value = get('termeReconnu', []).castArray().map(item => (item.$t ? item.$t : item))
# on renome la clé annoation en value pour être réciproque avec l'input
[replace]
path = id
value = get('id')
path = value
value = get('annotation', [])
#
# A noter :
# L'utilisation d'un fichier .cfg évite de faire apparaitre ce fichier comme une route dans la documentation openAPI
#