#![allow(clippy::all, dead_code, unused)]
use cimdecoder::CimDataset;
use crate::Violation;
use crate::helpers::*;
pub fn validate_p61970_600_2_topology_ap_con_simple_shacl(dataset: &CimDataset) -> Vec<Violation> {
let mut v = Vec::new();
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_ener_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_desc_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_dc_base_terminal_dc_to_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_name_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_dc_base_terminal_dc_to_etc_2(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_shor_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_connectivity_node_connectivity_node_topological_n_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_connectivity_node_connectivity_node_topological_n_etc_2(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_description_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_short_name_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_energy_ident_code_eic_m_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_name_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_dc_node_dc_topological_node_has_value(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_dc_node_dc_topological_node_required(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_name_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_dc_base_terminal_dc_topological_node_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_energy_ident_code_e_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_description_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_short_name_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_dc_base_terminal_dc_topological_node_etc_2(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_description_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_name_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_dc_topological_node_dc_equipm_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_m_rid_required(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_short_name_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_energy_iden_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_terminal_terminal_topological_node_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_name_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_energy_ident_code_eic_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_description_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_terminal_terminal_topological_node_has_value(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_short_name_max_count(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_topological_node_reporting_group_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_energy_ident_c_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_short_name_max_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_description_ma_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_m_rid_required(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_topological_node_base_voltage_re_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_topological_node_connectivity_no_etc(dataset));
v.extend(check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_name_max_count(dataset));
v
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_ener_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ACDCConverterDCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.energyIdentCodeEic") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
class: "ACDCConverterDCTerminal".to_string(),
property: "IdentifiedObject.energyIdentCodeEic".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_desc_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ACDCConverterDCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "ACDCConverterDCTerminal".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_dc_base_terminal_dc_to_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ACDCConverterDCTerminal").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::ACDCConverterDCTerminal>() {
Some(o) => o, None => continue,
};
if obj.base.dc_topological_node.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:DCBaseTerminal.DCTopologicalNode-cardinality".to_string(),
class: "ACDCConverterDCTerminal".to_string(),
property: "DCBaseTerminal.DCTopologicalNode".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "DCBaseTerminal.DCTopologicalNode-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_name_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ACDCConverterDCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.name") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "ACDCConverterDCTerminal".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_dc_base_terminal_dc_to_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ACDCConverterDCTerminal").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::ACDCConverterDCTerminal>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.base.dc_topological_node.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DCTopologicalNode"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:DCBaseTerminal.DCTopologicalNode-valueType".to_string(),
class: "ACDCConverterDCTerminal".to_string(),
property: "DCBaseTerminal.DCTopologicalNode".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:DCTopologicalNode".to_string(),
severity: "sh:Violation".to_string(),
name: "DCBaseTerminal.DCTopologicalNode-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_acdc_converter_dc_terminal_identified_object_shor_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ACDCConverterDCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.shortName") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.shortName-cardinality".to_string(),
class: "ACDCConverterDCTerminal".to_string(),
property: "IdentifiedObject.shortName".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.shortName-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_connectivity_node_connectivity_node_topological_n_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ConnectivityNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::ConnectivityNode>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.topological_node.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["TopologicalNode"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:ConnectivityNode.TopologicalNode-valueType".to_string(),
class: "ConnectivityNode".to_string(),
property: "ConnectivityNode.TopologicalNode".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:TopologicalNode".to_string(),
severity: "sh:Violation".to_string(),
name: "ConnectivityNode.TopologicalNode-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_connectivity_node_connectivity_node_topological_n_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("ConnectivityNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::ConnectivityNode>() {
Some(o) => o, None => continue,
};
if obj.topological_node.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:ConnectivityNode.TopologicalNode-cardinality".to_string(),
class: "ConnectivityNode".to_string(),
property: "ConnectivityNode.TopologicalNode".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "ConnectivityNode.TopologicalNode-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_description_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "DCNode".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_short_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.shortName") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.shortName-cardinality".to_string(),
class: "DCNode".to_string(),
property: "IdentifiedObject.shortName".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.shortName-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_energy_ident_code_eic_m_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.energyIdentCodeEic") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
class: "DCNode".to_string(),
property: "IdentifiedObject.energyIdentCodeEic".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_identified_object_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.name") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "DCNode".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_dc_node_dc_topological_node_has_value(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DCNode>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.dc_topological_node.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DCTopologicalNode"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:DCNode.DCTopologicalNode-valueType".to_string(),
class: "DCNode".to_string(),
property: "DCNode.DCTopologicalNode".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:DCTopologicalNode".to_string(),
severity: "sh:Violation".to_string(),
name: "DCNode.DCTopologicalNode-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_node_dc_node_dc_topological_node_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DCNode>() {
Some(o) => o, None => continue,
};
if obj.dc_topological_node.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:DCNode.DCTopologicalNode-cardinality".to_string(),
class: "DCNode".to_string(),
property: "DCNode.DCTopologicalNode".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "DCNode.DCTopologicalNode-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.name") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "DCTerminal".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_dc_base_terminal_dc_topological_node_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTerminal").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DCTerminal>() {
Some(o) => o, None => continue,
};
if obj.base.dc_topological_node.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:DCBaseTerminal.DCTopologicalNode-cardinality".to_string(),
class: "DCTerminal".to_string(),
property: "DCBaseTerminal.DCTopologicalNode".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "DCBaseTerminal.DCTopologicalNode-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_energy_ident_code_e_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.energyIdentCodeEic") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
class: "DCTerminal".to_string(),
property: "IdentifiedObject.energyIdentCodeEic".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_description_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "DCTerminal".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_identified_object_short_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTerminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.shortName") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.shortName-cardinality".to_string(),
class: "DCTerminal".to_string(),
property: "IdentifiedObject.shortName".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.shortName-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_terminal_dc_base_terminal_dc_topological_node_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTerminal").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DCTerminal>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.base.dc_topological_node.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DCTopologicalNode"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:DCBaseTerminal.DCTopologicalNode-valueType".to_string(),
class: "DCTerminal".to_string(),
property: "DCBaseTerminal.DCTopologicalNode".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:DCTopologicalNode".to_string(),
severity: "sh:Violation".to_string(),
name: "DCBaseTerminal.DCTopologicalNode-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_description_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "DCTopologicalNode".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.name") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "DCTopologicalNode".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_dc_topological_node_dc_equipm_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTopologicalNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DCTopologicalNode>() {
Some(o) => o, None => continue,
};
if obj.dc_equipment_container.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:DCTopologicalNode.DCEquipmentContainer-cardinality".to_string(),
class: "DCTopologicalNode".to_string(),
property: "DCTopologicalNode.DCEquipmentContainer".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "DCTopologicalNode.DCEquipmentContainer-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_m_rid_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTopologicalNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DCTopologicalNode>() {
Some(o) => o, None => continue,
};
if obj.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "DCTopologicalNode".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_short_name_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.shortName") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.shortName-cardinality".to_string(),
class: "DCTopologicalNode".to_string(),
property: "IdentifiedObject.shortName".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.shortName-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_dc_topological_node_identified_object_energy_iden_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DCTopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.energyIdentCodeEic") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
class: "DCTopologicalNode".to_string(),
property: "IdentifiedObject.energyIdentCodeEic".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_terminal_terminal_topological_node_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Terminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("Terminal.TopologicalNode") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:Terminal.TopologicalNode-cardinality".to_string(),
class: "Terminal".to_string(),
property: "Terminal.TopologicalNode".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "Terminal.TopologicalNode-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Terminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.name") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "Terminal".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_energy_ident_code_eic_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Terminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.energyIdentCodeEic") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
class: "Terminal".to_string(),
property: "IdentifiedObject.energyIdentCodeEic".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_description_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Terminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "Terminal".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_terminal_terminal_topological_node_has_value(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Terminal").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::Terminal>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.topological_node.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["TopologicalNode"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:Terminal.TopologicalNode-valueType".to_string(),
class: "Terminal".to_string(),
property: "Terminal.TopologicalNode".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:TopologicalNode".to_string(),
severity: "sh:Violation".to_string(),
name: "Terminal.TopologicalNode-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_terminal_identified_object_short_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Terminal").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.shortName") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.shortName-cardinality".to_string(),
class: "Terminal".to_string(),
property: "IdentifiedObject.shortName".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.shortName-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_topological_node_reporting_group_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("TopologicalNode.ReportingGroup") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:TopologicalNode.ReportingGroup-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "TopologicalNode.ReportingGroup".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "TopologicalNode.ReportingGroup-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_energy_ident_c_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.energyIdentCodeEic") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "IdentifiedObject.energyIdentCodeEic".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.energyIdentCodeEic-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_short_name_max_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.shortName") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.shortName-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "IdentifiedObject.shortName".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.shortName-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_description_ma_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_m_rid_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TopologicalNode>() {
Some(o) => o, None => continue,
};
if obj.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_topological_node_base_voltage_re_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TopologicalNode>() {
Some(o) => o, None => continue,
};
if obj.base_voltage.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:TopologicalNode.BaseVoltage-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "TopologicalNode.BaseVoltage".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "TopologicalNode.BaseVoltage-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_topological_node_connectivity_no_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TopologicalNode>() {
Some(o) => o, None => continue,
};
if obj.connectivity_node_container.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "tp:TopologicalNode.ConnectivityNodeContainer-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "TopologicalNode.ConnectivityNodeContainer".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "TopologicalNode.ConnectivityNodeContainer-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_topology_ap_con_simple_shacl_topological_node_identified_object_name_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TopologicalNode").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.name") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "TopologicalNode".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}