@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix d: <https://expertise.matdata.eu/#/page/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .


# Project shape
d:ProjectShape 
    a sh:NodeShape ;
    sh:targetClass d:Project ;
    sh:property [
        sh:path rdfs:label ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:has-category ;
        sh:nodeKind sh:IRI ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:class skos:Concept ;
        sh:node [
            sh:property [
                sh:path skos:inScheme ;
                sh:hasValue d:ProjectCategories ;
                sh:minCount 1 ;
            ]
        ] ;
    ] ;
    sh:property [
        sh:path d:during-job ;
        sh:nodeKind sh:IRI ;
        sh:class d:Job ;
    ] ;
    sh:property [
        sh:path d:is-featured ;
        sh:datatype xsd:boolean ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:has-tagged-techniques ;
        sh:nodeKind sh:IRI ;
        sh:class d:Technique ;
    ] ;
    sh:property [
        sh:path d:has-tagged-roles ;
        sh:nodeKind sh:IRI ;
        sh:class d:Role ;
    ] ;
    sh:property [
        sh:path rdfs:comment ;
        sh:datatype xsd:string ;
        sh:maxCount 1 ;
    ] .

# Technique shape
d:TechniqueShape
    a sh:NodeShape ;
    sh:targetClass d:Technique ;
    sh:property [
        sh:path rdfs:label ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:has-category ;
        sh:nodeKind sh:IRI ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:class skos:Concept ;
        sh:node [
            sh:property [
                sh:path skos:inScheme ;
                sh:hasValue d:TechniqueCategories ;
                sh:minCount 1 ;
            ]
        ] ;
    ] ;
    sh:property [
        sh:path d:is-featured ;
        sh:datatype xsd:boolean ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:self-estimated-proficiency ;
        sh:nodeKind sh:IRI ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:class skos:Concept ;
        sh:node [
            sh:property [
                sh:path skos:inScheme ;
                sh:hasValue d:ProficiencyLevels ;
                sh:minCount 1 ;
            ]
        ] ;
    ] .

# Role shape
d:RoleShape
    a sh:NodeShape ;
    sh:targetClass d:Role ;
    sh:property [
        sh:path rdfs:label ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:has-category ;
        sh:nodeKind sh:IRI ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:class skos:Concept ;
        sh:node [
            sh:property [
                sh:path skos:inScheme ;
                sh:hasValue d:RoleCategories ;
                sh:minCount 1 ;
            ]
        ] ;
    ] ;
    sh:property [
        sh:path d:is-featured ;
        sh:datatype xsd:boolean ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:self-estimated-proficiency ;
        sh:nodeKind sh:IRI ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:class skos:Concept ;
    ] .

# Company shape
d:CompanyShape
    a sh:NodeShape ;
    sh:targetClass d:Company ;
    sh:property [
        sh:path rdfs:label ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:external-link ;
        sh:nodeKind sh:IRI ;
        sh:maxCount 1 ;
    ] .

# Job shape
d:JobShape
    a sh:NodeShape ;
    sh:targetClass d:Job ;
    sh:property [
        sh:path rdfs:label ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:at-company ;
        sh:nodeKind sh:IRI ;
        sh:class d:Company ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:started-on ;
        sh:datatype xsd:dateTime ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:ended-on ;
        sh:datatype xsd:dateTime ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:has-duration ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path d:has-linked-roles ;
        sh:nodeKind sh:IRI ;
        sh:class d:Role ;
    ] .

# SKOS Category concept shape
d:CategoryShape
    a sh:NodeShape ;
    sh:targetClass skos:Concept ;
    sh:property [
        sh:path skos:prefLabel ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] ;
    sh:property [
        sh:path skos:inScheme ;
        sh:nodeKind sh:IRI ;
        sh:class skos:ConceptScheme ;
        sh:minCount 1 ;
    ] ;
    sh:property [
        sh:path skos:definition ;
        sh:datatype xsd:string ;
        sh:minCount 0 ;
        sh:maxCount 1 ;
    ] .

# SKOS Concept Scheme shape
d:ConceptSchemeShape
    a sh:NodeShape ;
    sh:targetClass skos:ConceptScheme ;
    sh:property [
        sh:path rdfs:label ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
    ] .
