Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
# baseURI: http://topbraid.org/tosh
# imports: http://datashapes.org/dash
# prefix: tosh
@prefix dash: .
@prefix owl: .
@prefix rdf: .
@prefix rdfs: .
@prefix sh: .
@prefix swa: .
@prefix tosh: .
@prefix xsd: .
dash:
tosh:systemNamespace true ;
.
dash:ClosedByTypesConstraintComponent-closedByTypes
sh:group tosh:OtherConstraintPropertyGroup ;
.
dash:CoExistsWithConstraintComponent-coExistsWith
sh:group tosh:PropertyPairConstraintPropertyGroup ;
sh:order "10"^^xsd:decimal ;
.
dash:HasValueWithClassConstraintComponent-hasValueWithClass
sh:group tosh:OtherConstraintPropertyGroup ;
.
dash:NonRecursiveConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
.
dash:NonRecursiveConstraintComponent-nonRecursive
sh:group tosh:RelationshipPropertyGroup ;
.
dash:PrimaryKeyConstraintComponent-uriStart
tosh:editWidget swa:PlainTextFieldEditor ;
sh:group tosh:PrimaryKeyPropertyGroup ;
.
dash:RootClassConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
.
dash:StemConstraintComponent-stem
sh:group tosh:StringBasedConstraintPropertyGroup ;
.
dash:SymmetricConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Add symmetric value." ;
sh:order "0"^^xsd:decimal ;
sh:prefixes ;
sh:update """INSERT {
$value $predicate $focusNode .
}
WHERE {
}""" ;
] ;
.
dash:SymmetricConstraintComponent-symmetric
sh:group tosh:RelationshipPropertyGroup ;
.
tosh:systemNamespace true ;
.
tosh:systemNamespace true ;
.
tosh:systemNamespace true ;
.
a owl:Ontology ;
rdfs:comment """A collection of SHACL features that are used whenever SHACL graphs are used within TopBraid Suite products. This includes things like suggested PropertyGroups and Shapes that control the layout of forms. Some of these may be of general use outside of TopBraid too.
This namespace also includes the function tosh:hasShape, which can be used to implement some advanced constraint components using SPARQL only.""" ;
rdfs:label "TopBraid Data Shapes Library" ;
owl:imports ;
sh:declare [
a sh:PrefixDeclaration ;
sh:namespace "http://jena.hpl.hp.com/ARQ/function#"^^xsd:anyURI ;
sh:prefix "afn" ;
] ;
sh:declare [
a sh:PrefixDeclaration ;
sh:namespace "http://spinrdf.org/spif#"^^xsd:anyURI ;
sh:prefix "spif" ;
] ;
sh:declare [
a sh:PrefixDeclaration ;
sh:namespace "http://topbraid.org/sparqlmotionfunctions#"^^xsd:anyURI ;
sh:prefix "smf" ;
] ;
sh:declare [
a sh:PrefixDeclaration ;
sh:namespace "http://topbraid.org/tosh#"^^xsd:anyURI ;
sh:prefix "tosh" ;
] ;
.
tosh:
tosh:systemNamespace true ;
.
tosh:AboutPropertyGroup
a sh:PropertyGroup ;
rdfs:label "This Shape" ;
sh:order 0 ;
.
tosh:CardinalityConstraintPropertyGroup
a sh:PropertyGroup ;
rdfs:label "Number of Values" ;
sh:order 2 ;
.
tosh:ComplexConstraintPropertyGroup
a sh:PropertyGroup ;
tosh:editGroupDescription "Most edit fields in this section currently require Turtle source code, esp to enter blank node expressions. To reference existing shapes via their URI, enter them as ." ;
tosh:openable true ;
rdfs:label "Complex Constraint Expressions" ;
sh:order 9 ;
.
tosh:ConstraintMetadataPropertyGroup
a sh:PropertyGroup ;
rdfs:label "Constraint Metadata" ;
.
tosh:DeleteTripleSuggestionGenerator
a dash:SPARQLUpdateSuggestionGenerator ;
rdfs:comment "Produces a suggestion that would delete the offending value in the validation result from the focus node." ;
rdfs:label "Delete triple suggestion generator" ;
sh:message "Delete the invalid statement" ;
sh:order 100 ;
sh:update """DELETE {
$focusNode $predicate $value .
}
WHERE {
$focusNode $predicate $value .
}""" ;
.
tosh:DisplayPropertyGroup
a sh:PropertyGroup ;
rdfs:comment "A group for properties that are primarily for display purposes (names, ordering etc)." ;
rdfs:label "Display Settings" ;
sh:order 1 ;
.
tosh:InferencesPropertyGroup
a sh:PropertyGroup ;
tosh:openable true ;
rdfs:label "Inferences" ;
sh:order "11"^^xsd:decimal ;
.
tosh:MemberShapeConstraintComponent
a sh:ConstraintComponent ;
rdfs:comment "Can be used to specify constraints on the members of a given list, assuming that the given sh:property has rdf:Lists as values. A violation is reported for each member of the list that does not comply with the constraints specified by the given shape." ;
rdfs:label "Member shape constraint component" ;
sh:parameter tosh:MemberShapeConstraintComponent-memberShape ;
sh:propertyValidator [
a sh:SPARQLSelectValidator ;
sh:message "List member {?member} does not have the shape {$memberShape}" ;
sh:prefixes ;
sh:select """
SELECT DISTINCT $this ?value ?failure ?member
WHERE {
$this $PATH ?value .
?value rdf:rest*/rdf:first ?member .
BIND (tosh:hasShape(?member, $memberShape) AS ?hasShape) .
BIND (!bound(?hasShape) AS ?failure) .
FILTER (?failure || !?hasShape) .
}
""" ;
] ;
sh:targetClass sh:PropertyShape ;
.
tosh:MemberShapeConstraintComponent-memberShape
a sh:Parameter ;
sh:path tosh:memberShape ;
sh:class sh:Shape ;
sh:description "The shape that the list members must have." ;
sh:name "member shape" ;
.
tosh:OtherConstraintPropertyGroup
a sh:PropertyGroup ;
tosh:openable true ;
rdfs:label "Other Constraints" ;
sh:order 10 ;
.
tosh:PrimaryKeyPropertyGroup
a sh:PropertyGroup ;
tosh:openable true ;
rdfs:label "Primary Key" ;
sh:order 6.5 ;
.
tosh:PropertyGroupShape
a sh:NodeShape ;
rdfs:label "Property group shape" ;
sh:property [
sh:path sh:order ;
sh:maxCount 1 ;
] ;
sh:targetClass sh:PropertyGroup ;
.
tosh:PropertyPairConstraintPropertyGroup
a sh:PropertyGroup ;
tosh:openable true ;
rdfs:label "Relationship to Other Properties" ;
sh:order 6 ;
.
tosh:PropertyShapeShape
a sh:NodeShape ;
rdfs:label "Property shape shape" ;
sh:property [
a sh:PropertyShape ;
sh:path dash:detailsEndpoint ;
sh:datatype xsd:string ;
sh:group tosh:RemoteValuesPropertyGroup ;
sh:maxCount 1 ;
sh:order "0"^^xsd:decimal ;
] ;
sh:property [
a sh:PropertyShape ;
sh:path sh:values ;
tosh:editWidget swa:SourceCodeEditor ;
tosh:viewWidget ;
sh:group tosh:InferencesPropertyGroup ;
sh:name "values" ;
sh:order "1"^^xsd:decimal ;
sh:sparql [
sh:message "sh:values must be accompanied by a sh:path that is an IRI." ;
sh:prefixes ;
sh:select """SELECT $this ?value
WHERE {
$this $PATH ?value .
FILTER NOT EXISTS {
$this sh:path ?path .
FILTER isIRI(?path)
}
}""" ;
] ;
] ;
sh:property [
sh:path tosh:editWidget ;
tosh:editWidget swa:WidgetDropDownEditor ;
tosh:viewWidget swa:ResourceInUIGraphViewer ;
sh:description "The swa:ObjectEditorClass that shall be used to edit values of this predicate." ;
sh:group tosh:DisplayPropertyGroup ;
sh:maxCount 1 ;
sh:name "edit widget" ;
sh:nodeKind sh:IRI ;
sh:order 21 ;
] ;
sh:property [
sh:path tosh:searchWidget ;
tosh:editWidget swa:WidgetDropDownEditor ;
tosh:viewWidget swa:ResourceInUIGraphViewer ;
sh:description "The swa:ObjectFacetClass that shall be used to search for values of this predicate." ;
sh:group tosh:DisplayPropertyGroup ;
sh:maxCount 1 ;
sh:name "search widget" ;
sh:nodeKind sh:IRI ;
sh:order 22 ;
] ;
sh:property [
sh:path tosh:viewWidget ;
tosh:editWidget swa:WidgetDropDownEditor ;
tosh:viewWidget swa:ResourceInUIGraphViewer ;
sh:description "The swa:ObjectViewerClass that shall be used to view values of this predicate." ;
sh:group tosh:DisplayPropertyGroup ;
sh:maxCount 1 ;
sh:name "view widget" ;
sh:nodeKind sh:IRI ;
sh:order 20 ;
] ;
sh:property [
sh:path sh:defaultValue ;
tosh:editWidget ;
tosh:useDeclaredDatatype true ;
tosh:viewWidget ;
sh:description "The default value to be used for this property if no other value has been asserted. This may be a constant value or a SHACL node expression, in which case the values can be derived from other values. Default values are typically inferred and not stored as RDF statements." ;
sh:group tosh:ValueTypeConstraintPropertyGroup ;
] ;
sh:property [
sh:path sh:description ;
tosh:editWidget swa:TextAreaEditor ;
sh:description "A human-readable description of the role of the property in the constraint." ;
sh:group tosh:DisplayPropertyGroup ;
sh:name "description" ;
sh:order 2 ;
] ;
sh:property [
sh:path sh:disjoint ;
sh:group tosh:PropertyPairConstraintPropertyGroup ;
sh:order 1 ;
] ;
sh:property [
sh:path sh:equals ;
sh:group tosh:PropertyPairConstraintPropertyGroup ;
sh:order 0 ;
] ;
sh:property [
sh:path sh:group ;
sh:description "The sh:PropertyGroup that the property belongs to." ;
sh:group tosh:DisplayPropertyGroup ;
sh:maxCount 1 ;
sh:name "group" ;
sh:order 10 ;
] ;
sh:property [
sh:path sh:lessThan ;
sh:group tosh:PropertyPairConstraintPropertyGroup ;
sh:order 2 ;
] ;
sh:property [
sh:path sh:lessThanOrEquals ;
sh:group tosh:PropertyPairConstraintPropertyGroup ;
sh:order 3 ;
] ;
sh:property [
sh:path sh:name ;
tosh:editWidget swa:TextFieldEditorWithLang ;
sh:description "The display name of the property." ;
sh:group tosh:DisplayPropertyGroup ;
sh:name "name" ;
sh:order 1 ;
] ;
sh:property [
sh:path sh:order ;
sh:description "The relative position of the property among its peers, e.g. a property with order 5 shows up before one with order 6." ;
sh:group tosh:DisplayPropertyGroup ;
sh:maxCount 1 ;
sh:name "order" ;
sh:order 11 ;
] ;
sh:property [
sh:path sh:path ;
tosh:editWidget ;
tosh:viewWidget ;
sh:group tosh:AboutPropertyGroup ;
sh:maxCount 1 ;
sh:minCount 1 ;
sh:name "on property" ;
sh:order 0 ;
] ;
sh:sparql [
sh:message "Property shapes cannot have both class and datatype constraints." ;
sh:prefixes ;
sh:select """SELECT $this
WHERE {
FILTER EXISTS {
$this sh:class ?class .
$this sh:datatype ?datatype .
}
}""" ;
] ;
sh:targetClass sh:PropertyShape ;
.
tosh:RelationshipPropertyGroup
a sh:PropertyGroup ;
tosh:openable true ;
rdfs:label "Relationship" ;
sh:order 8 ;
.
tosh:RemoteValuesPropertyGroup
a sh:PropertyGroup ;
rdfs:label "Remote Values" ;
sh:order "12"^^xsd:decimal ;
.
tosh:ReplaceWithDefaultValueSuggestionGenerator
a dash:SPARQLUpdateSuggestionGenerator ;
rdfs:comment "Produces a suggestion to replace all values of the given predicate (which must exist) at the focus node to the default value declared at the shape that has caused the violation. Does nothing if the shape does not declare a sh:defaultValue. Deletes any old value of the property." ;
rdfs:label "Replace with default value suggestion generator" ;
sh:message "Replace with default value" ;
sh:prefixes ;
sh:select """SELECT ?defaultValue
WHERE {
GRAPH $shapesGraph {
$sourceShape sh:defaultValue ?defaultValue .
}
}""" ;
sh:update """DELETE {
$focusNode $predicate ?oldValue .
}
INSERT {
$focusNode $predicate ?defaultValue .
}
WHERE {
$focusNode $predicate ?oldValue .
}""" ;
.
tosh:SetToDefaultValueSuggestionGenerator
a dash:SPARQLUpdateSuggestionGenerator ;
rdfs:comment "Produces a suggestion to set the given predicate at the focus node to the default value declared at the shape that has caused the violation. Does nothing if the shape does not declare a sh:defaultValue. Deletes any old value of the property." ;
rdfs:label "Set to default value suggestion generator" ;
sh:message "Set to default value" ;
sh:prefixes ;
sh:select """SELECT ?defaultValue
WHERE {
GRAPH $shapesGraph {
$sourceShape sh:defaultValue ?defaultValue .
}
}""" ;
sh:update """DELETE {
$focusNode $predicate ?oldValue .
}
INSERT {
$focusNode $predicate ?defaultValue .
}
WHERE {
OPTIONAL {
$focusNode $predicate ?oldValue .
}
}""" ;
.
tosh:ShapeInGraphConstraintComponent
a sh:ConstraintComponent ;
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
rdfs:comment "A constraint component that can be used to verify that the value nodes have a given shape, where the shape validation is executed in a given graph. This can, for example, be used to verify that a given value is declared as an instance of a given class in some specified (not imported) graph." ;
rdfs:label "Shape in graph constraint component" ;
sh:labelTemplate "Values must have shape {$shapeInGraph} defined in graph {$graph}" ;
sh:message "Value does not have shape {$shapeInGraph} defined in graph {$graph}" ;
sh:parameter [
sh:path tosh:graph ;
sh:nodeKind sh:IRI ;
] ;
sh:parameter [
sh:path tosh:shapeInGraph ;
sh:nodeKind sh:BlankNodeOrIRI ;
] ;
sh:validator [
a sh:SPARQLAskValidator ;
sh:ask """ASK {
GRAPH $graph {
FILTER tosh:hasShape($value, $shapeInGraph)
}
}""" ;
sh:prefixes ;
] ;
.
tosh:ShapeShape
a sh:NodeShape ;
rdfs:label "Shape of shapes" ;
sh:property tosh:ShapeShape-deactivated ;
sh:property tosh:ShapeShape-severity ;
sh:sparql [
rdfs:comment "Checks that no shape or class has more than one property shape declaring a dash:uriStart." ;
sh:message "Multiple primary key (URI start) statements at the same shape" ;
sh:prefixes ;
sh:select """SELECT $this
WHERE {
$this sh:property ?ps .
?ps dash:uriStart ?uriStart .
$this rdfs:subClassOf*/sh:property ?other .
FILTER (?other != ?ps) .
FILTER EXISTS {
?other dash:uriStart ?otherURIStart .
}
}""" ;
] ;
sh:targetClass sh:Shape ;
.
tosh:ShapeShape-deactivated
a sh:PropertyShape ;
sh:path sh:deactivated ;
sh:description "Can be used to deactivate the whole constraint." ;
sh:group tosh:AboutPropertyGroup ;
sh:maxCount 1 ;
sh:name "deactivated" ;
sh:order "1"^^xsd:decimal ;
.
tosh:ShapeShape-severity
a sh:PropertyShape ;
sh:path sh:severity ;
tosh:editWidget swa:InstancesSelectEditor ;
sh:class sh:Severity ;
sh:description "The severity to be used for validation results produced by the associated constraint." ;
sh:group tosh:AboutPropertyGroup ;
sh:maxCount 1 ;
sh:name "severity" ;
sh:order "2"^^xsd:decimal ;
.
tosh:StringBasedConstraintPropertyGroup
a sh:PropertyGroup ;
tosh:openable true ;
rdfs:label "Constraints for Strings and Text" ;
sh:order 7 ;
.
tosh:SystemNamespaceShape
a sh:NodeShape ;
rdfs:comment "A shape that detects whether the focus node is a URI that has a namespace from one of the system namespaces - RDF, RDFS, OWL etc. The list of actual system namespaces is represented via tosh:systemNamespace true triples." ;
rdfs:label "System namespace shape" ;
sh:sparql [
a sh:SPARQLConstraint ;
sh:message "Not a IRI from a system namespace" ;
sh:prefixes ;
sh:select """SELECT $this
WHERE {
FILTER (!isIRI($this) ||
(isIRI($this) && EXISTS {
BIND (IRI(afn:namespace($this)) AS ?ns) .
FILTER NOT EXISTS { ?ns tosh:systemNamespace true } .
} )) .
}""" ;
] ;
.
tosh:TeamworkPlatform
a dash:ExecutionPlatform ;
dash:includedExecutionPlatform tosh:TopBraidPlatform ;
rdfs:comment "The platform consisting of TopBraid plus any teamwork features used by TopBraid EDG." ;
rdfs:label "Teamwork platform" ;
.
tosh:TopBraidPlatform
a dash:ExecutionPlatform ;
rdfs:comment "The platform consisting of TopBraid." ;
rdfs:label "TopBraid platform" ;
.
tosh:UseDeclaredDatatypeConstraintComponent
a sh:ConstraintComponent ;
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Change datatype of the invalid value to the specified sh:datatype" ;
sh:prefixes ;
sh:update """DELETE {
$subject $predicate $object .
}
INSERT {
$subject $predicate ?newObject .
}
WHERE {
$subject sh:datatype ?datatype .
BIND (spif:cast(?object, ?datatype) AS ?newObject) .
}""" ;
] ;
rdfs:comment "Constrains the value nodes to be either non-literals or literals that have the same datatype as the declared sh:datatype for the given constraint node. This is used, among others, in properties such as sh:hasValue and sh:minExclusive." ;
rdfs:label "Use declared datatype constraint component" ;
sh:parameter [
sh:path tosh:useDeclaredDatatype ;
sh:datatype xsd:boolean ;
sh:description "True to state that the datatype of literal values must be the same as the declared sh:datatype." ;
sh:name "use declared datatype" ;
] ;
sh:propertyValidator [
a sh:SPARQLSelectValidator ;
sh:message "Datatype must match the declared datatype {?datatype}" ;
sh:prefixes ;
sh:select """
SELECT DISTINCT $this ?value ?datatype
WHERE {
{
FILTER ($useDeclaredDatatype)
}
$this sh:datatype ?datatype .
$this $PATH ?value .
FILTER (isLiteral(?value) && datatype(?value) != ?datatype) .
}""" ;
] ;
sh:targetClass sh:PropertyShape ;
.
tosh:ValueRangeConstraintPropertyGroup
a sh:PropertyGroup ;
tosh:openable true ;
rdfs:label "Min/Max Values" ;
sh:order 5 ;
.
tosh:ValueTypeConstraintPropertyGroup
a sh:PropertyGroup ;
tosh:editGroupDescription "Hint: Use \"or\" under Complex Constraints to represent choices between multiple value types." ;
rdfs:comment "A property group for constraint parameters that restrict the value types of values." ;
rdfs:label "Type of Values" ;
sh:order 3 ;
.
tosh:closed
a rdf:Property ;
a owl:DeprecatedProperty ;
rdfs:comment "If set to true, then the corresponding form section will be closed by default." ;
rdfs:domain sh:PropertyGroup ;
rdfs:label "closed" ;
rdfs:range xsd:boolean ;
.
tosh:countShapesWithMatchResult
a sh:SPARQLFunction ;
rdfs:comment "Counts the number of shapes from a given rdf:List (?arg2) defined in a given shapes graph (?arg3) where tosh:hasShape returns the provided match value (true or false, ?arg4) for a given focus node (?arg1). The function produces a failure if one of the shapes validated to a failure." ;
rdfs:label "count shapes with match result" ;
sh:parameter [
sh:path sh:expectedValue ;
sh:datatype xsd:boolean ;
sh:description "The expected value of tosh:hasShape to count." ;
sh:order 3 ;
] ;
sh:parameter [
sh:path sh:focusNode ;
sh:class rdfs:Resource ;
sh:description "The focus node." ;
sh:order 0 ;
] ;
sh:parameter [
sh:path sh:shapes ;
sh:class rdf:List ;
sh:description "The list of shapes to walk through." ;
sh:order 1 ;
] ;
sh:parameter [
sh:path sh:shapesGraph ;
sh:class rdfs:Resource ;
sh:description "The shapes graph." ;
sh:order 2 ;
] ;
sh:prefixes ;
sh:returnType xsd:integer ;
sh:select """
# The SUM will fail with an error if one of the operands is not a number
# (this mechanism is used to propagate errors from tosh:hasShape calls)
SELECT (SUM(?s) AS ?result)
WHERE {
GRAPH $shapesGraph {
$shapes rdf:rest*/rdf:first ?shape .
}
BIND (tosh:hasShape($focusNode, ?shape, true) AS ?hasShape) .
BIND (IF(bound(?hasShape), IF(?hasShape = $expectedValue, 1, 0), 'error') AS ?s) .
}
""" ;
.
tosh:editGroupDescription
a rdf:Property ;
rdfs:comment "A description of the property group when in \"edit\" mode." ;
rdfs:domain sh:PropertyGroup ;
rdfs:label "edit group description" ;
rdfs:range xsd:string ;
.
tosh:editWidget
a rdf:Property ;
rdfs:label "edit widget" ;
rdfs:range swa:ObjectEditorClass ;
.
tosh:graph
a rdf:Property ;
rdfs:comment "The graph that the shape is validated in." ;
rdfs:label "graph" ;
.
tosh:hasDatatype
a sh:SPARQLAskValidator ;
rdfs:comment "Checks whether a given node ($value) is a literal with a given datatype ($datatype), and that the literal is well-formed." ;
rdfs:label "has datatype" ;
sh:ask """
ASK {
FILTER (datatype($value) = $datatype && spif:isValidForDatatype($value, $datatype)) .
}
""" ;
sh:prefixes ;
.
tosh:hasShape
a sh:Function ;
rdfs:comment """A built-in function of the TopBraid SHACL implementation.
Can be used to validate a given (focus) node against a given shape,
returning true if the node is valid.
If executed within a SHACL validation engine, this uses the shapes graph that was provided when the engine started.
If executed in other contexts, e.g. in a stand-alone SPARQL query, the function attempts to use the URI of the current
default graph as the shapes graph. This may not always be supported. If called from within an SWP engine, the
shapes graph is the current query graph."""^^rdf:HTML ;
rdfs:label "has shape" ;
sh:parameter [
sh:path tosh:node ;
sh:description "The node to validate." ;
] ;
sh:parameter [
sh:path tosh:shape ;
sh:description "The shape that the node is supposed to have." ;
] ;
sh:returnType xsd:boolean ;
.
tosh:isInTargetOf
a sh:Function ;
rdfs:comment "Checks whether a given node is in the target of a given shape." ;
rdfs:label "is in target of" ;
sh:parameter [
sh:path tosh:node ;
sh:description "The node to check." ;
sh:name "node" ;
] ;
sh:parameter [
sh:path tosh:shape ;
sh:class sh:Shape ;
sh:description "The shape that the node is supposed to be in the target of." ;
sh:name "shape" ;
] ;
sh:returnType xsd:boolean ;
.
tosh:isSystemResource
a sh:SPARQLFunction ;
rdfs:comment "Checks if a given resource is from a namespace that is marked with tosh:systemNamespace true." ;
rdfs:label "is system resource" ;
sh:ask """ASK {
BIND (IRI(afn:namespace($resource)) AS ?namespace) .
FILTER (bound(?namespace) && EXISTS {
?namespace tosh:systemNamespace true .
})
}""" ;
sh:parameter [
a sh:Parameter ;
sh:path tosh:resource ;
sh:description "The node to check." ;
sh:name "resource" ;
sh:nodeKind sh:BlankNodeOrIRI ;
] ;
sh:prefixes ;
sh:returnType xsd:boolean ;
.
tosh:open
a rdf:Property ;
a owl:DeprecatedProperty ;
rdfs:comment """DEPRECATED: This flag is only used by SWA forms. With the new forms of 6.2 onwards, all form sections are open by default, but you can use tosh:closed to state otherwise.
If set to true, then the corresponding form section will be open by default. This only has an effect if sh:openable is set to true as well.""" ;
rdfs:label "open" ;
rdfs:range xsd:boolean ;
.
tosh:openable
a rdf:Property ;
a owl:DeprecatedProperty ;
rdfs:comment """DEPRECATED - this was only used by the SWA-based forms that were default before 6.2. In the new forms, all sections are openable.
If set to true, then the corresponding form section shall be openable/closable (and show up closed).""" ;
rdfs:label "openable" ;
rdfs:range xsd:boolean ;
.
tosh:searchWidget
a rdf:Property ;
rdfs:label "search widget" ;
rdfs:range swa:ObjectFacetClass ;
.
tosh:shaclExists
a sh:Function ;
rdfs:comment "Checks whether the current query graph has SHACL activated, i.e. imports the triples typically found in the SHACL namespace. This is currently relying on an approximation, only certain triples, and is natively implemented for TopBraid. Future versions may expose the actual logic as a SPARQL query." ;
rdfs:label "SHACL exists" ;
sh:returnType xsd:boolean ;
.
tosh:shapeInGraph
a rdf:Property ;
rdfs:comment "The shape that the value nodes must have." ;
rdfs:label "shape in graph" ;
.
tosh:systemNamespace
a rdf:Property ;
rdfs:comment "Can be used to mark namespace resources (subjects) to count as \"system namespace\" that should be filtered by tosh:SystemNamespaceShape. Search for the usage of this predicate for examples. Anyone can add their own namespaces to their graphs." ;
rdfs:label "system namespace" ;
rdfs:range xsd:boolean ;
.
tosh:validatorForContext
a sh:SPARQLFunction ;
rdfs:comment "Gets a suitable validator for a given context, following the resolution rules from the spec." ;
rdfs:label "validator for context" ;
sh:parameter [
sh:path tosh:component ;
sh:class sh:ConstraintComponent ;
sh:description "The constraint component." ;
sh:name "component" ;
] ;
sh:parameter [
sh:path tosh:context ;
sh:class rdfs:Class ;
sh:description "The context, e.g. sh:PropertyShape." ;
sh:name "context" ;
] ;
sh:prefixes ;
sh:returnType sh:Validator ;
sh:select """
SELECT ?validator
WHERE {
{
BIND (IF($context = sh:PropertyShape, sh:propertyValidator, sh:nodeValidator) AS ?predicate) .
}
OPTIONAL {
$component ?predicate ?specialized .
}
OPTIONAL {
$component sh:validator ?default .
}
BIND (COALESCE(?specialized, ?default) AS ?validator) .
}""" ;
.
tosh:valuesWithShapeCount
a sh:SPARQLFunction ;
rdfs:comment "Counts the number of values from a given subject (?arg1) / predicate (?arg2) combination that do not produce any error-level constraint violations for a given shape (?arg3) in a given shapes graph (?arg4). The function produces an error if one of the shapes validated to a fatal error." ;
rdfs:label "values with shape count" ;
sh:parameter [
sh:path dash:arg1 ;
sh:class rdfs:Resource ;
sh:description "The subject to count the values of." ;
] ;
sh:parameter [
sh:path dash:arg2 ;
sh:class rdf:Property ;
sh:description "The property to count the values of." ;
] ;
sh:parameter [
sh:path dash:arg3 ;
sh:class sh:Shape ;
sh:description "The shape to validate." ;
] ;
sh:prefixes ;
sh:returnType xsd:integer ;
sh:select """
# The SUM will fail with an error if one of the operands is not a number
# (this mechanism is used to propagate errors from tosh:hasShape calls)
SELECT (SUM(?s) AS ?result)
WHERE {
{
FILTER NOT EXISTS { $arg1 $arg2 ?value }
BIND (0 AS ?s)
}
UNION {
FILTER EXISTS { $arg1 $arg2 ?value }
$arg1 $arg2 ?value .
BIND (tosh:hasShape(?value, $arg3, true) AS ?hasShape) .
BIND (IF(bound(?hasShape), IF(?hasShape, 1, 0), 'error') AS ?s) .
}
}
""" ;
.
tosh:viewGadget
a rdf:Property ;
rdfs:comment """Can link a property shape with a UI gadget that shall be used to render property values on forms (in viewing mode). In contrast to tosh:viewWidget which is about individual values only, a gadget is expected to take full control, i.e. it needs to make all necessary decisions to render the values appropriately. The gadget is parameterized with the focus node and the path.
This property is currently only supported at property groups and then applies to all properties in that group.""" ;
rdfs:label "view gadget" ;
rdfs:range rdfs:Resource ;
.
tosh:viewGroupDescription
a rdf:Property ;
rdfs:comment "A description of the property group when in \"view\" mode." ;
rdfs:domain sh:PropertyGroup ;
rdfs:label "view group description" ;
rdfs:range xsd:string ;
.
tosh:viewWidget
a rdf:Property ;
rdfs:label "view widget" ;
rdfs:range swa:ObjectViewerClass ;
.
rdf:
tosh:systemNamespace true ;
.
rdfs:
tosh:systemNamespace true ;
.
xsd:
tosh:systemNamespace true ;
.
owl:
tosh:systemNamespace true ;
.
sh:
tosh:systemNamespace true ;
.
sh:AndConstraintComponent
sh:nodeValidator [
a sh:SPARQLSelectValidator ;
sh:prefixes ;
sh:select """
SELECT $this ?failure ($this AS ?value)
WHERE {
BIND (tosh:countShapesWithMatchResult($this, $and, $shapesGraph, false) AS ?count)
BIND (!bound(?count) AS ?failure) .
FILTER IF(?failure, true, ?count > 0) .
}
""" ;
] ;
sh:propertyValidator [
a sh:SPARQLSelectValidator ;
sh:prefixes ;
sh:select """
SELECT DISTINCT $this ?value ?failure
WHERE {
$this $PATH ?value .
BIND (tosh:countShapesWithMatchResult(?value, $and, $shapesGraph, false) AS ?count)
BIND (!bound(?count) AS ?failure) .
FILTER IF(?failure, true, ?count > 0) .
}
""" ;
] ;
.
sh:AndConstraintComponent-and
tosh:editWidget swa:SourceCodeEditor ;
tosh:viewWidget swa:SourceCodeViewer ;
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:order 11 ;
.
sh:ClassConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
dash:propertySuggestionGenerator tosh:ReplaceWithDefaultValueSuggestionGenerator ;
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Set type of {$value} to {$class}" ;
sh:prefixes ;
sh:select """SELECT ?class
WHERE {
GRAPH $shapesGraph {
$sourceShape sh:class ?class .
}
FILTER NOT EXISTS {
?class dash:abstract true .
}
}""" ;
sh:update """DELETE {
$value rdf:type ?oldType .
}
INSERT {
$value rdf:type $class .
}
WHERE {
OPTIONAL {
$value rdf:type ?oldType .
}
}""" ;
] ;
.
sh:ClassConstraintComponent-class
sh:group tosh:ValueTypeConstraintPropertyGroup ;
sh:order 2 ;
.
sh:ClosedConstraintComponent-closed
sh:group tosh:OtherConstraintPropertyGroup ;
sh:order "0"^^xsd:decimal ;
.
sh:ClosedConstraintComponent-ignoredProperties
sh:group tosh:OtherConstraintPropertyGroup ;
sh:order "1"^^xsd:decimal ;
.
sh:DatatypeConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
dash:propertySuggestionGenerator tosh:ReplaceWithDefaultValueSuggestionGenerator ;
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Change the datatype of the invalid value to {$datatype}" ;
sh:order -2 ;
sh:prefixes ;
sh:update """DELETE {
$focusNode $predicate $value .
}
INSERT {
$focusNode $predicate ?newValue .
}
WHERE {
BIND (spif:invoke($datatype, str($value)) AS ?newValue) .
FILTER bound(?newValue) .
}""" ;
] ;
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Convert the invalid date/time value into a date value" ;
sh:order -1 ;
sh:prefixes ;
sh:update """DELETE {
$subject $predicate $object
}
INSERT {
$subject $predicate ?newObject .
}
WHERE {
{
FILTER (datatype($object) = xsd:dateTime && $datatype = xsd:date) .
}
BIND (xsd:date(substr(str($object), 1, 10)) AS ?newObject) .
FILTER bound(?newObject) .
}""" ;
] ;
sh:validator tosh:hasDatatype ;
.
sh:DatatypeConstraintComponent-datatype
tosh:editWidget ;
sh:class rdfs:Datatype ;
sh:group tosh:ValueTypeConstraintPropertyGroup ;
sh:maxCount 1 ;
sh:order 1 ;
.
sh:DisjointConstraintComponent-disjoint
sh:deactivated true ;
.
sh:EqualsConstraintComponent-equals
sh:deactivated true ;
.
sh:HasValueConstraintComponent
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Add {$hasValue} to the existing values" ;
sh:update """INSERT {
$focusNode $predicate $hasValue .
}
WHERE {
}""" ;
] ;
sh:property [
sh:path sh:hasValue ;
tosh:editWidget ;
tosh:useDeclaredDatatype true ;
] ;
.
sh:HasValueConstraintComponent-hasValue
sh:group tosh:OtherConstraintPropertyGroup ;
.
sh:InConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
dash:propertySuggestionGenerator tosh:ReplaceWithDefaultValueSuggestionGenerator ;
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Replace invalid value with {$newObject}" ;
sh:order 2 ;
sh:prefixes ;
sh:select """SELECT ?newObject
WHERE {
$in (?index ?newObject ) .
}
ORDER BY ?index""" ;
sh:update """DELETE {
$focusNode $predicate $value .
}
INSERT {
$focusNode $predicate $newObject .
}
WHERE {
}""" ;
] ;
.
sh:InConstraintComponent-in
sh:group tosh:OtherConstraintPropertyGroup ;
.
sh:JSConstraint-js
sh:group tosh:ComplexConstraintPropertyGroup ;
.
sh:LanguageInConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
.
sh:LanguageInConstraintComponent-languageIn
sh:group tosh:StringBasedConstraintPropertyGroup ;
sh:order "9"^^xsd:decimal ;
sh:property [
sh:path (
[
sh:zeroOrMorePath rdf:rest ;
]
rdf:first
) ;
sh:datatype xsd:string ;
sh:minLength 1 ;
] ;
.
sh:LessThanConstraintComponent-lessThan
sh:deactivated true ;
.
sh:LessThanOrEqualsConstraintComponent-lessThanOrEquals
sh:deactivated true ;
.
sh:MaxCountConstraintComponent-maxCount
sh:group tosh:CardinalityConstraintPropertyGroup ;
sh:order 1 ;
.
sh:MaxExclusiveConstraintComponent-maxExclusive
tosh:editWidget ;
tosh:useDeclaredDatatype true ;
sh:group tosh:ValueRangeConstraintPropertyGroup ;
sh:order 3 ;
.
sh:MaxInclusiveConstraintComponent
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Replace the invalid value with {$maxInclusive}" ;
sh:update """DELETE {
$subject $predicate $object .
}
INSERT {
$subject $predicate $maxInclusive .
}
WHERE {
}""" ;
] ;
.
sh:MaxInclusiveConstraintComponent-maxInclusive
tosh:editWidget ;
tosh:useDeclaredDatatype true ;
sh:group tosh:ValueRangeConstraintPropertyGroup ;
sh:order 2 ;
.
sh:MaxLengthConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
dash:propertySuggestionGenerator tosh:ReplaceWithDefaultValueSuggestionGenerator ;
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Prune string to only {$maxLength} characters" ;
sh:order 1 ;
sh:prefixes ;
sh:update """DELETE {
$focusNode $predicate $value .
}
INSERT {
$focusNode $predicate $newValue .
}
WHERE {
FILTER (isLiteral($value) && datatype($value) = xsd:string) .
BIND (SUBSTR($value, 1, $maxLength) AS ?newValue) .
}""" ;
] ;
.
sh:MaxLengthConstraintComponent-maxLength
sh:group tosh:StringBasedConstraintPropertyGroup ;
sh:order 4 ;
.
sh:MinCountConstraintComponent-minCount
sh:group tosh:CardinalityConstraintPropertyGroup ;
sh:order 0 ;
.
sh:MinExclusiveConstraintComponent-minExclusive
tosh:editWidget ;
tosh:useDeclaredDatatype true ;
sh:group tosh:ValueRangeConstraintPropertyGroup ;
sh:order 0 ;
.
sh:MinInclusiveConstraintComponent
dash:propertySuggestionGenerator [
a dash:SPARQLUpdateSuggestionGenerator ;
sh:message "Replace the invalid value with {$minInclusive}" ;
sh:update """DELETE {
$subject $predicate $object .
}
INSERT {
$subject $predicate $minInclusive .
}
WHERE {
}""" ;
] ;
.
sh:MinInclusiveConstraintComponent-minInclusive
tosh:editWidget ;
tosh:useDeclaredDatatype true ;
sh:group tosh:ValueRangeConstraintPropertyGroup ;
sh:order 1 ;
.
sh:MinLengthConstraintComponent-minLength
sh:group tosh:StringBasedConstraintPropertyGroup ;
sh:order 3 ;
.
sh:NodeConstraintComponent
sh:nodeValidator [
a sh:SPARQLSelectValidator ;
sh:prefixes ;
sh:select """
SELECT $this ($this AS $value) ?failure
WHERE {
BIND (tosh:hasShape($this, $node) AS ?hasShape) .
BIND (!bound(?hasShape) AS ?failure) .
FILTER (?failure || !?hasShape) .
}
""" ;
] ;
sh:propertyValidator [
a sh:SPARQLSelectValidator ;
sh:prefixes ;
sh:select """
SELECT DISTINCT $this ?value ?failure
WHERE {
$this $PATH ?value .
BIND (tosh:hasShape(?value, $node) AS ?hasShape) .
BIND (!bound(?hasShape) AS ?failure) .
FILTER (?failure || !?hasShape) .
}
""" ;
] ;
.
sh:NodeConstraintComponent-node
tosh:editWidget swa:SourceCodeEditor ;
tosh:viewWidget swa:SourceCodeViewer ;
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:order 0 ;
.
sh:NodeKindConstraintComponent-nodeKind
tosh:editWidget ;
sh:group tosh:ValueTypeConstraintPropertyGroup ;
sh:name "value kinds" ;
sh:order 0 ;
.
sh:NotConstraintComponent
sh:nodeValidator [
a sh:SPARQLSelectValidator ;
sh:prefixes ;
sh:select """
SELECT $this ($this AS ?value) ?failure
WHERE {
BIND (tosh:hasShape($this, $not) AS ?hasShape) .
BIND (!bound(?hasShape) AS ?failure) .
FILTER (?failure || ?hasShape) .
}
""" ;
] ;
sh:propertyValidator [
a sh:SPARQLSelectValidator ;
sh:prefixes ;
sh:select """
SELECT DISTINCT $this ?value ?failure
WHERE {
$this $PATH ?value .
BIND (tosh:hasShape(?value, $not) AS ?hasShape) .
BIND (!bound(?hasShape) AS ?failure) .
FILTER (?failure || ?hasShape) .
}
""" ;
] ;
.
sh:NotConstraintComponent-not
tosh:editWidget swa:SourceCodeEditor ;
tosh:viewWidget swa:SourceCodeViewer ;
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:order 10 ;
.
sh:OrConstraintComponent
sh:nodeValidator [
a sh:SPARQLSelectValidator ;
sh:message "Focus node has none of the shapes from the 'or' list" ;
sh:prefixes ;
sh:select """
SELECT $this ?failure ($this AS ?value)
WHERE {
BIND (tosh:countShapesWithMatchResult($this, $or, $shapesGraph, true) AS ?count)
BIND (!bound(?count) AS ?failure) .
FILTER IF(?failure, true, ?count = 0) .
}
""" ;
] ;
sh:propertyValidator [
a sh:SPARQLSelectValidator ;
sh:message "Value has none of the shapes from the 'or' list" ;
sh:prefixes ;
sh:select """
SELECT DISTINCT $this ?value ?failure
WHERE {
$this $PATH ?value .
BIND (tosh:countShapesWithMatchResult(?value, $or, $shapesGraph, true) AS ?count)
BIND (!bound(?count) AS ?failure) .
FILTER IF(?failure, true, ?count = 0) .
}
""" ;
] ;
.
sh:OrConstraintComponent-or
tosh:editWidget swa:SourceCodeEditor ;
tosh:viewWidget swa:SourceCodeViewer ;
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:order 12 ;
.
sh:PatternConstraintComponent
dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ;
dash:propertySuggestionGenerator tosh:ReplaceWithDefaultValueSuggestionGenerator ;
.
sh:PatternConstraintComponent-flags
tosh:editWidget ;
sh:group tosh:StringBasedConstraintPropertyGroup ;
sh:maxCount 1 ;
sh:name "regex flags" ;
.
sh:PatternConstraintComponent-pattern
tosh:editWidget swa:PlainTextFieldEditor ;
sh:group tosh:StringBasedConstraintPropertyGroup ;
sh:maxCount 1 ;
sh:name "regex pattern" ;
sh:sparql [
sh:prefixes ;
sh:select """SELECT $this ?value ?message
WHERE {
$this $PATH ?value .
BIND (spif:checkRegexSyntax(?value) AS ?error) .
FILTER bound(?error) .
BIND (CONCAT(\"Malformed pattern: \", ?error) AS ?message) .
}""" ;
] ;
.
sh:QualifiedMaxCountConstraintComponent-qualifiedMaxCount
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:maxCount 1 ;
sh:order 3 ;
.
sh:QualifiedMinCountConstraintComponent-qualifiedMinCount
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:maxCount 1 ;
sh:order 2 ;
.
sh:QualifiedMinCountConstraintComponent-qualifiedValueShape
tosh:editWidget swa:SourceCodeEditor ;
tosh:viewWidget swa:SourceCodeViewer ;
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:maxCount 1 ;
sh:order 1 ;
.
sh:UniqueLangConstraintComponent-uniqueLang
sh:group tosh:StringBasedConstraintPropertyGroup ;
sh:order 8 ;
.
sh:XoneConstraintComponent
sh:nodeValidator [
a sh:SPARQLSelectValidator ;
sh:message "Focus node has {?count} of the shapes from the 'exactly one' list" ;
sh:prefixes ;
sh:select """
SELECT $this ?failure ?count ($this AS ?value)
WHERE {
BIND (tosh:countShapesWithMatchResult($this, $xone, $shapesGraph, true) AS ?count)
BIND (!bound(?count) AS ?failure) .
FILTER IF(?failure, true, ?count != 1) .
}
""" ;
] ;
sh:propertyValidator [
a sh:SPARQLSelectValidator ;
sh:message "Value node has {?count} of the shapes from the 'exactly one' list" ;
sh:prefixes ;
sh:select """
SELECT DISTINCT $this ?value ?failure ?count
WHERE {
$this $PATH ?value .
BIND (tosh:countShapesWithMatchResult(?value, $xone, $shapesGraph, true) AS ?count)
BIND (!bound(?count) AS ?failure) .
FILTER IF(?failure, true, ?count != 1) .
}
""" ;
] ;
.
sh:XoneConstraintComponent-xone
tosh:editWidget swa:SourceCodeEditor ;
tosh:viewWidget swa:SourceCodeViewer ;
sh:group tosh:ComplexConstraintPropertyGroup ;
sh:order 13 ;
.
sh:count
a rdf:Property ;
rdfs:comment "Resources with values for sh:count are node expressions that produce an xsd:integer counting all values of the associated node expression."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "count"@en ;
.
sh:desc
a rdf:Property ;
rdfs:comment "For sh:orderBy node expressions, sh:desc can be set to true to indicate descending order (defaulting to ascending)."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "desc"@en ;
.
sh:distinct
a rdf:Property ;
rdfs:comment "Resources with values for sh:distinct are node expressions that drop any duplicate values from the associated node expression."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "distinct"@en ;
.
sh:else
a rdf:Property ;
rdfs:comment "Links an sh:if node expression with the values that shall be returned if the condition is false."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "else"@en ;
.
sh:exists
a rdf:Property ;
rdfs:comment "Resources with values for sh:exists are node expressions that produce true if the associated node expression has any values, and false otherwise."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "exists"@en ;
.
sh:groupConcat
a rdf:Property ;
rdfs:comment "Resources with values for sh:groupConcat are node expressions that produce an xsd:string consisting of the concatenation of all values of the associated node expression, possibly separated by the value of sh:separator."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "group concat"@en ;
.
sh:if
a rdf:Property ;
rdfs:comment "Resources with values for sh:if are node expressions that produce either the results of sh:then or sh:else depending on whether the associated node expression produces the list [ true ]."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "if"@en ;
.
sh:limit
a rdf:Property ;
rdfs:comment "Resources with values N for sh:limit are node expressions that produce only the first N values of the associated node expression sh:nodes."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "limit"@en ;
rdfs:range xsd:integer ;
.
sh:max
a rdf:Property ;
rdfs:comment "Resources with values for sh:max are node expressions that produce the maximum value of the associated node expression."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "max"@en ;
.
sh:min
a rdf:Property ;
rdfs:comment "Resources with values for sh:min are node expressions that produce the minimum value of the associated node expression."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "min"@en ;
.
sh:minus
a rdf:Property ;
rdfs:comment "Resources with values for sh:minus are node expressions that produce all values of the associated node expression sh:nodes except those that are returned by the sh:minus expression."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "minus"@en ;
.
sh:offset
a rdf:Property ;
rdfs:comment "Resources with values N for sh:offset are node expressions that produce only all values of the associated node expression sh:nodes after the first N values have been skipped."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "offset"@en ;
rdfs:range xsd:integer ;
.
sh:orderBy
a rdf:Property ;
rdfs:comment "Resources with a value for sh:orderBy are node expressions that produce all values of the associated node expression sh:nodes ordered by the given node expression (applied to each result value). Use sh:desc=true for descending order."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "orderBy"@en ;
.
sh:separator
a rdf:Property ;
rdfs:comment "For sh:concat node expressions, sh:separator can represent a separator string such as \", \" to be placed in between results."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "separator"@en ;
.
sh:sum
a rdf:Property ;
rdfs:comment "Resources with values for sh:sum are node expressions that produce the sum of all values of the associated node expression."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "sum"@en ;
.
sh:then
a rdf:Property ;
rdfs:comment "Links an sh:if node expression with the values that shall be returned if the condition is true."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "then"@en ;
.
sh:values
a rdf:Property ;
rdfs:comment "Links a property shape with one or more SHACL node expressions that are used to determine the values of the associated predicate based on the current focus node. Only valid for property shapes where the sh:path is an IRI."@en ;
rdfs:isDefinedBy sh: ;
rdfs:label "values"@en ;
.