# baseURI: http://qudt.org/2.1/schema/shacl/overlay/qudt
# imports: http://qudt.org/2.1/schema/shacl/qudt
# imports: http://www.w3.org/ns/shacl#

@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dtype: <http://www.linkedmodel.org/schema/dtype#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix qkdv: <http://qudt.org/vocab/dimensionvector/> .
@prefix quantitykind: <http://qudt.org/vocab/quantitykind/> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix qudt.type: <http://qudt.org/vocab/type/> .
@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 skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix unit: <http://qudt.org/vocab/unit/> .
@prefix vaem: <http://www.linkedmodel.org/schema/vaem#> .
@prefix voag: <http://voag.linkedmodel.org/schema/voag#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://qudt.org/2.1/schema/shacl/overlay/qudt>
  a owl:Ontology ;
  vaem:hasGraphMetadata vaem:GMD_SHACLQUDTOVERLAY-SCHEMA ;
  rdfs:comment "Supplements the generated SHACL Schema with constructs not expressible in the QUDT OWL Ontology" ;
  rdfs:label "QUDT SHACL Schema Supplement Version 2.1.32" ;
  owl:imports <http://qudt.org/2.1/schema/shacl/qudt> ;
  owl:imports sh: ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ;
      sh:prefix "dcterms" ;
    ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ;
      sh:prefix "qudt" ;
    ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ;
      sh:prefix "qkdv" ;
    ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ;
      sh:prefix "quantitykind" ;
    ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ;
      sh:prefix "unit" ;
    ] ;
  # this is a temporary patch until this is fixed in upstream QUDT
  sh:declare [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ;
    sh:prefix "sh" ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ;
      sh:prefix "rdf" ;
    ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ;
      sh:prefix "rdfs" ;
    ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ;
      sh:prefix "owl" ;
    ] ;
  sh:declare [
      a sh:PrefixDeclaration ;
      sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ;
      sh:prefix "skos" ;
    ] ;
.
qudt:AbstractQuantityKind-qudt_latexSymbol
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:AbstractQuantityKind-qudt_symbol
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:AbstractQuantityKind-skos_broader
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "120"^^xsd:decimal ;
.
qudt:ApplicableUnitsGroup
  a sh:PropertyGroup ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Applicable Units" ;
  sh:order "30"^^xsd:decimal ;
.
qudt:Aspect
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:property qudt:Aspect-rdfs_isDefinedBy ;
.
qudt:Aspect-rdfs_isDefinedBy
  a sh:PropertyShape ;
  sh:path rdfs:isDefinedBy ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "200"^^xsd:decimal ;
.
qudt:Citation-qudt_description
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:ClosedWorldShape
  a sh:NodeShape ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Ensure that all instances of a class use only the properties defined for that class." ;
      sh:message "Predicate {?p} is not defined for instance {$this}." ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """
SELECT $this ?p ?o
WHERE {
$this a/rdfs:subClassOf* qudt:Concept .
$this ?p ?o .
FILTER(STRSTARTS (str(?p), 'http://qudt.org/schema/qudt'))
FILTER NOT EXISTS {$this a sh:NodeShape}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
			?class sh:property/sh:path ?p .
}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
?class sh:xone/rdf:rest*/rdf:first/sh:property/sh:path ?p .
}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
?class sh:or/rdf:rest*/rdf:first/sh:property/sh:path ?p .
}
}
""" ;
    ] ;
  sh:targetClass qudt:Concept ;
.
qudt:Concept
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:property qudt:Concept-rdf_type ;
  sh:property qudt:Concept-rdfs_isDefinedBy ;
  sh:property qudt:Concept-rdfs_label ;
  sh:property qudt:Concept-rdfs_seeAlso ;
  sh:property qudt:Concept-skos_altLabel ;
.
qudt:Concept-dcterms_description
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:name "dcterms description" ;
  sh:order "60"^^xsd:decimal ;
.
qudt:Concept-qudt_abbreviation
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "18"^^xsd:decimal ;
.
qudt:Concept-qudt_code
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "100"^^xsd:decimal ;
.
qudt:Concept-qudt_description
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:name "full description" ;
  sh:order "60"^^xsd:decimal ;
.
qudt:Concept-qudt_guidance
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "60"^^xsd:decimal ;
.
qudt:Concept-qudt_hasRule
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "95"^^xsd:decimal ;
.
qudt:Concept-qudt_id
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Concept-qudt_plainTextDescription
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Concept-rdf_type
  a sh:PropertyShape ;
  sh:path rdf:type ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:minCount 1 ;
  sh:name "type" ;
  sh:order "10"^^xsd:decimal ;
