# W3C SHACL Node Expressions Vocabulary

# THIS VERSION IS UNDER DEVELOPMENT BY THE DATA-SHAPES (SHACL 1.2) WG

@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 sh:      <http://www.w3.org/ns/shacl#> .
@prefix shnex:   <http://www.w3.org/ns/shacl-node-expr#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .

shnex:
	a owl:Ontology ;
	owl:imports <http://www.w3.org/ns/shacl#> ;
	owl:versionIRI shnex:1.2 ;
	rdfs:label "W3C SHACL Node Expressions Vocabulary"@en ;
	rdfs:comment "This vocabulary defines terms used in the SHACL Node Expressions specification."@en ;
    dcterms:creator "W3C Data Shapes Working Group" ;
    dcterms:publisher "World Wide Web Consortium" ;
    # dcterms:created ""^^xsd:date ;
    # dcterms:issued ""^^xsd:date ;
    # dcterms:modified ""^^xsd:date ;
    dcterms:license "https://www.w3.org/copyright/software-license/"^^xsd:anyURI ;
	sh:declare [
		sh:prefix "shnex" ;
		sh:namespace "http://www.w3.org/ns/shacl-node-expr#"^^xsd:anyURI ;
	] ;
.


shnex:nodes
	a rdf:Property ;
	rdfs:label "nodes"@en ;
	rdfs:comment "Used by various node expression functions to produce input nodes."@en ;
	rdfs:isDefinedBy shnex: ;
.


# Concat Expressions ----------------------------------------------------------

shnex:ConcatExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Concat expression"@en ;
	rdfs:comment "A SHACL node expression that can be used to returns the nodes that are found in either of the results of the listed node expression."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:ConcatExpression-concat ;
	rdfs:isDefinedBy shnex: ;
.
shnex:ConcatExpression-concat
	a sh:Parameter ;
	sh:path shnex:concat ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:concat
	a rdf:Property ;
	rdfs:label "concat"@en ;
	rdfs:comment "In Concat Expressions, this property specifies the list of node expressions that shall be concatenated."@en ;
	rdfs:domain shnex:ConcatExpression ;
	rdfs:range rdf:List ;
	rdfs:isDefinedBy shnex: ;
.


# Count Expressions -----------------------------------------------------------

shnex:CountExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Count expression"@en ;
	rdfs:comment "A SHACL node expression that returns the number of nodes returned by a given node expression (sh:count)."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:CountExpression-count ;
	rdfs:isDefinedBy shnex: ;
.
shnex:CountExpression-count
	a sh:Parameter ;
	sh:path shnex:count ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:count
	a rdf:Property ;
	rdfs:label "count"@en ;
	rdfs:comment "In Count Expressions, this property specifies the node expression of which the results shall be counted."@en ;
	rdfs:domain shnex:CountExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Distinct Expressions --------------------------------------------------------

shnex:DistinctExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Distinct expression"@en ;
	rdfs:comment "A SHACL node expression that can be used to returns only the distinct members of the results of another node expression."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:DistinctExpression-distinct ;
	rdfs:isDefinedBy shnex: ;
.
shnex:DistinctExpression-distinct
	a sh:Parameter ;
	sh:path shnex:distinct ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:distinct
	a rdf:Property ;
	rdfs:label "distinct"@en ;
	rdfs:comment "In Distinct Expressions, this property specifies the node expression that shall be evaluated."@en ;
	rdfs:domain shnex:DistinctExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Empty Expressions -----------------------------------------------------------

shnex:EmptyExpression
	a sh:NodeExpressionFunction ;
	rdfs:label "Empty expression"@en ;
	rdfs:comment "A SHACL node expression that returns the empty list."@en ;
	rdfs:subClassOf sh:NodeExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Exists Expressions ----------------------------------------------------------

shnex:ExistsExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Exists expression"@en ;
	rdfs:comment "A SHACL node expression that can be used to check that a given node expression returns at least one node."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:ExistsExpression-exists ;
	rdfs:isDefinedBy shnex: ;
