@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@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#> .

qudt:FunctionDatatype a rdfs:Class,
        owl:Class,
        sh:NodeShape ;
    rdfs:label "Function Data Type" ;
    dcterms:description """
  <p>A function data type defines the input and output data type for a function or method. 
  The data type includes at least the function name and the number of its parameters. 
  In some programming languages, it may also specify the function's return type or the types of its arguments.
  </p>"""^^rdf:HTML ;
    rdfs:isDefinedBy <http://qudt.org/3.2.1/schema/datatype>,
        <http://qudt.org/3.2.1/schema/shacl/datatype> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty qudt:returnType ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty qudt:functionArity ],
        [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty qudt:functionArity ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty qudt:returnType ],
        [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty qudt:functionArity ],
        qudt:StructuredDatatype ;
    sh:property qudt:FunctionDatatype-argType,
        qudt:FunctionDatatype-functionArity,
        qudt:FunctionDatatype-returnType .

