Skip to main content

61970-301_Equipment-AP-Con-Complex-SHACL

eq:ACDCConverter

Severity: sh:Violation

Targets:

  • targetClass: cim:VsConverter
  • targetClass: cim:CsConverter

eq:ACDCTerminal

Severity: sh:Violation

Targets:

  • targetClass: cim:Clamp
  • targetClass: cim:BusbarSection
  • targetClass: cim:PetersenCoil
  • targetClass: cim:ConformLoad
  • targetClass: cim:Breaker
  • targetClass: cim:Cut
  • targetClass: cim:DCLineSegment
  • targetClass: cim:DCSwitch
  • targetClass: cim:CsConverter
  • targetClass: cim:VsConverter
  • targetClass: cim:ACLineSegment
  • targetClass: cim:EnergyConsumer
  • targetClass: cim:NonlinearShuntCompensator
  • targetClass: cim:EquivalentShunt
  • targetClass: cim:SeriesCompensator
  • targetClass: cim:Switch
  • targetClass: cim:StaticVarCompensator
  • targetClass: cim:LoadBreakSwitch
  • targetClass: cim:DisconnectingCircuitBreaker
  • targetClass: cim:Junction
  • targetClass: cim:GroundingImpedance
  • targetClass: cim:NonConformLoad
  • targetClass: cim:StationSupply
  • targetClass: cim:LinearShuntCompensator
  • targetClass: cim:EquivalentInjection
  • targetClass: cim:Ground
  • targetClass: cim:DCSeriesDevice
  • targetClass: cim:PowerElectronicsConnection
  • targetClass: cim:EquivalentBranch
  • targetClass: cim:Disconnector
  • targetClass: cim:DCBusbar
  • targetClass: cim:DCDisconnector
  • targetClass: cim:DCGround
  • targetClass: cim:EnergySource
  • targetClass: cim:AsynchronousMachine
  • targetClass: cim:Jumper
  • targetClass: cim:ExternalNetworkInjection
  • targetClass: cim:SynchronousMachine
  • targetClass: cim:Fuse
  • targetClass: cim:GroundDisconnector
  • targetClass: cim:DCChopper
  • targetClass: cim:DCShunt
  • targetClass: cim:PowerTransformer
  • targetClass: cim:DCBreaker

Nested Properties:

eq:ACDCTerminal.sequenceNumber-numbering

Path: rdf:type
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.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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))

  • Messages: ["There is no terminal with sequenceNumber=1 or the numbering is not unique."]

eq:ACLineSegment

Severity: sh:Violation

Targets:

  • targetClass: cim:ACLineSegment

eq:ActivePowerLimit

Severity: sh:Violation

Targets:

  • targetClass: cim:ActivePowerLimit

eq:ApparentPowerLimit

Severity: sh:Violation

Targets:

  • targetClass: cim:ApparentPowerLimit

eq:AsynchronousMachine

Severity: sh:Violation

Targets:

  • targetClass: cim:AsynchronousMachine

eq:BaseVoltage

Severity: sh:Violation

Targets:

  • targetClass: cim:BaseVoltage

eq:BatteryUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:BatteryUnit

eq:BoundaryPoint

Severity: sh:Violation

Targets:

  • targetClass: cim100:BoundaryPoint

eq:Breaker

Severity: sh:Violation

Targets:

  • targetClass: cim:Breaker

eq:BusbarSection

Severity: sh:Violation

Targets:

  • targetClass: cim:BusbarSection

eq:Clamp

Severity: sh:Violation

Targets:

  • targetClass: cim:Clamp

eq:Clamp-numberOfTerminals

A Clamp is ConductingEquipment and has one Terminal with an associated ConnectivityNode.

Severity: sh:Violation

Messages:

  • "Either the Clamp does not have exactly one Terminal or the Terminal is not associated with a ConnectivityNode."

Targets:

  • targetClass: cim:Clamp

eq:ConductingEquipment-oneTerminal

All other ConductingEquipment leaf classes (notably also including Clamp and BusbarSection) and DCConductingEquipment have a single terminal.

Severity: sh:Violation

Messages:

  • "The ConductingEquipment does not have the required number of Terminal-s."

Targets:

  • targetClass: cim:DCGround
  • targetClass: cim:EnergySource
  • targetClass: cim:NonConformLoad
  • targetClass: cim:PowerElectronicsConnection
  • targetClass: cim:ExternalNetworkInjection
  • targetClass: cim:EnergyConsumer
  • targetClass: cim:ConformLoad
  • targetClass: cim:StationSupply
  • targetClass: cim:LinearShuntCompensator
  • targetClass: cim:NonlinearShuntCompensator
  • targetClass: cim:SynchronousMachine
  • targetClass: cim:EquivalentShunt
  • targetClass: cim:DCBusbar
  • targetClass: cim:DCShunt
  • targetClass: cim:Ground
  • targetClass: cim:AsynchronousMachine
  • targetClass: cim:EquivalentInjection
  • targetClass: cim:Junction
  • targetClass: cim:StaticVarCompensator

eq:ConductingEquipment-twoTerminals

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.

Severity: sh:Violation

Messages:

  • "The ConductingEquipment does not have the required number of Terminal-s."

