Skip to content

Latest commit

 

History

History
131 lines (112 loc) · 12.7 KB

CHANGELOG.md

File metadata and controls

131 lines (112 loc) · 12.7 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Unreleased

Fixed

  • The CLI exits with 1 on invalid options and on every failure, also when Flink threads linger (see HANDBOOK: Command line).
  • --version prints MappingWeaver <version>, from the jar's manifest.
  • The CLI validates its options before running: exactly one of -m and -l, and -o for toFile; an invalid option prints the message and the usage.
  • An IRI term map uses a value as it is when it is an absolute IRI of any scheme, fragments included, and otherwise prepends the base IRI; a percent-encoded path such as http://example.com/http%3A%2F%2Fexample.com is kept (RMLTC0020a).
  • A join on equality whose condition holds no attributes is refused instead of joining every combination. A mapping plan that cannot express its condition, one joining on a constant for instance, arrives with an empty condition; the loop over the attributes then found nothing to reject on and answered that every record matched, so a cross join was silently produced where an equality was asked for (RML-Core test cases RMLTC0030c to RMLTC0030f).
  • An equality join no longer logs both solution mappings and both attribute names at WARN level for every pair of records it compares.
  • lookupWithDelimiter calls using different input files no longer reuse each other's results
  • Tests that change the FnO function descriptions restore the defaults afterwards, so the test classes that run after them in the same JVM find the built-in functions again
  • An IRI or blank node object map fed by a function producing several values yields a term per value, instead of keeping only the first
  • A function producing several values is applied to every one of them, wherever it is used
  • FnO return datatypes now follow the selected resource in the function's ordered fno:returns list, with warnings and first-return fallback for invalid rml:return values
  • A value from a multi-valued function no longer carries the datatype of the collection the function returns
  • A source field is read once per name, so a logical view read by several triples maps no longer exhausts the heap
  • A function returning its values as an array, as the GREL functions do, no longer ends up as the array itself
  • A reference to something the record does not have yields NULL instead of aborting the mapping, as the RML-IO registry requires of JSONPath
  • An empty value is a value, and no longer reported as an absent attribute
  • Git ignore pom.xml.versionsBackup
  • Remove reference to non-existing branch in GitLab CI script
  • Updated dependency on Function Agent to 2.0.0, which includes the fix for calculating the parameter arity of functions (1.5.1); an unknown function id still fails the mapping.
  • Merged --function-descriptions and -f parameters.

Changed

  • Release tooling: RELEASE.md documents the steps; bump-version.sh checks the version format and moves to the next patch -SNAPSHOT after a release.
  • Reorganized test resources and Java runners by RML language and provenance, using authoritative spec fixtures where applicable
  • Updated dependency on Algebraic Mapping Operators to 5.1.0
  • Updated dependency on dataio to 2.4.2
  • Updated dependency on MappingLoom to 0.8.0
  • Updated dependency on idlab-functions-java to 1.5.2
  • Updated dependency on grel-functions-java to v0.11.1
  • The GREL function descriptions (functions_grel.ttl) come from the grel-functions-java jar, like the IDLab ones from idlab-functions-java, instead of a copy in MappingWeaver. Ten GREL functions (math_ceil, floor, round, min, max, ln, log, exp, pow and string_toNumber) now return xsd:decimal instead of xsd:integer.
  • Updated dependencies on other libraries to latest stable release versions
  • dataio is a direct dependency, since MappingWeaver uses its classes.
  • The versions of algebraic-mapping-operators, dataio, MappingLoom, function-agent-java, idlab-functions-java and grel-functions-java are Maven properties, so a local build can use their development versions (see HANDBOOK: Dependency versions)
  • Declared slf4j-simple as a runtime dependency, so the CLI has a concrete logging backend on its runtime classpath
  • Built-in FnO descriptions use a classpath:// prefix; custom descriptions can override them by filename (see README: Custom FnO function descriptions)
  • HANDBOOK: a regression case's expected output is derived from the specification rule it names, and one that upstream lacks is proposed there (see HANDBOOK: Test resource organization)
  • GitLab CI: the test jobs extend a shared .unittests job, list only test classes that run at least one test (adding ReferenceFunctionTest and CliExitCodeTest), and run without a Docker service (see HANDBOOK: Continuous integration)
  • HANDBOOK: the agent request contract follows the software-handbook contract of 2026-10-19
  • A function producing several values hands them over as one CollectionNode instead of one node per value. The values stay together while they are passed around, so a function taking the result as an argument sees all of them, and the terms are generated where the collection is serialized: a TemplateSerializer states the template once per member. A collection that a term map asks to be serialized as an rdf:List or rdf:Seq is RML-CC and not implemented, so every collection is serialized a term at a time for now.

Removed

  • The --json-ld option, which had no effect
  • Unused classes CSVSourceOperator, FlinkDataIOReader (deprecated) and Main.CommonSink
  • CliOutputTest, whose tests were all disabled, and the dependencies only it used: the Eclipse Paho MQTT client (with its repository) and Testcontainers HiveMQ
  • Leftover copies of the moveup and multiple-function-executions mappings from before the test resources were reorganized
  • The copies of the RML-KGC test suites and the test classes that ran them (RMLCoreTest, RMLIOTest, RMLRegistryTest, RMLFNMLTest, RMLLVTest, RMLCCTest, RMLSTARTest, TestRunner, with the unused junit-platform-launcher), and the RML-KGC part of scripts/update_spec_tests.sh and scripts/tests_compare.sh: the conformance run reads the suites at pinned commits, and ModuleTest does the everyday checks. Also the local cases no test ran: the variants RMLTC0008b-multidata* and an old copy of RMLFNMLTC0001-CSV. CliExitCodeTest reads its two cases from test-cases/engines/cli, and RMLLVFNMLTest is in the rml_kgc.fno package.
  • CSVWSourceTest, which ran RMLIOREGTC0012b on a stored plan; ModuleTest's io/csvw group translates that case.
  • TestCore compares the output's graphs as MappingWeaver writes them.

