The complexity of regulatory requirements overwhelms financial institutions. The Financial Industry Business Ontology (FIBO) is key to better Data Management.

The article shows how to load XBRL Bank Call Reports (FFIEC 031) into the Financial Industry Business Ontology.
US banks must file quarterly Consolidated Report of Condition and Income. (a.k.a. Call or RC report).

  • The Federal Deposit Insurance Corporation is author and auditor.
  • The Federal Financial Institution Examination Council (FFIEC) is an interagency body serving FDIC, Federal Reserve and other agencies. FFIEC prescribes standards and forms, processes filings and disseminates reports to the public.

The Call report format is XBRL.

Semantic Compliance® and ETL

We all have done Extract, Transform and Load in conventional IT. The semantic data migration model  is no different. The critical point is that the Staging Area is in Ontology Web Language (OWL). Thus uniform Semantic rules address the critical business logic and transformation rules.

1. Extract XBRL source into Ontology Staging 2.Transform staging data and load into FIBO

Semantic ETL

The previous post, “yet another XBRL Ontology” explained step 1, extracting XBRL taxonomy and loading instance data into Ontology Staging. This post continues with step 2, transforming the FFIEC data into FIBO class instances. Here is more detailed PowerPoint Tutorial.

Our example takes the Call Report ENT (entity) schedule. The reference data about the filing bank populates FIBO Corporation, Depository Institution, Address, some Monetary Items and related classes.

We graphically map FFIEC XBRL MDRM into FIBO classes

XBRL separates reporting items (instance.ttl) from the report structure (xlink.ttl and linkbase.ttl). This simplifies the data import. All reporting items are defined as subclasses of instance:item. There are over 4000 in the FFIEC taxonomy.

FFIEC MDRM mapping to FIBO Legal Entity Identifier

RCON9224 is the MDRM element for the Legal Entity Identifier (LEI). We map the element to FIBO Legal Entity Identifier class. We also map the value to the FIBO data property. The inference engine will construct:

  • an instance of Legal Entity Identifier
  • a data property, Unique Identifier

For each target class, we must specify how to build the unique identifier, the URI. The ideal case is meaningful ID that does not change. We use the LEI to create URI for bank, address and the monetary amount.

The inference engine (Reasoner) populates FIBO.

We run the inference engine out of Topbraid, the ontology development platform. It take quite a while because in development we include the full FIBO ontology. Then we validate FIBO data, mapping, and lineage.

Data, mapping and Lineage – everything is a triple.

The Legal Entity Identifier class has a new instance.

Populated FIBO Legal Entity Identifier resource form

The source instance points to the original FFIEC instance.
A SPARQL rule has populated the link to the FIBO Corporation instance.
The unique identifier shows the correct LEI.

The resource graph shows populated FIBO instances and their relationships.

FIBO (JPM Chase) instances and their relationships.

FIBO differentiates between the Agent (Stock Corporation) and the Role (Depository Institution) it plays. The two are connected via the hasIdentity object property. The Legal Entity Identifier identifies the Corporation.

The Corporation has a registered Address. Address links to state and country, already in FIBO. The ontology stores Capital (and others) as Monetary Amount. The number plus semantics, like currency and date.

The Depository Institution (not the corporation!) has an FDIC Certificate number. We use this number to create the URI. The certificate ties up to FDIC and FDIC directory, already in FIBO.

The mapping query lists source to target class.

FFIEC mapping to FIBO query and result set

Mapping is in triples.

The lineage graph connects FIBO to Call Report instances via the hasSourceInstance property.

FIBO to FFIEC lineage graph

Lineage is in triples. We can query where the data is coming from.

SELECT ?fibo_class ?fibo_inst ?call_cert_inst ?ffiec_class ?xml_tag
   ?fibo_inst fro-ref:hasSourceInstance ?call_cert_inst .
   ?call_cert_inst a ?ffiec_class .
   ?fibo_inst a ?fibo_class .
   ?ffiec_class sxml:tag ?xml_tag

The lineage query results trace the FIBO instance back to its XBRL source record.

[fibo_class] fibo_inst call_cert_inst ffiec_class xml_tag
fibo-be-le-cb:StockCorporation fibo-be-le-cb:StockCorporation_LEI_7H6GLXDRUGQFU57RNE97 BankOntology/data/Call_Cert628_093016.xml#r-2169> ffiec-concept:RSSD9017
fibo-be-le-lei:LegalEntityIdentifier fibo-be-le-lei:LegalEntityIdentifier_LEI7H6GLXDRUGQFU57RNE97 BankOntology/data/Call_Cert628_093016.xml#r-1084> ffiec-concept:RCON9224
fibo-fbc-fct-fse:DepositoryInstitution fibo-fbc-fct-fse:DepositoryInstitution_LEI_7H6GLXDRUGQFU57RNE97 BankOntology/data/Call_Cert628_093016.xml#r-2169> ffiec-concept:RSSD9017
fibo-fbc-fct-usjrga:FDICCertificateNumber fibo-fbc-fct-usjrga:FDICCertificateNumber_628 BankOntology/data/Call_Cert628_093016.xml#r-642> ffiec-concept:RSSD9050
fibo-fbc-fct-usjrga:FDICRegistryEntry fibo-fbc-fct-usjrga:FDICRegistryEntry_628 BankOntology/data/Call_Cert628_093016.xml#r-642> ffiec-concept:RSSD9050
fibo-fnd-acc-aeq:RetainedEarnings fibo-fnd-acc-aeq:RetainedEarnings_LEI_7H6GLXDRUGQFU57RNE97 BankOntology/data/Call_Cert628_093016.xml#r-809> ffiec-concept:RCFD3632

Conceptual integration model, namespaces and imports

You can follow the hyperlinks to the base namespaces.

FFIEC, FIBO conceptual integration model

The FFIEC Call Report  imports XBRL.

As the upper/core ontology FIBO is on top of the owl imports.

Financial Regulation Ontology has entities common for Banks, Funds, Hedge funds and Insurance. So it is the domain to hold the XBRL ontology. FinRegOnt imports FIBO and a Legal Ontology.

Bank Ontology holds the reverse engineered FFIEC taxonomy. It imports the XBRL classes from FinRegOnt.

To try it out, just create a “My Bank” set of ontologies, importing the bank ontology.


We populated FIBO from the FFIEC Staging area. Not only data, but also mapping and lineage is stored in RDF triples and can be queried with SPARQL.

Industry standards and compliance are excellent drivers for FIBO implementation, because they have good definitions and clean data. Semantic compliance with FIBO reduces data management complexity, because data, mapping, lineage – everything is a triple.

Yes, The reverse works as well. We can add and update data in FIBO and populate the Staging area. The staging ontology instances export to FFIEC compliant XBRL. (a good topic for the next post).


  1. Tutorials
    1. The XBRL Bank Call Report (FFIEC 031) in FIBO
      More detailed presentation of both “yet another” posts.
    2. Financial Regulation Ontology chapter one has an into to OWL, FIBO, and the Legal reference ontology. There is also a getting started with Protégé section.
    3. Chapter two Loading the Law two shows XML source import in depth for Code of Federal Regulations and United States Code.
  2. XBRL Ontology:  Includes links to the ontology files and documentation.
  3. Bank ontology: directories, files and prefixes
  4. XBRL consortium, US website:
  5. FFIEC taxonomy and data download:
  6. Topbraid Composer website: