@prefix sh:    <http://www.w3.org/ns/shacl#> .
@prefix shape: <https://data.cogito.iot.linkeddata.es/resources/shape/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xml:   <http://www.w3.org/XML/1998/namespace> .
@prefix afn:   <http://jena.apache.org/ARQ/function#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix facility: <https://cogito.iot.linkeddata.es/def/facility#> .
@prefix process: <https://cogito.iot.linkeddata.es/def/process#> .
@prefix resource: <https://cogito.iot.linkeddata.es/def/resource#> .
@prefix qual: <https://cogito.iot.linkeddata.es/def/quality#> .
@prefix iot: <https://cogito.iot.linkeddata.es/def/iot#> .
@prefix platform: <https://cogito.iot.linkeddata.es/def/platform#> .
@prefix time: <http://www.w3.org/2006/time#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix beo:   <https://pi.pauwel.be/voc/buildingelement#> .
@prefix bot:   <https://w3id.org/bot#> .
@prefix props: <https://w3id.org/props#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .


shape:Task
    a               sh:NodeShape ;
    rdfs:label      "Task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "Task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:title , shape:created , shape:duration , shape:plannedStartDate , shape:plannedEndDate , shape:workQuantity , shape:workQuantityUnit , shape:hasSubTask , shape:isSubTaskOf , shape:belongsToProcess, shape:addsElement, shape:relatesToInformationResource, shape:progress, shape:hasAssignedResource , shape:hasMainProvider, shape:controlsElement ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:targetClass  process:Task .

shape:GeometricQualityTask
    a               sh:NodeShape ;
    rdfs:label      "geometric quality task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "geometric quality task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:title , shape:created , shape:duration , shape:plannedStartDate , shape:plannedEndDate , shape:workQuantity , shape:workQuantityUnit , shape:hasSubTask , shape:isSubTaskOf , shape:belongsToProcess ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:targetClass  process:GeometricQualityTask .

shape:VisualQualityTask
    a               sh:NodeShape ;
    rdfs:label      "visual quality task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "visual quality task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:title , shape:created , shape:duration , shape:plannedStartDate , shape:plannedEndDate , shape:workQuantity , shape:workQuantityUnit , shape:hasSubTask , shape:isSubTaskOf , shape:belongsToProcess ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:targetClass  process:VisualQualityTask .

shape:SafetyAddingTask
    a               sh:NodeShape ;
    rdfs:label      "safety adding task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "safety adding task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:title , shape:created , shape:duration , shape:plannedStartDate , shape:plannedEndDate , shape:workQuantity , shape:workQuantityUnit , shape:hasSubTask , shape:isSubTaskOf , shape:belongsToProcess ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:targetClass  process:SafetyAddingTask .

shape:SafetyRemovingTask
    a               sh:NodeShape ;
    rdfs:label      "safety removing task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "safety removing task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:title , shape:created , shape:duration , shape:plannedStartDate , shape:plannedEndDate , shape:workQuantity , shape:workQuantityUnit , shape:hasSubTask , shape:isSubTaskOf , shape:belongsToProcess ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:targetClass  process:SafetyRemovingTask .


shape:ConstructionTask
    a               sh:NodeShape ;
    rdfs:label      "construction task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "construction task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:title , shape:created , shape:duration , shape:plannedStartDate , shape:plannedEndDate , shape:workQuantity , shape:workQuantityUnit , shape:hasSubTask , shape:isSubTaskOf , shape:belongsToProcess ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:targetClass  process:ConstructionTask .


shape:belongsToProcess
    a               sh:PropertyShape ;
    rdfs:label      "belongs to process" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        process:Process;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:AsPlannedOriginalProcess;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/asPlanned/original/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:AsPlannedEnrichedProcess;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/asPlanned/enriched/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:AsIsProcess;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/asIs/" ;
        ] ) ;
    sh:description  "A property that relates an entity (especially a process:Task) to the process:Process it belongs to" ;
    sh:name         "belongs to process" ;
    sh:nodeKind     sh:IRI ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/" ;
    sh:path         process:belongsToProcess .

shape:hasSubTask
    a               sh:PropertyShape ;
    rdfs:label      "has sub task" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        process:Task;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:GeometricQualityTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:VisualQualityTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:SafetyAddingTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:SafetyRemovingTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:ConstructionTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ] ) ;
    sh:description  "A property that relates an entity (especially a process:Task) to the tasks it includes" ;
    sh:name         "has sub task" ;
    sh:nodeKind     sh:IRI ;
    sh:path         process:hasSubTask .

shape:isSubTaskOf
    a               sh:PropertyShape ;
    rdfs:label      "is sub task of" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        process:Task;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:GeometricQualityTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:VisualQualityTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:SafetyAddingTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:SafetyRemovingTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:ConstructionTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ] ) ;
    sh:description  "A property that relates an entity (especially a process:Task) to the task it belongs to" ;
    sh:name         "is sub task of" ;
    sh:nodeKind     sh:IRI ;
    sh:path         process:isSubTaskOf .

shape:workQuantityUnit
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "work quantity unit" ;
    sh:name           "work quantity unit" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           process:workQuantityUnit .

shape:workQuantity
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "work quantity" ;
    sh:name           "work quantity" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:integer ;
    sh:path           process:workQuantity .

shape:plannedEndDate
    a               sh:PropertyShape ;
    rdfs:label      "planned end date" ;
    sh:datatype     xsd:dateTime ;
    sh:description  "A property indicating the planned end date of an entity" ;
    sh:name         "planned end date" ;
    sh:nodeKind     sh:Literal ;
    # sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:path         process:plannedEndDate ;
    sh:pattern      "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?" .

shape:plannedStartDate
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  process: ;
    rdfs:label        "planned start date" ;
    sh:name           "planned start date" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:dateTime ;
    sh:path           process:plannedStartDate ;
    sh:lessThan       process:plannedEndDate ;
    sh:pattern        "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?" .

shape:duration
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "duration" ;
    sh:name           "duration" ;
    #sh:minCount       1 ;
    # sh:maxCount       1 ;
    # sh:datatype       xsd:integer ;
    sh:path           process:duration .

shape:created
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "created" ;
    sh:name           "created" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:dateTime ;
    sh:path           dcterms:created .

shape:identifier
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "identifier" ;
    sh:name           "identifier" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           dcterms:identifier .

shape:title
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "title" ;
    sh:name           "title" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           dcterms:title .

shape:Process
    a               sh:NodeShape ;
    rdfs:label      "Process" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "Process" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:title , shape:creator , shape:hasTask ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/" ;
    sh:targetClass  process:Process .

shape:AsPlannedOriginalProcess
    a               sh:NodeShape ;
    rdfs:label      "as planned original process" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "as planned original process" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:title , shape:creator , shape:hasTask ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/asPlanned/original/" ;
    sh:targetClass  process:AsPlannedOriginalProcess .

shape:AsPlannedEnrichedProcess
    a               sh:NodeShape ;
    rdfs:label      "as planned enriched process" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "as planned enriched process" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:title , shape:creator , shape:hasTask ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/asPlanned/enriched/" ;
    sh:targetClass  process:AsPlannedEnrichedProcess .

shape:AsIsProcess
    a               sh:NodeShape ;
    rdfs:label      "as is process" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "as is process" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:title , shape:creator , shape:hasTask ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/process/asIs/" ;
    sh:targetClass  process:AsIsProcess .


shape:hasTask
    a               sh:PropertyShape ;
    rdfs:label      "has task" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        process:Task;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:GeometricQualityTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:VisualQualityTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:SafetyAddingTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:SafetyRemovingTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        process:ConstructionTask;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
        ] ) ;
    sh:description  "A property that relates an entity (especially a process:Task) to the task it belongs to" ;
    sh:name         "has task" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    sh:path         process:hasTask .

