Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

About:

  • Parses CIM RDF/XML data to pandas dataframe with 4 columns [ID, KEY, VALUE, INSTANCE_ID] (triplestore like)
  • The solution does not care about CIM version nor namespaces
  • Input files can be xml or zip files (containing one or mutiple xml files)
  • All files are parsed into one and same Pandas DataFrame, thus if you want single file or single data model, you need to filter on INSTANCE_ID column

Documentation:

https://haigutus.github.io/triplets

Upgrading from 0.0.x? See docs/migration_0.0_to_0.1.md.

To get started:

# Core (python_lxml_pandas engine, no extra deps)
pip install triplets

# With pyarrow (enables python_lxml_arrow + cython_pugixml_arrow engines, ~10x faster)
pip install triplets[arrow]

Install extras by feature:

Extra Enables
arrow compiled Arrow parser engines (~10x faster parsing)
polars polars DataFrames (polars.read_rdf, .triplets namespace)
duckdb DuckDB connections (con.read_rdf, SQL over triplets)
sparql SPARQL queries (rdflib reference engine)
oxigraph recommended pip performance path — embedded Rust SPARQL engine (auto-preferred over rdflib)
validation SHACL validation (pyshacl reference engine)
excel / networkx / visualization Excel export / graph export / drawing

The embedded qlever SPARQL engine (fastest) ships in no wheel — it is a local source build, see docs/building.md.

import pandas
import triplets

path = "CGMES_v2.4.15_RealGridTestConfiguration_v2.zip"
data = pandas.read_RDF([path])

Result:

image

You can then query a dataframe of all same type elements and its parameters across all [EQ, SSH, TP, SV etc.] instance files, where parameters are columns and index is object ID-s

data.tableview_by_type("ACLineSegment")

image

Export:

from triplets.export_schema import schemas
from triplets.export import ExportType

data.export_to_cimxml(
    rdf_map=schemas.ENTSOE_CGMES_2_4_15_552_ED1,
    export_type=ExportType.XML_PER_INSTANCE_ZIP_PER_XML,
)

Export schemas are versioned and shipped per profile. Alongside the CGMES bundles (schemas.ENTSOE_CGMES_2_4_15_552_ED1, schemas.ENTSOE_CGMES_3_0_0_552_ED1, …) the versioned NC (Network Code) profiles are available as schemas.ENTSOE_NC_2_4_1_552_ED1 / schemas.ENTSOE_NC_2_4_1_552_ED2. The _ED1 / _ED2 suffix selects the serialization edition; profile resolution is schema-driven, so the right profile section is matched from the instance header.

Look into examples folders for more

Parser engines

Three parser engines with automatic fallback (fastest available):

Engine Install Speed
python_lxml_pandas pip install triplets 1x baseline, always works
python_lxml_arrow pip install triplets[arrow] ~1x, better interop
cython_pugixml_arrow pip install triplets[arrow] (included in wheels) ~10x faster

The cython_pugixml_arrow engine is a compiled C++ extension included in published wheels. It requires pyarrow at runtime, so install with triplets[arrow] to enable it.

The cython engine is pre-built in published wheels — no compilation needed.

Engine selection is automatic across the library (parser, exports, SPARQL, validation): installing an extra makes everything that can use it faster, with no code changes. Inspect and steer it globally:

triplets.engines()                        # what "auto" resolved to, per subsystem
triplets.set_engine(parser_cimxml="python_lxml_pandas", sparql="rdflib")
triplets.set_engine(parser_cimxml="auto") # restore auto-selection

Per-call engine= arguments always win over set_engine. Operations on your DataFrame itself (filters, tableviews, references) always run in the engine of the object you call them on — pandas frames stay pandas, polars stays polars.

Polars

import polars
import triplets

data = polars.read_rdf(["grid_EQ.xml", "data.zip"])   # returns polars DataFrame

data.triplets.get_types_count()
data.triplets.tableview_by_type("ACLineSegment")
data.triplets.filter_triplets(KEY="Type", VALUE=".*Generator.*", regex=True)
data.triplets.export_to_csv(export_to_memory=True)
data.triplets.export_to_nquads("/tmp/output.nq")
data = polars.read_nquads("/tmp/output.nq")           # round-trips N-Quads back to triplets

read_nquads is registered as pandas.read_nquads / polars.read_nquads and is also exposed top-level as triplets.read_nquads.

DuckDB

import duckdb
import triplets

data = duckdb.connect()                              # default table "triplets"
data = duckdb.connect("grid.duckdb", table="grid", schema="cim")  # per-connection defaults
# explicit table/schema config is stored in the database file — reopening
# duckdb.connect("grid.duckdb") later resolves cim.grid automatically

