data
ontology
HN
excellente présentatino de T. Francart sur le sujet:
https://rbdd.cnrs.fr/local/cache-zotspip/23D7N9G8/Francart SHApe Constraints Language.pdf
shacl définit des contraintes sur les triplet.
Concrètement il définit des sh:PropertyShape (les contraintes) sur des sh:NodeShape (les classes)
d'abord on définit des "nodeshapes".
Ce sont des shapes qui contiennent les objets controlés.
Valeurs:
rdf:type
: sh:NodeShape forcément!
sh:targetClass
: ensemble des objets controlés par cette shape
sh:nodeKind
: sh:IRI signifie que l'on souhaite que les instances des classes de cette shape soit des IRI, pas des noeuds anonymes.
sh:property
: ce sont les contraintes (propertyshape) voir plus bas attaché à la shape.
sh:ignoredPropertie
: ce sont les propriétés owl qui ne seront pas vérifié en mode "closed shapes". On y met toujours au moins rdf:type
mais aussi toutes les propriétés d'annotation (rdfs:label
, skos:prefLabel
, skos:note
, etc.)
shortcut: Si seule une classe est controlée on peut garder son IRI et ne pas renseigner de sh:targetClass. C'est ce que fait sparna.
L'exemple précéent peut être ré-écrit comme suit:
Ensuite on définit les contraintes, ce sont les "propertyshape"
Chaque propertyshape est une nouvelle contrainte.
Dans l'exemple précédent, pour la classeE67_BIrth
la sh:property <crm:E67_Birth-P96_by_mother>
est une contrainte que l'on va définir ici.
Valeurs:
rdf:type
: sh:PropertyShape forcément!
sh:path
: la propriété owl concernée
sh:class
: classe attendue comme valeur de la propriété owl (si une seule)
sh:or
: classes attendues comme valeurs de la propriété (si plusieurs)
ex:
on définit des contraintes pour chaque shape.
Si je reprends mon exemple et que je met tout dans la même shape (je décloisonne) ça donne
Il est possible de cible avec d'autres outils que targetClass
par exemple avec sh:targeSubjectOf
ou sh:targObjectOf
pour récupérer les sujets/objets des triplet associée à une propriété owl.
On peut alors écrire par exemple:
il est possible de définir d'autres contraintes sur les shapes.
Par exemple, on veut qu'il y ait 0 ou 1 mère seulement par Birth.
on peut écrire:
On veut que le type de la mère soit un IRI (pas une chaine de char)
Par exemple on veut que la mère soit une chaine de char (et pas un IRI) et corresponde à un pattern