shape:creator
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "creator" ;
    sh:name           "creator" ;
    sh:nodeKind       sh:Literal ;
    sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           dcterms:creator .

shape:Element
    a               sh:NodeShape ;
    rdfs:label      "Element" ;
    sh:description  "A subclass or bot:Element and, as such, a constituent of a construction entity with a characteristic technical function, form, or position" ;
    sh:name         "Element" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isAddedByTask, shape:identifier, shape:title , shape:belongsToSpatialZone, shape:hasInformationResource , shape:refersToGeometricQualityInf, shape:isControlledByTask;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/element/" ;
    sh:targetClass  facility:Element .

shape:belongsToSpatialZone
    a               sh:PropertyShape ;
    rdfs:label      "belongs to spatial zone" ;
    sh:description  "A property relating an entity, especially a facility:Element to a facility:SpatialZone" ;
    sh:name         "belongs to spatial zone" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    # sh:maxCount     1 ;
    sh:path         facility:belongsToSpatialZone .


shape:isAddedByTask
    a               sh:PropertyShape ;
    rdfs:label      "is added by task" ;
    sh:class        process:Task ;
    sh:description  "A property that relates an entity (especially a  facility:Element)  to the process:Task  that adds it" ;
    sh:name         "is added by task" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:path         process:isAddedByTask .

shape:addsElement
    a               sh:PropertyShape ;
    rdfs:label      "adds element" ;
    sh:class        facility:Element ;
    sh:description  "A property that relates an entity (especially a process:Task) to the facility:Element it creates" ;
    sh:name         "adds element" ;
    sh:nodeKind     sh:IRI ;
    # sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/element/" ;
    sh:path         process:addsElement .


shape:SpatialZone
    a               sh:NodeShape ;
    rdfs:label      "Spatial Zone" ;
    sh:description  "A subclass of bot:Zone and, as such, a part of the physical or a virtual world that is inherently both located in this world and has a 3D spatial extent." ;
    sh:name         "Spatial Zone" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isRelatedToSpatialZone , shape:hasElement, shape:identifier, shape:title ;
    sh:targetClass  facility:SpatialZone .

shape:isRelatedToSpatialZone
    a               sh:PropertyShape ;
    rdfs:label      "is related to spatial zone" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        facility:Site;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/site/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        facility:SpatialZone;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/spatialZone/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        facility:Storey;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/buildingStorey/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        facility:Space;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/space/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        facility:Facility;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/facility/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        facility:FacilityPart;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/facilityPart/" ;
        ] ) ;
    sh:description      "A property relating an entity (especially a facility:SpatialZone) to a facility:SpatialZone" ;
    sh:name             "is related to spatial zone" ;
    sh:nodeKind         sh:IRI ;
    #sh:minCount         1 ;
    sh:maxCount         1 ;
    sh:path             facility:isRelatedToSpatialZone .


shape:hasElement 
    a               sh:PropertyShape ;
    rdfs:label      "has element" ;
    sh:class        facility:Element ;
    sh:description  "Links a Zone to an Element that is either contained in, adjacent to or intersecting with the Zone. The intended use of this relationship is not to be stated explicitly, but to be inferred from its sub-properties. It will, for example, allow one to query for all the doors of a building given that they have an adjacency to spaces of the building." ;
    sh:name         "has element" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/element/" ;
    sh:path         bot:hasElement .


shape:Building
    a               sh:NodeShape ;
    rdfs:label      "Building" ;
    sh:description  "An independent unit of the built environment with a characteristic spatial structure, intended to serve at least one function or user activity [ISO-12006]" ;
    sh:name         "Building" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:hasStorey , shape:isRelatedToSpatialZone , shape:identifier, shape:title ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/building/" ;
    sh:targetClass  facility:Building .


shape:hasStorey
    a               sh:PropertyShape ;
    rdfs:label      "has storey" ;
    sh:class        facility:Storey ;
    sh:description  "Relation to storeys contained in a zone. The typical domains of bot:hasStorey are instances of bot:Building." ;
    sh:name         "has storey" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/buildingStorey/" ;
    sh:path         bot:hasStorey .