Targets:

  • targetClass: cim:DCSeriesDevice
  • targetClass: cim:DCBreaker
  • targetClass: cim:DCChopper
  • targetClass: cim:Jumper
  • targetClass: cim:Cut
  • targetClass: cim:DCSwitch
  • targetClass: cim:DCDisconnector
  • targetClass: cim:Switch
  • targetClass: cim:Disconnector
  • targetClass: cim:Fuse
  • targetClass: cim:GroundDisconnector
  • targetClass: cim:Breaker
  • targetClass: cim:LoadBreakSwitch
  • targetClass: cim:DisconnectingCircuitBreaker
  • targetClass: cim:SeriesCompensator
  • targetClass: cim:EquivalentBranch
  • targetClass: cim:ACLineSegment
  • targetClass: cim:DCLineSegment

eq:ConductingEquipment-twoTerminalsShape

Severity: sh:Violation

Targets:

  • targetClass: cim:GroundDisconnector
  • targetClass: cim:Jumper
  • targetClass: cim:Breaker
  • targetClass: cim:DCSeriesDevice
  • targetClass: cim:DCSwitch
  • targetClass: cim:DCDisconnector
  • targetClass: cim:DCBreaker
  • targetClass: cim:Fuse
  • targetClass: cim:EquivalentBranch
  • targetClass: cim:LoadBreakSwitch
  • targetClass: cim:DisconnectingCircuitBreaker
  • targetClass: cim:SeriesCompensator
  • targetClass: cim:ACLineSegment
  • targetClass: cim:DCChopper
  • targetClass: cim:Disconnector
  • targetClass: cim:Cut
  • targetClass: cim:DCLineSegment
  • targetClass: cim:Switch

Nested Properties:

eq:Terminal.phases-consistencyEquipment

Path: rdf:type
The phase code on terminals connecting same ConnectivityNode or same TopologicalNode as well as for equipment between two terminals shall be consistent.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value2 ?value1
WHERE {
$this ^cim:Terminal.ConductingEquipment ?term1 .
?term1 cim:ACDCTerminal.sequenceNumber 1 .
$this ^cim:Terminal.ConductingEquipment ?term2 .
?term2 cim:ACDCTerminal.sequenceNumber 2
OPTIONAL {?term1 cim:Terminal.phases ?value1 } .
OPTIONAL {?term2 cim:Terminal.phases ?value2 } .
FILTER ((bound(?value1) && bound(?value2) && ?term1!=?term2 && (?value1=cim:PhaseCode.ABCN || ?value1=cim:PhaseCode.N) && (?value2!=cim:PhaseCode.ABCN && ?value2!=cim:PhaseCode.N)) ||
(bound(?value1) && bound(?value2) && ?term1!=?term2 && (?value1=cim:PhaseCode.ABC) && (?value2!=cim:PhaseCode.ABC)) ||
(bound(?value1) && !bound(?value2) && ?term1!=?term2 && (?value1=cim:PhaseCode.ABCN || ?value1=cim:PhaseCode.N))
) .
}
  • Messages: ["The phase codes for terminals of 2-terminal equipment are not consistent. Terminal 1 code:{?value1} Terminal 2 code: {?value2}."]

eq:ConductingEquipment.BaseVoltage

Severity: sh:Violation

Targets:

  • targetClass: cim:CsConverter
  • targetClass: cim:Clamp
  • targetClass: cim:EnergyConsumer
  • targetClass: cim:EquivalentBranch
  • targetClass: cim:Fuse
  • targetClass: cim:GroundingImpedance
  • targetClass: cim:EnergySource
  • targetClass: cim:ConformLoad
  • targetClass: cim:Ground
  • targetClass: cim:Cut
  • targetClass: cim:NonConformLoad
  • targetClass: cim:StationSupply
  • targetClass: cim:EquivalentInjection
  • targetClass: cim:PowerTransformer
  • targetClass: cim:GroundDisconnector
  • targetClass: cim:ExternalNetworkInjection
  • targetClass: cim:StaticVarCompensator
  • targetClass: cim:PowerElectronicsConnection
  • targetClass: cim:DisconnectingCircuitBreaker
  • targetClass: cim:Junction
  • targetClass: cim:AsynchronousMachine
  • targetClass: cim:SeriesCompensator
  • targetClass: cim:Disconnector
  • targetClass: cim:Jumper
  • targetClass: cim:ACLineSegment
  • targetClass: cim:SynchronousMachine
  • targetClass: cim:VsConverter
  • targetClass: cim:LinearShuntCompensator
  • targetClass: cim:NonlinearShuntCompensator
  • targetClass: cim:EquivalentShunt
  • targetClass: cim:Breaker
  • targetClass: cim:LoadBreakSwitch
  • targetClass: cim:BusbarSection
  • targetClass: cim:PetersenCoil
  • targetClass: cim:Switch

Nested Properties:

eq:ConductingEquipment.BaseVoltage-usage

Path: cim:Equipment.EquipmentContainer
Use only when there is no voltage level container used and only one base voltage applies. For example, not used for transformers.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
#?value rdf:type ?type .
?value rdf:type cim:VoltageLevel .
$this rdf:type ?condeqtype .
BIND(EXISTS{$this cim:ConductingEquipment.BaseVoltage ?basevoltage} AS ?hasbv).
#$this cim:ConductingEquipment.BaseVoltage ?basevoltage .
#FILTER (!isLiteral(?basevoltage) && ?type=cim:VoltageLevel && ?condeqtype!=cim:ACLineSegment && ?condeqtype!=cim:EquivalentBranch && ?condeqtype!=cim:SeriesCompensator) .
FILTER (?hasbv=true && ?condeqtype!=cim:ACLineSegment && ?condeqtype!=cim:EquivalentBranch && ?condeqtype!=cim:SeriesCompensator && ?condeqtype!=cim:Equipment) .
}
  • Messages: ["The association ConductingEquipment.BaseVoltage is defined for a ConductingEquipment contained in a VoltageLevel."]

