2 · FIBO Reuse and the OWL 2 QL Profile

Why FIBO is *the* upper ontology for finance, and why QL is the only profile that makes OBDA tractable.

0/2 done

Theory — FIBO and QL

FIBO in two paragraphs

FIBO (Financial Industry Business Ontology, EDM Council) is the de-facto OWL ontology for financial concepts. It defines legal entities, parties, instruments, contracts, accounts, dates — all the vocabulary banks already use, formalised. Major regulators (FRB, ECB) actively endorse it.

The disciplined move: subclass FIBO, don't replace it. A :ReportableCounterparty is just a fibo:LegalPerson with an extra reporting predicate. Three lines of Turtle.

What OWL 2 QL allows (and doesn't)

QL is deliberately the smallest OWL 2 profile — every axiom in it must be rewritable into SQL on a relational schema. What QL allows:

  • rdfs:subClassOf (between named classes only)
  • rdfs:subPropertyOf, owl:inverseOf, rdfs:domain, rdfs:range
  • owl:disjointWith (class disjointness)
  • Existential restrictions on the right-hand side only (A subClassOf hasX some Y)

What QL forbids (and why):

  • Functional / inverse-functional properties — they would require row-level uniqueness checks beyond what query rewriting can express.
  • owl:equivalentClass between complex expressions — would push reasoning out of AC0.
  • Universal restrictions (only) — same.
  • Number restrictions (cardinality 2) — same.

The pay-off: SPARQL gets rewritten into a single SQL query that the DWH planner optimises. The ontology costs nothing at runtime beyond a constant factor.

The trade-off in one line

MedaCore (DL) reasons; NorthWind (EL) classifies; Atlas (QL) rewrites.

Reflect

QL is the profile most underused in industry — most teams default to DL because tooling defaults to DL. When the job is reporting over an existing warehouse, QL is almost always the right answer.

  • Which datasets in your organisation could expose virtual RDF tomorrow if you wrote a 30-line R2RML mapping?
  • What would change in your CI if every ontology had to pass `validate-profile --profile QL`?

Reading in progress · 0 of 2 activities done