shape:Storey
    a               sh:PropertyShape ;
    rdfs:label      "Storey" ;
    sh:description  "A subclass of bot:Storey and, as such, is contained (bot:hasStorey) in one facility:Building, and is intended to contain (bot:hasSpace) one or more facility:Space that are horizontally connected." ;
    sh:name         "Storey" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isRelatedToSpatialZone , shape:identifier, shape:title ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/buildingStorey/" ;
    sh:targetClass  facility:Storey .

shape:Site
    a               sh:PropertyShape ;
    rdfs:label      "Site" ;
    sh:description  "A part of the physical world or a virtual world that is inherently both located in this world and having a 3D spatial extent" ;
    sh:name         "Site" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isRelatedToSpatialZone , shape:identifier, shape:title ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/site/" ;
    sh:targetClass  facility:Site .


shape:Facility
    a               sh:PropertyShape ;
    rdfs:label      "Facility" ;
    sh:description  "Something designed and built to serve a specific function providing a convenience or a service." ;
    sh:name         "Facility" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isRelatedToSpatialZone , shape:identifier, shape:title ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/facility/" ;
    sh:targetClass  facility:Facility .

shape:Project
    a               sh:NodeShape ;
    rdfs:label      "Project" ;
    sh:description  "A large or major undertaking, especially one involving considerable money, personnel, and equipment" ;
    sh:name         "Project" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:hasFileURL ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/project/" ;
    sh:targetClass  facility:Project .

shape:hasFileURL
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  platform: ;
    rdfs:label        "has file url" ;
    sh:name           "has file url" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount     1 ;
    # sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           platform:hasFileURL .

shape:relatesToInformationResource
    a               sh:PropertyShape ;
    rdfs:label      "relates to information resource" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        qual:Mesh;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/mesh/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:AsBuiltMesh;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/asBuiltMesh/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:PointCloud;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/pointCloud/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:Image;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/image/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:RawImage;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/rawImage/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:ImageJob;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/imageJob/" ;
        ] ) ;
    sh:description  "" ;
    sh:name         "relates to information resource" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:path         qual:relatesToInformationResource .

shape:hasInformationResource
    a               sh:PropertyShape ;
    rdfs:label      "has information resource" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        qual:Mesh;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/mesh/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:AsBuiltMesh;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/asBuiltMesh/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:PointCloud;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/pointCloud/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:Image;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/image/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:RawImage;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/rawImage/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:ImageJob;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/imageJob/" ;
        ] ) ;
    sh:description  "Property that relates an entity (especially a facility:Element) to a qual:InformationResource" ;
    sh:name         "has information resource" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:path         qual:hasInformationResource .

shape:RawImage
    a               sh:NodeShape ;
    rdfs:label      "RawImage" ;
    sh:description  "An image that has not been processed" ;
    sh:name         "RawImage" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isRelatedToJob , shape:hasFileFormat , shape:hasFileURL , shape:captureDevice , shape:deviceOrientation , shape:devicePosition ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/rawImage/" ;
    sh:targetClass  qual:RawImage .

shape:performedTimestamp
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "performed timestamp" ;
    sh:name           "performed timestamp" ;
    sh:nodeKind       sh:Literal ;
    # sh:datatype       xsd:string ;
    sh:path           qual:performedTimestamp .

shape:devicePosition
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "device position" ;
    sh:name           "device position" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:devicePosition .

shape:deviceOrientation
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "device orientation" ;
    sh:name           "device orientation" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:deviceOrientation .

shape:captureDevice
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "capture device" ;
    sh:name           "capture device" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:captureDevice .

shape:isRelatedToJob 
    a               sh:PropertyShape ;
    rdfs:label      "is related to job" ;
    sh:class        qual:ImageJob ;
    sh:description  "" ;
    sh:name         "is related to job" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/imageJob/" ;
    sh:path         qual:isRelatedToJob .

