# SHACL shapes for DataCite RDF produced with the 4.7-r2 JSON-LD context.
#
# They check the RDF structure, not DataCite's required fields (the JSON Schema
# and XSD do that):
#   - each repeatable element is its own node of the right class;
#   - the element's main text is in rdf:value, exactly once, and is text, never
#     a web address; text that DataCite lets carry a language may be tagged;
#   - creators are numbered 1, 2, 3, ... in DataCite's priority order, and
#     polygon points in drawing order (schema:position), with no repeats or gaps;
#   - identifier values are text; coordinates are xsd:float and publication
#     years xsd:gYear;
#   - every controlled value is a term of the DataCite vocabulary for its
#     property. That section is generated from the vocabularies by
#     rdf-build-scripts/build-shapes.py, so it lists every allowed term.
#
# rdfs:range cannot enforce any of this: it only lets a reasoner infer a class.
# Published at https://w3id.org/tib/datacite/shapes/datacite-4.7-r2.shacl.ttl.
#
#   python3 -m pyshacl -s validation-and-conversion/shapes/datacite-4.7-r2.shacl.ttl record.ttl

@prefix sh:   <http://www.w3.org/ns/shacl#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
@prefix dcp:  <https://w3id.org/tib/datacite/property/> .
@prefix dcc:  <https://w3id.org/tib/datacite/class/> .
@prefix dcsh: <https://w3id.org/tib/datacite/shapes/4.7-r2/> .
@prefix schema: <https://schema.org/> .

# ---------------------------------------------------------------------------
# rdf:value: one text value per node, never a web address
# ---------------------------------------------------------------------------

dcsh:ValueIsText
    a sh:NodeShape ;
    sh:targetSubjectsOf rdf:value ;
    sh:property [
        sh:path rdf:value ;
        sh:maxCount 1 ;
        sh:nodeKind sh:Literal ;
        sh:message "A node gives its main text once, in rdf:value, as text (not a web address)." ;
    ] .

# Text that DataCite lets carry a language: plain or language-tagged string.
dcsh:TaggableText
    a sh:NodeShape ;
    sh:targetClass dcc:Title , dcc:Subject , dcc:Publisher ;
    sh:targetObjectsOf dcp:affiliation ;
    sh:property [
        sh:path rdf:value ;
        sh:minCount 1 ;
        sh:or ( [ sh:datatype xsd:string ] [ sh:datatype rdf:langString ] ) ;
        sh:message "The element's text is required in rdf:value, as a string or language-tagged string." ;
    ] .

# A rights statement may be given by URI alone, and the DataCite XSD allows a
# description without text, so their text is optional.
dcsh:RightsText
    a sh:NodeShape ;
    sh:targetClass dcc:Rights , dcc:Description ;
    sh:property [
        sh:path rdf:value ;
        sh:or ( [ sh:datatype xsd:string ] [ sh:datatype rdf:langString ] ) ;
        sh:message "Rights or description text in rdf:value is a string or language-tagged string." ;
    ] .

# Dates and identifiers are plain text: no language tag, no web address.
dcsh:PlainText
    a sh:NodeShape ;
    sh:targetClass dcc:Date , dcc:Identifier , dcc:AlternateIdentifier , dcc:RelatedIdentifier ;
    sh:targetObjectsOf dcp:nameIdentifier , dcp:relatedItemIdentifier ;
    sh:property [
        sh:path rdf:value ;
        sh:minCount 1 ;
        sh:datatype xsd:string ;
        sh:message "Dates and identifiers are required in rdf:value as plain strings." ;
    ] .

# ---------------------------------------------------------------------------
# Repeatable elements are nodes of their class (the rdfs:range, enforced)
# ---------------------------------------------------------------------------

