Si un lien vers un objet ne contient pas de méta-données, il n’apporte pas d’informations sur le traitement, l’utilisation de cet objet. L’objet doit donc contenir le nécessaire pour que l’on puisse identifier son type, et par extension sa façon de l’utiliser. Il doit être différencié. Si le lien contient des métas, l’objet peut être indifférencié, ce sont les métas du lien qui détermineront le traitement de l’objet.
L’important, c’est qu’au moment du traitement, les données de l’objet aient été différenciées.
Objet = donnée + méta(s)
Un fichier est un objet différencié, obligatoirement. L’extension de son nom définit relativement grossièrement son type et donc le ou les programmes avec lesquels le fichier pourra être ouvert et traité. Si l’on prend comme exemple une image avec une extension .jpg, on sait que c’est une image de type JPEG et qu’elle pourra être visualisée avec Gwenview par exemple, et ouvert pour modification avec GIMP notamment.
L’extension du nom de fichier ne donne que peu d’informations sur le fichier. Un fichier JPEG contient des méta-données sur les conditions de prise de vue, pas vraiment utile pour le traitement de l’image proprement dit, mais bien plus pour son classement. Un fichier JPEG sera toujours traité de la même façon. Par contre, un fichier de type AVI pose plus de problèmes. L’extension précise que c’est une vidéo, donc elle sera toujours ouverte pour visualisation par un lecteur de vidéos. Mais la façon donc est stocké (encodé) la vidéo dans le fichier AVI est très variable (à ne pas confondre avec chiffrement). Le lecteur de vidéos connaît-il toutes les façon dont sont encodées les vidéos AVI? Assurément non. Le format du fichier contient donc une information sur cet encodage, une méta-données (qui ne porte pas ce nom).
C’est là qu’intervient le type mime. Celui-ci agit comme une méta-donnée qui décrit non seulement le type de l’objet mais aussi la façon dont il est encodé. L’extension n’a plus d’utilité et peut disparaître, avantageusement remplacée par le type mime.
Objet = donnée + code
En poussant un peu plus loin, pourquoi n’intégrerait-on pas directement à l’objet les programmes nécessaires à son traitement?
Cette pratique dérive de la programmation objet. Elle est utilisé par exemple avec des archives compressées auto-extractibles. Le traitement passe naturellement par la petite portion de code exécutable contenu dans l’archive. C’est pratique et simple, plus besoin d’installer l’application correspondante, elle vient naturellement avec la donnée et disparaît tout aussi naturellement quand on supprime cet objet. On a toujours ce qu’il faut pour traiter la donnée.
Mais, intégrer le code de traitement de la donnée directement dans l’objet pose plus de problèmes que cela n’en résout. A commencer par la taille des objets qui explose puisque l’on rediffuse à chaque fois une partie code conséquente et identique alors qu’on l’avait sûrement déjà avec un autre objet. Ensuite ce code devient immuable une fois intégré dans un objet, il ne permet pas l’ajout de nouvelles méthodes de traitement qui ne manqueront pas de voir le jour plus tard. Le code nécessite de dialoguer avec l’interface graphique et le système d’exploitation, mais ceux-ci évoluant dans le temps risquent de rendre le code inadapté, donc la donnée inexploitable… et donc perdu.
Intégrer le code à l’objet, c’est la pire des façons de faire. Si on y regarde de plus près, la programmation objet n’attache pas du code à des objets mais à des classes d’objets, c’est à dire des objets de même type (même modèle). Attacher du code à la donnée reste donc heureusement une pratique marginale.
Objet = donnée + lien(s)
A l’opposé de la méta et du code intégré à l’objet, il y a l’objet qui ne contient que la donnée brute, indifférencié.
Comme la donnée doit impérativement être différenciée pour être traité, la méta n’étant plus attachée à l’objet, elle lui est forcément externe. Dans ce cas, c’est le lien vers cet objet qui contient l’équivalent de la méta de l’objet. C’est le lien qui détermine la façon de traiter l’objet. Ainsi l’objet peut être traité de différentes manières en fonction du lien par lequel on accède à l’objet.