data.read_rdf(["grid_EQ.xml", "data.zip"])           # streams into the connection's table
data.read_rdf(["update.zip"], append=True)           # adds rows instead of replacing
data.get_types_count()                               # uses connection table/schema
data.tableview_by_type("ACLineSegment").df()
data.filter_triplets(KEY="Type", VALUE=".*Sub.*", regex=True).df()
data.references_to("some-uuid").df()
data.export_to_nquads("/tmp/output.nq")

# Per-call override; rebind defaults with set_triplets_table(...)
data.types_dict(table="other", schema="main")

# Direct SQL (your identifiers — tools always quote theirs)
data.sql('SELECT VALUE, COUNT(*) FROM "cim"."grid" WHERE KEY = \'Type\' GROUP BY VALUE').df()

# The same tools are also on the `.triplets` namespace (parity with pandas/polars)
data.triplets.tableview_by_type("ACLineSegment").df()
data.triplets.get_types_count()

SPARQL queries

SPARQL 1.1 over the loaded data — SELECT → DataFrame, ASK → bool, CONSTRUCT → triplet DataFrame. Works on pandas, polars and DuckDB inputs:

PREFIXES = """
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
"""
names = data.sparql.query(PREFIXES + "SELECT ?s ?name WHERE { ?s cim:IdentifiedObject.name ?name }")

Three engines behind one API (auto picks the fastest available):

Engine Install Role
qlever local source build (docs/building.md) fastest — embedded C++, persistent on-disk index
oxigraph pip install triplets[oxigraph] embedded Rust — ~3x faster import, 2–5x faster queries than rdflib
rdflib pip install triplets[sparql] pure-Python reference

Details and measured numbers: docs/sparql.md.

SHACL validation

Validate against SHACL shape files; the result is a violations DataFrame (empty = conforms) with the same shape across all engines:

from triplets.export_schema import schemas

violations = data.shacl.validate("shapes.ttl", rdf_map=schemas.ENTSOE_CGMES_3_0_0_552_ED1)

# slower optional context pass: source file, object type/name,
# shape sh:name/sh:description, schema attribute/class definitions
violations = data.shacl.validate(shapes, context=True)

# SARIF 2.1.0 for GitHub / SonarQube / any SARIF viewer — grouped by default
# (one result per rule with occurrenceCount + sample instances)
violations.shacl.to_sarif(path="report.sarif")

# standard SHACL sh:ValidationReport — format from path suffix (or format=)
violations.shacl.to_shacl_report(path="report.ttl")
violations.shacl.to_shacl_report(path="report.xml", report_source="model.xml",
                                 report_references=["equipment.ttl"])

Engines: polars (auto, real profiles in ~2 s) → pandaspyshacl (reference); duckdb for larger-than-memory data. sh:sparql constraints ride the SPARQL engine above (minutes → milliseconds with oxigraph/qlever). Details: docs/validation.md.

Accessor namespace

pandas and polars DataFrames use df.triplets.*; a DuckDB connection uses con.triplets.*. The same method names are available on both (DuckDB returns relations — add .df() or .pl() when needed):

# pandas / polars
df.triplets.tableview_by_type("ACLineSegment")
df.triplets.export_to_nquads("/tmp/output.nq")

# DuckDB
con.triplets.tableview_by_type("ACLineSegment").df()
con.triplets.get_types_count()

Root-level methods (df.type_tableview(...), con.filter_triplets(...)) still work for backwards compatibility.

Cache lifecycle

Engines keep internal state (compiled shapes, SPARQL indexes) cached across calls. Reset it explicitly with triplets.clear_caches(), or scope it to a block so it is cleared on exit:

import triplets

with triplets.cache_scope():
    ...            # caches populated here are dropped when the block exits

triplets.clear_caches()   # or clear everything manually

CLI tools

cim-spreadsheet -i model.xml -o output.xlsx
cim-diff original.xml modified.xml

Performance (RealGrid, 1.14M rows)

Committed benchmark results live in tests/performance_results/; re-run with pytest -m performance. Representative numbers (cython parse 1.47s → 0.157s vs the lxml engine = ~9.4x):

Operation pandas polars DuckDB
Parse (cython engine) 157ms 180ms streams (see duckdb section)
tableview_by_type 72ms 15ms 53ms
filter_triplets_by_type 103ms 9ms 50ms
get_types_count 21ms 11ms 18ms

The old rdf_parser.py functions still work but emit deprecation warnings. See docs/migration_0.0_to_0.1.md for renames and breaking changes.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