Added

  • Conformance run: conformance/run.sh runs the seven kg-construct test suites and the runner's proposed corpus on the jar with mapping-test-runner 0.1.4, and fails on any difference from conformance/expected-results.csv, which lists the 232 cases MappingWeaver fails, each with its cause (154 of the 389 cases pass, and 3 are skipped). The engine runs each case with Flink at parallelism 1. The manual Conformance CI job runs it on Docker-in-Docker (docker:29-dind), and a release runs it first (see HANDBOOK: Conformance).
  • ModuleTest: the everyday tests of RML-Core, RML-IO, RML-FNML and RML-LV, thirteen mappings that each merge the kg-construct test cases of one feature that MappingWeaver passes, compared by dataset isomorphism.
  • Shell scripts keep LF line endings (.gitattributes).
  • Test cases RMLFNOTC1005-JSON and RMLFNOTC1006-JSON, covering a multi-valued function in an IRI and in a blank node object map
  • Test cases RMLFNOTC1001-JSON to RMLFNOTC1004-JSON, covering a multi-valued function in a logical view: a split in an object map, with nulls turned into empty strings, with empty strings filtered out afterwards by idlab-fn:trueCondition, and the same split as a field of the view
  • GitLab CI: added Javadoc check in linting phase
  • Debug logging now reports the discovered/loaded FnO function IRIs when the FnO agent is initialized
  • A parameter --custom-functions-only to disable loading of built-in FnO descriptions, so only the custom ones are used
  • A parameter --best-effort to continue mapping even when encountering data errors.
  • A test for loading and executing a RML mapping with a custom external function.
  • A source that is a CSV on the Web table is read in the dialect it says it is written in. The plan's source configuration carries what the table and its dialect said — the delimiter, the quote character, the encoding, whether the data has a header row, and the values standing for no value — and those become the CSVWConfiguration the CSV source operator reads through. A source saying none of it is a plain CSV and is read as before. Test case RMLIOREGTC0012b covers a semicolon-separated table naming "NULL" as its null value.
  • A file source may say where its data is with url instead of path, which is what a CSV on the Web table says.
  • GitLab CI: create JAR artifact for each build.

0.3.0 - 2026-07-30

Added

  • Classified the RML-CC, RML-FNML and RML-STAR conformance test cases as passing or known-failing, each with an explanatory reason.
  • RMLLVFNMLTest, covering a logical-view field whose value is computed by an FnO function (toUpperCase), and enabled it in the GitLab CI pipeline.

Changed

  • Updated Algebraic Mapping Operators to 4.0.0, MappingLoom to 0.7.1 and idlab-functions-java to 1.5.0.
  • A source field's value is now read from MappingLoom's single expression instead of the separate reference and constant keys, which were fused as of MappingLoom 0.7.0. The expression is handed to an AMO ExpressionField as it is, whether it is a reference, a constant or a function computing the value; a function producing several values makes the field produce a record per value. This replaces the earlier mapping of a reference or constant onto AMO's now removed reference and constant fields.
  • ReferenceFunction reports itself as a bare reference (ExtendFunction.asReference()), so a field carrying it reads the attribute straight from the record and a path matching several values (a JSON array, an XML node list) still yields all of them.
  • RML-LV test case RMLLVTC0001c (a template-valued expression field) passes and is no longer listed as known-failing.
  • Synced the RML-IO, RML-STAR and RML-FNML test resources with their upstream RML test-case repositories and re-triaged the affected tests.
  • Enabled the passing spec test classes (RML-FNML, RML-STAR, RMLRegistry, WebSocket, FnO) in the GitLab CI pipeline.
  • Updated the README conformance table with the current test-case pass percentages.

Fixed

  • A function that fails at runtime (e.g. a substring index out of range) now yields an empty result instead of aborting the whole mapping, so no triple is generated for that value; a function that cannot be resolved still raises an error (fixes RML-FNML test case RMLFNMLTC0008-CSV).
  • Updated Algebraic Mapping Operators to 2.0.3
  • Updated MappingLoom to 0.6.8
  • Added GenerateBlankNode extend function, fixes RML-Core test case RMLTC0012e.

0.2.0 - 2026-05-27

Added

  • Upgraded Flink to v2.2.0
  • Implemented stdout sink using Flink 2.2's Sink API
  • Added a FlinkTargetOperator to handle the creation of sinks using a Factory pattern
  • Added an extra Flink operator step to extract the serialized RDF output from solution mappings before written the records into the sinks
  • Added CLI option -l --loom-file to take an AlgeMapLoom plan as input.
  • Added websocket support

Fixed

  • Updated RML test cases
  • Put dependency to FnOio in small case. See #1
  • Update dependency on MappingLoom to 0.6.6
  • Use base IRI given as program argument when generating relative IRIs

Changed

  • Updated Algemaploom-rs version to 0.6.5
  • (Re-)use Flink 2.2's mini-cluster for testing and reduce test start-up time

Refactored

  • Moved all CLI related parameters parsing and specification to a separate module
  • Updated pom.xml to directly pull dataio instead of pulling this through algebraic mapping operators

Removed

  • Old TargetSinkFunction which implements the deprecated legacy Flink's SinkFunction API
  • OperatorTests.java which doesn't test anything meaningful is removed
  • All existing implementations of a generic DataIO-based sink operators using legacy Flink's Source API

0.1.0 - 2025-10-08

Added

  • Initial source code