.
shnex:ExistsExpression-exists
	a sh:Parameter ;
	sh:path shnex:exists ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:exists
	a rdf:Property ;
	rdfs:label "exists"@en ;
	rdfs:comment "In Exists Expressions, this property specifies the node expression that shall be evaluated."@en ;
	rdfs:domain shnex:ExistsExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Filter Shape Expressions ----------------------------------------------------

shnex:FilterShapeExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Filter shape expression"@en ;
	rdfs:comment "A SHACL node expression that returns the values of a given node expression (sh:nodes) except for those that do not conform to a given filter shape."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:FilterShapeExpression-filterShape ;
	sh:parameter shnex:FilterShapeExpression-nodes ;
	rdfs:isDefinedBy shnex: ;
.
shnex:FilterShapeExpression-filterShape
	a sh:Parameter ;
	sh:path shnex:filterShape ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:FilterShapeExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	rdfs:isDefinedBy shnex: ;
.
shnex:filterShape
	a rdf:Property ;
	rdfs:label "filter shape"@en ;
	rdfs:comment "In FilterShape Expressions, this property specifies the shape that the input values (sh:nodes) must conform to."@en ;
	rdfs:domain shnex:FilterShapeExpression ;
	rdfs:range sh:Shape ;
	rdfs:isDefinedBy shnex: ;
.


# FindFirst Expressions -------------------------------------------------------

shnex:FindFirstExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "FindFirst expression"@en ;
	rdfs:comment "A SHACL node expression that returns the first node from a sequence that satisfies a given predicate."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:FindFirstExpression-findFirst ;
	sh:parameter shnex:FindFirstExpression-nodes ;
	rdfs:isDefinedBy shnex: ;
.
shnex:FindFirstExpression-findFirst
	a sh:Parameter ;
	sh:path shnex:findFirst ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:FindFirstExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	sh:optional true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:findFirst
	a rdf:Property ;
	rdfs:label "findFirst"@en ;
	rdfs:comment "In FindFirst Expressions, this property specifies the shape that the matching node must conform to."@en ;
	rdfs:domain shnex:FindFirstExpression ;
	rdfs:range sh:Shape ;
	rdfs:isDefinedBy shnex: ;
.


# FlatMap Expressions ---------------------------------------------------------

shnex:FlatMapExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "FlatMap expression"@en ;
	rdfs:comment "A SHACL node expression that applies an expression to each input node and flattens the results into a single sequence."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:FlatMapExpression-flatMap ;
	sh:parameter shnex:FlatMapExpression-nodes ;
	rdfs:isDefinedBy shnex: ;
.
shnex:FlatMapExpression-flatMap
	a sh:Parameter ;
	sh:path shnex:flatMap ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:FlatMapExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	sh:optional true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:flatMap
	a rdf:Property ;
	rdfs:label "flatMap"@en ;
	rdfs:comment "In FlatMap Expressions, this property specifies the node expression that is applied to each input node."@en ;
	rdfs:domain shnex:FlatMapExpression ;
	rdfs:isDefinedBy shnex: ;
.


# If Expressions --------------------------------------------------------------

shnex:IfExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "If expression"@en ;
	rdfs:comment "A SHACL node expression that evaluates a condition (sh:if) and then either returns the results of the sh:then or sh:else expression."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:IfExpression-if ;
	sh:parameter shnex:IfExpression-then ;
	sh:parameter shnex:IfExpression-else ;
	rdfs:isDefinedBy shnex: ;
.
shnex:IfExpression-if
	a sh:Parameter ;
	sh:path shnex:if ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:IfExpression-then
	a sh:Parameter ;
	sh:path shnex:then ;
	sh:optional true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:IfExpression-else
	a sh:Parameter ;
	sh:path shnex:else ;
	sh:optional true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:if
	a rdf:Property ;
	rdfs:label "if"@en ;
	rdfs:comment "In If Expressions, this property specifies the node expression that must return true to reach the sh:then branch."@en ;
	rdfs:domain shnex:IfExpression ;
	rdfs:isDefinedBy shnex: ;
.
shnex:then
	a rdf:Property ;
	rdfs:label "then"@en ;
	rdfs:comment "In If Expressions, this property specifies the node expression that is evaluated when the sh:if has returned true."@en ;
	rdfs:domain shnex:IfExpression ;
	rdfs:isDefinedBy shnex: ;