.
qudt:Concept-rdfs_isDefinedBy
  a sh:PropertyShape ;
  sh:path rdfs:isDefinedBy ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "200"^^xsd:decimal ;
.
qudt:Concept-rdfs_label
  a sh:PropertyShape ;
  sh:path rdfs:label ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:minCount 1 ;
  sh:order "10"^^xsd:decimal ;
  sh:severity sh:Warning ;
.
qudt:Concept-rdfs_seeAlso
  a sh:PropertyShape ;
  sh:path rdfs:seeAlso ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "900"^^xsd:decimal ;
.
qudt:Concept-skos_altLabel
  a sh:PropertyShape ;
  sh:path skos:altLabel ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "12"^^xsd:decimal ;
.
qudt:DeprecatedPropertyConstraint
  a sh:NodeShape ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Warning about use of a deprecated QUDT property" ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Warns if a deprecated QUDT property is used" ;
      sh:message "Resource, '{$this}' uses the property '{?oldpstr}' which will be deprecated. Please use '{?newpstr}' instead." ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """SELECT $this ?p ?oldpstr ?newpstr
WHERE {
?p qudt:deprecated true .
?p a rdf:Property .
$this ?p ?o .
?p dcterms:isReplacedBy ?newp .
BIND (STR(?newp) AS ?newpstr)
BIND (STR(?p) AS ?oldpstr)
}""" ;
    ] ;
  sh:targetClass qudt:Concept ;
.
qudt:DeprecationConstraint
  a sh:NodeShape ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Warning about use of a deprecated QUDT resource" ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Warns if a deprecated QUDT resource is used" ;
      sh:message "Resource, '{?s}' refers to '{?oldqstr}' which has been deprecated. Please refer to '{?newqstr}' instead." ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """SELECT ?s $this ?oldqstr ?newqstr
WHERE {
$this qudt:deprecated true .
?s ?p $this .
FILTER (!STRSTARTS(STR(?s),'http://qudt.org')) .
$this dcterms:isReplacedBy ?newq .
BIND (STR(?newq) AS ?newqstr)
BIND (STR($this) AS ?oldqstr)
}""" ;
    ] ;
  sh:targetClass qudt:Concept ;
.
qudt:EnumeratedValue-qudt_description
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:ExactMatchGoesBothWaysConstraint
  a sh:NodeShape ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Ensure that if A qudt:exactMatch B then B qudt:exactMatch A" ;
      sh:message "Missing triple: {$t} qudt:exactMatch {$this} ." ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """
SELECT $this ?t
WHERE {
$this qudt:exactMatch ?t .
FILTER NOT EXISTS {?t qudt:exactMatch $this }
}
""" ;
    ] ;
  sh:targetClass qudt:Concept ;
.
qudt:HTMLOrStringOrLangStringOrLatexString
  a rdf:List ;
  rdf:first [
      sh:datatype rdf:HTML ;
    ] ;
  rdf:rest (
      [
        sh:datatype xsd:string ;
      ]
      [
        sh:datatype rdf:langString ;
      ]
      [
        sh:datatype qudt:LatexString ;
      ]
    ) ;
  rdfs:comment "Defines an rdf:List that can be used in property constraints as value for sh:or to indicate that all values of a property must be either rdf:HTML, xsd:string or rdf:langString, or a qudt:LatexString" ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "HTML or string or langString or LatexString" ;
.
qudt:IdentifiersAndDescriptionsPropertyGroup
  a sh:PropertyGroup ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Identifiers and Descriptions" ;
  sh:order "10"^^xsd:decimal ;
.
qudt:InconsistentDimensionVectorInSKOSHierarchyConstraint
  a sh:NodeShape ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Checks that a QuantityKind has the same dimension vector as any skos:broader QuantityKind" ;
      sh:message "Unit {$this} has dimension vector {$udv} which is not the same as the dimension vector of its skos:broader, {$qk} with dimension vector {$qdv}" ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """
SELECT $this ?udv ?qk ?qdv
WHERE {
$this qudt:hasDimensionVector  ?udv .
$this skos:broader* ?qk .
?qk qudt:hasDimensionVector ?qdv .
FILTER (?udv != ?qdv) .
}
""" ;
    ] ;
  sh:targetClass qudt:QuantityKind ;
