Ofgem
Complete (all in one) LTDS Equipment Constraints
constraint
The description must not be empty or start with a space.
The Modeling Authority Set must not be empty or start with a space.
The version must be an integer or float number.
The profile IRI must be declared in the file header.
The model does not include exactly one md:Model.profile which is defined for LTDS.
The string is empty or starts with space.
SELECT $this ?value WHERE { $this $PATH ?value . FILTER(STRLEN(str(?value))=0 || strStarts(?value, " ")). }
An AsynchronousMachine association to a GeneratingUnit must be of type WindGeneratingUnit.
AsynchronousMachine is not associated to WindGeneratingUnit.
A SynchronousMachine association to a GeneratingUnit must be of type GeneratingUnit, FlywheelUnit, HydroGeneratingUnit, ThermalGeneratingUnit, GeothermalGeneratingUnit, NuclearGeneratingUnit, or SolarGeneratingUnit.
SynchronousMachine is not associated to appropriate GeneratingUnit or its subtype.
A GeographicalRegion represents a licence area. An EQ Full Model must contain one GeographicalRegion.
There are too few or too many GeographicalRegions present in the Full Model.
A SubGeographicalRegion represents a GSP area. An EQ Full Model must contain at least one SubGeographicalRegion.
There is no SubGeographicalRegion present in the Full Model.
Either equivalent load or generation/storage is not connected to a representative feeder breaker or individual load or generation/storage is connected to a Breaker or Switch with Equipment.aggregate=true.
SELECT $this ?value WHERE { $this $PATH ?value . $this ^cim:Terminal.ConductingEquipment ?ceTerm. ?ceTerm cim:Terminal.ConnectivityNode/^cim:Terminal.ConnectivityNode/cim:Terminal.ConductingEquipment ?ce. ?ce rdf:type ?ceType. ?ce cim:Equipment.aggregate ?aggr. FILTER((?value=true && (?ceType=cim:Switch || ?aggr=false)) || (?value=false && ?aggr=true)). }
SELECT DISTINCT ?this WHERE { ?this rdf:type cim:PowerTransformer . FILTER NOT EXISTS {?this ^cim:PowerTransformerEnd.PowerTransformer/cim:TransformerEnd.endNumber 3}. }
A two winding PowerTransformer must have a non-zero PowerTransformerEnd.r at the high voltage winding (TransformerEnd.endNumber=1)and a zero PowerTransformerEnd.r and .x at the low voltage winding (TransformerEnd.endNumber=2).
For a two winding PowerTransformer, .r value is zero on the high voltage winding (PowerTransformerEnd with rdf:id {?end1}) or .r or .x value is non-zero on the low voltage winding (PowerTransformerEnd with rdf:id {?end2}).
SELECT $this ?end1 ?end2 WHERE { ?end1 cim:PowerTransformerEnd.PowerTransformer $this . ?end1 cim:TransformerEnd.endNumber 1 . ?end1 cim:PowerTransformerEnd.r ?r1 . ?end2 cim:PowerTransformerEnd.PowerTransformer $this . ?end2 cim:TransformerEnd.endNumber 2 . ?end2 cim:PowerTransformerEnd.r ?r2 . ?end2 cim:PowerTransformerEnd.x ?x2 . FILTER (?r1=0 || !(?r2=0 && ?x2=0)). }
The following ConductingEquipment subtypes must have a single terminal: BusbarSection, EnergyConsumer, LinearShuntCompensator, NonlinearShuntCompensator, StaticVarCompensator, SynchronousMachine, AsynchronousMachine, PowerElectronicsConnection, and EquivalentInjection.
The ConductingEquipment does not have a single Terminal.
A PowerTransformer, ProtectedSwitch subtype (Breaker, DisconnectingCircuitBreaker, LoadBreakSwitch), BusbarSection, or EnergyConnection subtype (EnergyConsumer, LinearShuntCompensator, NonlinearShuntCompensator, StaticVarCompensator, SynchronousMachine, AsynchronousMachine, PowerElectonicsConnection) must not have an association to BaseVoltage.
An ACLineSegment or EquivalentBranch must have an association to BaseVoltage.
A ConnectivityNode must have at least one Terminal associated to it.
ConnectivityNode has no Terminal associated to it.
A Terminal must not have more than one RegulatingControl associated to it.
Terminal has more than one RegulatingControl associated to it.
A Terminal may have only one OperationalLimitSet associated to it.
Terminal has too many associations to it from OperationalLimitSet.
A PowerTransformer may have only 2 or 3 PowerTransformerEnds which associate to it.
PowerTransformer has too few or too many associations to it from PowerTransformerEnd.
A PowerTransformer may have an Equipment.AdditionalEquipmentContainer association and, if present, it must be to Substation.
The additional containment is not to Substation.
A ThermalGeneratingUnit may have up to one FossilFuel associated to it.
ThermalGeneratingUnit has more than one FossilFuel associated to it.
A ThermalGeneratingUnit may have up to one BiolFuel associated to it.
ThermalGeneratingUnit has more than one BioFuel associated to it.
A ThermalGeneratingUnit may have up to one OtherFuel associated to it.
ThermalGeneratingUnit has more than one OtherFuel associated to it.
A CAESPlant must have one ThermalGeneratingUnit associated to it.
CAESPlant has no ThermalGeneratingUnit associated to it.
An OperationalLimitSet must have at least one but not more than two OperationalLimits associated to it.
OperationalLimitSet has too many or too few associations to it from OperationalLimit.
A RepeatingSchedule must have four RepeatingScheduleIntervals associated to it.
RepeatingSchedule has too many or too few RepeatingScheduleIntervals associated to it.
Equipment.aggregate is required on Switch, Breaker, EnergyConsumer, SynchronousMachine, AsynchronousMachine and PowerElectronicsConnection.
Equipment.aggregate is allowed only on ConductingEquipment subtypes of Switch, Breaker, EnergyConsumer, SynchronousMachine, AsynchronousMachine and PowerElectronicsConnection. Specifically, Equipment.aggregate is not allowed on any other ConductingEquipment subtype (ACLineSegment, BusbarSection, LinearShuntCompensator, NonlinearShuntCompensator, StaticVarCompensator, EquivalentBranch, EquivalentInjection, PowerTransformer, SeriesCompensator, Disconnector, Fuse, DisconnectingCircuitBreaker, LoadBreakSwitch). And Equipment.aggregate is not allowed on any other Equipment subtype (BatteryUnit, PhotoVoltaicUnit, PowerElectricalChemicalUnit, PowerElectronicsWindUnit, GeneratingUnit, FlywheelUnit, GeothermalGeneratingUnit, HydroGeneratingUnit, ThermalGeneratingUnit, NuclearGeneratingUnit, SolarGeneratingUnit, WindGeneratingUnit).
A ConductingEquipment subtype connected to the same ConnectivityNode as an EnergyConnection subtype which has Equipment.aggregate=false (an individual load or generation/storage) must have Equipment.aggregate either not present or =false. A ConductingEquipment subtype connected to the same ConnectivityNode as an EnergyConnection subtype which has Equipment.aggregate=true (an equivalent load or generation/storage) must not be a Switch and must have Equipment.aggregate either not present or =true.
A GeneratingUnit or subtype (FlywheelUnit, GeothermalGeneratingUnit, HydroGeneratingUnit, ThermalGeneratingUnit, NuclearGeneratingUnit, SolarGeneratingUnit, WindGeneratingUnit) must have one RotatingMachine subtype associated to it.
GeneratingUnit subtype has too many associations to it from RotatingMachine subtype.
Equipment.inService is allowed only on ConductingEquipment subtypes. Specifically, a PowerElectronicsUnit subtype (BatteryUnit, PhotoVoltaicUnit, PowerElectricalChemicalUnit, PowerElectronicsWindUnit) or a GeneratingUnit or a GeneratingUnit subtype (FlywheelUnit, GeothermalGeneratingUnit, HydroGeneratingUnit, ThermalGeneratingUnit, NuclearGeneratingUnit, SolarGeneratingUnit, WindGeneratingUnit) must not have Equipment.inService.
Only ConductingEquipment subtypes may have an Equipment.EquipmentContainer association. Specifically, a PowerElectronicsUnit subtype (BatteryUnit, PhotoVoltaicUnit, PowerElectricalChemicalUnit, PowerElectronicsWindUnit) or a GeneratingUnit or a GeneratingUnit subtype (FlywheelUnit, GeothermalGeneratingUnit, HydroGeneratingUnit, ThermalGeneratingUnit, NuclearGeneratingUnit, SolarGeneratingUnit, WindGeneratingUnit) must not have an Equipment.EquipmentContainer association
Equipment.EquipmentContainer association is present.
An EnergyConnection subtype (EnergyConsumer, LinearShuntCompensator, NonlinearShuntCompensator, StaticVarCompensator, SynchronousMachine, AsynchronousMachine, PowerElectronicsConnection) must have an Equipment.EquipmentContainer association to an EquipmentContainer of type VoltageLevel.
The containment either is missing or is not VoltageLevel.
Only select ConductingEquipment subtypes may have an Equipment.AdditionalEquipmentContainer association. Specifically, the following ConductingEquipment must not have an Equipment.AdditionalEquipmentContainer association: A BusbarSection, EnergyConnection subtype (EnergyConsumer, LinearShuntCompensator, NonlinearShuntCompensator, StaticVarCompensator, SynchronousMachine, AsynchronousMachine, PowerElectronicsConnection), ACLineSegment, EquivalentBranch, or EquivalentInjection. Additionally, the following other Equipment must not have an Equipment:AdditionalEquipmentContainer association: a PowerElectronicsUnit subtype (BatteryUnit, PhotoVoltaicUnit, PowerElectricalChemicalUnit, PowerElectronicsWindUnit) or a GeneratingUnit or a GeneratingUnit subtype (FlywheelUnit, GeothermalGeneratingUnit, HydroGeneratingUnit, ThermalGeneratingUnit, NuclearGeneratingUnit, SolarGeneratingUnit, WindGeneratingUnit).
Equipment.AdditionalEquipmentContainer association is present.
A ProtectedSwitch subtype (Breaker, DisconnectingCircuitBreaker, LoadBreakSwitch) may have an Equipment.AdditionalEquipmentContainer association and, if present, it must be to Line.
The additional containment is not to Line.
HydroPowerPlant.energyStorageCapacity must be zero for a HydroPowerPlant with HydroPowerPlant.hydroPlantStorageType=runOfRiver.
Run-of-river HydroPowerPlant has non-zero energyStorageCapacity value.
SELECT $this ?value WHERE { $this $PATH ?value . $this cim:HydroPowerPlant.hydroPlantStorageType cim:HydroPlantStorageKind.runOfRiver. FILTER(?value!=0). }
HydroPowerPlant.energyStorageCapacity must be positive for a HydroPowerPlant with HydroPowerPlant.hydroPlantStorageType=pumpedStorage or =storage.
Pumped storage or storage HydroPowerPlant has negative or zero energyStorageCapacity value.
SELECT $this ?value WHERE { $this $PATH ?value . $this cim:HydroPowerPlant.hydroPlantStorageType ?hpType. FILTER(?value<=0 && (?hpType=cim:HydroPlantStorageKind.pumpedStorage || ?hpType=cim:HydroPlantStorageKind.storage)). }
Only Substation may have an association to PSRType.
SELECT $this ?value WHERE { $this rdf:type ?value . FILTER(?value!=cim:Substation). }
An EQ Full Model must contain a PSRType with IdentifiedObject.name=GSP.
SELECT $this WHERE { FILTER NOT EXISTS { ?psr rdf:type cim:PSRType ; cim:IdentifiedObject.name ?name . FILTER( ?name = "GSP" ) } }
An EQ Full Model must contain a PSRType with IdentifiedObject.name=BSP.
SELECT $this WHERE { FILTER NOT EXISTS { ?psr rdf:type cim:PSRType ; cim:IdentifiedObject.name ?name . FILTER( ?name = "BSP" ) } }
An EQ Full Model must contain a PSRType with IdentifiedObject.name=Primary.
SELECT $this WHERE { FILTER NOT EXISTS { ?psr rdf:type cim:PSRType ; cim:IdentifiedObject.name ?name . FILTER( ?name = "Primary" ) } }
An EquivalentInjection with EquivalentInjection.regulationCapabilty=true must have an association to ReactiveCapabilityCurve.
EquivalentInjection with regulation capability is missing ReactiveCapabilityCurve.
SELECT $this ?value WHERE { $this $PATH true . FILTER NOT EXISTS {$this cim:EquivalentInjection.ReactiveCapabilityCurve ?rcc}. }
An EquivalentInjection with EquivalentInjection.regulationCapabilty=false must not have an association to ReactiveCapabilityCurve.
EquivalentInjection without regulation capability has ReactiveCapabilityCurve.
SELECT $this ?value WHERE { $this $PATH false . FILTER EXISTS {$this cim:EquivalentInjection.ReactiveCapabilityCurve ?rcc}. }
If an OperationalLimitSet has an inverse OperationalLimit.OperationalLimitSet association to CurrentLimit, it can have only one OperationalLimit.OperationalLimitSet
OperationalLimitSet has more than one CurrentLimit associated to it.
SELECT $this (COUNT(?olType) AS ?cl) WHERE { $this ^cim:OperationalLimit.OperationalLimitSet/rdf:type ?olType. FILTER (?olType=cim:CurrentLimit). } GROUP BY $this ?olType HAVING(?cl>1)
OperationalLimit.OperationalLimitSet associations related to ACLineSegment Terminals must be from type CurrentLimit.
ACLineSegment has limit other than CurrentLimit.
SELECT $this ?value WHERE { $this cim:OperationalLimitSet.Terminal/cim:Terminal.ConductingEquipment/rdf:type cim:ACLineSegment. $this ^cim:OperationalLimit.OperationalLimitSet/rdf:type ?value. FILTER (?value!=cim:CurrentLimit). }
An ACLineSegment must have at least one Terminal which has an OperationalLimitSet associated to it.
ACLineSegment has no OperationalLimitSet on either of its Terminals.
SELECT $this WHERE { FILTER NOT EXISTS {$this ^cim:Terminal.ConductingEquipment/^cim:OperationalLimitSet.Terminal ?ols}. }
A CurrentLimit related to an ACLineSegment must have an association to CurrentLimitSeries.
ACLineSegment current limit is not seasonal.
SELECT $this ?value WHERE { $this cim:OperationalLimitSet.Terminal/cim:Terminal.ConductingEquipment/rdf:type cim:ACLineSegment. $this ^cim:OperationalLimit.OperationalLimitSet ?value. ?value rdf:type cim:CurrentLimit . FILTER NOT EXISTS {?value gb:CurrentLimit.CurrentLimitSeries ?ols}. }
OperationalLimit.OperationalLimitSet associations related to Switch subtype (Disconnector, Fuse, Breaker, LoadBreakSwitch, DisconnectingCircuitBreaker) Terminals must be from type CurrentLimit.
Switch subtype has limit other than CurrentLimit.
SELECT $this ?value WHERE { $this cim:OperationalLimitSet.Terminal/cim:Terminal.ConductingEquipment/rdf:type ?ceType. $this ^cim:OperationalLimit.OperationalLimitSet/rdf:type ?value. FILTER ((?ceType IN (cim:Disconnector, cim:Fuse, cim:Breaker, cim:LoadBreakSwitch, cim:DisconnectingCircuitBreaker)) && ?value!=cim:CurrentLimit). }
A CurrentLimit related to a Switch subtype (Disconnector, Fuse, Breaker, LoadBreakSwitch, DisconnectingCircuitBreaker) must not have an association to CurrentLimitSeries.
Switch subtype has a limit which is seasonal.
SELECT $this ?value WHERE { $this cim:OperationalLimitSet.Terminal/cim:Terminal.ConductingEquipment/rdf:type ?ceType. $this ^cim:OperationalLimit.OperationalLimitSet ?value. ?value rdf:type cim:CurrentLimit . BIND(EXISTS{?value gb:CurrentLimit.CurrentLimitSeries ?ols} AS ?hasCLS). FILTER ((?ceType IN (cim:Disconnector, cim:Fuse, cim:Breaker, cim:LoadBreakSwitch, cim:DisconnectingCircuitBreaker)) && ?hasCLS=true). }
OperationalLimit.OperationalLimitSet associations related to Power Transformer Terminals must be from type ApparentPowerLimit.
PowerTransformer has limit other than ApparentPowerLimit.
SELECT $this ?value WHERE { $this cim:OperationalLimitSet.Terminal/cim:Terminal.ConductingEquipment/rdf:type cim:PowerTransformer. $this ^cim:OperationalLimit.OperationalLimitSet/rdf:type ?value. FILTER (?value!=cim:ApparentPowerLimit). }
The OperationalLimitSet.Terminal association must be to a Terminal of an ACLineSegment, Switch subtype or PowerTransformer.
OperationalLimitSet is not associated to Terminal of appropriate ConductingEquipment subtype.
SELECT $this ?value WHERE { $this cim:OperationalLimitSet.Terminal/cim:Terminal.ConductingEquipment/rdf:type ?value. FILTER (?value NOT IN (cim:ACLineSegment, cim:PowerTransformer, cim:Switch, cim:Disconnector, cim:Fuse, cim:Breaker, cim:LoadBreakSwitch, cim:DisconnectingCircuitBreaker, cim:SeriesCompensator)). }
The high-winding PowerTransformerEnd (.endNumber=1) of a PowerTransformer must have one ApparentPowerLimit, which has an association to ApparentPowerLimitSeries, associated with it.
PowerTransformer high winding rdf:id {?st} is missing normal flow direction seasonal apparent power limit.
SELECT $this ?value WHERE { ?st rdf:type cim:PowerTransformerEnd . ?st cim:PowerTransformerEnd.PowerTransformer/cim:TransformerEnd.endNumber 1. BIND(EXISTS{?st ^cim:Terminal.ConductingEquipment/^cim:OperationalLimitSet.Terminal/^cim:OperationalLimit.OperationalLimitSet/gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls} AS ?hasAPLS). FILTER (?hasAPLS=false). }
The high-winding PowerTransformerEnd (.endNumber=1) of a PowerTransformer, which has PowerTransformer.reverseFlowCapability=differentFromNormal, must have one additional ApparentPowerLimit, which does not have an association to ApparentPowerLimitSeries, associated with it.
PowerTransformer with reverse flow limit different from normal flow limit is missing non-seasonal reverse flow apparent power limit on high winding.
SELECT $this WHERE { $this gb:PowerTransformer.reverseFlowCapability gb:ReverseFlowCapabilityKind.differentFromNormal . ?end1 cim:PowerTransformerEnd.PowerTransformer $this. ?end1 cim:TransformerEnd.endNumber 1. ?ol1 cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal/^cim:TransformerEnd.Terminal ?end1. #?ol1 cim:OperationalLimit.OperationalLimitSet $this. ?ol1 rdf:type cim:ApparentPowerLimit . #?ol2 cim:OperationalLimit.OperationalLimitSet $this. ?ol2 cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal/^cim:TransformerEnd.Terminal ?end1. ?ol2 rdf:type cim:ApparentPowerLimit . BIND(EXISTS{?ol1 gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls1} AS ?hasAPLS1). BIND(EXISTS{?ol2 gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls2} AS ?hasAPLS2). FILTER (?ol1!=?ol2 && ((?hasAPL1=false && ?hasAPLS2=false) || (?hasAPL1=true && ?hasAPLS2=true))). }
The low-winding PowerTransformerEnd (.endNumber=2) of a 2-winding PowerTransformer must not have any OperationalLimitSet associated with it.
Low winding of 2-winding PowerTransformer has operational limit.
SELECT $this ?value WHERE { BIND(EXISTS{$this ^cim:PowerTransformerEnd.PowerTransformer/cim:TransformerEnd.Terminal/^cim:Terminal.ConductingEquipment/^cim:OperationalLimitSet.Terminal ?ols} AS ?hasOLS). FILTER (?hasOLS=true). }
An ApparentPowerLimit which does not have an association to ApparentPowerLimitSeries must have ApparentPowerLimit.normalValue.
ApparentPowerLimit has neither an associated ApparentPowerLimitSeries nor a normalValue.
SELECT $this ?value WHERE { BIND(EXISTS{$this gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls} AS ?hasAPLS). BIND(EXISTS{$this cim:ApparentPowerLimit.normalValue ?aplnv} AS ?hasAPLnv). FILTER (?hasAPLS=false && ?hasAPLnv=false). }
An ApparentPowerLimit which has an association to ApparentPowerLimitSeries must not have ApparentPowerLimit.normalValue.
ApparentPowerLimit has both an associated ApparentPowerLimitSeries and a normalValue.
SELECT $this ?value WHERE { BIND(EXISTS{$this gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls} AS ?hasAPLS). BIND(EXISTS{$this cim:ApparentPowerLimit.normalValue ?aplnv} AS ?hasAPLnv). FILTER (?hasAPLS=true && ?hasAPLnv=true). }
A CurrentLimit which does not have an association to CurrentLimitSeries must have CurrentLimit.normalValue.
CurrentLimit has neither an associated CurrentLimitSeries nor a normalValue.
SELECT $this ?value WHERE { BIND(EXISTS{$this gb:CurrentLimit.CurrentLimitSeries ?apls} AS ?hasAPLS). BIND(EXISTS{$this cim:CurrentLimit.normalValue ?aplnv} AS ?hasAPLnv). FILTER (?hasAPLS=false && ?hasAPLnv=false). }
A CurrentLimit which has an association to CurrentLimitSeries must not have CurrentLimit.normalValue.
CurrentLimit has both an associated CurrentLimitSeries and a normalValue.
SELECT $this ?value WHERE { BIND(EXISTS{$this gb:CurrentLimit.CurrentLimitSeries ?apls} AS ?hasAPLS). BIND(EXISTS{$this cim:CurrentLimit.normalValue ?aplnv} AS ?hasAPLnv). FILTER (?hasAPLS=true && ?hasAPLnv=true). }
A CurrentLimitSeries shall have a set of CurrentLimitDataPoints which have a sequence of integer CurrentLimitDataPoint.intervalNumber values starting from 1.
The numbering of CurrentLimitDataPoints associated with this CurrentLimitSeries is not sequential starting with 1.
SELECT $this (COUNT(?in) AS ?countin) (COUNT(DISTINCT ?in) AS ?countdin) (MIN(?in) AS ?minin) (SUM(?in) AS ?sumin) (COUNT(?points) AS ?countpoints) WHERE { $this ^gb:CurrentLimitDataPoint.CurrentLimitSeries ?points. ?points rdf:type ?type . ?points gb:CurrentLimitDataPoint.intervalNumber ?in . } GROUP BY $this ?type HAVING(?countin!=?countdin || ?minin!=1 || (?countpoints=1 && ?sumin!=1) || (?countpoints=2 && (?sumin/2)!=1.5) || (?countpoints=3 && (?sumin/3)!=2) || (?countpoints=4 && (?sumin/4)!=2.5))
A ApparentPowerLimitSeries shall have a set of ApparentPowerLimitDataPoints which have a sequence of integer ApparentPowerLimitDataPoint.intervalNumber values starting from 1.
The numbering of ApparentPowerLimitDataPoints associated with this ApparentPowerLimitSeries is not sequential starting with 1.
SELECT $this (COUNT(?in) AS ?countin) (COUNT(DISTINCT ?in) AS ?countdin) (MIN(?in) AS ?minin) (SUM(?in) AS ?sumin) (COUNT(?terms) AS ?countpoints) WHERE { $this ^gb:ApparentPowerLimitDataPoint.ApparentPowerLimitSeries ?points. ?points rdf:type ?type . ?points gb:ApparentPowerLimitDataPoint.intervalNumber ?in . } GROUP BY $this ?type HAVING(?countin!=?countdin || ?minin!=1 || (?countpoints=1 && ?sumin!=1) || (?countpoints=2 && (?sumin/2)!=1.5) || (?countpoints=3 && (?sumin/3)!=2) || (?countpoints=4 && (?sumin/4)!=2.5))
Series.dataPointInterpretation must have value of stepwise.
OperationalLimitType.isInfiniteDuration must have a value of true.
SELECT $this ?value WHERE { $this $PATH ?value . FILTER(?value=false). }
OperationalLimitType.kind must have a value of patl.
SELECT DISTINCT ?this WHERE { ?this rdf:type cim:PowerTransformer . FILTER EXISTS {?this ^cim:PowerTransformerEnd.PowerTransformer/cim:TransformerEnd.endNumber 3}. }
A three winding PowerTransformer must have a non-zero PowerTransformerEnd.r at the high voltage winding (TransformerEnd.endNumber=1) and a non-zero PowerTransformerEnd.r and .x at each of the two low voltage windings (TransformerEnd.endNumber=2 and =3).
For a three winding PowerTransformer, .r value is zero on the high voltage winding (PowerTransformerEnd with rdf:id {?end1}) or .x or .r value is zero on one of the low voltage windings (PowerTransformerEnd with rdf:id {?end2} or {?end3}).
SELECT $this ?end1 ?end2 ?end3 WHERE { ?end1 cim:PowerTransformerEnd.PowerTransformer $this . ?end1 cim:TransformerEnd.endNumber 1 . ?end1 cim:PowerTransformerEnd.r ?r1 . ?end2 cim:PowerTransformerEnd.PowerTransformer $this . ?end2 cim:TransformerEnd.endNumber 2 . ?end2 cim:PowerTransformerEnd.r ?r2 . ?end2 cim:PowerTransformerEnd.x ?x2 . ?end2 cim:PowerTransformerEnd.PowerTransformer $this . ?end2 cim:TransformerEnd.endNumber 3 . ?end2 cim:PowerTransformerEnd.r ?r3 . ?end2 cim:PowerTransformerEnd.x ?x3 . FILTER (?r1=0 || ?r2=0 || ?r3=0 || ?x2=0 || ?x3=0). }
Curve.curveStyle must have a value of straightLineYValues for ReactiveCapabilityCurve.
Curve.xUnit must have a value of W for ReactiveCapabilityCurve.
Curve.y1Unit must have a value of VAr for ReactiveCapabilityCurve.
Curve.y2Unit must have a value of VAr for ReactiveCapabilityCurve.
Switch.ratedCurrent is required on all Switch subtypes (Disconnector, Fuse, Breaker, DisconnectingCircuitBreaker, LoadBreakSwitch).
A StaticVarCompensator, LinearShuntCompensator or NonlinearShuntCompensator must have an association to RegulatingControl.
Association to RegulatingControl is missing.
RegulatingCondEq.RegulatingControl is not allowed on RegulatingCondEq subtypes other than StaticVarCompensator, LinearShuntCompensator and NonlinearShuntCompensator. Specifically, a PowerElectronicsConnection, SynchronousMachine, or AsynchronousMachine must not have an association to RegulatingControl.
RegulatingCondEq.RegulatingControl association is present.
The high-winding PowerTransformerEnd (.endNumber=1) of a PowerTransformer, which has PowerTransformer.reverseFlowCapability=sameAsNormal or =unknown, must have only one ApparentPowerLimit with an association to its OperationalLimitSet.
PowerTransformer without reverse flow limit different from normal flow limit has two apparent power limits on high winding.
SELECT $this ?olt (COUNT (DISTINCT ?ol) AS ?olc) WHERE { $this gb:PowerTransformer.reverseFlowCapability ?rf. $this ^cim:PowerTransformerEnd.PowerTransformer ?end1. ?end1 cim:TransformerEnd.endNumber 1. ?ol cim:OperationalLimit.OperationalLimitSet/cim:OperationalLimitSet.Terminal/^cim:TransformerEnd.Terminal ?end1. ?ol rdf:type ?olt . FILTER (?rf IN (gb:ReverseFlowCapabilityKind.sameAsNormal, gb:ReverseFlowCapabilityKind.unknown) && ?olt=cim:ApparentPowerLimit). } GROUP BY $this ?olt HAVING(?olc>1)
Each of the 2 low-winding PowerTransformerEnds (.endNumber=2 and 3) of a 3-winding PowerTransformer must have exactly one ApparentPowerLimit, which has an association to ApparentPowerLimitSeries, associated with it.
3-winding PowerTransformer does not have a seasonal apparent power limit associated with each of its low windings.
SELECT $this WHERE { ?end2 cim:PowerTransformerEnd.PowerTransformer $this. ?end3 cim:PowerTransformerEnd.PowerTransformer $this. ?end2 cim:TransformerEnd.endNumber 2. ?end3 cim:TransformerEnd.endNumber 3. BIND(EXISTS{?end2 cim:TransformerEnd.Terminal/^cim:OperationalLimitSet.Terminal/^cim:OperationalLimit.OperationalLimitSet/gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls1} AS ?hasAPLS1). BIND(EXISTS{?end3 cim:TransformerEnd.Terminal/^cim:OperationalLimitSet.Terminal/^cim:OperationalLimit.OperationalLimitSet/gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls2} AS ?hasAPLS2). FILTER (!(?hasAPL1=true && ?hasAPLS2=true)). }
One OperationalLimitType of a CurrentLimit must have OperationalLimitType.direction=absoluteValue and OperationalLimitType.transformerReverseFlow not populated.
OperationalLimitType for CurrentLimit is not properly defined.
SELECT $this WHERE { BIND(EXISTS{$this cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.absoluteValue} AS ?hasAV). BIND(EXISTS{$this cim:OperationalLimit.OperationalLimitType/gb:OperationalLimitType.transformerReverseFlow ?trf} AS ?hastrf). FILTER (!(?hasAV=true && ?hastrf=false)). }
OperationalLimitType of an ApparentPowerLimit must have OperationalLimitType.direction=high. OperationalLimitType of an ApparentPowerLimit with ApparentPowerLimitSeries must have OperationalLimitType.transformerReverseFlow=false. OperationalLimitType of an ApparentPowerLimit without ApparentPowerLimitSeries must have OperationalLimitType.transformerReverseFlow=true.
OperationalLimitType for ApparentPowerLimit does not satisfy either 1) OperationalLimitType.direction=high is {?hasDirHigh} 2) has ApparentPowerLimitSeries and OperationalLimitType.transformerReverseFlow is false (has series = {?hasSeries}; has reverse flow = false is {?hasRevFlowFalse}) 3) does not have ApparentPowerLimitSeries and OperationalLimitType.transformerReverseFlow is true (has series = {?hasSeries}; has reverse flow = true is {?hasRevFlowTrue}).
SELECT $this ?hasDirHigh ?hasSeries ?hasRevFlowTrue ?hasRevFlowFalse WHERE { BIND(EXISTS{$this cim:OperationalLimit.OperationalLimitType/cim:OperationalLimitType.direction cim:OperationalLimitDirectionKind.high} AS ?hasDirHigh). BIND(EXISTS{$this gb:ApparentPowerLimit.ApparentPowerLimitSeries ?apls1} AS ?hasSeries). BIND(EXISTS{$this cim:OperationalLimit.OperationalLimitType/gb:OperationalLimitType.transformerReverseFlow true} AS ?hasRevFlowTrue). BIND(EXISTS{$this cim:OperationalLimit.OperationalLimitType/gb:OperationalLimitType.transformerReverseFlow false} AS ?hasRevFlowFalse). FILTER (?hasDirHigh=false || (!(?hasSeries=true && ?hasRevFlowFalse=true) && !(?hasSeries=false && ?hasRevFlowTrue=true))). }
An Equipment must not have an Equipment.EquipmentContainer and Equipment.AdditionalEquipmentContainer association to the same EquipmentContainer.
Two associations to same EquipmentContainer.
SELECT $this ?value WHERE { $this $PATH ?value. $this cim:Equipment.AdditionalEquipmentContainer ?addi . FILTER (?value=?addi). }
A TapChangerControl must have an association to the Terminal of the TransformerEnd to which its TapChanger is associated.
TapChangerControl is associated to Terminal of PowerTransformerEnd to which its TapChanger is not connected.
SELECT $this ?value WHERE { $this cim:RegulatingControl.Terminal ?value. $this (^cim:TapChanger.TapChangerControl/cim:RatioTapChanger.TransformerEnd/cim:TransformerEnd.Terminal)|(^cim:TapChanger.TapChangerControl/cim:PhaseTapChanger.TransformerEnd/cim:TransformerEnd.Terminal) ?t1 . FILTER (?value!=?t1). }
RegulatingControl must not have more than one RegulatingCondEq subtype associated to it.
RegulatingControl has more than one RegulatingCondEq subtype associated to it.
If Switch represents a dummy switch in an external grid (and has Equipment.aggregate=true), Switch.ratedCurrent is not allowed. If Switch isn't a dummy switch (and has Equipment.aggregate=false), Switch.ratedCurrent is required.
Either a dummy Switch has Switch.ratedCurrent or a non-dummy Switch is missing Switch.ratedCurrent.
SELECT $this ?value WHERE { $this $PATH ?value . BIND(EXISTS{$this cim:Switch.ratedCurrent ?src} AS ?hassrc). FILTER ((?value=true && ?hassrc=true) || (?value=false && ?hassrc=false)) . }
An EQ Full Model must contain three OperationalLimitTypes.
There are fewer than or more than three OperationalLimitTypes.
An EquivalentInjection, SeriesCompensator, Switch, Disconnector, or Fuse must have an Equipment.EquipmentContainer association to either VoltageLevel or Line.
The containment either is missing or is not to VoltageLevel or Line.
An EquivalentInjection, SeriesCompensator, Switch, Disconnector, or Fuse may have an a Equipment.AdditionalEquipmentContainer association to either VoltageLevel or Line.
The additional containment is not to VoltageLevel or Line.
LTDS EQ models must have fulfilled references (no dangling references are allowed).
Dangling reference is present in the model. The ID of the class having a dangling reference is: {?s} and the dangling reference is: {?value}.
SELECT DISTINCT $this ?value ?s WHERE { ?s !rdf:type ?value . BIND (str(?value) AS ?strvalue). FILTER(isIRI(?value) && (CONTAINS(?strvalue,"#_") || STRSTARTS(?strvalue,"urn:uuid:") || STRENDS(?strvalue,"#"))). FILTER NOT EXISTS {?value rdf:type ?v }. }
An EquivalentInjection, SeriesCompensator, Switch, Disconnector, or Fuse must have either an association to BaseVoltage or an Equipment.EquipmentContainer association to VoltageLevel, but not both.
Either there is an association to BaseVoltage and an association to a VoltageLevel or there is an association to neither.
SELECT $this WHERE { BIND(EXISTS{$this cim:ConductingEquipment.BaseVoltage ?bv} AS ?hasBV). BIND(EXISTS{$this cim:Equipment.EquipmentContainer/rdf:type cim:VoltageLevel} AS ?hasVL). FILTER ((?hasBV=true && ?hasVL=true) || (?hasBV=false && ?hasVL=false)) . }
A ThermalGeneratingUnit must have exactly one of the following associations: an association to CAESPlant or an association from BioFuel, FossilFuel, or OtherFuel.
ThermalGeneratingUnit does not have exactly one of the required associations.
The RepeatingScheduleIntervals of a RepeatingSchedule must have unique RepeatingScheduleInterval.startAt dates and unique and valid season names (IdentifiedObject.name equal to Spring, Summer, Autumn or Winter).
RepeatingScheduleIntervals do not have unique or correct properties.
SELECT $this (COUNT(DISTINCT ?startAt) AS ?countdstartAt) WHERE { $this ^gb:RepeatingScheduleInterval.RepeatingSchedule ?rsi. ?rsi rdf:type ?type . ?rsi gb:RepeatingScheduleInterval.startAt ?startAt . BIND(EXISTS{?rsi cim:IdentifiedObject.name "Spring"} AS ?hasSpring). BIND(EXISTS{?rsi cim:IdentifiedObject.name "Summer"} AS ?hasSummer). BIND(EXISTS{?rsi cim:IdentifiedObject.name "Autumn"} AS ?hasAutumn). BIND(EXISTS{?rsi cim:IdentifiedObject.name "Winter"} AS ?hasWinter). FILTER (!(?hasSpring=true && ?hasSummer=true && ?hasAutumn=true && ?hasWinter=true)) . } GROUP BY $this ?type HAVING(?countdstartAt!=4)
A PowerElectronicsConnection must have one association to a PowerElectronicsUnit subtype.
PowerElectronicsConnection is missing association to PowerElectronicsUnit subtype.
A RotatingMachine subtype must have one association to a GeneratingUnit subtype.
RotatingMachine subtype is missing association to GeneratingUnit subtype.
A HydroGeneratingUnit must have an association to HydroPowerPlant.
HydroGeneratingUnit is missing association to HydroPowerPlant.
An EquivalentBranch must have an Equipment.EquipmentContainer association.
OperationalLimitType.acceptableDuration is not a defined attribute.
ApparentPowerLimitDataPoint.normalValue must be positive or zero.
CurrentLimitDataPoint.normalValue must be positive or zero.
ShuntCompensator.aVRDelay must be positive.
PowerElectronicsUnit.maxP must be positive.
CAESPlant.energyStorageCapacity must be positive.
FlywheelUnit.energyStorageCapacity must be positive.
RotatingMachine.maxImportP must be positive or zero.
RotatingMachine.maxExportP must be positive or zero.
PowerElectronicsConnection.maxImportP must be positive or zero.
PowerElectronicsConnection.maxExportP must be positive or zero.
LTDS complex constraints applicable to all profiles
Resource identifier (rdf:ID or rdf:about) must be a UUID.
Invalid syntax of resource identifier (rdf:ID or rdf:about).
IdentifiedObject.name must be more than one and fewer than 128 characters.
IdentifiedObject.name is empty, starts with space, or is longer than 128 characters.
SELECT $this ?value WHERE { $this $PATH ?value . FILTER(STRLEN(str(?value))=0 || strStarts(?value, " ") || STRLEN(str(?value))>128). }
IdentifiedObject.description must be more than one and fewer than 256 characters.
IdentifiedObject.description is empty, starts with space, or is longer than 256 characters.
SELECT $this ?value WHERE { $this $PATH ?value . FILTER(STRLEN(str(?value))=0 || strStarts(?value, " ") || STRLEN(str(?value))>256). }
IdentifiedObject.mRID must be the same as resource identifier (rdf:ID or rdf:about).
IdentifiedObject.mRID is different from resource identifier. Only first 10 occurences are reported.
SELECT $this ?value ?secondpart WHERE { ?s $PATH ?value . #$this $PATH ?value . #BIND(str($this) AS ?rdfid) . BIND(str(?s) AS ?rdfid) . BIND(STRAFTER(?rdfid,"#_") AS ?secondpart) . FILTER(lcase(?value)!=lcase(?secondpart)). } LIMIT 10
This constraint validates the value of the association at the used direction.
One of the following occurs: 1) The value is not IRI; 2) The value is not the right class.
This constraint validates the cardinality of the association at the used direction.
Cardinality violation. Upper bound shall be 1
This constraint validates the datatype of the property (attribute).
The datatype is not literal or it violates the xsd datatype.
This constraint validates the cardinality of the property (attribute).
Checks if the dataset contains properties which are not defined in the profile to which this dataset conforms to.
This property is not part of the profile to which this dataset conforms to.
This constraint validates the cardinality of the association at the inverse direction.
Cardinality violation. Lower bound shall be 1
Inverse associations shall not be instantiated.
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:SubGeographicalRegion
The datatype is not IRI (Internationalized Resource Identifier) or it is enumerated value not part of the profile.
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:BaseVoltage
Association with cardinality violation at the used direction.
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:Substation
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:HydroPowerPlant
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: gb:CurrentLimitSeries
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: gb:ApparentPowerLimitSeries
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:ThermalGeneratingUnit
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: gb:RepeatingSchedule
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:ReactiveCapabilityCurve
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:ConnectivityNode
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:Terminal
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:PowerTransformer
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:GeographicalRegion
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:CAESPlant
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:OperationalLimitSet
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:OperationalLimitType
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:RatioTapChangerTable
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:PowerTransformerEnd
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:PhaseTapChangerTable
Cardinality violation. Cardinality shall be 4..4
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:NonlinearShuntCompensator
Association with cardinality violation at the inverse direction.
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:PSRType
One of the following does not conform: 1) The value shall be IRI; 2) The value shall be an instance of the class: cim:TapChangerControl
The class {?class} appears {?value} times in the data graph.
SELECT $this ?class (COUNT(?instance) AS ?value) WHERE { ?instance rdf:type ?class . } GROUP BY $this ?class
Counts instance of classes present in the data graph.
Checks if the dataset contains classes which are not defined in the profile to which this dataset conforms to.
This class is not part of the profile to which this dataset conforms to.
The number of Substation-s shall reflect the design of the power system. Cases of a single Substation in a power system model or having a Substation per VoltageLevel are reported as warnings.
The value is not the same as the PowerTransformerEnd.ratedU.
SELECT $this ?value WHERE { $this $PATH ?value . OPTIONAL {$this cim:RatioTapChanger.TransformerEnd/cim:PowerTransformerEnd.ratedU ?rratedu } . OPTIONAL {$this cim:PhaseTapChanger.TransformerEnd/cim:PowerTransformerEnd.ratedU ?pratedu } . FILTER ((bound(?rratedu) && ?value!=?rratedu) || (bound(?pratedu) && ?value!=?pratedu)). }
The TapChanger.neutralU shall be the same as PowerTransformerEnd.ratedU.
The model has either one Substation or a Substation per VoltageLevel. Number of Substation-s: {?substations}. Number of VoltageLevel-s: {?voltagelevels}.
SELECT $this ?substations ?voltagelevels WHERE { { SELECT $this (COUNT(?ss) AS ?substations) WHERE { ?ss rdf:type cim:Substation . } GROUP BY $this } { SELECT $this (COUNT(?vl) AS ?voltagelevels) WHERE { ?vl rdf:type cim:VoltageLevel . } GROUP BY $this } FILTER (?substations=1 || ?substations=?voltagelevels). }
This constraint validates the value type of the association at the used direction.
One of the following occurs: 1) The value type is not IRI; 2) The value type is not the right class.
The association TapChanger.TapChangerControl for RatioTapChanger-s shall only point to a TapChangerControl the has the following control modes for RegulatingControl.mode: voltage, reactivePower and powerFactor.
One of of the following occurs: 1) The value is negative or zero for winding one a two-winding transformer. 2) The value is zero for a three-winding transformer.
SELECT DISTINCT $this WHERE { $this ^cim:PowerTransformerEnd.PowerTransformer ?end1 ; ^cim:PowerTransformerEnd.PowerTransformer ?end2 ; ^cim:PowerTransformerEnd.PowerTransformer ?end3 . #?end1 cim:PowerTransformerEnd.PowerTransformer $this . #?end2 cim:PowerTransformerEnd.PowerTransformer $this . #?end3 cim:PowerTransformerEnd.PowerTransformer $this . ?end1 cim:TransformerEnd.endNumber 1. ?end2 cim:TransformerEnd.endNumber 2. ?end1 cim:PowerTransformerEnd.x ?x1 . ?end2 cim:PowerTransformerEnd.x ?x2 . #?end3 cim:TransformerEnd.endNumber 3 . #?end3 cim:PowerTransformerEnd.x ?x3 . OPTIONAL{?end3 cim:TransformerEnd.endNumber 3 . ?end3 cim:PowerTransformerEnd.x ?x3 } . BIND(EXISTS{$this ^cim:PowerTransformerEnd.PowerTransformer/cim:TransformerEnd.endNumber 3 } AS ?threewin) . #FILTER ((!(?x1>0 && ?x2=0) && ?threewin=false )|| (?threewin=true && !(?x1!=0 && ?x2!=0 && ?x3!=0)) ). FILTER ((!(?x1>0 && ?x2=0) && ?threewin=false )|| (?threewin=true && !(?x1!=0 && ?x2!=0 && ?x3!=0)) ). }
For Conductor (ACLineSegment) the association Equipment.EquipmentContainer is required and shall point to EquipmentContainer of type Line.
The containment is either missing or it is not Line.
All CurveData.xvalue for a given ReactiveCapabilityCurve shall be unique, e.g. it is not allowed for two or more .xvalue to have the same float value for a given ReactiveCapabilityCurve.
The ShuntCompensator.voltageSensitivity attribute shall be greater than zero.
For BusbarSection the association Equipment.EquipmentContainer is required and shall point to EquipmentContainer of type VoltageLevel or Bay (when a disconnector is splitting a busbar section in two).
The containment is either missing or it is not Bay or VoltageLevel.
PowerTransformerEnd.b shall be negative value or zero. Negative magnetising branch susceptance (PowerTransformerEnd.b) means inductive reactive power losses in no load.
For ShuntCompensator, the association RegulatingCondEq.RequlatingControl shall only point to a RequlatingControl that has the following control modes for RegulatingControl.mode: voltage, reactivePower and powerFactor.
For StaticVarCompensator, the association RegulatingCondEq.RequlatingControl is required and shall only point to a RequlatingControl that has the following control modes for RegulatingControl.mode: voltage and reactivePower.
Unallowed regulating control mode for a ShuntCompensator.
SELECT $this ?value WHERE { #?rcontrol ^cim:RegulatingCondEq.RegulatingControl $this . #?rcontrol cim:RegulatingControl.mode ?value . $this cim:RegulatingCondEq.RegulatingControl/cim:RegulatingControl.mode ?value . FILTER (?value!=cim:RegulatingControlModeKind.reactivePower && ?value!=cim:RegulatingControlModeKind.voltage && ?value!=cim:RegulatingControlModeKind.powerFactor). }
Transformers with zero series reactance do not exist. PowerTransformerEnd.x of high voltage end in case of a two winding transformer shall be a positive value. In case of a three winding transformer the PowerTransformerEnd.x shall not be zero.
Unallowed regulating control mode for a PhaseTapChanger.
SELECT $this ?value WHERE { #?rcontrol ^cim:TapChanger.TapChangerControl $this . #?rcontrol cim:RegulatingControl.mode ?value . $this cim:TapChanger.TapChangerControl/cim:RegulatingControl.mode ?value . FILTER (?value!=cim:RegulatingControlModeKind.activePower && ?value!=cim:RegulatingControlModeKind.voltage). }
TapChangerControl with RegulatingControl.mode equals reactivePower controls a Terminal which is not associated with PowerTransformerEnd-s of the PowerTransformer where the TapChanger is located.
SELECT $this WHERE { $this cim:RegulatingControl.mode ?mode . $this cim:RegulatingControl.Terminal ?rcterm . OPTIONAL {$this ^cim:TapChanger.TapChangerControl/cim:RatioTapChanger.TransformerEnd/cim:TransformerEnd.Terminal ?tcterm1 }. OPTIONAL {$this ^cim:TapChanger.TapChangerControl/cim:PhaseTapChanger.TransformerEnd/cim:TransformerEnd.Terminal ?tcterm2 }. FILTER (?mode=cim:RegulatingControlModeKind.reactivePower && ((?rcterm!=?tcterm1 && !bound(?tcterm2) && bound(?tcterm1)) || (?rcterm!=?tcterm2 && !bound(?tcterm1) && bound(?tcterm2)))). }
The attribute shall be a positive value. As negative reactance values are not allowed for ACLineSegment-s it is recommended to model series compensators explicitly.
LinearShuntCompensator.gPerSection shall be a positive value or zero.
Unallowed regulating control mode for a StaticVarCompensator or not allowed usage of StaticVarCompensator.sVCControlMode or StaticVarCompensator.voltageSetPoint.
SELECT $this ?value WHERE { #?rcontrol ^cim:RegulatingCondEq.RegulatingControl $this . #?rcontrol cim:RegulatingControl.mode ?value . $this cim:RegulatingCondEq.RegulatingControl/cim:RegulatingControl.mode ?value . BIND(EXISTS{$this cim:StaticVarCompensator.sVCControlMode ?a} AS ?hassvcmode). BIND(EXISTS{$this cim:StaticVarCompensator.voltageSetPoint ?b} AS ?hasvsetpoint). #OPTIONAL {$this cim:StaticVarCompensator.sVCControlMode ?svcmode }. #OPTIONAL {$this cim:StaticVarCompensator.voltageSetPoint ?vsetpoint }. FILTER ((?value!=cim:RegulatingControlModeKind.reactivePower && ?value!=cim:RegulatingControlModeKind.voltage) || ?hassvcmode=true || ?hasvsetpoint=true). }
Terminal-s of a two-terminal ConductingEquipment (or any of its subclasses) connect to the same ConnectivityNode.
SELECT $this ?value WHERE { ?term1 cim:Terminal.ConductingEquipment $this . ?term2 cim:Terminal.ConductingEquipment $this . ?term1 cim:ACDCTerminal.sequenceNumber 1 . ?term2 cim:ACDCTerminal.sequenceNumber 2 . ?term1 cim:Terminal.ConnectivityNode ?cn1 . ?term2 cim:Terminal.ConnectivityNode ?cn2 . FILTER (?cn1=?cn2). }
The association TapChanger.TapChangerControl for PhaseTapChanger-s shall only point to a TapChangerControl that has the following control modes for RegulatingControl.mode: activePower or voltage.
Terminal-s of the two sides of a two-terminal ConductingEquipment (or any of its subclasses) shall not be connected to the same ConnectivityNode.
For ProtectedSwitch (Breaker, DisconnectingCircuitBreaker, LoadBreakSwitch) the association Equipment.EquipmentContainer is required and shall point to EquipmentContainer of type Bay, VoltageLevel or DCConverterUnit.
The containment is either missing or it is not Bay, VoltageLevel or DCConverterUnit.
A RegulatingControl that is not a TapChangerControl must have at least one regulating equipment associated through the RegulatingCondEq.RegulatingControl. That is, a RegulatingControl cannot exist without some equipment using it for regulating.
The RegulatingControl is not associated with an Equpment via RegulatingCondEq.RegulatingControl.
NonlinearShuntCompensatorPoint.g shall be a positive value or zero.
ACLineSegment.r shall be a positive value or zero.
PowerTransformerEnd.g shall be positive value or zero. Positive magnetising branch conductance (PowerTransformerEnd.g) means positive active power losses in no load.
Unallowed regulating control mode for a RatioTapChanger.
SELECT $this ?value WHERE { #?rcontrol ^cim:TapChanger.TapChangerControl $this . #?rcontrol cim:RegulatingControl.mode ?value . $this cim:TapChanger.TapChangerControl/cim:RegulatingControl.mode ?value . FILTER (?value!=cim:RegulatingControlModeKind.reactivePower && ?value!=cim:RegulatingControlModeKind.voltage && ?value!=cim:RegulatingControlModeKind.powerFactor). }
For PowerTransformer the association Equipment.EquipmentContainer is required and shall point to EquipmentContainer of type Substation or DCConverterUnit. For the case of a transformer that connects two substations, the terminal of one of the PowerTransformerEnd-s can be connected to a ConnectivityNode defined in another substation.
The containment is either missing or it is not Substation or DCConverterUnit.
A power transformer cannot efficiently control reactive power flow on remote terminals. Therefore, a TapChangerControl controlling reactive power flow shall only control the flow at one of the Terminal-s associated with PowerTransformerEnd-s of the PowerTransformer where the TapChanger is located. Control of a remote Terminal not associated with the PowerTransformer that has the TapChanger is not allowed. This constraint defines that multiple TapChanger-s cannot be controlled by the same TapChangerControl.
CurveData.xvalue for a given ReactiveCapabilityCurve are not unique.
SELECT $this WHERE { { SELECT $this (COUNT(?xvalue1) AS ?c1) WHERE { $this ^cim:CurveData.Curve/cim:CurveData.xvalue ?xvalue1. } GROUP BY $this ?xvalue1 } { SELECT DISTINCT $this (COUNT(?xvalue2) AS ?c2) WHERE { $this ^cim:CurveData.Curve/cim:CurveData.xvalue ?xvalue2. } GROUP BY $this ?xvalue2 } FILTER (?c1!=?c2). } LIMIT 1
The following ConductingEquipment classes have two terminals: ACLineSegment, DCLineSegment, DCSeriesDevice, DCSwitch (and its specializations), DCChopper, Switch and all its specializations (including Jumper, Fuse, Breaker, Disconnector, LoadBreakSwitch, and Cut), SeriesCompensator, and EquivalentBranch. The PowerTransformer class typically has two terminals, but may also have one or more terminals. For example a zig-zag connected grounding transformer may have one terminal. Three terminal transformers are commonly used in transmission systems and in special cases transformers may have four, five, or more terminals.
The ConductingEquipment does not have the required number of Terminal-s.
The attribute shall be a positive value or zero.
The value differs with more than 10% of the nominal voltage abtained via the containment to VoltageLevel.
SELECT $this ?value WHERE { $this cim:ShuntCompensator.nomU ?value . $this cim:Equipment.EquipmentContainer/cim:VoltageLevel.BaseVoltage/cim:BaseVoltage.nominalVoltage ?nomv . FILTER (?value<0.9*?nomv && ?value>1.1*?nomv) . }
There is no terminal with sequenceNumber=1 or the numbering is not unique.
SELECT $this (COUNT(?sn) AS ?countsn) (COUNT(DISTINCT ?sn) AS ?countdsn) (MIN(?sn) AS ?minsn) (SUM(?sn) AS ?sumsn) (COUNT(?terms) AS ?countterms) WHERE { $this (^cim:Terminal.ConductingEquipment)|(^cim:DCTerminal.DCConductingEquipment) ?terms. ?terms rdf:type ?type . ?terms cim:ACDCTerminal.sequenceNumber ?sn . } GROUP BY $this ?type HAVING(?countsn!=?countdsn || ?minsn!=1 || (?countterms=1 && ?sumsn!=1) || (?countterms=2 && (?sumsn/2)!=1.5) || (?countterms=3 && (?sumsn/3)!=2))
The attribute shall be greater than lowStep.
The value of TapChanger.lowStep is greater than or equal to the value of TapChanger.highStep.
The attribute shall be a positive value.
The attribute can only be multiples of 30 degrees. The allowed range is -150 degrees to 150 degrees excluding 0.
The number of NonlinearShuntCompenstorPoint instances associated with a NonlinearShuntCompensator does not equal to ShuntCompensator.maximumSections.
SELECT $this ?value ?typesall WHERE { { SELECT $this (COUNT(?typeall) AS ?typesall) WHERE { $this ^cim:NonlinearShuntCompensatorPoint.NonlinearShuntCompensator/rdf:type ?typeall . #?nscpointsall cim:NonlinearShuntCompensatorPoint.NonlinearShuntCompensator $this . #?nscpointsall rdf:type ?typeall . } GROUP BY $this ?typesall } $this $PATH ?value . FILTER (?value!=?typesall) . }
The attribute shall be equal to or greater than lowStep and equal or less than highStep.
The value of TapChanger.lowStep is greater than the value of TapChanger.neutralStep.
When TapChanger.ltcFlag=false and TapChanger.TapChangerControl is present an artificial tap changer can be used to simulate control behaviour in power flow.
The PowerTransformer has TransformerEnd.endNumber which is not unique or the PowerTransformerEnd with endNumber 1 is not the highest voltage winding.
SELECT $this ?value WHERE { { SELECT $this (COUNT(DISTINCT ?endnumber) as ?countd) (COUNT(?endnumber) as ?count) (MIN(?endnumber) as ?minendnumber) (MAX(?ratedu) as ?maxratedu) WHERE { $this ^cim:PowerTransformerEnd.PowerTransformer ?ends . ?ends rdf:type ?endtype . ?ends cim:TransformerEnd.endNumber ?endnumber . ?ends cim:PowerTransformerEnd.ratedU ?ratedu . } GROUP BY $this ?endtype } ?end1 cim:PowerTransformerEnd.PowerTransformer $this . ?end1 cim:TransformerEnd.endNumber ?minendnumber. ?end1 cim:PowerTransformerEnd.ratedU ?end1ratedu . ?end2 cim:PowerTransformerEnd.PowerTransformer $this . ?end2 cim:PowerTransformerEnd.ratedU ?maxratedu . BIND("" as ?value). FILTER(?countd!=?count || (?countd=?count && ?end1ratedu!=?maxratedu && ?end1!=?end2) ). }
The number of NonlinearShuntCompenstorPoint instances associated with a NonlinearShuntCompensator shall be equal to ShuntCompensator.maximumSections.
Highest voltage winding should be 1. Each end within a power transformer should have a unique subsequent end number.
The value of TapChanger.neutralStep is greater than the value of TapChanger.highStep.
The value shall be between zero and ShuntCompensator.maximumSections.
The value is either negative or greater than ShuntCompensator.maximumSections.
An artificial tap changer is used to simulate control behaviour in power flow.
SELECT $this ?value WHERE { $this $PATH ?value . BIND(EXISTS{$this cim:TapChanger.TapChangerControl ?tcc } AS ?hastcc). FILTER (?hastcc=true && ?value=false) . }
This should normally be within 10% of the voltage at which the capacitor is connected to the network.
The sequence numbering starts with 1 and additional terminals should follow in increasing order. The first terminal is the starting point for a two terminal branch.
The attribute shall be equal to or greater than lowStep and equal to or less than highStep.
The value of TapChanger.lowStep is greater than the value of TapChanger.normalStep.
The Terminal referenced by TransformerEnd.Terminal points to a PowerTransformer which is different than the referenced element via PowerTransformerEnd.PowerTransformer.
SELECT $this WHERE { $this cim:TransformerEnd.Terminal/cim:Terminal.ConductingEquipment ?endtermpt . $this cim:PowerTransformerEnd.PowerTransformer ?pendpt . FILTER (?endtermpt!=?pendpt) . }
A high voltage side, as given by TransformerEnd.endNumber, shall have a ratedU that is greater than or equal to ratedU for the lower voltage sides. The attribute shall be a positive value.
For each active power value there is a corresponding high and low reactive power limit value. Typically there will be a separate curve for each coolant condition, such as hydrogen pressure.
CurveData associated with a ReactiveCapabilityCurve does not have both .y1value and .y2value defined.
The value of TapChanger.normalStep is greater than the value of TapChanger.highStep.
In all cases a PowerTransformer models a group of physical devices acting together to transform power among terminals and in one physical location.
The value is different for a two-winding transformer.
SELECT $this ?value ?ends WHERE { { SELECT $this (COUNT(?typeend) AS ?ends) WHERE { $this ^cim:PowerTransformerEnd.PowerTransformer/rdf:type ?typeend . } GROUP BY $this ?typeend } ?end1 cim:PowerTransformerEnd.PowerTransformer $this . ?end1 cim:TransformerEnd.endNumber 1. ?end1 cim:PowerTransformerEnd.ratedS ?value . #OPTIONAL {?end1 cim:PowerTransformerEnd.ratedS ?value }. BIND(EXISTS{?end1 cim:PowerTransformerEnd.ratedS ?v} AS ?hasvalue). ?end2 cim:PowerTransformerEnd.PowerTransformer $this . ?end2 cim:TransformerEnd.endNumber 2 . ?end2 cim:PowerTransformerEnd.ratedS ?ratedsend2 . BIND(EXISTS{?end2 cim:PowerTransformerEnd.ratedS ?r} AS ?hasratedsend2). #OPTIONAL {?end2 cim:PowerTransformerEnd.ratedS ?ratedsend2 }. FILTER (?hasvalue=true && ?hasratedsend2=true && ?end1!=?end2 && ?value!=?ratedsend2) . } HAVING(?ends=2)
The value is not an integer, multiples of 30 degrees in the range of -150 degrees to 150 degrees excluding 0.
SELECT $this ?value WHERE { $this $PATH ?value . FILTER (contains(str(?value), ".") || (?value!=-150 && ?value!=-120 && ?value!=-90 && ?value!=-60 && ?value!=-30 && ?value!=150 && ?value!=120 && ?value!=90 && ?value!=60 && ?value!=30)) . }
The PowerTransformerEnd.ratedU does not fuifil one of the following: 1) it is not a positive value; 2) the value of the high voltage side shall be greater than or equal to ratedU for the lower voltage sides.
SELECT $this ?value ?ends WHERE { { SELECT $this (COUNT(?typeend) AS ?ends) WHERE { $this ^cim:PowerTransformerEnd.PowerTransformer/rdf:type ?typeend . } GROUP BY $this ?typeend } ?end1 cim:PowerTransformerEnd.PowerTransformer $this . ?end1 cim:TransformerEnd.endNumber 1. ?end1 cim:PowerTransformerEnd.ratedU ?value . ?end2 cim:PowerTransformerEnd.PowerTransformer $this . ?end2 cim:TransformerEnd.endNumber 2 . ?end2 cim:PowerTransformerEnd.ratedU ?rateduend2 . #BIND(EXISTS{$this cim:PowerTransformerEnd.PowerTransformer/cim:TransformerEnd.endNumber 3} AS ?isthreew). #?end3 cim:PowerTransformerEnd.PowerTransformer $this . #?end3 cim:TransformerEnd.endNumber 3 . #?end3 cim:PowerTransformerEnd.ratedU ?rateduend3 . OPTIONAL {?end3 cim:PowerTransformerEnd.PowerTransformer $this } . OPTIONAL {?end3 cim:TransformerEnd.endNumber 3 }. OPTIONAL {?end3 cim:PowerTransformerEnd.ratedU ?rateduend3 }. FILTER (((?value<?rateduend2 || ?value<=0 || ?rateduend2<=0) && ?ends=2 && ?end1!=?end2 && ?end3=?end1) || (?ends=3 && ?end1!=?end2 && ?end1!=?end3 && ?end2!=?end3 && (?value<?rateduend2 || ?rateduend2<?rateduend3 || ?value<=0 || ?rateduend2<=0 || ?rateduend3<=0))) . }
For a two-winding transformer the values for the high and low voltage sides shall be identical.
Each type of instance file (full or difference) shall have a file header. (IEC 61970-552:2016, Subclause 5.1)
All IdentifiedObject-s shall have a persistent and globally unique identifier (Master Resource Identifier - mRID).
SELECT $this (COUNT(?value) AS ?counts) ?value WHERE { ?value rdf:type ?o. FILTER(?o!=cim:Equipment). } GROUP BY $this ?value HAVING(?counts>1)
W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes allows use of the following special values: INF, NaN to express quantities such as positive infinity, negative infinity, and not a number. CIM data types in general and the primitive Float are restricted not to use INF and NaN, if not explicitly allowed in a description of an attribute.
INF or NaN used in an attributes defined as float or the values is not a numeric value.
SELECT $this ?value WHERE { ?s ?p ?value . #BIND(str($this) AS ?value). FILTER(isLiteral(?this) && DATATYPE(?value)=xsd:float && (!isNumeric($this) || CONTAINS(?value, "NaN") || CONTAINS(?value, "INF"))). #FILTER(!isNumeric($this) || CONTAINS(?value, "NaN") || CONTAINS(?value, "INF")). }