Faire fonctionner RDF avec le framework Jena 

  1. Installation

  2. Principe : les triplets RDF
    1. Triplets
    2. Ensemble (graphe) de triplets
    3. Requêtes sur une base de connaissances RDF : SPARQL

  3. RDFa et les microformats

  1. Installation


    1. Télécharger [http://jena.sourceforge.net/],
      et dézipper, pour obtenir un répertoire Jena-2.6.2 (dit répertoire de base)

    2. Installer une variable d'environnement $JENAROOT donnant le chemin du répertoire de base
      Par exemple, dans votre fichier d'initialisation ".cshrc" ajouter une ligne comme
      setenv JENAROOT /Users/jfp/Documents/RPO/SemWeb/Jena/Jena-2.6.2 

    3. Dans le répertoire $JENAROOT/bin, commander "chmod a+x *"
      pour rendre exécutables les scripts qui y sont logés.

    4. Vérifier que tout va bien en commandant (dans le même répertoire $JENAROOT/bin)
      "./rdfparse -h" (= demander le mode d'emploi de la commande jena.rdfparse).
      On doit vous répondre par le discours limpide que voici :

      java <class-path> com.hp.hpl.jena.rdf.arp.NTriple ( [ -[xstfurR]][ -b xmlBase -[eiw] NNN[,NNN...] ] [ file ] [ url ] )...
          All options, files and URLs can be intemingled in any order.
          They are processed from left-to-right.
          file      Converts RDF/XML file into N-triples
          url       Converts RDF/XML from URL into N-triples
          -b uri    Sets XML Base to the absolute URI.
          -r        Content is RDF (default, no embedding, rdf:RDF tag may be omitted).
          -R        RDF embedded in XML document, search for obligatory rdf:RDF start element.
          -t        No n-triple output, error checking only.
          -x        Lax mode - warnings are suppressed.
          -s        Strict mode - most warnings are errors.
          -n        Show line and column numbers.
          -u        Allow unqualified attributes (defaults to warning).
          -f        All errors are.error - report first one only.
          -b url    Sets XML Base to the absolute url.
          -e NNN[,NNN...]
                    Treats numbered warning conditions as errrors.
          -w NNN[,NNN...]
                    Treats numbered error conditions as warnings.
          -i NNN[,NNN...]
                    Ignores numbered error/warning conditions.



  2. Principe : les triplets RDF

    1. Triplets

      L'élément de base de RDF est l'énoncé d'une relation binaire aRb, où a et b sont les deux termes et R la relation.
      Comme on le voit, un tel énoncé prend naturellement la forme d'un triplet (a, R, b).
      Les trois composants du triplet portent des noms variables avec le point de vue du locuteur :
      • au ras des octets :
        le premier terme a sera appelé ressource, la relation R sera vue comme une propriété, et le second terme b sera sa valeur.
      • en termes philosophiques :
        le premier terme a sera appelé sujet, la relation R sera savamment appelée prédicat, et le second terme b sera un objet.

      Les deux termes de la relation ne jouent pas des rôles symétriques, ainsi que le laissent entendre les deux terminologies ci-dessus.

      • Le premier aura toujours le statut de ressource : pour une réflexion utile sur l'acception de ce mot dans le cadre du World Wide Web,
        lire Wikipédia.
        Pratiquement, une ressource sera désignée par une chaîne de caractères qui aura le statut exorbitant d'URI.
        On envisage aussi, dans le cadre de RDF,  des ressources anonymes.

      • Le second sera soit une ressource (éventuellement anonyme), soit un littéral - c'est-à-dire une chaîne de caractères banale,
        sans statut privilégié.

      • Quant à la relation, qui est une entité d'une tout autre nature (cf. en logique, la différence entre le 1er ordre et le 2ème ordre),
        on admet froidement qu'elle sera désignée, elle aussi, par une URI...

      Nous pouvons à présent montrer un premier exemple de triplet RDF, qui énonce que
      • un certain John Smith, vu comme une ressource : "http://.../JohnSmith" (premier terme)
      • a comme nom sur sa carte de visite (relation : précisions ci-après)
      • la chaîne de caractères (banale) "John Smith".

      Noter la différence de statut entre les deux chaînes de carctères en jeu : l'URI "http://.../JohnSmith"
      et le littéral "John Smith".
      Quant à la relation, elle sera désignée dans le cadre conceptuel formalisé des cartes de visite VCARD, dont
      le namespace est http://www.w3.org/2001/vcard-rdf/3.0. À l'intérieur de cet espace de nommage, alias vocabulaire,
      elle porte le nom local "FN" (comme Full Name). Sa désignation complète est  http://www.w3.org/2001/vcard-rdf/3.0#FN 
      (et non simplement http://www.w3.org/2001/vcard-rdf/3.0:FN comme on aurait pu croire).

      Ce triplet peut être représenté graphiquement ainsi :
      Triplet-1

      où la notation abrégée vcard:FN renvoie à une déclaration xmlns:vcard='http://www.w3.org/2001/vcard-rdf/3.0#'.

      En notation N3, ce triplet s'écrit :

      @prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

      <http://somewhere/JohnSmith> <http://www.w3.org/2001/vcard-rdf/3.0#FN> "John Smith".


      ou bien

      @prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
      @prefix vcard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .

      <http://somewhere/JohnSmith> vcard:FN "John Smith".



      En syntaxe XML, le même triplet s'écrit :

      <rdf:RDF
        xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
        xmlns:vcard='http://www.w3.org/2001/vcard-rdf/3.0#'
       >
         <rdf:Description rdf:about='http://somewhere/JohnSmith'>
            <vcard:FN>John Smith</vcard:FN>
         </rdf:Description>
      </rdf:RDF>



    2. Ensemble (graphe) de triplets

      L'idée est de manipuler des collections de triplets, censées représenter des connaissances.
      Il pourra arriver qu'une même ressource soit à la fois sujet et objet, qu'un même sujet entre dans plusieurs relations,
      ce qui donnera à la collection l'aspect d'un graphe au sens de ce terme en Combinatoire.

      Suite de l'exemple :
      le vocabulaire vcard distingue le nom complet (FN = Full Name), dont la valeur est une chaîne de caractères,
      et le nom (N = Name), dont la valeur est un objet complexe formé du nom de famille (Family) et du prénom (Given).
      Cet agrégat sera représenté en RDF par une ressource anonyme.

      D'où un graphe comme celui-ci :
      Triplet-2

      en notation N3

      @prefix vcard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
      @prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

      <http://somewhere/JohnSmith> vcard:FN "John Smith".

      <http://somewhere/JohnSmith> vcard:N [ vcard:Family "Smith" ; vcard:Given "John"] .

      ou bien, dans une écriture plus compacte

      @prefix vcard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
      @prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

      <http://somewhere/JohnSmith>
            vcard:FN "John Smith" ;
            vcard:N [ vcard:Family "Smith" ; vcard:Given "John"] .



      et en XML

      <rdf:RDF
        xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
        xmlns:vcard='http://www.w3.org/2001/vcard-rdf/3.0#'
       >
        <rdf:Description rdf:about='http://somewhere/JohnSmith'>
          <vcard:FN>John Smith</vcard:FN>
          <vcard:N rdf:nodeID="A0"/>
        </rdf:Description>
        <rdf:Description rdf:nodeID="A0">
          <vcard:Given>John</vcard:Given>
          <vcard:Family>Smith</vcard:Family>
        </rdf:Description>
      </rdf:RDF>



      Un exemple un peu plus fourni...

      en notation N3 : fichier vcardCat.N3
      @prefix vcard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
      @prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

      <http://somewhere/RebeccaSmith/>
            vcard:FN "Becky Smith" ;
            vcard:N [ vcard:Family "Smith" ; vcard:Given "Rebecca"] .

      <http://somewhere/JohnSmith/>
            vcard:FN "John Smith" ;
            vcard:N [ vcard:Family "Smith" ; vcard:Given "John"] .

      <http://somewhere/SarahJones/>
            vcard:FN "Sarah Jones" ;
            vcard:N [ vcard:Family "Jones" ; vcard:Given "Sarah"] .

      <http://somewhere/MattJones/>
            vcard:FN "Matt Jones" ;
            vcard:N [ vcard:Family "Jones" ; vcard:Given "Matthew"] .



      et en XML: fichier vcardCat.rdf

      <?xml version="1.0"?>
      <rdf:RDF
        xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
        xmlns:vcard='http://www.w3.org/2001/vcard-rdf/3.0#'
       >
        <rdf:Description rdf:nodeID="A0">
          <vcard:Family>Smith</vcard:Family>
          <vcard:Given>John</vcard:Given>
        </rdf:Description>
        <rdf:Description rdf:about='http://somewhere/JohnSmith/'>
          <vcard:FN>John Smith</vcard:FN>
          <vcard:N rdf:nodeID="A0"/>
        </rdf:Description>
        <rdf:Description rdf:about='http://somewhere/SarahJones/'>
          <vcard:FN>Sarah Jones</vcard:FN>
          <vcard:N rdf:nodeID="A1"/>
        </rdf:Description>
        <rdf:Description rdf:about='http://somewhere/MattJones/'>
          <vcard:FN>Matt Jones</vcard:FN>
          <vcard:N rdf:nodeID="A2"/>
        </rdf:Description>
        <rdf:Description rdf:nodeID="A3">
          <vcard:Family>Smith</vcard:Family>
          <vcard:Given>Rebecca</vcard:Given>
        </rdf:Description>
        <rdf:Description rdf:nodeID="A1">
          <vcard:Family>Jones</vcard:Family>
          <vcard:Given>Sarah</vcard:Given>
        </rdf:Description>
        <rdf:Description rdf:nodeID="A2">
          <vcard:Family>Jones</vcard:Family>
          <vcard:Given>Matthew</vcard:Given>
        </rdf:Description>
        <rdf:Description rdf:about='http://somewhere/RebeccaSmith/'>
          <vcard:FN>Becky Smith</vcard:FN>
          <vcard:N rdf:nodeID="A3"/>
        </rdf:Description>
      </rdf:RDF>



      Essayez !

      Le W3C met à votre disposition un service de validation : http://www.w3.org/RDF/Validator/  
      auquel vous pouvez soumettre vos fichiers en RDF-XML (soit par copier-coller, soit en donnant une URL publique).
      La validateur vous livrera la liste des triplets (sous forme d'un tableau à 4 colonnes : n°, sujet, prédicat, objet),
      et, si vous le demandez, il vous dessinera le graphe correspondant dans le format de votre choix.
      Voici par exemple comment il voit les 16 triplets de notre vcardCat.rdf (format "PNG - embedded"):

      Validateur
    3. Requêtes sur une base de connaissances RDF : SPARQL

      Comme son nom l'indique, le langage de requêtes SPARQL suit son devancier SQL.

      1. Exemple simple :
        fichier vcard1.rq

        PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>
        SELECT ?prenom
        FROM <http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/RDF/Exemples/vcardCat.rdf>
        WHERE {
            ?x vcard:N ?c .
            ?c vcard:Given ?prenom .
        }



        ce qui se lit :
        chercher dans le fichier "vcardCat.rdf" (ci-dessus) toutes les chaînes (ici désignées par "?prenom")
        telles qu'il existe dans le graphe correspondant deux triplets de la forme  "?x vcard:N ?c" et "?c vcard:Given ?prenom",
        avec la même valeur pour "?c"
        .

        Exécution :

        %/..($JENAROOT)../bin/sparql --query vcard1.rq
        -------------
        | prenom    |
        =============
        | "Rebecca" |
        | "Matthew" |
        | "Sarah"   |
        | "John"    |
        -------------



        Les valeurs recherchables ne se limitent pas aux chaînes terminales, mais on obtiendra toutjours des chaînes représentatives :

        Exemple : fichier vcard3.rq

        PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>
        SELECT ?prenom ?x ?c
        FROM <vcardCat.rdf>
        WHERE {
            ?x vcard:N ?c .
            ?c vcard:Given ?prenom .
        }


        %/..($JENAROOT)../bin/sparql --query vcard3.rq
        -------------------------------------------------------
        | prenom    | x                                | c    |
        =======================================================
        | "Rebecca" | <http://somewhere/RebeccaSmith/> | _:b0 |
        | "Matthew" | <http://somewhere/MattJones/>    | _:b1 |
        | "Sarah"   | <http://somewhere/SarahJones/>   | _:b2 |
        | "John"    | <http://somewhere/JohnSmith/>    | _:b3 |
        -------------------------------------------------------



        Et le résultat obtenu peut aussi avoir une forme propre à une exploitation ultérieure, par exemple en XML :


        %/..($JENAROOT)../bin/sparql --query vcard1.rq --results XML
        <?xml version="1.0"?>
        <sparql xmlns="http://www.w3.org/2005/sparql-results#">
          <head>
            <variable name="prenom"/>
          </head>
          <results>
            <result>
              <binding name="prenom">
                <literal>Rebecca</literal>
              </binding>
            </result>
            <result>
              <binding name="prenom">
                <literal>Matthew</literal>
              </binding>
            </result>
            <result>
              <binding name="prenom">
                <literal>Sarah</literal>
              </binding>
            </result>
            <result>
              <binding name="prenom">
                <literal>John</literal>
              </binding>
            </result>
          </results>
        </sparql>



      2. Mise en œuvre à distance
        Essayez ! Il faut que le champ "FROM" de votre requête contienne une URL accessible depuis le réseau.

        De même qu'on écrit le plus souvent les requêtes SQL au moyen d'une interface aimable,
        on trouve des logiciels permettant de composer des requêtes SPARQL avec un peu de confort.
        Par exemple Twinkle.
      3. Utilisation avec DBPedia
        Le projet DBPedia propose le contenu de Wikipédia sous la forme d'une énorme base de connaissances en RDF.

  3. RDFa et les microformats

    L'idée est d'enrichir le balisage d'un document XML afin d'en extraire certains types d'informations sous forme RDF.
    Le nom générique de cette famille de logiciels est microformats.
    RDFa [Wikipédia, Wikipedia] en fait partie, mais on peut en discuter...