Resource Description Framework
Cadre de Description de Ressources
Selon les spécifications de W3C et
la documentation de Mozilla
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 peut être utilisé par les applications web pour indiquer dans le fichier lui-même comment le programme peut afficher 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 page web,
- une partie d'une page,
- un site web entier,
- un autre type de document.
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:
- une ressource,
- une propriété de cette ressource,
- 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: https://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="https://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="https://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="https://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>
<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>
JSON-LD
RDF est dérivé de XML, et pour ceux qui préfèrent la syntaxe C-Like, un format alternatif, JSON-LD (JSON for Linked Data) a été défini par le W3C. Comme RDF il permet d'indiquer comment se connectent les données dans les documents.
Voir: JSON-LD. Documentation et spécification de ce format alternatif.
Plus d'informations
- Spécification RDF du W3C en version française. La spécification RDF Schema devrait la remplacer (anglais).
- Concepts de RDF. Description de RDF en terme de graphes.
- Web Sémantique par le W3C (anglais).