Resource Description Framework

Cadre de Description de Ressources
Selon les spécifications de W3C et la documentation de Mozilla

Sommaire

Qu'est-ce que RDF?

Le format RDF permet de combiner deux documents XML en un seul, en décrivant les relations entre les données, et est utilisé par XUL pour indiquer dans le fichier lui-même comment le programme affichera les données.

Quand utiliser RDF?

Ce format convient lorsque l'information doit avoir une structure correspondant à celle de l'outil qui l'utilise, une interface graphique le plus souvent.
Lorsque également l'on veut agréger des sources de données séparées. Par exemple, locales et distantes. L'exemple qui nous intéresse le plus ici est la combinaison des données définissant l'interface graphique et les données qu'il affiche.
RDF est utilisé par Firefox pour créer les signets et autres données évolutives, et par XULRunner comme source des éléments de type listes, arborescences.
Il peut être utilisé pour la localisation en plusieurs langues, les textes étant séparés des éléments logiciels qui les affichent et sélectionnés selon le pays.

XML ou RDF?

RDF est complexe. Pourrait-on plutôt utiliser directement xml pour remplir des listes ou des arborescence en XUL? Il y a un article détaillé à ce sujet sur le site de Mozilla.
On peut charger le fichier XML et utiliser les méthodes du DOM de JavaScript, pour intégrer les éléments un à un.
En fait il y aurait une quantité de code à écrire. XUL implémente nativement des fonctions pour gérer l'acquisition et la mise à jour des données, de façon invisible.
RDF est simple au niveau du code XUL, une seule règle pour tous les éléments de la liste, les modifications dans la source de données sont gérées automatiquement par l'interpréteur XUL.
RDF permet aussi de représenter les mêmes données de différentes façons grâce aux relations incluses dans le document, alors qu'il faudrait écrire un code pour chaque type de présentation à partir d'un fichier XML.
L'avenir apportera les outils qui permettront de générer automatiquement le fichier RDF.
En conclusion, utilisez RDF et gardez un code XUL simple, ou choisissez XML et le programme sera surchargé par le code nécessaire pour traiter les données.

Les bases de RDF

Notion de ressource

Une ressource peut être:

Une ressource est désignée par une URI.

Propriété et déclaration

Une propriété est un attribut d'une ressource ou une relation impliquant une ressource.
Les caractéristiques des propriétés sont définies par le schéma RDF.
Une déclaration est un triplet:

  1. une ressource,
  2. une propriété de cette ressource,
  3. et une valeur pour cette propriété.

Cette valeur peut être une seconde URI ou un littéral, comme une chaîne de caractères.
Ce modèle provient du cadre plus général de la logique, c'est une transposition du triplet: sujet, prédicat, objet ou valeur.

Exemple de déclaration

Soit un énoncé simple:

 Wells est l'auteur du livre: La Guerre des Mondes.

Cela se transpose en composantes RDF:

Sujet / Ressource: http://www.xul.fr/Wells
Prédicat / Propriété: Auteur de 
Objet / Littéral: "La Guerre des Mondes"

Et l'écriture formelle RDF devient:

<rdf>
  <Description about="http://www.xul.fr/Wells">
<s:auteur>La Guerre des Mondes</s:auteur> </Description> </rdf>

Cette syntaxe sera décrite plus loin.

Espaces de noms

L'espace de nom est un ensemble dans lequel s'appliquent les règles d'un schéma RDF.
Un document RDF fait référence à au moins deux espaces de noms, RDF d'une part, et d'autre part le domaine auxquelles appartiennent les données.
Il est indiqué par l'attribut xmlns.

Exemple d'attribut d'espace de nom:

<rdf:rdf xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"></rdf:rdf>

Noter qu'une fois défini l'espace de nom rdf, le préfixe "rdf:" devient superflu à condition que cet attribut xmlns soit associé à la balise rdf qui englobe le contenu en RDF.

Exemple d'espace de nom global RDF:

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    ...
</RDF> 

L'exemple complet

Incluant le triplet et les définitions d'espaces de noms:

<?xml version="1.0 ?>
<rdf xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://description.org/schema/" > 
  <Description about="http://www.xul.fr/Wells">
     <s:auteur>La Guerre des Mondes<s:auteur>
  </Description>
</rdf>

Vocabulaire et symboles

Resource: Une ressource (resource en anglais) est une collection d'instructions. Cela correspond donc à un document RDF.
Instruction: Une instruction associe une donnée (un texte littéral ou une ressource) à l'élément qu'elle concerne.
Literal: Un littéral est un texte.
Triplet: Une instruction complexe avec un sujet, un prédicat, un objet.

