Exemples de Requêtes
Les requêtes ci-dessous sont fournies à titre d’exemples pour vous
permettre de commencer à utiliser SPARQL. Sélectionnez une requête dans
la liste et cliquez sur Essayer la requête
pour l'intégrer automatiquement dans
le point terminal SPARQL. À partir de là, vous pouvez modifier la
requête selon vos besoins et cliquer sur Exécuter
pour lancer la
requête.
- 1 Hiérarchie des concepts
- 2 Dates de création et de modification du concept
- 3 Sources et contributeurs
- 4 Références pour les images
-
5 Étiquettes
- 5.1 Recherche de concepts par étiquette
- 5.2 Tous les termes (et leurs parents)
- 5.3 Étiquettes par langue
- 5.4 Forme inversée et naturelle (au moyen d’une propriété personnalisée)
- 5.5 Forme inversée et naturelle (au moyen de dct:type)
- 5.6 Forme inversée de la variante canadienne
- 5.7 Étiquettes par langue
- 6 Notes et définitions
- 7 Recherche en texte intégral (RTI)
- 8 Dénombrement
1 Hiérarchie des concepts
1.1 Concepts des niveaux supérieurs (Catégories)
Trouvez les concepts de premier niveau (Catégories) dans Nomenclature. Cette requête permet de trouver les concepts qui comprennent la propriété skos:topConceptOf (en anglais seulement) et indique l’identifiant ainsi que les termes préférentiels (skos:prefLabel) (en anglais seulement).
SELECT ?id ?termePref {
?id skos:topConceptOf nom: ;
skos:prefLabel ?termePref
FILTER(lang(?termePref)= "fr")
}
ORDER BY ?termePref
1.2 Trois niveaux supérieurs
Les relations hiérarchiques sont exprimées par skos:narrower (en anglais seulement) (pour lier le concept à ses enfants) et par skos:broader (en anglais seulement) (pour lier le concept à son concept parent). Cette requête permet de trouver dans Nomenclature les catégories (concepts de premier niveau), leurs classes (concepts de deuxième niveau) et leurs sous-classes (concepts de troisième niveau), en plus d’indiquer l’identifiant et le terme préférentiel (skos:prefLabel) (en anglais seulement).
SELECT * {
?id skos:topConceptOf nom: ;
skos:prefLabel ?termePref;
skos:narrower ?idNiv2.
?idNiv2 skos:prefLabel ?termePrefNiv2;
skos:narrower ?idNiv3.
?idNiv3 skos:prefLabel ?termePrefNiv3
FILTER(lang(?termePref)= "fr" && lang(?termePrefNiv2)= "fr" && lang(?termePrefNiv3)= "fr")
}
ORDER BY ?termePref
1.3 Enfants directs d’un concept
Cette requête permet de trouver les enfants (relation directe uniquement) d’un concept dans Nomenclature, p. ex. nom:12838 (Catégorie 08 : Moyens d’expression). Le résultat de la requête indique les adresses URI des enfants et leurs termes préférentiels en anglais et en français (chaque concept est nécessairement associé à un seul terme préférentiel en anglais et à un seul terme préférentiel en français).
SELECT * {
?id skos:broader nom:12838; skos:prefLabel ?termePrefAng, ?termePrefFr.
FILTER(lang(?termePrefAng) = 'en')
FILTER(lang(?termePrefFr) = 'fr')
}
1.4 Tous les descendants d’un concept
Cette requête permet de trouver les descendants (les enfants directs et indirects) d’un concept dans Nomenclature, p. ex. nom:12838 (Catégorie 08 : Moyens d’expression). Le chemin de la propriété utilise les occurrences inverses (^) et multiples (+) de skos:broader (en anglais seulement). Le résultat de la requête indique les adresses URI des descendants et leurs termes préférentiels.
SELECT * {
nom:12838 (^skos:broader)+ ?descendant.
?descendant skos:prefLabel ?termePref.
FILTER(lang(?termePref) = 'fr')
}
2 Dates de création et de modification du concept
La date de création du concept est exprimée par dct:created (en anglais seulement) et la date de modification du concept est exprimée par dct:modified (en anglais seulement).
2.1 Concept le plus récemment modifié
Cette requête permet de trouver le concept le plus récemment modifié. Le résultat de la requête peut désigner de nouveaux concepts ou des concepts ayant été modifiés significativement (p. ex. changement de termes préférentiels) ou non (p. ex. correction d'une coquille dans une définition). Il indique l’identifiant du concept, la date de sa modification et le terme préférentiel.
SELECT * {
?id a skos:Concept;
dct:modified ?dateModif;
skos:prefLabel ?termePref.
FILTER(lang(?termePref) = "fr")
}
ORDER BY DESC(?dateModif)
LIMIT 1
2.2 Dénombrement des concepts modifiés
Cette requête permet de dénombrer les concepts qui ont été modifiés depuis leur création. Le résultat de la requête peut désigner des concepts qui ont été modifiés significativement (p. ex. changement de termes préférentiels) ou non (p. ex. correction d'une coquille dans une définition).
SELECT (COUNT(?dateModif) AS ?compte) {
[] a skos:Concept;
dct:created ?dateCreation;
dct:modified ?dateModif
FILTER(?dateModif > ?dateCreation)
}
2.3 Dénombrement des concepts créés et modifiés par année
Cette requête permet de dénombrer les nouveaux concepts ainsi que les concepts qui ont été modifiés et les regrouper par année. Le résultat de la requête peut désigner de nouveaux concepts ou des concepts modifiés significativement (p. ex. changement de termes préférentiels) ou non (p. ex. correction d'une coquille dans une définition).
SELECT ?annee (COUNT(?modifie) AS ?compteModifie) (COUNT(?cree) AS ?compteCree) {
{
?modifie a skos:Concept;
dct:modified ?dateModif
BIND( year(?dateModif) AS ?annee )
}
UNION
{
?cree a skos:Concept;
dct:created ?dateCreation
BIND( year(?dateCreation) AS ?annee )
}
}
GROUP BY ?annee
ORDER BY ?annee
2.4 Toutes les modifications dans une période donnée
Cette requête permet de trouver les nouveaux concepts et les concepts qui ont été modifiés significativement (p. ex. changement de termes préférentiels) ou non (p. ex. correction d'une coquille dans une définition) p. ex. entre le 1er janvier 2018 et le 31 décembre 2021. Le résultat de la requête indique l’identifiant du concept, le terme préférentiel et la date de la dernière modification.
SELECT * {
?id a skos:Concept;
dct:modified ?dateModif;
skos:prefLabel ?termePref.
FILTER(lang(?termePref) = "fr")
FILTER(?dateModif >= "2018-01-01T00:00:00"^^xsd:dateTime && ?dateModif <= "2021-12-31T23:59:59"^^xsd:dateTime)
}
ORDER BY DESC(?dateModif)
2.5 Modifications importantes dans une période donnée
Cette requête permet de trouver les nouveaux concepts, les concepts qui ont été déplacés ou fusionnés, les concepts obsolètes ainsi que les concepts dont le terme préférentiel a été modifié dans n’importe quelle langue entre p.ex. le 26 juillet 2018 et le 31 décembre 2021. Le résultat de la requête indique l’identifiant, le terme préférentiel, le type de modification et ses détails ainsi que la date de modification.
SELECT ?id ?termePref ?typeRevision ?desc ?dateModif {
VALUES (?typeRevision) {
("Ajout - Concept"@fr)
("Suppression - Concept"@fr)
("Déplacement"@fr)
("Fusion"@fr)
("Ajout - Terme préférentiel"@fr)
("Suppression - Terme préférentiel"@fr)
("Mise à jour - Terme préférentiel"@fr)
}
?id a skos:Concept;
rdfs:label ?termePref;
skos:changeNote ?revision.
?revision rdfs:label ?typeRevision;
dc:description ?desc;
cs:createdDate ?dateModif.
FILTER(?dateModif >= "2018-07-26T00:00:00"^^xsd:dateTime && ?dateModif <= "2021-12-31T23:59:59"^^xsd:dateTime)
FILTER(lang(?termePref)="fr")
FILTER(lang(?typeRevision)="fr")
FILTER(lang(?desc)="fr")
}
ORDER BY DESC(?dateModif)
3 Sources et contributeurs
3.1 Sources d’un terme
Cette requête permet de trouver les sources des termes pour tous les termes préférentiels dans Nomenclature. Chaque source de terme est listée qu'une seule fois. Le résultat de la requête indique le lien Zotero, la citation complète, le dénombrement et l’adresse URI de la source du terme.
SELECT (COUNT(*) AS ?compte) ?sourceTerme ?zotero ?biblio
{
?id skosxl:prefLabel/schema:citation ?sourceTerme.
?sourceTerme schema:url ?zotero;
dct:bibliographicCitation ?biblio.
FILTER(lang(?biblio) = "fr")
}
GROUP BY ?sourceTerme ?zotero ?biblio
3.2 Contributeurs d'un terme
Cette requête permet de trouver les contributeurs des termes pour tous les termes préférentiels dans Nomenclature. Chaque contributeur de terme est listé qu'une seule fois. Le résultat de la requête indique le nombre de contributeurs, leur adresse URI, leurs noms en anglais et en français et leurs surnoms.
SELECT (COUNT(*) AS ?compte) ?contrib ?nomAng ?nomFr ?surnom
{
?id skosxl:prefLabel/dct:contributor ?contrib.
?contrib foaf:name ?nomAng,?nomFr;
foaf:nick ?surnom.
FILTER(lang(?nomAng) = "en")
FILTER(lang(?nomFr) = "fr")
}
GROUP BY ?contrib ?nomAng ?nomFr ?surnom
3.3 Références bibliographiques
Cette requête permet de trouver toutes les références bibliographiques des concepts. Le résultat de la requête indique la citation, l’identifiant du concept et l’identifiant de la référence bibliographique.
SELECT * {
?id schema:citation ?citation
OPTIONAL{?citation dct:bibliographicCitation ?biblio FILTER(lang(?biblio)="fr")}
}
3.4 Sources d'une définition
Cette requête permet de trouver les sources d’une définition. Le résultat de cette requête indique le lien Zotero ainsi que la citation intégrale, en plus du dénombrement et de l’adresse URI de la source de la définition.
SELECT (COUNT(*) AS ?compte) ?sourceDef ?zotero ?biblio
{
?id skos:definition/schema:citation ?sourceDef.
?sourceDef schema:url ?zotero;
dct:bibliographicCitation ?biblio.
FILTER(lang(?biblio) = "fr")
}
GROUP BY ?sourceDef ?zotero ?biblio
4 Références pour les images
4.1 Dénombrement des images
Cette requête permet de trouver le nombre d’images dans Nomenclature.
SELECT (COUNT(*) AS ?images) {[] a skos:Concept; schema:image []}
4.2 Dénombrement des concepts avec images
Cette requête permet de trouver le nombre de concepts qui ont des images dans Nomenclature.
SELECT (COUNT(?id) AS ?concepts)
{
?id a skos:Concept;
schema:image/schema:position 1.
}
4.3 Images liées à un concept
Cette requête permet de trouver toutes les images associées p. ex. au concept nom:11695 (dirigeable souple). Le résultat de la requête indique le terme préférentiel, l’adresse URL de l’image, l’adresse URL originale de la source de l’image et la mention de source pour l’image.
SELECT * {
nom:11695 schema:image ?uriImage;
skos:prefLabel ?termePref.
?uriImage a schema:ImageObject;
schema:contentUrl ?image;
schema:creditText ?sourceImage;
dct:source ?imageOriginale.
FILTER(lang(?termePref) = "fr")
}
5 Étiquettes
5.1 Recherche de concepts par étiquette
Cette requête permet de trouver les concepts dont le terme préférentiel contient p. ex. « wagon » (insensible à la casse). Le résultat de la recherche indique l’identifiant et l’étiquette du concept.
Cependant, les fonctions « REGEX() » [expression rationnelle] et « CONTAINS() » [contient également] ne sont pas efficaces. Elles doivent être utilisées uniquement pour des requêtes exploratoires et ne devraient pas être utilisées dans l’application dorsale d’un système de production. Dans un tel cas, utilisez plutôt la fonction de recherche en texte intégral (RTI) : voir la section 07 ci-dessous.
SELECT ?id ?termePref
{
?id skos:prefLabel ?termePref .
FILTER(REGEX(?termePref,"wagon","i"))
}
5.2 Tous les termes (et leurs parents)
Cette requête permet de trouver tous les concepts, dans toutes les langues, avec des termes préférentiels, des termes alternatifs et des termes cachés (peu importe la langue) contenant le mot p. ex. « cabinet » (insensible à la casse). Le résultat de la requête indique l’identifiant du concept, les termes préférentiels, les termes alternatifs, les termes cachés et les termes préférentiels des parents dans toutes les langues.
SELECT * {
?id skos:prefLabel|skos:altLabel|skos:hiddenLabel ?toutTerme;
skos:prefLabel ?termePref;
skos:broader/skos:prefLabel ?termeGenerique
FILTER(REGEX(?toutTerme,"cabinet","i"))
FILTER(lang(?termePref) = 'fr' && lang(?termeGenerique) = 'fr')
}
5.3 Étiquettes par langue
Cette requête permet de trouver toutes les langues utilisées dans les étiquettes structurées (skosxl:Label) (en anglais seulement) et leur fréquence.
SELECT ?lang (COUNT(*) AS ?compte) {
[] a skosxl:Label;
dct:language/skos:notation ?lang
} GROUP BY ?lang ORDER BY DESC(?compte)
5.4 Forme inversée et naturelle (au moyen d’une propriété personnalisée)
Cette requête permet de trouver les formes inversées et naturelles des termes dans Nomenclature contenant la chaîne de caractères p. ex. « struct » (insensible à la casse). Cette requête utilise la propriété personnalisée nomo:invertedFormOf (au lieu de dct:type (en anglais seulement), comme dans la requête ci-dessous). Afin de fournir une liste exhaustive des résultats de recherche, les termes composés d'un seul mot sont inclus même s’ils ne sont pas compris dans nomo:invertedFormOf. La forme inversée peut se trouver à la fois en anglais et en anglais canadien. Les formes inversées sont disponibles pour les trois niveaux inférieurs (termes primaires, secondaires et tertiaires), mais ne le sont pas pour les trois niveaux supérieurs (catégories, classes et sous-classes). Le résultat de la requête indique l’identifiant du concept, le terme en ordre naturel et le terme en ordre inversé (les deux en anglais).
SELECT ?id ?naturel ?inverse {
?id skosxl:prefLabel ?termePref .
?termePref skosxl:literalForm ?naturel .
OPTIONAL{
?termeAlt nomo:invertedFormOf ?termePref ;
skosxl:literalForm ?inverse .
}
FILTER(CONTAINS(LCASE(?naturel), "struct"))
FILTER(langMatches(lang(?naturel),'en'))
}
5.5 Forme inversée et naturelle (au moyen de dct:type)
Cette requête permet de trouver les formes inversées et naturelles des termes dans Nomenclature contenant la chaîne de caractères p. ex. « struct » (insensible à la casse). Un terme alternatif (altLabel) qui a pour type (dct:type) (en anglais seulement) « terme inversé » (aat:300404672) (en anglais seulement) est la forme inversée du terme préférentiel (prefLabel). Afin de fournir une liste exhaustive des résultats de recherche, les termes composés d'un seul mot sont inclus même s’ils ne sont pas étiquetés comme des « termes inversés ». La forme inversée peut se trouver à la fois en anglais et en anglais canadien. Les formes inversées sont disponibles pour les trois niveaux inférieurs (termes primaires, secondaires et tertiaires), mais ne le sont pas pour les trois niveaux supérieurs (catégories, classes et sous-classes). À noter que, contrairement à la solution précédente, cette requête exige de l’utilisateur qu’il contrôle la langue des termes inversés. Le résultat de la requête indique l’identifiant du concept, le terme en ordre naturel et le terme en ordre inversé (les deux en anglais).
SELECT ?id ?naturel ?inverse {
?id skosxl:prefLabel ?termePref .
?termePref skosxl:literalForm ?naturel .
OPTIONAL{
?id skosxl:altLabel ?termeAlt .
?termeAlt dct:type aat:300404672;
skosxl:literalForm ?inverse .
FILTER(langMatches(lang(?inverse),'en'))
}
FILTER(CONTAINS(LCASE(?naturel), "struct"))
FILTER(langMatches(lang(?naturel),'en'))
}
5.6 Forme inversée de la variante canadienne
Cette requête permet de trouver les termes dans Nomenclature contenant la chaîne de caractères p. ex. « armo » (insensible à la casse). Un terme alternatif (altLabel) qui a pour type (dct:type) (en anglais seulement) « terme inversé » (aat:300404672) (en anglais seulement) est la forme inversée du terme préférentiel (prefLabel). Afin de fournir une liste exhaustive des résultats de recherche, le terme anglais est inclus lorsqu’il n’existe pas de terme anglais canadien, et les termes composés d'un seul mot sont inclus même s’ils ne sont pas étiquetés « terme inversé ». Les formes inversées sont disponibles pour les trois niveaux inférieurs (termes primaires, secondaires et tertiaires), mais ne le sont pas pour les trois niveaux supérieurs (catégories, classes et sous-classes). Le résultat de la requête indique l’identifiant du concept, le terme en anglais, le niveau et le nom du niveau.
SELECT distinct ?id ?affichage ?numNiv ?nomNiv
{
?id skos:inScheme nom:;
skos:prefLabel|skos:altLabel|skos:hiddenLabel ?toutTerme;
skos:prefLabel ?prefAng;
schema:isPartOf ?niv.
FILTER(REGEX(?toutTerme,"armo","i"))
?niv schema:position ?numNiv;
skos:prefLabel ?nomNiv.
FILTER(lang(?nomNiv) = "fr")
FILTER(lang(?prefAng) = "en")
OPTIONAL{
?id skos:prefLabel ?prefAngCa
FILTER(lang(?prefAngCa) = "en-ca")
}
OPTIONAL{
?id skosxl:altLabel ?alt.
?alt dct:type aat:300404672;
skosxl:literalForm ?invAngCa .
FILTER(lang(?invAngCa) = "en-ca")
}
OPTIONAL{
?id skosxl:altLabel ?alt.
?alt dct:type aat:300404672;
skosxl:literalForm ?invAng .
FILTER(lang(?invAng) = "en")
}
BIND(COALESCE(?invAngCa,?prefAngCa,?invAng,?prefAng) AS ?affichage)
BIND(str(?affichage) AS ?litteral)
} ORDER BY ?litteral
5.7 Étiquettes par langue
Cette requête permet de trouver tous les termes préférentiels en français canadien fr-CA). Le résultat de cette requête indique le terme préférentiel et son identifiant.
SELECT * {
?id skos:prefLabel ?termePref.
FILTER(langMatches(lang(?termePref), "fr-CA"))
}
Cette requête peut être modifiée pour rechercher les termes préférentiels dans n’importe quelle langue :
en
pour l'anglais (international) (obligatoire). Remarque : cette recherche donnera un grand nombre de conceptsen-CA
pour l'anglais (canadien) (optionnel)fr
pour le français (international) (obligatoire). Remarque : cette recherche donnera un grand nombre de conceptsfr-CA
pour le français (canadien) (optionnel)cr
pour le cri (syllabique) (optionnel)cr-Latn
pour le cri (écriture romaine) (optionnel)iu
pour l'inuktitut (syllabique) (optionnel)iu-Latn
pour l'inuktitut (écriture romaine) (optionnel)es
pour l’espagnol (optionnel)
6 Notes et définitions
6.1 Notes d’application
Cette requête permet de trouver les notes d’application contenant le mot p. ex. « robe » et indique l’identifiant, le terme préférentiel, le parent et la note.
SELECT * {
?id skos:scopeNote ?noteApplication;
skos:prefLabel ?termePref;
skos:broader ?parent.
FILTER(lang(?noteApplication) = 'fr' && CONTAINS(LCASE(?noteApplication), "robe"))
FILTER(lang(?termePref) = 'fr')
}
6.2 Définitions
Cette requête permet de trouver les définitions contenant le mot p. ex. « robe ». Le résultat de la requête indique l’identifiant, le terme préférentiel, le parent et la définition.
SELECT * {
?id skos:prefLabel ?termePref;
skos:broader ?parent;
skos:definition ?def.
?def dct:language nomLang:fr;
rdf:value ?valeur.
FILTER(CONTAINS(LCASE(?valeur), "robe"))
FILTER(lang(?termePref) = 'fr')
}
6.3 Notes d’application et définitions
Cette requête permet de trouver les notes d’application ou les définitions contenant le mot p. ex. « robe ». Le résultat de la requête indique l’identifiant, le terme préférentiel, le parent, la note, la définition et les adresses URI.
SELECT * {
{
?id skos:scopeNote ?noteApplication;
skos:prefLabel ?termePref;
skos:broader ?parent.
FILTER(lang(?noteApplication) = "fr" && CONTAINS(LCASE(?noteApplication), "robe"))
} UNION {
?id skos:definition ?def;
skos:prefLabel ?termePref;
skos:broader ?parent .
?def rdf:value ?texteDef .
FILTER(lang(?texteDef) = "fr" && CONTAINS(LCASE(?texteDef), "robe"))
}
FILTER(lang(?termePref)="fr")
}
6.4 skos:notation
Cette requête permet de trouver le skos:notation (en anglais seulement) (code du Dictionnaire descriptif et visuel d’objets de Parcs Canada) p. ex. « 02-00147 ». Le résultat de la requête indique l’identifiant, le terme préférentiel et le parent.
SELECT * {
?id skos:notation "02-00147".
?id dc:identifier ?idConcept;
skos:prefLabel ?termePref;
skos:broader ?parent.
FILTER(lang(?termePref) = "fr")
}
6.5 Toutes les données sur un concept
Cette requête complexe permet de trouver toutes les données associées à un concept p. ex. nom:1090 (chaise). Le résultat de la requête indique les sous-objets représentant des étiquettes structurées, les définitions structurées, les positions structurées (numéro qui détermine la position du concept dans la hiérarchie), les images, etc. Il indique également les révisions du concept (skos:changeNote) (en anglais seulement) et non les données détaillées sur ces versions.
describe ?id ?idAssocie {
BIND(nom:1090 AS ?id)
?id schema:position|skosxl:prefLabel|skosxl:altLabel|skos:definition|schema:image ?idAssocie
}
7 Recherche en texte intégral (RTI)
Bien qu’il soit possible de rechercher des chaînes de caractères dans un texte en utilisant des fonctions SPARQL pures telles que « CONTAINS() » et « REGEX() », il n'est pas recommandé de le faire dans un système de production puisque cette opération est extrêmement inefficace. Tout d'abord, la requête devrait extraire de la base de données tous les champs de texte, puis, pour chacun d'eux, appliquerait le critère de recherche.
Il est plutôt recommandé d'utiliser le moteur de recherche en texte intégral Lucene (en anglais seulement). Le connecteur Lucene GraphDB (en anglais seulement) assure la synchronisation et l’indexation des champs de texte requis et leur mise en correspondance rapide et efficace avec une requête utilisateur.
La requête Lucene est exprimée dans la syntaxe Lucene Query (en anglais seulement) et intégrée à une requête SPARQL.
Les mots de la requête de recherche sont insensibles à la casse (p. ex. « Chaise » correspond à « chaise » et vice versa). Les MAJUSCULES sont réservées aux opérateurs booléens (en anglais seulement) tels que « AND » et « OR ». Le traitement par défaut des requêtes à termes multiples consiste à rechercher n’importe lequel des termes recherchés. Par exemple, la requête de recherche « fauteuil médical » va permettre de trouver tous les concepts comportant soit le terme « médical », soit le terme « fauteuil »; cependant, les concepts comportant les deux termes seront classés plus haut dans les résultats.
L’utilisation de l’opérateur « AND » (p. ex. médical AND fauteuil) permet de rechercher les deux termes à la fois.
La recherche par phrases se fait en entourant la séquence de mots en question de guillemets anglais simples. Par exemple, la requête de recherche "fauteuil médical" permettra de retenir uniquement les résultats pour lesquels ces deux termes sont inscrits dans cet ordre. N’oubliez pas que la requête de recherche est intégrée à SPARQL. Vous pouvez donc utiliser des guillemets anglais triples ou des apostrophes triples pour éviter de supprimer les guillemets (p. ex. ''' "fauteuil médical" ''').
Les requêtes comportant des caractères de remplacement permettent de rechercher des fragments de termes (p. ex. *brace* donnera les résultats « orthopedic brace », « vambrace » et « bracelet »).
Il est possible d’effectuer d’autres requêtes plus complexes. Reportez-vous à la section sur la syntaxe des requêtes (en anglais seulement) dans la documentation sur Lucene.
7.1 Index RTI
Trois index Lucene ont été créés. Chacun d’eux est un prolongement du précédent.
luc-index:prefLabel
: termes préférentiels seulement (skos:prefLabel
)luc-index:allLabels
: termes préférentiels, alternatifs et cachés (skos:prefLabel
,skos:altLabel
,skos:hiddenLabel
)luc-index:allText
: termes préférentiels, alternatifs et cachés, définitions et notes d’application (skos:prefLabel
,skos:altLabel
,skos:hiddenLabel
,skos:definition
,skos:scopeNote
)
Si vous regardez attentivement dans fts-indexes.ru, vous verrez que ces connecteurs n’ont qu’un seul champ de texte. Des chaînes de propriétés multiples par champ (en anglais seulement) ont été utilisées pour fusionner les multiples étiquettes en une seule.
7.2 RTI par terme préférentiel
Cette requête RTI permet de rechercher une chaîne de caractères p.
ex. « chaise » uniquement dans l’index
luc-index:prefLabel
. Le résultat de la requête indique l’identifiant du concept et le
terme préférentiel.
SELECT ?id ?termePref
{
?recherche a luc-index:prefLabel ;
luc:query "chaise" ;
luc:entities ?id .
?id skos:prefLabel ?termePref.
FILTER(lang(?termePref)="fr")
}
7.3 RTI pour toutes les étiquettes
Cette requête RTI permet de rechercher une chaîne de caractères, p.
ex. « chaise », qui n'est pas dans l'index
luc-index:allLabels
(termes préférentiels, alternatifs et cachés). Le résultat de la
requête indique l’identifiant du concept, les termes préférentiels,
le texte de l’extrait et le nombre total d’occurrences.
SELECT ?id ?termePref ?extraitTexte ?totalResultats
{
?recherche a luc-index:allLabels ;
luc:query "chaise" ;
luc:entities ?id;
luc:totalHits ?totalResultats .
?id luc:snippets/luc:snippetText ?extraitTexte ;
skos:prefLabel ?termePref .
FILTER(lang(?termePref)="fr")
}
Notez que cette requête donne plus de résultats que la précédente, car elle porte sur un plus grand nombre de champs.
7.4 RTI dans allText
Cette requête RTI permet de rechercher p. ex. « chaise » dans l’index allText. Le résultat de la requête indique l’identifiant du concept, les termes préférentiels, la définition, la note d’application, l’extrait de texte et le nombre total d’occurrences.
SELECT ?id ?termePref ?definition ?noteApplication ?extraitTexte ?totalResultats
{
?recherche a luc-index:allText ;
luc:query "chaise" ;
luc:entities ?id;
luc:totalHits ?totalResultats .
?id luc:snippets/luc:snippetText ?extraitTexte ;
skos:prefLabel ?termePref .
OPTIONAL{?id skos:definition/rdf:value ?definition. FILTER(lang(?definition)="fr")}
OPTIONAL{?id skos:scopeNote ?noteApplication. FILTER(lang(?noteApplication)="fr")}
FILTER(lang(?termePref)="fr")
}
Cette requête donne encore plus de résultats que les deux requêtes précédentes, car elle effectue des recherches dans la plupart des champs de texte : altLabel, hiddenLabel et definition.
7.5 Requête RTI complexe
Cette requête RTI permet de rechercher le mot p. ex. « chaise » dans l’index allText et son résultat indique un extrait de texte (en anglais seulement) et un score de correspondance (en anglais seulement).
SELECT ?id ?termePref ?definition ?noteApplication ?extraitTexte ?pointage
{
?recherche a luc-index:allText ;
luc:query "chaise" ;
luc:entities ?id.
?id luc:snippets/luc:snippetText ?extraitTexte;
luc:score ?pointage;
skos:prefLabel ?termePref .
OPTIONAL{?id skos:definition/rdf:value ?definition. FILTER(lang(?definition)="fr")}
OPTIONAL{?id skos:scopeNote ?noteApplication. FILTER(lang(?noteApplication)="fr")}
FILTER(lang(?termePref)="fr")
}
7.6 Requête RTI par phrase
Cette requête RTI par phrase permet de trouver une séquence particulière de termes dans le texte, p. ex. « chaise d’enfant ». La chaîne de caractères de la requête doit être placée entre guillemets anglais simples. À noter que les guillemets triples sont utilisés dans SPARQL pour éviter de supprimer les guillemets simples.
SELECT ?id ?extraitTexte ?totalResultats
{
?recherche a luc-index:prefLabel ;
luc:query """ "chaise d’enfant" """;
luc:entities ?id;
luc:totalHits ?totalResultats .
?id luc:snippets/luc:snippetText ?extraitTexte .
}
Veuillez noter que Nomenclature permet également de rechercher des
termes inversés comme altLabel, p. ex. « child's chair », permettant
à l’utilisateur d’effectuer une recherche de phrases dans
luc-index:allLabels
sans se soucier qu'elle soit dans une forme normale ou inversée.
7.7 Requête RTI et RDF combinée
Cette requête combine la structure du graphe et l’index RTI. Elle est très pratique, car elle permet de conjuguer la rapidité et l’efficacité de la RTI avec toutes les informations contenues dans la structure du graphe de connaissances.
Par exemple, en supposant que la plupart des chaises se trouvent dans la « Catégorie 02 : Ameublement et accessoires » (nom:967), une recherche à l’extérieur de cette catégorie pourrait être intéressante.
SELECT ?id ?termePref ?nomCategorie
{
?recherche a luc-index:allText ;
luc:query "chaise" ;
luc:entities ?id.
?id luc:snippets/luc:snippetText ?extraitTexte;
skos:prefLabel ?termePref;
skos:broader+ ?categorie.
nomLevel:1 skos:member ?categorie.
?categorie skos:prefLabel ?nomCategorie .
FILTER(?categorie != nom:967) # Catégorie 02 : Ameublement et accessoires
FILTER(lang(?termePref)="fr")
FILTER(lang(?nomCategorie)="fr")
}
Cette requête permet de trouver des concepts tels que « étau d'établi pour siège » (nom:7644) et « chaise électrique » (nom:10051).
Voir Combining Lucene Results with GraphDB Data (en anglais seulement) dans la documentation sur GraphDB.
7.8 RTI par terme préférentiel, tri insensible à la casse
Dans les applications à remplissage automatique, les entrées de l’utilisateur sont souvent traitées sans tenir compte de la casse. L’index RTI inclut tous les termes en minuscules et en majuscules, ce qui permet d’effectuer un tri sans tenir compte de la casse. En principe, les résultats doivent aussi être triés sans tenir compte de la casse. Voici un exemple de requête :
SELECT ?id ?termePref
{
?recherche a luc-index:prefLabel ;
luc:query "chaise" ;
luc:entities ?id.
?id skos:prefLabel ?termePref .
} ORDER BY ASC(LCASE(?termePref))
8 Dénombrement
Le dénombrement des ressources d’un type particulier dans le graphe se fait habituellement à l’aide de la fonction d’agrégation SPARQL « COUNT() » (voir la requête suivante). Cependant, cette méthode est inefficace et ne devrait jamais être employée dans un système de production lourdement utilisé.
Pour cette raison, les dénombrements importants ont été précalculés et enregistrés dans la description sémantique du jeu de données (le graphe VOID). Ce graphe se trouve à l'adresse https://nomenclature.info/.well-known/void et a été chargé dans le dépôt pour la consultation en ligne. Les prochaines requêtes afficheront donc des dénombrements préétablis au moyen de ce que l’on appelle des « partitions » (sous-ensembles de triplets du jeu de données).
8.1 Dénombrement d’entités par type
Cette requête permet de comptabiliser le nombre d’entités par rdf:type (en anglais seulement). Le résultat de la requête indique tous les types qui se trouvent dans le dépôt.
SELECT (COUNT(*) AS ?compte) ?type {
?e rdf:type ?type .
}
GROUP BY ?type
ORDER BY DESC(?compte)
8.2 Dénombrement de concepts
Cette requête permet d'afficher le nombre de concepts (dans VOID).
SELECT * {
<https://nomenclature.info/dataset> void:classPartition [ void:class skos:Concept;
void:entities ?compteConcepts ]
}
8.3 Dénombrement d’images
Cette requête permet d'afficher le nombre d’images (dans VOID).
SELECT * {
<https://nomenclature.info/dataset> void:classPartition [ void:class schema:ImageObject;
void:entities ?compteImages ]
}
8.4 Dénombrement de termes
Cette requête permet d'afficher le nombre de termes (étiquettes) (dans VOID).
SELECT * {
<https://nomenclature.info/dataset> void:classPartition [ void:class skosxl:Label;
void:entities ?compteTermes ]
}
8.5 Dénombrement de termes par langue
Cette requête permet d'afficher le nombre de termes qui existent
pour chaque langue (dans VOID). Elle utilise l’ontologie VOID
Extensions (
vext:
).
SELECT * {
<https://nomenclature.info/dataset> vext:languagePartition [ vext:language ?lang;
void:triples ?compteTermes ]
}
8.6 Dénombrement des coréférences par domaine
Cette requête permet d'afficher le nombre de coréférences présentes (dans VOID). Elle utilise la classe void:Linkset (en anglais seulement). Le dénombrement est ventilé par jeu de données cible et par void:linkPredicate (en anglais seulement) (exactMatch ou closeMatch). void:target (en anglais seulement) liste les deux jeux de données liés (<https://nomenclature.info/dataset>> et le jeu de données externe), mais seul le jeu de données externe est indiqué pour éviter un excès de résultats.
SELECT * {
?jeuLiens a void:Linkset;
rdfs:label ?nomJeuLiens;
void:linkPredicate ?predicatLien;
void:triples ?compteTriplets;
void:target ?jeuDonnees
FILTER(?jeuDonnees != <https://nomenclature.info/dataset>)
# ?jeuDonnees rdfs:label ?nomJeuDonnees FILTER(lang(?nomJeuDonnees)="fr")
} ORDER BY DESC(?compteTriplets)
À noter que la ligne commentée affiche l’étiquette du jeu de données cible.
8.7 Dénombrement de concepts modifiés
Cette requête permet d'afficher le nombre de concepts obsolètes (dans VOID).
SELECT * {
<https://nomenclature.info/dataset> void:propertyPartition
[void:property owl:deprecated; void:triples ?compteSupprimes]
}
- Date de modification :