# Introduction aux ontologies : RDFS, OWL, inférences

Jean-Baptiste Pressac

► To cite this version:

Jean-Baptiste Pressac. Introduction aux ontologies : RDFS, OWL, inférences. ANF "Initiation au SPARQL et à la diffusion de données en RDF ", Dec 2020, En ligne, France. hal-03199699

HAL Id: hal-03199699

https://hal.science/hal-03199699v1

Submitted on 15 Apr 2021

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons CC BY 4.0 - Attribution - International License
<figure><img src="image_2.png" /></figure>

# Introduction aux ontologies : RDFS, OWL, inférences

ANF « Initiation au SPARQL et à la diffusion de données en RDF »
7-8 décembre 2020
Jean-Baptiste Pressac (CRBC/CNRS)
<figure><img src="image_3.png" /></figure>

# Les ontologies OWL et RDFS

L'objectif du Web sémantique : rendre les informations du Web compréhensibles par des machines à l'aide :

* du framework RDF

* du langage et protocole SPARQL

* ... des ontologies OWL et RDFS
<figure><img src="image_4.png" /></figure>

# les ontologies : des classes et des propriétés

Les ressources identifiées par des URI appartiennent en général à une **classe** (de manière explicite avec `rdf:type` ou implicite).

Les ressources sont liées entre elles par des **propriétés** (le prédicat des triplets).

Les **ontologies** définissent un ensemble de classes, sous-classes et propriétés permettant d'exprimer des informations dans un ou plusieurs domaines de la connaissance.
<figure><img src="image_5.png" /></figure>

# Pourquoi utiliser des ontologies ?

Pourquoi utiliser des ontologies pour écrire des triplets RDF ?

* Parce qu'elles permettent d'exprimer des informations avec des termes qui ont fait consensus dans leur communauté d'origine.

* Parce qu'elles permettent de créer de "nouvelles connaissances" (notion d'inférence).
<figure><img src="image_6.png" /></figure>

# Quelles sont les ontologies utilisées par IdRef ?

La réponse dans la documentation de data.idref.fr...
# Quelques exemples d'ontologies

<figure><img src="image_7.png" /></figure>

IdRef utilise plusieurs ontologies :

* FOAF (Friend of a Friend) connaissances sur des individus et les relations qu'ils entretiennent entre eux

* BIO : informations biographiques sur des individus (naissance, décès, mariage, etc.)

* Dublin Core : connaissance sur des documents physiques et électroniques ( titre, créateurs, formats, date, type, etc.)

* BIBO : BIBliographic Ontology : connaissances bibliographiques sur des documents

* DBPedia Ontology : ontologie du projet DBPedia

Le jeu de données i-ceramm et le tutoriel sur Ontop reposent sur l'ontologie :