dcsh:TitleNode a sh:NodeShape ; sh:targetObjectsOf dcp:title ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Title .
dcsh:CreatorNode a sh:NodeShape ; sh:targetObjectsOf dcp:creator ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Creator .
dcsh:SubjectNode a sh:NodeShape ; sh:targetObjectsOf dcp:subject ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Subject .
dcsh:ContributorNode a sh:NodeShape ; sh:targetObjectsOf dcp:contributor ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Contributor .
dcsh:DateNode a sh:NodeShape ; sh:targetObjectsOf dcp:date ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Date .
dcsh:IdentifierNode a sh:NodeShape ; sh:targetObjectsOf dcp:identifier ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Identifier .
dcsh:AlternateIdentifierNode a sh:NodeShape ; sh:targetObjectsOf dcp:alternateIdentifier ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:AlternateIdentifier .
dcsh:RelatedIdentifierNode a sh:NodeShape ; sh:targetObjectsOf dcp:relatedIdentifier ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:RelatedIdentifier .
dcsh:RightsNode a sh:NodeShape ; sh:targetObjectsOf dcp:rights ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Rights .
dcsh:DescriptionNode a sh:NodeShape ; sh:targetObjectsOf dcp:description ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Description .
dcsh:PublisherNode a sh:NodeShape ; sh:targetObjectsOf dcp:publisher ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:Publisher ;
    sh:message "The publisher, including a related item's publisher, is a Publisher node with its name in rdf:value." .
dcsh:GeoLocationNode a sh:NodeShape ; sh:targetObjectsOf dcp:geoLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:GeoLocation .
dcsh:FundingReferenceNode a sh:NodeShape ; sh:targetObjectsOf dcp:fundingReference ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:FundingReference .
dcsh:RelatedItemNode a sh:NodeShape ; sh:targetObjectsOf dcp:relatedItem ;
    sh:nodeKind sh:BlankNodeOrIRI ; sh:class dcc:RelatedItem .

# ---------------------------------------------------------------------------
# Creators and contributors
# ---------------------------------------------------------------------------

dcsh:Creator
    a sh:NodeShape ;
    sh:targetClass dcc:Creator ;
    sh:property [
        sh:path dcp:creatorName ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:or ( [ sh:datatype xsd:string ] [ sh:datatype rdf:langString ] ) ;
    ] ;
    sh:property [
        sh:path schema:position ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:datatype xsd:integer ;
        sh:minInclusive 1 ;
        sh:message "Each creator records its place in DataCite's priority order with one schema:position, starting at 1." ;
    ] .

# Positions of one resource's creators run 1, 2, 3, ... with no repeats or gaps.
dcsh:CreatorPositions
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:creator ;
    sh:sparql [
        sh:message "Two creators share position {?position}." ;
        sh:prefixes dcsh:Prefixes ;
        sh:select """
            SELECT $this ?position WHERE {
                $this dcp:creator ?a , ?b .
                FILTER (?a != ?b)
                ?a schema:position ?position .
                ?b schema:position ?position .
            }""" ;
    ] ;
    sh:sparql [
        sh:message "Creator position {?position} has no creator before it." ;
        sh:prefixes dcsh:Prefixes ;
        sh:select """
            SELECT $this ?position WHERE {
                $this dcp:creator ?creator .
                ?creator schema:position ?position .
                FILTER (?position > 1)
                FILTER NOT EXISTS {
                    $this dcp:creator ?previous .
                    ?previous schema:position ?before .
                    FILTER (?before = ?position - 1)
                }
            }""" ;
    ] .

# ---------------------------------------------------------------------------
# Polygons: one node per polygon, its points numbered in drawing order
# ---------------------------------------------------------------------------

