CIM SHACL SPARQL uses EXISTS a lot:
grep -i exists * | wc -l
171
Thsi happens in 76 files:
grep -ci exists *|grep -v :0 | wc -l
76
Here's the full list:
```
grep -ci exists *|grep -v :0 | sort -rn -t: -k2
BoundaryPoint-bppl3.rq:19
PowerShiftKeySchedule-associations.rq:10
PowerBidScheduleTimePoint-attributes.rq:7
PowerFlowResult-topologicalNode.rq:5
AssessedElement-associations.rq:5
AreaDispatchableUnit-associations.rq:5
PowerFlowResult-voltageAndAngle.rq:4
PowerBidDependency.kind-exclusive.rq:4
EnergyComponent-associations.rq:4
reverseDifferencePreviousVersion-dependency.rq:3
Terminal-EXCH8TopologicalNode.rq:3
SynchronousMachine-aggregate.rq:3
RemedialActionScheduleDependency-associations.rq:3
PowerFlowResult.value.rq:3
GeneratingUnit-typeDependency.rq:3
forwardReverse-dependency.rq:2
alternativeVersionAndPreferredVersion-dependency.rq:2
Terminal.phases-consistencyConnectivityNode.rq:2
SynchronousMachine-reactiveLimits.rq:2
Switch-connection.rq:2
StaticVarCompensator-controlMode.rq:2
RemedialActionScheduleResponse.rejectionReasonKind-required.rq:2
RemedialActionScheduleResponse.rejectionReason-applicability.rq:2
RemedialActionScheduleGroup-dependency.rq:2
RemedialActionScheduleDependency.kind-applicability.rq:2
RemedialActionSchedule-proposingEntity.rq:2
RemedialActionOutcomeValue-associations.rq:2
RemedialActionImpact-associations.rq:2
PowerTransformerEnd.ratedS-valueRange2winding.rq:2
PowerShiftKeySchedule.ParticipationFactorTimePoint-dependency.rq:2
PowerShiftKeyDistribution-associations.rq:2
PowerSchedule-dcassociations.rq:2
PowerBidSchedule-associations.rq:2
PowerBidDependency.startToStartLagKind-required.rq:2
PowerBidDependency.overlapKind-required.rq:2
PowerBidDependency.finishToStartLagKind-required.rq:2
PowerBidDependency.finishToFinishLagKind-required.rq:2
InfeedLimit-requiredAttributes.rq:2
GridStateAlteration-associations.rq:2
GeneratingUnit.nominalP-valueRangePair.rq:2
CurveData.xvalue-value.rq:2
Circuit-associations.rq:2
AvailabilityEnabled-associations.rq:2
AsynchronousMachine-aggregate.rq:2
TapChanger.ltcFlag-tapChangerControl.rq:1
SynchronousMachine.type-condenser.rq:1
RotatingMachine.q-limits.rq:1
RotatingMachine.p-limits.rq:1
RemedialActionScheduleDependency.kind-cardinality.rq:1
RemedialActionApplied.StageForRemedialActionScheme-cardinality.rq:1
RegulatingControl-terminalConnectivityNode.rq:1
RegulatingControl-point.rq:1
ReactiveCapabilityCurve-units.rq:1
ReactiveCapabilityCurve-reactiveCountP.rq:1
PowerTransformerEnd.x-value.rq:1
PowerTransformerEnd.ratedU-valueRange.rq:1
PowerTransformerEnd.r-valueRange.rq:1
PowerTransformer-twoWinding.rq:1
PowerTransformer-associationNotUsed.rq:1
PowerFlowResult-VoltageLimit.rq:1
PowerFlowResult-VoltageAngleLimit.rq:1
PowerFlowResult-ReactivePowerLimit.rq:1
PowerFlowResult-CurrentLimit.rq:1
PowerFlowResult-ApparentPowerLimit.rq:1
PowerFlowResult-ActivePowerLimit.rq:1
OperationalLimitType.isInfiniteDuration-usage.rq:1
OperationalLimitType.acceptableDuration-usage.rq:1
OperationalLimitSet-limits.rq:1
OperationalLimit.AssessedElement-required.rq:1
LimitKind.tc-duration.rq:1
DanglingReferences.rq:1
DCConverterUnit-cscPowerTransformer.rq:1
CurveData-equationY2.rq:1
CurveData-equationY1.rq:1
ConductingEquipment.BaseVoltage-usage.rq:1
BoundaryPoint-bppl1Bppl2.rq:1
```
What's wrong with EXISTS? it is often unnecessary and can be replaced with standard SHACL.
Let's look at a few cases:
sh:path [sh:alternativePath (nc:EnergyComponent.GeneratingUnit nc:EnergyComponent.PowerElecronicsUnit nc:EnergyComponent.EnergyConsumer nc:EnergyComponent.HydroPump)];
sh:minCount 1
- PowerBidDependency.startToStartLagKind-required
If PowerBidDependency.startToStartLag is present PowerBidDependency.startToStartLagKind is required.
sh:targetSubjectsOf nc:PowerBidDependency.startToStartLag;
sh:property [sh:path nc:PowerBidDependency.startToStartLagKind; sh:minCount 1]
- PowerFlowResult-VoltageLimit
PowerFlowResult.valueV is required attribute if a VoltageLimit is referenced by the association end PowerFlowResult.OperationalLimit.
sh:target [sh:select "select $this {$this nc:PowerFlowResult.OperationalLimit cim:VoltageLimit}"];
sh:property [sh:path nc:PowerFlowResult.valueV; sh:minCount 1]
CIM SHACL SPARQL uses
EXISTSa lot:Thsi happens in 76 files:
Here's the full list:
``` grep -ci exists *|grep -v :0 | sort -rn -t: -k2 BoundaryPoint-bppl3.rq:19 PowerShiftKeySchedule-associations.rq:10 PowerBidScheduleTimePoint-attributes.rq:7 PowerFlowResult-topologicalNode.rq:5 AssessedElement-associations.rq:5 AreaDispatchableUnit-associations.rq:5 PowerFlowResult-voltageAndAngle.rq:4 PowerBidDependency.kind-exclusive.rq:4 EnergyComponent-associations.rq:4 reverseDifferencePreviousVersion-dependency.rq:3 Terminal-EXCH8TopologicalNode.rq:3 SynchronousMachine-aggregate.rq:3 RemedialActionScheduleDependency-associations.rq:3 PowerFlowResult.value.rq:3 GeneratingUnit-typeDependency.rq:3 forwardReverse-dependency.rq:2 alternativeVersionAndPreferredVersion-dependency.rq:2 Terminal.phases-consistencyConnectivityNode.rq:2 SynchronousMachine-reactiveLimits.rq:2 Switch-connection.rq:2 StaticVarCompensator-controlMode.rq:2 RemedialActionScheduleResponse.rejectionReasonKind-required.rq:2 RemedialActionScheduleResponse.rejectionReason-applicability.rq:2 RemedialActionScheduleGroup-dependency.rq:2 RemedialActionScheduleDependency.kind-applicability.rq:2 RemedialActionSchedule-proposingEntity.rq:2 RemedialActionOutcomeValue-associations.rq:2 RemedialActionImpact-associations.rq:2 PowerTransformerEnd.ratedS-valueRange2winding.rq:2 PowerShiftKeySchedule.ParticipationFactorTimePoint-dependency.rq:2 PowerShiftKeyDistribution-associations.rq:2 PowerSchedule-dcassociations.rq:2 PowerBidSchedule-associations.rq:2 PowerBidDependency.startToStartLagKind-required.rq:2 PowerBidDependency.overlapKind-required.rq:2 PowerBidDependency.finishToStartLagKind-required.rq:2 PowerBidDependency.finishToFinishLagKind-required.rq:2 InfeedLimit-requiredAttributes.rq:2 GridStateAlteration-associations.rq:2 GeneratingUnit.nominalP-valueRangePair.rq:2 CurveData.xvalue-value.rq:2 Circuit-associations.rq:2 AvailabilityEnabled-associations.rq:2 AsynchronousMachine-aggregate.rq:2 TapChanger.ltcFlag-tapChangerControl.rq:1 SynchronousMachine.type-condenser.rq:1 RotatingMachine.q-limits.rq:1 RotatingMachine.p-limits.rq:1 RemedialActionScheduleDependency.kind-cardinality.rq:1 RemedialActionApplied.StageForRemedialActionScheme-cardinality.rq:1 RegulatingControl-terminalConnectivityNode.rq:1 RegulatingControl-point.rq:1 ReactiveCapabilityCurve-units.rq:1 ReactiveCapabilityCurve-reactiveCountP.rq:1 PowerTransformerEnd.x-value.rq:1 PowerTransformerEnd.ratedU-valueRange.rq:1 PowerTransformerEnd.r-valueRange.rq:1 PowerTransformer-twoWinding.rq:1 PowerTransformer-associationNotUsed.rq:1 PowerFlowResult-VoltageLimit.rq:1 PowerFlowResult-VoltageAngleLimit.rq:1 PowerFlowResult-ReactivePowerLimit.rq:1 PowerFlowResult-CurrentLimit.rq:1 PowerFlowResult-ApparentPowerLimit.rq:1 PowerFlowResult-ActivePowerLimit.rq:1 OperationalLimitType.isInfiniteDuration-usage.rq:1 OperationalLimitType.acceptableDuration-usage.rq:1 OperationalLimitSet-limits.rq:1 OperationalLimit.AssessedElement-required.rq:1 LimitKind.tc-duration.rq:1 DanglingReferences.rq:1 DCConverterUnit-cscPowerTransformer.rq:1 CurveData-equationY2.rq:1 CurveData-equationY1.rq:1 ConductingEquipment.BaseVoltage-usage.rq:1 BoundaryPoint-bppl1Bppl2.rq:1 ```erc:EnergyComponent-associations(described in https://github.com/Sveino/Inst4CIM-KG/tree/develop/shacl-improved#dont-use-fake-rdftype-path-with-sparql):