.
shnex:else
	a rdf:Property ;
	rdfs:label "else"@en ;
	rdfs:comment "In If Expressions, this property specifies the node expression that is evaluated when the sh:if has not returned true (as its only value)."@en ;
	rdfs:domain shnex:IfExpression ;
	rdfs:isDefinedBy shnex: ;
.


# InstancesOf Expressions -----------------------------------------------------

shnex:InstancesOfExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "InstancesOf expression"@en ;
	rdfs:comment "A SHACL node expression that returns the instances of a given class (and its transitive subclasses)."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:InstancesOfExpression-instancesOf ;
	rdfs:isDefinedBy shnex: ;
.
shnex:InstancesOfExpression-instancesOf
	a sh:Parameter ;
	sh:path shnex:instancesOf ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:instancesOf
	a rdf:Property ;
	rdfs:label "instances of"@en ;
	rdfs:comment "In InstancesOf Expressions, this property specifies the class of which the instances shall be returned."@en ;
	rdfs:domain shnex:InstancesOfExpression ;
	rdfs:range rdfs:Class ;
	rdfs:isDefinedBy shnex: ;
.


# Intersection Expressions ----------------------------------------------------

shnex:IntersectionExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Intersection expression"@en ;
	rdfs:comment "A SHACL node expression that can be used to returns the nodes that are found in the results of all the listed node expression."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:IntersectionExpression-intersection ;
	rdfs:isDefinedBy shnex: ;
.
shnex:IntersectionExpression-intersection
	a sh:Parameter ;
	sh:path shnex:intersection ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:intersection
	a rdf:Property ;
	rdfs:label "intersection"@en ;
	rdfs:comment "In Intersection Expressions, this property specifies the list of node expressions that shall be intersected."@en ;
	rdfs:domain shnex:IntersectionExpression ;
	rdfs:range rdf:List ;
	rdfs:isDefinedBy shnex: ;
.


# Limit Expressions -----------------------------------------------------------

shnex:LimitExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Limit expression"@en ;
	rdfs:comment "A SHACL node expression that returns the first X values of a given node expression (sh:nodes), where X is specified using sh:limit."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:LimitExpression-limit ;
	sh:parameter shnex:LimitExpression-nodes ;
	rdfs:isDefinedBy shnex: ;
.
shnex:LimitExpression-limit
	a sh:Parameter ;
	sh:path shnex:limit ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:LimitExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	rdfs:isDefinedBy shnex: ;
.
shnex:limit
	a rdf:Property ;
	rdfs:label "limit"@en ;
	rdfs:comment "In Limit Expressions, this property specifies the maximum number of nodes (sh:nodes) that shall be returned."@en ;
	rdfs:domain shnex:LimitExpression ;
	rdfs:range xsd:integer ;
	rdfs:isDefinedBy shnex: ;
.


# List Expressions ------------------------------------------------------------

shnex:ListExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "List expression"@en ;
	rdfs:comment "A SHACL node expression describing an RDF list, represented by a blank node with rdf:first and rdf:rest triples."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:ListExpression-first ;
	sh:parameter shnex:ListExpression-rest ;
	rdfs:isDefinedBy shnex: ;
.
shnex:ListExpression-first
	a sh:Parameter ;
	sh:path rdf:first ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:ListExpression-rest
	a sh:Parameter ;
	sh:path rdf:rest ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.


# MatchAll Expressions --------------------------------------------------------

shnex:MatchAllExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "MatchAll expression"@en ;
	rdfs:comment "A SHACL node expression that returns true if all nodes in a sequence satisfy a given predicate, false otherwise."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:MatchAllExpression-matchAll ;
	sh:parameter shnex:MatchAllExpression-nodes ;
	rdfs:isDefinedBy shnex: ;
.
shnex:MatchAllExpression-matchAll
	a sh:Parameter ;
	sh:path shnex:matchAll ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:MatchAllExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	sh:optional true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:matchAll
	a rdf:Property ;
	rdfs:label "matchAll"@en ;
	rdfs:comment "In MatchAll Expressions, this property specifies the shape that all input nodes must conform to."@en ;
	rdfs:domain shnex:MatchAllExpression ;
	rdfs:range sh:Shape ;
	rdfs:isDefinedBy shnex: ;