eq:ControlAreaGeneratingUnit.GeneratingUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:NuclearGeneratingUnit
  • targetClass: cim:SolarGeneratingUnit
  • targetClass: cim:ThermalGeneratingUnit
  • targetClass: cim:GeneratingUnit
  • targetClass: cim:WindGeneratingUnit
  • targetClass: cim:HydroGeneratingUnit

Nested Properties:

eq:ControlAreaGeneratingUnit.GeneratingUnit-instance

Path: rdf:type
Note that a control area should include a GeneratingUnit only once.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this (COUNT(?ca) AS ?count)
WHERE {
$this ^cim:ControlAreaGeneratingUnit.GeneratingUnit/cim:ControlAreaGeneratingUnit.ControlArea ?ca.
}
GROUP BY $this ?ca
HAVING(?count>1)

  • Messages: ["The GeneratingUnit is assigned to more than once in a ControlArea."]

eq:CsConverter

Severity: sh:Violation

Targets:

  • targetClass: cim:CsConverter

Nested Properties:

eq:DCConverterUnit-cscPowerTransformer

Path: rdf:type
For a CSC HVDC, the transformer shall be modelled explicitly.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this cim:Equipment.EquipmentContainer ?value .

FILTER NOT EXISTS {
?value ^cim:Equipment.EquipmentContainer/rdf:type cim:PowerTransformer
}.
}
  • Messages: ["A DCConverterUnit that contains CsConverter does not contain a PowerTransformer."]

eq:CurrentLimit

Severity: sh:Violation

Targets:

  • targetClass: cim:CurrentLimit

eq:Cut

Severity: sh:Violation

Targets:

  • targetClass: cim:Cut

eq:DCBreaker

Severity: sh:Violation

Targets:

  • targetClass: cim:DCBreaker

eq:DCBusbar

Severity: sh:Violation

Targets:

  • targetClass: cim:DCBusbar

eq:DCChopper

Severity: sh:Violation

Targets:

  • targetClass: cim:DCChopper

eq:DCDisconnector

Severity: sh:Violation

Targets:

  • targetClass: cim:DCDisconnector

eq:DCGround

Severity: sh:Violation

Targets:

  • targetClass: cim:DCGround

eq:DCLineSegment

Severity: sh:Violation

Targets:

  • targetClass: cim:DCLineSegment

eq:DCSeriesDevice

Severity: sh:Violation

Targets:

  • targetClass: cim:DCSeriesDevice

eq:DCShunt

Severity: sh:Violation

Targets:

  • targetClass: cim:DCShunt

eq:DCSwitch

Severity: sh:Violation

Targets:

  • targetClass: cim:DCSwitch

eq:DisconnectingCircuitBreaker

Severity: sh:Violation

Targets:

  • targetClass: cim:DisconnectingCircuitBreaker

eq:Disconnector

Severity: sh:Violation

Targets:

  • targetClass: cim:Disconnector

eq:EarthFaultCompensator

Severity: sh:Violation

Targets:

  • targetClass: cim:GroundingImpedance
  • targetClass: cim:PetersenCoil

eq:Equipment

Severity: sh:Violation

Targets:

  • targetClass: cim:EquivalentBranch
  • targetClass: cim:EquivalentShunt
  • targetClass: cim:EquivalentInjection

Nested Properties:

eq:Equipment.aggregate-notUsed

Path: cim:Equipment.aggregate
The attribute is not used for EquivalentBranch, EquivalentShunt and EquivalentInjection.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
OPTIONAL {$this $PATH ?value }.
FILTER (bound(?value)) .
}
  • Messages: ["Not allowed property (attribute)."]

eq:EquivalentBranch

Severity: sh:Violation

Targets:

  • targetClass: cim:EquivalentBranch

Nested Properties:

eq:EquivalentBranch.r21-usage

Path: cim:EquivalentBranch.r21
This attribute is optional and represent unbalanced network such as off-nominal phase shifter. If only EquivalentBranch.r is given, then EquivalentBranch.r21 is assumed equal to EquivalentBranch.r.

Severity: sh:Info

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Info)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
OPTIONAL {$this $PATH ?value }.
$this cim:EquivalentBranch.r ?r .
FILTER (bound(?value) && ?value!=?r) .
}
  • Messages: ["Asymmetrical EquivalentBranch is modelled as EquivalentBranch.r is different from EquivalentBranch.r21."]

eq:EquivalentBranch.x21-usage

Path: cim:EquivalentBranch.x21
This attribute is optional and represent unbalanced network such as off-nominal phase shifter. If only EquivalentBranch.x is given, then EquivalentBranch.x21 is assumed equal to EquivalentBranch.x.

Severity: sh:Info

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Info)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
OPTIONAL {$this $PATH ?value }.
$this cim:EquivalentBranch.x ?x .
FILTER (bound(?value) && ?value!=?x) .
}
  • Messages: ["Asymmetrical EquivalentBranch is modelled as EquivalentBranch.x is different from EquivalentBranch.x21."]

eq:EquivalentInjection

