@prefix edu: <https://knobit.org/def/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

edu:KnobitDependenciesAcyclicShape a sh:NodeShape ;
    rdfs:label "Knobit dependencies have no cycles"@en,
        "Knobitite eeldusseosed ei moodusta tsüklit"@et ;
    sh:sparql [ a sh:SPARQLConstraint ;
            sh:message "Knobit is its own direct or indirect prerequisite (dependsOnKnobit forms a cycle)."@en,
                "Knobit on iseenda otsene või kaudne eeldus (dependsOnKnobit moodustab tsükli)."@et ;
            sh:prefixes edu:shapes ;
            sh:select """\r
            SELECT $this\r
            WHERE {\r
                $this edu:dependsOnKnobit+ $this .\r
            }\r
        """ ] ;
    sh:targetSubjectsOf edu:dependsOnKnobit .

edu:LearningOutcomePrerequisitesAcyclicShape a sh:NodeShape ;
    rdfs:label "Learning outcome prerequisites have no cycles"@en,
        "Õpiväljundite eeldusseosed ei moodusta tsüklit"@et ;
    sh:sparql [ a sh:SPARQLConstraint ;
            sh:message "Learning outcome is its own direct or indirect prerequisite (hasPrerequisite / isPrerequisiteOf form a cycle)."@en,
                "Õpiväljund on iseenda otsene või kaudne eeldus (eeldusseosed moodustavad tsükli)."@et ;
            sh:prefixes edu:shapes ;
            sh:select """\r
            SELECT $this\r
            WHERE {\r
                $this (edu:hasPrerequisite|^edu:isPrerequisiteOf)+ $this .\r
            }\r
        """ ] ;
    sh:targetObjectsOf edu:isPrerequisiteOf ;
    sh:targetSubjectsOf edu:hasPrerequisite .

edu:shapes sh:declare [ sh:namespace "https://knobit.org/def/"^^xsd:anyURI ;
            sh:prefix "edu" ] .

