Vérification du thésaurus FrenchCropUsage
Un ensemble de requêtes SPARQL a été défini pour vérifier certaines contraintes.
Cette page liste les contraintes que nous avons utilisées pour le développement de notre thésaurus. Une contrainte est décrite par son identifiant, son niveau de priorité et une description de la requête associée. Le niveau de priorité varie entre contrainte forte > contrainte faible > indication. Certaines de ces contraintes sont déjà définies dans des travaux similaires. Nous pouvons citer les outil Skosify [Suominen2012] et qSkos [Mader2012] .
Publications
C. ROUSSEY, S. BERNARD. Améliorer la qualité d’un thésaurus à l’aide de requêtes SPARQL. Dans les actes du 9es atelier Recherche d'Information SEmantique (RISE 2017) adossé à la conférence IC 2017 de la Plateforme Francophone d'Intelligence Artificielle, 4 juillet 2017, Caen, 11 pages
Table of contents
- Contraintes liées au format SKOS
- Contraintes de domaine propres au thésaurus FrenchCropUsage
- Bibliographie
Contraintes liées au format SKOS
Contraintes sur les labels
LabLang
Contrainte forte: tous les labels doivent être associés à une langue, le français dans notre cas. Cette contrainte est déjà implémentée dans plusieurs outils: qSkos (Incomplete Language Coverage) , Skosify (Missing Language Tag).
Requête: trouver les labels (préféré, alternatif, caché) qui n'ont pas la langue française associée.
Réparation possible dans le cadre d'un thésaurus monolingue
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT DISTINCT ?label WHERE {
{
?concept rdf:type skos:Concept.
?concept skos:prefLabel ?label.
MINUS {
?concept rdf:type skos:Concept.
?concept skos:prefLabel ?label.
BIND ( LANG(?label) AS ?LANG)
VALUES ?LANG {"fr"}
}
}
UNION
{
?concept rdf:type skos:Concept.
?concept skos:altLabel ?label.
MINUS {
?concept rdf:type skos:Concept.
?concept skos:altLabel ?label.
BIND ( LANG(?label) AS ?LANG)
VALUES ?LANG {"fr"}
}
}
UNION
{
?concept rdf:type skos:Concept.
?concept skos:hiddenLabel ?label.
MINUS {
?concept rdf:type skos:Concept.
?concept skos:hiddenLabel ?label.
BIND ( LANG(?label) AS ?LANG)
VALUES ?LANG {"fr"}
}
}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
ConcLabPref
Contrainte forte: dans notre thesaurus, un concept skos doit avoir un label préféré. Cette contrainte est déjà implémentée dans plusieurs outils: qSkos (Undocumented Concept), Poolparty Checker , Skosify (Missing Label Concept).
Requête: afficher les concepts qui n'ont pas de label préféré en français.
Réparation difficile automatiquement, sauf s'il n'existe qu'un seul label déjà enregistré.
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?concept WHERE {
?concept rdf:type skos:Concept.
FILTER NOT EXISTS {
?concept skos:prefLabel ?label.
BIND ( LANG(?label) AS ?LANG)
VALUES ?LANG {"fr"}
}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
UniLabPref
Contrainte forte: un label préféré doit être associé à un unique concept. Cette contrainte est clairement indiquée dans les specifications SKOS. Elle est implémentée dans plusieurs outils: qSkos (Label Conflicts) , Poolparty Checker, Skosify (Ambiguous prefLabel values).
Requête: afficher les labels préférés qui sont associés à plusieurs concepts.
Réparation automatique impossible.
SELECT ?label (COUNT(?concept) AS ?nb) WHERE {
?concept rdf:type skos:Concept.
?concept skos:prefLabel ?label.
}
GROUP BY ?label
HAVING (?nb > 1)
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
LabDiff
Contrainte faible: un label préféré doit être distinct d'un label alternatif pour un concept donné. La spécification SKOS est plus stricte : prefLabel, altLabel et hiddenLabel doivent être disjoints deux à deux pour un concept donné. Autrement dit, un concept ne peut pas partager de valeurs communes pour les propriétés prefLabel, altLabel et HiddenLabel. Cette contrainte est implémentée dans plusieurs outils: Poolparty Checker, qSKOS (Label Conflicts), Skosify (Overlap in Disjoint Label Properties).
Requête: trouver les concepts dont un label alternatif est équivalent à un label préféré.
Réparation possible automatiquement mais pas conseillée : peut cacher des problèmes.
SELECT ?label1 ?concept
WHERE{
?concept rdf:type skos:Concept.
?concept skos:prefLabel ?label.
?concept skos:altLabel ?label.
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
Polysem
Indication: éviter les répétitions entre les différents types de labels sauf en cas de polysémie où un label est associé à deux concepts.
Requête: trouver les concepts qui partagent des labels (préférés , alternatifs) en commun.
Réparation automatique déconseillée ; la polysémie est autorisée.
SELECT ?label1 (COUNT (DISTINCT ?concept1) AS ?nbc)
WHERE{
?concept1 rdf:type skos:Concept.
?concept1 ?p ?label1.
{
SELECT ?label ?concept
WHERE {
{
?concept skos:prefLabel ?label.
}
UNION
{
?concept skos:altLabel ?label.
}
}
}
FILTER (?label1=?label && ?concept1=?concept).
}
GROUP BY (?label1)
HAVING (?nbc > 1)
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs. Attention, cette requête nécessite un peu de temps — 12s — pour s'exécuter)
Contraintes sur les notes et définitions
NoteLang
Contrainte forte: une définition, une note, une note éditoriale doivent être associée à une langue, le francais dans notre cas. Cette contrainte est déjà implémentée dans plusieurs outils: qSkos ( Language Tag Support) , Skosify (Missing Language Tag).
Requête: trouver les concepts dont la définition, la note ou la note éditoriale ne sont pas associées à la langue francaise.
Réparation automatique possible.
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT DISTINCT ?concept
WHERE {
?concept rdf:type skos:Concept.
{
?concept skos:definition ?note.
MINUS {
?concept skos:definition ?note.
BIND ( LANG(?note) AS ?LANG)
VALUES ?LANG {"fr"}
}
}
UNION
{
?concept skos:note ?note.
MINUS {
?concept skos:note ?note.
BIND ( LANG(?note) AS ?LANG)
VALUES ?LANG {"fr"}
}
}
UNION
{
?concept skos:editorialNote ?note.
MINUS {
?concept skos:editorialNote ?note.
BIND ( LANG(?note) AS ?LANG)
VALUES ?LANG {"fr"}
}
}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
ConcDef
Contrainte forte: un concept skos doit avoir une définition. Cette contrainte est vérifiée par qSKOS (Undocumented Concepts).
Requête: trouver les concepts qui ne sont pas associés à une définition.
Réparation impossible automatiquement.
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?concept WHERE {
?concept rdf:type skos:Concept.
FILTER NOT EXISTS {
?concept skos:definition ?def.
}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
Contraintes sur les schemas
HasSchema
Contrainte forte: un concept skos doit être associé à un schema.
Requête: trouver les concepts qui ne sont pas associés à un schema.
Réparation automatique possible.
SELECT ?concept WHERE {
?concept a skos:Concept.
FILTER NOT EXISTS
{?concept skos:inScheme ?aScheme.}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
HasTopConc
Contrainte forte: un schema doit avoir des topConcepts. Cette contrainte est vérifiée par qSKOS (Omitted Top Concepts).
Requête: trouver les schémas qui n'ont pas de top concepts.
Réparation automatique difficile.
SELECT ?schema WHERE {
?schema a skos:ConceptScheme.
FILTER NOT EXISTS
{?schema skos:hasTopConcept ?concept.}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
Contrainte sur la hiérarchie induite par les liens skos:broader/skos:narrower, et sur la hiérarchie induite par les liens skos:related.
CheckRoot
Contrainte forte: tout concept doit être rattaché à la racine.
Requête: recherche les concepts qui ne sont pas rattaché à la racine.
Réparation automatique non conseillée car cache un autre problème.
SELECT ?concept WHERE {
?concept rdf:type skos:Concept.
FILTER NOT EXISTS {
?concept skos:broader* ?parent.
?parent a skos:Concept.
?parent skos:topConceptOf ?schema.
?schema a skos:ConceptScheme .
}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
TopOrphelin
Contrainte forte: les top concepts du schema ne doivent pas avoir de père. Cette contrainte est vérifiée par qSKOS (Top Concept Having Broader Concepts.
Requête: trouver les top concepts qui ont un père.
Réparation automatique non conseillée car cache un autre problème.
SELECT ?concept WHERE {
?concept rdf:type skos:Concept.
?schema skos:hasTopConcept ?concept.
FILTER EXISTS {
?concept skos:broader ?parent.
}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
CheckInverse
Contrainte forte: si un lien broader existe, le lien inverse narrower doit aussi exister (et inversement).
Requête: trouver un lien narrower qui n'a pas son lien inverse broader.
Requête: trouver un lien broader qui n'a pas son lien inverse narrower.
Réparation automatique possible mais pas forcément conseillée : il faut soit ajouter le lien inverse soit supprimer le lien suivant les cas.
SELECT ?parent ?enfant WHERE {
?parent a skos:Concept.
?enfant a skos:Concept.
?parent skos:narrower ?enfant.
FILTER NOT EXISTS{ ?enfant skos:broader ?parent.}
}
SELECT ?enfant ?parent WHERE {
?parent a skos:Concept.
?enfant a skos:Concept.
?enfant skos:broader ?parent.
FILTER NOT EXISTS{ ?parent skos:narrower ?enfant. }
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
CheckBi
Contrainte forte: les liens related doivent être bidirectionnels.
Requête: trouver un lien related qui n'a pas son inverse.
Réparation automatique possible mais pas forcément conseillée :
il faut soit ajouter le lien inverse soit supprimer le lien, suivant les cas.
SELECT ?source ?cible WHERE {
?source a skos:Concept.
?cible a skos:Concept.
?source skos:related ?cible.
FILTER NOT EXISTS{ ?cible skos:related ?source.}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
CheckTrans
Indication: rechercher des liens transitifs dans la hiérarchie de skos:broader ou skos:narrower. Ces propriétés ne doivent indiquer que des liens directs.
Requête: trouver un lien skos:broader (ou skos:narrower) qui s'exprime aussi par un chemin de liens skos:broader (ou skos:narrower).
Réparation: ce n'est pas une erreur c'est juste pour nettoyer la hiérarchie de liens pas forcément utiles.
SELECT ?grandparent ?parent ?enfant WHERE {
?grandparent a skos:Concept.
?parent a skos:Concept.
?enfant a skos:Concept.
?grandparent skos:narrower+ ?parent.
?parent skos:narrower+ ?enfant.
FILTER EXISTS{ ?grandparent skos:narrower ?enfant.}
}
SELECT ?enfant ?parent ?grandparent WHERE {
?grandparent a skos:Concept.
?parent a skos:Concept.
?enfant a skos:Concept.
?enfant skos:broader+ ?parent.
?parent skos:broader+ ?grandparent.
FILTER EXISTS{ ?enfant skos:broader ?grandparent.}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
CheckCycle
Contrainte forte: il ne doit pas y avoir de cycle entre les liens narrower (idem pour les liens broader). Cette contrainte n'est pas indiquée dans les spécifications SKOS. Par contre, pour un usage en recherche d'informations, cette contrainte doit être vérifiée. Elle est vérifiée par plusieurs outils: qSKOS (Cyclic Hierarchical Relations), Skosify (Cycles in broader Hierarchy).
Requête: recherche de cycles.
SELECT ?a ?b WHERE {
?a a skos:Concept.
?b a skos:Concept.
?a skos:broader+ ?b.
FILTER EXISTS{ ?b skos:broader+ ?a.}
}
SELECT ?a ?b WHERE {
?a a skos:Concept.
?b a skos:Concept.
?a skos:narrower+ ?b.
FILTER EXISTS{ ?b skos:narrower+ ?a.}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
Contraintes de domaine propres au thésaurus FrenchCropUsage
SupNoteEdition
Contrainte forte propre à notre thésaurus: pour la publication sur le web, les notes éditoriales doivent être supprimées.
Requête: trouver les concepts qui ont des notes éditoriales.
Réparation automatique conseillée.
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?concept WHERE {
?concept rdf:type skos:Concept.
FILTER EXISTS {
?concept skos:editorialNote ?note.
}
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
CheckCoherence
Indication dependant uniquement de notre thésaurus: vérifier que le parent est compatible avec son enfant. Nous avons 6 grandes catégories de cultures ; un concept parent qui est un descendant d'une catégorie doit avoir généralement sa descendance sous cette catégorie uniquement.
Requête: rechercher les descendants d'un concept qui ne sont pas descendants de la même catégorie de culture. Cette requête est à spécialiser : choisir une catégorie pour le parent et ne mettre que les catégories non acceptables pour les enfants. C'est intéressant de regarder cette liste pour valider certaines associations aupres d'experts. Les céréales sont par exemple classées dans “grandes cultures” et dans “cultures fourragères” donc l'association entre “grandes cultures” et “cultures fourragères” est acceptée pour toutes les céréales.
SELECT ?parent ?labelParentRoot ?child ?labelChildRoot WHERE {
?parent a skos:Concept.
?parent skos:broader+ ?parentRoot.
?parentRoot a skos:Concept.
?parentRoot skos:prefLabel ?labelParentRoot.
?child a skos:Concept.
?child skos:broader+ ?childRoot.
?childRoot a skos:Concept.
?childRoot skos:prefLabel ?labelChildRoot.
?child skos:broader ?parent.
VALUES ?labelParentRoot { "culture légumière"@fr "culture fruitière"@fr "grande culture"@fr "culture fourragère"@fr "horticulture ornementale"@fr "zone non agricole"@fr }
VALUES ?labelChildRoot { "culture légumière"@fr "culture fruitière"@fr "grande culture"@fr "culture fourragère"@fr "horticulture ornementale"@fr "zone non agricole"@fr }
FILTER (?labelChildRoot != ?labelParentRoot)
}
(Cliquez ici pour exécuter la requête sur un jeu de données test contenant des erreurs)
CheckAmbiguity
Indication dependant uniquement de notre thésaurus: vérifier qu'un concept ambigu a bien des enfants qui sont catégorisés dans des cultures différentes (parmis les 6 grandes catégories de culture).
Requête: trouver parmi les concepts ambigus (les fils directs de la racine qui ne sont pas dans les 6 grandes catégories), ceux dont les enfants sont tous classés dans la même catégorie.
SELECT ?ambParent (COUNT(DISTINCT ?labelChildRoot) AS ?nbChildRoot) WHERE {
?ambParent a skos:Concept.
?ambParent skos:broader ?root.
?ambParent skos:prefLabel ?parentLabel.
?root a skos:Concept.
?root skos:prefLabel ?rootLabel.
?ambParent skos:broader ?root.
?child a skos:Concept.
?child skos:broader+ ?childRoot.
?childRoot a skos:Concept.
?childRoot skos:prefLabel ?labelChildRoot.
?child skos:broader ?ambParent.
FILTER (?parentLabel NOT IN ("culture légumière"@fr, "culture fruitière"@fr, "grande culture"@fr, "culture fourragère"@fr, "horticulture ornementale"@fr, "zone non agricole"@fr))
VALUES ?rootLabel {"usage des cultures en France"@fr}
VALUES ?labelChildRoot { "culture légumière"@fr "culture fruitière"@fr "grande culture"@fr "culture fourragère"@fr "horticulture ornementale"@fr "zone non agricole"@fr }
}
GROUP BY ?ambParent
HAVING (COUNT(DISTINCT ?labelChildRoot) <2)
CheckPatternCropPartMultipleUsage
Indication: trouver les concepts de culture qui ont plusieurs parents directs.
SELECT ?cropLabel (COUNT(DISTINCT ?parentLabel) AS ?nb) WHERE {
?crop a skos:Concept.
?crop skos:prefLabel ?cropLabel.
?crop skos:broader ?parent.
?parent skos:prefLabel ?parentLabel.
}
GROUP BY ?cropLabel
HAVING (?nb > 2)
Ne donne pas un résultat exact.
CheckPatternCropMultipleUsage
Indication: trouver les concepts de culture qui se dissocient en plusieurs fils, chacun indiquant un usage différent.
Requête: trouver les concepts dont les fils ont un label (préféré) contenant le label préféré du concept en question.
SELECT ?cropLabel (COUNT(DISTINCT ?cropUsageLabel) AS ?nbRole) WHERE {
?crop a skos:Concept.
?crop skos:prefLabel ?cropLabel.
?crop skos:narrower ?cropUsage.
?crop a skos:Concept.
?cropUsage skos:prefLabel ?cropUsageLabel.
FILTER (CONTAINS (?cropUsageLabel, ?cropLabel) )
}
GROUP BY ?cropLabel
HAVING (?nbRole >1)
Ne donne pas un résultat exact.
Bibliographie
[Mader2012] Mader, Christian, Haslhofer, Bernhard, et Isaac, Antoine. Finding quality issues in SKOS vocabularies. Theory and Practice of Digital Libraries, 2012, p. 222-233. https://link.springer.com/chapter/10.1007/978-3-642-33290-6_25
[Miles2009] Miles, Alistair, Bechhofer, Sean. SKOS simple knowledge organization system reference. 2009.
[Suominen2012] Suominen, Osma et Hyvönen, Eero. Improving the quality of SKOS vocabularies with Skosify.In : International Conference on Knowledge Engineering and Knowledge Management. Springer Berlin Heidelberg, 2012. p. 383-397. https://link.springer.com/chapter/10.1007/978-3-642-33876-2_34