INaLCO - M2 Ingénierie Multilingue
Cours XML 2013-2014
Des vocabulaires aux ontologies
- L'attribut rdf:type
et le
problème de l'être
- Le besoin
- Le problème
- La tentative RDFS
(RDF-Schema)
- L'idée
- Exemple
- Mise en œuvre avec
Jena
- Rencontre avec les
logiques de description
- Les attentes
- Logiques de
description - autrefois appelées logiques
terminologiques
- La rencontre
- OWL
- Expression des opérations
ensemblistes en OWL
- Mise en œuvre
avec Pellet
- Exemple 1 : Suzanne et Jean
- Exemple 2 : Men
& Women
- Exemple 3
: Théorie de la grand'mère
- Exemple 4 : exploitation de
l'ontologie foaf
-
-
Devant la pauvreté d'une chaîne de caractères devant représenter une
entité du monde réel, nous éprouvons l'envie irrépressible d'ajouter
une indication sur "ce que ça représente", en bref de dire "ce que
c'est".
Quand nous "Tom
", nous désirons ajouter que "Tom
est un homme
", ou que "Tom est un chat
".
D'une manière moins instinctive, nous savons que la validité du
discours sur Tom dépend fortement du choix de "Tom
est un homme
" ou de "Tom est un chat
".
Nous souhaitons donc introduire cette distinction dans l'espoir de
vérifier la cohérence du discours.
Exemple : le validateur FOAF : http://foaf.qdos.com/validator/
fondé sur l'ontologie http://xmlns.com/foaf/spec/index.rdf
D'où l'apparition en RDF de l'attribut "rdf:type
",
écrit "typeof
" en RDFa, que nous avons largement vu à
l'œuvre dans les exemples.
-
La difficulté vient de ce que l'entité informatique qui doit désigner
"ce que c'est" (à savoir "un homme" ou "un chat")
n'est pas sur le même plan que celle qui désigne "Tom". "Tom" est un individu,
tandis que "un homme" et "un chat" désignent des espèces (ou
des concepts).
- En langage de logicien, "Tom" est du premier ordre tandis
que "un homme" et "un chat" sont du second ordre.
Et on constate en logique que les calculs du 1er et du 2nd ordre n'ont
pas les mêmes propriétés !
- En programmation par objets (C++, Java etc) "Tom" est le
nom d'une instance, "homme" et "chat" sont des noms de classes.
Et on sait que les classes ne sont pas traitées comme des instances.
Or nos triplets RDF ignorent superbement ce genre de distinction : ils
fonctionnent dans un univers plat,
où la seule différence reconnue sépare les chaînes de caractères
constantes de celles qui représentent des URIs;
On peut donc s'attendre à quelques difficultés sémantiques.
-
-
Se doter d'un vocabulaire RDF "comme les autres"... mais destiné au
niveau des
concepts.
Avec comme namespace rdfs
= http://www.w3.org/2000/01/rdf-schema
par opposition à rdf
= http://www.w3.org/1999/02/22-rdf-syntax-ns
- Une partie de ce vocabulaire figure déjà dans RDF :
rdf:type
et rdf:Property
- Nouveautés principales :
rdfs:Class
, rdfs:subClassOf
,
rdfs:range
, rdfs:domain
- Accessoirement :
rdfs:Label
, rdfs:comment
,
rdfs:seeAlso
, rdfs:isDefinedBy
.
-
Schéma
Rappel : l'emploi d'entités qui vient obscurcir les notations est dû à
l'emploi de chaînes préfixées comme valeurs d'attributs.
Dans cette position (entre guillemets de chaînes, donc dans des
constantes de type chaîne), les préfixes d'espaces de noms ne sont pas
décodés,
il faut donc écrire les URIs tout au long ! D'où l'emploi d'entités
pour abréger.
cf. http://www.w3.org/TR/owl-guide/
As an aid to writing lengthy URLs it can
often be useful to provide a set of entity definitions in a document
type declaration (DOCTYPE) that precedes the ontology definitions. The
names defined by the namespace declarations only have significance as
parts of XML tags. Attribute values are not namespace
sensitive.
But in OWL we frequently reference ontology identifiers using attribute
values. They can be written down in their fully expanded form, for
example "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#merlot".
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY eg
'urn:x-hp:eg/'>
<!ENTITY rdf
'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<!ENTITY rdfs
'http://www.w3.org/2000/01/rdf-schema#'>
<!ENTITY xsd
'http://www.w3.org/2001/XMLSchema#'>
]>
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;"
xmlns:xsd="&xsd;"
xml:base="urn:x-hp:eg/" xmlns="⪚">
<rdf:Description rdf:about="⪚mum">
<rdfs:subPropertyOf
rdf:resource="⪚parent"/>
</rdf:Description>
<rdf:Description
rdf:about="⪚parent">
<rdfs:range
rdf:resource="⪚Person"/>
<rdfs:domain
rdf:resource="⪚Person"/>
</rdf:Description>
<rdf:Description rdf:about="⪚age">
<rdfs:range
rdf:resource="&xsd;integer" />
</rdf:Description>
</rdf:RDF>
Instance
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY eg
'urn:x-hp:eg/'>
<!ENTITY rdf
'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<!ENTITY rdfs
'http://www.w3.org/2000/01/rdf-schema#'>
<!ENTITY xsd
'http://www.w3.org/2001/XMLSchema#'>
]>
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;"
xmlns:xsd="&xsd;"
xml:base="urn:x-hp:eg/" xmlns="⪚">
<Teenager rdf:about="⪚colin">
<mum
rdf:resource="⪚rosy" />
<age>13</age>
<!--
<age
rdf:datatype="&xsd;int">13</age>
-->
</Teenager>
</rdf:RDF>
-
Permet de vérifier la cohérence de déclarations et de calculer les
types des instances.
-
-
Dans une perpective de représentation des connaissances, il s'agit
d'aborder la définition et la mise en œuvre de concepts.
On distingue les individus et les concepts, et on utilise deux
relations :
- Un individu donné x est instance (ou non)
d'un concept donné C.
En termes traditionnels, on dit que l'individu x tombe sous le
concept C.
- Un concept A est (ou n'est pas) plus général
qu'un autre concept B.
En termes modernes on dit que A subsume B
En somme, on veut pouvoir exprimer des énoncés du genre "Tom est un
chat" et "un chat est un mammifère",
en marquant clairement que la copule "est un" est employée en deux sens
différents dans ces deux énoncés.
Le problème est alors : avec quel langage va-t-on définir les
concepts ?
En général on introduit une notion supplémentaire, celle d'attribut
ou de rôle, pour donner des propriétés aux concepts.
Après quoi, on se donne un jeu d'opérations, quelques concepts
primitifs et on construit...
Ex (ref)
- Opérations : intersection ∩, quantification existentielle
∃, construction en compréhension
- Concepts primitifs :
Personne
, Université
- Rôles primitifs :
inscritÀ
, mariéÀ
- On définit :
Étudiant
= Personne
∩ {x
| ∃u
∈Université, x
inscritÀ
u
}
- On se donne :
Suzanne
∈ Personne,
ParisX
∈ Université
,
Jean
∈{z
| z
mariéÀ
Suzanne
}∩{v
| v
inscritÀ
ParisX
}
- On veut conclure
Jean
∈ Étudiant.
La malheur veut que si le langage de définition des concepts est expressif,
alors les algorithmes de classification deviennent complexes.
Il arrive même que les problèmes soient indécidables...
historique : Réseaux sémantiques, KL-One [Brachman & Schmolze 1985]
NIKL [Moser 1983] New Implementation of KL-One : subsomption
indécidable [Patel-Schneider 1989]
CLASSIC [Patel-Schneider et al 1991]
-
Intro [Philippe Fournier-Viger, M.Sc.
Sherbrooke, 2005]
- La T-Box et la A-Box
partage des connaissances à représenter en deux sortes
- le savoir "général" sur les definitions des
concepts en jeu et sur leur relations (savoir terminologique : T-Box)
- le savoir "spécifique" sur une situation
donnée, formé d'assertions décrivant cette situation (A-Box),
formulées dans les termes définis par la T-Box.
- La subsomption
Dans la T-Box les concepts sont définis par une algèbre (à partir de
concepts primitifs et de rôles).
Ces définitions sont de nature intensionnelle.
Un algorithme permet de les classer (donc de passer du point de vue
intensionnel à la hiérarchie extensionnelle).
Cet algorithme est en général très complexe.
Exemple
On veut pouvoir exprimer :
- en termes généraux - dans la T-Box
- une femme est une personne du sexe
féminin
- un parent est une personne qui a (au
moins) un
enfant
- une mère est un parent du sexe
féminin
- une grand'mère est une mère qui a (au
moins) un
enfant qui est
lui-même un parent.
- en particulier - dans la A-Box
- André, Jean et Léonie sont des personnes
- Léonie est du sexe féminin
- Jean a pour enfant André
- Léonie a pour enfant Jean
- Et pouvoir conclure : Léonie est une grand'mère
-
À la fin du XXème siècle, les recherches sur les logiques de
description se heurtaient au mur de la complexité, et manquaient de
domaines d'application. Selon l'expression d'un de leurs promoteurs,
elles étaient enfermées dans leur tour d'ivoire.
Au début des années 2000 la tentative empirique RDFS et la théorie
impuissante des logiques de description
ont abouti à un compromis qui fonctionne : OWL pour Ontology Web
Language.
Du même mouvement, le mot ontologie qui dans la langue de la
philosophie désignait la science de l'être en tant qu'être
(chapitre de la métaphysique) a pris une nouvelle acception :
une ontologie, c'est un système de concepts
formalisé relatif à un domaine donné.
En pratique, c'est le contenu de la T-box.
-
-
Une fois qu'on a compris le sens de la lourde syntaxe d'OWL, beaucoup
de choses deviennent claires !
-
Les exemples suivants ont été traités en ligne de commande avec le
script
pellet.sh
de la version 2.3.0.
- info :
sh pellet.sh help
Usage: pellet <subcommand> [options]
<file URI>...
Pellet command-line client, version 2.3.0.
Type 'pellet help <subcommand>' for help on a specific subcommand.
Available subcommands:
classify
consistency
dig
entail
explain
extract
info
lint
modularity
query
realize
trans-tree
unsat
Pellet is an OWL ontology reasoner.
For more information, see http://clarkparsia.com/pellet
- pour la classification :
sh pellet.sh classify
le-fichier-de-l'ontologie
vérifie la cohérence d'une ontologie et donne la hiérarchie des classes.
- pour exécuter une requête SPARQL :
sh
pellet.sh query
-q
le-fich.-requête
-o XML
le-fich.-ontologie
avec sortie en format sparql-results
, la requête étant de
type SELECT
.
-
(voir ci-dessus)
Le but est de conclure que Jean est étudiant.
On va donc adresser la requête
PREFIX rdf:
<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX this: <http://inalco/M2-IM/Famille#>
SELECT ?x
WHERE {
{?x rdf:type this:Étudiant}
}
Avec le fichier tel qu'il est, traduction exacte de l'énoncé, on
obtient
Query Results (0 answers):
NO RESULTS
Manifestement, il manque une information qui permettrait de déduire que
Jean est une personne.
En effet, il suffit d'ajouter <rdf:type
rdf:resource="#Personne"/>
dans la description de <owl:Thing
rdf:about="#Jean">
pour obtenir
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="x"/>
</head>
<results>
<result>
<binding name="x">
<uri>http://inalco/M2-IM/Famille#Jean</uri>
</binding>
</result>
</results>
</sparql>
Plus subtilement, on peut ne pas dévoiler la personnalité de Jean,
mais spécifier que le rôle mariéÀ
relie une personne
à une personne :
<owl:ObjectProperty
rdf:about="#mariéÀ">
<rdfs:range
rdf:resource="#Personne"/>
<rdfs:domain
rdf:resource="#Personne"/>
</owl:ObjectProperty>
et la déduction a lieu.
-
Élaboré en
partant d'un exemple trouvé sur
http://www.net-lexikon.de/Ontology-Web-Language.html
où apparaissat le nom de Susanne Tilgner. Ce site a disparu...
La définition fait intervenir une fonction gender
à
valeurs dans une classe Gender
.
La classe Man
(esp. Woman
) est définie
comme formée de Person
dont le gender
vaut masculine
(resp. feminine
).
On déduit qu'il y a bien là un exemplaire de Man
et
un de Woman
, par la requête
PREFIX rdf:
<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX this: <http://epita/masters/international/perso#>
SELECT ?p ?n
WHERE {
{?pers rdf:type this:Man}
UNION {?pers rdf:type this:Woman} .
?pers this:personalname ?n .
?pers this:familyname ?p
}
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="p"/>
<variable name="n"/>
</head>
<results>
<result>
<binding name="p">
<literal>Moore</literal>
</binding>
<binding name="n">
<literal>Henry</literal>
</binding>
</result>
<result>
<binding name="p">
<literal>Tilgner</literal>
</binding>
<binding name="n">
<literal>Susanne</literal>
</binding>
</result>
</results>
</sparql>
-
Réalisation
en OWL d'un exemple classique de Baader & Nutt, par Guy
Lapalme (IRO, U. Montréal)
élagué pour ne garder que ce qui sert dans la déduction de Mary est
une grand'mère.
Les définitions de Man
, Woman
, Father
,
Mother
, etc sont assez alambiquées, c'est ce qui
fait le sel de cette ontologie :
Person
et Female
sont
des classes primitives
Woman
est définie comme
l'intersection de Person
et de Female
Man
est le complémentaire de Woman
dans Person
Mother
(resp. Father
)
est définie comme la restriction de Woman
(resp. Man
)
par le fait d'avoir un enfant (de type Person
)
Parent
est la réunion de Mother
et de Father
GrandMother
est alors une Mother
qui a un enfant de type Parent
- et pour
couronner le tout,
MotherWithoutDaughter
est définie comme
Mother
dont tous les enfants sont des non-Woman
.
Voici la hiérarchie que donne Pellet (sh pellet.sh classify...
)
owl:Thing
familyRelationship:Female
familyRelationship:Woman
familyRelationship:Mother
familyRelationship:GrandMother
familyRelationship:MotherWithoutDaughter
familyRelationship:Person
familyRelationship:Man
familyRelationship:Father
familyRelationship:Parent
familyRelationship:Father
familyRelationship:Mother
familyRelationship:GrandMother
familyRelationship:MotherWithoutDaughter
familyRelationship:Woman
familyRelationship:Mother
familyRelationship:GrandMother
familyRelationship:MotherWithoutDaughter
Connaissant Mary
, classée MotherWithoutDaughter
et mère de Paul
et de Peter
sachant que Peter
est père de Harry
,
on conclut que Mary
est grand'mère. Peut-on déduire aussi
que Paul
est un homme ?
PREFIX rdf:
<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX this:
<http://www.iro.umontreal.ca/~lapalme/FamilyRelationship.owl#>
SELECT ?pers
WHERE {
{?pers rdf:type this:GrandMother}
UNION {?pers rdf:type this:Man}
}
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="pers"/>
</head>
<results>
<result>
<binding name="pers">
<uri>http://www.iro.umontreal.ca/~lapalme/FamilyRelationship.owl#MARY</uri>
</binding>
</result>
<result>
<binding name="pers">
<uri>http://www.iro.umontreal.ca/~lapalme/FamilyRelationship.owl#PETER</uri>
</binding>
</result>
</results>
</sparql>
Non, car pour être homme il faut déjà être Person
...
Nous sommes ici dans la même situation que chez Suzanne et Jean : soit
on annonce que Harry
est Person
.,
soit on explique que la relation hasChild
relie une Person
à une Person
.
Et alors...
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="pers"/>
</head>
<results>
<result>
<binding name="pers">
<uri>http://www.iro.umontreal.ca/~lapalme/FamilyRelationship.owl#MARY</uri>
</binding>
</result>
<result>
<binding name="pers">
<uri>http://www.iro.umontreal.ca/~lapalme/FamilyRelationship.owl#PAUL</uri>
</binding>
</result>
<result>
<binding name="pers">
<uri>http://www.iro.umontreal.ca/~lapalme/FamilyRelationship.owl#PETER</uri>
</binding>
</result>
</results>
</sparql>
-