Severity: sh:Violation

Targets:

  • targetClass: cim:EquivalentInjection

Nested Properties:

eq:EquivalentInjection.regulationCapability-associatedCurve

Path: cim:EquivalentInjection.regulationCapability
ReactiveCapabilityCurve can only be associated with EquivalentInjection if the flag is true.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value
OPTIONAL {$this cim:EquivalentInjection.ReactiveCapabilityCurve ?curve }.
FILTER (bound(?curve) && ?value=false) .
}
  • Messages: ["The value does not allow a ReactiveCapabilityCurve to be associated. "]

eq:Fuse

Severity: sh:Violation

Targets:

  • targetClass: cim:Fuse

eq:GeneratingUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:GeneratingUnit

eq:GeneratingUnit.nominalP

Severity: sh:Violation

Targets:

  • targetClass: cim:HydroGeneratingUnit
  • targetClass: cim:NuclearGeneratingUnit
  • targetClass: cim:SolarGeneratingUnit
  • targetClass: cim:ThermalGeneratingUnit
  • targetClass: cim:GeneratingUnit
  • targetClass: cim:WindGeneratingUnit

Nested Properties:

eq:GeneratingUnit.nominalP-valueRangePair

Path: cim:GeneratingUnit.nominalP
The attribute shall be a positive value equal to or less than RotatingMachine.ratedS.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
BIND(EXISTS{$this $PATH ?v} AS ?hasvalue).
#OPTIONAL {$this $PATH ?value }.
$this ^cim:RotatingMachine.GeneratingUnit/cim:RotatingMachine.ratedS ?rateds .
BIND(EXISTS{$this ^cim:RotatingMachine.GeneratingUnit/cim:RotatingMachine.ratedS ?r} AS ?hasrateds).
#OPTIONAL {$this ^cim:RotatingMachine.GeneratingUnit ?machine }.
#OPTIONAL {?machine cim:RotatingMachine.ratedS ?rateds }.
FILTER (?hasvalue=true && ?hasrateds=true && (?value<=0 || ?value>?rateds) ) .
}
  • Messages: ["The value is either negative, zero or greater than RotatingMachine.ratedS."]

eq:GroundDisconnector

Severity: sh:Violation

Targets:

  • targetClass: cim:GroundDisconnector

eq:HydroGeneratingUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:HydroGeneratingUnit

eq:Jumper

Severity: sh:Violation

Targets:

  • targetClass: cim:Jumper

eq:LimitKind

Severity: sh:Violation

Targets:

  • targetClass: cim:OperationalLimitType

Nested Properties:

eq:LimitKind.tc-duration

Path: rdf:type
The duration is always zero if the OperationalLimitType.acceptableDuration is exchanged. Only one limit value exists for the TC type.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this (COUNT(?ol) AS ?tcs) ?adur ?value
WHERE {
$this eu:OperationalLimitType.kind eu:LimitKind.tc .
$this ^cim:OperationalLimit.OperationalLimitType ?ol .
?ol cim:OperationalLimit.OperationalLimitSet ?value .
OPTIONAL {$this cim:OperationalLimitType.acceptableDuration ?adur }.
}
GROUP BY $this ?value ?adur ?value
HAVING (?tcs>1 || (bound(?adur) && ?adur!=0))

  • Messages: ["Either OperationalLimitType.acceptableDuration is present and different than 0 or there is more than one limit with TC type. The OperationnalLimitType.acceptableDuration is: {?adur}."]

eq:LimitKind.patl-numberOfLimitType

Path: rdf:type
The OperationnalLimitType.isInfiniteDuration is set to true. There shall be only one OperationalLimitType of kind PATL per OperationalLimitSet if the PATL is ApparentPowerLimit, ActivePowerLimit, or CurrentLimit for a given Terminal or Equipment.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this (COUNT(?ol) AS ?patls) ?infdur ?value
WHERE {
$this cim:OperationalLimitType.isInfiniteDuration ?infdur .
$this eu:OperationalLimitType.kind eu:LimitKind.patl .
$this ^cim:OperationalLimit.OperationalLimitType ?ol .
?ol rdf:type ?typeol .
?ol cim:OperationalLimit.OperationalLimitSet ?value .
FILTER (?typeol IN (cim:ApparentPowerLimit , cim:ActivePowerLimit , cim:CurrentLimit)) .
}
GROUP BY $this ?value ?infdur
HAVING (?patls>1 || ?infdur=false)

  • Messages: ["Either there is more than one PATL defined for a given OperationalLimitSet or OperationnalLimitType.isInfiniteDuration is not set to true for PATL type. The OperationnalLimitType.isInfiniteDuration is: {?infdur}."]

eq:LinearShuntCompensator

Severity: sh:Violation

Targets:

  • targetClass: cim:LinearShuntCompensator

Nested Properties:

eq:ShuntCompensator.nomU-nominalVoltageDifference

Path: rdf:type
This should normally be within 10% of the voltage at which the capacitor is connected to the network.

Severity: sh:Warning

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Warning)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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) .
}
  • Messages: ["The value differs with more than 10% of the nominal voltage abtained via the containment to VoltageLevel."]

eq:LoadBreakSwitch

Severity: sh:Violation

Targets:

  • targetClass: cim:LoadBreakSwitch

eq:LoadResponseCharacteristic

Severity: sh:Violation

Targets:

  • targetClass: cim:LoadResponseCharacteristic

