Accueil  / Semaine 2 / Les métadonnées

Les métadonnées

I looked at it and I saw that the markup said what the information is, not what it looks like. Why isn’t everything this way ? I still basically am asking that question. (Tim Bray)

De XML à Dublin Core

Afin de pouvoir mieux trouver l’information, on utilise souvent les métadonnées. Voici un exemple simple de métadonnées : vous pourriez faire un petit document qui donne la liste de tous les cédéroms que vous possédez avec, pour chacun, l’auteur, le genre, le titre de l’album et votre cote personnelle. Vous pourriez alors, beaucoup plus rapidement, trouver ce que vous estimez être les deux meilleurs albums de musique country que vous possédez. On exprime de plus en plus souvent les métadonnées en langage XML et c’est pourquoi, dans cette leçon, nous vous invitons à vous initier à cette syntaxe. La leçon se termine avec une introduction au Dublin Core qui est une norme de métadonnées très utilisée sur le web. Si ces sujets vous intéressent, vous pouvez consulter le contenu du cours INF 6450 - Gestion de l’information avec XML.

Commentaires du professeur

Comment peut-on connaître le genre de musique contenu dans un fichier MP3 ? Comment peut-on trouver le dernier document écrit par Jean ? La solution repose souvent sur l’utilisation des métadonnées, c’est-à-dire d’une description d’un document au sens large. De plus en plus, sur le web et ailleurs, les métadonnées sont écrites en XML. L’une des normes de métadonnées qui est devenue un incontournable est la norme Dublin Core qui permet de décrire un document à la manière dont on le fait en bibliothéconomie.

Une critique des métadonnées

Les métadonnées que l’humain doit saisir sont généralement rapidement désuètes, sinon mensongères. Le concept demeure néanmoins utile : personne ne songerait maintenant à ne pas annoter les fichiers MP3 avec le titre de la pièce musicale. D’un autre côté, avec les métadonnées, on ne sait pas comment tout représenter de façon fiable et des compromis doivent donc être faits.

Metadata can be quite useful, if taken with a sufficiently large pinch of salt. The meta-utopia will never come into being, but metadata is often a good means of making rough assumptions about the information that floats through the Internet. Certain kinds of implicit metadata is awfully useful, in fact. Google exploits metadata about the structure of the World Wide Web : by examining the number of links pointing at a page (and the number of links pointing at each linker), Google can derive statistics about the number of Web-authors who believe that that page is important enough to link to, and hence make extremely reliable guesses about how reputable the information on that page is. This sort of observational metadata is far more reliable than the stuff that human beings create for the purpose of having their documents found. (Cory Doctorow)

Voici un vidéo (optionnel) qui illustre cette idée :

Voici le vidéo (optionnel) d’une conférence pertinente de David Weinberger sur ce même sujet :

Qu’est-ce que le XML ?

Le XML ou Extensible Markup Language est une syntaxe générique utilisée pour formater des données avec des balises simples et lisibles. Par exemple, pour décrire un étudiant, une syntaxe XML possible serait :

<étudiant>
 <nom>Tremblay</nom>
 <prénom>Jean</prénom>
 <matricule>849490234</matricule>
</étudiant>

Par la suite, si nous désirions décrire l’ensemble des étudiants inscrits à un cours, nous pourrions utiliser la syntaxe suivante :

<cours>
 <nom>Introduction au traitement de texte</nom>
 <université>Téluq</université>
 <inscriptions>
   <étudiant>
     <nom>Tremblay</nom>
     <prénom>Jean</prénom>
     <matricule>849490234</matricule>
   </étudiant>
   <étudiant>
     <nom>Hotte</nom>
     <prénom>Richard</prénom>
     <matricule>8443444</matricule>
   </étudiant>
 </inscriptions>
</cours>

Dans ces exemples, observez la présence de texte entre les signes < et > : il s’agit de balises. Une balise marque le début ou la fin d’un élément. La balise <cours> marque le début de l’élément « cours », alors que la balise </cours> en marque la fin. Notez qu’un élément peut contenir d’autres éléments, et ainsi de suite.

Cette nouvelle syntaxe a émergé dans les années 1990, avec le développement du web. Depuis, le XML est devenu très courant dans l’industrie informatique et il fait partie des notions de base que les informaticiens doivent maîtriser, au même titre que les bases de données ou la programmation orientée objet. Elle est caractérisée par la simplicité d’abord : le HTML et le XML ont un parent commun, le SGML qui était complexe et difficile à maîtriser ; on a donc voulu « réparer » le SGML, en proposant des solutions plus simples. Entre autres choses, le web a permis d’observer que les technologies simples pouvaient être très puissantes ; c’est ce qui en a fait toute la force : une technologie accessible, ouverte et avec un minimum de complexité.