shape:hasFileFormat
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  platform: ;
    rdfs:label        "has file format" ;
    sh:name           "has file format" ;
    sh:nodeKind       sh:Literal ;
    sh:datatype       xsd:string ;
    sh:path           platform:hasFileFormat .

shape:ImageJob
    a               sh:NodeShape ;
    rdfs:label      "ImageJob" ;
    sh:description  "An image that has not been processed" ;
    sh:name         "ImageJob" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:hasProcessedImage , shape:hasRawImage , shape:isRelatedToElement , shape:isRelatedToTask ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/imageJob/" ;
    sh:targetClass  qual:ImageJob .


shape:isRelatedToTask 
    a               sh:PropertyShape ;
    rdfs:label      "is related to task" ;
    sh:class        process:Task ;
    sh:description  "Property that relates an entity (especially qual:QualityInformation) to a process:Task" ;
    sh:name         "is related to task" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:path         qual:isRelatedToTask .


shape:isRelatedToElement 
    a               sh:PropertyShape ;
    rdfs:label      "is related to element" ;
    sh:class        facility:Element ;
    sh:description  "Property that relates an entity (especially qual:InformationResource) to a facility:Element" ;
    sh:name         "is related to element" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/element/" ;
    sh:path         qual:isRelatedToElement .

shape:hasRawImage 
    a               sh:PropertyShape ;
    rdfs:label      "has raw image" ;
    sh:class        qual:RawImage ;
    sh:description  "Property that relates an entity (especially qual:ImageJob to an original qual:Image" ;
    sh:name         "has raw image" ;
    sh:nodeKind     sh:IRI ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/rawImage/" ;
    sh:path         qual:hasRawImage .

shape:hasProcessedImage 
    a               sh:PropertyShape ;
    rdfs:label      "has processed image" ;
    sh:class        qual:Image ;
    sh:description  "Property that relates an entity (especially qual:ImageJob to a processed qual:Image" ;
    sh:name         "has processed image" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/image/" ;
    sh:path         qual:hasProcessedImage .


shape:Image
    a               sh:NodeShape ;
    rdfs:label      "Image" ;
    sh:description  "A picture of an entity" ;
    sh:name         "Image" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isRelatedToJob , shape:hasFileFormat , shape:hasFileURL ;
    sh:targetClass  qual:Image .

shape:progress
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "progress" ;
    sh:name           "progress" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    # sh:maxCount       1 ;
    sh:datatype       xsd:double ;
    sh:path           process:progress .

shape:GeometricQualityInf
    a               sh:NodeShape ;
    rdfs:label      "Task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "Task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:result , shape:scalarResult , shape:status , shape:performedTimestamp , shape:toleranceReference , shape:unit, shape:identifier , shape:refersToElement , shape:refersToRule , shape:scheduledTimestamp ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/gqc/" ;
    sh:targetClass  qual:GeometricQualityInf .

shape:unit
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "unit" ;
    sh:name           "unit" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:unit .


shape:toleranceReference
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "tolerance reference" ;
    sh:name           "tolerance reference" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    # sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:toleranceReference .


shape:status
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "status" ;
    sh:name           "status" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:status .

shape:scalarResult
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "scalar result" ;
    sh:name           "scalar result" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    # sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:scalarResult .

shape:result
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "result" ;
    sh:name           "result" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    # sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:result .

shape:scheduledTimestamp
    a               sh:PropertyShape ;
    rdfs:label      "scheduled timestamp" ;
    sh:datatype     xsd:string ;
    sh:description  "Property indicating the scheduled time" ;
    sh:nodeKind     sh:Literal ;
    # sh:minCount     1 ;
    # sh:maxCount     1 ;
    sh:path         qual:scheduledTimestamp ;
    sh:pattern      "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?" .

shape:refersToRule
    a               sh:PropertyShape ;
    rdfs:label      "refers to rule" ;
    sh:class        qual:Rule ;
    sh:description  "Property that relates an entity (especially qual:Defect) to a qual:Rule" ;
    sh:name         "refers to rule" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/rule/" ;
    sh:path         qual:refersToRule .