dcsh:Polygon
    a sh:NodeShape ;
    sh:targetObjectsOf dcp:geoLocationPolygon ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:property [
        sh:path dcp:polygonPoint ;
        sh:minCount 4 ;
        sh:message "A polygon has at least four points (the first and last are the same)." ;
    ] ;
    sh:property [ sh:path dcp:inPolygonPoint ; sh:maxCount 1 ] ;
    sh:sparql [
        sh:message "Two points of one polygon share position {?position}." ;
        sh:prefixes dcsh:Prefixes ;
        sh:select """
            SELECT $this ?position WHERE {
                $this dcp:polygonPoint ?a , ?b .
                FILTER (?a != ?b)
                ?a schema:position ?position .
                ?b schema:position ?position .
            }""" ;
    ] ;
    sh:sparql [
        sh:message "Polygon point position {?position} has no point before it." ;
        sh:prefixes dcsh:Prefixes ;
        sh:select """
            SELECT $this ?position WHERE {
                $this dcp:polygonPoint ?point .
                ?point schema:position ?position .
                FILTER (?position > 1)
                FILTER NOT EXISTS {
                    $this dcp:polygonPoint ?previous .
                    ?previous schema:position ?before .
                    FILTER (?before = ?position - 1)
                }
            }""" ;
    ] .

dcsh:PolygonPoint
    a sh:NodeShape ;
    sh:targetObjectsOf dcp:polygonPoint ;
    sh:property [
        sh:path schema:position ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:datatype xsd:integer ;
        sh:minInclusive 1 ;
        sh:message "Each polygon point records its place in the drawing order with one schema:position, starting at 1." ;
    ] ;
    sh:property [ sh:path dcp:pointLatitude ; sh:minCount 1 ; sh:maxCount 1 ] ;
    sh:property [ sh:path dcp:pointLongitude ; sh:minCount 1 ; sh:maxCount 1 ] .

dcsh:InPolygonPoint
    a sh:NodeShape ;
    sh:targetObjectsOf dcp:inPolygonPoint ;
    sh:property [ sh:path dcp:pointLatitude ; sh:minCount 1 ; sh:maxCount 1 ] ;
    sh:property [ sh:path dcp:pointLongitude ; sh:minCount 1 ; sh:maxCount 1 ] .

dcsh:Prefixes
    sh:declare [ sh:prefix "dcp" ; sh:namespace "https://w3id.org/tib/datacite/property/"^^xsd:anyURI ] ;
    sh:declare [ sh:prefix "schema" ; sh:namespace "https://schema.org/"^^xsd:anyURI ] .

dcsh:Contributor
    a sh:NodeShape ;
    sh:targetClass dcc:Contributor ;
    sh:property [
        sh:path dcp:contributorName ;
        sh:maxCount 1 ;
        sh:or ( [ sh:datatype xsd:string ] [ sh:datatype rdf:langString ] ) ;
    ] .

# ---------------------------------------------------------------------------
# Qualifiers: how many each node may have. Which values are allowed is checked
# by the generated section at the end of this file.
# ---------------------------------------------------------------------------

dcsh:IdentifierType
    a sh:NodeShape ;
    sh:targetClass dcc:Identifier ;
    sh:property [
        sh:path dcp:identifierType ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:message "The primary identifier is a DOI; other identifiers are AlternateIdentifier nodes." ;
    ] .

dcsh:AlternateIdentifierType
    a sh:NodeShape ;
    sh:targetClass dcc:AlternateIdentifier ;
    sh:property [
        sh:path dcp:alternateIdentifierType ;
        sh:minCount 1 ;
        sh:nodeKind sh:Literal ;
        sh:message "alternateIdentifierType is free text, not a vocabulary term." ;
    ] .

dcsh:TitleType a sh:NodeShape ; sh:targetClass dcc:Title ;
    sh:property [ sh:path dcp:titleType ; sh:maxCount 1 ] .
dcsh:DescriptionType a sh:NodeShape ; sh:targetClass dcc:Description ;
    sh:property [ sh:path dcp:descriptionType ; sh:minCount 1 ; sh:maxCount 1 ] .
dcsh:DateType a sh:NodeShape ; sh:targetClass dcc:Date ;
    sh:property [ sh:path dcp:dateType ; sh:minCount 1 ; sh:maxCount 1 ] .