.
qudt:InconsistentUnitAndDimensionVectorConstraint
  a sh:NodeShape ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Checks that a Unit and its QuantityKind have the same dimension vector" ;
      sh:message "Unit {$this} has dimension vector {$udv} which is not the same as the dimension vector of its quantity kind {$qk} with dimension vector {$qdv}" ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """
SELECT $this ?udv ?qk ?qdv
WHERE {
$this qudt:hasDimensionVector  ?udv .
$this qudt:hasQuantityKind ?qk .
?qk qudt:hasDimensionVector ?qdv .
FILTER (?udv != qkdv:NotApplicable) .
FILTER (?qdv != qkdv:NotApplicable) .
FILTER (?udv != ?qdv) .
}
""" ;
    ] ;
  sh:targetClass qudt:Unit ;
.
qudt:Narratable
  a qudt:AspectClass ;
  a sh:NodeShape ;
  rdfs:comment "<p><em>Narratable</em> specifies properties that provide for documentation and references.</p>"^^rdf:HTML ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Narratable" ;
  rdfs:subClassOf qudt:Aspect ;
.
qudt:NumericUnionList
  a rdf:List ;
  rdf:first [
      sh:datatype xsd:string ;
    ] ;
  rdf:rest (
      [
        sh:datatype xsd:nonNegativeInteger ;
      ]
      [
        sh:datatype xsd:positiveInteger ;
      ]
      [
        sh:datatype xsd:integer ;
      ]
      [
        sh:datatype xsd:int ;
      ]
      [
        sh:datatype xsd:float ;
      ]
      [
        sh:datatype xsd:double ;
      ]
      [
        sh:datatype xsd:decimal ;
      ]
    ) ;
  rdfs:comment "An rdf:List that can be used in property constraints as value for sh:or to indicate that all values of a property must be either xsd:integer, xsd:float, xsd:double or xsd:decimal." ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Numeric Union List" ;
.
qudt:PhysicalConstant-qudt_latexSymbol
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:PropertiesGroup
  a sh:PropertyGroup ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Properties" ;
  sh:order "20"^^xsd:decimal ;
.
qudt:Quantifiable-qudt_value
  a sh:PropertyShape ;
  sh:path qudt:value ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/qudt> ;
  sh:maxCount 1 ;
  sh:or (
      [
        sh:datatype xsd:float ;
      ]
      [
        sh:datatype xsd:double ;
      ]
      [
        sh:datatype xsd:integer ;
      ]
      [
        sh:datatype xsd:decimal ;
      ]
    ) ;
.
qudt:Quantity-qudt_description
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:QuantityKind-qudt_applicableCGSUnit
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:deactivated true ;
.
qudt:QuantityKind-qudt_applicableSIUnit
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:deactivated true ;
.
qudt:QuantityKind-qudt_applicableUSCustomaryUnit
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:deactivated true ;
.
qudt:QuantityKind-qudt_applicableUnit
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:ApplicableUnitsGroup ;
  sh:order "10"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_baseCGSUnitDimensions
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:QuantityKind-qudt_baseISOUnitDimensions
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:QuantityKind-qudt_baseImperialUnitDimensions
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:QuantityKind-qudt_baseSIUnitDimensions
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:QuantityKind-qudt_baseUSCustomaryUnitDimensions
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:QuantityKind-qudt_belongsToSystemOfQuantities
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "90"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_dimensionVectorForSI
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "100"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_expression
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:name "symbol expression" ;
  sh:order "10"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_hasDimensionVector
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "50"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_latexDefinition
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_mathMLdefinition
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "70"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_qkdvDenominator
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "61"^^xsd:decimal ;
.
qudt:QuantityKind-qudt_qkdvNumerator
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "60"^^xsd:decimal ;
.
qudt:QuantityKindDimensionVector-dimensionExponentForAmountOfSubstance
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityKindDimensionVector-dimensionExponentForLength
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityKindDimensionVector-dimensionExponentForLuminousIntensity
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityKindDimensionVector-dimensionExponentForMass
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityKindDimensionVector-dimensionExponentForThermodynamicTemperature
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityKindDimensionVector-dimensionExponentForTime
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityKindDimensionVector-dimensionlessExponent
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityKindDimensionVector_dimensionExponentForElectricCurrent
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:QuantityValue-value
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:NumericUnionList ;
.
qudt:Rule-example
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:Rule-qudt_example
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:or qudt:HTMLOrStringOrLangStringOrLatexString ;
.
qudt:UniqueSymbolTypeRestrictedPropertyConstraint
  a sh:NodeShape ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Unique symbol type restricted property constraint" ;
  sh:deactivated true ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Checks that a resource has a unique symbol within its type hierarchy below qudt:Concept" ;
      sh:message "Resource, '{$this}' of type '{?myType}', has non-unique symbol, '{?symbol}', that conflicts with '{?another}' of type '{?anotherType}'" ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """SELECT DISTINCT $this ?symbol ?another ?myType ?anotherType
WHERE {{
	$this qudt:symbol ?symbol .
     ?another qudt:symbol ?symbol .
    FILTER (?another != $this)
   }
    $this a ?myType .
    ?myType <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ qudt:Concept .
    ?another a ?anotherType .
    ?anotherType <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ qudt:Concept .
   FILTER (?myType = ?anotherType)
}""" ;
    ] ;
  sh:targetClass qudt:Unit ;
