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 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 rdfs: <http://www.w3.org/2000/01/rdf-schema#>
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 rdfs: <http://www.w3.org/2000/01/rdf-schema#>
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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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 rdfs: <http://www.w3.org/2000/01/rdf-schema#>
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 rdfs: <http://www.w3.org/2000/01/rdf-schema#>
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.

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

SELECT ?parent ?enfant WHERE {
  ?parent a skos:Concept.
  ?enfant a skos:Concept.
  ?parent skos:narrower ?enfant.
FILTER NOT EXISTS{  ?enfant skos:broader ?parent.}
}
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.}
}
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

SELECT ?a ?b WHERE {
  ?a a skos:Concept.
  ?b a skos:Concept.
  ?a skos:broader+ ?b.
FILTER EXISTS{  ?b skos:broader+ ?a.}
}
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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 rdfs: <http://www.w3.org/2000/01/rdf-schema#>
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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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.

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

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

Weather data

CASO

BSV

ppdo

AgronomicTaxon

AgroTechnoPôle

edit SideBar

Blix theme adapted by David Gilbert, powered by PmWiki