dcsh:RelatedIdentifierTypes a sh:NodeShape ; sh:targetClass dcc:RelatedIdentifier ;
    sh:property [ sh:path dcp:relatedIdentifierType ; sh:minCount 1 ; sh:maxCount 1 ] ;
    sh:property [ sh:path dcp:relationType ; sh:minCount 1 ; sh:maxCount 1 ] .
dcsh:NameType a sh:NodeShape ; sh:targetClass dcc:Creator , dcc:Contributor ;
    sh:property [ sh:path dcp:nameType ; sh:maxCount 1 ] .
dcsh:FunderIdentifierType a sh:NodeShape ; sh:targetClass dcc:FundingReference ;
    sh:property [ sh:path dcp:funderIdentifierType ; sh:maxCount 1 ] .
# A funder identifier needs its type, as in the DataCite XSD.
dcsh:FunderIdentifierNeedsType a sh:NodeShape ; sh:targetSubjectsOf dcp:funderIdentifier ;
    sh:property [ sh:path dcp:funderIdentifierType ; sh:minCount 1 ;
        sh:message "A funderIdentifier needs its funderIdentifierType." ] .

# ---------------------------------------------------------------------------
# Datatypes: identifier values are text, even when they look like web
# addresses (many schemes, such as ISNI or a bare Crossref Funder ID, are not
# web addresses, and one property must not hold both kinds of value).
# Coordinates are numbers (xsd:float, as in the DataCite XSD) and publication
# years are years (xsd:gYear).
# ---------------------------------------------------------------------------

dcsh:IdentifierValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:affiliationIdentifier , dcp:publisherIdentifier , dcp:funderIdentifier ;
    sh:property [ sh:path dcp:affiliationIdentifier ; sh:datatype xsd:string ;
        sh:message "affiliationIdentifier is text, not a web link." ] ;
    sh:property [ sh:path dcp:publisherIdentifier ; sh:datatype xsd:string ;
        sh:message "publisherIdentifier is text, not a web link." ] ;
    sh:property [ sh:path dcp:funderIdentifier ; sh:datatype xsd:string ;
        sh:message "funderIdentifier is text, not a web link." ] .

dcsh:Coordinates
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:pointLatitude , dcp:pointLongitude , dcp:westBoundLongitude ,
        dcp:eastBoundLongitude , dcp:southBoundLatitude , dcp:northBoundLatitude ;
    sh:property [ sh:path dcp:pointLatitude ; sh:datatype xsd:float ;
        sh:minInclusive -90 ; sh:maxInclusive 90 ] ;
    sh:property [ sh:path dcp:pointLongitude ; sh:datatype xsd:float ;
        sh:minInclusive -180 ; sh:maxInclusive 180 ] ;
    sh:property [ sh:path dcp:southBoundLatitude ; sh:datatype xsd:float ;
        sh:minInclusive -90 ; sh:maxInclusive 90 ] ;
    sh:property [ sh:path dcp:northBoundLatitude ; sh:datatype xsd:float ;
        sh:minInclusive -90 ; sh:maxInclusive 90 ] ;
    sh:property [ sh:path dcp:westBoundLongitude ; sh:datatype xsd:float ;
        sh:minInclusive -180 ; sh:maxInclusive 180 ] ;
    sh:property [ sh:path dcp:eastBoundLongitude ; sh:datatype xsd:float ;
        sh:minInclusive -180 ; sh:maxInclusive 180 ] .

dcsh:PublicationYear
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:publicationYear ;
    sh:property [
        sh:path dcp:publicationYear ;
        sh:maxCount 1 ;
        sh:datatype xsd:gYear ;
        sh:message "publicationYear is one year (xsd:gYear), such as \"2024\"." ;
    ] .

# BEGIN GENERATED: controlled values (rdf-build-scripts/build-shapes.py; do not edit)
#
# One shape per controlled property: its value must be a term of the DataCite
# vocabulary that the JSON-LD context assigns to it.

