Skip to content

Commit

Permalink
WIP: Use micro model directly from Entsoe
Browse files Browse the repository at this point in the history
  • Loading branch information
davidkleiven committed Jan 26, 2024
1 parent 89189c0 commit 2117ac7
Show file tree
Hide file tree
Showing 19 changed files with 17,784 additions and 3 deletions.
64 changes: 64 additions & 0 deletions cimsparql/adaptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
from __future__ import annotations

import hashlib
import re
import uuid
from collections.abc import Iterable
from pathlib import Path

from rdflib import ConjunctiveGraph
from rdflib.term import Literal, URIRef


class XmlModelAdaptor:
def __init__(self, filenames: Iterable[Path]) -> None:
self.graph = ConjunctiveGraph()
for filename in filenames:
profile = filename.stem.rpartition("/")[-1]
uri = URIRef(f"http://cimsparql/xml-adpator/{profile}")
destination_graph = self.graph.get_context(uri)
destination_graph.parse(filename, publicID="http://cim")

def namespaces(self) -> dict[str, str]:
return {str(prefix): str(name) for prefix, name in self.graph.namespaces()}

def graphs(self) -> list[str]:
return self.graph.get_context()

@classmethod
def from_folder(cls, folder: Path) -> XmlModelAdaptor:
return XmlModelAdaptor(list(folder.glob("*.xml")))

def add_mrid(self) -> None:
"""
Adds cim:IdentifiedObject.mRID if not present
"""
ns = self.namespaces()
identified_obj_mrid = URIRef(f"{ns['cim']}IdentifiedObject.mRID")
for result in self.graph.query(
"select ?s ?g where {graph ?g {?s cim:IdentifiedObject.name ?name}}", initNs=ns
):
mrid_str = str(result["s"]).rpartition("#_")[-1]
mrid = mrid_str if is_uuid(mrid_str) else generate_uuid(mrid_str)
self.graph.add((result["s"], identified_obj_mrid, Literal(mrid), result["g"]))

def adapt(self) -> None:
self.add_mrid()

def nq_bytes(self, contexts: list[URIRef] | None = None) -> bytes:
"""
Return the contexts as bytes. If contexts is None, the entire graph
is exported
"""
if contexts is None:
return self.graph.serialize(format="nquads", encoding="utf8")
raise NotImplementedError()


def is_uuid(x: str) -> bool:
return re.match("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", x) is not None


def generate_uuid(x: str) -> str:
h = hashlib.md5(x.encode(), usedforsecurity=False)
return str(uuid.UUID(hex=h.hexdigest()))
412 changes: 412 additions & 0 deletions tests/data/micro/20171002T0930Z_1D_BE_SSH_3.xml

Large diffs are not rendered by default.

251 changes: 251 additions & 0 deletions tests/data/micro/20171002T0930Z_1D_BE_TP_3.xml

Large diffs are not rendered by default.

274 changes: 274 additions & 0 deletions tests/data/micro/20171002T0930Z_1D_ENTSO-E_SV_3.xml

Large diffs are not rendered by default.

345 changes: 345 additions & 0 deletions tests/data/micro/20171002T0930Z_1D_NL_SSH_3.xml

Large diffs are not rendered by default.