shape:refersToElement
    a               sh:PropertyShape ;
    rdfs:label      "refers to element" ;
    sh:class        facility:Element ;
    sh:description  "Property that relates an entity (especially qual:QualityResult) to a facility:Element" ;
    sh:name         "refers to element" ;
    sh:nodeKind     sh:IRI ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/element/" ;
    sh:path         qual:refersToElement .

shape:refersToGeometricQualityInf
    a               sh:PropertyShape ;
    rdfs:label      "refers to qc instances" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        qual:QualityResult;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/qc/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:GeometricQualityInf;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/gqc/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        qual:Defect;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/defect/" ;
        ]) ;
    sh:description  "" ;
    sh:name         "refers to qc instances" ;
    sh:nodeKind     sh:IRI ;
    sh:path         qual:refersToGeometricQualityInf .

shape:ResourceType
    a               sh:NodeShape ;
    rdfs:label      "resource type requirement" ;
    sh:description  "An entity that includes the requitrments that a task has pertaining a resource type" ;
    sh:name         "resource type requirement" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:hasCostPerHour  , shape:identifier , shape:title , shape:maxUnit ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/resourceType/" ;
    sh:targetClass  resource:ResourceType .

shape:hasCostPerHour
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "has cost per hour" ;
    sh:name           "has cost per hour" ;
    sh:nodeKind       sh:Literal ;
    # sh:minCount       1 ;
    # sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           resource:hasCostPerHour .

shape:maxUnit
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  dcterms: ;
    rdfs:label        "max unit" ;
    sh:name           "max unit" ;
    sh:nodeKind       sh:Literal ;
    sh:minCount       1 ;
    sh:maxCount       1 ;
    sh:datatype       xsd:decimal ;
    sh:path           resource:maxUnit .



shape:Rule
    a               sh:NodeShape ;
    rdfs:label      "Task" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "Task" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:title , shape:elementTypeKeywords , shape:materialTypeKeywords , shape:originDocument , shape:relationshipTypeKeywords ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/rule/" ;
    sh:targetClass  qual:Rule .

shape:originDocument
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "origin document" ;
    sh:name           "origin document" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount       1 ;
    # sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:originDocument .


shape:relationshipTypeKeywords
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "relationship type keywords" ;
    sh:name           "relationship type keywords" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount       1 ;
    #sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:relationshipTypeKeywords .

shape:materialTypeKeywords
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "material type keywords" ;
    sh:name           "material type keywords" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount       1 ;
    #sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:materialTypeKeywords .

shape:elementTypeKeywords
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "element type keywords" ;
    sh:name           "element type keywords" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount       1 ;
    #sh:maxCount       1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:elementTypeKeywords .


shape:HumanTrackingTag
    a               sh:NodeShape ;
    rdfs:label      "Tracking Tag" ;
    sh:description  "A subclass of saref:Device and, as such, a tangible object designed to accomplish a particular task; in this case signalling its location" ;
    sh:name         "Tracking Tag" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:belongsToTagGroup ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tag/" ;
    sh:targetClass  iot:HumanTrackingTag .

shape:EquipmentTrackingTag
    a               sh:NodeShape ;
    rdfs:label      "Tracking Tag" ;
    sh:description  "A subclass of saref:Device and, as such, a tangible object designed to accomplish a particular task; in this case signalling its location" ;
    sh:name         "Tracking Tag" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:identifier , shape:belongsToTagGroup ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tag/" ;
    sh:targetClass  iot:EquipmentTrackingTag .

shape:belongsToTagGroup
    a               sh:PropertyShape ;
    rdfs:label      "belongs To Tag Group" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        iot:HumanTrackingTagGroup;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tagGroup/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        iot:EquipmentTrackingTagGroup;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tagGroup/" ;
        ] ) ;
    sh:description  "Property relating an entity (especially an iot:TrackingTag) to an iot:TrackingTag" ;
    sh:name         "belongs To Tag Group" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tagGroup/" ;
    sh:path         iot:belongsToTagGroup .