Nested Properties:

eq:LoadResponseCharacteristic.exponentModel-exponentCoefficient

Path: cim:LoadResponseCharacteristic.exponentModel
Indicates the exponential voltage dependency model is to be used. If false, the coefficient model is to be used. The exponential voltage dependency model consist of the attributes:- pVoltageExponent; - qVoltageExponent; - pFrequencyExponent; - qFrequencyExponent. The coefficient model consist of the attributes:- pConstantImpedance; - pConstantCurrent; - pConstantPower; - qConstantImpedance; - qConstantCurrent; - qConstantPower. The sum of pConstantImpedance, pConstantCurrent and pConstantPower shall equal 1. The sum of qConstantImpedance, qConstantCurrent and qConstantPower shall equal 1.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .

OPTIONAL {$this cim:LoadResponseCharacteristic.pFrequencyExponent ?pfe }.
OPTIONAL {$this cim:LoadResponseCharacteristic.pVoltageExponent ?pve }.
OPTIONAL {$this cim:LoadResponseCharacteristic.qFrequencyExponent ?qfe }.
OPTIONAL {$this cim:LoadResponseCharacteristic.qVoltageExponent ?qve }.
OPTIONAL {$this cim:LoadResponseCharacteristic.pConstantCurrent ?pcc }.
OPTIONAL {$this cim:LoadResponseCharacteristic.pConstantImpedance ?pci }.
OPTIONAL {$this cim:LoadResponseCharacteristic.pConstantPower ?pcp }.
OPTIONAL {$this cim:LoadResponseCharacteristic.qConstantCurrent ?qcc }.
OPTIONAL {$this cim:LoadResponseCharacteristic.qConstantImpedance ?qci }.
OPTIONAL {$this cim:LoadResponseCharacteristic.qConstantPower ?qcp }.

FILTER ((?value=true && (!bound(?pfe) || !bound(?pve) || !bound(?qfe) || !bound(?qve) || bound(?pcc) || bound(?pci) || bound(?pcp) || bound(?qcc) || bound(?qci) || bound(?qcp))) ||
(?value=false && (bound(?pfe) || bound(?pve) || bound(?qfe) || bound(?qve) || !bound(?pcc) || !bound(?pci) || !bound(?pcp) || !bound(?qcc) || !bound(?qci) || !bound(?qcp))) ||
(?value=false && bound(?pcc) && bound(?pci) && bound(?pcp) && bound(?qcc) && bound(?qci) && bound(?qcp) && (?pcc+?pci+?pcp!=1 || ?qcc+?qci+?qcp!=1) )
) .
}
  • Messages: ["One of the following occurs: 1) Missing required properties (attributes) for either exponential voltage dependency model or exponential model. 2) There is a mixture between the attributes. 3) The sum of either all active power related coefficients or reactive power related coefficients does not equal 1."]

eq:NonlinearShuntCompensator

Severity: sh:Violation

Targets:

  • targetClass: cim:NonlinearShuntCompensator

Nested Properties:

eq:ShuntCompensator.maximumSections-numberOfInstances

Path: cim:ShuntCompensator.maximumSections
The number of NonlinearShuntCompenstorPoint instances associated with a NonlinearShuntCompensator shall be equal to ShuntCompensator.maximumSections.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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) .
}
  • Messages: ["The number of NonlinearShuntCompenstorPoint instances associated with a NonlinearShuntCompensator does not equal to ShuntCompensator.maximumSections."]

eq:ShuntCompensator.nomU-nominalVoltageDifference

Path: rdf:type
This should normally be within 10% of the voltage at which the capacitor is connected to the network.

Severity: sh:Warning

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Warning)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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) .
}
  • Messages: ["The value differs with more than 10% of the nominal voltage abtained via the containment to VoltageLevel."]

eq:NuclearGeneratingUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:NuclearGeneratingUnit

eq:OperationalLimitType

Severity: sh:Violation

Targets:

  • targetClass: cim:OperationalLimitType

Nested Properties:

eq:OperationalLimitType.acceptableDuration-usage

Path: cim:OperationalLimitType.acceptableDuration
The attribute has meaning only if the flag isInfiniteDuration is set to false, hence it shall not be exchanged when isInfiniteDuration is set to true.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
BIND(EXISTS{$this $PATH ?v } AS ?hasvalue).
$this cim:OperationalLimitType.isInfiniteDuration ?indur .
FILTER (?hasvalue=true && ?indur=true ) .
}
  • Messages: ["The attribute is present and .isInfiniteDuration is set to true."]

eq:OperationalLimitType.isInfiniteDuration-usage

Path: cim:OperationalLimitType.acceptableDuration
If false, the limit has definite duration which is defined by the attribute acceptableDuration.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
#OPTIONAL {$this $PATH ?value }.
$this $PATH ?value .
BIND(EXISTS{$this $PATH ?v} AS ?hasvalue).
$this cim:OperationalLimitType.isInfiniteDuration ?indur .
FILTER (?hasvalue=false && ?indur=false ) .
}
  • Messages: ["The attribute is not present when .isInfiniteDuration is set ot false."]

eq:PhaseTapChangerAsymmetrical

Severity: sh:Violation

Targets:

  • targetClass: cim:PhaseTapChangerAsymmetrical

Nested Properties:

eq:PhaseTapChangerAsymmetrical.windingConnectionAngle-valueRange