* CIDOC-CRM : [CIDOC Conceptual Reference Model](https://www.cidoc-crms.org/crm4/crm4.html), le modèle conceptuel du Comité International pour la Documentation du Conseil International des Musées, l'ICOM : ontologie du patrimoine culturel

Ces ontologies ne sont pas toutes issues du Web sémantique (Dublin Core et CIDOC-CRM) mais ont une version RDF (RDFS et OWL), qui permet de les exploiter selon les principes du Web sémantique.
<figure><img src="image_8.png" /></figure>

# Explorer l'ontologie BIBO avec GraphDB et SPARQL

BIBO BIBliographic Ontology est une des ontologies utilisées par IdRef.

On ne peut pas interroger avec SPARQL l'ontologie BIBO depuis data.idref.fr car les triplets de cette ontologie n'y ont pas été intégrés...

On ne peut pas l'interroger avec SPARQL depuis [son dépôt officiel sur GitHub](https)...

On va donc importer l'ontologie dans le logiciel GraphDB.
<figure><img src="image_9.png" /></figure>

# Importer BIBO dans GraphDB

Voir le fichier TP Introduction aux ontologies : RDFS, OWL, inférences.pdf
# Explorer l'ontologie BIBO avec GraphDB et SPARQL

Transformez en Turtle le contenu du fichier bibolei.xml à l'aide de [EasyRDF Converter](https://www.easyrdf.org/).

Déduisez-en une requête SPARQL pour obtenir des informations sur l'ontologie.

Qu'est-ce qu'une ontologie d'après le fichier biboole.xml ?
<figure><img src="image_10.png" /></figure>

# Explorer l'ontologie BIBO avec GraphDB et SPARQL

```
PREFIX bibo: <http://purl.org/ontology/bibo/>
```

```sql
select * where {
  bibo: ?p ?o .
} limit 100
```

Renvoie entre autres le triplet :

```
bibo: rdf:type owl:Ontology
```

BIBO est une ressource RDF de type owl:Ontology !
<figure><img src="image_11.png" /></figure>

# OWL l'ontologie des ontologies

BIBO est une instance de la classe
**owl:Ontology**.

**owl:** est le préfixe du OWL 2 Schema
**vocabulary**, la version RDF du [OWL 2 Web](https://www.w3.org/TR/ontology/) **Ontology Language**, un langage pour
décrire des ontologies.
<figure><img src="image_12.png" /></figure>

# Les classes d'une ontologie

Parcourez le fichier bibo.rdf.xml et trouvez des
classes.

De quelle classe sont-elles l'instance ?

*(eh oui, les classes sont des instances de classe...)*

Ecrivez une requête SPARQL pour afficher les
classes de BIBO.
# Explorer l'ontologie BIBO avec GraphDB et SPARQL

Les classes de l'ontologie BIBO sont des instances de owl:Class, affichons ses classes avec une requête SPARQL :

```sparql
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select * where {
    ?classe a owl:Class .
    ?classe rdfs:label ?label .
}
order by ?label
```
<figure><img src="image_13.png" /></figure>

# La classe bibo:AcademicArticle

Dans les résultats de la précédente requête SPARQL, cliquez sur l'URI de la classe bibo:AcademicArticle.

De quelle classe est-elle la sous-classe ?

Comment cette information est-elle exprimée ?
<figure><img src="image_14.png" /></figure>

<figure><img src="image_15.png" /></figure>

Capture d'écran
de l'affichage
dans GraphDB
des triplets
dont la classe
bibo:Academic
Article est sujet
ou objet.

<figure><img src="image_16.png" /></figure>

Academic Article

<figure><img src="image_17.png" /></figure>

Source: http://purl.org/ontology/bibo/AcademicArticle

<table><thead><tr><th></th><th>subject</th><th>predicate</th><th>object</th><th>context</th><th>context</th></tr></thead><tbody><tr><td>1</td><td>bibo:AcademicArticle</td><td>rdf:type</td><td>owl:Class</td><td></td><td>http://www.ontotext.com/explicit</td></tr><tr><td>2</td><td>bibo:AcademicArticle</td><td>rdfs:comment</td><td>*A scholarly academic article, typically published in a journal.*@en</td><td></td><td>http://www.ontotext.com/explicit</td></tr><tr><td>3</td><td>bibo:AcademicArticle</td><td>rdfs:isDefinedBy</td><td>*http://purl.org/ontology/bibo/*~^xsd:anyURI</td><td></td><td>http://www.ontotext.com/explicit</td></tr><tr><td>4</td><td>bibo:AcademicArticle</td><td>rdfs:label</td><td>*Academic Article*@en</td><td></td><td>http://www.ontotext.com/explicit</td></tr><tr><td>5</td><td>bibo:AcademicArticle</td><td>rdfs:subClassOf</td><td>bibo:Article</td><td></td><td>http://www.ontotext.com/explicit</td></tr><tr><td>6</td><td>bibo:AcademicArticle</td><td>ns:term_status</td><td>stable</td><td></td><td>http://www.ontotext.com/explicit</td></tr></tbody></table>
<figure><img src="image_18.png" /></figure>

La classe bibo:AcademicArticle

bibo:AcademicArticle est une sous-classe de bibo:Article, elle-même
sous-classe de bibo:Document :

bibo:AcademicArticle rdfs:subClassOf bibo:Article .
[...]
bibo:Article rdfs:subClassOf bibo:Document .
<figure><img src="image_19.png" /></figure>

# RDFS

bibo:AcademicArticle rdfs:subClassOf bibo:Article .

Ça se complique, la notion de sous-classe est exprimée avec rdfs:subClassOf.

rdfs: est le préfixe du RDF Schema vocabulary (RDFS), la version RDF de la recommandation du W3C **[RDF Schema 1.1](http://www.w3.org/TR/rdf-schema/)**, un vocabulaire pour modéliser des données en RDF.

C'est l'ontologie RDFS qui défini en triplets les notions de ressource, classe, littéral (rdfs:Resource, rdfs:Class, rdfs:Litteral).
<figure><img src="image_20.png" /></figure>

# Les sous-classes de bibo:Document

Ecrivez une requête SPARQL pour afficher toutes les sous-classes de bibo:Document.
<figure><img src="image_21.png" /></figure>

Les sous-classes de bibo:Document

PREFIX bibo: <http://purl.org/ontology/bibo/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select * where {
    ?s rdfs:subClassOf bibo:Document .
    ?s rdfs:label ?label .
}
ORDER BY ?label
<figure><img src="image_22.png" /></figure>

# Les propriétés de BIBO

Les propriétés d'une ontologie servent comme prédicat des triplets (sujet, prédicat, objet).

Par ex. la propriété bibo:issn sert à la saisie de l'ISSN d'une revue :

* :revue001 rdfs:label "La Bretagne linguistique".

* :revue001 bibo:issn "1270-2412".
<figure><img src="image_23.png" /></figure>

# Les propriétés de BIBO

Trouvez des exemples de propriétés dans l'ontologie BIBO.

A quelle classe appartiennent-elles ?

Ecrivez une requête SPARQL pour afficher toutes les propriétés de BIBO.
<figure><img src="image_24.png" /></figure>

# Les propriétés de BIBO

Dans BIBO, les propriétés sont des instances d'une des classes suivantes :

* **owl:DatatypeProperty**: la valeur de la propriété doit être un littéral :revue001 bibo:issn "1270-2412" .

* **owl:ObjectProperty**: la valeur de la propriété doit être une URI :revue001 bibo:editor <http://www.idref.fr/243250673/id>
<figure><img src="image_25.png" /></figure>

Les propriétés de BIBO

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select * where {
  {?propriete a owl:DatatypeProperty . } UNION {?propriete a owl:ObjectProperty . }
  OPTIONAL {?propriete rdfs:label ?label .}
  # Cette ligne au cas où d'autres données ont été téléchargées dans le dépôt GraphDB
  FILTER (contains(lcase(str(?propriete)), "ontology/bibo"))
} order by ?label
<figure><img src="image_26.png" /></figure>

En résumé :

* l'ontologie BIBO est une ressource de type owl:Ontology !

* Les classes sont des ressources de type owl:Class (ou de tout autre sous-classe de rdfs:Class)

* Les propriétés sont des ressources de type owl:ObjectProperty, owl:DatatypeProperty (ou de toute autre sous-classe de rdf:Property)

Autrement dit : Une ontologie définit des classes et des propriétés qui sont elles-mêmes des instances de classes et de propriétés.
<figure><img src="image_27.png" /></figure>

En résumé :

L'ultime classe est rdfs:Class car elle est
instance d'elle-même (extrait du [RDF Schema](http://www.w3.org/1996/09/16/rdfs) *vocabulary* (RDFS):

rdfs:Class a rdfs:Class .
<figure><img src="image_28.png" /></figure>

# Propriétés de propriétés

Les propriétés d'une ontologie peuvent avoir pour propriétés :

* owl:inverseOf : soigné est le contraire de soigné par

* owl:SymmetricProperty : si A est l'époux de B alors B est l'époux de A.

* rdfs:domain

* rdfs:range
# Classe implicite

La propriété bibo:issn a pour triplets :

bibo:issn rdfs:domain bibo:Collection .

bibo:issn rdfs:range rdfs:Litteral .

C'est à dire que si l'on écrit les triplets suivants :

@prefix crbc: <https://www.univ-brest.fr/crbc/> .

@prefix bibo: <http://purl.org/ontology/bibo/> .

crbc:revue001 rdfs:label "La Bretagne linguistique".

crbc:revue001 bibo:issn "1270-2412" .

Alors crbc:revue001 est implicitement une instance de la classe bibo:Collection.
# Inférences

Importez les triplets suivants (fichier crbc.ttl) dans GraphDB (Import > RDF > Upload RDF files) :

# Contenu du fichier crbc.ttl

@prefix crbc: <https://www.univ-brest.fr/crbc/> .

@prefix bibo: <http://purl.org/ontology/bibo/> .

crbc:livre001 a bibo:Book .

crbc:livre001 rdfs:label "Le Cheval d'orgueil"@fr .

crbc:revue001 rdfs:label "La Bretagne linguistique"@fr .

crbc:revue001 bibo:issn "1270-2412" .
# Inférences

crbc:livre001 a bibo:Book .

crbc:livre001 rdfs:label "Le Cheval d'orgueil"@fr .

crbc:revue001 rdfs:label "La Bretagne linguistique"@fr .

crbc:revue001 bibo:issn "1270-2412" .

Grâce aux triplets suivants de l'ontologie BIBO :

bibo:Book rdfs:subClassOf bibo:Document .

bibo:Document owl:equivalentClass foaf:Document .

bibo:issn rdfs:domain bibo:Collection .

GraphDB inférence puis crée les triplets supplémentaires :

crbc:livre001 a bibo:Document .

crbc:livre001 a foaf:Document .

crbc:revue001 a bibo:Collection .
# Inférences

<figure><img src="image_29.png" /></figure>

La preuve avec la requête SPARQL suivante :

```
PREFIX bibo: <http://purl.org/ontology/bibo/>
PREFIX crbc: <https://www.univ-brest.fr/crbc/>
```

```sparql
SELECT * WHERE {
  crbc:livre001 a ?type .
}
```

Résultats :

* bibo:Book

* bibo:Document

* foaf:Book
# Inférences

Ce n'est pas le SPARQL endpoint de GraphDB qui "déduit" de nouvelles informations.

C'est une couche logicielle de GraphDB, un moteur d'inférences, qui interprète les ontologies RDFS et OWL et permet la création de nouveaux triplets.

Ces nouveaux triplets sont stockés dans la base de données (ce qui peut prendre de la place) !
# Les trois ontologies pilier du Web sémantique

S'il y avait trois documents à retenir pour comprendre le Web sémantique, ce serait les trois ontologies suivantes :

* The RDF Concepts Vocabulary (RDF)

* The RDF Schema vocabulary (RDFS)

* The OWL 2 Schema vocabulary (OWL 2)
<table><thead><tr><td>préfixe</td><td>nom officiel</td><td>URI</td><td>commentaire</td></tr></thead><tbody><tr><td>rdf:</td><td>The RDF Concepts Vocabulary (RDF)</td><td>http://www.w3.org/1999/02/22-rdf-syntax-ns#</td><td>Cette ontologie défini notamment rdf:type et rdf:Property (qui est une instance de rdfs:Class). Elle définit aussi les concepts de déclaration, sujet, prédicat, objet (rdf:Statement, rdf:subject, rdf:predicate, rdf:object). La recommandation du W3C correspondante est <a href="#">RDF 1.1 Concepts</a>.</td></tr><tr><td>rdfs:</td><td>The RDF Schema vocabulary (RDFS)</td><td>http://www.w3.org/2000/01/rdf-schema#</td><td>Cette ontologie défini la notion de ressource, classe, littéral (rdfs:Resource, rdfs:Class, rdfs:Litteral), les propriétés rdfs:label et rdfs:comment ainsi que deux propriétés qui servent de fondement aux inférences : rdfs:range et rdfs:domain. La recommandation du W3C correspondante doit être <a href="#">RDF Schema 1.1</a>.</td></tr><tr><td>owl:</td><td>The OWL 2 Schema vocabulary (OWL 2)</td><td>http://www.w3.org/2002/07/owl#</td><td>Cette ontologie décrit les classes et les propriétés de la spécification <a href="#">OWL 2 Web Ontology Language RDF-Based Semantics</a>. Elle défini notamment owl:Class et les propriétés owl:sameAs (vu précédemment, pour lier des ressources équivalentes), owl:inverseOf, owl:SymmetricProperty.</td></tr></tbody></table>
# RDF ou RDFS ?

Parmi les propriétés les plus courantes des ontologies RDF et RDFS, seules rdf:type et rdf:Property proviennent de RDF toutes les autres propriétés sont définies dans RDFS, même rdfs:label :

* rdf:

* rdf:type

* rdf:Property

* rdfs:

* rdfs:label

* rdfs:comment

* rdfs:Class (owl:Class est une instance de rdfs:Class)

* rdfs:domain

* rdfs:range
<figure><img src="image_30.png" /></figure>

En résumé

Les ontologies permettent d'exprimer la
nature d'une ressource (notice
bibliographique, personne, livre, etc.) de
manière explicite ou implicite.
<figure><img src="image_31.png" /></figure>

En résumé

* Les ontologies sont des ressources

* Les ontologies définissent des classes (bibo:Book) et des propriétés (bibo:isbn10)

* Les classes et les propriétés sont des ressources (elles ont des URI)

* Les classes et les propriétés sont définies avec des triplets RDF
<figure><img src="image_32.png" /></figure>

En résumé

* Les ontologies définissent les domain et les range des propriétés.

* Les ontologies permettent de contrôler la conformité des données avec certaines règles (mais ce ne sont pas elles qui font ce contrôle, distinguer la loi (l'ontologie) du gendarme).

* Les ontologies permettent de faire des inférences

* Plusieurs ontologies peuvent être utilisées avec le même jeu de données