shape:HumanTrackingTagGroup
    a               sh:NodeShape ;
    rdfs:label      "Tracking Tag Group" ;
    sh:description  "An entity used to group tracking tags" ;
    sh:name         "Tracking Tag" ;
    sh:nodeKinåd     sh:IRI ;
    sh:property     shape:identifier, shape:title , shape:hasTrackingTag ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tagGroup/" ;
    sh:targetClass  iot:HumanTrackingTagGroup .

shape:EquipmentTrackingTagGroup
    a               sh:NodeShape ;
    rdfs:label      "Tracking Tag Group" ;
    sh:description  "An entity used to group tracking tags" ;
    sh:name         "Tracking Tag" ;
    sh:nodeKinåd     sh:IRI ;
    sh:property     shape:identifier, shape:title , shape:hasTrackingTag ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tagGroup/" ;
    sh:targetClass  iot:EquipmentTrackingTagGroup .

shape:hasTrackingTag
    a               sh:PropertyShape ;
    rdfs:label      "has Tracking Tag" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        iot:HumanTrackingTag;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tag/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        iot:EquipmentTrackingTag;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tag/" ;
        ] ) ;
    sh:description  "" ;
    sh:name         "has Tracking Tag" ;
    sh:nodeKind     sh:IRI ;
    # sh:minCount     1 ;
    #sh:maxCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/tag/" ;
    sh:path         iot:hasTrackingTag .

shape:Equipment
    a               sh:NodeShape ;
    rdfs:label      "Equipment" ;
    sh:description  "A subclass of resource:Resource used to assist in the performance of an activity (especially a process:Task)" ;
    sh:name         "Equipment" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:title , shape:status, shape:belongsToType, shape:hasTrackingTag ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/equipment/" ;
    sh:targetClass  resource:Equipment .

shape:Worker
    a               sh:NodeShape ;
    rdfs:label      "Worker" ;
    sh:description  "A subclass of resource:Resource used to assist in the performance of an activity (especially a process:Task)" ;
    sh:name         "Worker" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:email , shape:firstName, shape:lastName, shape:belongsToType, shape:hasTrackingTag ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/human/" ;
    sh:targetClass  resource:Worker .

shape:email
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  resource: ;
    rdfs:label        "email" ;
    sh:name           "email" ;
    sh:nodeKind       sh:Literal ;
    sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           resource:email .

shape:firstName
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  resource: ;
    rdfs:label        "first Name" ;
    sh:name           "first Name" ;
    sh:nodeKind       sh:Literal ;
    sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           resource:firstName .

shape:lastName
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  resource: ;
    rdfs:label        "last Name" ;
    sh:name           "last Name" ;
    sh:nodeKind       sh:Literal ;
    sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           resource:lastName .

shape:belongsToType
    a               sh:PropertyShape ;
    rdfs:label      "belongs to Type" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        resource:EquipmentType;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/equipment_type/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        resource:WorkerRole;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/worker_role/" ;
        ] ) ;
    sh:description  "" ;
    sh:name         "belongs to Type" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    #sh:maxCount     1 ;
    sh:path         resource:belongsToType .

shape:hasAssignedResource
    a               sh:PropertyShape ;
    rdfs:label      "has Assigned Resource" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        resource:Equipment;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/equipment/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        resource:Worker;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/human/" ;
        ] ) ;
    sh:description  "A property that relates an entity (especially a process:Task) to the resource:Resource it has assigned" ;
    sh:name         "has Assigned Resource" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    #sh:maxCount     1 ;
    sh:path         resource:hasAssignedResource .