triplets-0.2.0rc1.tar.gz (2.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

triplets-0.2.0rc1-cp314-cp314-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.14Windows x86-64

triplets-0.2.0rc1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

triplets-0.2.0rc1-cp314-cp314-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

triplets-0.2.0rc1-cp313-cp313-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.13Windows x86-64

triplets-0.2.0rc1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

triplets-0.2.0rc1-cp313-cp313-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

triplets-0.2.0rc1-cp312-cp312-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.12Windows x86-64

triplets-0.2.0rc1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

triplets-0.2.0rc1-cp312-cp312-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

triplets-0.2.0rc1-cp311-cp311-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.11Windows x86-64

triplets-0.2.0rc1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

triplets-0.2.0rc1-cp311-cp311-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file triplets-0.2.0rc1.tar.gz.

File metadata

  • Download URL: triplets-0.2.0rc1.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for triplets-0.2.0rc1.tar.gz
Algorithm Hash digest
SHA256 5745ce57b09d53a78221133e504fc856b7a921fb541b99f8c826bbf38790e3ac
MD5 5c637a04153bf07a276a608c9c5d05ed
BLAKE2b-256 caf5736ac2de463b2c55c7606697916a6d94a65a2233b76fb5a8dfd46c8a81b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1.tar.gz:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 754c16f22aac1712ab8684ebe8bfdeb83b1b53b184021aa9955426be13824b7d
MD5 7347260956d1523088b680e85d8ab764
BLAKE2b-256 1942bc6ff14918b94f4930a04ab426a09bcdbb56a9124d5620073e52dd728255

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp314-cp314-win_amd64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6aae5d030fecebfb4fd5215020827828db825d66b9e1293489d736bf6cae461a
MD5 84028def020f4f225f2b0449214db8eb
BLAKE2b-256 20aa6abf69614bb7a7f99a4661a736cf73103e93bfc1140a96ab53c5f60ab4c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 60cf057089bff0f1fa6476386f77c8f3b6c0788fee5e19e1bbdc9ee71b724993
MD5 dcda09c1c2767b5f77af592d191be458
BLAKE2b-256 5d4ce197cb07a3df3279804196ab0860b0f540861c43d42e3730fd617ab5f42b

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 551225815506d983bf812ba0740613305cfb88f1ae39db97dddba51abf97937c
MD5 091a32315fe94ee67758b9e43107f261
BLAKE2b-256 f6e0db97a0ac09094755fbb9ac7c57139f1b3c198916767b58d440395eff684a

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp313-cp313-win_amd64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 13681f62bf43684e72a3439b990dc939de111658d674ad60661d6215b217cc13
MD5 90a5de882b767114c72cb175f31b026c
BLAKE2b-256 4b1c18dc92ddc988454aaa285ca3150d0134616147027d876b00470bb699a812

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f28116e8ff93dfd0e30c05db2c6d29b01270a826d0f7f7e8e6c732c1f6cacc5
MD5 674a1ac3697a11cba155ee0aac87f8a2
BLAKE2b-256 e28637b65810b1d5c133b5b9f7495214bc0d53c88ad5c8a83d9dead22211ced7

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d03626f67b5803ec06f001716f7424c26c23436be28fc2aca38e6a82c354be78
MD5 0e9366a85695091e9e4b664db85683aa
BLAKE2b-256 3477da949f2d05719c11b6a889261de7aa981e809e0afe61a3c97f3af54f47ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp312-cp312-win_amd64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3935608292c7eecf74715b9b426f8457d617593aa28a5a833f6f0fd2434287cd
MD5 b6ffa470ceaeb5508c315ee5640c4550
BLAKE2b-256 9e834ccc9a001ba7b8f62a8ecff71637438758046782f20609da7a1a08257a13

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 baf16fe5cd83b8d082a6ef21c9ea047a881edef2f8e2490ca9ecdbf332274eff
MD5 68a231b90029ace4160ec2af906d6907
BLAKE2b-256 4f03fedb0520e68a62d8a429e96a8ea4214338e36ad0f4f504c7f9990d4b5829

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7c4218deb153fcd153ce3cd9a2f579a4fa34e44f8d1cabd77bb354b1700e9825
MD5 260ee90ccb60d19c343ad9fde5d2cdb0
BLAKE2b-256 e53327c1dccdb1ff8672f6d4c527c24da530e7ce4e2a61807fed0c84e5d40032

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp311-cp311-win_amd64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2c1cb8e07dbaefd7c35ccb7729dc2f4dd76f1b5e313f6bf714ee031152e5429d
MD5 428cdce94a2fc7aeed41e6167dbc18c3
BLAKE2b-256 77f7f663a673abb8e7575722dcf6d3ac8ac3ea0da42453da773d831002083ea9

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triplets-0.2.0rc1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 636b959119d94913c205f1f231fb700f695726e5047e70ebf2c8cb23b4056c19
MD5 8f43251bf8ec1365f0462d3bded42e54
BLAKE2b-256 1f594922b510da66490678819b8ebcf99a9c216f5350fd0f52bc4a691208b69d

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on Haigutus/triplets

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.0

13 files

This release

0.2.0rc1 This release

13 files

0.1.0

10 files

0.1.0rc2

12 files

0.0.17

2 files

0.0.16

2 files

0.0.15

2 files

0.0.14

2 files

0.0.13

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

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