Skip to main content
PyPI version Python versions License Build status

Overview

XBridge is a Python library for converting XBRL-XML files into XBRL-CSV files using the EBA (European Banking Authority) taxonomy. It provides a simple, reliable way to transform regulatory reporting data from XML format to CSV format.

The library supports EBA Taxonomy versions 4.2, 4.2.1, 4.3 and 4.4 (phase 1, draft) and includes support for DORA (Digital Operational Resilience Act) CSV conversion. The library must be updated with each new EBA taxonomy version release.

Key Features

  • XBRL-XML to XBRL-CSV Conversion: Seamlessly convert XBRL-XML instance files to XBRL-CSV format

  • OneGate Envelope Support: Transparently unwrap XBRL instances delivered inside a OneGate XbrlDeclarationReport message envelope

  • Command-Line Interface: Quick conversions without writing code using the xbridge CLI

  • Python API: Programmatic conversion for integration with other tools and workflows

  • EBA Taxonomy 4.2/4.2.1/4.3/4.4 Support: Built for the latest EBA taxonomy specification

  • DORA CSV Conversion: Support for Digital Operational Resilience Act reporting

  • Standalone Validation: Validate XBRL-XML and XBRL-CSV files against structural and EBA rules via CLI or Python API

  • Configurable Validation: Flexible filing indicator validation with strict or warning modes

  • Decimal Handling: Intelligent decimal precision handling with configurable options

  • Type Safety: Fully typed codebase with MyPy strict mode compliance

  • Python 3.9+: Supports Python 3.9 through 3.13

Prerequisites

  • Python: 3.9 or higher

  • 7z Command-Line Tool: Required for loading compressed taxonomy files (7z or ZIP format)

    • On Ubuntu/Debian: sudo apt-get install p7zip-full

    • On macOS: brew install p7zip

    • On Windows: Download from 7-zip.org

Installation

Install XBridge from PyPI using pip:

pip install eba-xbridge

For development installation, see CONTRIBUTING.md.

Quick Start

XBridge offers two ways to convert XBRL-XML files to XBRL-CSV: a command-line interface (CLI) for quick conversions, and a Python API for programmatic use.

Command-Line Interface

The CLI provides a quick way to convert files without writing code:

# Basic conversion (output to same directory as input)
xbridge instance.xbrl

# Specify output directory
xbridge instance.xbrl --output-path ./output

# Continue with warnings instead of errors
xbridge instance.xbrl --no-strict-validation

# Include headers as datapoints
xbridge instance.xbrl --headers-as-datapoints

# Validate before and after conversion
xbridge instance.xbrl --validate

# Validate with EBA-specific rules
xbridge instance.xbrl --validate --eba

CLI Options:

  • --output-path PATH: Output directory (default: same as input file)

  • --headers-as-datapoints: Treat headers as datapoints (default: False)

  • --strict-validation: Raise errors on validation failures (default: True)

  • --no-strict-validation: Emit warnings instead of errors

  • --validate: Run validation before and after conversion (default: False)

  • --eba: Enable EBA-specific validation rules (only applies with --validate)

For more CLI options, run xbridge --help.

Python API - Basic Conversion

Convert an XBRL-XML instance file to XBRL-CSV using the Python API:

from xbridge.api import convert_instance

# Basic conversion
input_path = "path/to/instance.xbrl"
output_path = "path/to/output"

convert_instance(input_path, output_path)

The converted XBRL-CSV files will be saved as a ZIP archive in the output directory.

Python API - Advanced Usage

Customize the conversion with additional parameters:

from xbridge.api import convert_instance

# Conversion with custom options
convert_instance(
    instance_path="path/to/instance.xbrl",
    output_path="path/to/output",
    headers_as_datapoints=True,  # Treat headers as datapoints
    validate_filing_indicators=True,  # Validate filing indicators
    strict_validation=False,  # Emit warnings instead of errors for orphaned facts
)

# Validate-convert-validate pipeline
from xbridge.exceptions import ValidationError

try:
    convert_instance(
        instance_path="path/to/instance.xbrl",
        output_path="path/to/output",
        validate=True,   # Enable pre/post-conversion validation
        eba=True,         # Include EBA-specific rules
    )
