Skip to content

Appendices

Appendix A: Format Conversion Matrix

Every cell shows whether the conversion is direct (pass-through works), needs mapping (transformation logic required), or is not applicable.

From / ToJSONXMLCSVYAMLODataAny Schema
JSONDirectFlattenDirectAdd @odataParse schema
XMLDirectFlattenDirectStrip+addParse schema
CSVDirectAdd structureDirectAdd @odataN/A
YAMLDirectDirectFlattenAdd @odataParse schema
ODataStrip @odataStrip+mapStrip+flattenStrip @odataEDMX parse

Direct: $input pass-through produces valid output (structures are compatible).

Flatten: nested data must be denormalized for CSV (one row per child, parent fields repeated). Use unnest() (Chapter 21) or manual flatten(map(...)).

Add structure: CSV is flat — converting to XML requires adding element names and nesting.

Strip: OData annotations (\@odata.*) are automatically separated during parsing, producing clean data.

Parse schema: schema formats (XSD, JSON Schema, etc.) are parsed as data — the schema structure becomes the transformation input.

Appendix B: Common Error Messages

Parser Errors

ErrorFix
Expected expressionCheck for missing value after let x = or empty transformation body
Expected property nameObject key is missing or uses reserved word — quote it: "input": value
Expected ')' after argumentsMismatched parentheses in function call — count opening and closing
Unclosed string literalMissing closing " or ' — check for unescaped quotes inside strings
User-defined functions must start with uppercaseRename myFunc to MyFunc — PascalCase required
Expected 'output' declarationMultiple input lines not supported — use input: with commas

Runtime Errors

ErrorFix
Undefined variable: nameVariable not declared with let, or misspelled. Check: is the input named?
Cannot index non-array with numberTrying obj[0] on an object — use .propertyName instead
Cannot index non-object with stringTrying arr["key"] on an array — use arr[0] (number index)
Array index out of boundsIndex exceeds array size — check with count() first or use ?.
Division by zeroDenominator is zero — guard with if (divisor != 0) ... else 0
Type error: expected string got numberUse toString(value) to convert, or check input data types

Validation Errors (UTLXe)

ErrorFix
Validation error at $.field: required field missingThe input or output is missing a required field — check mapping
Does not match patternString value doesn't match the regex in the schema — check format
Value is less than minimumNumber below the schema's minimum — check calculation
Type mismatch: expected string got numberSchema expects a string but transformation produces a number — add toString()

Appendix C: UTL-X vs Competitors (Feature Comparison)

UTL-X vs XSLT

FeatureXSLTUTL-X
Input formatsXML onlyXML, JSON, CSV, YAML, OData
Output formatsXML (text output for others)All 11 formats natively
ParadigmTemplate matching (push)Functional expressions (pull)
SyntaxXML (verbose)Concise, JSON-like
FunctionsXPath 2.0/3.0 functions650+ stdlib functions (superset of XPath 2.0, partial XPath 3.0)
User functionsNamed templatesfunction with PascalCase
Variablesxsl:variable (immutable)let (immutable)
Schema validationXSD only7 schema formats
Production engineNo (processor required)UTLXe (86K msg/s)
IDEXML editorsVS Code + live preview
Learning curveSteepModerate (familiar syntax)

UTL-X vs DataWeave

FeatureDataWeaveUTL-X
Format agnosticYesYes
Attribute prefix@@
writeAttributesSame name, same defaultSame name, same default
Function styleFunctionalFunctional
Open sourceNo (proprietary)Yes (AGPL)
PlatformMuleSoft Anypoint onlyAny (Docker, CLI, cloud)
Price$1,250+/month$35/month
Schema formatsJSON Schema, XSD7 formats (+ USDL bridge)
Production engineMule RuntimeUTLXe (86K msg/s)
Version controlEmbedded in Mule app.utlx files in Git
Conformance suiteNo500+ tests

UTL-X vs jq

FeaturejqUTL-X
FormatsJSON only11 formats
Dot notation.name.name (identical)
Raw output-r-r (identical)
Pipe||> (explicit)
Filterselect()filter()
Map[.[] | .name]map(., (x) -> x.name)
User functionsdef f: ...;function F(...) { ... }
Schema validationNo7 formats
Production engineNoUTLXe
Stdlib functions50650+
XML supportNoFull (namespaces, attributes, C14N)

Appendix D: Industry Standards Quick Reference