dcsh:contributorTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:contributorType ;
    sh:property [
        sh:path dcp:contributorType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/contributorType/ContactPerson>
        <https://w3id.org/tib/datacite/vocab/contributorType/DataCollector>
        <https://w3id.org/tib/datacite/vocab/contributorType/DataCurator>
        <https://w3id.org/tib/datacite/vocab/contributorType/DataManager>
        <https://w3id.org/tib/datacite/vocab/contributorType/Distributor>
        <https://w3id.org/tib/datacite/vocab/contributorType/Editor>
        <https://w3id.org/tib/datacite/vocab/contributorType/HostingInstitution>
        <https://w3id.org/tib/datacite/vocab/contributorType/Other>
        <https://w3id.org/tib/datacite/vocab/contributorType/Producer>
        <https://w3id.org/tib/datacite/vocab/contributorType/ProjectLeader>
        <https://w3id.org/tib/datacite/vocab/contributorType/ProjectManager>
        <https://w3id.org/tib/datacite/vocab/contributorType/ProjectMember>
        <https://w3id.org/tib/datacite/vocab/contributorType/RegistrationAgency>
        <https://w3id.org/tib/datacite/vocab/contributorType/RegistrationAuthority>
        <https://w3id.org/tib/datacite/vocab/contributorType/RelatedPerson>
        <https://w3id.org/tib/datacite/vocab/contributorType/ResearchGroup>
        <https://w3id.org/tib/datacite/vocab/contributorType/Researcher>
        <https://w3id.org/tib/datacite/vocab/contributorType/RightsHolder>
        <https://w3id.org/tib/datacite/vocab/contributorType/Sponsor>
        <https://w3id.org/tib/datacite/vocab/contributorType/Supervisor>
        <https://w3id.org/tib/datacite/vocab/contributorType/Translator>
        <https://w3id.org/tib/datacite/vocab/contributorType/WorkPackageLeader>
        ) ;
        sh:message "contributorType must be a term of the DataCite contributorType vocabulary." ;
    ] .

dcsh:dateTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:dateType ;
    sh:property [
        sh:path dcp:dateType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/dateType/Accepted>
        <https://w3id.org/tib/datacite/vocab/dateType/Available>
        <https://w3id.org/tib/datacite/vocab/dateType/Collected>
        <https://w3id.org/tib/datacite/vocab/dateType/Copyrighted>
        <https://w3id.org/tib/datacite/vocab/dateType/Coverage>
        <https://w3id.org/tib/datacite/vocab/dateType/Created>
        <https://w3id.org/tib/datacite/vocab/dateType/Issued>
        <https://w3id.org/tib/datacite/vocab/dateType/Other>
        <https://w3id.org/tib/datacite/vocab/dateType/Submitted>
        <https://w3id.org/tib/datacite/vocab/dateType/Updated>
        <https://w3id.org/tib/datacite/vocab/dateType/Valid>
        <https://w3id.org/tib/datacite/vocab/dateType/Withdrawn>
        ) ;
        sh:message "dateType must be a term of the DataCite dateType vocabulary." ;
    ] .

dcsh:descriptionTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:descriptionType ;
    sh:property [
        sh:path dcp:descriptionType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/descriptionType/Abstract>
        <https://w3id.org/tib/datacite/vocab/descriptionType/Methods>
        <https://w3id.org/tib/datacite/vocab/descriptionType/Other>
        <https://w3id.org/tib/datacite/vocab/descriptionType/SeriesInformation>
        <https://w3id.org/tib/datacite/vocab/descriptionType/TableOfContents>
        <https://w3id.org/tib/datacite/vocab/descriptionType/TechnicalInfo>
        ) ;
        sh:message "descriptionType must be a term of the DataCite descriptionType vocabulary." ;
    ] .