D’ailleurs, l’inventeur du web, Tim Berners-Lee, a rapidement adopté le XML et en propose, depuis, une nouvelle vision qui repose entièrement sur le XML : le web sémantique. La prémisse étant que, si l’on sépare le contenu de la présentation, le web n’en sera que plus riche. En effet, on observe que les formats qui confondent la présentation et le contenu, tels que Microsoft Word ou le HTML, limitent la capacité de nos logiciels. Par exemple, il peut être difficile pour un logiciel de trouver automatiquement la deuxième section d’un texte (placé sur le web) et de la reformater automatiquement pour qu’on puisse l’inclure dans un rapport annuel.

Quelques notions du XML

Un document XML est essentiellement du texte contenant des balises. Une balise est un segment de texte commençant par < et se terminant par >, comme <lavie>. Voici un exemple simple de document XML :

<personne>
  <nom>Jean</nom>
  <age>42</age>
</personne>       

Le XML est très présent sur le web et les documents XML peuvent être affichés par certains navigateurs récents, comme Internet Explorer et Firefox. On échange aussi le XML entre des logiciels et des serveurs sur le web ; le XML est aussi de plus en plus utilisé en bureautique comme format pour les traitements de texte, par exemple. Comme un document XML est avant tout du texte, il n’est pas avantageux d’utiliser le XML pour stocker des informations de type multimédia (vidéo, musique) ; le champ d’application du XML demeure toutefois très vaste.

Le XML définit une grammaire stricte et relativement simple de manière que les outils XML génériques puissent traiter tous les documents XML, peu importe leur domaine d’application. On dit d’un document qui respecte cette grammaire qu’il est bien formé. Ainsi, il n’est pas nécessaire d’utiliser des outils coûteux et propriétaires pour faire du XML.

Quelques principes et notions importantes du XML

Rappelons qu’une balise est un segment de texte commençant par <, et se terminant par >. Par exemple, <lavie> est une balise qui marque le début de l’élément « lavie ». Une balise commençant par </, comme </lavie>, est une balise de fin ; dans cet exemple, elle termine l’élément « lavie ».

Le nom XML de la balise de début est le texte suivant le symbole < (ou </ pour une balise de fin) et pouvant contenir n’importe quelle lettre ou chiffre (a, b,... 0, 1, 2,...) ou les trois symboles de ponctuation, soit la marque de soulignement ( _ ), le trait d’union ( - ) ou le point ( . ) ; un nom XML ne peut contenir d’autres symboles de ponctuation, ni un espace. En outre, il ne peut pas commencer par un chiffre, un trait d’union ou un point. Par exemple, le nom XML de la balise <lavie> est « lavie », alors que la balise <8lavie> ne serait pas autorisée. Sauf pour ce qui est des noms qui proviennent des spécifications officielles, un nom XML ne peut débuter par xml, XML, XmL, xML, XMl, Xml, xMl ou xmL.