StandardDomainUTL-X relevance
UBL 2.1 / Peppol BIS 3.0E-invoicing (EU)XML output with UBL namespaces (Ch30)
HL7 FHIR R4Healthcare@value accessor for FHIR XML (Ch21, Ch30)
ISO 20022 (SWIFT MX)Financial messagingpain.001, camt.053 XML (Ch30)
EDIFACTLogistics/retail EDIPlanned — reverseXSL integration (Ch41)
ANSI X12North American EDIPlanned — reverseXSL integration (Ch41)
OpenAPI 3.xREST API contractsYAML/JSON input, schema extraction (Ch40)
AsyncAPIEvent-driven APIsKafka/AMQP message schemas (Ch40)
XBRLFinancial reportingQName functions for taxonomy processing (Ch21)
SOAP/WSDLWeb servicesEnvelope parsing, WS-Addressing (Ch21)
OData v4Enterprise RESTNative format with annotation handling (Ch26)
NEN 7510Dutch healthcare securityTenant isolation architecture (Ch37)
PCI DSSPayment card securityLog metadata, not data (Ch37)
GDPREU data protectionData minimization in logging (Ch37)

Appendix E: Glossary

TermDefinition
ASTAbstract Syntax Tree — the parsed representation of a .utlx file
BOMByte Order Mark (U+FEFF) — encoding indicator stripped on input, optional on CSV output
C14NXML Canonicalization — W3C standard for deterministic XML serialization
CDATACharacter Data section in XML — content not parsed as markup
DaprDistributed Application Runtime — CNCF sidecar for broker-agnostic messaging
EDMXEntity Data Model XML — OData metadata schema format (OSCH in UTL-X)
FHIRFast Healthcare Interoperability Resources — HL7's modern health data standard
GraalVMJVM with native image compilation — used for UTL-X CLI binary
IDocIntermediate Document — SAP's data exchange format
iPaaSIntegration Platform as a Service — cloud-based integration tools
JMSJava Message Service — enterprise Java messaging standard
KEDAKubernetes Event-Driven Autoscaling — scales containers based on queue depth
MCPModel Context Protocol — provides LLMs with UTL-X language context
MPPMMessage Processing Pipeline Model — Open-M's integration flow standard
ODataOpen Data Protocol — REST-based data access (Microsoft, SAP)
PeppolPan-European Public Procurement Online — e-invoicing network
QNameQualified Name — namespace prefix + local name in XML
RAMLRESTful API Modeling Language — MuleSoft's API description format
UBLUniversal Business Language — OASIS standard for business documents
UDMUniversal Data Model — UTL-X's format-agnostic data representation
USDLUniversal Schema Definition Language — UTL-X's schema dialect
UTLXeUTL-X Engine — the production runtime for high-throughput transformation
XBRLeXtensible Business Reporting Language — financial reporting standard

Appendix F: Version History

VersionDateHighlights
1.0.0April 2026Initial release. CLI, daemon, engine. 5 data formats, 6 schema formats, 652 stdlib functions.
1.0.1April 2026CLI enhancements: -e expression mode, identity flip, --from/--to flags.
1.0.2April 2026Bug fixes: XML text unwrapping in UDM, _text leaking into JSON/YAML output. New: writeAttributes option, #text key for text content, @ prefix consistency for JSON and YAML.
1.1.0May 2026Major feature release. Newline separators (commas optional in multi-line objects and match cases). Data restructuring functions: nestBy, lookupBy, chunkBy, unnest. USDL enrichment for all 6 Tier 2 parsers. groupBy returns Object + mapGroups. #text alias for _text. xs:decimal type mapping with JSON Schema "format": "decimal". GraalVM native binary fixes — 650+ stdlib functions work in native image. Native binary startup  7ms.

Appendix G: License

UTL-X is dual-licensed:

Open Source: AGPL-3.0

The UTL-X parser, interpreter, engine, and standard library are licensed under the GNU Affero General Public License v3.0. This means:

  • Free to use: run UTL-X for any purpose

  • Free to modify: change the source code

  • Free to distribute: share your modified version

  • Copyleft: if you distribute a modified version or offer it as a network service, you must share your modifications under AGPL-3.0

Your transformations are yours. The AGPL covers the UTL-X software — the parser, interpreter, and engine. It does NOT cover the .utlx transformation files you write or the data you process. Your transformations are your intellectual property.

Commercial Licensing

For organizations that cannot use AGPL (proprietary embedding, SaaS without source disclosure):

  • Azure Marketplace: Starter ($35/month) and Professional ($105/month) plans include a commercial license

  • Direct licensing: contact Glomidco B.V. for custom terms

Third-Party Components

UTL-X includes components under compatible open-source licenses:

  • SnakeYAML: Apache 2.0

  • Jackson: Apache 2.0

  • ASM: BSD 3-Clause

  • Apache XML Security: Apache 2.0

  • SLF4J + Logback: MIT / EPL-1.0

  • reverseXSL (vendored): Apache 2.0

Released under AGPL-3.0.