sarefShape.ttl 7.18 KB
Newer Older
@prefix dash: <http://datashapes.org/dash#> .
@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 xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix sarefsh: <https://saref.etsi.org/shape#> .
@prefix schema: <http://schema.org/> .

sarefsh:OntologyShape
	a sh:NodeShape ;
	  sh:targetClass owl:Ontology ;
	  sh:closed	true ;
	sh:property [
		sh:path rdf:type ;
		sh:minCount 1 ;
		sh:hasValue owl:Ontology ;
	] ;
	sh:property [
		sh:path owl:versionInfo ;
		sh:maxCount 0 ;
		sh:severity sh:Warning ;
		sh:message "The annotation owl:versionInfo should not be set in the source file, as it will be computed automatically"
	] ;
	sh:property [
		sh:path owl:versionIRI ;
		sh:maxCount 0 ;
		sh:severity sh:Warning ;
		sh:message "The annotation owl:versionIRI should not be set in the source file, as it will be computed automatically"
	] ;
	sh:property [
		sh:path owl:priorVersion ;
		sh:maxCount 0 ;
		sh:severity sh:Warning ;
		sh:message "The annotation owl:priorVersion should not be set in the source file, as it will be computed automatically"
	] ;
	sh:property [
		sh:path owl:imports ;
		sh:nodeKind sh:IRI ;
		sh:pattern "^https://saref.etsi.org/(core|saref4[a-z]{4})/v[1-9][0-9]*\\.[1-9][0-9]*\\.[1-9][0-9]*/$" ;
		sh:severity sh:Violation ;
		sh:message "Only SAREF ontologies with specific versions shall be imported. Their URIs conform to the regular expression `^https://saref.etsi.org/(core|saref4[a-z]{4})/v[1-9][0-9]*\\.[1-9][0-9]*\\.[1-9][0-9]*/$`"
	] ;
	sh:property [
		sh:path dcterms:title ;
		sh:nodeKind sh:Literal ;
		sh:minCount 1 ;
		sh:maxCount 1 ;
		sh:severity sh:Violation ;
		sh:message "The ontology shall have exactly one <http://purl.org/dc/terms/title>"
	] ;  
	sh:property [
		sh:path dcterms:abstract ;
		sh:nodeKind sh:Literal ;
		sh:minCount 1 ;
		sh:maxCount 1 ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
		sh:message "The ontology should have exactly one <http://purl.org/dc/terms/abstract>"
	] ;
	sh:property [
		sh:path dcterms:description ;
		sh:nodeKind sh:Literal ;
		sh:minCount 1 ;
		sh:maxCount 1 ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
		sh:message "The ontology should have exactly one <http://purl.org/dc/terms/description>"
	] ;
	sh:property [
		sh:path rdfs:comment ;
		sh:nodeKind sh:Literal ;
		sh:minCount 0 ;
	] ;
	sh:property [
		sh:path dcterms:issued ;
		sh:datatype xsd:date ;
		sh:minCount 0 ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
	] ;
	sh:property [
		sh:path dcterms:modified ;
		sh:datatype xsd:date ;
		sh:maxCount 0 ;
		sh:severity sh:Warning ;
		sh:message "The annotation <http://purl.org/dc/terms/modified> will be computed automatically"
	] ;
	sh:property [
		sh:path dcterms:source ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:minCount 0 ;
		sh:severity sh:Warning ;
	] ;
	sh:property [
		sh:path dcterms:license ;
		sh:nodeKind sh:IRI ;
		sh:minCount 1 ;
		sh:pattern "https://forge.etsi.org/etsi-software-license" ;
		sh:severity sh:Violation ;
		sh:message "There shall be at least one annotation <http://purl.org/dc/terms/license> <https://forge.etsi.org/etsi-software-license>"
  sh:property [
    sh:path dcterms:creator ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 0 ;
    sh:severity sh:Warning ;
    sh:message "The <http://purl.org/dc/terms/creator> should be blank nodes or IRIs"
  ] ;
  sh:property [
    sh:path dcterms:creator ;
    sh:severity sh:Warning ;
    sh:node sarefsh:PersonShape ;
    sh:message "Every creator should be a <http://schema.org/Person> with <http://schema.org/givenName>, <http://schema.org/familyName>, and <http://schema.org/affiliation>"
	sh:property [
		sh:path dcterms:contributor ;
		sh:nodeKind sh:BlankNodeOrIRI ;
		sh:minCount 0 ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
		sh:message "The <http://purl.org/dc/terms/contributor> should be blank nodes or IRIs"
	] ;
	sh:property [
		sh:path dcterms:contributor ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
		sh:node sarefsh:PersonShape ;
		sh:message "Every contributor should be a <http://schema.org/Person> with <http://schema.org/givenName>, <http://schema.org/familyName>, and <http://schema.org/affiliation>"
	] ;
	sh:property [
		sh:path dcterms:publisher ;
		sh:maxCount 0 ;
		sh:severity sh:Warning ;
		sh:message "The annotation <http://purl.org/dc/terms/publisher> will be computed automatically"
	] ;
	sh:property [
		sh:path vann:preferredNamespacePrefix ;
		sh:maxCount 0 ;
		sh:severity sh:Warning ;
		sh:message "The annotation <http://purl.org/vocab/vann/preferredNamespacePrefix> will be computed automatically"
	] ;
	sh:property [
		sh:path vann:preferredNamespaceUri ;
		sh:maxCount 0 ;
		sh:severity sh:Warning ;
		sh:message "The annotation <http://purl.org/vocab/vann/preferredNamespaceUri> will be computed automatically"
	] .
	
sarefsh:PersonShape
	a sh:NodeShape ;
  sh:targetClass schema:Person ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
	sh:severity sh:Warning ;
	sh:property [
    sh:path rdf:type ;
    sh:hasValue schema:Person ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
    sh:message "Every contributor should be a <http://schema.org/Person>"
	] ;
	sh:property [
    sh:path schema:givenName ;
    sh:minCount 1 ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
    sh:message "Every contributor should have at least one <http://schema.org/givenName>"
	] ;
	sh:property [
    sh:path schema:familyName ;
    sh:minCount 1 ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
    sh:message "Every contributor should have at least one <http://schema.org/lastName>"
	] ;
	sh:property [
    sh:path schema:affiliation ;
    sh:minCount 1 ;
		sh:nodeKind sh:BlankNodeOrIRI ;
		sh:node sarefsh:AffiliationShape ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
    sh:message "Every contributor should have at least one <http://schema.org/affiliation>, that should be a blank node or a IRI of type <http://schema.org/Organization> with at least one <http://schema.org/name>"
	] .
	
sarefsh:AffiliationShape
	a sh:NodeShape ;
  sh:targetClass schema:Organization ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
	sh:severity sh:Warning ;
	sh:property [
    sh:path rdf:type ;
    sh:hasValue schema:Organization ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
    sh:message "The affiliation of each contributor should be a <http://schema.org/Organization>"
	] ;
	sh:property [
    sh:path schema:name ;
    sh:minCount 1 ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
		sh:severity sh:Warning ;
    sh:message "The affiliation of each contributor should have at least one <http://schema.org/name>"
	] .	
[] a sh:NodeShape ;
  sh:targetClass owl:Class,  owl:ObjectProperty, owl:DatatypeProperty , owl:NamedIndividual;
  sh:message "The following terms do not have at least one rdfs:label" ;
  sh:severity sh:Warning ;
  sh:or (
    [ sh:nodeKind sh:BlankNode ]
    [ 
      sh:path rdfs:label ;
      sh:nodeKind sh:Literal ;
      sh:minCount 1 ;
      sh:severity sh:Warning ;
      sh:message "The term should have at least one rdfs:label"
    ]
  ) .
[] a sh:NodeShape ;
  sh:targetClass owl:Class,  owl:ObjectProperty, owl:DatatypeProperty , owl:NamedIndividual;
  sh:message "The following terms do not have at least one rdfs:comment" ;
  sh:severity sh:Warning ;
  sh:or (
    [ sh:nodeKind sh:BlankNode ]
    [ 
      sh:path rdfs:comment ;
      sh:nodeKind sh:Literal ;
      sh:minCount 1 ;
      sh:severity sh:Warning ;
      sh:message "The term should have at least one rdfs:comment"
    ]
  ) .