Pour les balises de début, aussi dites d’ouverture, on peut ajouter un attribut au nom XML de la balise. Un attribut porte un nom XML qui doit respecter les mêmes règles que les noms XML des balises ; il est suivi du symbole « = » et d’une valeur placée entre guillemets (") ou apostrophes (’). Par exemple, la balise <lavie age="5"> indique que l’élément la vie a un attribut (age="5") qui a comme nom XML « age » et comme valeur « 5 ». Une balise peut avoir plusieurs attributs, comme <lavie age="5" sexe="M">, mais ils doivent tous porter des noms XML différents : la balise <lavie age="5" age="7"> n’est pas autorisée.

Un élément est l’ensemble du texte borné par deux balises ayant le même nom XML, comme <lavie> et </lavie>. On dit que l’élément <lavie></lavie> a pour nom XML « lavie ». L’élément hérite des attributs de sa balise de départ : l’élément <lavie age="5"> a l’attribut « age="5" ». Il est à noter que la casse est significative en XML : les balises <A> et <a> n’ont pas le même nom XML. Dans le cas particulier où l’élément est vide, sans contenu, on peut remplacer <lavie></lavie> par <lavie/> pour abréger. Un élément peut contenir d’autres éléments, comme dans <lavie><a></a></lavie>, ou du texte, ou du texte et des éléments comme <lavie>un texte<a> un mot </a>du texte</lavie>.

Si un élément contient d’autres éléments, il doit aussi contenir, entre ses balises de début et de fin, les balises de début et de fin de chaque élément. Notez, de plus, que deux éléments ne peuvent se chevaucher, comme <b><a></b></a> ; avant de passer à un autre élément, il faut terminer le premier avec sa balise de fin. L’exemple précédent est du XML mal formé !

Pour bien comprendre, illustrons notre propos par un exemple. Un document XML prend la forme suivante :

<racine>
  <element1>http://www.google.com</element1>
  <element2>Un moteur de recherche</element2>
</racine>       

Dans ce document, il y a trois éléments. Tout d’abord, il y a l’élément-racine qui comprend tout ce qui est entre les balises <racine> et </racine>. La première balise marque le début de l’élément-racine. Tout document XML bien formé doit avoir un élément-racine et un seul élément-racine. Tous les autres éléments doivent être contenus dans cet élément-racine. Dans notre exemple, cet élément a deux sous-éléments :

<element1>http://www.google.com</element1>

et

<element2>Un moteur de recherche</element2>

Les éléments peuvent eux aussi avoir des attributs, par exemple <a att="test"></a>, mais il faut obligatoirement mettre la valeur de l’attribut entre guillemets (") ou apostrophes (’).

On peut ajouter un attribut à un des éléments de la façon suivante :

<racine date="aujourd'hui">
  <element1>http://www.google.com</element1>
  <element2>Un moteur de recherche</element2>
</racine>

Le texte « date="aujourd’hui" » est un attribut de l’élément-racine avec pour nom « date » et comme valeur d’attribut « aujourd’hui ».
Il faut obligatoirement mettre la valeur de l’attribut entre guillemets (") ou apostrophes (’).

Un document XML qui respecte ces règles de base est dit « bien formé ». Pour éviter toute confusion, il convient de n’employer que cette expression et d’éviter de recourir à des synonymes (par exemple : « correct »).

Appels d’entités

Un élément peut contenir du texte, mais ne peut contenir le symbole <, comme dans l’exemple <a><</a>, parce que cela mène à de la confusion. Le symbole < est le seul symbole qui ne peut être utilisé dans du texte, entre deux balises. Que faire alors s’il faut utiliser le caractère < dans un texte mathématique, par exemple ? Il faut utiliser un appel d’entité. Un appel d’entité est un bout de texte qui commence par une esperluette ( & ) et se termine par un point-virgule ( ; ). Les appels d’entités suivants font partie de la définition du XML :

Appel d’entité Résultat
&lt ;
&amp ; &
&gt ; >
&quot ; "
&apos ;

De plus, parce que les appels d’entités utilisent le symbole &, on ne peut donc pas utiliser ce symbole directement dans un texte ; il faut faire un appel d’entité. Ainsi, si le nom de votre compagnie est John&Smith, vous ne devrez pas utiliser un élément comme ceci <nom>John&Smith</nom> ; il vous faudra plutôt utiliser <nom>John&amp ;Smith</nom>.

On utilise aussi les appels d’entités pour noter les valeurs des attributs. Supposons que la valeur d’un attribut est un guillemet suivi d’une apostrophe ("’). Les deux choix possibles <nom att="'""> et <nom att=''"'> ne sont pas valables. Dans ce cas, il faudra écrire <nom att="'&quot ;">, <nom att='&apos ;"'>, <nom att="&apos ;&quot ;"> ou <nom att='&apos ;&quot ;'>.

La déclaration XML

La déclaration XML ressemble à s’y méprendre à une instruction de traitement et prend la forme < ?xml ... ?>. Une déclaration XML n’est pas une balise ou un élément. Le contenu d’une déclaration XML comporte généralement au maximum trois attributs : version="...", encoding="..." et standalone="...". La version 1.0 du XML est la plus utilisée ; bien que la version 1.1 existe, elle est fort peu utilisée. On utilisera souvent une déclaration XML avec « encoding="ISO-8859-1" » pour pouvoir utiliser les accents dans le document : par défaut, un document XML utilise un encodage Unicode (UTF-8 ou UTF-16) [1], mais celui-ci n’est pas toujours supporté par les outils courants, tel le Bloc-notes (Notepad) de Microsoft ; l’utilisation des accents en français sans la déclaration « encoding="ISO-8859-1" » peut entraîner des problèmes quand on ne dispose pas de logiciels récents. L’attribut « standalone » peut être omis en général. La déclaration XML doit obligatoirement figurer au tout début du document ou être carrément absente : même un espace n’est pas permis.

Voici un exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<étudiant>
   Jean
</étudiant>

Utilisation simple du XML en recherche d’informations

Supposons que vous vouliez utiliser un outil qui chercherait le prix le plus bas de certains produits. Vous pourriez alors, par exemple, faire un tour sur le site Amazon et traiter les pages web en essayant d’y trouver le prix des divers articles. Un tel projet serait très difficile. Une alternative plus simple est d’utiliser les services web d’Amazon qui vous permettent d’avoir accès aux prix des produits sous la forme XML. Voici par exemple la description d’un album de Bryan Adams que le site Amazon nous donne :

<ItemAttributes>
<Artist>Bryan Adams</Artist>
<Binding>Audio CD</Binding>
<Format>Original recording remastered</Format>
<Label>A&M</Label>
<ListPrice>
<CurrencyCode>USD</CurrencyCode>
<FormattedPrice>$19.98</FormattedPrice>
</ListPrice>
<ProductGroup>Music</ProductGroup>
<ReleaseDate>2005-10-18</ReleaseDate>
<Title>Anthology</Title>
</ItemAttributes>

On constate qu’il est facile pour une machine de déterminer le prix de l’album, sa date de sortie et ainsi de suite. La tâche est beaucoup plus facile que si on tentait de traiter une page web typique. En ce sens, la représentation des objets en XML est une solution à certains problèmes de recherche d’informations.

Pour la suite de cet exposé , voir l’article intitulé « RDF ».


[1L’encodage Unicode est de plus en plus utilisé et a l’avantage de représenter plus de 99 000 caractères contre moins de 255 pour un encodage classique comme ISO-8859-1.