[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 #