Dataset Telemark 120 - statnett/Talk2PowerSystem GitHub Wiki
Table of Contents
- Intro
- Scope
- JSON-LD Representation
- RDF Files to Load
- Data Statistics
- Correlation to Nordic44 and CIM/NC
- Ontology Terms
- Telemark-120 Errors
Intro
Telemark-120 (formerly CIM4NoUtility and DIGIN10 Grunnprofil) is another dataset of the NO grid It includes extra kinds of data:
- Aviation obstacles
- Geospatial data
- Timeseries data ("schedules")
The main problem is where to obtain ontologies for all the novel data in this dataset, see Missing Ontology Terms and its subsections
Tasks
Tasks:
- Graphwise to analyse and describe the dataset: variety of data and volumetrics
- Graphwise to post issues that might need to be fixed
- Graphwise/Statnett to describe queries that can be answered only by Telemark-120: [Demo4 Telemark-120] (first cut)
- Graphwise/Statnett to look if there's correlation of resources between Nordic44 and Telemark-120, because cross-dataset questions may be most interesting
- Elbits to provide
nc-no
ontology and any other classes/props/enums appearing in Telemark-120 data
Posted issues:
- https://github.com/3lbits/CIM4NoUtility/issues/373 : coordination issue between Telemark120, Nordic44 and Talk2PowerSystem
- https://github.com/statnett/Talk2PowerSystem_PM/issues/56 : analysis of Telemark120 (done)
- https://github.com/statnett/Talk2PowerSystem_PM/issues/132 : finish analysis of Telemark120 (nearly done)
- https://github.com/statnett/Nordic44/issues/62 : increase correlation between Telemark120 and Nordic44
- https://github.com/3lbits/CIM4NoUtility/pulls?author:VladimirAlexiev : two PRs to add Trig/Turtle to Telemark120
Telemark-120 issues (stats as of 14-Jul-2025):
Scope
"Map of the territory" from FileNameStandard.adoc, and complemented with actual files found (see RDF Files to Load)
"Roles"
HV1
: High VoltageMV1
: Medium VoltageLV1
: Low VoltageM1
: Manufacture
Usual profiles (also found in ENTSO-E Conformance and Nordic44):
DL
: Diagram LayoutEQ
: Equipment CoreGL
: Geographical Location: but includes GeoJSONOP
: Equipment OperationSSH
: Steady State HypothesisSV
: State VariablesTP
: Topology
Assets (added recently to Nordi44)
AC
: Asset Catalog (as per manufacturer)AS
: Asset information (as per owner)
Less usual profiles
CU
: CustomerSC
: Equipment Short CircuitOR
: Object RegistryAO
: Aviation Obstacle- Boundary Models:
HV1-MV1_BM
: High Voltage - Medium VoltageMV1-LV1_BM
: Medium Voltage - Low Voltage
Reference Data
BaseVoltage_RD
: Base VoltageGeographicalRegion_RD
: Geographical RegionMeasurementValueSource_RD
: Measurement Value SourceReadingQualityType_RD
: Reading Quality TypeReadingType_RD
: Reading Type
Folders and Files
Clone the repo
git clone [email protected]:3lbits/CIM4NoUtility.git
cd CIM4NoUtility
Show all folders and files (without .git
folders)
ls -1RF .
Count files
ls -1RF .|grep -c '\*$'
263
Count folders
ls -1RF .|grep -c '/$'
33
List folders
find . -type d
./Code Scripts/Neo4J
./Code Scripts/Python
./Code Scripts/Python/cim-convert-tool
./Code Scripts/Python/cim-convert-tool/archive
./Code Scripts/Python/cim-convert-tool/archive/20230413
./Code Scripts/Python/cim-convert-tool/_config
./Code Scripts/Python/cim-convert-tool/_config/Archive
./Code Scripts/Python/cim-convert-tool/_config/Archive/Previous
./Code Scripts/Python/cim-convert-tool/_data
./Code Scripts/Python/cim-convert-tool/_data/CIMXML
./Code Scripts/Python/cim-convert-tool/_data/CIMXML_Output
./Code Scripts/Python/cim-convert-tool/_data/JSON-LD
./Telemark-120
./Telemark-120/Asset
./Telemark-120/Asset/CIMJSON-LD
./Telemark-120/Asset/CIMJSON-LD/AviationObstacle
./Telemark-120/Asset/CIMJSON-LD/AviationObstacle/jsonSchemas
./Telemark-120/Asset/CIMJSON-LD/AviationObstacle/jsonSchemas/SubSchemas
./Telemark-120/Asset/CIMXML
./Telemark-120/diagrams
./Telemark-120/diagrams/images
./Telemark-120/diagrams/png
./Telemark-120/diagrams/svg
./Telemark-120/docs
./Telemark-120/Grid
./Telemark-120/Grid/CIMJSON-LD
./Telemark-120/Grid/CIMXML
./Telemark-120/Schedule
./Telemark-120/Schedule/2022
./Telemark-120/Schedule/2022/03
./Telemark-120/Schedule/2022/03/30
./Telemark-120/Validation
Docs
Important docs that I list in subjective order of importance.
Modeling
Telemark-120ModelingNamingStandard.adoc
:Telemark-120ModelOverview.adoc
:AviationObstacleReporting.adoc
: lists all classes related to this model, uses diagrams ExtStructure_251024.png and ExtAviationObstacle_050924.png
File manipulation
-
CIMJSON-LD.adoc: describes conversion of primitives and CIM datatypes.
- "Header and dataset" conversion rules seem the same as per Sveino/Inst4CIM-KG/rdf-improved#fix-model-representation and as implemented in fix-model.ru
-
ChangeManagement.adoc: minor
-
ConvertingToCGMES30.adoc: minor and maybe obsolete
-
KnownIssues.adoc
: -
mainReleaseNote.adoc
: -
MeasurementAndMeterReadingSpecification.adoc
: -
MeasurementType.adoc
: -
ModelingGuide.adoc
: -
StandardReferences.adoc
:
Diagrams
- images
- UML diagrams
- ExtStructure_251024.png: structures such as overhead (tower, pole, guy), underground, maritime.
all are
nc-no:LocationResource
that isgeo:SpatialObject
. - ExtAviationObstacle_050924.png:
nc-no:ACLineSegmentSpan
that extendsACLineSegment
with physical characteristics (maxHeight, maxWidth
) andaviationObstackeLightingKind, aviationObstackeMarkingKind
enums
- ExtStructure_251024.png: structures such as overhead (tower, pole, guy), underground, maritime.
all are
- Examples
- Measurement-modeling-example-AssetInfo.png:
temperature monitoring of underground cable by using external sensor directly connected to the outside of the cable.
Uses classes
MeasurementValueSource, Analog, AnalogValue, ACLineSegment, CableInfo
andTemperatureSensor, RemoteSource, RemoteUnit, CommunicationLink
- Measurement-modeling-example.png: RDF diagram of the same, shows ConnectivityNodes and Terminals
- MeterReading-modeling-example.png: not sure
- Measurement-modeling-example-AssetInfo.png:
temperature monitoring of underground cable by using external sensor directly connected to the outside of the cable.
Uses classes
- Whole network electrical diagrams
- Telemark-120-LV1_EQ.drawio.png: Low-Voltage Equipment
- Telemark-120-MV1_EQ.drawio.png: Medium-Voltage Equipment
- Telemark-120-Network-Model-Overview.drawio: I imported it to Lucid Chart and saved it as Telemark-120-Network-Model-Overview.png and Telemark-120-Network-Model-Overview.svg
- UML diagrams
- png and svg electrical diagrams
- NeighborhoodDiagram.png:
shows the overall topological layout of
T_ENGENE, ENGENE, NEDENES
and thenTELEMA2 04 CB1..7
(cim:Substation
"Telemarkstien2 400 Volt Cable Box 1..7") - Maps.png: same, but geospatial layout on a map
- ARENDAL.png,
ENGENE, FROLAND, NEDENES
: electrical diagrams of these substations - T_ENGENE.png: diagram of Engene T-junction (simpler diagram)
JSON-LD Representation
In addition to CIMXML this dataset includes JSON-LD
- cim-convert-tool: CIMXML to CIMJsonLD and CIMJsonLD to CIMXML
cd CIM4NoUtility/Telemark-120/Asset/CIMJSON-LD
riot.bat --formatted trig Telemark-120-LV1_AS.jsonld > Telemark-120-LV1_AS.trig
JSON-LD Pros
- Uses latest CIM namespaces (TODO check
no-nc
extensons)
PREFIX cim: <https://cim.ucaiug.io/ns#>
PREFIX eu: <https://cim.ucaiug.io/ns/eu#>
- Uses
urn:uuid:
for resources, so there is no trouble with under-defined or divergent URLs - Uses named graphs for models
- Uses the latest
dcat
representation of model metadata.- (Doesn't use differential models and the
dcat-cim
extensions)
- (Doesn't use differential models and the
- Uses strict naming conventions for
name
anddescripition
, and hasmRID
:
<urn:uuid:fc57ebb1-8059-4dd7-9811-2129b912dd45>
rdf:type cim:Terminal;
cim:IdentifiedObject.name "TELEMA2 04 T15";
cim:IdentifiedObject.description "Telemarkstien2 400 Volt Terminal 15";
cim:IdentifiedObject.mRID "fc57ebb1-8059-4dd7-9811-2129b912dd45";
JSON-LD Cons
- There are still a number of open json issues (see all json issues)
Lexical form '2022-10-28T13:37:00Z' not valid for datatype XSD date
: Reported as JSON-LD dct:issued: wrong datatype #361- Dataset metadata (model header) is in the default graph. This differs from the decision in Inst4CIM-KG and Nordic44
- Uses plain strings for some numeric values, eg
"cim:Asset.purchasePrice": "500.00",
- Uses JSON numbers for other numeric values
"cim:EndDevice.timeZoneOffset": 1.0,
"cim:Conductor.length": 50.0,
"cim:ACLineSegment.bch": 0.0,
"cim:ACLineSegment.gch": 0.0,
"cim:ACLineSegment.r": 0.015999999945951,
"cim:ACLineSegment.x": 0.003769911221053,
Because JSON numbers don't have strict separation into integer, float and double, this results in some surprises.
cim:EndDevice.timeZoneOffset 1; # integer
cim:Conductor.length 50; # integer
cim:ACLineSegment.bch 0; # integer
cim:ACLineSegment.gch 0; # integer
cim:ACLineSegment.r 1.5999999945951E-2; # double, scientific notation
cim:ACLineSegment.x 3.769911221053E-3; # double, scientific notation
But these numbers are comparable and orderable, so that is fine.
Round-tripping
_data is testing data to check
whether the round-tripping CIMXML -> JSON-LD -> CIMXML_Output
provides correct results.
I diffed a few files and here are some problems:
- JSONLD to XML swaps fields scenarioTime and description #358
- Omitted metadata fields
dcat:keyword, dct:conformsTo, md:Model.profile
- Omitted data fields:
eu:IdentifiedObject.shortName, eu:BoundaryPoint.isDirectCurrent, eu:BoundaryPoint.isExcludedFromAreaInterchange
- And probably other
eu, nc
properties since _config is hard-coded for CIM17
- And probably other
- Numbers like
50
are converted to50.0
(but that's very minor)
XML vs JSON-LD Files
I want to make sure that
- All XML files are also available as JSON-LD
- All round-trip test files (DIGIN10-30) are also available in the official distribution (Telemark-120)
find . -iname Telemark-120-*.jsonld -printf "%f\n" | perl -pe 's{Telemark-120-(.*).jsonld}{$1}' |sort> files-Telemark-jsonld.txt
find . -iname Telemark-120-*.xml -printf "%f\n" | perl -pe 's{Telemark-120-(.*).xml}{$1}' |sort> files-Telemark-xml.txt
find . -iname DIGIN10-30-*.jsonld -printf "%f\n" | perl -pe 's{DIGIN10-30-(.*).jsonld}{$1}' > files-DIGIN-jsonld.txt
find . -iname DIGIN10-30-*.xml -printf "%f\n" | perl -pe 's{DIGIN10-30-(.*).xml}{$1}' > files-DIGIN-xml.txt
A comparison of the file lists shows that is indeed the case. The only differences are:
files-DIGIN-xml.txt
has the files twice (in foldersCIMXML
vsCIMXML_Output
)Telemark-120_AO.jsonld
is not included in the test files- The test files are older
RDF Files to Load
Given the checking we did in the previous section, the files to load are:
find . -iname Telemark-120*.jsonld
./Telemark-120/Asset/CIMJSON-LD/AviationObstacle/Telemark-120_AO.jsonld
./Telemark-120/Asset/CIMJSON-LD/Telemark-120-LV1_AS.jsonld
./Telemark-120/Asset/CIMJSON-LD/Telemark-120-LV1_CU.jsonld
./Telemark-120/Asset/CIMJSON-LD/Telemark-120-M1_AC.jsonld
./Telemark-120/Asset/CIMJSON-LD/Telemark-120-MV1_AS.jsonld
./Telemark-120/Asset/CIMJSON-LD/Telemark-120-MV1_CU.jsonld
./Telemark-120/Asset/CIMJSON-LD/Telemark-120-ReadingQualityType_RD.jsonld
./Telemark-120/Asset/CIMJSON-LD/Telemark-120-ReadingType_RD.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-BaseVoltage_RD.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-GeographicalRegion_RD.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-HV1-MV1_BM.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-LV1_DL.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-LV1_EQ.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-LV1_GL.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-LV1_OP.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-LV1_OR.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-LV1_SC.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-LV1_SSH.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MeasurementValueSource_RD.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1-LV1_BM.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1-LV1_SV.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1-LV1_TP.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1_DL.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1_EQ.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1_GL.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1_OP.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1_SC.jsonld
./Telemark-120/Grid/CIMJSON-LD/Telemark-120-MV1_SSH.jsonld
We zip them up to Telemark-120-jsonld.zip
as follows:
find . -iname Telemark-120*.jsonld -exec zip -j Telemark-120-jsonld.zip {} \;
We use the -j
option to junk (don't record) directory names.
This flattens the archive and makes it easier to peruse.
Of course, this is a matter of preference.
One more file needs to be loaded after converting from GeoJson to GeoSPARQL (see next):
Telemark-120-WattApp-GL.ttl
Geospatial Data
Telemark-120 includes 3 kinds of Geospatial data:
CIM PositionPoint:
grep -c PositionPoint.xPosition */*/*.jsonld */*/*/*.jsonld | grep -v :0
Grid/CIMJSON-LD/Telemark-120-LV1_GL.jsonld:7
Grid/CIMJSON-LD/Telemark-120-MV1_GL.jsonld:13
- Convert to GeoSPARQL WKT using the same model as in Nordic44#41 Convert Geographical Location to GeoSPAQL:
GeoJSON:
grep -c '"geometry": {' */*/*.geojson | grep -v :0
Grid/CIMJSON-LD/Telemark-120-LV1_GL.geojson:7
Grid/CIMJSON-LD/Telemark-120-MV1_GL.geojson:13
Grid/CIMJSON-LD/Telemark-120-WattApp-GL.geojson:1
- Ignore the first two files because they are present as CIM PositionPoint, see above
- Convert
Telemark-120-WattApp-GL.geojson
to GeoSPARQL WKT as per next section
GeoSPARQL:
grep -c asWKT */*/*.jsonld */*/*/*.jsonld | grep -v :0
Asset/CIMJSON-LD/AviationObstacle/Telemark-120_AO.jsonld:3
- Use the values from
asGeoJSON
to overwriteasWKT
, adding altitude and using typesPOINT Z, LINESTRING Z, POLYGON Z
(see comment in CIM4NoUtility#337)- It's best to do this by hand
- For example:
geo:asWKT "LINESTRING Z (8.7007293714585 58.41467201058505 20, 8.7007293 58.414672 20)^^geo:wktLiteral
- Drop
asGML, asGeoJSON
since GraphDB doesn't support them - Load this file to a named graph (same URN as the
dcat:Dataset
)
GeoJson Data
Telemark-120 includes some Geospatial data in GeoJSON:
- We don't need these 2 files because they are also present in
Telemark-120-MV1_GL.geojson
: point coordinates of 13 medium-voltage Substations (eg L ARENDAL, L ENGENE-NEDENES, L T_ENGENE-ENGENE)Telemark-120-LV1_GL.geojson
: point coordinates of 7 low-voltage Substations (eg "TELEMA2 04 CB4")Telemark-120-WattApp-GL.geojson
: 1 Geospatial GridCapacity MAS1: geometry and CapacitySchedule of the "Sandefjord business and industry area", which is described as a cim:Feeder "A collection of equipment for organizational purposes, used for grouping distribution resources. The organization a feeder does not necessarily reflect connectivity or current operation state"
In addition to GeoJSON, this is also valid JSON-LD, but it has a variety of problems:
- CIM4NoUtility#364 problems in geojson files and CapacitySchedule shows how to convert, and describes the problems we found
- PR CIM4NoUtility#368 converts all files to trig/ttl. You can see the 3 ttl files in question in this commit.
Telemark-120-WattApp-GL.ttl
has this:
<urn:uuid:971c4254-5365-4aaf-8fa6-02658b3f8e05> a dcat:Dataset, geojson:FeatureCollection ;
dcterms:description "Geospartial GridCapacity MAS1"@en ;
geojson:features <urn:uuid:58aee5a8-0cd9-467e-b5e7-180ac161d9b8> ;
<urn:uuid:58aee5a8-0cd9-467e-b5e7-180ac161d9b8> a geojson:Feature ;
geojson:geometry [
a geojson:Polygon ;
geojson:coordinates ( ( ( 1.0229E1 5.9247E1 ) ( 1.0184E1 5.92E1 ) ( 1.0143E1 5.9139E1 )
( 1.0202E1 5.9138E1 ) ( 1.0276E1 5.9161E1 ) ( 1.0311E1 5.9229E1 ) ( 1.0229E1 5.9247E1 ) ) ) ;
] ;
geojson:properties <urn:uuid:4e51e598-8948-4c85-b151-f44ffddc5545> .
<urn:uuid:4e51e598-8948-4c85-b151-f44ffddc5545> a cim:Feeder ;
cim:IdentifiedObject.description "Sandefjord business and industry area"@en .
It's not our job to fix all problems, but we need to fix 2 things:
- Load the file to a named graph (same URN as the
dcat:Dataset
) - Convert to GeoSPARQL WKT the same model as in Nordic44#41 Convert Geographical Location to GeoSPAQL. It may be easier to do this by hand, given that the GeoJson coordinates have been rounded off and mangled to scientific notation:
<urn:uuid:971c4254-5365-4aaf-8fa6-02658b3f8e05> {
<urn:uuid:971c4254-5365-4aaf-8fa6-02658b3f8e05> a dcat:Dataset;
dcterms:description "Geospartial GridCapacity MAS1"@en.
<urn:uuid:4e51e598-8948-4c85-b151-f44ffddc5545> a cim:Feeder, geo:Feature ;
cim:IdentifiedObject.description "Sandefjord business and industry area"@en;
geo:hasGeometry <urn:uuid:58aee5a8-0cd9-467e-b5e7-180ac161d9b8> .
<urn:uuid:58aee5a8-0cd9-467e-b5e7-180ac161d9b8> a geo:Geometry ;
geo:asWKT "POLYGON (10.229020984659712 59.24698254345179, 10.18420614097019 59.19982925336586, 10.142883363023742 59.13888033657065, 10.202442484289662 59.13758660552921, 10.276357875828012 59.16126409167293, 10.310502518638259 59.22922084872761, 10.229020984659712 59.24698254345179)"^^geo:wktLiteral.
}
Time-series Data
Telemark-120 includes some useful data that unfortunately is not in RDF. Schedule/2022/03/30 are mere JSON, not JSONLD.
Data Statistics
- https://cim.ontotext.com/graphdb/sparql
- Created repo
telemark-120
with OWL-RL-optimized reasoning - Loaded
Telemark-120-jsonld.zip
: Imported successfully in 2s. Added 12064 statements.
Prefixes
The following prefixes are used in JSON-LD (except nc-no
), but we put them in a separate file prefixes.ttl
so they are also ingested as repository namespaces.
PREFIX cim: <https://cim.ucaiug.io/ns#>
PREFIX eu: <https://cim.ucaiug.io/ns/eu#>
PREFIX nc-no: <https://cim4.eu/ns/nc-no#>
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX prov: <http://www.w3.org/ns/prov#>
Note: posted enhancement request GDB-12329 ingest JSON-LD prefixes as repo namespaces.
Classes
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
select ?x (count(*) as ?c) {
[] a ?x
filter(!strstarts(str(?x),str(rdf:)))
filter(!strstarts(str(?x),str(rdfs:)))
filter(!strstarts(str(?x),str(owl:)))
} group by ?x order by ?x
87 classes:
- Models: 26
dcat:Dataset
with 21dcterms:PeriodOfTime
(temporal coverage) - GeoSPARQL: 4
geo:Feature
with 3geo:Geometry
about AviationObstacles.- Please note this doesn't include GeoJson Data that is not yet converted to RDF/GeoSPARQL.
- Eg
urn:uuid:7d8a6fba-409a-4dc0-9b1b-f1d46668366e
hasgeo:asWKT, geo:asGeoJSON, geo:asGML
geometry representations - Raised CIM4NoUtility#362 Problems in GeoSPARQL geometry examples
Correlation to Nordic44 and CIM/NC
Classes Unique to Telemark-120
32 classes in Telemark-120 are not in Nordic44 (run the query in telemark-120
):
select ?x (count(*) as ?c) {
[] a ?x
filter not exists {service <repository:nordic44> {[] a ?x}}
} group by ?x order by ?x
x | c | Notes |
---|---|---|
http://www.opengis.net/ont/geosparql#Feature | 4 | Nordic44 doesn't have such but we'll convert PositionPoint to GeoSPARQL |
http://www.opengis.net/ont/geosparql#Geometry | 3 | --"-- |
https://cim.ucaiug.io/ns#AssetModelCatalogueItem | 1 | Price ("Pricing for RTU skap for småkraftverk") for ProductAssetModel "RS5970P" with unitCost |
https://cim.ucaiug.io/ns#BasePower | 1 | basePower "1000"^^xsd:integer. Guess parallels BaseVoltage but is disconnected |
https://cim.ucaiug.io/ns#CommunicationLink | 2 | Eg "Disruptive Technolgies 4G" that connects to a RemoteUnit |
https://cim.ucaiug.io/ns#CurrentTransformer | 4 | Parallels PowerTransformer |
https://cim.ucaiug.io/ns#DiagramObjectStyle | 13 | Kind of DiagramObject (eg "ACLineSegment", "NeighborSubstation") or TextDiagramObject (eg "BusBarNameDisplay") |
https://cim.ucaiug.io/ns#Discrete | 1 | Measurement of "Arendal 132kV Trafo 1 Breaker Switch Position" with values 0..3 |
https://cim.ucaiug.io/ns#DiscreteValue | 4 | Discrete Measurement readings with MeasurementValue.timeStamp |
https://cim.ucaiug.io/ns#EquivalentInjection | 3 | Generation or Load |
https://cim.ucaiug.io/ns#Fuse | 30 | Eg 400 Volt Fuse in a Low Voltage Cable Bay |
https://cim.ucaiug.io/ns#LoadBreakSwitch | 2 | Load break switch (for Nedenes 22kV Transformer in Transformer Bay 1) |
https://cim.ucaiug.io/ns#Meter | 2 | SmartMeters (eg "Nedenes 400 Volt Meter 2") with aspects Asset and EndDevice |
https://cim.ucaiug.io/ns#Name | 10 | Extra name or identifier for a PSR |
https://cim.ucaiug.io/ns#NameType | 2 | Extra identifier/name types: "companyNis", "source" and "heightReference"="base" |
https://cim.ucaiug.io/ns#NameTypeAuthority | 2 | Used with NameType: some Network Information System; Norwegian Mapping Authority |
https://cim.ucaiug.io/ns#PetersenCoil | 2 | PetersenCoil in 132kV Voltage Level |
https://cim.ucaiug.io/ns#PotentialTransformer | 4 | Parallels PowerTransformer |
https://cim.ucaiug.io/ns#ReadingQualityType | 27 | Attributes like systemId "Metering system (data collection) network", subCategory "KnownMissingRead", category "Failed reasonability testing". Maps to eg http://energy.referencedata.eu/ReadingQualityType/2.5.259 (which doesn't resolve) |
https://cim.ucaiug.io/ns#ReadingType | 183 | Eg "fifteenMinute bulkQuantity forward electricitySecondaryMetered energy (kWh)" skos:exactMatch http://data.europa.eu/energy/ReadingType/0.0.2.1.1.1.12.0.0.0.0.0.0.0.0.3.72.0, not used |
https://cim.ucaiug.io/ns#RemoteSource | 1 | Remote source (akin to sensor: scanInterval, sensorMinimum, sensorMaximum) |
https://cim.ucaiug.io/ns#RemoteUnit | 1 | Remote units (akin to sensors) connected by CommunicationLinks |
https://cim.ucaiug.io/ns#StationSupply | 1 | Power supply for a substation, with cim:EnergyConsumer attributes |
https://cim.ucaiug.io/ns#UsagePoint | 14 | End-user usage point with a lot of details. Connects to equipment such as ConformLoad (in a VoltageLevel in a small Substation, and belongs to a ConformLoadGroup), StationSupply, PotentialTransformer, CurrentTransformer |
https://cim.ucaiug.io/ns/eu#BoundaryPoint | 2 | Boundary point from TSO to DSO (Arendal, Nedenes) |
https://cim4.eu/ns/nc-no#ACLineSegmentSpan | 1 | AviationObstacle classes |
https://cim4.eu/ns/nc-no#ACLineSegmentSpanDeployment | 1 | --"-- |
https://cim4.eu/ns/nc-no#Guy | 1 | --"-- |
https://cim4.eu/ns/nc-no#OverheadStructure | 1 | --"-- |
https://cim4.eu/ns/nc-no#StructureDeployment | 1 | --"-- |
https://cim4.eu/ns/nc-no#StructureSupportDeployment | 1 | --"-- |
https://cim4.eu/ns/nc-no#Zone | 1 | Has GeoSPARQL geometry and zoneKind eg nc-no:ZoneKind.substation |
Note: This is the basis of competency questions in [Demo4 Telemark-120].
Other Classes
Conversely, 204 classes are in Nordic44 (with reasoning) but not in Telemark-120 (without reasoning):
select ?x (count(*) as ?c) {
service <repository:nordic44> {[] a ?x}
filter not exists {[] a ?x}
} group by ?x order by ?x
About 95 are cim
and 105 are nc
. This includes:
- Ontology annotations like
cims:ClassCategory
- Different styles of representing Models like
rdfg:Graph, md:Model, dcat:Distribution
- Enumerations like
cim:AsynchronousMachineKind, cim:IfdBaseKind
- Superclasses like
cim:IdentifiedObject, cim:ConductingEquipment
- Electrical classes like
Analog
(analog measurements; whereas Telemark-120 hasDiscrete
measurements)
55 classes are shared between the two datasets:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
select ?x (count(*) as ?c) {
[] a ?x
filter exists {service <repository:nordic44> {[] a ?x}}
filter(!strstarts(str(?x),str(rdf:)))
filter(!strstarts(str(?x),str(rdfs:)))
filter(!strstarts(str(?x),str(owl:)))
} group by ?x order by ?x
Shared Resources
Only 17 resources are shared between Nordic44 and Telemark120:
run this query on telemark-120
PREFIX sesame: <http://www.openrdf.org/schema/sesame#>
PREFIX onto: <http://www.ontotext.com/>
PREFIX cim: <https://cim.ucaiug.io/ns#>
select ?same ?mrid ?name_t ?name_n ?type_t ?type_n
where {
?x_t cim:IdentifiedObject.mRID ?mrid ;
cim:IdentifiedObject.name ?name_t ;
sesame:directType ?type_t .
service <repository:nordic44> {
?x_n cim:IdentifiedObject.mRID ?mrid ;
cim:IdentifiedObject.name ?name_n ;
sesame:directType ?type_n .
}
bind(?x_t=?x_n && ?name_t=?name_n && ?type_t=?type_n as ?same)
} order by ?same
same | mrid | name_t | name_n | type_t | type_n |
---|---|---|---|---|---|
false | 2dd90159-bdfb-11e5-94fa-c8f73332c8f4 | AC-420kV | 420kV | cim:BaseVoltage | cim:BaseVoltage |
false | 2dd90169-bdfb-11e5-94fa-c8f73332c8f4 | AC-300kV | 300kV | cim:BaseVoltage | cim:BaseVoltage |
false | 2dd90174-bdfb-11e5-94fa-c8f73332c8f4 | AC-132kV | 135kV | cim:BaseVoltage | cim:BaseVoltage |
false | cb837454-5c66-d341-be63-d0c044e5fd3c | XARE1_XARE2 CN | ARENDAL CN 015 | cim:ConnectivityNode | cim:ConnectivityNode |
true | f1769670-9aeb-11e5-91da-b8763fd99c5f | ARENDAL | ARENDAL | cim:Substation | cim:Substation |
true | 1f4fabd4-8c57-c245-b107-4e64c9007ae3 | ARENDAL 420 | ARENDAL 420 | cim:VoltageLevel | cim:VoltageLevel |
true | f1769619-9aeb-11e5-91da-b8763fd99c5f | NO5 SGR | NO5 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f17696b3-9aeb-11e5-91da-b8763fd99c5f | FI1 SGR | FI1 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | 2dd9048c-bdfb-11e5-94fa-c8f73332c8f4 | NO | NO | cim:GeographicalRegion | cim:GeographicalRegion |
true | f1769699-9aeb-11e5-91da-b8763fd99c5f | NO3 SGR | NO3 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f1769609-9aeb-11e5-91da-b8763fd99c5f | NO1 SGR | NO1 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f17695af-9aeb-11e5-91da-b8763fd99c5f | SE3 SGR | SE3 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f17695c3-9aeb-11e5-91da-b8763fd99c5f | SE2 SGR | SE2 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f176965f-9aeb-11e5-91da-b8763fd99c5f | NO2 SGR | NO2 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f17696cf-9aeb-11e5-91da-b8763fd99c5f | SE4 SGR | SE4 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f17695cd-9aeb-11e5-91da-b8763fd99c5f | SE1 SGR | SE1 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
true | f17696a3-9aeb-11e5-91da-b8763fd99c5f | NO4 SGR | NO4 SGR | cim:SubGeographicalRegion | cim:SubGeographicalRegion |
- For all of them the URI & type are the same.
- For all except 4, the name is also the same.
- Of these 4 differences, urn:uuid:2dd90174-bdfb-11e5-94fa-c8f73332c8f4 is significant: it's defined as 132kV in Telemark120 but 135kV in Nordic44: Nordic44#64
Resources That Should be Merged
Conversely to the previous section, this query looks for objects with the same name but different mRID in the two datasets, which possibly should be merged to the same URN.
PREFIX sesame: <http://www.openrdf.org/schema/sesame#>
PREFIX cim: <https://cim.ucaiug.io/ns#>
select ?name ?mrid_t ?type_t ?mrid_n ?type_n {
?x_t cim:IdentifiedObject.mRID ?mrid_t ;
cim:IdentifiedObject.name ?name ;
sesame:directType ?type_t.
service <repository:nordic44> {
?x_n cim:IdentifiedObject.mRID ?mrid_n ;
cim:IdentifiedObject.name ?name ;
sesame:directType ?type_n .
}
filter(?mrid_n != ?mrid_t)
} order by ?name
Notes:
- run in repo
telemark120
- the
<repository:nordic44>
federated call is run against Nordic44 data ?mrid_t ?type_t
are Telemark120,?mrid_n ?type_n
are Nordic44
?name | ?mrid_t | ?type_t | ?mrid_n | ?type_n |
---|---|---|---|---|
ARENDAL | f1769670-9aeb-11e5-91da-b8763fd99c5f | cim:Substation | 47eb7c24-d0f6-11e7-9f7b-b46d83638f70 | cim:TopologicalNode |
ARENDAL | f1769670-9aeb-11e5-91da-b8763fd99c5f | cim:Substation | 47eb7c29-d0f6-11e7-9f7b-b46d83638f70 | cim:TopologicalNode |
ARENDAL | f1769670-9aeb-11e5-91da-b8763fd99c5f | cim:Substation | 47eb7c28-d0f6-11e7-9f7b-b46d83638f70 | cim:TopologicalNode |
ARENDAL | f1769670-9aeb-11e5-91da-b8763fd99c5f | cim:Substation | 47eb7c27-d0f6-11e7-9f7b-b46d83638f70 | cim:TopologicalNode |
ARENDAL | f1769670-9aeb-11e5-91da-b8763fd99c5f | cim:Substation | 47eb7c26-d0f6-11e7-9f7b-b46d83638f70 | cim:TopologicalNode |
ARENDAL CN 007 | 681a1e80-5a55-11eb-a658-74e5f963e191 | cim:ConnectivityNode | 6b8e0ffe-1129-e541-9ba1-65e69ebff7a4 | cim:ConnectivityNode |
ARENDAL CN 008 | 1aea01d1-2f09-1a4d-a2b1-872e3f11457f | cim:ConnectivityNode | 20c2eb92-4ef1-204b-9054-c1baaba29845 | cim:ConnectivityNode |
ARENDAL CN 009 | d33115d5-f70a-7543-818c-f15f9b7d4501 | cim:ConnectivityNode | 2751922a-47e7-714b-a611-b90281f72c7e | cim:ConnectivityNode |
ARENDAL CN 010 | 517ac677-7ac0-dd4d-ac94-a191b7c05b13 | cim:ConnectivityNode | 4fdd3c67-0b4a-5145-b123-8404da4b4c37 | cim:ConnectivityNode |
ARENDAL CN 011 | 8f69bfc5-3f5a-7f49-aeab-7df584878465 | cim:ConnectivityNode | 634c0b31-4fe8-2545-b189-6afde342600e | cim:ConnectivityNode |
ARENDAL CN 012 | 734aa236-9549-11ec-b226-48ba4eadba68 | cim:TopologicalNode | b20d8f4b-ad02-ff4e-bd3f-f34a841f2432 | cim:ConnectivityNode |
ARENDAL CN 012 | 730d0140-2cfb-1046-a131-fe4022d80e95 | cim:ConnectivityNode | b20d8f4b-ad02-ff4e-bd3f-f34a841f2432 | cim:ConnectivityNode |
ARENDAL T1 | 681a2fdd-5a55-11eb-a658-74e5f963e191 | cim:PowerTransformer | f1769e1e-9aeb-11e5-91da-b8763fd99c5f | cim:PowerTransformer |
Allocated | 27b2f26a-1444-4d4f-99ae-93d31bb935cf | cim:MeasurementValueSource | 6a4237ae-327d-5a4c-9c10-167725983c17 | cim:MeasurementValueSource |
CONST_P_Q LRC | 6963e27e-9aaa-df42-a71c-1268f02e472f | cim:LoadResponseCharacteristic | f1769759-9aeb-11e5-91da-b8763fd99c5f | cim:LoadResponseCharacteristic |
Calculated | 6c0bb43a-91b3-4543-8fed-f423ed9124f8 | cim:MeasurementValueSource | d9c67735-2e2b-7746-9d00-145c4905db86 | cim:MeasurementValueSource |
Forecasted | 4f620500-e428-4a6c-b3f9-96089de113ee | cim:MeasurementValueSource | 8432a0f5-0640-e34f-b811-331e8bb3712f | cim:MeasurementValueSource |
Forecasted | 4f620500-e428-4a6c-b3f9-96089de113ee | cim:MeasurementValueSource | 3b167a19-ddea-ec45-98be-8a1c2c021457 | cim:MeasurementValueSource |
Forecasted | 4f620500-e428-4a6c-b3f9-96089de113ee | cim:MeasurementValueSource | 817254d6-0199-244f-9bc9-0fd730e1d337 | cim:MeasurementValueSource |
Forecasted | 4f620500-e428-4a6c-b3f9-96089de113ee | cim:MeasurementValueSource | f2f7ec5a-de86-5742-9e75-4a7143b837c8 | cim:MeasurementValueSource |
Forecasted | 4f620500-e428-4a6c-b3f9-96089de113ee | cim:MeasurementValueSource | 5693dfbd-c51e-e343-b1d7-e2d3faa3db5d | cim:MeasurementValueSource |
Forecasted | 4f620500-e428-4a6c-b3f9-96089de113ee | cim:MeasurementValueSource | daf31d05-411f-984e-96d7-560183e1ec67 | cim:MeasurementValueSource |
Operator | e5048824-2bc1-4b72-810b-750981000b6f | cim:MeasurementValueSource | 343ca58a-714a-41e5-8920-5cad9a1b4a94 | cim:MeasurementValueSource |
PATL | a7d9b42e-0f87-4882-903d-1cf454f85df4 | cim:OperationalLimitType | f1769a3e-9aeb-11e5-91da-b8763fd99c5f | cim:OperationalLimitType |
PATL | 681a2679-5a55-11eb-a658-74e5f963e191 | cim:OperationalLimitType | f1769a3e-9aeb-11e5-91da-b8763fd99c5f | cim:OperationalLimitType |
PowerFlow | 793bb713-6c01-46ae-b2d0-2977a4981e70 | cim:MeasurementValueSource | 4c0436b7-532d-a34e-b2ee-a46a5e151536 | cim:MeasurementValueSource |
SCADA | b1a076df-b20d-490d-81a5-6e55efbf403c | cim:MeasurementValueSource | 5d0f3607-8bac-4f08-94e2-c230387560df | cim:MeasurementValueSource |
TATL | 681a267a-5a55-11eb-a658-74e5f963e191 | cim:OperationalLimitType | f1769a3f-9aeb-11e5-91da-b8763fd99c5f | cim:OperationalLimitType |
TATL | 681a267a-5a55-11eb-a658-74e5f963e191 | cim:OperationalLimitType | f1769a40-9aeb-11e5-91da-b8763fd99c5f | cim:OperationalLimitType |
The issue Nordic44#62 proposes a disposition of the above results, eg:
MeasurementValueSource
andOperationalLimitType
could remain different- "ARENDAL T1" must be merged
Ontology Terms
This query finds all ontology terms (properties, classes and enumeration values) that are used by Telemark-120: there are 539.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX cim: <https://cim.ucaiug.io/ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
select distinct ?x {
{ # properties
[] ?x []
filter(!strstarts(str(?x),str(rdf:)))
} UNION { # classes
[] a ?x
} UNION { # enumeration values
[] ?prop ?x
filter(isIri(?x) && regex(str(?x),"cim|entsoe") &&
?prop not in (dcterms:conformsTo, dcterms:spatial, dcterms:accessRights, dcat:isVersionOf, skos:exactMatch))
}
} order by ?x
This query finds ontology terms used in Telemark-120 but not defined in CIM/NC ontologies. There are 217.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX cim: <https://cim.ucaiug.io/ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
select * {
{select distinct ?x {
{ # properties
[] ?x []
filter(!strstarts(str(?x),str(rdf:)))
} UNION { # classes
[] a ?x
} UNION { # enumeration values
[] ?prop ?x
filter(isIri(?x) && regex(str(?x),"cim|entsoe") &&
?prop not in (dcterms:conformsTo, dcterms:spatial, dcterms:accessRights, dcat:isVersionOf, skos:exactMatch))
}
} order by ?x}
filter not exists {
service <repository:nordic44> {
?x a []
}
}
}
Missing CIM/NC Ontology Terms
The complete list of undefined terms is Telemark-120-missing-ontology-terms.txt. This and following subsections include an analysis of these omissions.
- Talk2PowerSystem#37 missing ontology terms used in Telemark-120
Classes and Props. In some cases we also include links to online CIM documentation:
- 3
cim:Analog
props (first 3 at IEC61970/Base/Meas/Analog) - 2
cim:BasePower
- 2
cim:CommunicationLink
- 5
cim:CurrentTransformer
- 3
cim:Discrete
(all 3 at IEC61970/Base/Meas/Discrete) - 1
cim:DiscreteValue.value
(at IEC61970/Base/Meas/DiscreteValue) - 6
cim:EndDevice
(no such props at IEC61968/Metering/EndDevice) - 3
cim:GeneratingUnit
(all at IEC61970/Base/Generation/Production/GeneratingUnit) - 2
cim:Measurement
(Measurement.Asset
not found on IEC61970/Base/Meas/Measurement) - 1
cim:Meter
class - 1
cim:Name.IdentifiedObject
- 3
cim:NameTypeAuthority
- 3
cim:PotentialTransformer
- 1
cim:RatioTapChanger.tculControlMode
- 4
cim:ReadingQualityType
- 11
cim:ReadingType
- 5
cim:RemoteSource
- 2
cim:RemoteUnit
- 2
cim:SynchronousMachine
- 20
cim:UsagePoint
- 1
nc:BaseTimeSeries.method
- 1
nc:CapacitySchedule.CapacityTimePoint
- 9
nc:CapacityTimePoint
- 1
Feeder.CapacitySchedule
Enum values and Enumeration Classes (shown as "+1" below).
- 3+1
cim:AccumulationKind
(all are at IEC61968/Metering/AccumulationKind) - 1+1
cim:AggregateKind
- 2+1
cim:AmiBillingReady
- 1+1
cim:CommodityKind
- 1+1
cim:ConnectionState
- 1
cim:InUseStateKind.inUse
. This is also used in Nordic44 but not defined? - 1
cim:MacroPeriodKind.sixtyMinute
(not found on IEC61968/Metering/MacroPeriodKind?) - 3
cim:MeasurementKind
(only last one found on IEC61968/Metering/MeasurementKind) - 1
cim:PotentialTransformerKind.capacitiveCoupling
- 1
cim:RemoteUnitType.IED
- 1
cim:TransformerControlMode.volt
Missing External Terms
External terms:
- 1
dcterms:PeriodOfTime
: need to copy definition from DCT - 6 GeoSPARQL: need to copy definitions from GeoSPARQL.
geo:Feature
geo:Geometry
geo:asGML
geo:asGeoJSON
geo:asWKT
geo:hasGeometry
- Furthermore, need to define GeoSPARQL magic predicates and/or functions, and describe which to use in
cims:pragmatics
geo:sfWithin vs geof:sfWithin
# etc
- 7 geojson: will be converted as per Talk2PowerSystem_PM#141 convert Telemark-120 geojson to GeoSPARQL
Missing NC-NO Ontology
- 38
nc-no:
terms: CIM4NoUtility#374 Where is the nc-no: ontology
Missing Asset-Related Ontology Terms
A number of terms are related to Assets.
- https://github.com/statnett/CIM4Enterprise/tree/main/profile/merge-owl has Asset Management (AS), Asset Catalogue (AC) and CDPSM ontologies, but they need to be modernized.
- Nordic44#35 fixes needed to new ontologies (AS, AC, CDPSM)
- Talk2PowerSystem_PM#109 missing ontology terms
- The latter lists these:
Asset*, Manufacturer*, Organization*, Ownership*, ProductAssetModel*
and(BusbarSection|Cable|OverheadWire|PowerTransformer|ShuntCompensator|Switch|TapChanger|TransformerEnd|TransformerTank|Wire)Info*
The full list of asset terms used in Telemark-120 is as follows:
- Asset
- Asset.PowerSystemResources
- Asset.baselineCondition
- Asset.baselineLossOfLife
- Asset.lifecycleState
- Asset.lotNumber
- Asset.position
- Asset.purchasePrice
- Asset.type
- Asset.utcNumber
- AssetDeployment.BaseVoltage
- AssetDeployment.deploymentState
- AssetKind.other
- AssetKind.transformer
- AssetLifeCycleStateKind.received
- AssetModelCatalogueItem <<< This is unique to Telemark-120
- AssetModelCatalogueItem.unitCost
- CableInfo
- CableInfo.constructionKind
- CableInfo.outerJacketKind
- CableOuterJacketKind.pvc
- CableShieldMaterialKind.aluminum
- CableConstructionKind.stranded
- Manufacturer
- Manufacturer.ProductAssetModel
- PowerSystemResource.AssetDatasheet
- PowerTransformerInfo
- ProductAssetModel
- ProductAssetModel.AssetModelCatalogueItem
- ProductAssetModel.drawingNumber
- ProductAssetModel.instructionMnaual
- ProductAssetModel.modelVersion
- ProductAssetModel.weightTotal
- WireInfo.radius
- WireInfo.ratedCurrent
- WireInsulationKind.other
- WireMaterialKind.aluminum
I wrote a script in CIM4Enterprise/pull/6/commit to count term definitions of Telemark-120 across CIM4Enterprise ontologies. TODO: move to some better location.
Here is the count by descending number of definitions:
term | Asset.ttl | AssetCatalogue.ttl | ElectricalProperties.ttl | Functional.ttl | Statnett_CDPSM_ED2.ttl | TOTAL |
---|---|---|---|---|---|---|
CableOuterJacketKind.pvc | 1 | 1 | 1 | 1 | 1 | 5 |
CableShieldMaterialKind.aluminum | 1 | 1 | 1 | 1 | 1 | 5 |
CableConstructionKind.stranded | 1 | 1 | 1 | 1 | 1 | 5 |
WireInsulationKind.other | 1 | 1 | 1 | 1 | 1 | 5 |
WireMaterialKind.aluminum | 1 | 1 | 1 | 1 | 1 | 5 |
Asset | 1 | 1 | 2 | |||
Asset.PowerSystemResources | 1 | 1 | 2 | |||
Asset.lotNumber | 1 | 1 | 2 | |||
Asset.type | 1 | 1 | 2 | |||
CableInfo | 1 | 1 | 2 | |||
CableInfo.constructionKind | 1 | 1 | 2 | |||
Manufacturer | 1 | 1 | 2 | |||
PowerSystemResource.AssetDatasheet | 1 | 1 | 2 | |||
PowerTransformerInfo | 1 | 1 | 2 | |||
ProductAssetModel | 1 | 1 | 2 | |||
ProductAssetModel.modelVersion | 1 | 1 | 2 | |||
WireInfo.radius | 1 | 1 | 2 | |||
WireInfo.ratedCurrent | 1 | 1 | 2 | |||
Manufacturer.ProductAssetModel | 1 | 1 | ||||
Asset.baselineCondition | ||||||
Asset.baselineLossOfLife | ||||||
Asset.lifecycleState | ||||||
Asset.position | ||||||
Asset.purchasePrice | ||||||
Asset.utcNumber | ||||||
AssetDeployment.BaseVoltage | ||||||
AssetDeployment.deploymentState | ||||||
AssetKind.other | ||||||
AssetKind.transformer | ||||||
AssetLifeCycleStateKind.received | ||||||
AssetModelCatalogueItem | ||||||
AssetModelCatalogueItem.unitCost | ||||||
CableInfo.outerJacketKind | ||||||
ProductAssetModel.AssetModelCatalogueItem | ||||||
ProductAssetModel.drawingNumber | ||||||
ProductAssetModel.instructionMnaual | ||||||
ProductAssetModel.weightTotal | ||||||
TOTAL | 9 | 14 | 5 | 6 | 18 |
As you can see, about half the terms are not yet defined:
- Asset.baselineCondition
- Asset.baselineLossOfLife
- Asset.lifecycleState
- Asset.position
- Asset.purchasePrice
- Asset.utcNumber
- AssetDeployment.BaseVoltage
- AssetDeployment.deploymentState
- AssetKind.other
- AssetKind.transformer
- AssetLifeCycleStateKind.received
- AssetModelCatalogueItem
- AssetModelCatalogueItem.unitCost
- CableInfo.outerJacketKind
- ProductAssetModel.AssetModelCatalogueItem
- ProductAssetModel.drawingNumber
- ProductAssetModel.instructionMnaual
- ProductAssetModel.weightTotal
There is also one misspelling: ProductAssetModel.instructionMnaual
Telemark-120 Errors
This section describes general data problems with Telemark-120
Missing/Wrong Prefixes
Issue #369: Prefixes for these namespaces are not specified in Telemark-120:
- http://cim4.eu/ns/nc# as in http://cim4.eu/ns/nc#NameType.NameTypeAuthority
- http://entsoe.eu/ns/nc# as in http://entsoe.eu/ns/nc#NameType.NameTypeAuthority
Issue #371: in fact the latter is wrong and should be replaced with the former. There are 6 terms that use this namespace, shown with counts:
PREFIX eunc: <http://entsoe.eu/ns/nc#>
select ?x (count(*) as ?c) where {
{[] a ?x} union {[] ?x []}
filter(strstarts(str(?x),str(eunc:)))
} group by ?x
There are also 4 terms with wrong namespace http://cim4.eu/ns/nc#
(should be https
).
Conflicting NameTypes
Issue #370.
urn:uuid:3868b80f-7e64-4fc0-a851-ce6835676a6e (cim:NameTypeAuthority) has conflicting data:
- In model urn:uuid:2e4ac4ff-692d-48e5-9837-cc0db61ee3dd it has cim:NameTypeAuthority.name "companyNis"
- In model urn:uuid:f1d9a88d-0ff5-4e4b-9d6a-c353fe8232c3 it has cim:NameTypeAuthority.name "source"
urn:uuid:d56ca01d-7801-4e1b-ac69-c2059143475f (cim:NameType) has conflicting data:
- In model urn:uuid:2e4ac4ff-692d-48e5-9837-cc0db61ee3dd it has cim:NameType.name "companyNisId"
- In model urn:uuid:f1d9a88d-0ff5-4e4b-9d6a-c353fe8232c3 it has cim:NameType.name "sourceId"
This problem together with Issue #371 is illustrated by this query:
PREFIX cim: <https://cim.ucaiug.io/ns#>
PREFIX nc: <http://cim4.eu/ns/nc#>
PREFIX eunc: <http://entsoe.eu/ns/nc#>
select * {
?x a cim:Name
optional {?x nc:Name.NameType/cim:NameType.name ?type1}
optional {?x eunc:Name.NameType/cim:NameType.name ?type2}
optional {?x cim:Name.name ?name}
}
x | type1 | type2 | name |
---|---|---|---|
urn:uuid:1fb68b4a-5705-435d-9f28-1a70154181bb | sourceId | 6573456 | |
urn:uuid:1fb68b4a-5705-435d-9f28-1a70154181bb | companyNisId | 6573456 | |
urn:uuid:25d820b5-f930-42c7-809a-0c1706dd62fe | sourceId | 454613 | |
urn:uuid:25d820b5-f930-42c7-809a-0c1706dd62fe | companyNisId | 454613 | |
urn:uuid:57ae9503-f0f0-4498-bf9f-a7d4e77b4b74 | sourceId | 65745245 | |
urn:uuid:57ae9503-f0f0-4498-bf9f-a7d4e77b4b74 | companyNisId | 65745245 | |
urn:uuid:fd353b3b-bb97-498d-bdcc-2c8ce9b01378 | heightReference | base | |
urn:uuid:12ba87f6-d635-41a8-add4-c917db73953d | sourceId | 6573456 | |
urn:uuid:12ba87f6-d635-41a8-add4-c917db73953d | companyNisId | 6573456 | |
urn:uuid:a5cd373a-70b5-4c49-baa1-5bd21a2816b2 | sourceId | 6534512 | |
urn:uuid:a5cd373a-70b5-4c49-baa1-5bd21a2816b2 | companyNisId | 6534512 | |
urn:uuid:ba68a6ec-a706-465b-8c36-7a875de5d3c9 | sourceId | 8345723 | |
urn:uuid:ba68a6ec-a706-465b-8c36-7a875de5d3c9 | companyNisId | 8345723 | |
urn:uuid:c229b6a8-03ef-499b-9b3d-f661a92b8d6a | sourceId | 653497324 | |
urn:uuid:c229b6a8-03ef-499b-9b3d-f661a92b8d6a | companyNisId | 653497324 | |
urn:uuid:cd0ec51f-f672-48e0-b1fd-5a0c65be4aee | sourceId | 65767234 | |
urn:uuid:cd0ec51f-f672-48e0-b1fd-5a0c65be4aee | companyNisId | 65767234 | |
urn:uuid:e08e14be-3cb2-4f79-a54a-62b54085aa06 | sourceId | 27785734 | |
urn:uuid:e08e14be-3cb2-4f79-a54a-62b54085aa06 | companyNisId | 27785734 |
- The same name appears as both
companyNisId
andsourceId
?type1
(the correct namespace) should be populated in all rows,?type2
(the wrong namespace) should not be populated
Questionable Modeling of OverheadStructure
Issue #372.
urn:uuid:1f521353-04da-47f7-bcc9-17e1aefb7beb is nc-no:OverheadStructure
with nc-no:OverheadStructure.height
20.04 and nc-no:OverheadStructure.maxHeight
21.04.
- It also has "heightReference"="base".
- This is expressed as a
cim:Name
withcim:Name.name
"base" andnc:Name.NameType/cim:NameType.name
"heightReference". - However, "base" is not a name or identifier of that
OverheadStructure
! It is a qualifier for its two attributesheight
andmaxHeight
- So this is an improper use of
cim:Name
- As per AviationObstacleReporting.adoc, this comes from original field
referanse.komponentkodeverdi
- But you should use a dedicated field such as
OverheadStructure.heightReference
, with an appropriate enum
- This is expressed as a
- Nothing says that the unit of measurement is Meters.
Obstacles to Aviation is not well modeled
CIM4NoUtility#383 Obstacles to Aviation is not well modeled (need superclass AviationObstacle).
For this question:
List all obstacles to aviation, with name, description, lighting and marking kind, dimensions (length, width, height etc), WKT coordinates, location method
I had to write this query:
PREFIX cim: <https://cim.ucaiug.io/ns#>
PREFIX nc-no: <https://cim4.eu/ns/nc-no#>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
select ?name ?descr ?lighting ?marking ?length ?spanLength ?maxWidth ?height ?maxHeight ?coords ?wkt ?locationMethod {
?x cim:IdentifiedObject.name ?name;
nc-no:Guy.aviationObstacleLightingKind|nc-no:ACLineSegmentSpan.aviationObstacleLightingKind|nc-no:OverheadStructure.aviationObstacleLightingKind ?lighting;
nc-no:Guy.aviationObstacleMarkingKind|nc-no:ACLineSegmentSpan.aviationObstacleMarkingKind|nc-no:OverheadStructure.aviationObstacleMarkingKind ?marking;
geo:hasGeometry/geo:asWKT ?wkt.
optional {?x cim:IdentifiedObject.description ?descr}
optional {?x nc-no:Guy.length ?length}
optional {?x nc-no:OverheadStructure.height ?height}
optional {?x nc-no:Guy.maxHeight|nc-no:ACLineSegmentSpan.maxHeight|nc-no:OverheadStructure.maxHeight ?maxHeight}
optional {?x nc-no:Guy.maxWidth|nc-no:ACLineSegmentSpan.maxWidth ?maxWidth}
optional {?x nc-no:ACLineSegmentSpan.spanWireLength ?spanLength}
optional {?x nc-no:PowerSystemResource.locationMethod|nc-no:LocationResource.locationMethod ?locationMethod}
}
Problems:
- there's no superclass
AviationObstacle
so the query resorts to finding them by the presence of propsaviationObstacleLightingKind, aviationObstacleMarkingKind
- the descriptive props have the same meaning, but different per-class URLs: see all the alternate prop paths
|
above. Another way of saying this is: many things can have amaxHeight
. You want to use the same prop, rather than a gazillion props per class
This proposed superclass may need to be a secondary parent of the respective classes. RDF supports multiple inheritance, though I haven't seen it used in CIM.
Ontology-related Errors
Wrong terms in Telemark-120 data:
ActivePower.value, ReactivePower.value
: CIM4NoUtility#364 parasitic blank nodes with attributes likecim:ReactivePower.value, cim:ActivePower.value
- Wrong use of
cim:FlowDirectionKind.forward
as enum value? CIM4NoUtility#375 - wrong enum value
PhaseCode.phaseA
, should becim:PhaseCode.A
: CIM4NoUtility#377 - prop
cim:RemotePoint.RemoteUnit
should becim:RemoteSource.RemoteUnit
: CIM4NoUtility#378 - wrong units
UnitSymbol.Deg, UnitSymbol.VAR
. The correct spelling iscim:UnitSymbol.deg, cim:UnitSymbol.VAr
: CIM4NoUtility#379 - Feeder's
CapacitySchedule
uses wrong props, lacks URI and type: CIM4NoUtility#380