190 changes: 190 additions & 0 deletions tests/data/micro/20171002T0930Z_1D_NL_TP_3.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cim="http://iec.ch/TC57/2013/CIM-schema-cim16#" xmlns:entsoe="http://entsoe.eu/CIM/SchemaExtension/3/1#" xmlns:md="http://iec.ch/TC57/61970-552/ModelDescription/1#">
<md:FullModel rdf:about="urn:uuid:3a4b6367-7c3e-4946-a1a1-c3a43c58fad3">
<md:Model.created>2014-10-24T14:27:49</md:Model.created>
<md:Model.scenarioTime>2017-10-02T09:30:00Z</md:Model.scenarioTime>
<md:Model.version>3</md:Model.version>
<md:Model.DependentOn rdf:resource="urn:uuid:2399cbd0-9a39-11e0-aa80-0800200c9a66"/>
<md:Model.DependentOn rdf:resource="urn:uuid:ec68a1f1-2396-4d6c-9479-716fd328e05f"/>
<md:Model.DependentOn rdf:resource="urn:uuid:2399cbd1-9a39-11e0-aa80-0800200c9a66"/>
<md:Model.description>CGMES Conformity Assessment: MicroGridTestConfiguration T1 (MAS NL). The model is owned by ENTSO-E and is provided by ENTSO-E “as it is”. To the fullest extent permitted by law, ENTSO-E shall not be liable for any damages of any kind arising out of the use of the model (including any of its subsequent modifications). ENTSO-E neither warrants, nor represents that the use of the model will not infringe the rights of third parties. Any use of the model shall include a reference to ENTSO-E. ENTSO-E web site is the only official source of information related to the model.</md:Model.description>
<md:Model.modelingAuthoritySet>http://tennet.eu/nl/CAS2.0/MicroGridTestConfiguration</md:Model.modelingAuthoritySet>
<md:Model.profile>http://entsoe.eu/CIM/Topology/4/1</md:Model.profile>
<md:Model.Supersedes rdf:resource="urn:uuid:5d32d257-1646-4906-a1f6-4d7ce3f91569"/>
</md:FullModel>
<cim:ConnectivityNode rdf:about="#_c79edc43-4a5e-4ba8-bd08-16fcdd1beee7">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_97d7d14a-7294-458f-a8d7-024700a08717"/>
</cim:ConnectivityNode>
<cim:TopologicalNode rdf:ID="_97d7d14a-7294-458f-a8d7-024700a08717">
<cim:IdentifiedObject.name>NL_TR_BUS2</cim:IdentifiedObject.name>
<cim:TopologicalNode.BaseVoltage rdf:resource="#_c1d5bff18f8011e08e4d00247eb1f55e"/>
<cim:TopologicalNode.ConnectivityNodeContainer rdf:resource="#_8d8a82ba-b5b0-4e94-861a-192af055f2b8"/>
</cim:TopologicalNode>
<cim:ConnectivityNode rdf:about="#_7e9dd682-86cd-4594-b58f-1a0534540aca">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_afddd60d-f7e6-419a-a5c2-be28d29beaf9"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_1520ab3c-9392-41c2-8873-39ec83a76c26">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_ecb6a97e-bd2d-40c0-91f6-99dc1e7f59e2">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_6bdc33de-d027-49b7-b98f-3b3d87716615"/>
</cim:ConnectivityNode>
<cim:TopologicalNode rdf:ID="_6bdc33de-d027-49b7-b98f-3b3d87716615">
<cim:IdentifiedObject.name>N1230822413</cim:IdentifiedObject.name>
<cim:TopologicalNode.BaseVoltage rdf:resource="#_c1d5bff18f8011e08e4d00247eb1f55e"/>
<cim:TopologicalNode.ConnectivityNodeContainer rdf:resource="#_2a37dc57-2faf-464a-8175-bc415f9a635f"/>
</cim:TopologicalNode>
<cim:ConnectivityNode rdf:about="#_bd68fe72-ecac-45cc-9d34-33d95ed9a47a">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_97d7d14a-7294-458f-a8d7-024700a08717"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_e4743b84-976a-414d-a888-4362532c39e6">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:ConnectivityNode>
<cim:TopologicalNode rdf:ID="_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a">
<cim:IdentifiedObject.name>NL_Busbar__4</cim:IdentifiedObject.name>
<entsoe:IdentifiedObject.shortName>NL_B__4</entsoe:IdentifiedObject.shortName>
<cim:IdentifiedObject.description>NAMST_22: UCTE DEF code</cim:IdentifiedObject.description>
<cim:TopologicalNode.BaseVoltage rdf:resource="#_7891a026ba2c42098556665efd13ba94"/>
<cim:TopologicalNode.ConnectivityNodeContainer rdf:resource="#_c1d5bfea8f8011e08e4d00247eb1f55e"/>
</cim:TopologicalNode>
<cim:ConnectivityNode rdf:about="#_124b9180-9112-4b8a-a651-9c1bb9a031da">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_6bdc33de-d027-49b7-b98f-3b3d87716615"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_cae57656-3fc2-4f5e-9ab9-fa5b118a632a">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_afddd60d-f7e6-419a-a5c2-be28d29beaf9"/>
</cim:ConnectivityNode>
<cim:TopologicalNode rdf:ID="_afddd60d-f7e6-419a-a5c2-be28d29beaf9">
<cim:IdentifiedObject.name>NL-Busbar_2</cim:IdentifiedObject.name>
<entsoe:IdentifiedObject.shortName>NL-B_2</entsoe:IdentifiedObject.shortName>
<cim:IdentifiedObject.description>NAMST_21; this is the old code</cim:IdentifiedObject.description>
<cim:TopologicalNode.BaseVoltage rdf:resource="#_7891a026ba2c42098556665efd13ba94"/>
<cim:TopologicalNode.ConnectivityNodeContainer rdf:resource="#_c1d5bfea8f8011e08e4d00247eb1f55e"/>
</cim:TopologicalNode>
<cim:ConnectivityNode rdf:about="#_90f78705-5ef4-479a-8d5a-70efc554e0ba">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_17eb9e2c-dd0d-4005-ac1c-c7174e3a88e1">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_5cb2cb9a-695c-458b-b63a-a84c025981e4">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_7221e0f9-008b-4273-8d40-b5d4c6efa0fe">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:ConnectivityNode>
<cim:TopologicalNode rdf:ID="_81b0e447-181e-4aec-8921-f1dd7813bebc">
<cim:IdentifiedObject.name>N1230992195</cim:IdentifiedObject.name>
<entsoe:IdentifiedObject.shortName>NL-_B_1</entsoe:IdentifiedObject.shortName>
<cim:IdentifiedObject.description>NAMST_11; old UCTE Name</cim:IdentifiedObject.description>
<cim:TopologicalNode.BaseVoltage rdf:resource="#_65dd04e792584b3b912374e35dec032e"/>
<cim:TopologicalNode.ConnectivityNodeContainer rdf:resource="#_c1d5bfde8f8011e08e4d00247eb1f55e"/>
</cim:TopologicalNode>
<cim:ConnectivityNode rdf:about="#_f28134fe-076d-4605-aa92-b9e0bbe96841">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:ConnectivityNode>
<cim:ConnectivityNode rdf:about="#_546121e7-acf3-4bc2-ae49-446e550a1e5c">
<cim:ConnectivityNode.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:ConnectivityNode>
<cim:Terminal rdf:about="#_757d4f50-707b-47a0-891c-cbaefd649631">
<cim:Terminal.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_ae588863-b154-451d-978a-7ab08ac50fb6">
<cim:Terminal.TopologicalNode rdf:resource="#_f03d65b2a51049ffa533e433721145c1"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_653bc4b8-518b-4adc-9d68-012fb641fb1d">
<cim:Terminal.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_57979d14-d1d8-4311-ae53-aa8890423885">
<cim:Terminal.TopologicalNode rdf:resource="#_8d7bad8bcc634e0796e362390d9040b6"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_5dfee914-a4fd-4bde-a5b4-c4caa6378d10">
<cim:Terminal.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_6aecb9ba-5835-4b70-89bc-96d687e45779">
<cim:Terminal.TopologicalNode rdf:resource="#_1fa19c281c8f4e1eaad9e1cab70f923e"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_c557146e-dfc4-4020-9738-d592b188338b">
<cim:Terminal.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_8f308117-8bbd-4798-b145-4e78f7d049e7">
<cim:Terminal.TopologicalNode rdf:resource="#_9d25a1f9e5d14d47b6dcde99c4380b40"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_357e3e14-c38e-4a7e-9c95-b3dbe158f5f3">
<cim:Terminal.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_6b1cd30c-19ba-44e1-9447-d01db6b1ef9d">
<cim:Terminal.TopologicalNode rdf:resource="#_d4affe50316740bdbbf4ae9c7cbf3cfd"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_8121d4c3-9cb2-47db-b40a-99678602bb2a">
<cim:Terminal.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_5f40c3f7-9540-4e1b-aa97-6553d5524877">
<cim:Terminal.TopologicalNode rdf:resource="#_afddd60d-f7e6-419a-a5c2-be28d29beaf9"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_e3e0c496-5837-4f0f-a596-cc421940f73f">
<cim:Terminal.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_baa7aef1-afcd-4981-97c0-ccec7b5ad4e0">
<cim:Terminal.TopologicalNode rdf:resource="#_afddd60d-f7e6-419a-a5c2-be28d29beaf9"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_1128e664-0653-448a-9068-e37f1a097c05">
<cim:Terminal.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_da232169-1c36-495a-8af6-a0d7d2b39f52">
<cim:Terminal.TopologicalNode rdf:resource="#_6bdc33de-d027-49b7-b98f-3b3d87716615"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_bd61b1f9-474d-424e-9709-42f75337c477">
<cim:Terminal.TopologicalNode rdf:resource="#_afddd60d-f7e6-419a-a5c2-be28d29beaf9"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_4f1c405f-07c9-4fb0-b64e-551896a29aa8">
<cim:Terminal.TopologicalNode rdf:resource="#_97d7d14a-7294-458f-a8d7-024700a08717"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_ae4b7cbe-349a-41c8-ace2-25ec26f14a64">
<cim:Terminal.TopologicalNode rdf:resource="#_6bdc33de-d027-49b7-b98f-3b3d87716615"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_f04ecab5-1a12-4cc0-ba56-b157ebf11a42">
<cim:Terminal.TopologicalNode rdf:resource="#_6bdc33de-d027-49b7-b98f-3b3d87716615"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_faab7959-f9bf-421b-bc3f-d364e0c1388b">
<cim:Terminal.TopologicalNode rdf:resource="#_97d7d14a-7294-458f-a8d7-024700a08717"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_a015f692-3fc5-4ec3-8d1d-977c7b499e7c">
<cim:Terminal.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_f970233f-b573-49d9-9fc3-3a2a59ed3bbb">
<cim:Terminal.TopologicalNode rdf:resource="#_9d25a1f9e5d14d47b6dcde99c4380b40"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_24dd035c-0a8c-4351-aeb2-08d6622b42ae">
<cim:Terminal.TopologicalNode rdf:resource="#_8d7bad8bcc634e0796e362390d9040b6"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_26e50b4b-9a19-420d-98ce-bc4f11971cd7">
<cim:Terminal.TopologicalNode rdf:resource="#_1fa19c281c8f4e1eaad9e1cab70f923e"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_f48d48c7-e9f6-460c-898f-cc68a96efdeb">
<cim:Terminal.TopologicalNode rdf:resource="#_f03d65b2a51049ffa533e433721145c1"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_39d27c17-1e5b-4edc-a7ec-65a2d56542df">
<cim:Terminal.TopologicalNode rdf:resource="#_d4affe50316740bdbbf4ae9c7cbf3cfd"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_fab54e9c-b12e-4e47-a9f2-fec4ef96c0c0">
<cim:Terminal.TopologicalNode rdf:resource="#_afddd60d-f7e6-419a-a5c2-be28d29beaf9"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_6dad1a97-6874-4206-a5a5-837e495325f8">
<cim:Terminal.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_f461fd2d-1e41-4a3e-8213-7cc33c77a089">
<cim:Terminal.TopologicalNode rdf:resource="#_81b0e447-181e-4aec-8921-f1dd7813bebc"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_ecea10ff-e006-436b-a86a-beac4c2a30c1">
<cim:Terminal.TopologicalNode rdf:resource="#_795a117d-7caf-4fc2-a8d9-dc8f4cf2344a"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_42800bad-5e47-42e6-b9b0-1fb8fc5831aa">
<cim:Terminal.TopologicalNode rdf:resource="#_97d7d14a-7294-458f-a8d7-024700a08717"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_0f199d49-0093-4b51-b357-70371424d174">
<cim:Terminal.TopologicalNode rdf:resource="#_6bdc33de-d027-49b7-b98f-3b3d87716615"/>
</cim:Terminal>
<cim:Terminal rdf:about="#_50f00b94-fe0f-48fd-887e-f0d4d59eee87">
<cim:Terminal.TopologicalNode rdf:resource="#_afddd60d-f7e6-419a-a5c2-be28d29beaf9"/>
</cim:Terminal>
</rdf:RDF>
Loading

0 comments on commit 2117ac7

Please sign in to comment.