dcsh:funderIdentifierTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:funderIdentifierType ;
    sh:property [
        sh:path dcp:funderIdentifierType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/funderIdentifierType/CrossrefFunderID>
        <https://w3id.org/tib/datacite/vocab/funderIdentifierType/GRID>
        <https://w3id.org/tib/datacite/vocab/funderIdentifierType/ISNI>
        <https://w3id.org/tib/datacite/vocab/funderIdentifierType/Other>
        <https://w3id.org/tib/datacite/vocab/funderIdentifierType/ROR>
        ) ;
        sh:message "funderIdentifierType must be a term of the DataCite funderIdentifierType vocabulary." ;
    ] .

dcsh:identifierTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:identifierType ;
    sh:property [
        sh:path dcp:identifierType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/identifierType/DOI>
        ) ;
        sh:message "identifierType must be a term of the DataCite identifierType vocabulary." ;
    ] .

dcsh:nameTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:nameType ;
    sh:property [
        sh:path dcp:nameType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/nameType/Organizational>
        <https://w3id.org/tib/datacite/vocab/nameType/Personal>
        ) ;
        sh:message "nameType must be a term of the DataCite nameType vocabulary." ;
    ] .

dcsh:numberTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:numberType ;
    sh:property [
        sh:path dcp:numberType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/numberType/Article>
        <https://w3id.org/tib/datacite/vocab/numberType/Chapter>
        <https://w3id.org/tib/datacite/vocab/numberType/Other>
        <https://w3id.org/tib/datacite/vocab/numberType/Report>
        ) ;
        sh:message "numberType must be a term of the DataCite numberType vocabulary." ;
    ] .

dcsh:relatedIdentifierTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:relatedIdentifierType ;
    sh:property [
        sh:path dcp:relatedIdentifierType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ARK>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/CSTR>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/DOI>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/EAN13>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/EISSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/Handle>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/IGSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ISBN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ISSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ISTC>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/LISSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/LSID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/PMID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/PURL>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/RAiD>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/RRID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/SWHID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/UPC>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/URL>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/URN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/arXiv>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/bibcode>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/w3id>
        ) ;
        sh:message "relatedIdentifierType must be a term of the DataCite relatedIdentifierType vocabulary." ;
    ] .

dcsh:relatedItemIdentifierTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:relatedItemIdentifierType ;
    sh:property [
        sh:path dcp:relatedItemIdentifierType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ARK>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/CSTR>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/DOI>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/EAN13>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/EISSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/Handle>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/IGSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ISBN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ISSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/ISTC>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/LISSN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/LSID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/PMID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/PURL>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/RAiD>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/RRID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/SWHID>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/UPC>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/URL>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/URN>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/arXiv>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/bibcode>
        <https://w3id.org/tib/datacite/vocab/relatedIdentifierType/w3id>
        ) ;
        sh:message "relatedItemIdentifierType must be a term of the DataCite relatedIdentifierType vocabulary." ;
    ] .

dcsh:relatedItemTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:relatedItemType ;
    sh:property [
        sh:path dcp:relatedItemType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Audiovisual>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Award>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Book>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/BookChapter>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Collection>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/ComputationalNotebook>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/ConferencePaper>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/ConferenceProceeding>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/DataPaper>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Dataset>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Dissertation>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Event>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Image>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Instrument>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/InteractiveResource>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Journal>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/JournalArticle>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Model>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Other>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/OutputManagementPlan>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/PeerReview>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/PhysicalObject>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Poster>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Preprint>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Presentation>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Project>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Report>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Service>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Software>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Sound>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Standard>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/StudyRegistration>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Text>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Workflow>
        ) ;
        sh:message "relatedItemType must be a term of the DataCite resourceTypeGeneral vocabulary." ;
    ] .