except ValidationError as e:
    print(f"Validation failed: {e}")
    if e.path:
        print(f"Output was written to: {e.path}")
    for section in e.results.values():
        for code, findings in section["errors"].items():
            for f in findings:
                print(f"  [{f['severity']}] {f['rule_id']}: {f['message']}")

Python API - Handling Warnings

XBridge emits structured warnings that can be filtered or turned into errors from your code. The most common ones are:

  • IdentifierPrefixWarning: Unknown entity identifier prefix; XBridge falls back to rs.

  • FilingIndicatorWarning: Filing indicator inconsistencies; some facts are excluded.

To capture these warnings when using convert_instance:

import warnings
from xbridge.api import convert_instance
from xbridge.exceptions import XbridgeWarning, FilingIndicatorWarning

input_path = "path/to/instance.xbrl"
output_path = "path/to/output"

with warnings.catch_warnings(record=True) as caught:
    # Ensure all xbridge warnings are captured
    warnings.simplefilter("always", XbridgeWarning)

    zip_path = convert_instance(
        instance_path=input_path,
        output_path=output_path,
        validate_filing_indicators=True,
        strict_validation=False,  # Warnings instead of errors for orphaned facts
    )

filing_warnings = [
    w for w in caught if issubclass(w.category, FilingIndicatorWarning)
]
for w in filing_warnings:
    print(f"Filing indicator warning: {w.message}")

To treat all XBridge warnings as errors:

import warnings
from xbridge.api import convert_instance
from xbridge.exceptions import XbridgeWarning

with warnings.catch_warnings():
    warnings.simplefilter("error", XbridgeWarning)
    convert_instance("path/to/instance.xbrl", "path/to/output")

Validation - Command-Line Interface

The validate subcommand checks XBRL instance files against structural and regulatory rules without performing conversion:

# Validate an XBRL-XML file
xbridge validate instance.xbrl

# Enable EBA-specific rules (entity, currency, decimals, etc.)
xbridge validate instance.xbrl --eba

# Validate an XBRL-CSV package
xbridge validate report.zip --eba

# Skip structural checks for xbridge-generated CSV output
xbridge validate output.zip --eba --post-conversion

# Get machine-readable JSON output
xbridge validate instance.xbrl --eba --json

Validate Options:

  • --eba: Enable EBA-specific validation rules (default: False)

  • --post-conversion: Skip structural checks guaranteed by xbridge’s converter (CSV only, default: False)

  • --json: Output findings as JSON instead of human-readable text

The validate command exits with code 0 when no errors are found, and 1 when at least one ERROR-level finding is present.

For more options, run xbridge validate --help.

Validation - Python API

Validate XBRL files programmatically using the validate() function:

from xbridge.validation import validate

# Validate an XBRL-XML file
results = validate("path/to/instance.xbrl")

# Enable EBA-specific rules
results = validate("path/to/instance.xbrl", eba=True)

# Validate an XBRL-CSV package
results = validate("path/to/report.zip", eba=True)

The validate() function returns a dictionary keyed by validation scope ("XBRL" always present, "EBA" when eba=True). Each scope contains "errors" and "warnings" dicts keyed by rule code:

from xbridge.validation import validate

results = validate("path/to/instance.xbrl", eba=True)

for scope, section in results.items():
    for code, findings in section["errors"].items():
        for f in findings:
            print(f"[{scope}] [{f['severity']}] {f['rule_id']}: {f['message']}")
            print(f"  Location: {f['location']}")

error_count = sum(
    len(v) for section in results.values() for v in section["errors"].values()
)
warning_count = sum(
    len(v) for section in results.values() for v in section["warnings"].values()
)
print(f"Errors: {error_count}, Warnings: {warning_count}")

Loading an Instance

Load and inspect an XBRL-XML instance without converting:

from xbridge.api import load_instance

instance = load_instance("path/to/instance.xbrl")

# Access instance properties
print(f"Entity: {instance.entity}")
print(f"Period: {instance.period}")
print(f"Facts count: {len(instance.facts)}")

How XBridge Works

XBridge performs the conversion in several steps:

  1. Load the XBRL-XML instance: Parse and extract facts, contexts, scenarios, and filing indicators

  2. Load the EBA taxonomy: Access pre-processed taxonomy modules containing tables and variables

  3. Match and validate: Join instance facts with taxonomy definitions

  4. Generate CSV files: Create XBRL-CSV files including:

    • Data tables with facts and dimensions

    • Filing indicators showing reported tables

    • Parameters (entity, period, base currency, decimals)

  5. Package output: Bundle all CSV files into a ZIP archive

