Sélection de la langue

Recherche

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

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 :

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.

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 :