shape:hasMainProvider
    a               sh:PropertyShape ;
    rdfs:label      "has Main Provider" ;
    sh:or
      ( [   a               sh:PropertyShape;
            sh:class        resource:Equipment;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/equipment/" ;
        ]
        [   a               sh:PropertyShape;
            sh:class        resource:Worker;
            sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/human/" ;
        ] ) ;
    sh:description  "A property that relates an entity (especially a process:WorkOrder) to the resource:Worker that acts as its main provider" ;
    sh:name         "has Main Provider" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    #sh:maxCount     1 ;
    sh:path         process:hasMainProvider .

shape:WorkOrder
    a               sh:NodeShape ;
    rdfs:label      "Work Order" ;
    sh:description  "A piece of work, which is performed in a process:Process" ;
    sh:name         "Work Order" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:hasComponentTask , shape:hasMainProvider, shape:plannedEndDate, shape:plannedStartDate  ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/workOrder/" ;
    sh:targetClass  process:WorkOrder .

shape:hasComponentTask
    a               sh:PropertyShape ;
    rdfs:label      "has Component Task" ;
    sh:description  "A property that relates an entity (especially a process:WorkOrder) to its tasks" ;
    sh:name         "has Component Task" ;
    sh:nodeKind     sh:IRI ;
    sh:minCount     1 ;
    #sh:maxCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:path         process:hasComponentTask .

shape:PointCloud
    a               sh:NodeShape ;
    rdfs:label      "PointCloud" ;
    sh:description  "A set of data points in space" ;
    sh:name         "PointCloud" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:isRelatedToTask , shape:hasFileFormat , shape:hasFileURL, shape:takenAtTime ;
    sh:targetClass  qual:PointCloud .


shape:takenAtTime
    a                 sh:PropertyShape ;
    rdfs:isDefinedBy  qual: ;
    rdfs:label        "taken at time" ;
    sh:name           "taken at time" ;
    sh:nodeKind       sh:Literal ;
    #sh:minCount     1 ;
    sh:maxCount     1 ;
    sh:datatype       xsd:string ;
    sh:path           qual:takenAtTime .

shape:controlsElement
    a               sh:PropertyShape ;
    rdfs:label      "controls element" ;
    sh:class        facility:Element ;
    sh:description  "A property that relates an entity (especially a process:Task) to the facility:Element it creates" ;
    sh:name         "controls element" ;
    sh:nodeKind     sh:IRI ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/element/" ;
    sh:path         process:addsElement .

shape:isControlledByTask
    a               sh:PropertyShape ;
    rdfs:label      "is controlled by task" ;
    sh:class        process:Task ;
    sh:description  "A property that relates an entity (especially a  facility:Element)  to the process:Task  that controls it" ;
    sh:name         "is controlled by task" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/task/" ;
    sh:path         process:isControlledByTask .

shape:ResourceTypeRequirement
    a               sh:NodeShape ;
    rdfs:label      "resource type requirement" ;
    sh:description  "An entity that includes the requitrments that a task has pertaining a resource type" ;
    sh:name         "resource type requirement" ;
    sh:nodeKind     sh:IRI ;
    sh:property     shape:relatesToResourceType, shape:quantityNeeded ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/resourceTypeRequirement/" ;
    sh:targetClass  process:ResourceTypeRequirement .

shape:quantityNeeded
    a               sh:PropertyShape ;
    rdfs:label      "quantity needed" ;
    sh:description  "A property indicating the needed quantity of an entity" ;
    sh:name         "quantity needed" ;
    sh:nodeKind     sh:Literal ;
    #sh:minCount     1 ;
    #sh:maxCount     1 ;
    sh:datatype     xsd:integer ;
    sh:path         process:quantityNeeded .

shape:relatesToResourceType
    a               sh:PropertyShape ;
    rdfs:label      "relates to resource type" ;
    sh:class        resource:ResourceType ;
    sh:description  "A property that relates an entity (especially a process:ResourceTypeRequirement) to the resource type it refers to" ;
    sh:name         "relates to resource type" ;
    sh:nodeKind     sh:IRI ;
    #sh:minCount     1 ;
    sh:pattern      "https://data.cogito.iot.linkeddata.es/resources/resourceType/" ;
    sh:path         process:relatesToResourceType .