{"id":13781522,"url":"https://github.com/citiususc/yatter","last_synced_at":"2025-07-11T10:08:44.642Z","repository":{"id":48710087,"uuid":"349481694","full_name":"citiususc/yatter","owner":"citiususc","description":"Translate YARRRML into easy-to-read [R2]RML mappings","archived":false,"fork":false,"pushed_at":"2025-05-01T07:16:33.000Z","size":994,"stargazers_count":22,"open_issues_count":6,"forks_count":7,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-09T13:06:04.421Z","etag":null,"topics":["knowledge-graph","mapping-languages","rml","yarrrml"],"latest_commit_sha":null,"homepage":"https://doi.org/10.5281/zenodo.7024500","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/citiususc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-03-19T16:08:16.000Z","updated_at":"2025-05-01T07:16:37.000Z","dependencies_parsed_at":"2024-01-16T05:07:03.490Z","dependency_job_id":"0c08a5ab-154c-499c-9ae9-2d3e3cd69a9c","html_url":"https://github.com/citiususc/yatter","commit_stats":null,"previous_names":["oeg-upm/yarrrml-translator","oeg-upm/pretty-yarrrml2rml","oeg-upm/yatter"],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/citiususc%2Fyatter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/citiususc%2Fyatter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/citiususc%2Fyatter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/citiususc%2Fyatter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/citiususc","download_url":"https://codeload.github.com/citiususc/yatter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253588556,"owners_count":21932277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["knowledge-graph","mapping-languages","rml","yarrrml"],"created_at":"2024-08-03T18:01:26.776Z","updated_at":"2025-07-11T10:08:44.635Z","avatar_url":"https://github.com/citiususc.png","language":"Python","funding_links":[],"categories":["Mapping Translators"],"sub_categories":["Previous RML version (and extensions)"],"readme":"# YATTER\n\u003cp align=\"center\"\u003e\n  \u003cimg title=\"logo\" alt=\"YATTER\" src=\"https://raw.githubusercontent.com/citiususc/yatter/main/logo/logo.png\"  width=\"300\" height=\"300\"/\u003e\n\u003c/p\u003e\n\n\n![GitHub](https://img.shields.io/github/license/citiususc/yatter?style=flat)\n[![Test](https://github.com/citiususc/yatter/actions/workflows/testgha.yml/badge.svg)](https://github.com/citiususc/yatter/actions/workflows/testgha.yml)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7024501.svg)](https://doi.org/10.5281/zenodo.7024501)\n[![PyPI](https://img.shields.io/pypi/v/yatter?style=flat)](https://pypi.org/project/yatter)\n![GitHub Release Date](https://img.shields.io/github/release-date/citiususc/yatter)\n[![codecov](https://codecov.io/gh/citiususc/yatter/branch/main/graph/badge.svg?token=QUWCG214SG)](https://codecov.io/gh/citiususc/yatter)\n\nThe tool translates mapping rules from YARRRML in a turtle-based serialization of RML or R2RML.\n\n## Installation:\n```\npip install yatter\n```\n\n## Execution from CLI\nTo execute from command line run the following:\n\n- From YARRRML to \\[R2\\]RML\n```bash\npython3 -m yatter -i path_to_input_yarrrml.yml -o path_to_rdf_mapping.ttl [-f R2RML]\n```\n\n- From \\[R2\\]RML to YARRRML \n```bash\npython3 -m yatter -i path_to_input_rdf_mapping.ttl -o path_to_output_yarrrml.yml [-f R2RML]\n```\n\n`-f R2RML` is an optional parameter for translating input YARRRML to R2RML (and inverse)\n\n## Execution as a library\n\nIf you want to include the module in your implementation:\n- for translating **YARRRML mapping** to **RML mappings** (and inverse):\n```python\nimport yatter\nfrom ruamel.yaml import YAML\n# YARRRML to RML\nyaml = YAML(typ='safe', pure=True)\nrml_content = yatter.translate(yaml.load(open(\"path-to-yarrrml\")))\n# RML to YARRRML\nyarrrml_content = yatter.inverse_translate(\"rdf_mapping_content\")\n```\n- for translating **YARRRML mappings** to **R2RML mappings** (and inverse):\n```python\nimport yatter\nfrom ruamel.yaml import YAML\n\nR2RML_URI = 'http://www.w3.org/ns/r2rml#'\n# YARRRML to R2RML\nyaml = YAML(typ='safe', pure=True)\nrml_content = yatter.translate(yaml.load(open(\"path-to-yarrrml\")), mapping_format=R2RML_URI)\n# R2RML to YARRRML\nyarrrml_content = yatter.inverse_translate(\"rdf_mapping_content\", mapping_format=R2RML_URI)\n```\n- for merging TriplesMap based on id:\n```python\nimport yatter\nlist_yarrrml_mappings = [\"content_mapping_yarrrml1\", \"content_mapping_yarrrml1\"]\nyarrrml_content = yatter.merge_mappings(list_yarrrml_mappings)\n```\n\n## Specifications conformant:\n\nThese are the following specifications used by the translation process:\n- YARRRML: https://w3id.org/kg-construct/yarrrml\n- R2RML: https://www.w3.org/TR/r2rml/ \n- RML: https://rml.io/spec \n- RML-star: https://w3id.org/rml/star/spec\n- RML-IO: https://w3id.org/rml/io/spec\n- RML-FNML: https://w3id.org/rml/fnml/spec\n- RML-CC: https://w3id.org/rml/cc/spec\n\nTo be implemented soon:\n- RML-core: https://w3id.org/rml/core/spec \n\n\n## Cite this work:\nIf you used Yatter in your work, please cite the [ICWE2023](https://icwe2023.webengineering.org/program/) [paper](http://davidchavesfraga.com/outcomes/papers/2023/iglesias2023yatter.pdf):\n\n```bib\n@inproceedings{iglesias2023human,\n  title={Human-Friendly RDF Graph Construction: Which One Do You Chose?},\n  author={Iglesias-Molina, Ana and Chaves-Fraga, David and Dasoulas, Ioannis and Dimou, Anastasia},\n  booktitle={International Conference on Web Engineering},\n  pages={262--277},\n  year={2023},\n  doi={10.1007/978-3-031-34444-2_19},\n  organization={Springer}\n}\n```\n\n## Authors\nCiTIUS - Universidade de Santiago de Compostela (2023-now):\n- [David Chaves-Fraga](mailto:david.chaves@usc.es)\n- Rubén Buján Vide (Final bachelor thesis - Mapping normalization, RML-cc and library management)\n\nOntology Engineering Group - Universidad Politécnica de Madrid (2021-2023):\n- David Chaves-Fraga\n- Marino González García (Final bachelor thesis - Systematic Testing)\n- Luis López Piñero (Final bachelor thesis - v0.1)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcitiususc%2Fyatter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcitiususc%2Fyatter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcitiususc%2Fyatter/lists"}