.


# Max Expressions -------------------------------------------------------------

shnex:MaxExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Max expression"@en ;
	rdfs:comment "A SHACL node expression that returns the largest of the nodes returned by a given node expression (sh:max)."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:MaxExpression-max ;
	rdfs:isDefinedBy shnex: ;
.
shnex:MaxExpression-max
	a sh:Parameter ;
	sh:path shnex:max ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:max
	a rdf:Property ;
	rdfs:label "max"@en ;
	rdfs:comment "In Max Expressions, this property specifies the node expression of which the maximum shall be returned."@en ;
	rdfs:domain shnex:MaxExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Min Expressions -------------------------------------------------------------

shnex:MinExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Min expression"@en ;
	rdfs:comment "A SHACL node expression that returns the smallest of the nodes returned by a given node expression (sh:min)."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:MinExpression-min ;
	rdfs:isDefinedBy shnex: ;
.
shnex:MinExpression-min
	a sh:Parameter ;
	sh:path shnex:min ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:min
	a rdf:Property ;
	rdfs:label "min"@en ;
	rdfs:comment "In Min Expressions, this property specifies the node expression of which the minimum shall be returned."@en ;
	rdfs:domain shnex:MinExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Nodes Matching Expressions --------------------------------------------------

shnex:NodesMatchingExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Nodes matching expression"@en ;
	rdfs:comment "A SHACL node expression that returns the nodes that conform to a given shape."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:NodesMatchingExpression-nodesMatching ;
	rdfs:isDefinedBy shnex: ;
.
shnex:NodesMatchingExpression-nodesMatching
	a sh:Parameter ;
	sh:path shnex:nodesMatching ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:nodesMatching
	a rdf:Property ;
	rdfs:label "nodes matching"@en ;
	rdfs:comment "In Nodes Matching Expressions, this property specifies the shape for which conforming nodes shall be returned."@en ;
	rdfs:domain shnex:NodesMatchingExpression ;
	rdfs:range sh:Shape ;
	rdfs:isDefinedBy shnex: ;
.


# Offset Expressions ----------------------------------------------------------

shnex:OffsetExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Offset expression"@en ;
	rdfs:comment "A SHACL node expression that skips the first X values of a given node expression (sh:nodes), where X is specified using sh:offset."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:OffsetExpression-offset ;
	sh:parameter shnex:OffsetExpression-nodes ;
	rdfs:isDefinedBy shnex: ;
.
shnex:OffsetExpression-offset
	a sh:Parameter ;
	sh:path shnex:offset ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:OffsetExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	rdfs:isDefinedBy shnex: ;
.
shnex:offset
	a rdf:Property ;
	rdfs:label "offset"@en ;
	rdfs:comment "In Offset Expressions, this property specifies the number of nodes (sh:nodes) that shall be skipped."@en ;
	rdfs:domain shnex:OffsetExpression ;
	rdfs:range xsd:integer ;
	rdfs:isDefinedBy shnex: ;
.


# Order By Expressions -----------------------------------------------------------

shnex:OrderByExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Order by expression"@en ;
	rdfs:comment "A SHACL node expression that returns the values of a given node expression (sh:nodes) but sorted according to another node expression (sh:orderBy)."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:OrderByExpression-desc ;
	sh:parameter shnex:OrderByExpression-nodes ;
	sh:parameter shnex:OrderByExpression-orderBy ;
	rdfs:isDefinedBy shnex: ;
.
shnex:OrderByExpression-desc
	a sh:Parameter ;
	sh:path shnex:desc ;
	sh:datatype xsd:boolean ;
	sh:optional true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:OrderByExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	rdfs:isDefinedBy shnex: ;
.
shnex:OrderByExpression-orderBy
	a sh:Parameter ;
	sh:path shnex:orderBy ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:desc
	a rdf:Property ;
	rdfs:label "desc"@en ;
	rdfs:comment "In Order By Expressions, when this property is true, the results will be returned in descending order."@en ;
	rdfs:domain shnex:OrderByExpression ;
	rdfs:range xsd:boolean ;
	rdfs:isDefinedBy shnex: ;
