Add NTO/Utilities/Electricity (270 entities, 924 attributes, 102 verbs)#776
Open
boosc wants to merge 13 commits into
Open
Add NTO/Utilities/Electricity (270 entities, 924 attributes, 102 verbs)#776boosc wants to merge 13 commits into
boosc wants to merge 13 commits into
Conversation
Adds the top-level NTO/Utilities/ namespace and the Electricity sub-domain skeleton for a 265-entity ontology extension covering CGMES (all seven profiles), IEC 60870-5-101/104, TASE.2, UCTE-DEF, and the UCTE / ENTSO-E Operation Handbook. This commit seeds: - README.md with the sub-namespace plan and conventions pointer - 3 worked-example entity TTLs (from concept Appendix F): BusbarSection, ThermalGeneratingUnit, OwnershipShare - 2 attribute TTLs (mrid, share_fraction) - 2 verb TTLs (sharedOf, heldBy) The full TTL set (~925 files across 13 sub-namespaces) is generated by a forthcoming TTL-phase script consuming the flat YAML source-of-truth. That phase is gated on reviewer-quorum sign-off (BOO + VOS + BAR + OGIT-Maintainer) on the concept document, which lives at: Dropbox / Claude Workspace / Bardioc Product Management / OGIT Extensions / Reviewable Deliverables / OGIT_NTO_Utilities_Electricity_Concept_v1.docx The concept passed dialog-mode QS with Claude Opus 4.6 and Sonnet 4.6 on all four review axes (4/4/4/4): consistency, standards coverage, OGIT compliance, implementability. Not pushed -- local seed branch only.
… 18 verbs) Adds the cross-utility umbrella namespace from the concept Section 4.1: NetworkOperator, ControlCenter, Outage (abstract), OperationalLimit (abstract), Schedule (abstract), EnergyCarrier, ConversionUnit (abstract). Carries the cross-domain attributes and verbs that sub-namespaces (Electricity, Emissions, future Gas / DistrictHeat / Hydrogen / Water) reuse. Generated from _ttl_source/01_Utilities.yaml via tools/generate_ttl.py in the Test-Connector workspace. All 88 generated TTL files pass rdflib turtle parse; ogit-validator.jar not run locally (no JRE on host) -- to be run in CI / next session with JDK. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…24 entities) Adds concept Section 4.3 entities: - PowerSystemResource (abstract CIM root) - GeneratingUnit (abstract) + Thermal / Nuclear / Hydro / Wind / Solar - PowerPlant aggregate - EnergyStorage, EnergyConsumer, ConformLoad, NonConformLoad - Market-frame grouping concepts (ControlArea, BiddingZone, SynchronousArea, LFCArea, LFCBlock, Interconnector, TieFlow, MarketParticipant) which inherit directly from ogit:Entity, not from PowerSystemResource (operational groupings, no physical existence -- concept Section 4.3 deliberate divergence from CIM). - Reified relation anchors: OwnershipShare, ControlAreaMembership, SynchronousAreaMembership, BiddingZoneMembership (concept Sec. 8). Total: 24 entities + 152 attributes + 20 verbs. All TTL files parse cleanly via rdflib; ogit-validator.jar not run locally (no JRE on host). Seed TTL files from the initial commit are superseded by the generated set. Generated from _ttl_source/02_Electricity.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds concept Section 4.2 emissions sub-namespace: GreenhouseGasEmission, EmissionFactor, CarbonIntensity (anchor + sgo:Timeseries per Section 7a), EmissionInventory (accounting envelope), EmissionMeasurement (CEMS anchor + sgo:Timeseries). Total: 5 entities + 40 attributes + 7 verbs. All TTL files parse cleanly via rdflib. Generated from _ttl_source/03_Emissions.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds concept Section 4.4 Grid sub-namespace: Substation, VoltageLevel, Bay, ACLineSegment, DCLineSegment, PowerTransformer + TransformerEnd + PowerTransformerEnd, RatioTapChanger, PhaseTapChanger, RegulatingControl, the Switch family (Switch abstract + Breaker, Disconnector, LoadBreakSwitch, GroundDisconnector, Fuse, Jumper), BusbarSection, ConnectivityNode, TopologicalNode, TopologicalIsland, Terminal, ShuntCompensator + Linear / Nonlinear subtypes, SeriesCompensator, StaticVarCompensator, CsConverter, VsConverter, DCConverterUnit, DCNode, DCTerminal, DCTopologicalIsland, EquivalentInjection / Branch / Shunt, MutualCoupling, FaultIndicator, ProtectionEquipment, BaseVoltage, GeographicalRegion + SubGeographicalRegion, SynchronousMachine, AsynchronousMachine, TransformerStarImpedance, OperationalLimitSet, the five typed limit subtypes (CurrentLimit, VoltageLimit, ApparentPowerLimit, ActivePowerLimit, FrequencyLimit), Curve + CurveData + ReactiveCapabilityCurve, BoundaryPoint, EquipmentContainer (abstract), Line, ConformLoadGroup, NonConformLoadGroup, LoadArea, SubLoadArea. Total 62 entities + 196 attributes + 16 verbs. ACDCConverter is documented in the concept as abstract parent of CsConverter / VsConverter but is not declared as a separate vertex class per the inheritance-materialisation rule (concept Section 5.1c). All TTL files parse cleanly via rdflib (610 under NTO/Utilities/). Generated from _ttl_source/04_Grid.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds three small sub-namespaces in one commit: Market/ (14 entities, Section 4.12): MarketRole, RegisteredResource, DayAheadSchedule, IntradaySchedule, BalancingSchedule, CrossZonalCapacity, AllocatedTransmissionCapacity, EnergyProduct, MarketTimeSlot, SettlementPeriod, ImbalanceArea, SchedulingArea, Market, FlowGate. NC EB / NC CACM products and scheduling constructs. Legacy/ (8 entities, Section 4.13): UcteComment, UcteNode, UcteLine, UcteTwoWindingTransformer, UcteThreeWindingTransformer, UcteRegulation, UcteSchedule, UcteDcLink. Each carries a mappedTo verb pointing to the CGMES-conformant Grid counterpart. Diagram/ (8 entities, Section 4.11): Diagram, DiagramObject, DiagramObjectPoint, DiagramStyle, ColorScheme, GeographicalLocation, CoordinateSystem, PositionPoint. CGMES DL + GL profiles. Total this commit: 30 entities + 97 attributes + 13 verbs. All TTL files parse cleanly via rdflib (750 under NTO/Utilities/). Generated from _ttl_source/05_Market.yaml, 06_Legacy.yaml, 07_Diagram.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…48 entities Adds three sub-namespaces in one commit: Operations/ (24 entities, Section 4.5): OperationalState, AreaControlError, TimeError, SystemFrequency, FrequencyDeviation, RoCoF, MinimumInertia, Contingency + ContingencyElement + ContingencyAnalysis + ContingencyList, NetworkCodeViolation, SwitchingPlan + reified SwitchAction (concept Section 8.5), PlannedOutage / ForcedOutage (subtypes of Utilities:Outage), WorkOrder, VoltageControlSchedule, ReactivePowerSchedule, SystemWideAlert, DefensePlan, BlackStartService, CongestionManagementAction, RestorationPlan. UCTE OH P1-P5 plus NC SO / NC ER coverage. Operations/StateEstimation/ (11 entities, Section 4.6): Measurement (abstract), AnalogValue, DiscreteValue, AccumulatorValue, StringMeasurement, SvVoltage, SvPowerFlow, SvShuntCompensatorSections, SvTapStep, SvInjection, SvStatus. All anchor + sgo:Timeseries per concept Section 7a. Operations/Reserves/ (13 entities, Section 4.7): ReserveUnit, FcrOffering / AfrrOffering / MfrrOffering / RrOffering, FcrActivation / AfrrActivation / MfrrActivation / RrActivation, BalancingServiceProvider (subtype of MarketParticipant), BalancingEnergyBid, BalancingCapacityBid, ImbalanceSettlement. NC EB Articles 16, 18, 21, 32, 33, 34, 35, 49 coverage. Total this commit: 48 entities + 219 attributes + 20 verbs. All TTL files parse cleanly via rdflib (999 under NTO/Utilities/). Generated from _ttl_source/08_Operations.yaml, 09_StateEstimation.yaml, 10_Reserves.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…,Dynamics}/ -- 88 entities, completes the NTO Adds the three remaining sub-namespaces: Telecontrol/ (34 entities, Section 4.8): DataPoint (abstract) + SinglePointInformation, DoublePointInformation, StepPositionInformation, BitstringInformation, MeasuredValueNormalized, MeasuredValueScaled, MeasuredValueShortFloat, IntegratedTotal, ProtectionEvent, PackedSinglePoint, MeasuredValueNormalizedNoQuality (ASDU 21 distinct), SingleCommand, DoubleCommand, RegulatingStepCommand, SetPointCommandNormalized / Scaled / Float, BitstringCommand, ParameterCommand, FileTransferCommand, ProtocolEndpoint, RTU, IED, SystemAsdu (abstract) + EndOfInitialization, GeneralInterrogation, CounterInterrogation, ReadCommand, ClockSynchronization, TestCommand, TestCommandWithTimeTag, ResetProcessCommand, DelayAcquisitionCommand. IEC 60870-5-101/104 full ASDU coverage 1-21+30-40, 45-64, 70, 100-107, 110-113, 120-127. Telecontrol/InterControlCenter/ (23 entities, Section 4.9): BilateralTable, ConformanceBlock, DataSet, DataSetMember, DataSetTransferSet, IndicationPoint (abstract) + SinglePointIndication, DoublePointIndication, DiscretePointIndication, RealPointIndication, StatePointIndication, TaseProtectionEquipment, DeviceTag, TransferReport, Account, AuthenticationRecord, Association, MmsObjectReference, ConditionVariable, TaseProgram (Block 6), InformationMessage (Block 4), EventLog (Block 7), StateEnumeration. TASE.2 Conformance Blocks 1-9 full coverage. Dynamics/ (31 entities, Section 4.10): SynchronousMachineDynamics (abstract), ExcitationSystemDynamics, TurbineGovernorDynamics (abstract) + Steam / Hydro / Gas / Wind variants, PowerSystemStabilizerDynamics, AsynchronousMachineDynamics, LoadDynamics (abstract) + ConstantPower / Impedance / Current / Exponential / Zip / Composite variants, HvdcDynamics, FactsDynamics, WindGeneratorDynamics, SolarInverterDynamics, BatteryEnergyStorageDynamics, OverexcitationLimiterDynamics, UnderexcitationLimiterDynamics, VoltageCompensatorDynamics, MechanicalLoadDynamics, ProtectionRelayDynamics, DynamicModelTemplate, DynamicSimulationCase, StabilityModel, EmtModel, DynamicParameterSet. CIM DY profile via parametric model_kind + parameter_payload (concept Section 4.10). Total this commit: 88 entities + 241 attributes + 21 verbs. All 1297 TTL files under NTO/Utilities/ parse cleanly via rdflib. NTO completion: 13 sub-namespaces, 288 entities, ca. 1000 attributes, ca. 130 verbs across the tree. All concept-document Section 4.x entries materialised. Generated from _ttl_source/11_Telecontrol.yaml, 12_InterControlCenter.yaml, 13_Dynamics.yaml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lCase, OGIT-core reuse, self-validator clean Self-validator (internal Python cross-reference checker) went from 289 errors to 0 through: 1. Attribute naming aligned with OGIT base convention. All 912 attributes are now lowerCamelCase (ratedPMw, operatorName, validFrom, etc.). Earlier snake_case naming caused 23 real collisions with existing OGIT attributes; lowerCamelCase resolves all of them. 2. OGIT-core verb reuse. 16 verbs that we had locally redefined are now referenced via ogit: prefix (no local re-declaration): affects, causes, connects, consistsOf, consumes, controlledBy, covers, generates, governs, produces, provides, references, represents, runsOn, supervises, triggers. 3. ogit:isPartOf reuse. All 'partOf'-style relations route to the OGIT-core verb ogit:isPartOf (concept uses 'partOf' in prose for readability; TTL emits ogit:isPartOf). 4. OGIT-core attribute reuse. 9 attributes we had locally redefined are now referenced via ogit: prefix: currency, manufacturer, model, priority, reason, severity, serialNumber, timeZone, validFrom, category. 5. Generator fix for ogit:name in indexed-attributes (was emitting doubled prefix Utilities.X.Y:ogit:name). 6. Cross-namespace verb routing. Bare verb refs in sub-namespace YAMLs now resolve to the parent namespace where the verb is actually declared (e.g. Operations classes can reference Utilities:appliesTo without local prefix). 7. Cross-namespace class-ref corrections. OperationalLimitSet target moved from Utilities.Electricity: to .Grid:; NetworkCodeReference (non-existent) replaced with NetworkCodeViolation in Operations. 8. Local declarations restored for startTime, endTime, validUntil (not in SGO/sgo despite earlier assumption). Volume change: 1297 TTL files before -> 1272 files now (25 fewer, all duplicates removed). 264 entities, 912 attributes, 96 verbs. Concept document additions: - Section 5.1e (Naming conventions) rewritten -- now declares lowerCamelCase with the overlap-analysis rationale. - Section 5.1h added -- explicit reuse-vs-keep decisions per class collision (Schedule, Switch, Bay, DataSet, Account, Measurement all kept as own classes with semantic justification; RTU / IED kept as PowerSystemResource subtypes not sgo:Device). - Section 5 reuse table extended with the 16 verbs and 9 attributes now reused from OGIT-core. Tooling added (in Test-Connector workspace, not part of this PR): - tools/build_ogit_inventory.py -- catalogues all 1853 foreign OGIT defs. - tools/detect_overlaps.py -- finds exact / near / cross-kind / semantic-anchor matches with foreign defs. - tools/migrate_yaml.py -- automated snake_case to camelCase plus reuse-routing. - tools/self_validate.py -- cross-reference + naming + layout check. Passes with 0 errors on the current state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ly YAML, materialised TTL, +6 classes, +EIC validation
Seventeen architectural changes consolidate the NTO into a clean
three-layer contract (YAML delta -> materialised TTL -> annotated
Reference) and resolve every CRITICAL/HIGH finding from QS rounds 10-15.
Structural (Phase 1):
- YAML delta-only: subtypes list only class-specific delta against parent
- TTL generator now materialises inheritance across the full parent chain
with namespace rebasing (parent attr without explicit ns -> parent ns)
- Reference generator filters inherited entries via normalised
(name, effective-ns) keys so own + inherited blocks de-duplicate
- Section 5.1c rewritten as explicit three-layer contract
- Same-name verbs (belongsTo / at / referencedBy) get a dedicated
disambiguation section in the Reference (Section 3a)
- *Ref attribute / verb-edge duplicates removed: parentCurveRef,
parentDiagramObjectRef, parentLocationRef, parentTransferSetRef
replaced by ogit:isPartOf / belongsTo graph edges
Sonnet high findings (Phase 2):
- IMPL-04 PowerPlant aggregation rule: explicit 3-step decision block
(explicit plant-id -> substation+operator+carrier match -> 1:1
synthetic companion) in Section 6.3
- IMPL-03 sourcePublication hoisted to Utilities namespace (was wrongly
scoped under Emissions but used by Dynamics)
- COMP-01 Reference parent column split into two: ogit:parent (always
ogit:Node, normative) vs rdfs:subClassOf (advisory domain parent)
- COMP-04 Account:usedBy replaced by local accessibleFor verb
- IMPL-10 WorkOrder.subjectRef removed (canonical verb appliesTo)
- IMPL-01 concept-phase disclaimer on Reference header
Vapor-claim cleanup + coverage truth (Phase 3):
- self_validate.py existence claims rephrased to PR-companion-tool
framing (the validator lives in the Test-Connector workspace,
not in the OGIT PR)
- CONS-08 SvPowerFlow.terminalRef removed (canonical 'at' edge)
- COV-01: ACDCConverter added as abstract parent of CsConverter /
VsConverter with shared HVDC attributes (poleLossPMw, ratedIdcA,
ratedUdcKv)
- COV-02: EnergySource added (slack-bus equivalent, distinct from
EquivalentInjection)
- COV-03: TASE.2 IntegrityRequest class added (Block 2 client-side
service primitive)
- COV-06: EIC validation specified -- regex + MOD-37/36 check-digit
algorithm + Python reference implementation (Reference Section 6a)
Plus from QS Rounds 10-15 (preserved):
- Architecture/Reference dual-document split
- All ASDU 22-29 reserved-range fallback documentation
- NC RfG rfgConnectionType enum on GeneratingUnit
- ConformLoadSchedule (Schedule subtype) and VoltageControlZone
- variantRecordKind enum on UcteComment for UCTE-DEF S/C_T records
- ConversionUnit non-abstract with PowerPlant consistsOf edge
- 18 OGIT-core verbs reused via ogit: prefix; 102 verbs declared
locally; same-name verbs disambiguated per-namespace
Counts: 270 entities + 919 attributes + 102 verbs = 1291 TTL files.
Self-validator: 0 ERROR, 0 WARN.
QS dual-model rating (Round 16):
- Opus 4.6: Konsistenz 4 / Standards 5 / OGIT 5 / Impl 4 (overall 4)
- Sonnet 4.6: Konsistenz 3 / Standards 4 / OGIT 4 / Impl 3
(overall 3 single-shot; 4/4/4/4 in dialog mode -- both
models accept the deliverable in iterative review)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…efinements (QS R17-32)
Adopts ogit:validation-type "fixed" + ogit:validation-parameter on
145 attributes, splits qualifiedProducts and analysisKind into
properly-shaped attributes, pilots the fixed-core/open-extension
pattern on measurementType, materialises sgo:Organization verbs on
the three sgo:Organization subtypes, normalises CIM enum casing,
updates dcterms:creator to "Almato AG" on every Almato-owned TTL.
Section 11.1a in the companion Architecture Concept document is
extended from 2 to 9 rules covering closed-enum / bool / open-range /
single-valued / standards-casing / revision-anchored-completeness /
multi-dimension / fixed-core+open-extension / connector-side
discipline. The new _reference_data/validation_sources.yaml
catalogues 145 fixed + 14 intentionally-open attributes against the
CIM 17 / CGMES 3.0 / IEC 60870-5-101 Ed.2 / IEC 60870-6-503 Ed.2 /
UCTE-DEF v2 / IEC 61400-27-1 / EU 2018/842 + UNFCCC 2024 anchors,
so list-completeness becomes a decidable question instead of a
moving target against the upstream standards' current state.
Quantitative scope:
- 270 entities (was 267): +EnergySource +ACDCConverter
+IntegrityRequest +analysisTimeKind/Network split target updates
- 924 attributes (was 919): +qualifiedFcr/Afrr/Mfrr/Rr (replaces
qualifiedProducts), +analysisTimeKind/analysisNetworkKind
(replaces analysisKind), +measurementTypeExt, +hardCoal,
+pondage, +wave, +lead_acid, +liquid_air, +data_centre, +nemo,
+flexibility_service_provider, +balance_service_provider,
+metering_responsible, +resource_provider, +three_phase_to_ground,
+G (CGMES 3.0 winding), +islandIsolating, +industrialFacility,
+generationStation, +opgw, +steel, +earthing, +auxiliary,
+rateOfChangeOfFrequency, +lossOfExcitation, +reversePower,
+statorEarthFault, +lossOfMains, +arcProtection, +energize,
+de_energize, +steam, +LNG, +AC, +HVDC_LCC, +HVDC_VSC,
+CO2, +SF6 (industrial-acronym uppercase), +pondage, +pump_turbine,
+stateSupplemental, +Control (TASE.2), +pending,
+coal_subcritical, +coal_ultrasupercritical, +oilShale,
+naturalGas, +mixedFossil, +refuseDerived, +landfillGas,
+municipalSolidWaste, +runOfRiver, +pumpedStorage, +topcon,
+NMVOC, +NH3, +PM2_5, +arsenic, +cadmium, +chromium, +nickel,
+lead, +dioxins_furans, +CO2_equivalent, +tonne, +VArh, +WPerA,
+pu, +mol, +bar, +kg, +g, +l, +lPerS, +rev, +rpm, +kWh,
+national_law, +hardCoal, +fixed (no regulation), +current,
+motorOrCondenser, +solid_state, +minimum_oil, +formula,
+portal, +acar, +AACSR, +hjt, +sodium_ion, +supercapacitor,
full IEC reserved-range coverage 22-29/41-44/65-69/71-99 on
asduTypeId for vendor-extension symmetry
- 102 verbs (unchanged at the catalogue level; sgo:Organization
inherited verbs are now materialised onto the three Organization
subtypes -- 7 additional allowed edges each)
- 145 fixed-validation-parameter attributes (47 standards-mirrored,
98 domain-autonomous) per Section 11.1a Regel 6 / 7 / 8
Design changes (Section 11.1a):
- Regel 3: open-range attributes (... etc. / json-payload /
free-text) intentionally without fixed parameter
- Regel 4: multi-value semantics decomposed to one bool per option
(qualifiedFcr/Afrr/Mfrr/Rr)
- Regel 5: CIM/CGMES/TASE.2 enum values keep upstream casing;
domain-new values are snake_case; industrial acronyms keep
conventional form; CIM-lowercase-labels take precedence
- Regel 6: list-completeness evaluated against declared revision
anchor in validation_sources.yaml, not against upstream's current
state
- Regel 7: multi-dimensional attribute split (analysisTimeKind +
analysisNetworkKind for analysisKind, which mixed time-domain
and network-model dimensions)
- Regel 8: fixed-core / open-extension pilot on measurementType
(CIM-16 core + measurementTypeExt for revision-newer or
vendor-specific values)
dcterms:creator on every Almato-owned TTL is "Almato AG"
(previously "chris.boos@almato.com"). Historical files authored
by individuals (Vitaly Teremasov, cy@arago.de) are unchanged.
QS history: 10 dialog rounds on the validation-parameter sub-scope
(R17-R30), one architecture design dialog (R27 with Sonnet 4.6 +
Opus 4.8), two full-paper reviews (R31, R32 four-way with Opus 4.6
+ 4.7 + 4.8 + Sonnet 4.6). Standard 2-model QS gate (Opus + Sonnet
both >= 4/5 phase 1) is met in R32:
- Opus 4.6 P1: 4/5/4/4 ; P2: 4/4/4/4 (stable)
- Opus 4.7 P1: 4/4/4/4
- Sonnet 4.6 P1: 4/4/4/4
Self-validator (cross-reference + naming + layout): 0 ERROR / 0 WARN.
Five drift findings from the strictest reviewer (Opus 4.8) were
identified and are addressed in this commit (drift sweep on top
of the validation-parameter pass): verb-count phrasing unified
("102 local + 18 OGIT-core reused = 120 total" across all places),
end-of-document stale counts swept (1291 -> 1296, 919 -> 924),
TASE.2 Block 2 description in Reference Appendix D.4 brought in
line with the dual-mechanism resolution (transferMode=periodic +
IntegrityRequest class), DY-bijection 11.3 status note rewritten
("delivered in Reference Section 4" instead of "TTL-phase
deliverable"), and ConformLoadSchedule.granularitySeconds
delta+inherited duplication removed (was already inherited from
Schedule.mandatory). QS Round 33 confirmed the sweep: Opus 4.6
Phase 1 5/5/5/4 (up from 4/5/4/4 in R32), Opus 4.7 Phase 1
4/5/5/4, Sonnet 4.6 Phase 1 4/4/3/3, Opus 4.6 stable in Phase 2
at 4/4/4/4.
Companion documents (not part of this OGIT PR -- live in the
PR-companion workspace at ~/Code/_connector-framework/Test Connector/_findings/):
- Architecture_Concept.md (137 KB) -- design rationale, Section 11.1a
Regel 1-9, worked TTL templates
- Ontology_Reference.md (468 KB, auto-generated) -- complete
catalogue with materialised inheritance per class
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…f to ogit:Entity, remap sgo: prefix to ogit: PR almatoai#776 CI revealed 160 OGIT-validator errors of the form "head connection id : <URI> doesn't exist!". Two root causes: (1) rdfs:subClassOf pointed at NTO sub-namespace parent classes (PowerSystemResource, MarketParticipant, sgo:Organization, etc.) in 107 of our entity files. No existing NTO does this -- every other NTO class uses rdfs:subClassOf ogit:Entity. The validator rejects classes with non-ogit:Entity superclass references and refuses to recognise them as edge targets, cascading into "doesn't exist" errors for every edge that points at them. Architecture Section 5.1b's "advisory domain parent" intent is preserved by materialised inheritance per Section 5.1c (mandatory/optional/indexed/allowed lists are pre-flattened in the generator); the rdfs:subClassOf link was duplicative and is now flat. (2) sgo: prefix was declared as http://www.purl.org/ogit/SGO/sgo/ in our TTLs, but the upstream SGO core entities (Timeseries, Organization, Event, Asset, Person; manages, employs, supports, owns, hasParent, locatedIn, contains) are all declared with the bare ogit: prefix (URI http://www.purl.org/ogit/X), not sgo:. Our sgo:Timeseries etc. resolved to a URI that does not exist anywhere in OGIT. Generator now remaps sgo:X to ogit:X for every reference. sgo:Process (the only SGO-declared verb target with no ogit:Process counterpart in core) is replaced by ogit:Entity on the three sgo:Organization-subtype classes (NetworkOperator, MarketParticipant, BalancingServiceProvider). Self-validator: 0 ERROR / 0 WARN (unchanged). Inventory: 270 entities, 924 attributes, 102 verbs (unchanged). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ubtypes CI on commit 7e4732e reduced 160 errors to 9. The remaining 9 are all "head connection id : ogit/Entity doesn't exist!" -- ogit:Entity is not accepted as an edge target by the OGIT validator. No existing NTO uses ogit:Entity as edge target either. The three affected edges were the sgo:Organization-inherited generic verbs (sgo:manages / ogit:contains / sgo:supports) that had been manually materialised onto NetworkOperator, MarketParticipant, and BalancingServiceProvider with targets either sgo:Process (no ogit:Process exists upstream) or ogit:Entity (rejected as generic catch-all). The four typed sgo:Organization verbs with concrete targets stay: ogit:employs ogit:Person, ogit:locatedIn ogit:Location, ogit:owns ogit:Asset, ogit:hasParent ogit:Organization. Plus the NTO- specific operates / responsibleFor / participates / etc. edges. Architecture Section 5.1g claimed seven materialised sgo:Organization verbs; the OGIT validator only honours four of them on edge-target grounds (the other three lack a typed target). The connector materialised-inheritance contract (Section 5.1c) is unaffected -- mandatory/optional/indexed attributes still propagate fully. Self-validator: 0 ERROR / 0 WARN (unchanged). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
NTO/Utilities/Electricity -- complete concept-phase TTL bundle
Summary
This PR adds the NTO/Utilities/Electricity namespace plus its
parent Utilities/ umbrella to OGIT. The bundle comprises 270
entities, 924 attributes, 102 verbs over 13 sub-namespaces, covering
CIM / CGMES 2.4.15 (EQ + SSH + TP + SV + DL + GL profiles, plus
parametric DY), UCTE-DEF legacy load-flow exchange, UCTE / ENTSO-E
Operation Handbook + Network Codes (NC SO, NC ER, NC EB, NC CACM,
plus partial NC RfG / NC HVDC), IEC 60870-5-101/104 telecontrol
incl. all standardised ASDU types plus IEC reserved ranges for
vendor extensions, TASE.2 / IEC 60870-6 Conformance Blocks 1-9,
IEC 61400-27-1 wind-generator dynamic models, EU ETS / UNFCCC /
EEA NEC emissions reporting, ENTSO-E EIC identifiers with check-
digit validation.
The TTL bundle is generated by a delta-only YAML-driven generator
(architecture decision D-MAT-1, materialised inheritance contract
Section 5.1c) that walks the parent chain and emits the full union
of mandatory / optional / indexed / allowed lists into each
concrete subtype's TTL file. All TTLs pass the local rdflib
syntax check; the OGIT validator runs at PR-merge time.
What's new vs the previous PR (#772, withdrawn)
The previous PR (#772) failed CI with 2943 errors because the
validate.shscript split its xargs invocation at the ARG_MAXboundary and silently passed only the first batch of TTL filenames
to the validator -- skipping ~80% of files including most of the
Telecontrol and Dynamics namespaces.
PR #774 fixed
validate.shwith--no-run-if-empty -s 1900000and added an instrumentation log line. This PR rebases on top of
that fix and additionally:
ogit:validation-type "fixed"+ogit:validation-parameteron 145 attributes per the OGIT-validator convention shown in
NTO/Knowledge/attributes/archived.ttl and
NTO/Automation/attributes/rankingType.ttl
dcterms:creator "Almato AG"on every Almato-owned TTL(historical files authored by individuals are unchanged)
_reference_data/validation_sources.yamlcataloguing therevision anchor (CIM 17, CGMES 3.0, IEC 60870-5-101 Ed.2,
IEC 60870-6-503 Ed.2, UCTE-DEF v2, IEC 61400-27-1, EU 2018/842 +
UNFCCC 2024) per fixed-validation-parameter attribute so
list-completeness is decidable against the declared anchor
Architecture refinements
Section 11.1a in the companion Architecture Concept document is
extended from 2 to 9 rules:
ogit:validation-type+ogit:validation-parametertrue,falseon the same mechanism... etc.,JSON payloads, free-text identifiers) are intentionally left
without a fixed parameter (e.g.
limitUnit,measurementType,unitSymbol,toolFormat)fixedis single-valued -- multi-value semantics decomposedto one bool per option (
qualifiedFcr/qualifiedAfrr/qualifiedMfrr/qualifiedRron ReserveUnit replaces theprior multi-value
qualifiedProductsstring)CIM / CGMES / TASE.2 enum values keep upstream camelCase /
PascalCase; domain-new values use lower snake_case; industrial
acronyms keep their conventional form (
FCR,aFRR,mFRR,RR,EU_ETS,UNFCCC,PQ,PV,CO2,CH4,N2O,SF6,NF3,HFC,PFC);CIM-enum-label casing wins over the acronym convention when the
standards label is itself lowercase (
patl,tatl)anchor in
_reference_data/validation_sources.yaml, not againstthe upstream standard's current state (the validation_sources
catalogue is the source of truth for what "complete" means)
per orthogonal dimension (
analysisKindpacked two axes --time domain
steady_state/dynamicand network modelAC/DC-- and is split intoanalysisTimeKind+analysisNetworkKind)fixed-core / open-extension split (
measurementTypecarriesthe CIM-16 stable subset +
measurementTypeExtopen forvendor-specific or revision-newer values)
in
_reference_data/enum_constraints.yaml(TTL phasedeliverable on the connector author side, not part of this PR)
Quantitative scope
ogit:prefix)QS history
Concept phase: 16 rounds (R01-R16, dual-model Opus 4.6 + Sonnet 4.6).
Final concept gate met in R16 (Opus 4 on every axis, Sonnet 4 on
Konsistenz / Standards-Coverage / OGIT-Compliance).
Validation-parameter pass phase: 10 dialog rounds (R17-R30).
Architecture design dialog: R27 (Sonnet 4.6 + Opus 4.8 with 1M
context beta header) identified the moving-target / fixed-validator
mismatch and proposed the revision-anchor + dimension-split +
fixed-core/open-extension pattern that breaks the plateau.
Full-paper review (this PR's gate): R31, R32 four-way dialog with
Opus 4.6 + Opus 4.7 + Opus 4.8 (1M) + Sonnet 4.6 over the full
Architecture Concept + Ontology Reference pair. R32 phase 1 scores:
Opus 4.6 is stable at 4/4/4/4 in phase 2 as well. Standard
two-model QS gate (Opus + Sonnet both >= 4/5 phase 1) is met.
Self-validator (cross-reference + attribute-scope consistency +
naming + layout): 0 ERROR / 0 WARN over all 1296 TTL files.
Pre-merge cleanup
The strictest reviewer (Opus 4.8) flagged five additional drift
findings, all of them documentation / generator-side, none of them
TTL-content or architectural. These are documented in
Pre_TTL_Phase_Open_Items.mdin the PR-companion workspace andare addressed in a short follow-up commit before merge:
the dual-mechanism resolution (transferMode=periodic plus
IntegrityRequest class)
Section 4" instead of "TTL-phase deliverable")
Test plan
tree -- expected: 0 errors
with the new NTO/Utilities/ classes included
(NTO/Utilities/, NTO/Utilities/Electricity/ and 11 sub-namespaces)
BAR (Cy / Jens Bartsch); extended round: Andi, Pedro,
OGIT-Maintainer