.
qudt:Unit
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:subClassOf qudt:Narratable ;
.
qudt:Unit-qudt_applicableSystem
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "62"^^xsd:decimal ;
.
qudt:Unit-qudt_conversionMultiplier
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:UnitConversionGroup ;
  sh:order "10"^^xsd:decimal ;
.
qudt:Unit-qudt_conversionOffset
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:UnitConversionGroup ;
  sh:order "20"^^xsd:decimal ;
.
qudt:Unit-qudt_denominatorDimensionVector
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "52"^^xsd:decimal ;
.
qudt:Unit-qudt_expression
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "30"^^xsd:decimal ;
.
qudt:Unit-qudt_hasDimensionVector
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "50"^^xsd:decimal ;
.
qudt:Unit-qudt_hasQuantityKind
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:name "quantity kind" ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Unit-qudt_iec61360Code
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "IEC-61369 code" ;
  sh:group qudt:UnitEquivalencePropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Unit-qudt_latexDefinition
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Unit-qudt_latexSymbol
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "60"^^xsd:decimal ;
.
qudt:Unit-qudt_mathMLdefinition
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "70"^^xsd:decimal ;
.
qudt:Unit-qudt_numeratorDimensionVector
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "54"^^xsd:decimal ;
.
qudt:Unit-qudt_omUnit
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:UnitEquivalencePropertyGroup ;
  sh:order "10"^^xsd:decimal ;
.
qudt:Unit-qudt_siUnitsExpression
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "35"^^xsd:decimal ;
.
qudt:Unit-qudt_symbol
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Unit-qudt_ucumCode
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:UnitEquivalencePropertyGroup ;
  sh:order "50"^^xsd:decimal ;
.
qudt:Unit-qudt_udunitsCode
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:UnitEquivalencePropertyGroup ;
  sh:order "55"^^xsd:decimal ;
.
qudt:Unit-qudt_uneceCommonCode
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:UnitEquivalencePropertyGroup ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Unit-qudt_unitOfSystem
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:order "60"^^xsd:decimal ;
.
qudt:UnitConversionGroup
  a sh:PropertyGroup ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Conversion" ;
  sh:order "60"^^xsd:decimal ;
.
qudt:UnitEquivalencePropertyGroup
  a sh:PropertyGroup ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "Equivalent Units" ;
  sh:order "50"^^xsd:decimal ;
.
qudt:UnitPointsToAllExactMatchQuantityKindsConstraint
  a sh:NodeShape ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:severity sh:Info ;
  sh:sparql [
      a sh:SPARQLConstraint ;
      rdfs:comment "Ensure that if a Unit hasQuantityKind A, and A qudt:exactMatch B, then the Unit hasQuantityKind B " ;
      sh:message "Missing triple: {$this} qudt:hasQuantityKind {?qk2}, because {?qk} qudt:exactMatch {?qk2}" ;
      sh:prefixes <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
      sh:select """
SELECT $this ?qk ?qk2
WHERE {
$this qudt:hasQuantityKind ?qk .
?qk qudt:exactMatch ?qk2 .
FILTER NOT EXISTS {$this qudt:hasQuantityKind ?qk2}
}
""" ;
    ] ;
  sh:targetClass qudt:Unit ;
.
qudt:UnitReferencesPropertyGroup
  a sh:PropertyGroup ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "References" ;
  sh:order "20"^^xsd:decimal ;
.
qudt:UserQuantityKind-qudt_hasQuantityKind
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:PropertiesGroup ;
  sh:name "quantity kind" ;
  sh:order "40"^^xsd:decimal ;
.
qudt:Verifiable-qudt_dbpediaMatch
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "90"^^xsd:decimal ;
.
qudt:Verifiable-qudt_informativeReference
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "84"^^xsd:decimal ;
.
qudt:Verifiable-qudt_isoNormativeReference
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "82"^^xsd:decimal ;
.
qudt:Verifiable-qudt_normativeReference
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  sh:group qudt:IdentifiersAndDescriptionsPropertyGroup ;
  sh:order "80"^^xsd:decimal ;
