Skip to content

Créer une ontologie en SKOS – retour d’expérience (2/5) : SKOS ?

03/03/2015

Rappel du plan des billets prévus :

  1. Le projet : explication liminaire
  2. Le format SKOS : petite exploration
  3. SKOS : questionnements infinis sur les subdivisions de termes
  4. Le processus de transformation (petits bricolages)
  5. La mise en ligne finale (et ses limites, du point de vue des principes du web de données)

La demande était, en substance : mettre en ligne un vocabulaire contrôlé dans un format lisible par l’être humain et par l’ordinateur.

Je ne sais pas pour vous, mais moi, spontanément, j’ai tout de suite pensé à SKOS
(ce qui est une erreur : il y a peut-être d’autres solutions, que je n’ai pas davantage envisagées depuis, et qui auraient pu être pertinentes pour le projet).

SKOS : un vocabulaire pour des vocabulaires

SKOS correspond exactement à la commande initiale.

Imaginons que vous voulez publier dans le web de données (donc sous forme de triplets RDF) un vocabulaire contrôlé (comme l’est RAMEAU, ou le MeSH).

En gros :

  • quand vous voulez diffuser un vocabulaire contrôlé, vous allez avoir besoin des notions suivantes :
    • forme retenue
    • forme(s) rejetée(s)
    • définition(s)
    • illustrations et exemples
    • liens entre les différents concepts présentés :
      • « plus large que » :
        « cancer » est plus large que « cancer du sein« 
      • « proche de » :
        « trisomie 21″ et « trisomiques 21 » sont 2 concepts Rameau distincts, mais liés entre eux.
        (oui, je sais, je suis très en forme pour mes exemples)
    • et quelques autres petites choses utiles dont je parlerai plus tard (peut-être=
  • quand vous voulez le mettre dans le web de données, vous allez avoir besoin que ces liens entre concepts soient exprimées sous forme d’URI.
    Par exemple, pour lier le concept « cancer » (URI : http://data.bnf.fr/ark:/12148/cb11931105q) avec « cancer du sein » (URI http://data.bnf.fr/ark:/12148/cb11933256c), il faudra l’exprimer sous la forme :

    http://data.bnf.fr/ark:/12148/cb11933256c skos:broader http://data.bnf.fr/ark:/12148/cb11931105q

    (ou skos:broader est une manière raccourcie de dire : http://www.w3.org/2004/02/skos/core#broader.)

Requête SPARQL (via le Sparql Endpoint de data.bnf qui donne des exemples de concepts liés entre eux par la relation skos:related.
(la requête n’est pas forcément un modèle de syntaxe, mais comme elle fonctionne…)

select ?sujet1 ?label1 ?sujet2 ?label2 where {
?sujet1 a skos:Concept.
?sujet1 skos:related ?sujet2.
?sujet1 skos:prefLabel ?label1.
?sujet2 skos:prefLabel ?label2.} 
LIMIT 100

La 2e  ligne demande que, dans data.bnf, le « sujet1 » soit défini comme un concept au sens SKOS.
La 3e ligne indique que sujet1 et sujet2 sont liés entre eux par la relation skos:related.Les 4e et 5e lignes permettent de récupérer les labels des sujet1 et sujet2 (car sujet1 et sujet2 sont les URI des concepts, pas les formes retenues)

Résultat de cette requête :

exemple Rameau SKOS - résultats (tableau) en format HTML

Bref, SKOS fournit le vocabulaire pour définir

  • les attributs d’un concept : skos:prefLabel, skos:altLabel, skos:definition, etc.
  • les relations entre concepts
  • ce qu’est un concept lui-même : on peut ainsi chercher dans data.bnf.fr les objets de type « skos:Concept » (c’est la 2e ligne de ma requête ci-dessus), parmi tout ce que peut contenir data.bnf.fr (des personnes, par exemple)

Exemple pour les marques d’exemplaire

J’en suis donc venu à produire un fichier RDF/XML avec ce genre de lignes, qui décrit (comme c’est indiqué) la notion de « reliure aux armes » (du propriétaire ou de quelqu’un d’autre) :

(Je reviendrai dans le dernier billet prévu sur l’URL de déréférencement du vocabulaire, ici http://www.bibliopat.fr/sites/default/files/provenances/referentiel.rdf

<rdf:Description rdf:about="http://www.bibliopat.fr/sites/default/files/provenances/referentiel.rdf#3">
<rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
<skos:prefLabel xml:lang="fr">Reliure aux armes</skos:prefLabel>
<skos:prefLabel xml:lang="en">Armorial binding</skos:prefLabel>
<skos:prefLabel xml:lang="es">Encuadernación heráldica</skos:prefLabel>
<skos:prefLabel xml:lang="de">Einband Wappen</skos:prefLabel>
<skos:altLabel xml:lang="fr">Reliure armoriée</skos:altLabel>
<skos:altLabel xml:lang="fr">Armoiries</skos:altLabel>
<skos:altLabel xml:lang="fr">Armes</skos:altLabel>
<skos:altLabel xml:lang="en">Armorial tool</skos:altLabel>
<skos:altLabel xml:lang="en">Armorial panel</skos:altLabel>
<skos:altLabel xml:lang="fr">Blason (forme rejetée)</skos:altLabel>
<skos:altLabel xml:lang="en">Coat of arms (forme rejetée)</skos:altLabel>
<skos:altLabel xml:lang="en">Heraldry (forme rejetée)</skos:altLabel>
<skos:definition xml:lang="fr">Reliure présentant les armes d’une personne physique ou morale. Les armes peuvent présenter seulement les motifs et figures héraldiques qui les constituent ou figurer de façon plus complète en étant accompagnées d’éléments tels que couvre-chef (couronne, chapeau, tiare, heaume…), cimier, dais ou pavillon, manteau, insigne de fonction ou de dignité (crosse, bâton..), supports et tenants, collier d’ordre, devise, cri d’armes.
D'autres éléments non héraldiques peuvent également être présents en plus de ces armes : lettre unique, initiales, chiffre, monogramme, cri d’armes (phrase de ralliement propre à une personne physique ou morale, inscrite sur les armoiries et placée à la partie supérieure de la composition.),… Dans ce cas, il faut préciser « reliure aux armes et initiales… », « reliure aux armes et chiffre… », « reliure aux armes et monogramme… », « reliure aux armes et cri d’armes… ». Si l’on ne parvient pas à identifier les armes, il faut utiliser l’expression « reliure aux armes non identifiées ».</skos:definition>
<skos:inScheme rdf:resource="http://www.bibliopat.fr/sites/default/files/provenances/referentiel.rdf#Marque"/>
<skos:broader rdf:resource="http://www.bibliopat.fr/sites/default/files/provenances/referentiel.rdf#2"/>
<skos:example rdf:resource="http://www.bibliopat.fr/sites/default/files/provenances/reliure_aux_armes_1.jpg"/>
</rdf:Description>

Le code ci-dessus génère, pour l’ordinateur, un graphe de ce genre (obtenu avec le W3C RDF Validator):

servlet_4719432152438056035

Pour la suite

Le billet qui suivra sera sur mes cas de conscience concernant la manière d’utiliser SKOS, face à divers choix d’encodage. J’aurai donc l’occasion d’y remercier (mais je le fais déjà, plutôt deux fois qu’une !) @SebPeyrard pour ses explications concernant la conversion de Rameau en SKOS pour data.bnf.fr, qui m’a bien aidé.

Le suivant devrait être consacré à ceci :
(dont je reconnais volontiers que c’est du bricolage)

transformations

%d blogueurs aiment cette page :