@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sg: <http://www.springernature.com/scigraph/ontologies/core/> .
@prefix sgg: <http://www.springernature.com/scigraph/graphs/> .
@prefix sgo: <http://www.springernature.com/scigraph/ontologies/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix void: <http://rdfs.org/ns/void#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

@prefix shapes: <http://www.springernature.com/scigraph/shapes/> .

# shape - SkosConceptScheme

shapes:SkosConceptScheme
    a sh:Shape ;
    sh:targetClass skos:ConceptScheme ;
    # sh:closed true ;
    sh:ignoredProperties ( rdf:type rdfs:label ) ;

    # SKOS - Structure
    sh:property [
        sh:predicate skos:hasTopConcept ;
        sh:nodeKind sh:IRI ;
    ] ;

    # SKOS - Label
    sh:property [
        sh:predicate skos:prefLabel ;
        sh:datatype rdf:langString ;
        sh:minCount 1 ;
        sh:uniqueLang true ;
    ] ;
    sh:property [
        sh:predicate skos:altLabel ;
        sh:datatype rdf:langString ;
    ] ;

    # SKOS - Definition
    sh:property [
        sh:predicate skos:definition ;
        sh:datatype rdf:langString ;
        # sh:minCount 1 ;
        sh:uniqueLang true ;
    ] ;
    .

# shape - SkosConcept

shapes:SkosConcept
    a sh:Shape ;
    sh:targetClass skos:Concept ;
    # sh:closed true ;
    sh:ignoredProperties ( rdf:type rdfs:label ) ;

    # SKOS - Structure
    sh:property [
        sh:predicate skos:inScheme ;
        sh:nodeKind sh:IRI ;
    ] ;
    sh:property [
        sh:predicate skos:topConceptOf ;
        sh:nodeKind sh:IRI ;
    ] ;
    sh:property [
        sh:predicate skos:broader ;
        sh:nodeKind sh:IRI ;
    ] ;
    sh:property [
        sh:predicate skos:narrower ;
        sh:nodeKind sh:IRI ;
    ] ;
    sh:property [
        sh:predicate skos:related ;
        sh:nodeKind sh:IRI ;
    ] ;

    # SKOS - Label
    sh:property [
        sh:predicate skos:prefLabel ;
        sh:datatype rdf:langString ;
        sh:minCount 1 ;
        sh:uniqueLang true ;
    ] ;
    sh:property [
        sh:predicate skos:altLabel ;
        sh:datatype rdf:langString ;
    ] ;
    sh:property [
        sh:predicate skos:hiddenLabel ;
        sh:or (
            [ sh:datatype xsd:string ; ]
            [ sh:datatype rdf:langString ; ]
        ) ;
    ] ;

    # SKOS - Definition
    sh:property [
        sh:predicate skos:definition ;
        sh:datatype rdf:langString ;
        # sh:minCount 1 ;
        sh:uniqueLang true ;
    ] ;

    # SKOS - Notes
    sh:property [
        sh:predicate skos:note ;
        sh:datatype rdf:langString ;
    ] ;
    sh:property [
        sh:predicate skos:historyNote ;
        sh:datatype rdf:langString ;
    ] ;
    sh:property [
        sh:predicate skos:scopeNote ;
        sh:datatype rdf:langString ;
    ] ;
    .