Path: cim:PhaseTapChangerAsymmetrical.windingConnectionAngle
The attribute can only be multiples of 30 degrees. The allowed range is -150 degrees to 150 degrees excluding 0.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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)) .
}
  • Messages: ["The value is not an integer, multiples of 30 degrees in the range of -150 degrees to 150 degrees excluding 0."]

eq:PhaseTapChangerNonLinear.xMin-valueRangePair

Path: cim:PhaseTapChangerNonLinear.xMin
PowerTransformerEnd.x shall be consistent with PhaseTapChangerLinear.xMin and PhaseTapChangerNonLinear.xMin. In case of inconsistency, PowerTransformerEnd.x shall be used.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
$this cim:PhaseTapChanger.TransformerEnd/cim:PowerTransformerEnd.x ?x .
#$this cim:PhaseTapChanger.TransformerEnd ?theend .
#?theend cim:PowerTransformerEnd.x ?x .
FILTER (?value!=?x ) .
}
  • Messages: ["Inconsistency between PowerTransformerEnd.x and PhaseTapChangerNonLinear.xMin."]

eq:PhaseTapChangerLinear

Severity: sh:Violation

Targets:

  • targetClass: cim:PhaseTapChangerLinear

Nested Properties:

eq:PhaseTapChangerLinear.xMin-valueRangePair

Path: cim:PhaseTapChangerLinear.xMin
PowerTransformerEnd.x shall be consistent with PhaseTapChangerLinear.xMin and PhaseTapChangerNonLinear.xMin. In case of inconsistency, PowerTransformerEnd.x shall be used.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
$this cim:PhaseTapChanger.TransformerEnd/cim:PowerTransformerEnd.x ?x .
#$this cim:PhaseTapChanger.TransformerEnd ?theend .
#?theend cim:PowerTransformerEnd.x ?x .
FILTER (?value!=?x ) .
}
  • Messages: ["Inconsistency between PowerTransformerEnd.x and PhaseTapChangerLinear.xMin."]

eq:PhaseTapChangerSymmetrical

Severity: sh:Violation

Targets:

  • targetClass: cim:PhaseTapChangerSymmetrical

Nested Properties:

eq:PhaseTapChangerNonLinear.xMin-valueRangePair

Path: cim:PhaseTapChangerNonLinear.xMin
PowerTransformerEnd.x shall be consistent with PhaseTapChangerLinear.xMin and PhaseTapChangerNonLinear.xMin. In case of inconsistency, PowerTransformerEnd.x shall be used.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
$this cim:PhaseTapChanger.TransformerEnd/cim:PowerTransformerEnd.x ?x .
#$this cim:PhaseTapChanger.TransformerEnd ?theend .
#?theend cim:PowerTransformerEnd.x ?x .
FILTER (?value!=?x ) .
}
  • Messages: ["Inconsistency between PowerTransformerEnd.x and PhaseTapChangerNonLinear.xMin."]

eq:PhaseTapChangerTabular

Severity: sh:Violation

Targets:

  • targetClass: cim:PhaseTapChangerTabular

eq:PowerElectronicsConnection

Severity: sh:Violation

Targets:

  • targetClass: cim:PowerElectronicsConnection

eq:PowerTransformer

Severity: sh:Violation

Targets:

  • targetClass: cim:PowerTransformer

Nested Properties:

eq:PowerTransformerEnd.ratedU-valueRange

Path: rdf:type
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.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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))) .
}


  • Messages: ["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."]

eq:TransformerEnd.endNumber-unique

Path: rdf:type
Highest voltage winding should be 1. Each end within a power transformer should have a unique subsequent end number.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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) ).
}

  • Messages: ["The PowerTransformer has TransformerEnd.endNumber which is not unique or the PowerTransformerEnd with endNumber 1 is not the highest voltage winding."]

eq:PowerTransformer-associationNotUsed

Path: rdf:type
The inherited association ConductingEquipment.BaseVoltage should not be used. The association from TransformerEnd to BaseVoltage should be used instead.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this cim:ConductingEquipment.BaseVoltage ?value .
BIND(EXISTS{$this cim:ConductingEquipment.BaseVoltage ?v } AS ?hasvalue).
FILTER (?hasvalue=true) .
}
  • Messages: ["The inherited association ConductingEquipment.BaseVoltage is used."]

eq:PowerTransformerEnd.ratedS-valueRange2winding

Path: rdf:type
For a two-winding transformer the values for the high and low voltage sides shall be identical.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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)

  • Messages: ["The value is different for a two-winding transformer."]

eq:PowerTransformer-twoWinding

Severity: sh:Violation

Nested Properties:

eq:PowerTransformerEnd-secondWindingValues

Path: rdf:type

  1. for a two Terminal PowerTransformer the high voltage (TransformerEnd.endNumber=1) PowerTransformerEnd has non zero values on r, r0, x, and x0 while the low voltage (TransformerEnd.endNumber=2) PowerTransformerEnd has zero values for r, r0, x, and x0. Parameters are always provided, even if the PowerTransformerEnds have the same rated voltage. In this case, the parameters are provided at the PowerTransformerEnd which has TransformerEnd.endNumber equal to 1.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
