sarefShape.ttl 8.98 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:property [
    sh:path rdf:type ;
    sh:minCount 1 ;
    sh:hasValue owl:Ontology ;
  ] ;
  sh:property [
    sh:path owl:versionInfo ;
    sh:nodeKind sh:Literal ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "The annotation owl:versionInfo shall be set in the source file it should be equal to <<<<chomtute this automatically>>>>" ;
    sh:patten "<<<<compute this automatically before checking the ontology against this shape>>>>"
  ] ;
  sh:property [
    sh:path owl:versionIRI ;
    sh:nodeKind sh:IRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "The annotation owl:versionIRI shall be set in the source file it should be equal to <<<<chomtute this automatically>>>>" ;
    sh:patten "<<<<compute this automatically before checking the ontology against this shape>>>>"
  ] ;
  sh:property [
    sh:path owl:priorVersion ;
    sh:nodeKind sh:IRI ;
    sh:maxCount 0 ;
    sh:maxCount 1 ;
    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:patten "<<<<compute this automatically ---- this will be challenging >>>>" ;
  ] ;
  sh:property [
    sh:path owl:imports ;
    sh:nodeKind sh:IRI ;
    sh:pattern "^https://saref.etsi.org/(core|saref4[a-z]{4})/" ;
    sh:severity sh:Warning ;
    sh:message "Only SAREF ontologies with specific versions shall be imported. Their URIs starts with `^https://saref.etsi.org/(core|saref4[a-z]{4})/`"
  ] ;
  sh:property [ 
    sh:path dcterms:title ;
    sh:nodeKind sh:Literal ;
    sh:minCount 1 ;
    sh:severity sh:Warning ;
    sh:message """"The ontology document shall contain at least one metadata `dcterms:title` 
Each value for this metadata shall be a literal with datatype IRI `xsd:string` or `xsd:langString`
There should be at least one value with the `xsd:langString` datatype and the en language.
(See ETSI TS 103 673 Clause 9.4.3.2 for more details)"""
  ] ;  
  sh:property [ 
    sh:path dcterms:abstract ;
    sh:nodeKind sh:Literal ;
    sh:minCount 0 ;
  ] ;
  sh:property [
    sh:path dcterms:description ;
    sh:nodeKind sh:Literal ;
    sh:minCount 1 ;
    sh:severity sh:Warning ;
    sh:message "The ontology should have exactly at least <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 1 ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "A metadata <http://purl.org/dc/terms/issued> with datatype `xsd:date` is recommended."
  ] ;
  sh:property [
    sh:path dcterms:modified ;
    sh:datatype xsd:date ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "A metadata <http://purl.org/dc/terms/modified> with datatype `xsd:date` is recommended."
    # do not check that the modified date is the date of today. 
    # do not generate it automatically 
  ] ;
  sh:property [
    sh:path dcterms:source ;
    sh:nodeKind sh:IRI ;
    sh:minCount 1 ; # dct:source <https://forge.etsi.org/rep/saref/saref4inma> ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "A metadata <http://purl.org/dc/terms/source> should point to the Technical Specification  <<<update this >>>"
  ] ;
  sh:property [
    sh:path rdfs:seeAlso ;
    sh:nodeKind sh:IRI ;
    sh:minCount 1 ; # <https://www.etsi.org/deliver/etsi_ts/103400_103499/10341005/01.01.01_60/ts_10341005v010101p.pdf> ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "The link to the corresponding TS <<<update this >>>"
  ] ;
  sh:property [
    sh:path dcterms:license ;
    sh:nodeKind sh:IRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:pattern "https://forge.etsi.org/etsi-software-license" ;
    sh:severity sh:Warning ;
    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 ;
    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 ;
    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:nodeKind sh:IRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:pattern "https://www.etsi.org/" ;
    sh:severity sh:Warning ;
    sh:message "There shall be at least one annotation <http://purl.org/dc/terms/publisher> <https://www.etsi.org/>"
  ] ;
  sh:property [
    sh:path vann:preferredNamespacePrefix ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "The annotation <http://purl.org/vocab/vann/preferredNamespacePrefix>   <<<<compute this automatically ---- this will be challenging >>>>" ;
    sh:patten "<<<<compute this automatically ---- this will be challenging >>>>"
  ] ;
  sh:property [
    sh:path vann:preferredNamespaceUri ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:severity sh:Warning ;
    sh:message "The annotation <http://purl.org/vocab/vann/preferredNamespaceUri>   <<<<compute this automatically ---- this will be challenging >>>> " ;
    sh:patten "<<<<compute this automatically ---- this will be challenging >>>>"
  ] .
  
sarefsh:PersonShape
  sh:targetClass schema:Person ;
  sh:severity sh:Warning ;
  sh:property [
    sh:path rdf:type ;
    sh:hasValue schema:Person ;
    sh:severity sh:Warning ;
    sh:message "Every contributor should be a <http://schema.org/Person>"
    sh:path schema:givenName ;
    sh:minCount 1 ;
    sh:severity sh:Warning ;
    sh:message "Every contributor should have at least one <http://schema.org/givenName>"
    sh:path schema:familyName ;
    sh:minCount 1 ;
    sh:severity sh:Warning ;
    sh:message "Every contributor should have at least one <http://schema.org/lastName>"
    sh:path schema:affiliation ;
    sh:minCount 1 ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:node sarefsh:AffiliationShape ;
    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
  sh:targetClass schema:Organization ;
  sh:severity sh:Warning ;
  sh:property [
    sh:path rdf:type ;
    sh:hasValue schema:Organization ;
    sh:severity sh:Warning ;
    sh:message "The affiliation of each contributor should be a <http://schema.org/Organization>"
    sh:path schema:name ;
    sh:minCount 1 ;
    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"
    ]
  ) .