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.0rc4.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.0rc4-cp314-cp314-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.14Windows x86-64

triplets-0.2.0rc4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.1 MB view details)

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

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

triplets-0.2.0rc4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.1 MB view details)

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

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

triplets-0.2.0rc4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.1 MB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

triplets-0.2.0rc4-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.0rc4-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.0rc4.tar.gz.

File metadata

  • Download URL: triplets-0.2.0rc4.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.0rc4.tar.gz
Algorithm Hash digest
SHA256 7bdf3a967f1bfac8e6a52b1bce41cdf47315c75099680b186a4992714595aaf4
MD5 267e2e5b31fdbc702834bd69a7978249
BLAKE2b-256 912fc0d48bf68b517be1d96786e4908b20201e2138002288e7d90e171e8531db

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4.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.0rc4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b63673628b53759e092828db6b28bac4494d11f6b6c79ba625783cfd818a27cf
MD5 9efcb325d8215dbf2605ef4b81b647eb
BLAKE2b-256 93835fc8d6e3ac86590449f4495f44f5b8b69d470d6a640d2d4b4239bda87d23

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea97a6bd14a36cf5ed86f229e1b52404e2b5f5b40608cfa4d49ff3a9d56e6b49
MD5 931d2c21a5304e7a89afcb99107925f7
BLAKE2b-256 d6d55ed27ca4ece8f2cf1679ed392090084cf9272f56e57c62f34c83f9c8027d

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d5a5a1a60f44ee63535925d9d678c6e22bdb007c6590d3c2c765e593dd72cabf
MD5 d2d010e2ba4a35f71997ccf071cb770a
BLAKE2b-256 005deb411db286a1fd075a55802d13a2b0abe4b5200d0712e731f3dcd0b63f09

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9b077240430c4d5e9f09f92fc085574561613588c54ff926afa38aeb8da80306
MD5 7fc55384eff2e871d0e221a0461c4bc8
BLAKE2b-256 47a5752dd1c64c82ec053cb2324b057f00000e4e6eed180483ff5a3afcfe92ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a3c2ea39ac3f74ee725cf1f73d383601ed8e3efb169029f9d70ba0b9f21831bc
MD5 40bb8c2d9957185686c30c8399f680d0
BLAKE2b-256 db3159e37f9f0bc4a9418d63793bf5b2839b415800ef24c828663e3200d2a455

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36acfacddb060091dc9e0ff1e4bb8fe5c3772c72ac8bf5c29187838c91e91978
MD5 f65e3bc46d470a8e05acaa6325da2434
BLAKE2b-256 db63f1875632b6f3f81f4f5f73a0c1939d7349c1f461cceda4cb1dbaf526abbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e6910c63993eab715163e2017af1773a6a33a8389d7790a76f6605c79f8e7139
MD5 c2a95307bc2600a7062a1979f88328b5
BLAKE2b-256 6ecb45d4b1cb5a6b81cb1cf8013688688a77898f07bdbe21edd057e363779938

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 51fc454b43fbf9f18bbf0b1a1028be1037187259a91b9235b0290d627f589413
MD5 585b2b37d6d3a7cb9399772c12c8a39c
BLAKE2b-256 87c327748bf581582f831a554b3090655f1e0c5987460ca32d0d8f13839346a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 300e70f5d78d01f4c0eebc01111fd191a6b05440433350d167bbd9e0567c2896
MD5 240844a33e463b16798af50e41125fac
BLAKE2b-256 02a5d7d75d13fd27ef93345fdd98631bfb6d4e32ebae8c3ec4ae31c89e554302

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 136047d34db26b920eb42df6d5ce0555be623697f1e5f5eef88bbcd0ffb606ce
MD5 82edab976b70f7d1d75b20a7d178cf49
BLAKE2b-256 29331233353da1adf68194076eb3a9a9d867d6ee334df98e279ea9e271bd0747

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2249d1fea37d8b2f7d21b95220221579089e3cecf9ffcb43ab007e662f626f91
MD5 cc7d8c25a26a4c840b39d8356a471a31
BLAKE2b-256 d87734eb54ce71ff9f41342974536d71b43e50a7dcb8d0a1e2a99cbb661226b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for triplets-0.2.0rc4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b3743a9d3022d9053e4375b363cc0ff757900757c738b5fb6f9e63f466032ec6
MD5 591711f2d6c43ef22d22e8d26769fc5e
BLAKE2b-256 64c992bc5bf42bf54bf2ac58735b8515a48554546e2ac52e20660a91975db1d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for triplets-0.2.0rc4-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.0rc4 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