?value cim:PowerTransformerEnd.PowerTransformer $this .
?value cim:TransformerEnd.endNumber 2 .
#?value cim:TransformerEnd.endNumber ?endnumber .
?value cim:PowerTransformerEnd.r ?r .
?value cim:PowerTransformerEnd.r0 ?r0 .
?value cim:PowerTransformerEnd.x ?x .
?value cim:PowerTransformerEnd.x0 ?x0 .
FILTER (!(?r=0 && ?r0=0 && ?x=0 && ?x0=0)).
#FILTER ((!(?r=0 && ?r0=0 && ?x=0 && ?x0=0) && ?endnumber=2) || (!(?r!=0 && ?r0!=0 && ?x!=0 && ?x0!=0) && ?endnumber=1)).
#FILTER (?r!=0 || ?r0!=0 || ?x!=0 || ?x0!=0).
}
  • Messages: ["Non-zero values for the PowerTransformerEnd with TransformerEnd.endNumber=2 for a two Terminal PowerTransformer."]

eq:PowerTransformerEnd

Severity: sh:Violation

Targets:

  • targetClass: cim:PowerTransformerEnd

Nested Properties:

eq:PowerTransformerEnd.r-valueRange

Path: cim:PowerTransformerEnd.r
The attribute shall be equal to or greater than zero for non-equivalent transformers.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
OPTIONAL {$this cim:Equipment.aggregate ?aggregate }.
#BIND(EXISTS{$this cim:Equipment.aggregate ?a } AS ?hasaggregate).
FILTER ((!bound(?aggregate) || ?aggregate=false) && ?value<0 ) .
}
  • Messages: ["The value is negative for a non-equivalent transformer."]

eq:PowerTransformerEnd-terminalConsistency

Path: rdf:type
In all cases a PowerTransformer models a group of physical devices acting together to transform power among terminals and in one physical location.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this
WHERE {
$this cim:TransformerEnd.Terminal/cim:Terminal.ConductingEquipment ?endtermpt .
$this cim:PowerTransformerEnd.PowerTransformer ?pendpt .

FILTER (?endtermpt!=?pendpt) .
}
  • Messages: ["The Terminal referenced by TransformerEnd.Terminal points to a PowerTransformer which is different than the referenced element via PowerTransformerEnd.PowerTransformer."]

eq:RatioTapChanger

Severity: sh:Violation

Targets:

  • targetClass: cim:RatioTapChanger

eq:ReactiveCapabilityCurve-curveYvalues

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.

Severity: sh:Violation

Messages:

  • "CurveData associated with a ReactiveCapabilityCurve does not have both .y1value and .y2value defined."

Targets:

  • targetClass: cim:CurveData

eq:RegularTimePoint

Severity: sh:Violation

Targets:

  • targetClass: cim:RegularTimePoint

eq:RegulatingControl

Severity: sh:Violation

Targets:

  • targetClass: cim:RegulatingControl

Nested Properties:

eq:RegulatingControl-terminalConnectivityNode

Path: cim:RegulatingControl.Terminal
The specified terminal shall be associated with the connectivity node of the controlled point. The most specific subtype of RegulatingControl shall be used in case such equipment participate in the control, e.g. TapChangerControl for tap changers.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
BIND(EXISTS{?value cim:Terminal.ConnectivityNode ?cn} AS ?hascn).
#OPTIONAL {?value cim:Terminal.ConnectivityNode ?cn }.
FILTER (?hascn=false) .
}
  • Messages: ["The Terminal referenced by the RegulatingControl is not associated with a ConnectivityNode."]

eq:SeriesCompensator

Severity: sh:Violation

Targets:

  • targetClass: cim:SeriesCompensator

eq:SolarGeneratingUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:SolarGeneratingUnit

eq:StaticVarCompensator

Severity: sh:Violation

Targets:

  • targetClass: cim:StaticVarCompensator

eq:Switch

Severity: sh:Violation

Targets:

  • targetClass: cim:Switch

eq:SynchronousMachine

Severity: sh:Violation

Targets:

  • targetClass: cim:SynchronousMachine

eq:TapChanger

Severity: sh:Violation

Targets:

  • targetClass: cim:RatioTapChanger
  • targetClass: cim:PhaseTapChangerTabular
  • targetClass: cim:PhaseTapChangerSymmetrical
  • targetClass: cim:PhaseTapChangerAsymmetrical
  • targetClass: cim:PhaseTapChangerLinear

Nested Properties:

eq:TapChanger.ltcFlag-tapChangerControl

Path: cim:TapChanger.ltcFlag
When TapChanger.ltcFlag=false and TapChanger.TapChangerControl is present an artificial tap changer can be used to simulate control behaviour in power flow.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
BIND(EXISTS{$this cim:TapChanger.TapChangerControl ?tcc } AS ?hastcc).

FILTER (?hastcc=true && ?value=false) .
}
  • Messages: ["An artificial tap changer is used to simulate control behaviour in power flow."]

eq:DCConverterUnit-tapChangerControl

Path: rdf:type
No TapChangerControl is used for the converter transformer, the control function is described in the ACDCConverter-s.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
OPTIONAL {$this cim:TapChanger.TapChangerControl ?value }.
OPTIONAL {$this cim:RatioTapChanger.TransformerEnd/cim:PowerTransformerEnd.PowerTransformer/cim:Equipment.EquipmentContainer/rdf:type ?typeratiotc }.
OPTIONAL {$this cim:PhaseTapChanger.TransformerEnd/cim:PowerTransformerEnd.PowerTransformer/cim:Equipment.EquipmentContainer/rdf:type ?typephasetc }.

