@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix edu: <https://knobit.org/def/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <https://schema.org/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://knobit.org/def/shapes/skills> dcterms:license <https://creativecommons.org/licenses/by/4.0/> .

<https://knobit.org/def/shapes/skills#ActivityShape> a sh:NodeShape ;
    sh:property [ sh:minCount 1 ;
            sh:path [ sh:inversePath edu:consistsOf ] ],
        [ sh:message "A stage requires at least one knobit."@en ;
            sh:minCount 1 ;
            sh:path edu:requiresKnobit ] ;
    sh:targetClass edu:Activity .

<https://knobit.org/def/shapes/skills#CompetenceShape> a sh:NodeShape ;
    sh:property [ sh:message "A competence consists of at least one activity (stage)."@en ;
            sh:minCount 1 ;
            sh:path edu:consistsOf ] ;
    sh:targetClass edu:Competence .

<https://knobit.org/def/shapes/skills#ItemShape> a sh:NodeShape ;
    sh:property [ sh:maxCount 0 ;
            sh:message "A register item is part of a criterion, not a question of a task."@en ;
            sh:path [ sh:inversePath edu:hasQuestion ] ],
        [ sh:message "No skill-tests criterion grades this register item."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath schema:hasPart ] ;
            sh:severity sh:Warning ] ;
    sh:targetSubjectsOf edu:solvableWith .

<https://knobit.org/def/shapes/skills#KnobitShape> a sh:NodeShape ;
    sh:message "A knobit has a description (rdfs:comment or skos:definition), and a live knobit is included by a learning outcome, applied by another knobit or a prerequisite of another knobit; a superseded one names its successor."@en ;
    sh:or ( [ sh:minCount 1 ;
                sh:path rdfs:comment ] [ sh:minCount 1 ;
                sh:path skos:definition ] ),
        ( [ sh:minCount 1 ;
                sh:path schema:supersededBy ] [ sh:minCount 1 ;
                sh:path [ sh:inversePath edu:includesKnobit ] ] [ sh:minCount 1 ;
                sh:path [ sh:inversePath edu:appliesKnowledge ] ] [ sh:minCount 1 ;
                sh:path [ sh:inversePath edu:dependsOnKnobit ] ] ) ;
    sh:targetClass edu:Knobit .

<https://knobit.org/def/shapes/skills#LabelledShape> a sh:NodeShape ;
    sh:property [ sh:message "Every node in the skills graph has a label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ] ;
    sh:targetClass edu:Activity,
        edu:Competence,
        edu:Knobit,
        edu:LearningPath,
        edu:Occupation,
        edu:Question,
        edu:Skill,
        edu:Task,
        edu:Topic .

<https://knobit.org/def/shapes/skills#OccupationShape> a sh:NodeShape ;
    sh:property [ sh:minCount 1 ;
            sh:path edu:requiresCompetence ] ;
    sh:targetClass edu:Occupation .

<https://knobit.org/def/shapes/skills#QuestionShape> a sh:NodeShape ;
    sh:message "A question is a criterion (schema:text, in exactly one task) or a register item (edu:solvableWith)."@en ;
    sh:targetClass edu:Question ;
    sh:xone ( [ sh:property [ sh:minCount 1 ;
                        sh:path edu:solvableWith ] ] [ sh:property [ sh:minCount 1 ;
                        sh:path schema:text ],
                    [ sh:maxCount 1 ;
                        sh:minCount 1 ;
                        sh:path [ sh:inversePath edu:hasQuestion ] ] ] ) .

<https://knobit.org/def/shapes/skills#StageOutcomeShape> a sh:NodeShape ;
    sh:property [ sh:message "No task assesses this stage outcome."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath edu:assessesLearningOutcome ] ;
            sh:severity sh:Warning ],
        [ sh:message "A stage outcome belongs to a learning path."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath edu:includesLearningOutcome ] ],
        [ sh:minCount 1 ;
            sh:path edu:includesKnobit ] ;
    sh:targetClass edu:Skill .

<https://knobit.org/def/shapes/skills#TaskShape> a sh:NodeShape ;
    sh:message "A task is a test case (assessing an outcome, with questions, in a test) or a register item (edu:solvableWith)."@en ;
    sh:targetClass edu:Task ;
    sh:xone ( [ sh:property [ sh:minCount 1 ;
                        sh:path edu:solvableWith ] ] [ sh:property [ sh:minCount 1 ;
                        sh:path edu:assessesLearningOutcome ],
                    [ sh:minCount 1 ;
                        sh:path edu:hasQuestion ],
                    [ sh:minCount 1 ;
                        sh:path [ sh:inversePath edu:hasTask ] ] ] ) .

edu:LearningPath rdfs:label "Learning path"@en,
        "Õpirada"@et .

edu:Topic rdfs:label "Topic"@en,
        "Teema"@et .

edu:appliesKnowledge rdfs:label "applies knowledge"@en,
        "Rakendab teadmist"@et .

edu:dependsOnKnobit rdfs:label "depends on knobit"@en,
        "Eeldab knobitit"@et .

edu:hasTask rdfs:label "has task"@en,
        "Sisaldab ülesannet"@et .

edu:includesLearningOutcome rdfs:label "includes learning outcome"@en,
        "Sisaldab õpiväljundit"@et .

edu:requiresCompetence rdfs:label "requires competence"@en,
        "Nõuab pädevust"@et .

edu:requiresKnobit rdfs:label "requires knobit"@en,
        "Nõuab knobitit"@et .

edu:Activity rdfs:label "Activity"@en,
        "Tegevusnäitaja"@et .

edu:Competence rdfs:label "Competence"@en,
        "Pädevus"@et .

edu:Knobit rdfs:label "Knobit"@en,
        "Knobit"@et .

edu:Occupation rdfs:label "Occupation"@en,
        "Amet"@et .

edu:Question rdfs:label "Question"@en,
        "Küsimus"@et .

edu:Skill rdfs:label "Skill"@en,
        "Oskus"@et .

edu:Task rdfs:label "Task"@en,
        "Ülesanne"@et .

edu:assessesLearningOutcome rdfs:label "assesses learning outcome"@en,
        "Hindab õpiväljundit"@et .

edu:consistsOf rdfs:label "consists of"@en,
        "Koosneb tegevusnäitajatest"@et .

edu:includesKnobit rdfs:label "includes knobit"@en,
        "Sisaldab knobitit"@et .

edu:hasQuestion rdfs:label "has question"@en,
        "Sisaldab küsimust"@et .

edu:solvableWith rdfs:label "solvable with"@en,
        "Lahendatav kogumiga"@et .

