The RDF, OWL and SHACL alternative: operational ontologies on SQL
Synalog describes only what your data contains, in one closed-world language that compiles to SQL on your existing databases.
SynaLemma vs RDF, OWL and SHACL at a glance
| Criterion | SynaLemma | RDF, OWL, SHACL |
|---|---|---|
| What the ontology describes | Only the concepts your data contains, computed from your tables | A domain, for publishing and linking |
| Logic | Closed world, like your database | Open world: a missing fact is unknown |
| Languages | One: rules, queries and assertions | RDF, OWL, SHACL, SPARQL, plus R2RML to reach SQL |
| Where it runs | Compiles to SQL on your existing databases | A triple store, or mappings to relational tables |
| Totals, averages, rankings | Part of the language, with recursion and negation | Outside OWL reasoning: written in SPARQL |
| Checks | A verifier proves every rule terminates; assertions check the data | Reasoners check consistency; SHACL validates data |
| Time to the first answer | The layer grows from the first question | Modelling up front, commonly months or years |
Why teams look for an alternative to RDF, OWL and SHACL
-
Open world
In OWL, a missing fact is unknown, not false (OWL 2 primer).
-
Four languages
RDF, OWL, SHACL and SPARQL, plus R2RML to reach relational tables (R2RML).
-
A triple store or mappings
The data has to move or be mapped.
-
No business aggregates in OWL
Totals, averages and rankings are written in SPARQL.
-
Modelling up front
Ontology projects commonly take months or years before the first answer.
SynaLemma vs RDF, OWL and SHACL: key differences
-
Operational ontologies
Only the concepts and relationships your data contains, each one computed from your tables.
-
Closed world
What is not in the data is false, as in your database. Assertions check the data directly.
-
One language on SQL
Rules, queries and assertions in Synalog, compiled to SQL on PostgreSQL, BigQuery, Databricks, Trino, Presto, DuckDB and SQLite.
-
Reasoning with aggregates
Recursion, aggregation, negation and time in one program, verified to terminate.
-
No modelling project first
The analyst writes rules as questions are asked. The layer grows from the first question.
Example: a closed-world check
Revenue per customer, with three assertions. The second one is the check OWL's open world cannot make on its own. Customer 12 is missing; the engine names the row.
Order(order_id:, customer_id:, amount:, status:) :- orders(order_id:, customer_id:, amount:, status:);
Customer(customer_id:, country:) :- customers(customer_id:, country:);
@Assert(Revenue,
one_row_per_customer: "∀ c r s, Revenue c r → Revenue c s → r = s",
known_customer: "∀ c r, Revenue c r → ∃ k, Customer c k",
positive: "∀ c, Revenue c > 0");
Revenue(customer_id:, revenue? += amount) distinct :-
Order(customer_id:, amount:, status: "delivered"); RDF, OWL and SHACL alternative: FAQ
What is an operational ontology?
An ontology that describes only the concepts and relationships your data contains, each computed from your tables.
Do I need a triple store or a graph database?
No. Synalog compiles to SQL and runs on your existing databases. Graph queries are recursive rules.
Can Synalog check that every order has a customer?
Yes, with an assertion. Synalog is closed-world, so the engine returns the rows with no customer.
Sources
- W3C: OWL 2 Web Ontology Language Primer
- W3C: Shapes Constraint Language (SHACL)
- W3C: R2RML, RDB to RDF Mapping Language
- W3C: SPARQL 1.1 Query Language
- Synalog on GitHub (Apache-2.0)
Checked against each product's public documentation on the review date. To report an error: contact@synalinks.com.
Other comparisons
Bring a question your current stack can't answer.
In 30 minutes, we show SynaLemma answering it, with the rule behind the number and the checks it passed.