Le symbole *: désigne l'élément suivant tant qu'il s'en présente.
Le symbole #: désigne un élément à l'intérieur d'un document RDF.
Le début du document si le symbole n'est pas suivi d'un mot.
Le document courant et la position courante si le symbole n'est pas précédé d'une adresse.
Le symbole ?: est un symbole de XUL. Il précède un nom de variable, (le tout entre guillemets). C'est le contenu de la variable qui sera utilisé.

Compléments sur la syntaxe

Datasource et URI

Une template est remplie à partir d'une source de donnée, ou datasource.
Son adresse est assignée comme attribut du plus grand conteneur du template par une URI selon le format: datasources="..."
Une URI est soit une adresse URL, locale ou distante, soit un composant local.

datasources=rdf:null
Cette source de donnée est vide. Dans ce cas on veut ajouter des données de façon dynamique.

La syntaxe des instructions RDF

Un triplet se représente par un élément avec deux attributs. Le sujet est la valeur d'un attribut about. Le prédicat est le second attribut, et l'objet est la valeur de ce second attribut.
Par exemple, le sujet est X, le prédicat est le nom de X, l'objet est Sandra.

<rdf:rdf
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
   xmlns:people="people/" >
<description 
      about="X"
      people:nom="Sandra" />
</rdf> 

Il est possible de multiplier les attributs.

 <description 
     about="X"
     people:nom="Sandra"
     genre="Female" />

On peut aussi créer un élément description pour chaque nouvel attribut, en reprenant le même sujet avec l'attribut about.

<description 
  about="X"
  people:genre="Female" />

Il est possible de représenter le prédicat par un sous élément. Les deux représentations, par attribut ou par sous élément sont équivalentes.

<description about="X" >
    <people:nom> "Sandra" </people:nom>
</description> 

On pourrait combiner des attributs et des sous éléments dans un élément.
On peut avoir un triplet qui met en relation une ressource avec une autre ressource et non un littéral, dans ce cas on utilise l'attribut resource.
La valeur du prédicat type, qui donne le type d'un objet, peut par exception est utilisé comme nom d'élément.

<rdf 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:monde="monde"            
  xmlns:people="people/">
  <monde:personne about="http://www.xulplanet.com/rdf/people/Sandra">
  </monde:personne> 
</rdf> 

Le type "personne" dans l'espace de nom "monde", est devenu un sous élément et remplace l'élément "description" avec l'attribut "type" dont la valeur est "personne".

Principaux éléments RDF

Tous les éléments définis dans RDF sont des ressources. Les ressources sont spécialisées en classes, conteneurs, propriétés, etc.
Ressources
resource: Objet de type resource.

Classes

datatype
: un type de données.
literal: une valeur littérale.

Eléments

description Balise pour décrire une relation entre un sujet et un objet.
bag: liste d'éléments dont l'ordre n'a aucune importance. (Bag=Valise)
seq: (séquence) liste d'élément dont l'ordre est significatif.
alt: (alternative) liste d'éléments parmi lesquels on en choisit un.
li: élément d'une liste.

Attributs

about:désigne le sujet d'une relation.
label
: libellé d'une ressource.
type: désigne le type d'un objet.
comment: description d'une ressource.

Attributs des éléments

xml:lang: Désigne la langue du document. Se place à tout niveau de la hiérarchie.
rdf: about: Spécifie le document dont on parle, donc son emplacement
Exemple: rdf:about="mondocument.html"
Exemple: rdf:about="http://www.xul.fr/document.html"
parseType: Le type de traitement pour le contenu de cette balise. La valeur est "literal" pour un contenu XML ou "resource" pour un contenu RDF.

Exemple

Le premier document XML donne une liste de noms communs d'animaux.

<animals> 
<name>Tarantula </name>
<name>Emu </name>
<name>Barn Owl</name>
</animals >

Le second document XML donne une liste de noms latins.

<animals> 
<species>Avicularia avicularia</species>
<species>Dromaius novaehollandiae</species> <species>Tyto alba</species>
<animals>
Un autre document XML

Ces deux documents sont maintenant associés. L'attribut about désigne l'animal par un code, une balise le relie à un nom commun et une autre au nom latin. L'affichage XUL devra refléter la correspondance entre ces deux attributs.

<rdf:description rdf:about="animals" >
   <animals:name>animals</animals:name>
</rdf:description>

