Newer
Older
web-services / loterre-resolvers / v1 / annotate.cfg
[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
#