INaLCO - M2 Ingénierie Multilingue
Cours XML 2013-2014

Jean-François Perrot

Des vocabulaires aux ontologies


  1. L'attribut rdf:type et le problème de l'être
    1. Le besoin
    2. Le problème

  2. La tentative RDFS (RDF-Schema)
    1. L'idée
    2. Exemple
    3. Mise en œuvre avec Jena

  3. Rencontre avec les logiques de description
    1. Les attentes 
    2. Logiques de description - autrefois appelées logiques terminologiques
    3. La rencontre

  4. OWL
    1. Expression des opérations ensemblistes en OWL
    2. Mise en œuvre avec Pellet
    3. Exemple 1 : Suzanne et Jean
    4. Exemple 2 : Men & Women
    5. Exemple 3 : Théorie de la grand'mère
    6. Exemple 4 : exploitation de l'ontologie foaf

  1. L'attribut rdf:type et le problème de l'être

    1. Le besoin

      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.

    2. Le problème

      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.

  2. La tentative RDFS (RDF-Schema)

    1. L'idée

      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 à rdfhttp://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.

    2. Exemple

      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="&eg;">

        <rdf:Description rdf:about="&eg;mum">
          <rdfs:subPropertyOf rdf:resource="&eg;parent"/>
        </rdf:Description>

        <rdf:Description rdf:about="&eg;parent">
          <rdfs:range  rdf:resource="&eg;Person"/>
          <rdfs:domain rdf:resource="&eg;Person"/>
        </rdf:Description>

        <rdf:Description rdf:about="&eg;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="&eg;">

        <Teenager rdf:about="&eg;colin">
            <mum rdf:resource="&eg;rosy" />
            <age>13</age>
      <!--      <age rdf:datatype="&xsd;int">13</age>  -->
        </Teenager>

      </rdf:RDF>



    3. Mise en œuvre avec Jena

      Permet de vérifier la cohérence de déclarations et de calculer les types des instances.
  3. Rencontre avec les logiques de description

    1. Les attentes 

      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 :

      1. 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.
      2. 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 : ÉtudiantPersonne ∩ {x | ∃uUniversité, x inscritÀ u }
      • On se donne : Suzanne ∈ Personne, ParisX ∈ Université,
        Jean 
        ∈{zmariéÀ 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]
    2. Logiques de description - autrefois appelées logiques terminologiques

      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
        1. une femme est une personne du sexe féminin
        2. un parent est une personne qui a (au moins) un enfant 
        3. une mère est un parent du sexe féminin 
        4. 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
        1. André, Jean et Léonie sont des personnes
        2. Léonie est du sexe féminin 
        3. Jean a pour enfant André 
        4. Léonie a pour enfant Jean

      • Et pouvoir conclure : Léonie est une grand'mère

    3. La rencontre

      À 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.

  4. OWL

    1. Expression des opérations ensemblistes en OWL

      Une fois qu'on a compris le sens de la lourde syntaxe d'OWL, beaucoup de choses deviennent claires !
    2. Mise en œuvre avec Pellet

      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.
    3. Exemple 1 : Suzanne et Jean

      (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.

    4. Exemple 2 : Men & Women

      É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>



    5. Exemple 3 : Théorie de la grand'mère

      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 :
      1. Person et Female sont des classes primitives
      2. Woman est définie comme l'intersection de Person et de Female
      3. Man est le complémentaire de Woman dans Person
      4. Mother (resp. Father) est définie comme la restriction de Woman (resp. Man)
        par le fait d'avoir un enfant (de type Person)
      5. Parent est la réunion de Mother et de Father
      6. GrandMother est alors une Mother qui a un enfant de type Parent
      7. 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>



    6. Exemple 4 : exploitation de l'ontologie foaf