.
shnex:orderBy
	a rdf:Property ;
	rdfs:label "remove"@en ;
	rdfs:comment "In Order By Expressions, this property specifies the node expression that produces the values that shall be used to compare the input nodes (sh:nodes)."@en ;
	rdfs:domain shnex:OrderByExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Path Values Expressions -----------------------------------------------------

shnex:PathValuesExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Path values expression"@en ;
	rdfs:comment "A SHACL node expression that returns the values of a given property path at the current focus node, or a computed focus node."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:PathValuesExpression-pathValues ;
	sh:parameter shnex:PathValuesExpression-focusNode ;
	rdfs:isDefinedBy shnex: ;
.
shnex:PathValuesExpression-pathValues
	a sh:Parameter ;
	sh:path shnex:pathValues ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:PathValuesExpression-focusNode
	a sh:Parameter ;
	sh:path shnex:focusNode ;
	sh:name "focus node"@en ;
	sh:description "An optional node expression that produces the focus node."@en ;
	sh:optional true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:pathValues
	a rdf:Property ;
	rdfs:label "path values"@en ;
	rdfs:comment "In Path Values Expressions, this property specifies the property path."@en ;
	rdfs:domain shnex:PathValuesExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Remove Expressions -----------------------------------------------------------

shnex:RemoveExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Remove expression"@en ;
	rdfs:comment "A SHACL node expression that returns the values of a given node expression (sh:nodes) except for those returned by another node expression (sh:remove)."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:RemoveExpression-remove ;
	sh:parameter shnex:RemoveExpression-nodes ;
	rdfs:isDefinedBy shnex: ;
.
shnex:RemoveExpression-remove
	a sh:Parameter ;
	sh:path shnex:remove ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:RemoveExpression-nodes
	a sh:Parameter ;
	sh:path shnex:nodes ;
	sh:name "nodes"@en ;
	sh:description "A node expression that produces the input nodes."@en ;
	rdfs:isDefinedBy shnex: ;
.
shnex:remove
	a rdf:Property ;
	rdfs:label "remove"@en ;
	rdfs:comment "In Remove Expressions, this property specifies the node expression that produces the values that shall be removed from the input nodes (sh:nodes)."@en ;
	rdfs:domain shnex:RemoveExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Sum Expressions -------------------------------------------------------------

shnex:SumExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Sum expression"@en ;
	rdfs:comment "A SHACL node expression that returns the sum of the nodes returned by a given node expression (sh:sum)."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:SumExpression-sum ;
	rdfs:isDefinedBy shnex: ;
.
shnex:SumExpression-sum
	a sh:Parameter ;
	sh:path shnex:sum ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:sum
	a rdf:Property ;
	rdfs:label "sum"@en ;
	rdfs:comment "In Sum Expressions, this property specifies the node expression of which the sum shall be returned."@en ;
	rdfs:domain shnex:SumExpression ;
	rdfs:isDefinedBy shnex: ;
.


# Var Expressions -------------------------------------------------------------

shnex:VarExpression
	a sh:NamedParameterExpressionFunction ;
	rdfs:label "Var expression"@en ;
	rdfs:comment "A SHACL node expression that can be used to get the value of a variable such as 'focusNode'."@en ;
	rdfs:subClassOf sh:NamedParameterExpression ;
	sh:parameter shnex:VarExpression-var ;
	rdfs:isDefinedBy shnex: ;
.
shnex:VarExpression-var
	a sh:Parameter ;
	sh:path shnex:var ;
	sh:datatype xsd:string ;
	sh:keyParameter true ;
	rdfs:isDefinedBy shnex: ;
.
shnex:var
	a rdf:Property ;
	rdfs:label "var"@en ;
	rdfs:comment "In Var Expressions, this property specifies the name of the variable to get."@en ;
	rdfs:isDefinedBy shnex: ;
	rdfs:domain shnex:VarExpression ;
	rdfs:range xsd:string ;
.