<rdf:description rdf:about="animals/arachnids/tarantula" >
<animals:name>Tarantula</animals:name>
<animals:species>Avicularia avicularia</animals:species> </rdf:description>
<rdf:description rdf:about="animals/birds/emu" >
<animals:name>Emu</animals:name>
<animals:species>Dromaius novaehollandiae</animals:species> </rdf:description>

<rdf:description rdf:about="animals/birds/barnowl" >
<animals:name>Barn Owl</animals:name>
<animals:species>Tyto alba</animals:species>
</rdf:description>

Association des fichiers selon la syntaxe RDF

La structure des données hiérarchisée.
L'attribut about identifie l'élément de liste tandis que l'attribut resource fait la correspondance avec la description.
Maintenant l'élément "animals", décrit séparément, enclos les autres éléments.

<rdf:seq rdf:about="animals" > 
<rdf:seq rdf:about="animals/arachnids/tarantula">
<rdf:li rdf:resource="arachnids/tarantula"/>
</rdf:seq>
<rdf:seq rdf:about="animals/birds/emu"> <rdf:li rdf:resource="arachnids/tarantula"/>
</rdf:seq>

<rdf:seq rdf:about="animals/arachnids/tarantula">
<rdf:li rdf:resource="arachnids/tarantula"/>
</rdf:seq>

</rdf:seq>

Création d'une structure exploitable par XUL

Le fichier XUL exploitant ce document RDF.
Les valeurs d'attributs en l'occurence, name et species qui appartiennent au document RDF courant, sont assignées au contenu de cellule du tableau.

<tree datasource="animals.rdf" ref="animals">
<template>
<rule>
<treechildren>
<treeitem uri="rdf:*">
<treerow>
<treecell label="rdf:rdf#name"/>
<treecell label="rdf:rdf#species"/>
</treerow>
</treeitem>
</treechildren>
</rule>
</template>
</tree>

Fichier XUL affichant le document RDF

Décrivons le format XUL associé à un document RDF.
La balise template enclos une unité utilisée comme modèle, à partir de laquelle chaque unité du document sera générée. Son contenu peut être répété n fois, pour n éléments dans le fichier RDF.
Le document RDF concerné est indiqué par l'attribut datasource.
Une rule, donc une règle, est un conteneur pour un bloc RDF.
- Les conditions sont des rules, ayant un attribut dont la valeur doit être satisfaite,
- les actions sont aussi des rules, qui associent effectivement les données RDF aux éléments de XUL.
L'attribut uri, précisement uri="rdf:*" est un marqueur qui indique en quel endroit on commence à assigner les données de chaque élément du fichier RDF. Il démarre une séquence d'assignements.

<tag datasource="animals.rdf" >
<template>
<rule>
<conditions>
....
</conditions>
<action>
...
</action>
<rule>
... <rule>
.....etc...
</template>
</tag>

Format général XUL d'utilisation de fichier RDF

Exemple complet: les animaux

Convertir XML en RDF

Pour exploiter des documents XML dans une application XUL, il faudra écrire un script de conversion de XML en RDF.
Le script utilisera un élément RDF comme modèle, et génèrera les autres pour chaque élément du document XML.
(Un tel script sera disponible ultérieurement sur ce site).

Applications du format RDF

XUL et RDF

En utilisant RDF, on peut créer des listes et des arborescences dont on définit seulement le premier élément. Autant d'éléments seront affichés qu'il y a d'entrées dans le fichier RDF.
Pour rendre l'interface graphique dynamique, il suffit de placer le modèle d'élément de liste entre les balises:

<template>
         ...
</template> 

Il faut spécifier le document RDF par l'attribut datasource de la liste ou le tableau qui affiche les données, l'attribut uri, indique que l'élément XUL est une ligne d'affichage et le code # suivi d'un nom de balise ou d'attribut RDF indique quelle donnée insérer.

<tree datasource="animals.rdf">
<template>
<treechildren>
<treeitem uri="rdf:*">
<treerow>
<treecell label="rdf:rdf#name"/>
<treecell label="rdf:rdf#species"/>
</treerow>
</treeitem>
</treechildren>
</template>
</tree>

Noter que l'on indique l'espace de nom rdf pour les données, car par défaut, les éléments sont des éléments XUL.

RSS

RDF est un des formats utilisés pour créer des flux RSS, "RDF Site Summary". Le tutoriel RSS 1.0 sur le format de syndication décrit un exemple d'utilisation de RDF.

Dublin Core

C'est un espace de nom standard pour la description d'oeuvres ou de documents.
Le nom abrégé est dc est les éléments sont: author, title, subject, etc...

<dc:author> Victor Hugo </dc:author>

Plus d'informations