.
vaem:GMD_SHACLQUDTOVERLAY-SCHEMA
  a vaem:GraphMetaData ;
  dcterms:contributor "Steve Ray" ;
  dcterms:created "2020-04-20"^^xsd:date ;
  dcterms:creator "Ralph Hodgson" ;
  dcterms:description "<p class=\"lm-para\">The QUDT, or \"Quantity, Unit, Dimension and Type\" schema defines the base classes properties, and restrictions used for modeling physical quantities, units of measure, and their dimensions in various measurement systems. This overlay graph provides additional properties that affect the display of entities in a user interface, as well as some SHACL rules.</p>"^^rdf:HTML ;
  dcterms:modified "2023-10-19T10:35:35.930-04:00"^^xsd:dateTime ;
  dcterms:rights """
  This product includes all or a portion of the UCUM table, UCUM codes, and UCUM definitions or is derived from it, subject to a license from Regenstrief Institute, Inc. and The UCUM Organization. Your use of the UCUM table, UCUM codes, UCUM definitions also is subject to this license, a copy of which is available at ​http://unitsofmeasure.org. The current complete UCUM table, UCUM Specification are available for download at ​http://unitsofmeasure.org. The UCUM table and UCUM codes are copyright © 1995-2009, Regenstrief Institute, Inc. and the Unified Codes for Units of Measures (UCUM) Organization. All rights reserved.

THE UCUM TABLE (IN ALL FORMATS), UCUM DEFINITIONS, AND SPECIFICATION ARE PROVIDED 'AS IS.' ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  """ ;
  dcterms:rights "The QUDT Ontologies are issued under a Creative Commons Attribution 4.0 International License (CC BY 4.0), available at https://creativecommons.org/licenses/by/4.0/. Attribution should be made to QUDT.org" ;
  dcterms:subject "QUDT" ;
  dcterms:title "QUDT SHACL Schema Overlay - Version 2.1.32" ;
  vaem:graphName "qudtOverlay" ;
  vaem:graphTitle "Quantities, Units, Dimensions and Types (QUDT) SHACL Schema Overlay - Version 2.1.32" ;
  vaem:hasGraphRole vaem:SHACLSchemaOverlayGraph ;
  vaem:hasOwner vaem:QUDT ;
  vaem:hasSteward vaem:QUDT ;
  vaem:intent "Specifies overlay properties and rules for the schema for quantities, units and dimensions. Types are defined in other schemas." ;
  vaem:isMetadataFor <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  vaem:latestPublishedVersion "https://qudt.org/doc/2023/10/DOC_SCHEMA-SHACL-QUDT-OVERLAY-v2.1.html"^^xsd:anyURI ;
  vaem:logo "https://qudt.org/linkedmodels.org/assets/lib/lm/images/logos/qudt_logo-300x110.png"^^xsd:anyURI ;
  vaem:namespace "http://qudt.org/schema/qudt/" ;
  vaem:namespacePrefix "qudt" ;
  vaem:owner "qudt.org" ;
  vaem:previousPublishedVersion "https://qudt.org/doc/2023/09/DOC_SCHEMA-SHACL-QUDT-OVERLAY-v2.1.html"^^xsd:anyURI ;
  vaem:revision "2.1" ;
  vaem:turtleFileURL "http://qudt.org/2.1/schema/shacl/overlay/qudt"^^xsd:anyURI ;
  vaem:usesNonImportedResource dcterms:abstract ;
  vaem:usesNonImportedResource dcterms:contributor ;
  vaem:usesNonImportedResource dcterms:created ;
  vaem:usesNonImportedResource dcterms:description ;
  vaem:usesNonImportedResource dcterms:modified ;
  vaem:usesNonImportedResource dcterms:rights ;
  vaem:usesNonImportedResource dcterms:source ;
  vaem:usesNonImportedResource dcterms:subject ;
  vaem:usesNonImportedResource dcterms:title ;
  vaem:usesNonImportedResource voag:QUDT-Attribution ;
  vaem:withAttributionTo voag:QUDT-Attribution ;
  rdfs:isDefinedBy <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
  rdfs:label "QUDT SHACL Schema Overlay Metadata Version 2.1.32" ;
  owl:versionIRI <http://qudt.org/2.1/schema/shacl/overlay/qudt> ;
.