Output Structure

The output ZIP file contains:

  • META-INF/: JSON report package metadata

  • reports/: CSV files for each reported table

  • filing-indicators.csv: Table reporting indicators

  • parameters.csv: Report-level parameters

Documentation

Comprehensive documentation is available at docs.xbridge.meaningfuldata.eu.

The documentation includes:

  • API Reference: Complete API documentation

  • Quickstart Guide: Step-by-step tutorials

  • Technical Notes: Architecture and design details

  • FAQ: Frequently asked questions

Taxonomy Loading

If you need to work with the EBA taxonomy directly, you can load it using:

python -m xbridge.taxonomy_loader --input_path path/to/FullTaxonomy.7z

This generates an index.json file containing module references and pre-processed taxonomy data.

Configuration Options

convert_instance Parameters

  • instance_path (str | Path): Path to the XBRL-XML instance file

  • output_path (str | Path | None): Output directory for CSV files (default: current directory)

  • headers_as_datapoints (bool): Treat table headers as datapoints (default: False)

  • validate_filing_indicators (bool): Validate that facts belong to reported tables (default: True)

  • strict_validation (bool): Raise errors on validation failures; if False, emit warnings (default: True)

  • validate (bool): Run validation before and after conversion; raises ValidationError on errors (default: False)

  • eba (bool): Enable EBA-specific validation rules; only used when validate is True (default: False)

Troubleshooting

Common Issues

7z command not found

Install the 7z command-line tool using your system’s package manager (see Prerequisites).

Taxonomy version mismatch

Ensure you’re using the correct version of XBridge for your taxonomy version. XBridge 2.x supports EBA Taxonomy 4.2/4.2.1/4.3/4.4.

Orphaned facts warning/error

Facts that don’t belong to any reported table. Set strict_validation=False to continue with warnings instead of errors.

Decimal precision issues

XBridge automatically handles decimal precision from the taxonomy. Check the parameters.csv file for applied decimal settings.

For more issues, see our FAQ or open an issue.

Contributing

We welcome contributions! Please see CONTRIBUTING.md for:

  • Development setup instructions

  • Code style guidelines

  • Testing requirements

  • Pull request process

Before contributing, please read our Code of Conduct.

Changelog

See CHANGELOG.md for a detailed history of changes.

Support

Security

For security issues, please see our Security Policy.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Authors & Maintainers

MeaningfulData - https://www.meaningfuldata.eu/

Maintainers:

Acknowledgments

This project is designed to work with the European Banking Authority (EBA) taxonomy for regulatory reporting

Metadata

Release files for eba-xbridge 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eba-xbridge 2.2.0
File Size Uploaded
eba_xbridge-2.2.0.tar.gz 12.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for eba-xbridge 2.2.0
File Interpreter ABI Platform
eba_xbridge-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 28.3 MB

Release files / eba_xbridge-2.2.0.tar.gz

Download URL eba_xbridge-2.2.0.tar.gz
Size 12.7 MB
Tags Source
SHA-256 checksum
How to use checksums
8c99d46d9647fc93b9cdaffa683e67236bff191d73472c3d1eceaed772110e9d
BLAKE2b-256 checksum
How to use checksums
bcddd8fff38f016c61fdca9e2080067d0733aecfdf3d518cedbfd004271f5a0e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.3 CPython/3.12.3 Linux/6.17.0-1022-azure

Release files / eba_xbridge-2.2.0-py3-none-any.whl

Download URL eba_xbridge-2.2.0-py3-none-any.whl
Size 15.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
2d1b731dfd7e77fcc608c7839741f4151aac28c375e5cc3e94609988450b25bd
BLAKE2b-256 checksum
How to use checksums
8ce62bee63b9ef81fe762a9f7df75046d352ee51fc6e7f79fd6c4caec3772d3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.3 CPython/3.12.3 Linux/6.17.0-1022-azure

Release history Release notifications | RSS feed

This release

2.2.0 This release

2 release files

2.1.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2

2 release files

1.1.1

2 release files

1.1

2 release files

1.0.4

2 release files

1.0.2

2 release files

1.0.1

1 release file

1.0

1 release file

0.11

1 release file

0.10

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page