Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
dc96a58
fix: Add SLF4J-simple for logging
jduchateau Jun 11, 2026
553ac0d
chore(tests): remove committed test case
jduchateau Jun 16, 2026
0ec67a4
backport BURP-rer
jduchateau Jun 16, 2026
ed85b22
backport BURP-Error RML-LV RER
jduchateau Jun 9, 2026
4a56115
backport tests and readme
jduchateau Jun 10, 2026
fb06436
backport fnml and io
jduchateau Jun 10, 2026
fc3563b
backport fnml and io and rer
jduchateau Jun 11, 2026
06d6153
Improve parsing and reporting of error in text files, while parsing T…
jduchateau Jun 11, 2026
c46bdaf
refactor(submodules): integrate Git submodules for RML modules and cl…
jduchateau Jun 11, 2026
d94a036
feat(reporting): Plain text reporting with colour depending on severity
jduchateau Jun 11, 2026
c663d7e
add rer vocabulary
jduchateau Jun 17, 2026
4204191
fix imports
jduchateau Jun 17, 2026
3b83275
chore: update dependencies prepare deploy
jduchateau Jun 17, 2026
95c2502
chore: remove unused FetchTestCases
jduchateau Jun 17, 2026
1f1aa0f
ignore candil-data-fabric warning
jduchateau Jun 17, 2026
094b747
ci: fetch with submodules
jduchateau Jun 17, 2026
9356402
ci: add rdf-tests submodule to index
jduchateau Jun 17, 2026
a5ec9fe
fix: add dummy test case when no parametric test exists
jduchateau Jun 18, 2026
e138749
chore: remove duplicate central-publishing-maven-plugin
jduchateau Jun 18, 2026
e4dc84d
feat: add support for Boolean literals in RDF serialization in Datard…
jduchateau Jul 8, 2026
fbbd332
chore: remove obsolete fetch-test-cases scripts
jduchateau Jul 8, 2026
0391fee
ci: disable (for now) RML-IO-Registry tests
jduchateau Jul 14, 2026
6b34ca7
Merge branch 'refs/heads/main' into kgc-2026-conformance
jduchateau Jul 14, 2026
3729f94
chore: remove unused code and refactor `itselfOrId` into `termItselfO…
jduchateau Jul 14, 2026
a406789
fix: testParsesRmlMappingFiles from RML Test Cases and BURP Test cases
jduchateau Jul 14, 2026
e27b263
feat: Add support for BSON with JSONPath
jduchateau Jul 14, 2026
036b0c5
fix Double representation, normalise in test and while serialising us…
jduchateau Jul 14, 2026
17aa9ff
feat: enhance CSV parsing with quoteChar and commentPrefix support, h…
jduchateau Jul 14, 2026
5c85444
test: use Testcontainers annotations for managing the lifecycle of da…
jduchateau Jul 14, 2026
6fdfa0e
feat: add trim option for CSVW
jduchateau Jul 14, 2026
2ae3467
Add tests from issues #20 and #21
jduchateau Jul 15, 2026
0fa3144
fix: turtleprov parser escaping RDFLiteral
jduchateau Jul 16, 2026
a7cbd74
fix: float notation and adding noisy precision when converting to dou…
jduchateau Jul 16, 2026
c56753e
refactor: improve error type checking in tests, use Testcontainers an…
jduchateau Jul 16, 2026
d49c13f
fix: RMLIOREGTC0006c should expect error like 5c and 4c
jduchateau Jul 16, 2026
d1a78c6
refactor: remove unused reference validation logic in RDBSource
jduchateau Jul 17, 2026
d98e3c2
refactor: simplify XMLSource iteration logic and remove unused xPathC…
jduchateau Jul 17, 2026
d893eb8
refactor: replace instanceof with switch expressions for expression h…
jduchateau Jul 17, 2026
83f7a7c
refactor: unify buggy test filtering logic across modules, disable RD…
jduchateau Jul 17, 2026
220adec
test: Update rml-io-registry
jduchateau Jul 17, 2026
98ec928
chore: sign maven build, bump version 0.1.3
jduchateau Jul 17, 2026
5d07e9e
chore: allow token for sigstore
jduchateau Jul 17, 2026
db9a177
chore: fix deployment of maven artefacts
jduchateau Jul 17, 2026
f570980
ci: source version from the tag for the deployment
jduchateau Jul 22, 2026
c0f3b26
build: ensure full pom is used
jduchateau Jul 22, 2026
71aca2e
refactor: update JNC dependency to version 1.3.0 and adjust package i…
jduchateau Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 0 additions & 28 deletions .github/workflows/ci.yml

This file was deleted.

55 changes: 55 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Deploy

on:
push:
tags:
- 'v*'

jobs:
deploy:
name: Deploy Release
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: write
issues: write
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: true
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
server-id: central
server-username: MAVEN_USERNAME # env variable for username in deploy
server-password: MAVEN_CENTRAL_TOKEN # env variable for token in deploy
- name: Set project version from tag
run: |
TAG_VERSION="${{ github.ref_name }}"
# Remove leading 'v' if present (e.g. v0.1.4 -> 0.1.4)
TAG_VERSION="${TAG_VERSION#v}"

echo "Updating pom.xml version to: $TAG_VERSION"
mvn versions:set -DnewVersion="$TAG_VERSION" -DgenerateBackupPoms=false -B
- name: Deploy Maven package
# Locally run instead: mvn clean deploy -DskipTests -Pdeploy -Dgpg.passphrase=""
run: mvn deploy -B -Pdeploy -Dgpg.signer=bc -DskipTests
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
# ASCII-armored secret key (TSK), e.g. from `gpg --armor --export-secret-keys YOUR_ID`
MAVEN_GPG_KEY: ${{ secrets.GPG_ARMOR_KEY }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
- name: JReleaser Release
run: mvn jreleaser:full-release -B -Pdeploy
env:
TAG_NAME: ${{ github.ref }}
JRELEASER_PROJECT_VERSION: ${{ github.ref }}
JRELEASER_JBANG_GITHUB_TOKEN: ${{ secrets.JBANG_CATALOG_TOKEN }}
JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 changes: 32 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Tests

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
build:
name: Run Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
submodules: true
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
- name: Build with Maven
run: mvn clean compile
- name: Test with Maven
run: mvn test
- name: Publish Test Report
uses: mikepenz/action-junit-report@v6
if: success() || failure() # always run even if the previous step fails
with:
report_paths: '**/target/surefire-reports/TEST-*.xml'
22 changes: 22 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[submodule "src/test/resources/rdf-tests"]
path = src/test/resources/rdf-tests
url = https://github.com/w3c/rdf-tests.git
branch = main
[submodule "rml-modules/rml-core"]
path = rml-modules/rml-core
url = https://github.com/kg-construct/rml-core.git
[submodule "rml-modules/rml-cc"]
path = rml-modules/rml-cc
url = https://github.com/kg-construct/rml-cc.git
[submodule "rml-modules/rml-io"]
path = rml-modules/rml-io
url = https://github.com/kg-construct/rml-io.git
[submodule "rml-modules/rml-fnml"]
path = rml-modules/rml-fnml
url = https://github.com/kg-construct/rml-fnml.git
[submodule "rml-modules/rml-lv"]
path = rml-modules/rml-lv
url = https://github.com/kg-construct/rml-lv.git
[submodule "rml-modules/rml-io-registry"]
path = rml-modules/rml-io-registry
url = https://github.com/kg-construct/rml-io-registry.git
10 changes: 10 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

86 changes: 78 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,58 @@
# BURP: A Basic and Unassuming RML Processor
# BURP-Error: A Basic and Unassuming RML Processor with RML Execution Report

[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11037712.svg)](https://doi.org/10.5281/zenodo.11037712)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.19455346.svg)](https://doi.org/10.5281/zenodo.19455346)

BURP (Basic and Unassuming RML Processor) is a reference implementation for the
new [RML specification](http://w3id.org/rml/portal) which has been written from scratch to have no influence from prior
implementations of RML.
BURP was created to serve as a reference RML implementation for the Knowledge Graph Construction community and to verify
the RML specifications, their feasibility, and coverage of their test cases.

BURP (Basic and Unassuming RML Processor) is a reference implementation for the new [RML specification](http://w3id.org/rml/portal) which has been written from scratch to have no influence from prior implementations of RML.
BURP was created to serve as a reference RML implementation for the Knowledge Graph Construction community and to verify the RML specifications their feasibility and coverage of their test cases.
BURP-Error is a fork of BURP that adds error handling to the RML processor, according to
the [RML Execution Report](https://w3id.org/dre/rer). The project is a proof of concept, no maintenance guaranteed, but
if you have any questions or issues, feel free to
[open an issue on GitHub](https://github.com/jduchateau/BURP/issues/new).

Warning: Joins are quadratic, in terms of iterations and number of multivalued join conditions values.

## Coverage matrix

| [RML-Core](http://w3id.org/rml/core/spec) | [RML-IO](http://w3id.org/rml/io/spec) | [RML-CC](http://w3id.org/rml/cc/spec) | [RML-FNML](http://w3id.org/rml/fnml/spec) | [RML-Star](http://w3id.org/rml/star/spec) |
| ----------------------------------------- | ------------------------------------- | ------------------------------------- | ----------------------------------------- | ----------------------------------------- |
| ✔️ 100% coverage | 🚧 Source yes, Target WIP | ✔️ 100% coverage | ✔️ 100% coverage | 🚧 WIP |
| RML module | Test Cases: Pass / Fail / Total |
|------------------------------------------------------|---------------------------------|
| [RML-Core](https://w3id.org/rml/core/spec) | ✅ 76 / 0 / 76 |
| [RML-IO](https://w3id.org/rml/io/spec) | ✔️ 56 / 0 / 56* |
| [RML-IO-Registry](https://w3id.org/rml/io-registry/) | 🚧️ 52 / 50 / 102 Details below |
| [RML-CC](https://w3id.org/rml/cc/spec) | ✅ 35 / 0 / 35 |
| [RML-FNML](https://w3id.org/rml/fnml/spec) | ✅️ 20 / 0 / 20 |
| [RML-Star](https://w3id.org/rml/star/spec) | ❌ Not implemented |
| [RML-LV](https://w3id.org/rml/lv/spec) | ✅️ 41 / 0 / 41 |
| [RER](https://w3id.org/dre/rer) | 🪅 Demo implementation |

\* We consider 17 test cases in RML-IO to have issues.

### RML-IO-Registry coverage details

BURP supports natively the following input sources:

- rml:FilePath or rml:RelativePathSource — local files (supports rml:root and rml:path)
- rml:CSV — CSV files (including CSVW tables and their dialects: encoding, delimiter, header, nulls)
- rml:JSONPath — JSON sources ([RFC 9535](https://www.rfc-editor.org/rfc/rfc9535) JSONPath iterator)
- rml:XPath — XML sources (XPath 1.0 iterator; supports namespace/prefix mappings for XPath reference formulations)
- rml:SPARQL Results (CSV/TSV/XML/JSON) — SPARQL result files, SPARQL endpoints/services, and data dumps (VOID/SD)
- rml:SQL2008Query and rml:SQL2008Table — relational database sources
(via D2RQ properties such as d2rq:jdbcDSN, d2rq:jdbcDriver, username, password)
- DCAT Distribution / CSVW Table — remote files via DCAT downloadURL or CSVW url

- Extensions possible see extending BURP

## About the RML Execution Report

The RML Execution Report (RER) is a taxonomy for describing the execution of an RML mapping, defined at [https://w3id.org/dre/rer](https://w3id.org/dre/rer).

BURP-Error can output the execution report using the `rer` vocabulary.
In addition, if your mapping is in Turtle format, BURP-Error will also output the execution report in a textual format with code snippets or your mappings instead of the rdf 1.2 statements pointers ([ptr](https://w3id.org/dre/ptr)).

Notice; to locate prescicely the turtle token location, we use a custom turtle parser (in `turtleprov`) that admitedly is only 39/103 (37%) of RDF1.2 test cases and 217/313 (69%) of RDF1.1 test cases.

## Building BURP

Expand All @@ -27,7 +69,17 @@ Some libraries are available on GitHub's maven repository. Add a GitHub authenti

## Using BURP

The run the R2RML processor, execute the following command:
You can run BURP using [JBang](https://jbang.dev):

```bash
$ jbang burp@jduchateau [-h] [-b=<baseIRI>] -m=<mappingFile> [-o=<outputFile>]
```

*Note: JBang will automatically download the required JDK and resolve all project dependencies on the first run.*

If you don't have JBang installed yet, see the [JBang Installation Guide](https://jbang.dev/download) to install it.

Alternatively, if you prefer to run it using a local pre-built fat JAR and standard Java, execute the following command:

```bash
$ java -jar burp.jar [-h] [-b=<baseIRI>] -m=<mappingFile> [-o=<outputFile>]
Expand All @@ -48,6 +100,24 @@ If no outputFile is provided and the RML mapping does not rely on RML-IO for tar

## Citation

If you use BURP-Error, please cite our paper:

```
@inproceedings{duchateau2026rml-execution-report,
author = {Jakub Duchateau and Dylan {Van Assche} and Christophe Debruyne},
editor = {},
title = {Beyond Exit Code 1: A Vocabulary for Execution Report of RML Processors (RER)},
booktitle = {Proceedings of the 7th International Workshop on Knowledge Graph Construction
co-located with 23rd Extended Semantic Web Conference ({ESWC} 2026),
Dubrovnik, Croatia, May 10, 2026},
series = {{CEUR} Workshop Proceedings},
volume = {X},
publisher = {CEUR-WS.org},
year = {2026},
url = {https://ceur-ws.org/Vol-X/paperX.pdf}
}
```

If you use BURP, please cite our paper:

```
Expand Down
61 changes: 0 additions & 61 deletions fetch-test-cases.bat

This file was deleted.

Loading
Loading