IV.5.4. Structure d'une ontologie en OWL
Cette partie indique les principaux éléments
constituant une ontologie OWL. IV.5.4.1. Espace de nommage
Afin de pouvoir employer des termes dans une ontologie, il
est nécessaire d'indiquer avec précision de quels vocabulaires
ces termes proviennent. C'est la raison pour laquelle, une ontologie commence
par une déclaration d'espace de nom contenue dans une balise
rdf:RDF.
Supposons que nous souhaitons écrire une ontologie sur
une population de personnes ou, d'une manière plus
générale, sur l'humanité. Voici la déclaration
d'espace de nom qui pourrait être employée :
Les deux premières déclarations identifient
l'espace de nommage propre à l'ontologie que nous sommes en train
d'écrire. La première déclaration d'espace de nom indique
à quelle ontologie se rapporter en cas d'utilisation de noms sans
préfixe dans la suite de l'ontologie. La troisième
déclaration identifie l'URI de base de l'ontologie courante.
La quatrième déclaration signifie simplement
que, au cours de la rédaction de l'ontologie humanité, on va
employer des concepts développés dans une ontologie vivant, qui
décrit ce qu'est un être vivant.
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
|
Les quatre dernières déclarations introduisent le
vocabulaire d'OWL et les objets définis dans l'espace de nommage de RDF,
du schéma RDF et des types de données du Schéma XML.
IV.5.4.2. En-tête d'une ontologie
A la suite de la déclaration d'espaces de nom, un
en-tête décrivant le contenu de l'ontologie courante. C'est la
balise owl:Ontology qui permet d'indiquer ces informations
:
<owl:Ontology rdf:about="">
<rdfs:comment>Ontologie décrivant
l'humanité</rdfs:comment> <owl:imports
rdf:resource="
http://otherdomain.tld/otherpath/vivant"/>
<rdfs:label>Ontologie sur
l'humanité</rdfs:label>
|
|
IV.5.4.3. Eléments du langage
Cette partie ne va pas reprendre toutes les finesses de OWL
Lite, OWL DL et OWL Full, mais uniquement les plus importantes.
> Les classes
Une classe définit un groupe d'individus qui sont
réunis parce qu'ils ont des caractéristiques similaires.
L'ensemble des individus d'une classe est désigné par le terme
« extension de classe », chacun de ces individus étant alors
une « instance » de la classe. Les trois versions d'OWL comportent
les mêmes mécanismes de classe, à ceci près que OWL
FULL est la seule version à permettre qu'une classe soit l'instance
d'une autre classe (d'une méta classe). A l'inverse, OWL Lite et OWL DL
n'autorisent pas qu'une instance de classe soit elle-même une classe.
> Déclaration de classe
La déclaration d'une classe se fait par le biais du
mécanisme de « description de classe », qui
se présente sous diverses formes. Une classe peut ainsi se
déclarer de six manières différentes :
· l'indicateur de classe
La description de la classe se fait, dans ce cas, directement
par le nommage de cette classe. Une classe « humain » se
déclare de la manière suivante :
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
|
<owl:Class rdf:ID="Humain" />
Il est à noter que ce type de description de classe
est le seul qui permette de nommer une classe. Dans les cinq autres cas, la
description représente une classe dite « anonyme
», crée en plaçant des contraintes sur son extension.
~ l'énumération des individus composant la
classe
Ce type de description se fait en énumérant les
instances de la classe, à l'aide de la propriété
owl:oneOf :
<owl:Class>
<owl:oneOf
rdf:parseType="Collection"> <owl:Thing
rdf:about="#Damien" /> <owl:Thing rdf:
about="#Olivier" /> <owl:Thing rdf:
about="#Philippe" /> <owl:Thing
rdf:about="#Xavier" /> <owl:Thing
rdf:about="#Yves" /> </owl:oneOf>
</owl:Class>
|
|
Si ce mécanisme est utilisable avec OWL DL et OWL FULL,
il ne fait cependant pas partie de OWL Lite.
· La restriction de
propriétés
La description par restriction de propriété permet
de définir une classe anonyme composée de toutes les instances de
owl:Thing qui satisfont une ou plusieurs
propriétés.
Ces contraintes peuvent être de deux types :
contrainte de valeur ou contrainte de
cardinalité.
Une contrainte de valeur s'exerce sur la valeur d'une
certaine propriété de l'individu (par exemple, pour un individu
de la classe Humain, sexe = Homme), tandis qu'une contrainte de
cardinalité porte sur le nombre de valeurs que peut prendre une
propriété (par exemple, pour un individu de la classe Humain,
aPourFrere est une propriété qui peut ne pas avoir de valeur, ou
avoir plusieurs valeurs, suivant le nombre de frères de l'individu. La
contrainte de cardinalité
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
|
portant sur aPourFrere restreindra donc la classe décrite
aux individus pour lesquels la propriété aPourFrere
apparaît un certain nombre de fois).
Enfin, les descriptions par intersection, union ou
complémentaire permettent de décrire une classe par
l'intersection, l'union ou le complémentaire d'autres classes
déjà définies, ou dont la définition se fait au
sein même de la définition de la classe courante .
Dans l'exemple on définit une nouvelle classe qui est
l'intersection de la classe collection avec la restriction de
la classe etudiantsENST sur les étudiants ayant deux
frères:
<owl:Class>
<owl:intersectionOf
rdf:parseType="Collection">
<owl:Class rdf:
about="#etudiantsENST" />
<owl:Restriction>
<owl:onProperty
rdf:resource="#aPourFrere" />
<owl:cardinality
rdf:datatype="&xsd;nonNegativeInteger"> 2
</owl:cardinality>
</owl:Restriction >
</owl:intersectionOf>
</owl:Class>
|
|
> Héritage
Il existe dans toute ontologie OWL une superclasse,
nommée Thing, dont toutes les autres classes sont des
sous-classes. Ceci nous amène directement au concept d'héritage,
disponible à l'aide de la propriété
subClassOf :
<owl:Class
rdf:ID="Humain">
<rdfs:subClassOf
rdf:resource="&etre;#EtreVivant" />
</owl:Class>
<owl:Class
rdf:ID="Homme">
<rdfs:subClassOf
rdf:resource="#Humain" />
|
|
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
|
</owl:Class>
<owl:Class
rdf:ID="Femme">
<rdfs:subClassOf
rdf:resource="#Humain" />
</owl:Class>
Enfin, il existe également une classe nommée
noThing, qui est sous-classe de toutes les classes OWL. Cette
classe ne peut avoir aucune instance.
> Les instances de classe
La définition d'un individu consiste à
énoncer un « fait », encore appelé
« axiome d'individu ». On peut distinguer deux types
de faits :
~ les faits concernant l'appartenance à une classe
La plupart des faits concernent généralement la
déclaration de l'appartenance d'un individu à une classe et les
valeurs de propriété de cet individu. Un fait s'exprime de la
manière suivante :
<Humain
rdf:ID="Pierre">
<aPourPere rdf:resource="#Jacques"
/> <aPourFrere rdf:resource="#Paul" />
</Humain>
|
|
Le fait écrit dans cet exemple exprime l'existence d'un
Humain nommé « Pierre » dont
le père s'appelle « Jacques », et qu'il
a un frère nommé « Paul
».
On peut également instancier un individu
anonyme en omettant son identifiant :
<Humain>
<aPourPere rdf:resource="#Jacques"
/> <aPourFrere rdf:resource="#Paul" />
</Humain>
|
|
Ce fait décrit, dans ce cas, l'existence d'un
Humain dont le père se nomme «
Jacques » et qui a un frère nommé
« Paul ».
~ les faits concernant l'identité des individus
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
|
Une difficulté qui peut éventuellement
apparaître dans le nommage des individus concerne la non-unicité
éventuelle des noms attribués aux individus. Par exemple, un
même individu pourrait être désigné de plusieurs
façons différentes.
C'est la raison pour laquelle OWL propose un mécanisme
permettant de lever cette ambiguïté, à l'aide des
propriétés owl:sameAs,
owl:diffrentFrom et owl:allDifferent.
L'exemple suivant permet de déclarer que les noms «
Louis_XIV » et « Le_Roi_Soleil
» désignent la même personne.
<rdf:Description
rdf:about="#Louis_XIV"> <owl:sameAs
rdf:resource="#Le_Roi_Soleil" />
</rdf:Description>
|
|
> Les propriétés
Maintenant que l'on sait écrire des classes OWL, il ne
manque plus que la capacité à exprimer des faits au sujet de ces
classes et de leurs instances. C'est ce que permettent de faire les
propriétés OWL.
OWL fait la distinction entre deux types de
propriétés :
· les propriétés d'objet
permettent de relier des instances à d'autres instances
· les propriétés de type de
donnée permettent de relier des individus à des valeurs
de données.
Une propriété d'objet est une instance de la
classe owl:ObjectProperty, une propriété de type
de donnée étant une instance de la classe
owl:DatatypeProperty. Ces deux classes sont elles même
sous-classes de la classe RDF rdf:Property.
La définition des caractéristiques d'une
propriété se fait à l'aide d'un axiome de
propriété qui, dans sa forme minimale, ne fait qu'affirmer
l'existence de la propriété
<owl:ObjectProperty
rdf:ID="aPourParent" />
Cependant, il est possible de définir beaucoup d'autres
caractéristiques d'une propriété dans un axiome de
propriété.
19
|
|
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
> Définition d'une
propriété
Afin de spécifier une propriété, il
existe différentes manières de restreindre la relation qu'elle
symbolise. Par exemple, si on considère que l'existence d'une
propriété pour un individu donné de l'ontologie constitue
une fonction faisant correspondre à cet individu un autre individu ou
une valeur de donnée, alors on peut préciser le domaine et
l'image de la propriété. Une propriété peut
également être définie comme la spécialisation d'une
autre propriété.
<owl:ObjectProperty
rdf:ID="habite"> <rdfs:domain
rdf:resource="#Humain" /> <rdfs:range
rdf:resource="#Pays" />
</owl:ObjectProperty>
|
Dans l'exemple ci-dessus, la propriété
habite a pour domaine la classe
Humain et pour image la classe
Pays : elle relie des instances de la classe Humain à des
instances de la classe Pays. Dans le cas d'une propriété
de type de donnée, l'image de la propriété peut
être un type de donnée, de Schéma XML.
Par exemple, on peut définir la propriété de
type de données anneeDeNaissance :
<owl:Class rdf:ID="dateDeNaissance"
/>
<owl:DatatypeProperty
rdf:ID="anneeDeNaissance"> <rdfs:domain
rdf:resource="#dateDeNaissance" /> <rdfs:range
rdf:resource="&xsd;positiveInteger"/>
</owl:DatatypeProperty>
|
Dans ce cas, anneDeNaissance fait
correspondre aux instances de la classe de dateDeNaissance des
entiers positifs .On peut également employer un mécanisme de
hiérarchie entre les propriétés, exactement comme il
existe un mécanisme d'héritage sur les classes :
<owl:Class rdf:ID="Humain"
/>
<owl:ObjectProperty
rdf:ID="estDeLaFamilleDe"> <rdfs:domain
rdf:resource="#Humain" />
<rdfs:range rdf:resource="#Humain"
/>
|
20
|
|
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
</owl:ObjectProperty> <owl:ObjectProperty
rdf:ID="aPourFrere">
<rdfs:subPropertyOf
rdf:resource="#estDeLaFamilleDe" />
<rdfs:range rdf:resource="#Humain"
/>
...
</owl:ObjectProperty>
</owl:Class>
|
La propriété aPourFrere est une
sous propriété de estDeLaFamilleDe, ce qui
signifie que toute entité ayant une propriété
aPourFrere d'une certaine valeur a aussi une
propriété estDeLaFamilleDe de même
valeur.
> Caractéristiques des
propriétés
En plus de ce mécanisme d'héritage et de
restriction du domaine et de l'image d'une propriété, il existe
divers moyens d'attacher des caractéristiques aux
propriétés, ce qui permet d'affiner grandement la qualité
des raisonnements liés à cette propriété.
Parmi les caractéristiques de propriétés
principales, on trouve la transitivité, la symétrie, l'inverse,
etc. L'ajout d'une caractéristique à une propriété
de l'ontologie se fait par l'emploi de la balise type :
<owl:ObjectProperty
rdf:ID="aPourPere"> <rdfs:domain
rdf:resource="#Humain" /> <rdfs:range
rdf:resource="#Humain" />
</owl:ObjectProperty>
<owl:ObjectProperty
rdf:ID="aPourFrere">
<rdf:type rdf:resource="&owl; SymmetricProperty"
/>
<rdfs:domain rdf:resource="#Humain"
/> <rdfs:range rdf:resource="#Humain" />
</owl:ObjectProperty>
<Humain
rdf:ID="Pierre">
<aPourFrere rdf:resource="#Paul"
/>
|
21
|
|
Web sémantique
|
Ontologies & e-learning
|
Conception
|
Implémentation
|
<aPourPere rdf:resource="#Jacques"
/> </Humain>
|
L'Humain Pierre a pour frère Paul, de même que
(symétrie) l'Humain Paul a pour frère Pierre. Par contre, si
Pierre a pour père Jacques, l'inverse n'est pas vrai (aPourPere n'est
pas symétrique).
|