BURP (Basic and Unassuming RML Processor) is a reference implementation for the new RML specification 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. 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.
Warning: Joins are quadratic, in terms of iterations and number of multivalued join conditions values.
| RML module | Test Cases: Pass / Fail / Total |
|---|---|
| RML-Core | ✔️ 76 / 0 / 76 |
| RML-IO | 🚧 54 / 19 / 73 |
| RML-IO-Registry | ✔️ 52 / 50 / 102 Details below |
| RML-CC | ✅ 35 / 0 / 35 |
| RML-FNML | ✅️ 19 / 1 / 20 |
| RML-Star | ❌ Not implemented |
| RML-LV | ✅️ 41 / 0 / 41 |
| RER | 🪅 Demo implementation |
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 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
The run the R2RML processor, execute the following command:
$ java -jar burp.jar [-h] [-b=<baseIRI>] -m=<mappingFile> [-o=<outputFile>]A fat jar is provided with the Gradle Shadow plugin.
Usage: burp [-h] [-b=<baseIRI>] -m=<mappingFile> [-o=<outputFile>]
-b, --baseIRI=<baseIRI> Used in resolving relative IRIs produced by the RML mapping
-h, --help Display a help message
-m, --mappingFile=<mappingFile>
The RML mapping file
-o, --outputFile=<outputFile>
The output file
If no outputFile is provided and the RML mapping does not rely on RML-IO for targets, then the output is written to the standard output.
BURP can be extended by providing additional logical source providers (for new input sources) and custom RML-FNML functions. BURP discovers extensions on the classpath using Java's ServiceLoader mechanism.
For complete documentation, see ExtensionPoints.md
What you can extend:
- Logical source providers (
burp.ls.LogicalSourceProvider) — add support for new reference formulations or custom source types - RML functions (
burp.model.fnmlutil.RMLFunction) — provide custom function behavior for FNML mappings
Quick example:
# Run BURP with your extension JAR on the classpath
java -cp "burp.jar:your-extension.jar" burp.Main -m mapping.ttl -o output.ttlTo build the project, you will need Java, Kotlin and Gradle (via ./gradlew).
./gradlew buildTo package the fat JAR (Shadow JAR):
./gradlew clean shadowJarThe tests rely on Docker for mappings on MySQL, PostgreSQL, and MSSQL.
To update resources from specifications:
./gradlew fetchTestCases
./gradlew fetchVocabularyAndShapes- Set the version in build.gradle.kts, then commit
git add build.gradle.kts README.md
git commit -m "release: v0.1.4"- Create an annotated tag with a description (they can be reused as GitHub release notes)
git tag -a v0.1.4 -m "v0.1.4\n\n- short release notes here"- Push commit and tag
git push
git push origin v0.1.4- Build release artefact
./gradlew clean shadowJar- Create the GitHub release with the shadow jar and reusable the release notes
gh release create v0.1.4 build/libs/burp.jar --notes-from-tagIf 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:
@inproceedings{DBLP:conf/kgcw/AsscheD24,
author = {Dylan {Van Assche} and Christophe Debruyne},
editor = {David Chaves{-}Fraga and Anastasia Dimou and
Ana Iglesias{-}Molina and Umutcan Serles and
Dylan {Van Assche}},
title = {BURPing Through {RML} Test Cases},
booktitle = {Proceedings of the 5th International Workshop on Knowledge Graph Construction
co-located with 21th Extended Semantic Web Conference ({ESWC} 2024),
Hersonissos, Greece, May 27, 2024},
series = {{CEUR} Workshop Proceedings},
volume = {3718},
publisher = {CEUR-WS.org},
year = {2024},
url = {https://ceur-ws.org/Vol-3718/paper4.pdf}
}
BURP is released under the MIT license.