{"id":51784350,"url":"https://github.com/ralforion/orionbelt-ontology-builder","last_synced_at":"2026-07-20T16:00:36.904Z","repository":{"id":326440024,"uuid":"1104207460","full_name":"ralforion/orionbelt-ontology-builder","owner":"ralforion","description":"Browser-based ontology workbench for OWL ontologies and SKOS vocabularies. Streamlit + rdflib, no Java, no Protégé. Bulk operations, OWL-RL reasoning, gist upper-ontology starters, merge-aware imports, interactive vis-network graph.","archived":false,"fork":false,"pushed_at":"2026-07-11T20:15:58.000Z","size":1676,"stargazers_count":121,"open_issues_count":4,"forks_count":12,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-07-11T21:12:39.978Z","etag":null,"topics":["knowledge-graph","ontology","ontology-editor","owl","owl-editor","owl-rl","protege-alternative","python","rdf","rdf-graph","rdflib","semantic-modeling","semantic-web","skos","sparql","streamlit"],"latest_commit_sha":null,"homepage":"https://orionbelt.streamlit.app/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ralforion.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":"CLA.md"}},"created_at":"2025-11-25T22:45:40.000Z","updated_at":"2026-07-11T20:15:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ralforion/orionbelt-ontology-builder","commit_stats":null,"previous_names":["ralfbecher/orionbelt-ontology-builder","ralforion/orionbelt-ontology-builder"],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/ralforion/orionbelt-ontology-builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ralforion%2Forionbelt-ontology-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ralforion%2Forionbelt-ontology-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ralforion%2Forionbelt-ontology-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ralforion%2Forionbelt-ontology-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ralforion","download_url":"https://codeload.github.com/ralforion/orionbelt-ontology-builder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ralforion%2Forionbelt-ontology-builder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35691541,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"ssl_error","status_checked_at":"2026-07-20T02:08:09.736Z","response_time":111,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","ontology","ontology-editor","owl","owl-editor","owl-rl","protege-alternative","python","rdf","rdf-graph","rdflib","semantic-modeling","semantic-web","skos","sparql","streamlit"],"created_at":"2026-07-20T16:00:20.142Z","updated_at":"2026-07-20T16:00:36.893Z","avatar_url":"https://github.com/ralforion.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ralforion/orionbelt-ontology-builder/main/orionbelt_ontology_builder/assets/ORIONBELT_Logo.png\" alt=\"OrionBelt Logo\" width=\"400\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eOrionBelt Ontology Builder\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eA browser-based ontology workbench built with Streamlit and rdflib\u003c/strong\u003e\u003c/p\u003e\n\n[![GitHub stars](https://img.shields.io/github/stars/ralforion/orionbelt-ontology-builder?style=social)](https://github.com/ralforion/orionbelt-ontology-builder)\n[![PyPI](https://img.shields.io/pypi/v/orionbelt-ontology-builder?logo=pypi\u0026logoColor=white\u0026label=PyPI\u0026color=purple)](https://pypi.org/project/orionbelt-ontology-builder/)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL_1.1-orange.svg)](https://github.com/ralforion/orionbelt-ontology-builder/blob/main/LICENSE)\n\n[![Streamlit](https://img.shields.io/badge/Streamlit-1.28+-FF4B4B.svg?logo=streamlit\u0026logoColor=white)](https://streamlit.io)\n[![rdflib](https://img.shields.io/badge/rdflib-7.0+-2E86C1.svg)](https://rdflib.readthedocs.io)\n[![OWL-RL](https://img.shields.io/badge/OWL--RL-reasoning-green.svg)](https://owl-rl.readthedocs.io)\n[![vis-network](https://img.shields.io/badge/vis--network-9.1-97C2FC.svg)](https://visjs.github.io/vis-network/docs/network/)\n\n[![Docker Hub](https://img.shields.io/docker/v/ralforion/orionbelt-ontology-builder?logo=docker\u0026logoColor=white\u0026label=Docker%20Hub\u0026color=2496ED\u0026sort=semver)](https://hub.docker.com/r/ralforion/orionbelt-ontology-builder/tags)\n[![Docker pulls](https://img.shields.io/docker/pulls/ralforion/orionbelt-ontology-builder?logo=docker\u0026logoColor=white\u0026color=2496ED)](https://hub.docker.com/r/ralforion/orionbelt-ontology-builder)\n[![Image size](https://img.shields.io/docker/image-size/ralforion/orionbelt-ontology-builder/latest?logo=docker\u0026logoColor=white\u0026color=2496ED)](https://hub.docker.com/r/ralforion/orionbelt-ontology-builder/tags)\n\n**Try it now:** [orionbelt.streamlit.app](https://orionbelt.streamlit.app/)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ralforion/orionbelt-ontology-builder/main/orionbelt_ontology_builder/assets/OrionBelt_Ontology_Builder.png\" alt=\"OrionBelt Ontology Builder Screenshot\" width=\"800\"\u003e\n\u003c/p\u003e\n\n---\n\n## What is this?\n\nOrionBelt lets you build, edit, and maintain OWL ontologies and SKOS vocabularies in your browser. No Java, no desktop install - just `pip install` and go.\n\nIt works with **OWL ontologies** (classes as `owl:Class`, properties as `owl:ObjectProperty` / `owl:DatatypeProperty`). Pure RDFS vocabularies like schema.org that use `rdfs:Class` and `rdf:Property` are not currently surfaced in the Classes / Properties panels.\n\nIt's not trying to be Protégé. It's meant for people who want something lighter: a workbench that's easy to pick up, hard to break things with, and good enough for real ontology work.\n\n## What it's good at\n\n**Not losing your work.** Every change creates an undo checkpoint. Deletes show you what will break before you confirm. Imports show a diff so you can review before applying.\n\n**Keeping your ontology clean.** Validation catches orphan classes, duplicate labels, domain/range mismatches, missing annotations, and SKOS-specific issues like broader/narrower cycles. Not just \"you have warnings\" but \"here's what's wrong and where.\"\n\n**Moving fast in large ontologies.** Global search across everything. Usage/backlink views for any resource. Click a node in the graph and jump straight to the editor. Bulk add/edit/delete so you're not filling out forms one entity at a time.\n\n**Working with others.** Merge-aware imports with three strategies (replace, merge, merge-overwrite). Conflict detection. Prefix reconciliation. Change reports you can download. You can actually review what an import would do before committing it.\n\n---\n\n## Features\n\n### Ontology editing\n\nFull CRUD for classes, object/data properties, individuals, restrictions, relations, and annotations. Hierarchy management, rename with reference updates, and tabbed editing per entity type.\n\n### Bulk operations\n\nEvery entity page has a Bulk Operations tab:\n\n- **Add** - paste names (one per line) or CSV with headers like `Name, Label, Parent`\n- **Edit** - spreadsheet view of all entities with editable labels, comments, parents\n- **Delete** - multi-select and remove in one go\n\nAnnotations have their own bulk editor with per-row add/delete actions.\n\n### SKOS vocabularies\n\nA dedicated page for building controlled vocabularies:\n\n- Concept schemes with concept counts\n- Concepts with prefLabel, definition, broader/narrower (inverses auto-managed)\n- Hierarchy tree view, filterable by scheme\n- Full SKOS relation support (broader, narrower, related, all match types)\n- SKOS validation: missing prefLabels, orphans, duplicate labels, cycles\n\n### Templates\n\nFive starter templates you can merge into or replace your current ontology: Organization, Product Catalog, Event, Person/Contact, and SKOS Thesaurus. Each is a valid Turtle snippet with a preview before you apply it.\n\n### Upper Ontologies\n\nStart from a professionally built upper ontology instead of redefining foundational concepts for every project. Two options ship in the box:\n\n- [**gist**](https://www.semanticarts.com/gist/) by Semantic Arts — a minimalist upper ontology covering ~100 classes (Event, Person, Organization, Agreement, Specification, etc.) and ~100 properties. Select which modules to load (Core, RDFS Annotations, SubClass Assertions, Media Types) and merge or replace your current ontology.\n- [**gUFO**](https://nemo-ufes.github.io/gufo/) (gentle UFO) — a lightweight OWL implementation of the Unified Foundational Ontology, suitable for OntoUML-style conceptual modeling with kinds, roles, phases, events, situations, qualities, and relators.\n\n### Reference Ontologies\n\nA separate tab for importing widely-used domain and reference vocabularies. The loader supports both bundled vocabularies (instant) and on-demand downloads (verified against a pinned SHA256 and cached on disk). Currently ships with [**PROV-O**](https://www.w3.org/TR/prov-o/), [**FOAF**](http://xmlns.com/foaf/spec/), and [**GoodRelations**](http://www.heppnetz.de/ontologies/goodrelations/) — all bundled.\n\n### Import \u0026 export\n\n| Format    | Extension  | Import | Export |\n| --------- | ---------- | ------ | ------ |\n| Turtle    | .ttl       | ✅     | ✅     |\n| RDF/XML   | .owl, .rdf | ✅     | ✅     |\n| N-Triples | .nt        | ✅     | ✅     |\n| N3        | .n3        | ✅     | ✅     |\n| JSON-LD   | .jsonld    | ✅     | ✅     |\n\nImports on an empty ontology go straight through. Otherwise you get a review panel: diff summary, conflict table, prefix changes, import mode selector, and a downloadable change report.\n\n### Validation \u0026 reasoning\n\n- Missing labels, domains, ranges\n- Orphan classes, duplicate labels, domain/range mismatches\n- Untyped individuals\n- SKOS checks (see above)\n- RDFS and OWL-RL reasoning via owlrl\n\n### Visualization\n\nInteractive vis-network graph with class filtering, configurable node limits, click-to-navigate into the editor, Ctrl/Cmd-click a node to add it to the \"Focus on one node\" selection (narrowing the graph to its neighbourhood), hierarchy tree view, and statistics charts.\n\n### Safety\n\n- Full undo/redo with labeled checkpoints\n- Delete impact analysis before confirmation\n- Bulk operations create a single undo point\n- Namespace prefix management from the Dashboard\n\n---\n\n## Quick Start\n\n```bash\n# Clone and install\ngit clone https://github.com/ralforion/orionbelt-ontology-builder.git\ncd orionbelt-ontology-builder\nuv sync                                  # or: pip install .\n\n# Or install from PyPI\npip install orionbelt-ontology-builder\n\n# Run\nstreamlit run app.py\n```\n\nOpen http://localhost:8501\n\n### Run as a command\n\nInstalling the package also provides an `orionbelt-ontology-builder` command that\nlaunches the app for you, so there is no need to call `streamlit run` yourself:\n\n```bash\n# Install as an isolated tool and run it (uv or pipx)\nuv tool install orionbelt-ontology-builder\norionbelt-ontology-builder            # boots the app, opens the browser\n\n# Or run it one-off without installing\nuvx orionbelt-ontology-builder\npipx run orionbelt-ontology-builder\n```\n\nAny extra arguments are forwarded to Streamlit, e.g.\n`orionbelt-ontology-builder --server.port 8502`.\n\n### Use as a Python library\n\nThe app is a thin wrapper over `OntologyManager`, the rdflib-backed engine. It\nneeds no Streamlit runtime, so you can build ontologies from a script, a\nnotebook, or a CI job:\n\n```python\nfrom orionbelt_ontology_builder.ontology_manager import OntologyManager\n\nont = OntologyManager()\nont.add_class(\"Question\")\n\n# The same text format the Bulk Operations page accepts: name,label,parent\nentries = ont.parse_bulk_text(\n    \"1,,Question\\n1a,,1\",\n    default_columns=[\"name\", \"label\", \"parent\"],\n)\nresult = ont.bulk_add_classes(entries)\nprint(result[\"errors\"])  # bulk methods report per entry, they do not raise\n\nont.save_to_file(\"out.ttl\")  # format inferred from the extension, written atomically\n```\n\nThree things that are easy to trip over:\n\n- Bulk methods return `{\"created\": [...], \"errors\": [...], \"skipped\": [...]}`\n  rather than raising, so a script that ignores `errors` will look like it\n  succeeded on input it silently rejected.\n- A parent referenced by a row but never given a row of its own is declared as a\n  bare `owl:Class`, so the `rdfs:subClassOf` target is a real node. Twenty rows\n  can legitimately produce twenty-one classes.\n- `parse_bulk_text` is a `@staticmethod`, so `OntologyManager.parse_bulk_text(...)`\n  works without an instance.\n\nThe same applies to the rest of the app: classes, properties, individuals, class\nexpressions, SKOS, reasoning and export are all `OntologyManager` methods. See\n[`orionbelt_ontology_builder/ontology_manager.py`](orionbelt_ontology_builder/ontology_manager.py)\nfor the full surface.\n\nThere is no REST/HTTP API, and the `orionbelt-ontology-builder` command only\nlaunches the app. In-process Python is the way to automate it.\n\n### Run as a native desktop app\n\nPrefer a native window over a browser tab? Install the optional `desktop` extra\nand use the `orionbelt-ontology-builder-desktop` command. It runs the app in a\nnative window (via [`streamlit-desktop-app`](https://pypi.org/project/streamlit-desktop-app/),\npywebview + a real Streamlit server), so there is no browser tab to manage and no\nmanual start/stop of the server:\n\n```bash\npip install \"orionbelt-ontology-builder[desktop]\"\norionbelt-ontology-builder-desktop    # opens a native window\n```\n\nOn Linux and Windows the extra also installs PySide6 and qtpy to give pywebview a\nnative Qt rendering backend (macOS uses the system WebKit backend, so they are\nnot needed there).\n\nThe desktop window follows your OS light/dark appearance by default. Once you\npick a specific theme in the toolbar's Settings menu, that choice is remembered\nacross launches. To go back to following the system, clear the stored setting\n(delete `theme_base` from `~/.orionbelt_ontology_builder/config.json`).\n\n#### Choosing a rendering backend\n\nThe `desktop` extra uses the Qt backend, which works out of the box. On Linux you\ncan use GTK instead with the `gtk` extra (`qt` is an explicit alias for the Qt\ndefault):\n\n```bash\npip install \"orionbelt-ontology-builder[gtk]\"\n```\n\nGTK needs system packages that pip cannot install. On Debian/Ubuntu:\n\n```bash\nsudo apt install python3-gi gir1.2-gtk-3.0 gir1.2-webkit2-4.1 \\\n    libgirepository1.0-dev\n```\n\nThe launcher auto-selects whichever backend is installed; set `PYWEBVIEW_GUI=qt`\nor `PYWEBVIEW_GUI=gtk` to override.\n\nThis is fully opt-in: the plain install and the `orionbelt-ontology-builder`\ncommand above are unchanged.\n\n#### Upgrading\n\n`uv tool upgrade` can occasionally leave the tool's environment inconsistent\n(for example the app's Streamlit server quitting when you switch to a tab). If\nthe app misbehaves after an upgrade, do a clean reinstall, keeping your backend\nextra (issue #95):\n\n```bash\nuv tool uninstall orionbelt-ontology-builder\nuv tool install \"orionbelt-ontology-builder[qt]\"   # or [gtk]; omit the extra for the browser-only command\norionbelt-ontology-builder-desktop                 # start it once\n```\n\n### Local file storage\n\nWhen you launch the app locally (the `orionbelt-ontology-builder` command or the\nnative desktop window), it persists to disk instead of browser storage:\n\n- **Crash recovery.** With no linked file set, your working ontology is saved to\n  a recovery file under `~/.orionbelt_ontology_builder/` on every change, so an\n  unexpected close (crash, freeze) is recovered automatically on the next launch.\n  When a linked file is set it becomes the store (below), and the recovery file\n  is only written as a fallback if a linked-file write fails — so each change is\n  one write, not two.\n- **Linked working file.** Use the sidebar's \"Linked working file\" control to\n  point the app at any file path. If the file already exists, you choose whether\n  to **load it** into the workspace (the default, so pointing at an existing\n  ontology opens it) or **overwrite** it with the current ontology; a new path is\n  created from your current work. Once linked, the file tracks your working\n  ontology and is loaded again on startup. Point it at a synced folder\n  (Nextcloud, Dropbox, ...) for fully automatic off-machine backups. The format\n  follows the file extension (`.ttl`, `.owl`/`.rdf`, `.nt`, `.n3`, `.jsonld`;\n  Turtle if unknown).\n\nAutosave is gated on actual edits and debounced, so normal clicking around does\nno work even for large ontologies — the graph is serialized straight to a temp\nfile and atomically swapped in only after edits settle (and immediately after an\nimport or a new-ontology action). The sidebar shows \"Saved to disk\" only once\nthat write completes, so a crash can lose at most the last second or two of\nedits. If a linked or recovery file can't be read or parsed on startup, disk\nautosave is paused (with a sidebar notice) so the unreadable file is never\noverwritten. The hosted demo on Streamlit Cloud has no local filesystem, so it\nkeeps using per-browser autosave instead — which shares the same dirty/debounced\nscheduling and disables itself (until the graph shrinks) when an ontology exceeds\nthe browser storage quota.\n\n### Run with Docker\n\nA prebuilt image is published to Docker Hub. No local Python setup required:\n\n```bash\ndocker run --rm -p 8501:8501 ralforion/orionbelt-ontology-builder\n```\n\nThen open http://localhost:8501. Use `:1.16.7` to pin a specific version instead of `latest`.\n\nTo build the image yourself from a checkout:\n\n```bash\ndocker build -t ralforion/orionbelt-ontology-builder .\ndocker run --rm -p 8501:8501 ralforion/orionbelt-ontology-builder\n```\n\nThe container runs Streamlit headless on `0.0.0.0:8501` as a non-root user.\n\n### Upload size limit\n\nImported files are capped at **200 MB** by default (Streamlit's `maxUploadSize`).\nTo import larger ontologies, raise the limit in `.streamlit/config.toml`:\n\n```toml\n[server]\nmaxUploadSize = 1000   # MB\n```\n\nor pass it at launch:\n\n```bash\nstreamlit run app.py --server.maxUploadSize 1000\n```\n\nParsing happens in memory, so the practical ceiling is the host machine's\navailable RAM rather than this setting. The hosted demo is RAM-limited and keeps\nthe 200 MB default; raise the value only when self-hosting with enough memory.\n\n---\n\n## Pages\n\n| Page                | What it does                                                   |\n| ------------------- | -------------------------------------------------------------- |\n| **Dashboard**       | Metadata, base URI, statistics, prefix management, validation  |\n| **Classes**         | Class hierarchy, CRUD, bulk operations                         |\n| **Properties**      | Object \u0026 data properties, CRUD, bulk operations                |\n| **Individuals**     | Instance management, property assertions, bulk operations      |\n| **Relations**       | Class, property, and individual relations                      |\n| **Restrictions**    | OWL restrictions and cardinality constraints                   |\n| **Advanced**        | Advanced OWL features                                          |\n| **Annotations**     | RDFS, SKOS, Dublin Core annotations with bulk editing          |\n| **SKOS Vocabulary** | Concept schemes, concepts, hierarchy, SKOS validation          |\n| **Import / Export** | File import with merge review, export, new ontology, templates |\n| **Source**          | Live Turtle source view of the ontology                        |\n| **Validation**      | Ontology validation and OWL reasoning                          |\n| **Visualization**   | Interactive graph (OWL + SKOS), hierarchy tree, statistics     |\n\n## Project structure\n\n```\norionbelt-ontology-builder/\n├── app.py                              # Streamlit Cloud entry point (delegates to package)\n├── ontology_manager.py                 # Backward-compat shim\n├── templates.py                        # Backward-compat shim\n├── orionbelt_ontology_builder/         # The actual installable package\n│   ├── app.py                          # Streamlit UI\n│   ├── ontology_manager.py             # Core OWL/SKOS engine (rdflib)\n│   ├── templates.py                    # Built-in templates / upper / reference ontologies\n│   ├── samples/                        # Bundled gist, gUFO, FOAF, PROV-O, GoodRelations, …\n│   ├── lib/                            # Frontend libraries (vis-network, Tom Select)\n│   ├── assets/                         # Logos and screenshots\n│   └── favicon.png\n├── pyproject.toml                      # Project metadata\n└── tests/                              # pytest suite\n```\n\nDependencies: streamlit, rdflib, owlrl, networkx, pyvis.\n\n---\n\n## Companion Project\n\n### [OrionBelt Analytics](https://github.com/ralfbecher/orionbelt-analytics)\n\nAn ontology-based MCP server that analyzes relational database schemas (PostgreSQL, Snowflake, Dremio) and generates RDF/OWL ontologies with embedded SQL mappings. Together with the Ontology Builder, they form a toolkit for ontology-driven data modeling.\n\n## License\n\nCopyright 2025–2026 [RALFORION d.o.o.](https://ralforion.com)\n\nLicensed under the [Business Source License 1.1](LICENSE). The Licensed Work will convert to Apache License 2.0 on 2030-03-30.\n\nBy contributing to this project, you agree to the [Contributor License Agreement](CLA.md).\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://ralforion.com\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/ralforion/orionbelt-ontology-builder/main/orionbelt_ontology_builder/assets/RALFORION_doo_Logo.png\" alt=\"RALFORION d.o.o.\" width=\"200\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eCopyright © 2026 RALFORION d.o.o.\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eOrionBelt® is a registered trademark of RALFORION d.o.o.\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fralforion%2Forionbelt-ontology-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fralforion%2Forionbelt-ontology-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fralforion%2Forionbelt-ontology-builder/lists"}