FILTER (bound(?value) && ((bound(?typeratiotc) && ?typeratiotc=cim:DCConverterUnit) || (bound(?typephasetc) && ?typephasetc=cim:DCConverterUnit))) .
}
  • Messages: ["TapChangerControl is association to a transformer contained in DCConverterUnit."]

eq:TapChangerControl

Severity: sh:Violation

Targets:

  • targetClass: cim:TapChangerControl

Nested Properties:

eq:RegulatingControl-terminalConnectivityNode

Path: cim:RegulatingControl.Terminal
The specified terminal shall be associated with the connectivity node of the controlled point. The most specific subtype of RegulatingControl shall be used in case such equipment participate in the control, e.g. TapChangerControl for tap changers.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this $PATH ?value .
BIND(EXISTS{?value cim:Terminal.ConnectivityNode ?cn} AS ?hascn).
#OPTIONAL {?value cim:Terminal.ConnectivityNode ?cn }.
FILTER (?hascn=false) .
}
  • Messages: ["The Terminal referenced by the RegulatingControl is not associated with a ConnectivityNode."]

eq:Terminal

Severity: sh:Violation

Targets:

  • targetClass: cim:GroundDisconnector
  • targetClass: cim:Ground
  • targetClass: cim:GroundingImpedance
  • targetClass: cim:PetersenCoil

eq:Terminal.phases

Severity: sh:Violation

Targets:

  • targetClass: cim:ConnectivityNode

Nested Properties:

eq:Terminal.phases-consistencyConnectivityNode

Path: rdf:type
The phase code on terminals connecting same ConnectivityNode or same TopologicalNode as well as for equipment between two terminals shall be consistent.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value2 ?terms ?value1 ?value
WHERE {
{
SELECT $this (COUNT(?typeterm) AS ?terms) ?value
WHERE {
$this ^cim:Terminal.ConnectivityNode ?value .
?value rdf:type ?typeterm .
#?term cim:Terminal.ConnectivityNode $this .
#?term rdf:type ?typeterm .
}
GROUP BY $this ?typeterm ?value
HAVING (?terms>1)
}

#$this ^cim:Terminal.ConnectivityNode ?value .
$this ^cim:Terminal.ConnectivityNode ?term2 .
?value cim:Terminal.phases ?value1 .
OPTIONAL {?term2 cim:Terminal.phases ?value2 } .

#?value cim:Terminal.ConnectivityNode $this .
#?term1 cim:Terminal.phases ?value1 .
#?term2 cim:Terminal.ConnectivityNode $this .
#?term2 cim:Terminal.phases ?value2.

#BIND(EXISTS{?term1 cim:Terminal.phases ?v1} AS ?hasvalue1).


#BIND(EXISTS{?term2 cim:Terminal.phases ?v2} AS ?hasvalue2).
#FILTER ((?terms>1 && ?hasvalue2=true && ?hasvalue1=true && ?term1!=?term2 && (?value1=cim:PhaseCode.ABCN || ?value1=cim:PhaseCode.N) && (?value2!=cim:PhaseCode.ABCN && ?value2!=cim:PhaseCode.N)) ||
#(?terms>1 && ?hasvalue2=true && ?hasvalue1=true && ?term1!=?term2 && (?value1=cim:PhaseCode.ABC) && (?value2!=cim:PhaseCode.ABC)) ||
#(?terms>1 && ?hasvalue1=true && ?hasvalue2=false && ?term1!=?term2 && (?value1=cim:PhaseCode.ABCN || ?value1=cim:PhaseCode.N))
#) .
FILTER ((?value!=?term2 && bound(?value2) && (?value1=cim:PhaseCode.ABCN || ?value1=cim:PhaseCode.N) && (?value2!=cim:PhaseCode.ABCN && ?value2!=cim:PhaseCode.N)) ||
(?value!=?term2 && bound(?value2) && (?value1=cim:PhaseCode.ABC) && (?value2!=cim:PhaseCode.ABC)) ||
(?value!=?term2 && !bound(?value2) && (?value1=cim:PhaseCode.ABCN || ?value1=cim:PhaseCode.N))
) .
}
  • Messages: ["The phase codes for the connected terminals are not consistent. Terminal 1 code:{?value1} Terminal 2 code: {?value2}."]

eq:ThermalGeneratingUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:ThermalGeneratingUnit

eq:VoltageLimit

Severity: sh:Violation

Targets:

  • targetClass: cim:VoltageLimit

Nested Properties:

eq:LimitKind.patl-allowedType

Path: rdf:type
The Permanent Admissible Transmission Loading (PATL) is the loading in amperes, MVA or MW that can be accepted by a network branch for an unlimited duration without any risk for the material.

Severity: sh:Violation

Constraints:

  • sh:SPARQLConstraintComponent (Severity: sh:Violation)
PREFIX eu: <http://iec.ch/TC57/CIM100-European#>
PREFIX cim: <http://iec.ch/TC57/CIM100#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT $this ?value
WHERE {
$this cim:OperationalLimit.OperationalLimitType/eu:OperationalLimitType.kind ?value.
#?type eu:OperationalLimitType.kind ?value .

FILTER (?value=eu:LimitKind.patl) .
}
  • Messages: ["PATL type is provided for VoltageLimit."]

eq:VsConverter

Severity: sh:Violation

Targets:

  • targetClass: cim:VsConverter

eq:WindGeneratingUnit

Severity: sh:Violation

Targets:

  • targetClass: cim:WindGeneratingUnit