# Context input/output
append = dump?indent=true
# OpenAPI Documentation - JSON format (dot notation)
post.responses.default.description = Return all objects from XML/SKOS file
post.responses.default.content.application/json.schema.type = array
post.responses.default.content.application/json.schema.items.type = object
post.responses.default.content.application/json.schema.items.properties.id.type = string
post.responses.default.content.application/json.schema.items.properties.value.$ref = #/components/schemas/anyValue
post.summary = Transform XML/SKOS file to array of JSON Objects
post.requestBody.required = true
post.requestBody.content.text/xml.schema.type = string
post.requestBody.content.text/xml.schema.format = binary
# Necessary plugins
[use]
plugin = basics
plugin = loterre
plugin = analytics
# Flow configuration
[URLStream]
path = false
[XMLParse]
separator = /rdf:RDF/skos:Concept
[assign]
path = localization
value = get('skos$broader.rdf$resource').concat('').filter(Boolean)
[SKOSPathEnum]
path = localization
label = skos$prefLabel
recursion = true
[OBJFlatten]
safe = true
[replace]
path = concept
value = self()
# select all keys and remove duplicates to avoid ambiguities
path = keys
value = fix(_.get(self, 'skos$prefLabel'), _.get(self, 'skos$altLabel'), _.get(self, 'skos$hiddenLabel')). \
flatten().\
filter(o => _.has(o, '$t')).\
map(o =>_.lowerCase(_.trim((o.$t)))).\
reduce((accumulator, value, key, collection) => (_.indexOf(collection, value) >= 0 ? accumulator.concat(value) : accumulator), [])
[exploding]
id = concept
value = keys
; invert id & value because of [exploding] which works only by value (not by id)
[replace]
path = id
value = get('value')
path = value
value = get('id')