dcsh:relationTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:relationType ;
    sh:property [
        sh:path dcp:relationType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/relationType/Cites>
        <https://w3id.org/tib/datacite/vocab/relationType/Collects>
        <https://w3id.org/tib/datacite/vocab/relationType/Compiles>
        <https://w3id.org/tib/datacite/vocab/relationType/Continues>
        <https://w3id.org/tib/datacite/vocab/relationType/Describes>
        <https://w3id.org/tib/datacite/vocab/relationType/Documents>
        <https://w3id.org/tib/datacite/vocab/relationType/HasMetadata>
        <https://w3id.org/tib/datacite/vocab/relationType/HasPart>
        <https://w3id.org/tib/datacite/vocab/relationType/HasTranslation>
        <https://w3id.org/tib/datacite/vocab/relationType/HasVersion>
        <https://w3id.org/tib/datacite/vocab/relationType/IsCitedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsCollectedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsCompiledBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsContinuedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsDerivedFrom>
        <https://w3id.org/tib/datacite/vocab/relationType/IsDescribedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsDocumentedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsIdenticalTo>
        <https://w3id.org/tib/datacite/vocab/relationType/IsMetadataFor>
        <https://w3id.org/tib/datacite/vocab/relationType/IsNewVersionOf>
        <https://w3id.org/tib/datacite/vocab/relationType/IsObsoletedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsOriginalFormOf>
        <https://w3id.org/tib/datacite/vocab/relationType/IsPartOf>
        <https://w3id.org/tib/datacite/vocab/relationType/IsPreviousVersionOf>
        <https://w3id.org/tib/datacite/vocab/relationType/IsPublishedIn>
        <https://w3id.org/tib/datacite/vocab/relationType/IsReferencedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsRequiredBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsReviewedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsSourceOf>
        <https://w3id.org/tib/datacite/vocab/relationType/IsSupplementTo>
        <https://w3id.org/tib/datacite/vocab/relationType/IsSupplementedBy>
        <https://w3id.org/tib/datacite/vocab/relationType/IsTranslationOf>
        <https://w3id.org/tib/datacite/vocab/relationType/IsVariantFormOf>
        <https://w3id.org/tib/datacite/vocab/relationType/IsVersionOf>
        <https://w3id.org/tib/datacite/vocab/relationType/Obsoletes>
        <https://w3id.org/tib/datacite/vocab/relationType/Other>
        <https://w3id.org/tib/datacite/vocab/relationType/References>
        <https://w3id.org/tib/datacite/vocab/relationType/Requires>
        <https://w3id.org/tib/datacite/vocab/relationType/Reviews>
        ) ;
        sh:message "relationType must be a term of the DataCite relationType vocabulary." ;
    ] .

dcsh:resourceTypeGeneralValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:resourceTypeGeneral ;
    sh:property [
        sh:path dcp:resourceTypeGeneral ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Audiovisual>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Award>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Book>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/BookChapter>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Collection>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/ComputationalNotebook>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/ConferencePaper>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/ConferenceProceeding>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/DataPaper>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Dataset>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Dissertation>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Event>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Image>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Instrument>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/InteractiveResource>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Journal>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/JournalArticle>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Model>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Other>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/OutputManagementPlan>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/PeerReview>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/PhysicalObject>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Poster>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Preprint>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Presentation>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Project>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Report>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Service>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Software>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Sound>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Standard>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/StudyRegistration>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Text>
        <https://w3id.org/tib/datacite/vocab/resourceTypeGeneral/Workflow>
        ) ;
        sh:message "resourceTypeGeneral must be a term of the DataCite resourceTypeGeneral vocabulary." ;
    ] .

dcsh:titleTypeValues
    a sh:NodeShape ;
    sh:targetSubjectsOf dcp:titleType ;
    sh:property [
        sh:path dcp:titleType ;
        sh:in (
        <https://w3id.org/tib/datacite/vocab/titleType/AlternativeTitle>
        <https://w3id.org/tib/datacite/vocab/titleType/Other>
        <https://w3id.org/tib/datacite/vocab/titleType/Subtitle>
        <https://w3id.org/tib/datacite/vocab/titleType/TranslatedTitle>
        ) ;
        sh:message "titleType must be a term of the DataCite titleType vocabulary." ;
    ] .

# END GENERATED: controlled values
