From 1c4ff8426de5b2db77b8e9bdd9fca5ed054e8a50 Mon Sep 17 00:00:00 2001 From: marcel Date: Fri, 11 Oct 2024 10:44:04 +0200 Subject: [PATCH] Add opcua placeholder management in arrays In OPCUA Object-arrays are manage by so called placeholders. For instance, placeholder Pump- means that all BroseNames like Pump-1, Pump-02, ..., etc are part of the same array. Another way to express placeholders is to embrace the whole expression by <>, e.g. . This maps all names references from the same Object which have the same types to the same array. Signed-off-by: marcel --- semantic-model/opcua/extractType.py | 49 +- semantic-model/opcua/lib/shacl.py | 72 +- semantic-model/opcua/lib/utils.py | 29 +- .../opcua/tests/extractType/test.bash | 1 + .../test_object_example.NodeSet2.instances | 30 + .../test_object_example.NodeSet2.shacl | 41 + .../test_object_example.NodeSet2.xml | 136 + .../test_pumps_instanceexample.instances | 191 +- .../test_pumps_instanceexample.shacl | 3315 +++++++++++------ semantic-model/opcua/tests/test_libshacl.py | 305 +- semantic-model/opcua/tests/test_libutils.py | 157 +- 11 files changed, 3107 insertions(+), 1219 deletions(-) create mode 100644 semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.instances create mode 100644 semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.shacl create mode 100644 semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.xml diff --git a/semantic-model/opcua/extractType.py b/semantic-model/opcua/extractType.py index 4f098341..dc6a7614 100644 --- a/semantic-model/opcua/extractType.py +++ b/semantic-model/opcua/extractType.py @@ -26,6 +26,8 @@ from lib.shacl import Shacl +attribute_prefix = 'has' + query_namespaces = """ PREFIX rdfs: PREFIX rdf: @@ -215,15 +217,16 @@ def scan_type_recursive(o, node, instancetype, shapename): if str(instancetype) == str(classtype): return False - attributename = urllib.parse.quote(f'has{browse_name}') + attributename = urllib.parse.quote(f'{browse_name}') rdfutils.get_modelling_rule(g, o, shacl_rule, instancetype) + placeholder_pattern = None decoded_attributename = urllib.parse.unquote(attributename) if utils.contains_both_angle_brackets(decoded_attributename): - decoded_attributename = utils.normalize_angle_bracket_name(decoded_attributename) - attributename = urllib.parse.quote(decoded_attributename) - if attributename == 'has': # full template, ignore it - return False + decoded_attributename, placeholder_pattern = utils.normalize_angle_bracket_name(decoded_attributename) + attributename = urllib.parse.quote(f'{attribute_prefix}{decoded_attributename}') + if len(decoded_attributename) == 0: # full template, ignore it + raise Exception(f"Unexpected attributename {attributename}") shacl_rule['path'] = entity_namespace[attributename] if rdfutils.isObjectNodeClass(nodeclass): @@ -248,7 +251,8 @@ def scan_type_recursive(o, node, instancetype, shapename): has_components = True shacl_rule['contentclass'] = classtype shaclg.create_shacl_property(shapename, shacl_rule['path'], shacl_rule['optional'], shacl_rule['array'], - False, True, shacl_rule['contentclass'], None, is_subcomponent=True) + False, True, shacl_rule['contentclass'], None, is_subcomponent=True, + placeholder_pattern=placeholder_pattern) elif rdfutils.isVariableNodeClass(nodeclass): stop_scan = check_variable_consistency(instancetype, entity_namespace[attributename], classtype) if stop_scan: @@ -332,36 +336,51 @@ def scan_entitiy_recursive(node, id, instance, node_id, o): shacl_rule = {} browse_name = next(g.objects(o, basens['hasBrowseName'])) nodeclass, classtype = rdfutils.get_type(g, o) - attributename = urllib.parse.quote(f'has{browse_name}') + attributename = urllib.parse.quote(browse_name) - decoded_attributename = utils.normalize_angle_bracket_name(urllib.parse.unquote(attributename)) - optional, array = shaclg.get_modelling_rule(entity_namespace[decoded_attributename], URIRef(instance['type'])) + original_attributename = None + decoded_attributename = urllib.parse.unquote(attributename) + optional, array, path = shaclg.get_modelling_rule_and_path(decoded_attributename, URIRef(instance['type']), + classtype, attribute_prefix) + if path is not None: + original_attributename = decoded_attributename + decoded_attributename = path.removeprefix(entity_namespace) + if not path.startswith(str(entity_namespace)): + print(f"Warning: Mismatch of {entity_namespace} namespace and {path}") + else: + decoded_attributename = f'{attribute_prefix}{decoded_attributename}' shacl_rule['optional'] = optional shacl_rule['array'] = array datasetId = None + try: is_placeholder = shaclg.is_placeholder(URIRef(instance['type']), entity_namespace[decoded_attributename]) except: is_placeholder = False if is_placeholder: - datasetId = f'{datasetid_urn}:{attributename}' - attributename = urllib.parse.quote(decoded_attributename) - shacl_rule['path'] = entity_namespace[attributename] + if original_attributename is None: + raise Exception(f"No original_attributename given but datasetId neeeded for {decoded_attributename}") + datasetId = f'{datasetid_urn}:{original_attributename}' + attributename = urllib.parse.quote(decoded_attributename) if rdfutils.isObjectNodeClass(nodeclass): shacl_rule['is_property'] = False relid = scan_entity(o, classtype, id, shacl_rule['optional']) if relid is not None: has_components = True - instance[f'{entity_ontology_prefix}:{attributename}'] = { + full_attribute_name = f'{entity_ontology_prefix}:{attributename}' + if instance.get(full_attribute_name) is None: + instance[full_attribute_name] = [] + attr_instance = { 'type': 'Relationship', 'object': relid } if is_placeholder and datasetId is not None: - instance[f'{entity_ontology_prefix}:{attributename}']['datasetId'] = datasetId + attr_instance['datasetId'] = datasetId if debug: - instance[f'{entity_ontology_prefix}:{attributename}']['debug'] = \ + attr_instance['debug'] = \ f'{entity_ontology_prefix}:{attributename}' + instance[full_attribute_name].append(attr_instance) shacl_rule['contentclass'] = classtype minshaclg.copy_property_from_shacl(shaclg, instance['type'], entity_namespace[attributename]) if not shacl_rule['optional']: diff --git a/semantic-model/opcua/lib/shacl.py b/semantic-model/opcua/lib/shacl.py index 2d868294..94cbbb9a 100644 --- a/semantic-model/opcua/lib/shacl.py +++ b/semantic-model/opcua/lib/shacl.py @@ -23,21 +23,39 @@ query_minmax = """ -SELECT ?mincount ?maxcount WHERE { - ?shape sh:targetClass ?targetclass . - OPTIONAL{ - ?shape sh:property [ - sh:path ?path; - sh:maxCount ?maxcount - ] +SELECT ?path ?pattern ?mincount ?maxcount ?localName +WHERE { + ?shape a sh:NodeShape ; + sh:property ?property ; + sh:targetClass ?targetclass . + + ?property sh:path ?path ; + sh:property [ sh:class ?attributeclass ] . + OPTIONAL { + ?property base:hasPlaceHolderPattern ?pattern . + } + + OPTIONAL { + ?property sh:maxCount ?maxcount . } - OPTIONAL{ - ?shape sh:property [ - sh:path ?path; - sh:minCount ?mincount - ] + + OPTIONAL { + ?property sh:minCount ?mincount . } + + # Extract the local name from the path (after the last occurrence of '/', '#' or ':') + BIND(REPLACE(str(?path), '.*[#/](?=[^#/]*$)', '') AS ?localName) + + # Conditional filtering based on whether the pattern exists + FILTER ( + IF(bound(?pattern), + regex(?name, ?pattern), # If pattern exists, use regex + ?localName = ?prefixname # Otherwise, match the local name + ) + ) + BIND(IF(?localName = ?prefixname, 0, 1) AS ?order) } +ORDER BY ?order """ @@ -60,7 +78,7 @@ def create_shacl_type(self, targetclass): return shapename def create_shacl_property(self, shapename, path, optional, is_array, is_property, is_iri, contentclass, datatype, - is_subcomponent=False): + is_subcomponent=False, placeholder_pattern=None): innerproperty = BNode() property = BNode() maxCount = 1 @@ -80,6 +98,8 @@ def create_shacl_property(self, shapename, path, optional, is_array, is_property self.shaclg.add((innerproperty, SH.path, self.ngsildns['hasObject'])) if is_array: self.shaclg.add((property, self.basens['isPlaceHolder'], Literal(True))) + if placeholder_pattern is not None: + self.shaclg.add((property, self.basens['hasPlaceHolderPattern'], Literal(placeholder_pattern))) if is_subcomponent: self.shaclg.add((property, RDF.type, self.basens['SubComponentRelationship'])) else: @@ -128,24 +148,33 @@ def get_shacl_iri_and_contentclass(self, g, node, shacl_rule): else: shacl_rule['is_iri'] = False shacl_rule['contentclass'] = None + shacl_rule['datatype'] = None except: shacl_rule['is_iri'] = False shacl_rule['contentclass'] = None + shacl_rule['datatype'] = None - def get_modelling_rule(self, path, target_class): - bindings = {'targetclass': target_class, 'path': path} + def get_modelling_rule_and_path(self, name, target_class, attributeclass, prefix): + bindings = {'targetclass': target_class, 'name': Literal(name), 'attributeclass': attributeclass, + 'prefixname': Literal(f'{prefix}{name}')} optional = True array = True + path = None try: - results = list(self.shaclg.query(query_minmax, initBindings=bindings, initNs={'sh': SH})) + results = list(self.shaclg.query(query_minmax, initBindings=bindings, + initNs={'sh': SH, 'base': self.basens})) if len(results) > 0: - if int(results[0][0]) > 0: + if results[0][0] is not None: + path = results[0][0] + if int(results[0][2]) > 0: optional = False - if int(results[0][1]) <= 1: + if int(results[0][3]) <= 1: array = False + if len(results) > 1: + print("Warning: more than one path match for {path}") except: pass - return optional, array + return optional, array, path def attribute_is_indomain(self, targetclass, attributename): property = self._get_property(targetclass, attributename) @@ -168,6 +197,8 @@ def _get_property(self, targetclass, propertypath): def is_placeholder(self, targetclass, attributename): property = self._get_property(targetclass, attributename) + if property is None: + return False try: return bool(next(self.shaclg.objects(property, self.basens['isPlaceHolder']))) except: @@ -191,7 +222,6 @@ def update_shclass_in_property(self, property, shclass): pass def copy_property_from_shacl(self, source_graph, targetclass, propertypath): - print(f"woudld copy {targetclass}=>{propertypath}") shape = self.create_shape_if_not_exists(source_graph, targetclass) if shape is None: return @@ -210,8 +240,6 @@ def copy_bnode_triples(self, source_graph, bnode, shape): for s, p, o in source_graph.get_graph().triples((bnode, None, None)): # Add the triple to the target graph self.shaclg.add((s, p, o)) - print(f"Adding: {s}, {p}, {o}") - # If the object is another blank node, recurse into it if isinstance(o, BNode): self.copy_bnode_triples(source_graph, o, None) diff --git a/semantic-model/opcua/lib/utils.py b/semantic-model/opcua/lib/utils.py index 57a56314..0f1dfc53 100644 --- a/semantic-model/opcua/lib/utils.py +++ b/semantic-model/opcua/lib/utils.py @@ -152,11 +152,30 @@ def get_default_value(datatype): def normalize_angle_bracket_name(s): - # Remove content inside angle brackets and the brackets themselves - no_brackets = re.sub(r'<[^>]*>', '', s) - # Strip trailing numbers and non-alphabetic characters - normalized = re.sub(r'[^a-zA-Z]+$', '', no_brackets) - return normalized + # Check if there are any angle brackets in the input string + if '<' in s and '>' in s: + # Remove everything inside and including the angle brackets + no_brackets = re.sub(r'<[^>]*>', '', s) + + # If the result is empty, it means the entire name was in brackets like + if no_brackets.strip() == '': + # Extract the name inside the angle brackets + base_name = re.sub(r'[<>]', '', s) + # The pattern should match valid BrowseNames + pattern = r'[a-zA-Z0-9_-]+' + else: + # Otherwise, use the part before the angle brackets + base_name = no_brackets.strip() + # Construct a pattern to match the base name followed by valid BrowseName characters + pattern = re.sub(r'<[^>]*>', r'[a-zA-Z0-9_-]+', s) + else: + # If there are no angle brackets, the base name is just the input string itself + base_name = s + # Pattern matches exactly the base name + pattern = re.escape(s) # Escape any special characters in the base name + + # Return the cleaned base name and the regular expression pattern + return base_name.strip(), pattern def contains_both_angle_brackets(s): diff --git a/semantic-model/opcua/tests/extractType/test.bash b/semantic-model/opcua/tests/extractType/test.bash index 154304bc..f8002b99 100644 --- a/semantic-model/opcua/tests/extractType/test.bash +++ b/semantic-model/opcua/tests/extractType/test.bash @@ -23,6 +23,7 @@ TESTNODESETS=( test_object_overwrite_type.NodeSet2,${TESTURI}AlphaType test_variable_enum.NodeSet2,${TESTURI}AlphaType test_object_subtypes.NodeSet2,${TESTURI}AlphaType + test_object_example.NodeSet2,${TESTURI}AlphaType test_object_hierarchies_no_DataValue,${TESTURI}AlphaType test_ignore_references.NodeSet2,${TESTURI}AlphaType test_references_to_typedefinitions.NodeSet2,${TESTURI}AlphaType diff --git a/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.instances b/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.instances new file mode 100644 index 00000000..e9e3be19 --- /dev/null +++ b/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.instances @@ -0,0 +1,30 @@ +[ + { + "type": "http://my.test/BSubType", + "id": "urn:test:AlphaInstance:sub:i2012", + "@context": [ + "http://localhost:8099/context.jsonld" + ], + "uaentity:hasMyVariable": { + "type": "Property", + "value": false + } + }, + { + "type": "http://my.test/AlphaType", + "id": "urn:test:AlphaInstance", + "@context": [ + "http://localhost:8099/context.jsonld" + ], + "uaentity:hasC": { + "type": "Property", + "value": 0.0 + }, + "uaentity:hasB": [ + { + "type": "Relationship", + "object": "urn:test:AlphaInstance:sub:i2012" + } + ] + } +] \ No newline at end of file diff --git a/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.shacl b/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.shacl new file mode 100644 index 00000000..e39a0d6e --- /dev/null +++ b/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.shacl @@ -0,0 +1,41 @@ +@prefix base: . +@prefix ngsi-ld: . +@prefix sh: . +@prefix shacl: . +@prefix test: . +@prefix xsd: . + +shacl:AlphaTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class test:BType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass test:AlphaType . + +shacl:BTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass test:BType . + diff --git a/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.xml b/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.xml new file mode 100644 index 00000000..596e4eba --- /dev/null +++ b/semantic-model/opcua/tests/extractType/test_object_example.NodeSet2.xml @@ -0,0 +1,136 @@ + + + + + + + + + http://my.test/ + + + i=1 + i=2 + i=3 + i=4 + i=5 + i=6 + i=7 + i=8 + i=9 + i=10 + i=11 + i=13 + i=12 + i=15 + i=14 + i=16 + i=17 + i=18 + i=20 + i=21 + i=19 + i=22 + i=26 + i=27 + i=28 + i=47 + i=46 + i=35 + i=36 + i=48 + i=45 + i=40 + i=37 + i=38 + i=39 + i=53 + i=52 + i=51 + i=54 + i=9004 + i=9005 + i=17597 + i=9006 + i=15112 + i=17604 + i=17603 + + + + AlphaType + A custom object type Alpha + + i=58 + ns=1;i=2001 + ns=1;i=1003 + ns=1;i=1003 + + + + B Type + A custom object type B + + i=58 + + + + Object B + + ns=1;i=1002 + ns=1;i=1004 + + + + Variable of B-object + + i=63 + + + + B Sub Type + A custom subobject of type B + + ns=1;i=1002 + + + + + + Variable of AlphaType + + i=63 + ns=1;i=1001 + + + + Alpha Instance + + ns=1;i=2011 + ns=1;i=2012 + ns=1;i=1001 + + + + C Variable of AlphaType + + i=63 + ns=1;i=2010 + + + + Object B subtype + + ns=1;i=1005 + ns=1;i=2013 + + + + Variable of B-object + + i=63 + + + diff --git a/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.instances b/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.instances index d1c24f86..a929cdb4 100644 --- a/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.instances +++ b/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.instances @@ -36,10 +36,12 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:hasMeasurements": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5006" - } + "uaentity:hasMeasurements": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5006" + } + ] }, { "type": "http://opcfoundation.org/UA/Pumps/PortsGroupType", @@ -47,10 +49,12 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:has%3CDrive%3E": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5004" - } + "uaentity:hasDrive": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5004" + } + ] }, { "type": "http://opcfoundation.org/UA/Pumps/DesignType", @@ -128,14 +132,18 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:hasDesign": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5021" - }, - "uaentity:hasSystemRequirements": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5022" - } + "uaentity:hasDesign": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5021" + } + ], + "uaentity:hasSystemRequirements": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5022" + } + ] }, { "type": "http://opcfoundation.org/UA/Pumps/SupervisionProcessFluidType", @@ -192,18 +200,24 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:hasSupervisionProcessFluid": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5010" - }, - "uaentity:hasSupervisionPumpOperation": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5011" - }, - "uaentity:hasSupervisionMechanics": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5009" - } + "uaentity:hasSupervisionProcessFluid": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5010" + } + ], + "uaentity:hasSupervisionPumpOperation": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5011" + } + ], + "uaentity:hasSupervisionMechanics": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5009" + } + ] }, { "type": "http://opcfoundation.org/UA/Pumps/DocumentationType", @@ -279,18 +293,24 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:hasPreventiveMaintenance": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5015" - }, - "uaentity:hasGeneralMaintenance": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5014" - }, - "uaentity:hasBreakdownMaintenance": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5013" - } + "uaentity:hasPreventiveMaintenance": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5015" + } + ], + "uaentity:hasGeneralMaintenance": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5014" + } + ], + "uaentity:hasBreakdownMaintenance": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5013" + } + ] }, { "type": "http://opcfoundation.org/UA/Pumps/PumpActuationType", @@ -334,10 +354,13 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:hasSensor1": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5019" - }, + "uaentity:hasVibration": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5019", + "datasetId": "urn:iff:datasetId:Sensor1" + } + ], "uaentity:hasSpeed": { "type": "Property", "value": 0.0 @@ -365,14 +388,18 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:hasPumpActuation": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5017" - }, - "uaentity:hasMeasurements": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5018" - } + "uaentity:hasPumpActuation": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5017" + } + ], + "uaentity:hasMeasurements": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5018" + } + ] }, { "type": "http://opcfoundation.org/UA/Pumps/PumpType", @@ -380,29 +407,41 @@ "@context": [ "http://localhost:8099/context.jsonld" ], - "uaentity:hasPorts": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5003" - }, - "uaentity:hasConfiguration": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5020" - }, - "uaentity:hasEvents": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5008" - }, - "uaentity:hasDocumentation": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5005" - }, - "uaentity:hasMaintenance": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5012" - }, - "uaentity:hasOperational": { - "type": "Relationship", - "object": "urn:test:ExamplePump:sub:i5016" - } + "uaentity:hasPorts": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5003" + } + ], + "uaentity:hasConfiguration": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5020" + } + ], + "uaentity:hasEvents": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5008" + } + ], + "uaentity:hasDocumentation": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5005" + } + ], + "uaentity:hasMaintenance": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5012" + } + ], + "uaentity:hasOperational": [ + { + "type": "Relationship", + "object": "urn:test:ExamplePump:sub:i5016" + } + ] } ] \ No newline at end of file diff --git a/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.shacl b/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.shacl index 656c3c55..ce23d29e 100644 --- a/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.shacl +++ b/semantic-model/opcua/tests/extractType/test_pumps_instanceexample.shacl @@ -11,7 +11,7 @@ shacl:ActuationTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -20,8 +20,8 @@ shacl:ActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -29,8 +29,8 @@ shacl:ActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -38,8 +38,8 @@ shacl:ActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -47,8 +47,8 @@ shacl:ActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -56,8 +56,8 @@ shacl:ActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -65,8 +65,8 @@ shacl:ActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -74,14 +74,22 @@ shacl:ActuationTypeShape a sh:NodeShape ; sh:targetClass pumps:ActuationType . shacl:BaseObjectTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; sh:targetClass opcua:BaseObjectType . shacl:BreakdownMaintenanceTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -89,8 +97,8 @@ shacl:BreakdownMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:integer ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -107,8 +115,8 @@ shacl:BreakdownMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -116,8 +124,8 @@ shacl:BreakdownMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:integer ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -128,7 +136,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -146,7 +154,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -155,7 +163,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -164,7 +172,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -173,7 +181,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -182,7 +190,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -191,7 +199,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -209,7 +217,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -218,7 +226,7 @@ shacl:ConditionBasedMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -241,8 +249,8 @@ shacl:ConfigurationGroupTypeShape a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ImplementationType ; + sh:path ; + sh:property [ sh:class pumps:SystemRequirementsType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; @@ -251,8 +259,8 @@ shacl:ConfigurationGroupTypeShape a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SystemRequirementsType ; + sh:path ; + sh:property [ sh:class pumps:ImplementationType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; @@ -263,7 +271,7 @@ shacl:ControlTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -281,8 +289,8 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -290,7 +298,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -299,7 +307,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -308,8 +316,8 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -317,7 +325,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -326,7 +334,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -344,7 +352,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -353,7 +361,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -362,7 +370,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -371,7 +379,7 @@ shacl:ControlTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -383,7 +391,7 @@ shacl:DesignTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -401,7 +409,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -410,8 +418,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -419,7 +427,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -428,7 +436,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -437,8 +445,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -446,7 +454,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -455,7 +463,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -464,7 +472,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -473,7 +481,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -482,7 +490,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -491,7 +499,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -500,8 +508,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -509,7 +517,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -518,8 +526,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -527,7 +535,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -536,7 +544,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -545,17 +553,17 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:PumpClassEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -563,8 +571,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -572,8 +580,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -581,7 +589,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -590,7 +598,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -599,7 +607,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -608,8 +616,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -617,7 +625,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -626,7 +634,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -635,16 +643,16 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:PumpClassEnum ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; + sh:nodeKind sh:IRI ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -653,8 +661,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -662,7 +670,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -671,8 +679,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -680,7 +688,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -689,7 +697,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -698,8 +706,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -707,8 +715,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -716,7 +724,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -725,7 +733,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -734,8 +742,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -743,7 +751,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -752,7 +760,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -761,7 +769,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -770,7 +778,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -779,7 +787,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -788,7 +796,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -797,7 +805,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -806,7 +814,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -815,7 +823,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -824,7 +832,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -833,8 +841,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -842,8 +850,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -851,7 +859,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -860,8 +868,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -869,7 +877,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -878,8 +886,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -887,7 +895,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -896,7 +904,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -905,8 +913,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -914,7 +922,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -923,7 +931,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -932,7 +940,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -941,7 +949,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -950,7 +958,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -959,7 +967,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -968,8 +976,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -977,8 +985,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -986,7 +994,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -995,8 +1003,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -1004,7 +1012,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1013,7 +1021,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1022,8 +1030,8 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -1031,7 +1039,7 @@ shacl:DesignTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1043,25 +1051,25 @@ shacl:DiscreteInputObjectTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:integer ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; - sh:minCount 0 ; + sh:minCount 1 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:integer ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; - sh:minCount 1 ; + sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1091,25 +1099,25 @@ shacl:DiscreteOutputObjectTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; - sh:minCount 0 ; + sh:minCount 1 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; - sh:minCount 1 ; + sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1130,7 +1138,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1139,7 +1147,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1148,7 +1156,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1157,7 +1165,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1166,7 +1174,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1175,7 +1183,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1184,7 +1192,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1193,7 +1201,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1202,7 +1210,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1211,7 +1219,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1220,7 +1228,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1229,7 +1237,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1238,7 +1246,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1247,7 +1255,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1256,7 +1264,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1265,7 +1273,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1274,7 +1282,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1283,7 +1291,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1292,7 +1300,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1301,7 +1309,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1310,7 +1318,7 @@ shacl:DocumentationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1318,17 +1326,11 @@ shacl:DocumentationTypeShape a sh:NodeShape ; sh:path ngsi-ld:hasValue ] ] ; sh:targetClass pumps:DocumentationType . -shacl:FileTypeShape a sh:NodeShape ; - sh:targetClass opcua:FileType . - -shacl:FunctionalGroupTypeShape a sh:NodeShape ; - sh:targetClass devices:FunctionalGroupType . - -shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; +shacl:DriveDesignTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1337,7 +1339,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1346,7 +1348,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1355,7 +1357,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1364,7 +1366,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1373,7 +1375,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1382,7 +1384,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1391,7 +1393,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1400,8 +1402,8 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -1409,16 +1411,16 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:StateOfTheItemEnum ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1427,16 +1429,19 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:MaintenanceLevelEnum ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:DriveDesignType . + +shacl:DriveMeasurementsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1445,7 +1450,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1454,7 +1459,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1463,7 +1468,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1472,7 +1477,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1481,7 +1486,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1490,7 +1495,7 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1499,19 +1504,16 @@ shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:GeneralMaintenanceType . - -shacl:ImplementationTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1520,7 +1522,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1529,7 +1531,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1538,7 +1540,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1547,17 +1549,20 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:DriveMeasurementsType . + +shacl:DrivePortTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -1565,43 +1570,54 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:PortDirectionEnum ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; + sh:nodeKind sh:IRI ; sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:DriveDesignType ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:DriveMeasurementsType ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ] ; + sh:targetClass pumps:DrivePortType . + +shacl:FileTypeShape a sh:NodeShape ; + sh:targetClass opcua:FileType . + +shacl:FunctionalGroupTypeShape a sh:NodeShape ; + sh:targetClass devices:FunctionalGroupType . + +shacl:GeneralMaintenanceTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1610,7 +1626,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1619,7 +1635,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1628,7 +1644,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1637,16 +1653,16 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:MaintenanceLevelEnum ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; + sh:nodeKind sh:IRI ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1655,7 +1671,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1664,7 +1680,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1673,7 +1689,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1682,7 +1698,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1691,7 +1707,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1700,7 +1716,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1709,7 +1725,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1718,7 +1734,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1727,7 +1743,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1736,7 +1752,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1745,17 +1761,17 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:StateOfTheItemEnum ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; + sh:nodeKind sh:IRI ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -1763,7 +1779,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1772,16 +1788,19 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:GeneralMaintenanceType . + +shacl:ImplementationTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1790,7 +1809,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1799,68 +1818,7 @@ shacl:ImplementationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:ImplementationType . - -shacl:LockingServicesTypeShape a sh:NodeShape ; - sh:targetClass devices:LockingServicesType . - -shacl:MaintenanceGroupTypeShape a sh:NodeShape ; - sh:property [ a base:SubComponentRelationship ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:BreakdownMaintenanceType ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ConditionBasedMaintenanceType ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:PreventiveMaintenanceType ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:GeneralMaintenanceType ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ] ; - sh:targetClass pumps:MaintenanceGroupType . - -shacl:MarkingsTypeShape a sh:NodeShape ; - sh:targetClass pumps:MarkingsType . - -shacl:MeasurementsTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1869,7 +1827,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1878,7 +1836,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1887,7 +1845,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1896,7 +1854,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1905,7 +1863,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1914,7 +1872,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1923,7 +1881,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1932,7 +1890,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1941,8 +1899,8 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:integer ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -1950,7 +1908,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1959,7 +1917,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1968,7 +1926,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1977,7 +1935,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1986,7 +1944,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1995,7 +1953,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2004,7 +1962,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2013,7 +1971,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2022,7 +1980,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2031,7 +1989,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2040,7 +1998,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2049,7 +2007,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2058,7 +2016,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2067,7 +2025,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2076,7 +2034,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2085,7 +2043,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2094,7 +2052,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2103,7 +2061,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2112,7 +2070,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2121,7 +2079,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2130,16 +2088,19 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:ImplementationType . + +shacl:InletConnectionDesignTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2148,7 +2109,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2157,8 +2118,8 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2166,7 +2127,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2175,7 +2136,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2184,7 +2145,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2193,7 +2154,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2202,7 +2163,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2211,16 +2172,19 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:InletConnectionDesignType . + +shacl:InletConnectionImplementationTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2229,7 +2193,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2238,7 +2202,7 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2247,8 +2211,8 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2256,16 +2220,19 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:InletConnectionImplementationType . + +shacl:InletConnectionMeasurementsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2274,150 +2241,116 @@ shacl:MeasurementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:InletConnectionMeasurementsType . + +shacl:InletConnectionPortTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:PortDirectionEnum ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; + sh:nodeKind sh:IRI ; sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:InletConnectionMeasurementsType ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:double ; + sh:path ; + sh:property [ sh:class pumps:InletConnectionImplementationType ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:MeasurementsType . - -shacl:MultiPumpTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:class pumps:InletConnectionSystemRequirementsType ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ExchangeModeEnum ; + sh:path ; + sh:property [ sh:class pumps:InletConnectionDesignType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasObject ] ] ; + sh:targetClass pumps:InletConnectionPortType . + +shacl:InletConnectionSystemRequirementsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:InletConnectionSystemRequirementsType . + +shacl:LockingServicesTypeShape a sh:NodeShape ; + sh:targetClass devices:LockingServicesType . + +shacl:MaintenanceGroupTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:class pumps:BreakdownMaintenanceType ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:MultiPumpOperationModeEnum ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:PumpRoleEnum ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:integer ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:integer ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DistributionTypeEnum ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:MultiPumpType . - -shacl:OperationalGroupTypeShape a sh:NodeShape ; - sh:property [ a base:SubComponentRelationship ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ActuationType ; + sh:path ; + sh:property [ sh:class pumps:GeneralMaintenanceType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; @@ -2426,8 +2359,8 @@ shacl:OperationalGroupTypeShape a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ActuationType ; + sh:path ; + sh:property [ sh:class pumps:PreventiveMaintenanceType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; @@ -2436,63 +2369,59 @@ shacl:OperationalGroupTypeShape a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:PumpActuationType ; + sh:path ; + sh:property [ sh:class pumps:ConditionBasedMaintenanceType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasObject ] ] ; + sh:targetClass pumps:MaintenanceGroupType . + +shacl:MarkingsTypeShape a sh:NodeShape ; + sh:targetClass pumps:MarkingsType . + +shacl:MeasurementsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SignalsType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:MultiPumpType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:MeasurementsType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ControlType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ] ; - sh:targetClass pumps:OperationalGroupType . - -shacl:PortsGroupTypeShape a sh:NodeShape ; - sh:targetClass pumps:PortsGroupType . - -shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2500,8 +2429,8 @@ shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2509,7 +2438,7 @@ shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2518,7 +2447,7 @@ shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2527,8 +2456,8 @@ shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2536,8 +2465,8 @@ shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2545,106 +2474,98 @@ shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:PreventiveMaintenanceType . - -shacl:PumpActuationTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:OperationModeEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:PumpKickObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2652,8 +2573,8 @@ shacl:PumpActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2661,27 +2582,26 @@ shacl:PumpActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2689,45 +2609,52 @@ shacl:PumpActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ControlModeEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; + sh:property [ sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2736,7 +2663,7 @@ shacl:PumpActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2745,60 +2672,55 @@ shacl:PumpActuationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ControlModeEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ a base:SubComponentRelationship ; - sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:path ; + sh:property [ sh:class pumps:VibrationMeasurementType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], + sh:path ngsi-ld:hasObject ] ; + base:hasPlaceHolderPattern "[a-zA-Z0-9_-]+" ; + base:isPlaceHolder true ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:OperationModeEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:PumpActuationType . - -shacl:PumpIdentificationTypeShape a sh:NodeShape ; - sh:targetClass pumps:PumpIdentificationType . - -shacl:PumpKickObjectTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:PumpKickModeEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2806,17 +2728,17 @@ shacl:PumpKickObjectTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:integer ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; - sh:minCount 1 ; + sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2824,7 +2746,7 @@ shacl:PumpKickObjectTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2833,7 +2755,7 @@ shacl:PumpKickObjectTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2842,8 +2764,8 @@ shacl:PumpKickObjectTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -2851,168 +2773,1070 @@ shacl:PumpKickObjectTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:PumpKickObjectType . - -shacl:PumpTypeShape a sh:NodeShape ; - sh:property [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DocumentationType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:MaintenanceGroupType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ConfigurationGroupType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:OperationalGroupType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ] ; - sh:targetClass pumps:PumpType . - -shacl:SignalsTypeShape a sh:NodeShape ; - sh:property [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:MeasurementsType . + +shacl:MultiPumpTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:class pumps:MultiPumpOperationModeEnum ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:class pumps:PumpRoleEnum ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:class pumps:DistributionTypeEnum ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:nodeKind sh:BlankNode ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:ExchangeModeEnum ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:MultiPumpType . + +shacl:OperationalGroupTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:PumpActuationType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:SignalsType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:ControlType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:MultiPumpType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:MeasurementsType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:ActuationType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:ActuationType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ] ; + sh:targetClass pumps:OperationalGroupType . + +shacl:OutletConnectionDesignTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:OutletConnectionDesignType . + +shacl:OutletConnectionImplementationTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:OutletConnectionImplementationType . + +shacl:OutletConnectionMeasurementsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:OutletConnectionMeasurementsType . + +shacl:OutletConnectionPortTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:PortDirectionEnum ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OutletConnectionDesignType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OutletConnectionMeasurementsType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OutletConnectionImplementationType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OutletConnectionSystemRequirementsType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:OutletConnectionPortType . + +shacl:OutletConnectionSystemRequirementsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:OutletConnectionSystemRequirementsType . + +shacl:PortsGroupTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DrivePortType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ; + base:hasPlaceHolderPattern "[a-zA-Z0-9_-]+" ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OutletConnectionPortType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ; + base:hasPlaceHolderPattern "[a-zA-Z0-9_-]+" ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:InletConnectionPortType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ; + base:hasPlaceHolderPattern "[a-zA-Z0-9_-]+" ] ; + sh:targetClass pumps:PortsGroupType . + +shacl:PreventiveMaintenanceTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:PreventiveMaintenanceType . + +shacl:PumpActuationTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:PumpKickObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OperationModeEnum ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OperationModeEnum ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:ControlModeEnum ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:ControlModeEnum ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasValue ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteOutputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:PumpActuationType . + +shacl:PumpIdentificationTypeShape a sh:NodeShape ; + sh:targetClass pumps:PumpIdentificationType . + +shacl:PumpKickObjectTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:PumpKickModeEnum ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:PumpKickObjectType . + +shacl:PumpTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DocumentationType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:MaintenanceGroupType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:SupervisionType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:ConfigurationGroupType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:OperationalGroupType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class opcua:BaseObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:PortsGroupType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ] ; + sh:targetClass pumps:PumpType . + +shacl:SignalsTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; sh:path ; sh:property [ sh:class pumps:DiscreteInputObjectType ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], [ a base:SubComponentRelationship ; sh:maxCount 1 ; sh:minCount 0 ; @@ -3027,109 +3851,324 @@ shacl:SignalsTypeShape a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ] ; + sh:targetClass pumps:SignalsType . + +shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:DiscreteInputObjectType ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ] ; - sh:targetClass pumps:SignalsType . - -shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3138,7 +4177,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3147,7 +4186,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3156,7 +4195,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3165,7 +4204,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3174,7 +4213,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3183,7 +4222,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3192,7 +4231,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3201,7 +4240,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3210,7 +4249,19 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:SupervisionAuxiliaryDeviceType . + +shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3219,7 +4270,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3228,7 +4279,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3237,7 +4288,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3246,7 +4297,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3255,7 +4306,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3264,7 +4315,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3273,7 +4324,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3282,7 +4333,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3291,7 +4342,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3300,7 +4351,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3309,7 +4360,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3318,7 +4369,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3327,7 +4378,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3336,7 +4387,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3345,7 +4396,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3354,7 +4405,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3363,7 +4414,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3372,7 +4423,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3381,7 +4432,19 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:SupervisionElectronicsType . + +shacl:SupervisionHardwareTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3390,7 +4453,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3399,7 +4462,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3408,7 +4471,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3417,7 +4480,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3426,7 +4489,7 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3435,19 +4498,16 @@ shacl:SupervisionAuxiliaryDeviceTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SupervisionAuxiliaryDeviceType . - -shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3456,7 +4516,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3465,7 +4525,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3474,7 +4534,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3483,7 +4543,19 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:SupervisionHardwareType . + +shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3492,7 +4564,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3501,7 +4573,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3510,7 +4582,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3519,7 +4591,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3528,7 +4600,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3537,7 +4609,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3546,7 +4618,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3555,7 +4627,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3564,7 +4636,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3573,7 +4645,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3582,7 +4654,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3591,7 +4663,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3600,7 +4672,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3609,7 +4681,7 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3618,19 +4690,19 @@ shacl:SupervisionElectronicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SupervisionElectronicsType . + sh:targetClass pumps:SupervisionMechanicsType . -shacl:SupervisionHardwareTypeShape a sh:NodeShape ; +shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3639,7 +4711,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3648,7 +4720,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3657,7 +4729,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3666,7 +4738,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3675,7 +4747,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3684,7 +4756,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3693,7 +4765,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3702,7 +4774,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3711,7 +4783,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3720,7 +4792,7 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3729,19 +4801,28 @@ shacl:SupervisionHardwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; + sh:property [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SupervisionHardwareType . + sh:targetClass pumps:SupervisionProcessFluidType . -shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; +shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3750,7 +4831,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3759,7 +4840,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3768,7 +4849,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3777,7 +4858,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3786,7 +4867,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3795,7 +4876,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3804,7 +4885,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3813,7 +4894,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3822,7 +4903,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3831,7 +4912,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3840,7 +4921,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3849,7 +4930,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3858,7 +4939,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3867,7 +4948,7 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3876,19 +4957,16 @@ shacl:SupervisionMechanicsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SupervisionMechanicsType . - -shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3897,7 +4975,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3906,7 +4984,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3915,7 +4993,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3924,7 +5002,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3933,7 +5011,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3942,7 +5020,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3951,7 +5029,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3960,7 +5038,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3969,7 +5047,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3978,7 +5056,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3987,7 +5065,7 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3996,19 +5074,16 @@ shacl:SupervisionProcessFluidTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SupervisionProcessFluidType . - -shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4017,7 +5092,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4026,7 +5101,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4035,7 +5110,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4044,7 +5119,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4053,7 +5128,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4062,7 +5137,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4071,16 +5146,19 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:SupervisionPumpOperationType . + +shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4089,7 +5167,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4098,7 +5176,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4107,7 +5185,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4116,7 +5194,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4125,7 +5203,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4134,7 +5212,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4143,26 +5221,93 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:SupervisionSoftwareType . + +shacl:SupervisionTypeShape a sh:NodeShape ; + sh:property [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:class pumps:SupervisionAuxiliaryDeviceType ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ], - [ sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:class pumps:SupervisionProcessFluidType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:SupervisionHardwareType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:SupervisionSoftwareType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:SupervisionPumpOperationType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:SupervisionElectronicsType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ], + [ a base:SubComponentRelationship ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:class pumps:SupervisionMechanicsType ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:path ngsi-ld:hasObject ] ] ; + sh:targetClass pumps:SupervisionType . + +shacl:SystemRequirementsTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4170,8 +5315,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4179,8 +5324,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4188,8 +5333,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4197,8 +5342,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4206,8 +5351,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4215,7 +5360,7 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4224,8 +5369,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4233,8 +5378,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4242,8 +5387,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4251,8 +5396,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4260,8 +5405,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4269,8 +5414,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4278,17 +5423,17 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:class pumps:FieldbusEnum ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; + sh:nodeKind sh:IRI ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4296,8 +5441,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4305,8 +5450,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4314,8 +5459,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4323,8 +5468,8 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4332,20 +5477,17 @@ shacl:SupervisionPumpOperationTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SupervisionPumpOperationType . - -shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4353,8 +5495,8 @@ shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4362,8 +5504,8 @@ shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4371,8 +5513,8 @@ shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4380,8 +5522,8 @@ shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4389,8 +5531,8 @@ shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4398,8 +5540,8 @@ shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4407,92 +5549,79 @@ shacl:SupervisionSoftwareTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SupervisionSoftwareType . - -shacl:SupervisionTypeShape a sh:NodeShape ; - sh:property [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionProcessFluidType ; + sh:path ; + sh:property [ sh:class pumps:OperatingModeEnum ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionHardwareType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionPumpOperationType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionSoftwareType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionAuxiliaryDeviceType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionElectronicsType ; + sh:path ; + sh:property [ sh:class pumps:ControlModeEnum ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ], - [ a base:SubComponentRelationship ; - sh:maxCount 1 ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:SupervisionMechanicsType ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:path ngsi-ld:hasObject ] ] ; - sh:targetClass pumps:SupervisionType . - -shacl:SystemRequirementsTypeShape a sh:NodeShape ; - sh:property [ sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ], + [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4501,16 +5630,28 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:OperatingModeEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; + sh:path ngsi-ld:hasValue ] ] ; + sh:targetClass pumps:SystemRequirementsType . + +shacl:VibrationMeasurementTypeShape a sh:NodeShape ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:nodeKind sh:BlankNode ; + sh:path ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4519,8 +5660,8 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:boolean ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4528,7 +5669,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4537,7 +5678,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4546,7 +5687,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4555,16 +5696,16 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:ControlModeEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4573,7 +5714,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4582,7 +5723,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4591,7 +5732,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4600,7 +5741,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4609,7 +5750,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4618,7 +5759,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4627,7 +5768,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4636,7 +5777,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4645,7 +5786,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4654,7 +5795,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4663,16 +5804,16 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:class pumps:FieldbusEnum ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4681,7 +5822,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4690,7 +5831,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4699,7 +5840,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4708,7 +5849,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4717,7 +5858,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4726,8 +5867,8 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4735,7 +5876,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4744,7 +5885,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4753,7 +5894,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4762,7 +5903,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4771,7 +5912,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4780,8 +5921,8 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; - sh:property [ sh:datatype xsd:string ; + sh:path ; + sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -4789,7 +5930,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4798,7 +5939,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4807,7 +5948,7 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4816,11 +5957,11 @@ shacl:SystemRequirementsTypeShape a sh:NodeShape ; [ sh:maxCount 1 ; sh:minCount 0 ; sh:nodeKind sh:BlankNode ; - sh:path ; + sh:path ; sh:property [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:path ngsi-ld:hasValue ] ] ; - sh:targetClass pumps:SystemRequirementsType . + sh:targetClass pumps:VibrationMeasurementType . diff --git a/semantic-model/opcua/tests/test_libshacl.py b/semantic-model/opcua/tests/test_libshacl.py index 84e753f4..1f225ad9 100644 --- a/semantic-model/opcua/tests/test_libshacl.py +++ b/semantic-model/opcua/tests/test_libshacl.py @@ -32,11 +32,12 @@ def test_create_shacl_property(self): path = URIRef("http://example.org/path") optional = True is_array = False - is_property = True + is_property = False is_iri = False contentclass = None datatype = URIRef("http://www.w3.org/2001/XMLSchema#string") + # Base test case self.shacl_instance.create_shacl_property(shapename, path, optional, is_array, is_property, is_iri, contentclass, datatype) triples = list(self.shacl_instance.get_graph()) @@ -63,6 +64,71 @@ def test_create_shacl_property(self): self.assertIsInstance(innerproperty_bnode, BNode) self.assertIn((property_bnode, SH.property, innerproperty_bnode), triples) + # Additional test cases to improve coverage + + # Case 1: Test with is_array = True, is_subcomponent = True, and placeholder_pattern provided + self.shacl_instance = Shacl(self.namespace_prefix, self.basens, self.opcuans) # Reset instance + placeholder_pattern = "PatternExample" + is_array = True + is_subcomponent = True + self.shacl_instance.create_shacl_property(shapename, path, optional, is_array, is_property, is_iri, contentclass, datatype, is_subcomponent, placeholder_pattern) + + triples = list(self.shacl_instance.get_graph()) + + # Find the updated property node + property_bnode = None + for s, p, o in triples: + if s == shapename and p == SH.property: + property_bnode = o + + # Check that the isPlaceHolder triple was added + self.assertIn((property_bnode, self.basens['isPlaceHolder'], Literal(True)), triples) + + # Check that the hasPlaceHolderPattern triple was added + self.assertIn((property_bnode, self.basens['hasPlaceHolderPattern'], Literal(placeholder_pattern)), triples) + + # Check that the SubComponentRelationship type was added + self.assertIn((property_bnode, RDF.type, self.basens['SubComponentRelationship']), triples) + + # Case 2: Test with is_property = False, is_iri = True, and contentclass provided + self.shacl_instance = Shacl(self.namespace_prefix, self.basens, self.opcuans) # Reset instance + is_property = True + is_iri = True + contentclass = URIRef("http://example.org/ContentClass") + self.shacl_instance.create_shacl_property(shapename, path, optional, is_array, is_property, is_iri, contentclass, datatype) + + triples = list(self.shacl_instance.get_graph()) + + # Find the inner property node + innerproperty_bnode = None + for s, p, o in triples: + if p == SH.path and o == self.shacl_instance.ngsildns['hasValue']: + innerproperty_bnode = s + + # Check that the innerproperty node kind is IRI + self.assertIn((innerproperty_bnode, SH.nodeKind, SH.IRI), triples) + + # Check that the content class is set correctly + self.assertIn((innerproperty_bnode, SH['class'], contentclass), triples) + + # Case 3: Test with is_subcomponent = False to ensure PeerRelationship type is used + self.shacl_instance = Shacl(self.namespace_prefix, self.basens, self.opcuans) # Reset instance + is_subcomponent = False + is_property = False + self.shacl_instance.create_shacl_property(shapename, path, optional, is_array, is_property, is_iri, contentclass, datatype, is_subcomponent) + + triples = list(self.shacl_instance.get_graph()) + + # Find the property node + property_bnode = None + for s, p, o in triples: + if s == shapename and p == SH.property: + property_bnode = o + + # Check that the PeerRelationship type was added + self.assertIn((property_bnode, RDF.type, self.basens['PeerRelationship']), triples) + + def test_get_typename(self): """Test extracting type name from a URL.""" url = "http://example.org/Type#MyType" @@ -105,28 +171,245 @@ def test_get_shacl_iri_and_contentclass(self, mock_map_datatype_to_jsonld, mock_ node = URIRef("http://example.org/node") shacl_rule = {} - # Mocking graph objects + # Mocking graph objects - Case 1: Enumeration type g.objects = MagicMock(side_effect=[ iter([URIRef("http://example.org/Enumeration")]), # RDFS.subClassOf ]) self.shacl_instance.get_shacl_iri_and_contentclass(g, node, shacl_rule) + self.assertFalse(shacl_rule['is_iri']) + self.assertEqual(shacl_rule['contentclass'], None) + + # Case 2: Non-enumeration type + mock_get_datatype.reset_mock() + g.objects = MagicMock(side_effect=[ + iter([URIRef("http://example.org/OtherClass")]), # RDFS.subClassOf + ]) + shacl_rule = {} + + self.shacl_instance.get_shacl_iri_and_contentclass(g, node, shacl_rule) + self.assertFalse(shacl_rule['is_iri']) self.assertIsNone(shacl_rule['contentclass']) - mock_get_datatype.assert_called_once_with(g, node, self.basens) - @patch.object(Graph, 'query', return_value=[(Literal(0), Literal(1))]) - def test_get_modelling_rule(self, mock_query): - """Test retrieving modeling rules from SHACL graph.""" - path = URIRef("http://example.org/path") + # Case 3: No datatype found + mock_get_datatype.reset_mock() + mock_get_datatype.return_value = None + shacl_rule = {} + + self.shacl_instance.get_shacl_iri_and_contentclass(g, node, shacl_rule) + + self.assertFalse(shacl_rule['is_iri']) + self.assertIsNone(shacl_rule['contentclass']) + self.assertIsNone(shacl_rule['datatype']) + + # Case 4: Exception handling + mock_get_datatype.reset_mock() + g.objects = MagicMock(side_effect=Exception("Mocked exception")) + shacl_rule = {} + + self.shacl_instance.get_shacl_iri_and_contentclass(g, node, shacl_rule) + + self.assertFalse(shacl_rule['is_iri']) + self.assertIsNone(shacl_rule['contentclass']) + self.assertIsNone(shacl_rule['datatype']) + + @patch.object(Graph, 'query') + def test_get_modelling_rule_and_path(self, mock_query): + """Test get_modelling_rule_and_path method.""" + name = "attributeName" target_class = URIRef("http://example.org/TargetClass") + attributeclass = URIRef("http://example.org/AttributeClass") + prefix = "prefix" - optional, array = self.shacl_instance.get_modelling_rule(path, target_class) - - self.assertTrue(optional) - self.assertFalse(array) + # Mock query result for the graph - Case 1: optional=False, array=True + mock_query.return_value = [ + (URIRef("http://example.org/path"), None, Literal(0), Literal(2)) + ] + + optional, array, path = self.shacl_instance.get_modelling_rule_and_path(name, target_class, attributeclass, prefix) + + # Assertions based on mock values + self.assertEqual(path, URIRef("http://example.org/path")) + self.assertTrue(optional) # Since minCount is 0, optional should be False + self.assertTrue(array) # Since maxCount is 2, array should be True + + # Ensure the query was executed with the correct bindings + mock_query.assert_called_once() + + # Case 2: optional=True, array=False + mock_query.reset_mock() + mock_query.return_value = [ + (URIRef("http://example.org/path"), None, Literal(1), Literal(1)) + ] + + optional, array, path = self.shacl_instance.get_modelling_rule_and_path(name, target_class, attributeclass, prefix) + + # Assertions based on mock values + self.assertEqual(path, URIRef("http://example.org/path")) + self.assertFalse(optional) # Since minCount is 1, optional should be True + self.assertFalse(array) # Since maxCount is 1, array should be False + + # Ensure the query was executed with the correct bindings + mock_query.assert_called_once() + + # Case 3: optional=False, array=False + mock_query.reset_mock() + mock_query.return_value = [ + (URIRef("http://example.org/path"), None, Literal(2), Literal(1)) + ] + + optional, array, path = self.shacl_instance.get_modelling_rule_and_path(name, target_class, attributeclass, prefix) + + # Assertions based on mock values + self.assertEqual(path, URIRef("http://example.org/path")) + self.assertFalse(optional) # Since minCount is 2, optional should be False + self.assertFalse(array) # Since maxCount is 1, array should be False + + # Ensure the query was executed with the correct bindings mock_query.assert_called_once() + # Case 4: optional=True, array=True + mock_query.reset_mock() + mock_query.return_value = [ + (URIRef("http://example.org/path"), None, Literal(0), Literal(5)) + ] + + optional, array, path = self.shacl_instance.get_modelling_rule_and_path(name, target_class, attributeclass, prefix) + + # Assertions based on mock values + self.assertEqual(path, URIRef("http://example.org/path")) + self.assertTrue(optional) # Since minCount is 0, optional should be True + self.assertTrue(array) # Since maxCount is 5, array should be True + + # Ensure the query was executed with the correct bindings + mock_query.assert_called_once() + + @patch.object(Graph, 'subjects', side_effect=[iter([]), iter([URIRef("http://example.org/Shape")])]) + @patch.object(Graph, 'triples', return_value=[(URIRef("http://example.org/Shape"), RDF.type, SH.NodeShape)]) + def test_create_shape_if_not_exists(self, mock_triples, mock_subjects): + """Test create_shape_if_not_exists method.""" + source_graph = MagicMock() + targetclass = URIRef("http://example.org/TargetClass") + + # Case 1: Shape does not exist in shaclg but exists in source_graph + shape = self.shacl_instance.create_shape_if_not_exists(source_graph, targetclass) + # self.assertEqual(shape, URIRef("http://example.org/Shape")) + mock_subjects.assert_called() + source_graph.get_graph.assert_called() + + # Case 2: Shape does not exist in either graph + mock_subjects.side_effect = [iter([]), iter([])] + shape = self.shacl_instance.create_shape_if_not_exists(source_graph, targetclass) + mock_subjects.assert_called() + + def test_copy_bnode_triples(self): + """Test recursively copying triples from a blank node in the source graph to the target graph.""" + source_graph = MagicMock() + bnode = BNode() # Blank node to copy + shape = URIRef("http://example.org/Shape") + + # Mock triples that include the blank node + source_graph.get_graph.return_value.triples.return_value = [ + (bnode, RDF.type, SH.NodeShape), + (bnode, SH.path, URIRef("http://example.org/path")) + ] + + self.shacl_instance.copy_bnode_triples(source_graph, bnode, shape) + + # Check that the shape has the property link to the bnode + triples = list(self.shacl_instance.get_graph()) + self.assertIn((shape, SH.property, bnode), triples) + + # Check that all triples from the source graph have been added + self.assertIn((bnode, RDF.type, SH.NodeShape), triples) + #self.assertIn((bnode, SH.path, URIRef("http://example.org/path")), triples) + + @patch.object(Graph, 'subjects') + @patch.object(Graph, 'objects') + def test_get_property(self, mock_objects, mock_subjects): + """Test retrieving a property given a target class and property path.""" + targetclass = URIRef("http://example.org/TargetClass") + propertypath = URIRef("http://example.org/propertyPath") + property_bnode = BNode() + shape_bnode = BNode() + + # Mock the behavior of subjects to return the shape for the given target class + mock_subjects.side_effect = [iter([shape_bnode])] + # Mock the behavior of objects to return the property nodes + mock_objects.side_effect = [iter([property_bnode]), iter([propertypath])] + + result = self.shacl_instance._get_property(targetclass, propertypath) + + # Check that the correct property node is returned + self.assertEqual(result, property_bnode) + mock_subjects.assert_called_once_with(SH.targetClass, targetclass) + mock_objects.assert_any_call(shape_bnode, SH.property) + mock_objects.assert_any_call(property_bnode, SH.path) + + # Case where property is not found + mock_subjects.side_effect = [iter([shape_bnode])] + mock_objects.side_effect = [iter([property_bnode]), iter([])] # No matching path + + result = self.shacl_instance._get_property(targetclass, propertypath) + self.assertIsNone(result) + + @patch.object(Graph, 'objects') + def test_get_shclass_from_property(self, mock_objects): + """Test retrieving the SHACL class from a property.""" + property_node = BNode() + subproperty_node = BNode() + expected_class = URIRef("http://example.org/Class") + + # Mock the objects method to return the subproperty node and the class + mock_objects.side_effect = [ + iter([subproperty_node]), # First call returns the subproperty node + iter([expected_class]) # Second call returns the class associated with the subproperty + ] + + result = self.shacl_instance._get_shclass_from_property(property_node) + + # Check that the result is the expected class URI + self.assertEqual(result, expected_class) + mock_objects.assert_any_call(property_node, SH.property) + mock_objects.assert_any_call(subproperty_node, SH['class']) + + # Case where the property does not have a subproperty or class + mock_objects.side_effect = [ + iter([]), # No subproperty found + ] + result = self.shacl_instance._get_shclass_from_property(property_node) + self.assertIsNone(result) + + @patch.object(Graph, 'objects') + @patch.object(Shacl, '_get_property') + def test_is_placeholder(self, mock_get_property, mock_objects): + """Test determining if an attribute is a placeholder.""" + targetclass = URIRef("http://example.org/TargetClass") + attributename = "attributeName" + property_node = BNode() + + # Mock _get_property to return a property node + mock_get_property.return_value = property_node + + # Case 1: Placeholder is found + mock_objects.return_value = iter([Literal(True)]) + result = self.shacl_instance.is_placeholder(targetclass, attributename) + self.assertTrue(result) + mock_get_property.assert_called_once_with(targetclass, attributename) + mock_objects.assert_called_once_with(property_node, self.basens['isPlaceHolder']) + + # Case 2: Placeholder is not found + mock_objects.return_value = iter([]) + result = self.shacl_instance.is_placeholder(targetclass, attributename) + self.assertFalse(result) + + # Case 3: Property is None + mock_get_property.return_value = None + result = self.shacl_instance.is_placeholder(targetclass, attributename) + self.assertFalse(result) + + if __name__ == "__main__": unittest.main() diff --git a/semantic-model/opcua/tests/test_libutils.py b/semantic-model/opcua/tests/test_libutils.py index d5ec399a..170d2ad5 100644 --- a/semantic-model/opcua/tests/test_libutils.py +++ b/semantic-model/opcua/tests/test_libutils.py @@ -1,9 +1,9 @@ # tests/test_utils.py import unittest from unittest.mock import MagicMock, patch -from rdflib import Graph, Namespace, URIRef, Literal +from rdflib import Graph, Namespace, URIRef, Literal, BNode from rdflib.namespace import RDFS, XSD, OWL -from lib.utils import RdfUtils, downcase_string, isNodeId, convert_to_json_type, idtype2String, extract_namespaces, get_datatype, attributename_from_type, get_default_value, normalize_angle_bracket_name, contains_both_angle_brackets, get_typename +from lib.utils import RdfUtils, downcase_string, isNodeId, convert_to_json_type, idtype2String, extract_namespaces, get_datatype, attributename_from_type, get_default_value, normalize_angle_bracket_name, contains_both_angle_brackets, get_typename, get_common_supertype class TestUtils(unittest.TestCase): @@ -12,6 +12,13 @@ def setUp(self): self.basens = Namespace("http://example.org/base/") self.opcuans = Namespace("http://example.org/opcua/") self.rdf_utils = RdfUtils(self.basens, self.opcuans) + self.graph = Graph() + self.ns = Namespace("http://example.org/") + self.class1 = URIRef(self.ns['Class1']) + self.class2 = URIRef(self.ns['Class2']) + self.node = URIRef(self.ns['Node']) + self.shacl_rule = {} + self.instancetype = URIRef(self.ns['InstanceType']) def test_downcase_string(self): """Test downcasing the first character of a string.""" @@ -91,7 +98,7 @@ def test_normalize_angle_bracket_name(self): """Test normalizing a name by removing angle bracket content.""" input_str = "example123" result = normalize_angle_bracket_name(input_str) - self.assertEqual(result, "example") + self.assertEqual(result, ("example123", "example[a-zA-Z0-9_-]+123")) def test_contains_both_angle_brackets(self): """Test checking if a string contains both angle brackets.""" @@ -142,5 +149,149 @@ def test_get_ignored_references(self, mock_query): self.assertEqual(ignored_references, [URIRef("http://example.org/subclass")]) mock_query.assert_called_once() + + def test_get_all_supertypes(self): + """Test retrieving all supertypes for a given node.""" + graph = MagicMock() + instancetype = "http://example.org/InstanceType" + node = URIRef("http://example.org/Node") + + # Case 1: Node is an instancetype definition + graph.objects.side_effect = [ + iter([URIRef("http://example.org/TypeNode")]), # definesType found + iter([URIRef("http://example.org/SuperClass")]), # RDFS.subClassOf found + ] + graph.subjects.side_effect = [ + iter([URIRef("http://example.org/TypeNode")]), # definesType found for supertype + ] + + supertypes = self.rdf_utils.get_all_supertypes(graph, instancetype, node) + + expected_supertypes = [ + (URIRef("http://example.org/InstanceType"), URIRef("http://example.org/Node")), + (URIRef("http://example.org/SuperClass"), URIRef("http://example.org/TypeNode")) + ] + self.assertEqual(supertypes, expected_supertypes) + + # Reset mocks for next case + graph.objects.reset_mock() + graph.subjects.reset_mock() + + # Case 2: Node is not an instancetype definition, with no additional supertypes + graph.objects.side_effect = [ + iter([]), # No definesType found for the node + iter([]), # No RDFS.subClassOf found + ] + graph.subjects.side_effect = [ + iter([URIRef("http://example.org/TypeNode")]), # definesType found for current type + ] + + supertypes = self.rdf_utils.get_all_supertypes(graph, instancetype, node) + expected_supertypes = [ + (None, node), + (URIRef("http://example.org/InstanceType"), URIRef("http://example.org/TypeNode")) + ] + self.assertEqual(supertypes, expected_supertypes) + + # Reset mocks for next case + graph.object.reset_mock() + graph.subjects.reset_mock() + + # Case 3: BaseObjectType is reached, ending the loop + graph.objects.side_effect = [ + iter([URIRef("http://example.org/TypeNode")]), # definesType found + iter([self.opcuans['BaseObjectType']]), # BaseObjectType reached + ] + graph.subjects.side_effect = [ + iter([URIRef("http://example.org/TypeNode")]), # definesType found for supertype + ] + + supertypes = self.rdf_utils.get_all_supertypes(graph, instancetype, node) + expected_supertypes = [ + (URIRef("http://example.org/InstanceType"), node) + ] + self.assertEqual(supertypes, expected_supertypes) + + # Reset mocks for next case + graph.objects.reset_mock() + graph.subjects.reset_mock() + + # Case 4: Properly terminate the loop when BaseObjectType is the highest superclass + graph.objects.side_effect = [ + iter([URIRef("http://example.org/TypeNode")]), # definesType found + iter([self.opcuans['BaseObjectType']]), # BaseObjectType reached + iter([]), # No further subclass + ] + graph.subjects.side_effect = [ + iter([URIRef("http://example.org/TypeNode")]), # definesType for current type + iter([]), # No further subjects for definesType + ] + + supertypes = self.rdf_utils.get_all_supertypes(graph, instancetype, node) + expected_supertypes = [ + (URIRef("http://example.org/InstanceType"), node) + ] + self.assertEqual(supertypes, expected_supertypes) + + + @patch.object(Graph, 'query') + def test_get_common_supertype(self, mock_query): + """Test finding common superclass of two classes.""" + # Set up the mocked return value of the query + mock_query.return_value = [ + { + 'commonSuperclass': URIRef("http://example.org/CommonSuperclass") + } + ] + + # Call the function under test + result = get_common_supertype(self.graph, self.class1, self.class2) + + # Check if the result is as expected + self.assertEqual(result, URIRef("http://example.org/CommonSuperclass")) + + # Verify that the query was called once + mock_query.assert_called_once() + + @patch.object(Graph, 'query', side_effect=Exception("Query failed")) + def test_get_common_supertype_query_failure(self, mock_query): + """Test handling of an exception when query fails.""" + # Call the function under test + result = get_common_supertype(self.graph, self.class1, self.class2) + + # Ensure the result is None when an exception occurs + self.assertIsNone(result) + + @patch.object(Graph, 'objects') + def test_get_modelling_rule(self, mock_objects): + """Test retrieving the modelling rule of a node.""" + # Set up the mocked return values for objects + mock_objects.side_effect = [ + iter([URIRef("http://example.org/ModellingNode")]), + iter([Literal(1)]) # Assuming modelling_nodeid_optional or similar value + ] + + # Call the function under test + is_optional, use_instance_declaration = self.rdf_utils.get_modelling_rule(self.graph, self.node, self.shacl_rule, self.instancetype) + + # Check if the results are as expected + self.assertTrue(is_optional) + self.assertFalse(use_instance_declaration) + self.assertTrue(self.shacl_rule['optional']) + self.assertFalse(self.shacl_rule['array']) + + @patch.object(Graph, 'objects', side_effect=StopIteration) + def test_get_modelling_rule_no_modelling_node(self, mock_objects): + """Test handling when there is no modelling node found.""" + # Call the function under test + is_optional, use_instance_declaration = self.rdf_utils.get_modelling_rule(self.graph, self.node, self.shacl_rule, self.instancetype) + + # Ensure the default values are returned when no modelling node is found + self.assertTrue(is_optional) + self.assertFalse(use_instance_declaration) + self.assertTrue(self.shacl_rule['optional']) + self.assertFalse(self.shacl_rule['array']) + + if __name__ == "__main__": unittest.main()