Brevet FR2933514A1 — publié le 20100108

La présente invention concerne l'optimisation de fichiers de type XML et plus particulièrement des procédés et des dispositifs de codage et de décodage par similarités pour documents de type XML, notamment de documents de type SVG. Le langage de balisage extensible XML (acronyme de Extensible Markup Language en terminologie anglo-saxonne) est une syntaxe pour définir des langages informatiques. Le langage XML permet ainsi de créer des langages adaptés à des utilisations différentes mais pouvant être traités par les mêmes outils. Un document XML est composé d'éléments, chaque élément commençant par une balise ouvrante comportant le nom de l'élément, par exemple , et se terminant par une balise fermante comportant elle aussi le nom de l'élément, par exemple . Chaque élément peut contenir d'autres éléments ou des données textuelles. Un élément peut être précisé par des attributs, chaque attribut étant défini par un nom et ayant une valeur. Les attributs sont placés dans la balise ouvrante de l'élément qu'ils précisent, par exemple . XML présente de nombreux avantages et est devenu un standard pour stocker des données dans un fichier ou pour échanger des données. XML permet en particulier de disposer de nombreux outils pour traiter les fichiers générés. De plus, un document XML peut être édité manuellement avec un simple éditeur de texte. En outre, un document XML, contenant sa structure intégrée aux données, est très lisible même sans en connaître la spécification. Cependant, le principal inconvénient de la syntaxe XML est d'être très prolixe. Ainsi, la taille d'un document XML peut être plusieurs fois supérieure à la taille intrinsèque des données. Cette taille importante des documents XML induit aussi un temps de traitement important lors de la génération et surtout de la lecture de documents XML. Pour palier ces inconvénients, des mécanismes pour coder les documents XML ont été cherchés. Le but de ces mécanismes est de coder le contenu du document XML sous une forme plus efficace mais permettant de reconstruire facilement le document XML. L'appellation XML binaire désigne les techniques de compression de données XML. Ces techniques visent notamment à réduire la taille des données XML, souvent volumineuses et redondantes, ainsi qu'à accélérer l'accès à ces données. Pour compresser des données XML, il convient de distinguer la compression de la structure de la compression des données elles-mêmes. Par exemple, si un ensemble de données XML représente une liste de livres, une structure comprenant des éléments de type � livre �, � auteur � et � titre � peut être utilisée. La structure est généralement répétée et peut donc facilement être compressée. En revanche, les données sont généralement moins redondantes. Par exemple, dans une liste de livres, il y a peu de chances de trouver plusieurs fois le même titre mais il est possible qu'un même auteur figure à plusieurs reprises. Afin de compresser les données, la technique la plus courante consiste à répertorier les différentes chaînes de caractères et à remplacer les chaînes de caractères répétées par une référence. Cependant, il existe des cas pour lesquels il est intéressant d'utiliser un codage spécifique aux chaînes de caractères traitées. Ainsi, par exemple, si des valeurs booléennes doivent être codées, il est possible de n'utiliser qu'un seul bit pour les représenter. De même, si des nombres compris entre 0 et 255 sont codés, un seul octet est nécessaire. Ainsi, par exemple, LZ77 est un algorithme de compression de données qui remplace des séquences de symboles par des références à des séquences de symboles déjà codés. Si une séquence � abcd � doit être codée et que celle-ci a déjà été identifiée vingt caractères plus tôt, une référence composée d'un décalage (� 20 �) et d'une longueur (� 4 �) est codée. LZ77 identifie seulement les séquences identiques. Le format de données SVG (sigle de Scalable Vector Graphics en terminologie anglo-saxonne) est un langage XML permettant de décrire des graphiques vectoriels. SVG utilise la syntaxe XML et définit un ensemble d'éléments et d'attributs permettant notamment de décrire des formes géométriques, des transformations, des couleurs et des animations. Un outil très utilisé dans SVG est le chemin graphique, appelé path en terminologie anglo-saxonne. Un chemin graphique est un ensemble de commandes et de coordonnées associées, permettant de décrire une forme graphique complexe à partir de segments, de courbes de Bézier et d'arcs de cercle. Les formats XML binaire peuvent être utilisés pour coder des documents SVG. Cependant, la plupart de ces formats présentent des limitations par rapport au codage de documents SVG. En effet, dans de nombreux documents SVG, la part de la structure est peu importante par rapport à la part du contenu. Or, les formats XML binaire visent principalement à compresser la structure des documents XML. Au niveau du contenu, les formats XML binaire peuvent indexer les valeurs, afin de ne pas coder plusieurs fois une même valeur répétée de contenu. Ils peuvent aussi coder de manière spécifique certains contenus dont le type est connu et simple, par exemple un nombre entier ou un nombre réel. Mais les contenus SVG ne répondent à aucun de ces critères : les contenus SVG importants par leur taille sont rarement répétés et ne correspondent généralement pas à des types simples. Ces contenus de taille importante sont par exemple les chemins graphiques, qui mélangent des commandes graphiques simples avec des coordonnées ou des listes de valeurs entières ou réelles. Pour cette raison, il est nécessaire de créer de nouveaux formats XML binaire spécifiques aux documents SVG ou d'adapter des formats XML binaire existant pour coder efficacement les documents SVG. Le brevet US 6,624,769 décrit un format XML binaire adapté à coder des documents SVG. Ce brevet décrit en particulier une manière spécifique pour coder les chemins SVG consistant à coder les commandes utilisées dans le chemin en n'attribuant un code qu'aux commandes présentes dans le chemin. En outre, ces codes sont des codes de type Huffman, dont l'attribution est prédéfinie pour l'ensemble des commandes existantes. Les arguments des commandes sont codés de façon binaire, en utilisant un nombre de bits minimum permettant de coder tout argument présent dans le chemin. Plus précisément, le brevet se limite au codage d'arguments entiers, correspondant aux profils SVG pour les téléphones mobiles, et sépare les arguments en deux catégories : les arguments correspondant à des commandes absolues et ceux correspondant à des commandes relatives. Dans le cas d'une commande absolue, l'argument représente directement une position dans le repère SVG tandis que dans le cas d'une commande relative, l'argument représente le déplacement depuis la position précédente. Pour chaque type d'argument, le nombre minimum de bits permettant de coder tout argument de ce type présent dans le chemin est calculé. Ensuite, chaque argument est codé sur un nombre de bits dépendant de son type. Le format décrit dans ce brevet permet d'obtenir des documents SVG compacts, mais ne s'applique qu'à une catégorie restreinte de documents et a une efficacité qui reste limitée dans le cas de chemins importants. Par ailleurs, un type de codage pouvant être utilisé pour coder une suite de nombres est le codage par dictionnaire selon lequel l'ensemble des valeurs prises par les différents nombres est d'abord codé. Cet ensemble de valeurs constitue un dictionnaire qui est utilisé pour coder les nombres. Ainsi, pour chaque nombre, l'index de ce nombre dans le dictionnaire est codé. Un tel type de codage est généralement efficace pour les valeurs SVG. Un autre type de codage pouvant être utilisé pour coder une suite de nombres est le codage par différence, aussi appelé codage par delta, selon lequel chaque nombre est codé non pas directement, mais relativement au précédent. Ainsi, pour chaque nombre, la différence de ce nombre et du précédent est codée. Ce système est efficace dans le cas de suite de nombres dont la variation est faible par rapport à la valeur du nombre. Dans le cas de SVG, ce type de codage est partiellement intégré au langage du fait de l'existence des commandes relatives. Par ailleurs, les variations entre deux nombres successifs sont souvent du même ordre de grandeur que les nombres eux-mêmes. Enfin, dans le cas des chemins, deux nombres successifs représentent des valeurs correspondant à deux coordonnées différentes, donc relativement indépendantes. Par conséquent, il existe un besoin pour améliorer le codage d'une suite de nombres adapté. L'invention permet de résoudre au moins un des problèmes exposés précédemment et, notamment, d'augmenter l'efficacité de compression de suites de données, en particulier des suites de nombres, notamment de données de type SVG. L'invention a ainsi pour objet un procédé de codage binaire par similarités pour un document structuré comprenant au moins une pluralité de données à coder, ce procédé comprenant les étapes suivantes, - décomposition de ladite pluralité de données à coder en une suite de symboles, chaque donnée de ladite pluralité de données étant au moins partiellement représentée par un symbole de ladite suite de symboles ; - sélection d'au moins une donnée dans ladite pluralité de données à coder ; - recherche d'au moins une première séquence de symboles préalablement codés, ladite première séquence étant identique à une séquence de symboles à coder, appelée deuxième séquence, comprenant au moins un symbole représentant au moins une partie de ladite au moins une donnée sélectionnée, appelé symbole traité ; - recherche d'au moins une troisième séquence de symboles préalablement codés, au moins un symbole de ladite troisième séquence étant distinct du symbole correspondant d'une séquence de symboles à coder, appelée quatrième séquence, comprenant au moins ledit au moins un symbole traité ; - comparaison de l'efficacité de codage desdites deuxième et quatrième séquences, lesdites deuxième et quatrième séquences étant codées relativement auxdites première et troisième séquences, respectivement ; et, - en réponse à ladite comparaison, codage de ladite deuxième séquence ou de ladite quatrième séquence. Le procédé selon l'invention permet ainsi d'optimiser le codage de documents structurés tels que des documents XML, en particulier de documents du type SVG, en comparant plusieurs codages possibles, notamment en combinant des codages du type codage par références identiques et du type codage par références avec au moins une différence. Le procédé offre ainsi une recherche parallèle de séquences de symboles identiques et de séquences de symboles proches, comportant au moins une différence, ainsi que la sélection de la meilleure séquence de codage parmi les séquences identifiées. De façon avantageuse, le procédé comprend en outre une étape de comparaison dudit au moins un symbole traité à une pluralité de symboles préalablement codés et une étape de sélection d'un symbole préalablement codé, identique audit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite première séquence, pour identifier des séquences de symboles identiques. De même, le procédé comprend en outre, de préférence, une étape de comparaison dudit au moins un symbole traité à une pluralité de symboles préalablement codés et une étape de sélection d'un symbole préalablement codé, proche dudit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite troisième séquence, pour identifier des séquences de symboles proches. Selon un mode de réalisation particulier, le procédé comprend en outre une étape de groupement des symboles préalablement codés pour améliorer l'identification des séquences de symboles identiques et proches, les symboles codés étant groupés de telle sorte que les symboles d'un même groupe sont proches les uns des autres. Par exemple, ladite étape de groupement comprend une étape de groupement par préfixe ou une étape de groupement par préfixe et par longueur du préfixe. Toujours selon un mode de réalisation particulier, le procédé comprend en outre une étape de sélection d'une première séquence parmi une pluralité de séquences répondant au critère de recherche de ladite au moins une première séquence, préalablement à ladite étape de comparaison de l'efficacité de codage desdites deuxième et quatrième séquences. De même, toujours selon un mode de réalisation particulier, le procédé comprend en outre une étape de sélection d'une troisième séquence parmi une pluralité de séquences répondant au critère de recherche de ladite au moins une troisième séquence, préalablement à ladite étape de comparaison de l'efficacité de codage desdites deuxième et quatrième séquences. Le procédé selon l'invention permet ainsi d'optimiser le codage de documents structurés en comparant l'efficacité de plusieurs codages de même type. Les critères de comparaison sont par exemple la longueur des séquences. Il est donc possible de comparer l'efficacité de plusieurs codages de même type sans effectuer de calcul. Ladite étape de sélection d'une séquence parmi une pluralité de séquences, ou au moins l'une desdites étapes de sélection d'une séquence parmi une pluralité de séquences, comprend avantageusement une étape de détermination de la distance entre la position du premier symbole de chacune des séquences de ladite pluralité de séquences et la position dudit symbole traité et une étape de comparaison de ladite distance avec un seuil prédéterminé. Le procédé selon l'invention permet ainsi de sélectionner des séquences situées à proximité du symbole traité selon le principe de la fenêtre glissante de recherche. Toujours selon un mode de réalisation particulier, au moins une donnée de ladite pluralité de données est un nombre décimal, la partie entière dudit nombre décimal étant représentée par un premier symbole et la partie décimale dudit nombre décimal étant représentée par un second symbole. Le procédé permet ainsi d'optimiser le traitement et le codage des données à coder. De même, le signe d'un nombre est avantageusement représenté par un premier symbole, la valeur absolue du nombre étant représentée par au moins un second symbole. Toujours selon un mode de réalisation particulier, le procédé comprend en outre une étape préalable de réorganisation des données de ladite pluralité de données selon la nature desdites données pour coder plus efficacement les données en imposant des contraintes plus fortes sur les données en distinguant, par exemple, les commandes des nombres. Ladite étape de comparaison de l'efficacité de codage desdites deuxième et quatrième séquences comprend avantageusement une étape de comparaison du volume de données représentées par lesdites deuxième et quatrième séquences avant et après codage pour permettre de choisir le codage le plus efficace en fonction, notamment, du ratio de codage. L'invention a également pour objet un procédé de décodage binaire pour un document structuré comprenant au moins une pluralité de données codées, ce procédé comprenant les étapes suivantes, - obtention de ladite pluralité de données codées, lesdites données étant codées selon le procédé décrit précédemment ; - sélection d'au moins une donnée codée dans ladite pluralité de 15 données codées ; - détermination du format de codage de ladite au moins une donnée sélectionnée parmi une pluralité de formats de codage prédéterminés, au moins un format de codage étant du type codage par références identiques et au moins un format de codage étant du type codage par références avec au moins 20 une différence ; et, - en réponse à ladite étape de détermination, décodage de ladite au moins une donnée sélectionnée selon une liste de symboles comprenant au moins une donnée préalablement décodée. L'invention permet ainsi de décoder des documents structurés tels 25 que des documents XML, en particulier des documents du type SVG, codés de façon améliorée par comparaison de plusieurs codages possibles, notamment de codages du type codage par références identiques et du type codage par références avec au moins une différence. De façon avantageuse, le procédé comprend en outre une étape 30 d'ajout des données décodées durant ladite étape de décodage à ladite liste de symboles permettant le décodage de données suivantes. L'invention a aussi pour objet un programme d'ordinateur comprenant des instructions adaptées à la mise en oeuvre de chacune des étapes du procédé décrit précédemment ainsi qu'un moyen de stockage d'informations, amovible ou non, partiellement ou totalement lisible par un ordinateur ou un microprocesseur comportant des instructions de code d'un programme d'ordinateur pour l'exécution de chacune des étapes du procédé décrit précédemment. L'invention a également pour objet un dispositif de codage binaire par similarités pour un document structuré comprenant au moins une pluralité de données à coder, ce dispositif comprenant les moyens suivants, - moyens pour décomposer ladite pluralité de données à coder en une suite de symboles, chaque donnée de ladite pluralité de données étant au moins partiellement représentée par un symbole de ladite suite de symboles ; - moyens pour sélectionner au moins une donnée dans ladite pluralité de données à coder ; - moyens pour rechercher au moins une première séquence de symboles préalablement codés, ladite première séquence étant identique à une séquence de symboles à coder, appelée deuxième séquence, comprenant au moins un symbole représentant au moins une partie de ladite au moins une donnée sélectionnée, appelé symbole traité ; - moyens pour rechercher au moins une troisième séquence de symboles préalablement codés, au moins un symbole de ladite troisième séquence étant distinct du symbole correspondant d'une séquence de symboles à coder, appelée quatrième séquence, comprenant au moins ledit au moins un symbole traité ; - moyens pour comparer l'efficacité de codage desdites deuxième et quatrième séquences, lesdites deuxième et quatrième séquences étant codées relativement auxdites première et troisième séquences, respectivement ; et, - moyens pour coder ladite deuxième séquence ou ladite quatrième séquence en réponse à ladite comparaison. Le dispositif selon l'invention permet ainsi d'optimiser le codage de documents structurés tels que des documents XML, en particulier de documents du type SVG, en comparant plusieurs codages possibles, notamment en combinant des codages du type codage par références identiques et du type codage par références avec au moins une différence. Le dispositif permet ainsi d'effectuer une recherche parallèle de séquences de symboles identiques et de séquences de symboles proches, comportant au moins une différence, ainsi que de sélectionner la meilleure séquence de codage parmi les séquences identifiées. Selon un mode de réalisation particulier, le dispositif comprend en outre des moyens de comparaison dudit au moins un symbole traité à une pluralité de symboles préalablement codés et des moyens de sélection d'un symbole préalablement codé, identique audit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite première séquence, pour identifier des séquences de symboles identiques. Toujours selon un mode de réalisation particulier, le dispositif comprend en outre des moyens de comparaison dudit au moins un symbole traité à une pluralité de symboles préalablement codés et des moyens de sélection d'un symbole préalablement codé, proche dudit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite troisième séquence, pour identifier des séquences de symboles proches. De façon avantageuse, le dispositif comprend en outre des moyens de groupement des symboles préalablement codés pour améliorer l'identification des séquences de symboles identiques et proches. Selon un mode de réalisation particulier, lesdits moyens de groupement sont adaptés à grouper des symboles préalablement codés par préfixe ou par préfixe et par longueur du préfixe. Toujours selon un mode de réalisation particulier, le dispositif comprend en outre des moyens de réorganisation des données de ladite pluralité de données selon la nature desdites données pour coder plus efficacement les données en imposant des contraintes plus fortes sur les données en distinguant, par exemple, les commandes des nombres. Avantageusement, lesdits moyens de comparaison de l'efficacité de codage desdites deuxième et quatrième séquences comprennent des moyens de comparaison du volume de données représentées par lesdites deuxième et quatrième séquences avant et après codage pour permettre de choisir le codage le plus efficace en fonction, notamment, du ratio de codage. De façon avantageuse, le dispositif comprend en outre des moyens de sélection d'une séquence parmi une pluralité de séquences pour sélectionner ladite première et/ou ladite troisième séquences, lesdits moyens de sélection comprenant des moyens pour déterminer la distance entre la position du premier symbole de chacune des séquences de ladite pluralité de séquences et la position dudit symbole traité et des moyens pour comparer ladite distance avec un seuil prédéterminé. Le dispositif selon l'invention permet ainsi de sélectionner des séquences situées à proximité du symbole traité selon le principe de la fenêtre glissante de recherche. L'invention a également pour objet un dispositif de décodage binaire pour un document structuré comprenant au moins une pluralité de données codées, ce dispositif comprenant les moyens suivants, - moyens pour obtenir ladite pluralité de données codées, lesdites données étant codées conformément au dispositif décrit précédemment ; - moyens pour sélectionner au moins une donnée codée dans ladite pluralité de données codées ; - moyens pour déterminer le format de codage de ladite au moins une donnée sélectionnée parmi une pluralité de formats de codage prédéterminés, au moins un format de codage étant du type codage par références identiques et au moins un format de codage étant du type codage par références avec au moins une différence ; - moyens pour décoder ladite au moins une donnée sélectionnée selon une liste de symboles comprenant au moins une donnée préalablement décodée ; et, - moyens pour ajouter à ladite liste de symboles les données décodées par lesdits moyens de décodage L'invention permet ainsi de décoder des documents structurés tels que des documents XML, en particulier des documents du type SVG, codés de façon améliorée par comparaison de plusieurs codages possibles, notamment de codages du type codage par références identiques et du type codage par références avec au moins une différence. D'autres avantages, buts et caractéristiques de la présente invention ressortent de la description détaillée qui suit, faite à titre d'exemple non limitatif, au regard des dessins annexés dans lesquels : - la figure 1 illustre un exemple d'algorithme de lecture de symboles lorsqu'il reste au moins un caractère à lire dans les données à coder ; - la figure 2 illustre un exemple d'algorithme de codage binaire par similarité des données ; - la figure 3 illustre un exemple d'algorithme utilisé pour déterminer la meilleure séquence de codage pour un symbole S ; - la figure 4 illustre un exemple d'algorithme de recherche des séquences pour un symbole S et un symbole proche SP ; - la figure 5 illustre un exemple d'algorithme de détermination de séquences selon lesquelles certains symboles sont identiques et d'autres proches, à partir d'une séquence de symboles identiques ; - la figure 6 illustre un exemple d'algorithme de décodage de données codées selon l'algorithme illustré sur la figure 2 ; et, - la figure 7 montre un exemple de dispositif permettant d'implémenter au moins partiellement l'invention. De façon générale, l'invention vise tout d'abord à identifier les nombres dans les données à coder. Ensuite, pour chaque nombre, l'efficacité de codage ou le coût de codage de ce nombre est déterminé en utilisant un codage par défaut, qui décrit entièrement le nombre. Puis, pour le nombre considéré, des nombres proches sont recherchés parmi les nombres déjà codés. Si un nombre proche est identifié, les nombres qui suivent le nombre considéré et les nombres qui suivent chaque nombre proche sont comparés. Ainsi, des séquences de nombres similaires sont déterminées. En particulier, des séquences strictement identiques (par exemple deux occurrences de la chaîne � 10 20 30 �) et des séquences comportant au moins une différence (par exemple � 10 � et � 11 � ou � 10 20 � et � 10 21 �) sont déterminées. Les différentes solutions de codage sont alors comparées en termes d'efficacité de codage et la solution la plus efficace est retenue. Les nombres sont ainsi codés individuellement ou par séquence selon l'efficacité de codage. Il convient de remarquer que, dans un souci de clarté, la description qui suit vise essentiellement le codage de nombres. Cependant, l'invention peut aussi s'appliquer au codage d'autres données représentant d'autres types d'information s'il est possible de calculer une différence entre des éléments de telles données. Ainsi, si les éléments devant être codés sont des mots, la différence entre deux mots peut être déterminée par les lettres à modifier pour passer de l'un à l'autre. Dans un tel cas, coder le mot � met � à partir du mot � mot � peut être réalisé de manière efficace en indiquant dans le codage par différence que la deuxième lettre est � e �. L'invention utilise la notion de séquence de symboles, les symboles étant obtenus en décomposant les données à coder (résultat de la lecture des données à coder). Une séquence désigne ici une suite de symboles. Plusieurs types de séquences peuvent être utilisés. Les séquences peuvent être décrites à l'aide de plusieurs paramètres. Toutes les descriptions de séquences comprennent avantageusement un index de départ ou de début de la séquence et une longueur c'est-à-dire le nombre de symboles dans la séquence. D'autres paramètres peuvent être utilisés selon le type de séquence. Une séquence appelée � Nombre � représente simplement un nombre. Elle est caractérisée par un index de départ et une longueur L pouvant ici prendre la valeur 1 ou 2 selon que le nombre est un nombre entier ou décimal et s'il est considéré qu'un nombre décimal est représenté par deux symboles. Ce type de séquence est différent des autres en ce qu'il ne fait pas référence à d'autres symboles. Par défaut, les symboles sont codés sous forme de séquence de type Nombre. Pour ce type de codage, il est avantageux de coder les petits nombres entiers sur un seul octet, par exemple les nombres compris entre 0 et 31. Une séquence appelée � Match � permet de référencer deux suites de symboles identiques. Elle est caractérisée par un index de départ, un index de référence et une longueur L. Les L symboles suivant l'index de départ sont identiques aux L symboles suivant l'index de référence. Une séquence appelée � Delta � permet de représenter au moins un nombre, sous forme d'une suite de symboles (un nombre peut être considéré comme un ou deux symboles selon la représentation utilisée pour les nombres décimaux), à partir d'une valeur de référence et d'une valeur de différence appelée delta. Une séquence typique de type Delta ne concerne qu'un seul nombre. Elle permet donc de coder l'index du nombre de référence ainsi que la différence. Alternativement, la séquence peut couvrir plusieurs nombres en codant la différence entre chacun de ces nombres et la valeur de référence. Alternativement encore, la séquence peut couvrir plusieurs nombres en codant la différence entre ces nombres et des valeurs de référence (en utilisant autant de valeurs de référence que de nombres). De façon générale, une telle séquence est caractérisée par un index de départ, un index de référence, une longueur L et au moins une différence. Il est avantageux, pour une séquence de type Delta, de coder la différence sur un seul octet, une telle différence représentant alors une faible variation par rapport à un nombre précédent. Une séquence appelée �MatchDelta � est ici composée d'une séquence de type Match puis d'une suite de différences, chacune de ces différences permettant de déterminer un nombre à la suite de la séquence de type Match. Par exemple, en considérant les séquences � 120 30 50 75 � et � 120 30 60 80 �, la seconde séquence peut être décrite avec une séquence MatchDelta en référence à la première en utilisant la séquence Match pour la partie � 120 30 � et les deux deltas ayant les valeurs 10 et 5 pour la partie � 60 80 �. D'autres définitions de séquences peuvent également être utilisées. Pour un type de séquence donné, différents formats de codage peuvent être définis. Ces formats sont d'autant plus pertinents que les hypothèses sur les données à traiter sont précises. A titre d'illustration, l'exemple donné dans la suite de la description propose un format de codage pour chaque type de séquence. Dans cet exemple, et plus généralement dans la description, la taille des données codées est exprimée en termes d'octets. Cependant, il convient de remarquer que le procédé peut être mis en oeuvre en utilisant un codage en octets non-alignés, c'est-à-dire en utilisant un nombre de bits variable pour coder les symboles. Par exemple, 6 bits peuvent être utilisés pour coder un premier symbole, puis 4 bits pour un autre, 14 bits pour un troisième et ainsi de suite. De cette façon, le code d'un symbole ne débute pas nécessairement au début d'un octet. Comme indiqué précédemment, la connaissance d'hypothèses sur les données à coder permet de définir des codages plus efficaces. Une application de ce principe consiste à modifier les codages utilisés en fonction du type des données à coder. Si, par exemple, il est connu que les données traitées représentent une suite de nombres proches, il est intéressant de privilégier le codage sous forme de séquences de type delta. Une façon efficace d'améliorer les codages consiste à modifier les en-têtes utilisés pour chaque type de séquences, par exemple en fonction de l'élément et de l'attribut SVG codés, pour optimiser le référencement des types de séquences. Il est remarqué ici que, dans l'exemple illustré dans la suite de la description, les suites de différences sont identifiées par des octets débutant par les bits � 001 �. S'il est choisi de n'utiliser qu'un seul bit, deux bits peuvent être utilisés pour le codage des suites de différences, ce qui permet, par exemple, de coder quatre fois plus de valeurs sur un même nombre d'octets. Différentes séquences d'un même type peuvent être comparées entre elles, au niveau de leur efficacité de codage, grâces aux paramètres les définissant. Ainsi, si des séquences de type Match sont recherchées, leur longueur peut être utilisée pour les comparer. La séquence la plus longue est privilégiée car elle permet de coder plus de symboles à l'aide d'une représentation unique. Pour des séquences de type Delta, les différences de plus faibles valeurs sont privilégiées car elles peuvent être codées de façon plus compacte. Cependant, pour comparer plusieurs séquences de types différents, par exemple une séquence de type Match et une séquence de type Delta, au niveau de leur efficacité de codage, une autre mesure d'efficacité de codage est nécessaire. Une telle mesure est, par exemple, liée au nombre de caractères représentés par la séquence et au nombre d'octets nécessaires au codage de cette séquence. Un critère simple consiste alors à comparer les rapports représentant le nombre de caractères et le nombre d'octets, pour chacune des séquences. Le rapport le plus élevé permet de déterminer la séquence la plus avantageuse pour la compression des données. Il est aussi possible de prendre en compte un critère de longueur. Si les rapports sont égaux, la séquence la plus courte ou la plus longue (en nombre de caractères) est sélectionnée suivant la valeur du rapport. A ces fins, il faut déterminer un rapport limite, qui peut par exemple être le rapport moyen entre le nombre de caractères représentés et le nombre d'octets codés. Cette valeur varie suivant les données. La valeur deux peut être utilisée, ce qui signifie qu'au-dessus de deux caractères par octet, il est estimé que la séquence est intéressante tandis qu'en dessous elle ne l'est pas. Un rapport inférieur, par exemple un rapport compris entre 1,5 et 2, est un résultat normal pour un codage basé uniquement sur des séquences de type Nombre. Ce type de seuil peut également être utilisé pour calculer un gain absolu qui permet de prendre en compte la longueur des données codées. En effet, si le rapport du nombre de caractères et du nombre d'octets d'une séquence est légèrement inférieur à celui d'une autre séquence mais qu'il permet de coder plus de caractères et que ce rapport est supérieur au seuil, il peut être plus avantageux de choisir la séquence ayant le rapport le plus faible. A titre d'illustration, si une séquence offre un rapport de 4,9 sur 30 caractères et qu'une autre séquence offre un rapport de 5 sur 10 caractères, il peut être estimé plus avantageux de choisir la séquence de rapport 4,9. Pour comparer deux séquences, il est donc possible de calculer, pour la séquence la plus courte, le rapport qui serait obtenu si les caractères présents dans la séquence la plus longue mais non dans la plus courte étaient codés avec ce taux limite. Dans l'exemple, il � manque � 20 caractères à la séquence la plus courte. Si ces 20 caractères étaient codés avec 2 caractères par octet, il faudrait donc 10 octets, soit 12 octets pour coder autant de données qu'avec la séquence de rapport 4,9. Le rapport 30/12 est inférieur à 4,9. La séquence de rapport 4,9 est donc choisie. La figure 1 illustre un exemple d'algorithme de lecture d'un symbole lorsqu'il reste au moins un caractère à lire dans les données à coder. Une chaîne de caractères, appelée Ssuiv, servant à stocker les caractères composant un symbole, est tout d'abord initialisée en fixant ici sa longueur, appelée L, à zéro (étape 100). Le caractère suivant des données à coder est ensuite obtenu et stocké dans une variable C (étape 105). Une évaluation est alors effectuée pour déterminer si ce caractère appartient à un nombre (étape 110), c'est-à-dire s'il s'agit d'un chiffre ou d'un point. Il est rappelé qu'un point est utilisé dans les chaînes SVG pour séparer la partie entière et la partie décimale d'un nombre. Les signes ne sont pas considérés ici comme appartenant à des nombres. Ils constituent à eux seuls des symboles. De cette façon, tous les nombres identifiés sont des nombres positifs et il n'est donc pas nécessaire de prendre en compte les signes pour comparer des nombres. Alternativement, les nombres pourraient être signés, les comparaisons étant alors réalisées en valeur absolue. De plus, considérer les signes comme des symboles distincts n'empêche pas de les coder efficacement. Selon un mode de réalisation particulier, les signes ne sont pas codés en tant que symboles distincts. Leur codage est groupé avec celui du nombre et peut être réalisé sur un seul bit. Il est remarqué ici que l'identification des nombres via des symboles pour trouver des suites de caractères identiques dans les données à coder permet de réduire le nombre de comparaisons effectuées. Ainsi, contrairement à ce qui est réalisé dans une recherche systématique basée sur les caractères, chaque caractère n'est pas comparé avec tous les caractères codés précédemment. Une recherche ciblée, visant les symboles représentant les nombres et non les caractères, est effectuée. Bien que certaines suites de caractères identiques puissent être ignorées avec cette méthode, elle permet de trouver les séquences les plus longues correspondant à des répétitions de nombres. De plus, si une répétition ne couvre pas un nombre, cela signifie que cette répétition ne porte que sur une partie du nombre ce qui est rarement avantageux du point de vue du codage car elle peut être assimilée à la perte de la synchronisation avec la suite de nombres. Si le caractère stocké dans C appartient à un nombre, il est ajouté au symbole Ssuiv par concaténation (étape 115) afin d'obtenir le nombre accédé dans le symbole Ssuiv. La variable C est ensuite initialisée et la longueur du symbole L est incrémentée de un. Un test est ensuite effectué pour déterminer s'il reste un caractère à lire dans les données à coder (étape 120). S'il reste un caractère à lire, les étapes précédentes sont répétées pour lire le caractère suivant. S'il ne reste pas de caractère à lire, c'est-à-dire si toutes les données à codées ont été lues, un test est effectué pour déterminer si le symbole Ssuiv représente un nombre décimal (étape 125). De même, si le caractère stocké dans C n'appartient pas à un nombre (étape 110) et si le symbole Ssuiv n'est pas vide (étape 130), c'est-à-dire si sa longueur n'est pas nulle, un test est effectué pour déterminer si le symbole Ssuiv représente un nombre décimal (étape 125). Si le symbole Ssuiv représente un nombre décimal, deux symboles, appelés SsuivE et SsuivD, sont ajoutés à la liste des symboles (étape 135). SsuivE représente la partie entière du nombre représenté par le symbole Ssuiv tandis que SsuivD représente la partie décimale de ce nombre. SsuivD comprend le point séparant les parties entière et décimale. Si le symbole Ssuiv ne représente pas un nombre décimal, le symbole Ssuiv, représentant un nombre entier, est ajouté dans la liste des symboles (étape 140). Lorsqu'un symbole est ajouté à la liste des symboles, sa position dans les données à coder est mémorisée. Dans le cas d'un nombre, sa position en tant que nombre est également mémorisée. Il convient de remarquer que l'utilisation de deux symboles pour représenter un nombre décimal n'est pas requise par l'invention, il s'agit simplement d'une optimisation permettant d'obtenir une granularité plus fine des symboles et donc de trouver potentiellement davantage de séquences de symboles identiques. Après avoir ajouté le symbole Ssuiv ou les symboles SsuivE et SsuivD à la liste des symboles, un test est effectué pour déterminer si le caractère C n'est pas vide (étape 145), c'est-à-dire pour déterminer si le caractère C ne représente pas le dernier caractère des données représentant un nombre. Si le caractère C n'est pas vide (étape 145), il est ajouté comme symbole à la liste des symboles (étape 150). De même, si le caractère C n'appartient pas à un nombre (étape 110) et si le symbole Ssuiv n'est pas vide (étape 130), le caractère C est ajouté comme symbole à la liste des symboles (étape 150). L'algorithme de lecture d'un symbole prend ensuite fin et aboutit à une décomposition de la pluralité des nombres faisant partie des données à coder en une liste ou suite de symboles. Chaque nombre est représenté par un ou deux symboles, selon qu'il s'agit d'un nombre entier ou d'un nombre décimal. Il convient de remarquer qu'avant de lire les données comme décrit en référence à la figure 1, il est possible de leur appliquer un traitement préalable dont le but peut être d'augmenter la probabilité de trouver des séquences avantageuses à coder. En particulier, les path SVG sont constitués de commandes et de valeurs, c'est-à-dire de nombres, chaque commande pouvant être en coordonnées absolues (commande majuscule, par exemple M) ou en coordonnées relatives (commande minuscule, par exemple m). En règle générale, des données en coordonnées relatives sont moins volumineuses que des données en coordonnées absolues. Par conséquent, un traitement peut consister à transformer les commandes absolues en commandes relatives. Un autre traitement peut consister à grouper toutes les commandes en début de chaînes, puis tous les nombres. Ainsi, les données à coder ne sont pas représentées par une seule chaîne de caractères dans laquelle les symboles peuvent être des commandes ou des nombres mais par une première chaîne composée de commandes et une seconde composée de nombres. Il est ainsi possible de coder plus efficacement les commandes et les nombres. Connaissant le nombre de valeurs à lire pour chaque commande, il est possible de reconstituer les données initiales. Un traitement préalable peut également consister à supprimer les caractères ne représentant pas d'information au niveau SVG, tels que les retours à la ligne et les tabulations, uniquement destinés à rendre les données plus lisibles dans un éditeur de texte. Pour des données SVG, le fait de conserver exactement la chaîne de départ n'est pas essentiel. Ce sont les informations au niveau SVG qu'il convient de conserver afin d'obtenir la même représentation graphiques des données. Enfin, il convient de remarquer qu'il n'est pas toujours nécessaire d'ajouter tous les symboles lus à la liste des symboles à traiter. En effet, s'il est décidé de ne pas coder les séparateurs, leur présence dans la liste des symboles à coder est superflue car, lorsque les nombres sont dans la liste de symboles à coder, ils sont, par construction, séparés les uns des autres. La figure 2 illustre un exemple d'algorithme de codage binaire par similarités des données. Après avoir obtenu les données à coder (étape 200), un test est effectué pour déterminer si ces données ont été entièrement codées (étape 205). Si les données n'ont pas été entièrement codées, le symbole S suivant à coder est obtenu (étape 210). Si des symboles ont déjà été lus mais pas encore codés, le premier de ceux-ci est le symbole suivant à traiter sinon le symbole suivant est lu en utilisant, par exemple, l'algorithme décrit précédemment en référence à la figure 1. Ainsi, une donnée à coder, qui est un nombre dans cet exemple, est sélectionnée dans la pluralité des données à traiter. Un test est alors effectué pour déterminer si le symbole S représente un nombre (étape 215). Si le symbole S représente un nombre, la meilleure séquence de codage représentant le symbole S est déterminée (étape 220). L'étape 220 est décrite de façon détaillée en référence à la figure 3. Si le symbole S ne représente pas un nombre, un test est effectué pour déterminer si le symbole S doit être codé (étape 225). En effet, dans ce cas, S est un simple caractère et tous les caractères ne sont pas à coder. Par exemple, le signe d'un nombre n'est de préférence pas codé car il est avantageusement codé avec le nombre qui le suit. De même, un séparateur, typiquement l'espace qui suit un nombre, n'est pas nécessairement codé car il peut être estimé que tout nombre est implicitement suivi d'un séparateur. En revanche, dans le cas d'une commande SVG, par exemple une commande � M � ou � c �, le symbole est codé. Le codage d'un symbole S (étape 230) consiste ici à écrire dans le flux codé le code associé au symbole S, par exemple un code sur un octet. Si le symbole S ne doit pas être codé (étape 225), après avoir codé le symbole S (étape 230) ou après avoir déterminé le meilleur codage pour le symbole S (étape 220), l'algorithme boucle sur l'étape 205 où un test est effectué pour déterminer si les données ont été entièrement codées. Lorsque les données ont été entièrement codées, l'algorithme prend fin. La figure 3 illustre un exemple d'algorithme utilisé pour déterminer la meilleure séquence de codage pour un symbole S. Lorsqu'un symbole numérique S est codé, il est nécessaire de chercher à déterminer plusieurs types de séquences pour ce symbole S et les symboles qui le suivent pour choisir la séquence permettant le codage le plus efficace. Ainsi, par exemple, après avoir déterminé une séquence de type Match et une séquence de type Delta, l'efficacité de codage pour ces séquences est comparée pour déterminer le format de codage le plus adapté. En d'autres termes, après avoir déterminé au moins une première séquence de symboles préalablement codés, identique à une deuxième séquence de symboles à coder comprenant le symbole S, et au moins une troisième séquence de symboles préalablement codés dont au moins un symbole est distinct du symbole correspondant d'une quatrième séquence de symboles à coder comprenant le symbole S, la comparaison de l'efficacité de codage des deuxième et quatrième séquences de symboles permet d'identifier le codage le plus approprié du symbole S. Le symbole S est codé par codage de la deuxième ou quatrième séquence. Une première étape a pour objet la détermination de la séquence de type nombre, appelée NbSeq, pour le symbole S, selon la définition donnée 5 précédemment. L'ensemble EP des symboles proches du symbole S est ensuite obtenu (étape 305) parmi les symboles précédemment codés. Alternativement, il est possible de considérer tous les symboles précédemment codés et non pas uniquement les symboles proches. Cependant, l'utilisation d'un tel ensemble de 10 symboles induit un grand nombre d'évaluations dont certaines ont peu de chances d'aboutir à des séquences intéressantes à coder. Par conséquent, il peut être admis que, par exemple, seuls les symboles dont le début des nombres qu'ils représentent correspond à celui du nombre représenté par le symbole S doivent être pris en considération. De plus, sachant que des 15 symboles identiques ou proches (faible différence) sont recherchés, il est préférable de grouper les symboles numériques. Un tel groupement peut être réalisé de différentes façons. Selon un premier mode de réalisation, il est possible de créer des classes de symboles proches, les classes étant disjointes. Il est par exemple intéressant de grouper 20 les symboles par préfixe ou par préfixe et longueur. Selon cet exemple, tous les symboles commençant par � 5 � ou tous les symboles commençant par � 5 � et de longueur � 3 �, par exemple � 542 � et � 561 � sont groupés. De cette façon, il est possible d'accéder facilement à la classe des symboles proches à partir d'un nombre donné et tout symbole proche est susceptible d'être 25 identique au symbole considéré. Il est également possible, selon un second mode de réalisation, de définir un système de classes qui se recouvrent en gérant, par exemple, des préfixes de différentes longueurs. Selon cet exemple, une classe pour les symboles débutant par � 5 � et une autre classe pour les symboles 30 commençant par � 50 � sont utilisées, la seconde classe étant contenue dans la première. Un tel système de classe permet d'ajuster la similarité recherchée en fonction, notamment, du nombre de symboles proches identifiés. La classe des symboles proches peut être réduite en prenant en compte un caractère supplémentaire dans le préfixe. Comme précédemment, il est aussi possible de prendre en compte la longueur des symboles dans le système de classes. Enfin, un troisième mode de réalisation consiste à trier les symboles déjà codés. Ainsi, lorsque des symboles proches sont recherchés pour un symbole donné, l'ensemble des symboles proches est constitué de tous les symboles pour lesquels la différence est inférieure à un seuil donné, ce seuil pouvant être défini de façon absolue ou en fonction de la valeur des nombres. Il est également possible de fixer un seuil au nombre de symboles proches afin de limiter le coût de la recherche de la meilleure séquence. Quel que soit le mode de réalisation, une limite du nombre de symboles déjà codés à prendre en compte pour identifier les symboles proches peut être fixée en fonction de la distance séparant la position de ces symboles déjà codés et de celle du symbole à coder, ce qui correspond à la définition d'une fenêtre glissante dans laquelle sont déterminés les symboles proches. La définition d'une fenêtre permet de borner les index à coder et limite les calculs nécessaires à la recherche de séquences similaires. L'ajout d'un symbole à un groupe de symboles proches peut être réalisé juste après le codage de ce symbole. De cette façon, il est possible de faire une référence à tout symbole d'un groupe de symboles proches puisqu'ils ont tous déjà été codés. De plus, il est préférable d'ajouter tous les symboles codés à des groupes de symboles proches afin d'augmenter les chances de trouver des séquences avantageuses. Si une séquence de type Match est codée, tous les symboles numériques couverts par cette séquence sont de préférence ajoutés aux groupes de symboles proches. Pour l'ensemble déterminé des symboles proches EP, un test est effectué pour déterminer s'il reste un symbole proche SP non traité (étape 310), c'est-à-dire pour déterminer s'il reste au moins un symbole proche pour lequel les séquences le comprenant n'ont pas été déterminées. S'il reste au moins un symbole proche SP non traité, les séquences pour S et SP sont recherchées (étape 315) puis le test visant à déterminer s'il reste un symbole proche SP non traité (étape 310) est à nouveau effectué. La recherche des séquences pour S et SP est décrite en détail par référence à la figure 4. Quand tous les symboles proches ont été traités, la meilleure séquence est sélectionnée (étape 320) par comparaison en termes d'efficacité 5 de codage. Comme décrit précédemment, il est possible de comparer des séquences de types différents en utilisant le nombre de caractères représentés et le nombre d'octets requis pour coder chaque séquence, ces nombres permettant de déterminer la séquence la plus efficace. 10 Une variante avantageuse consiste à définir pour chaque type de séquence une meilleure séquence initialement indéterminée et à mettre ces meilleures séquences à jour suite à la recherche de séquences pour les symboles S et SP (étape 315). En effet, en sélectionnant la meilleure séquence de chaque type, par exemple d'après leurs propriétés telles que la longueur 15 pour une séquence de type Match, le nombre de séquences à comparer lors de la sélection de la meilleure séquence est réduit, ce qui permet un traitement plus efficace. Ainsi, par exemple, si des symboles proches SPI, SP2 et SP3 sont traités pour un symbole S, la meilleure séquence de type Match est initialement 20 indéterminée, aucun symbole proche n'ayant été traité. Si SPI permet de trouver une séquence de type Match ayant une longueur de 4 symboles, alors la meilleure séquence de type Match est mise à jour avec cette séquence. Ensuite, si pour SP2 une séquence de type Match ayant une longueur de 3 symboles est trouvée, la meilleure séquence de type Match n'est pas mise à 25 jour car la longueur est inférieure à celle de la meilleure séquence de type Match rencontrée jusque là. En revanche, si pour SP3 une séquence de type Match longue de 6 symboles est identifiée, la meilleure séquence de type Match est mise à jour avec cette séquence commençant avec SP3 et longue de 6 symboles. Cette séquence devient ainsi une première séquence, identique à 30 une deuxième séquence dont le premier symbole est le symbole S. De manière similaire, une meilleure séquence de type Delta est déterminée comme détaillé ci-après et devient une troisième séquence candidate pour le codage par référence. Cette troisième séquence présente au moins une différence avec une quatrième séquence comprenant le symbole S. Ainsi, seule la meilleure séquence pour chaque type de séquence est mémorisée et il n'est pas nécessaire de mémoriser l'ensemble des séquences identifiées pour les comparer en fin de traitement. La meilleure séquence obtenue est codée (étape 325). La figure 4 illustre un exemple d'algorithme de recherche des séquences pour un symbole S et un symbole proche SP. La recherche de séquences pour un symbole S et un symbole proche SP débute par l'initialisation des différentes séquences recherchées (étape 400). Il est proposé, ici, de chercher la séquence de type Match la plus longue, appelée LMatchSeq, une séquence de type Match suffisamment proche en termes de décalage dans la liste de symboles, appelée CMatchSeq, une séquence de type Delta, appelée DeltaSeq et la séquence MatchDelta la plus longue, appelée MatchDeltaSeq. Les nombres Nb(S) et Nb(SP) sont ensuite comparés (étape 405), un nombre Nb(x) étant déterminé de la façon suivante : si un symbole x représente la partie entière d'un nombre entier, x et Nb(x) sont égaux et si le symbole x représente la partie entière d'un nombre décimal, Nb(x) est égal au nombre résultant de la concaténation du symbole x et du symbole suivant, c'est-à-dire du symbole représentant la partie décimale. Si les nombres Nb(S) et Nb(SP) sont égaux, la longueur L de la séquence de symboles identiques est calculée (étape 410). A cette fin, les nombres Nb(S1) et Nb(SP1), représentant les symboles Si et Spi suivant les symboles S et SP, sont comparés. La valeur L est définie par la plus grande valeur j telle que Nb(Sj) est égal à Nb(SPj). Les paramètres de la séquence LMatchSeq sont alors déterminés (étape 415). Les paramètres utilisés ici sont la longueur L préalablement calculée et l'index du symbole SP représentant l'index de référence. Ces paramètres signifient que la première séquence débutant à l'index de SP et comptant L symboles est identique à la deuxième séquence débutant à l'index de S et comptant également L symboles. Un test est ensuite effectué pour déterminer si la différence de l'index de S en tant que nombre et de l'index de SP en tant que nombre est inférieure à un seuil prédéterminé, appelé MaxOffset (étape 420). A titre d'illustration, un tel seuil peut être fixé à cinq ce qui permet de faire des références courtes aux quatre nombres les plus récemment codés. Ceci est particulièrement utile dans le cas de données en deux ou trois dimensions car il est fréquent que l'une des coordonnées soit invariante. Si cette différence est inférieure au seuil MaxOffset, cela signifie que la séquence correspondant à Nb(SP) est une séquence identique proche (située à proximité). Il est possible que les symboles suivant ceux correspondant à Nb(S) et à Nb(SP) soient identiques, la séquence étant donc potentiellement plus longue. Toutefois, dans le cadre de la séquence CMatchSeq (� Match proche �), seules les séquences relatives à Nb(S) et à Nb(SP), longues de deux symboles au plus, sont prises en compte pour coder efficacement une répétition d'un nombre apparu dans un passé récent. Il est ainsi avantageux, pour obtenir une meilleure efficacité, de ne coder qu'un index et non une longueur, celle-ci étant déterminée à partir du nombre auquel il est fait référence. Par exemple, en considérant les données � 1.5 2 1.5 �, avec ce type de séquence, le second nombre � 1.5 � est codé comme � Match proche � avec l'index arrière 2. Durant le décodage, il est ainsi possible d'obtenir le symbole � 1 � puis de vérifier le symbole suivant (� .5 �). Celui-ci représente une partie décimale. Cependant, Nb(S) est égal à Nb(SP). Par conséquent, si Nb(S) a une partie décimale, Nb(SP) a aussi une partie décimale. Le symbole � .5 � est donc ajouté. Le second nombre � 1.5 � est ainsi décodé sans que la longueur ait été codée. Des séquences de type CMatchSeq et de type LMatchSeq doivent ici être codées de façon différentes (un bit peut, par exemple, être utilisé pour indiquer une séquence � Match proche �, pour laquelle la longueur est implicite). La séquence CMatchSeq peut alors être paramétrée (étape 425). L'index du symbole SP est nécessairement pris en considération. Il peut aussi être avantageux de considérer la longueur de la séquence. En effet, même si celle-ci est implicite, il peut être intéressant de la prendre en compte lors du codage pour pouvoir traiter ce type de séquence comme une séquence de type Match classique. De cette manière, le traitement de ces deux types de séquences est commun à l'exception de l'étape de codage (la longueur n'ayant pas besoin d'être codée pour une séquence de type Match proche). Si la différence de l'index de S en tant que nombre et de l'index de SP en tant que nombre est supérieure au seuil MaxOffset ou après avoir paramétré la séquence CMatchSeq, la séquence MatchDeltaSeq est déterminée à partir de la séquence LMatchSeq (étape 430). Cette étape est détaillée en référence à la figure 5. Si les nombres Nb(S) et Nb(SP) ne sont pas égaux, la séquence DeltaSeq est paramétrée (étape 435) avec la différence correspondante, c'est-à-dire la valeur égale à la différence entre ces nombres (Nb(S) û Nb(SP)), et l'index du symbole SP pour référence. Il convient de remarquer que, de façon similaire à ce qui est fait à l'étape 430, il est possible, suite à l'étape 435, de procéder à une recherche de différence entre les nombres qui suivent Nb(S) et Nb(SP). La longueur de la séquence est alors déterminée en comparant les nombres Nb(S1) et Nb(SP1) correspondant aux symboles Si et SP1 suivant les symboles S et SP. La méthode décrite en référence à la figure 5 peut être appliquée ici, la seule différence venant du fait qu'il est nécessaire de partir d'une séquence de type Delta et non d'une séquence de type Match. Le fait de prendre en compte une séquence de ce type induit de prévoir, dans le codage des suites de différences, un marqueur permettant de savoir si des différences suivent. Cependant, suivant les codages définis et les données traitées, il n'est pas toujours intéressant de prendre en compte ce type de séquence. Plus généralement, divers types de séquences peuvent être recherchés en plus des types déjà décrits, notamment des combinaisons d'identités et de différences, des séquences où seuls les signes sont susceptibles de changer, ou encore des séquences de différences à plusieurs dimensions. Par exemple, sur la séquence � 1 2 3 ; 11 12 13 � apparaît un point en trois dimensions pour lequel la valeur � 10 � a été ajoutée à chaque coordonnée. Cependant, plus de types de séquences différents sont considérés, plus le traitement est coûteux et plus les codes utilisés pour distinguer les différents types de séquence doivent être longs La détermination de la séquence DeltaSeq ou MatchDeltaSeq permet de déterminer au moins une séquence, appelée troisième séquence, dont au moins un symbole est distinct du symbole correspondant d'une quatrième séquence de symboles à coder comprenant le symbole S. Dans une variante, si les nombres Nb(S) et Nb(SP) sont des nombres décimaux, des séquences de type Match sont recherchées pour les symboles correspondant à leurs parties décimales respectives, c'est-à-dire les symboles qui suivent les symboles S et SP. Ensuite, pour déterminer le coût de codage de Nb(S), le codage de S et celui du symbole suivant (par exemple avec un codage de type Nombre pour S et un codage de type Match pour les symboles suivants) sont cumulés. L'avantage en procédant ainsi vient du fait qu'il existe plus de chances de trouver des séquences de type Match longues. Cependant, pour que cette séquence soit intéressante, il ne faut pas que le coût associé au codage de S seul soit trop important. Dans une autre variante, les différences pour des nombres décimaux ne sont prises en considération que si les parties entières sont égales. De cette façon, moins d'informations sont à coder et les différences obtenues ont donc plus de chances de se révéler avantageuses. Après avoir été identifiées, les différentes séquences sont transmises à l'algorithme décrit en référence à la figure 3 (étape 440) pour permettre la sélection de la meilleure séquence. La figure 5 illustre un exemple d'algorithme de détermination de séquences de type MatchDelta à partir d'une séquence MatchSeq. L'évaluation d'une séquence de type MatchDelta à partir d'une séquence de type Match commence par l'obtention des index de départ de la séquence à coder et de la séquence à laquelle il est fait référence pour la coder (étape 500). En considérant un symbole S et un symbole proche SP, avec une longueur de Match L, ces index de départ de l'évaluation des différences sont respectivement (Index(S) + L) et (Index(SP) + L). Ensuite, les prochains nombres NbSuiv et NbPSuiv à apparaître dans les données à coder, NbSuiv suivant la séquence débutant par S et NbPSuiv suivant la séquence débutant par SP, sont déterminés (étape 505). Il se peut que les données qui suivent les index déterminés ne soient pas des nombres. S'il s'agit de séparateurs ou de signes, le nombre suivant est recherché. S'il s'agit d'une commande SVG ou si la fin des données est atteinte, la recherche du nombre suivant est interrompue et il est considéré que ce nombre est indéterminé. En effet, cherchant à ajouter des différences à la suite de la séquence de symboles identiques, seuls les nombres (auxquels peuvent être rattachés les séparateurs et les signes mais pas les commandes) sont pris en considération. Il convient de remarquer que pour les séquences de type MatchDelta, il est plus avantageux de procéder à un ré-ordonnancement des données pour séparer les commandes des nombres comme indiqué précédemment pour qu'une séquence de deltas ne soit pas interrompue par une commande. Un test est ensuite effectué pour déterminer si les nombres NbSuiv ou NbPSuiv sont indéterminés (étape 510). Si les nombres NbSuiv ou NbPSuiv sont indéterminés, aucune différence ne peut être calculée et le traitement prend fin. Si les nombres NbSuiv et NbPSuiv ne sont pas indéterminés, leur différence (NbSuiv û NbPSuiv), appelée delta, est évaluée (étape 515). Pour savoir s'il est intéressant de coder cette différence, une valeur, appelée MaxDelta, en deçà de laquelle il est avantageux d'ajouter la différence à la séquence de type MatchDelta en cours de détermination, est, de préférence, évaluée (étape 520). Typiquement, si le coût de codage de cette différence est inférieur à celui du codage du nombre NbSuiv en tant que nombre, c'est-à-dire en utilisant une séquence du type Nombre, il est préférable d'ajouter cette différence à la séquence. NbSuiv étant connu, il est possible de déterminer le nombre d'octets nécessaires pour le coder et, à partir de cette information, de déterminer la plus grande différence pouvant être codée sur un nombre inférieur d'octets. A titre d'illustration, si le nombre NbSuiv vaut 520.5, il peut être estimé que trois octets sont nécessaires pour le coder (deux octets pour la valeur 5205 et un octet pour le format, c'est-à-dire le nombre d'octets utilisés pour coder la valeur, la position de la virgule et le signe). Cela signifie que le codage sous forme de delta est avantageux s'il est possible de coder cette valeur sur deux octets au maximum. Si quatre bits d'en-tête sont utilisés pour coder ces différences (signe du nombre, signe de la différence et autres indications de format), cela signifie qu'il reste douze bits pour coder la valeur et donc que la différence doit être inférieur à 4096. Il s'agit ici simplement d'un exemple, d'autres solutions pouvant être utilisées pour coder les différences. Pour connaître la taille des données à écrire, plusieurs approches sont possibles. Une première solution consiste à utiliser des indications de format dans l'en-tête du delta codé : si les différences sont codées sur un ou deux octets, il suffit d'un bit pour indiquer si la valeur de la différence est codée sur un ou deux octets. Une autre solution consiste à rendre la longueur implicite en la définissant grâce au nombre NbPSuiv (quand les données sont décodées, le nombre NbPSuiv est connu, il est donc possible de calculer, à partir de ce nombre, la plus grande différence autorisée ce qui permet de savoir combien d'octets doivent être lus (dans ce cas, le nombre NbPSuiv est utilisé pour déterminer la valeur MaxDelta lors du codage). Un test est alors effectué pour déterminer si la valeur absolue de la différence delta est inférieure à MaxDelta (étape 525). Si la valeur absolue de la différence delta est inférieure à MaxDelta, la différence delta est ajoutée à la séquence MatchDelta (étape 530) et l'algorithme boucle à partir de l'étape d'obtention des nombres NbSuiv et NbPSuiv (étape 505) pour obtenir les nombres suivants à traiter. Si la valeur absolue de la différence delta est supérieure à MaxDelta, le traitement prend fin. La séquence de type Match Delta a été déterminée. Le système de codage décrit par référence aux figures 1 à 5 est ainsi 30 adapté à, - décomposer les données en symboles ; - sélectionner un premier ensemble de symboles à coder ; - trouver au moins un ensemble identique de symboles parmi les symboles codés, cet ensemble étant identique à un premier sous-ensemble du premier ensemble ; - trouver au moins un ensemble similaire de symboles parmi les symboles codés, cet ensemble correspondant à un second sous-ensemble du premier ensemble et pour lesquels au moins un symbole diffère ; et, - sélectionner un ensemble identique ou un ensemble similaire pour coder une partie du premier ensemble, la sélection étant basée sur un critère d'optimisation, typiquement le coût de codage ou l'efficacité de codage comme expliqué ci-dessus. La figure 6 illustre un exemple d'algorithme de décodage de données codées selon l'algorithme de codage binaire par similarités décrit précédemment. Une première étape a pour objet l'obtention des données à décoder (étape 600). Un test est ensuite effectué pour déterminer s'il reste des données à décoder (étape 605). S'il reste des données à décoder, l'octet suivant dans les données à décoder est lu (étape 610) et un test est effectué pour déterminer s'il s'agit du début d'une séquence (étape 615). S'il s'agit du début d'une séquence, la séquence est décodée (étape 620). Le décodage d'une séquence débute par le décodage d'un en-tête, lequel permet de déterminer le type de séquence à décoder. En particulier, grâce au type, il est possible de savoir si les données sont décodables directement ou si leur décodage requiert de se référer aux données préalablement décodées. Dans le cas d'une séquence de type Nombre, les données peuvent être décodées uniquement à partir des octets codés. En revanche, pour les autres types de séquence, une référence est faite aux données préalablement décodées. Il est donc nécessaire de lire préalablement les données à décoder puis de reconstruire la séquence ou liste de symboles à partir des données lues et des données préalablement décodées. Dans le cas d'une séquence de type Match, par exemple, un nombre permettant de déterminer le symbole de référence est décodé (par exemple son index dans la liste de symboles), ainsi qu'un autre nombre indiquant la longueur de la séquence de symboles similaires à partir du symbole de référence. Lorsque la séquence est décodée, les symboles sont ajoutés à la liste de symboles décodés (étape 630) pour disposer de la même liste de symboles que lors du codage. Lorsqu'un nombre est décodé, il peut être nécessaire d'ajouter deux symboles, un pour la partie entière et un pour la partie décimale. De même, si un nombre est négatif, il convient d'ajouter le signe � - � en tant que symbole distinct. Enfin, suivant les conventions de codage, il peut aussi être nécessaire d'ajouter un séparateur après chaque nombre. Si l'octet suivant déterminé à l'étape 610 n'est pas un début de séquence (étape 615), cela signifie que cet octet correspond à un caractère seul, par exemple une commande de path SVG. Cet octet est alors décodé de façon classique, la valeur de l'octet étant le code associé à un caractère (étape 625). Ce caractère est ensuite ajouté à la liste des symboles (étape 630). Après avoir ajouté les symboles à la liste des symboles (étape 630), l'algorithme détermine s'il reste des données à décoder (étape 605). L'algorithme se termine lorsqu'il n'y a plus de données à décoder, la liste des symboles représentant les données décodées. Le système de décodage décrit en référence à la figure 6 est ainsi adapté à, - décoder les données codées avec une référence à un ensemble de symboles ; et, - reconstituer, à partir des données décodées, la liste de symboles résultant du découpage des données en symboles lors du codage. Un dispositif adapté à mettre en oeuvre l'invention ou une partie de l'invention est illustré sur la figure 7. Le dispositif 700 est par exemple une station de travail, un micro-ordinateur ou un assistant personnel. Le dispositif 700 comporte ici un bus de communication 705 auquel 30 sont reliés : - une unité centrale de traitement ou microprocesseur 710 (CPU, sigle de Central Processing Unit en terminologie anglo-saxonne) ; - une mémoire morte 715 (ROM, acronyme de Read Only Memory en terminologie anglo-saxonne) pouvant comporter les programmes � Prog1 � et�Prog2 �; - une mémoire vive ou mémoire cache 720 (RAM, acronyme de Random Access Memory en terminologie anglo-saxonne) comportant des registres adaptés à enregistrer des variables et paramètres créés et modifiés au cours de l'exécution des programmes précités ; et, - une interface de communication 750 adaptée à transmettre et à recevoir des données. Optionnellement, le dispositif 700 peut également disposer : - d'un écran 725 permettant de visualiser des données et/ou de servir d'interface graphique avec l'utilisateur qui pourra interagir avec les programmes selon l'invention, à l'aide d'un clavier et d'une souris 730 ou d'un autre dispositif de pointage, un écran tactile ou une télécommande ; - d'un disque dur 735 pouvant comporter les programmes � Prog1 � et � Prog2 � précités et des données traitées ou à traiter selon l'invention ; et, - d'un lecteur de cartes mémoires 740 adapté à recevoir une carte mémoire 745 et à y lire ou y écrire des données traitées ou à traiter selon l'invention. Le bus de communication permet la communication et l'interopérabilité entre les différents éléments inclus dans le dispositif 700 ou reliés à lui. La représentation du bus n'est pas limitative et, notamment, l'unité centrale est susceptible de communiquer des instructions à tout élément du dispositif 700 directement ou par l'intermédiaire d'un autre élément du dispositif 700. Le code exécutable de chaque programme permettant au dispositif programmable de mettre en oeuvre les processus selon l'invention, peut être stocké, par exemple, dans le disque dur 735 ou en mémoire morte 715. Selon une variante, la carte mémoire 745 peut contenir des données ainsi que le code exécutable des programmes précités qui, une fois lu par le dispositif 700, est stocké dans le disque dur 735. Selon une autre variante, le code exécutable des programmes pourra être reçu, au moins partiellement, par l'intermédiaire de l'interface 750, pour être stocké de façon identique à celle décrite précédemment. De manière plus générale, le ou les programmes pourront être 5 chargés dans un des moyens de stockage du dispositif 700 avant d'être exécutés. L'unité centrale 710 va commander et diriger l'exécution des instructions ou portions de code logiciel du ou des programmes selon l'invention, instructions qui sont stockées dans le disque dur 735 ou dans la 10 mémoire morte 715 ou bien dans les autres éléments de stockage précités. Lors de la mise sous tension, le ou les programmes qui sont stockés dans une mémoire non volatile, par exemple le disque dur 735 ou la mémoire morte 715, sont transférés dans la mémoire vive 720 qui contient alors le code exécutable du ou des programmes selon l'invention, ainsi que des registres pour 15 mémoriser les variables et paramètres nécessaires à la mise en oeuvre de l'invention. Il convient de noter que l'appareil de communication comportant le dispositif selon l'invention peut également être un appareil programmé. Cet appareil contient alors le code du ou des programmes informatiques par 20 exemple figé dans un circuit intégré à application spécifique (ASIC). A titre d'illustration, il est présenté ici un exemple de codage de la chaîne SVG suivante, provenant d'un path SVG, selon l'algorithme décrit en référence aux figures 1 à 6, � MO 45.0 c46.5200-45.046.546.5210� 25 Comme indiqué précédemment, cette chaîne SVG comprend deux types de données, les symboles de données numériques et les autres. Un symbole de données numériques peut être un nombre, par exemple � 0 � ou � 45.0 �, ou une partie d'un nombre (distinction des parties entières et décimales), par exemple � 45 � et � .0 �. Les caractères n'appartenant pas à 30 un nombre, dont les signes, sont considérés comme constituant à eux seuls des symboles. Une première étape consiste à réordonner les données en rassemblant les commandes SVG au début puis les nombres après. Bien que cette étape ne soit pas requise pour mettre en oeuvre l'invention, elle permet d'obtenir de meilleurs résultats. Ce traitement permet d'obtenir la chaîne suivante, � McO 45.0 46.5 200 -45.0 46.5 46.5 210 � Il convient de remarquer que le nombre de paramètres pour chaque commande étant fixe, le fait de réordonner les données et les nombres de la sorte n'induit aucune perte d'information. De cette manière, des contraintes plus fortes sont imposées sur les données (d'abord des commandes, ensuite des nombres), ce qui permet de coder les données plus efficacement. Par exemple, il n'est pas nécessaire de conserver une plage de codes pour les commandes pour coder les nombres, car aucune commande n'est rencontrée au sein des nombres. La table 1 présentée en annexe illustre les symboles obtenus pour la chaîne traitée. Cette table vise uniquement à illustrer comment la chaîne à traiter est divisée en symboles et non à décrire une première étape dans laquelle tous les symboles seraient déterminés avant de procéder au codage des données (l'invention ne requiert pas d'obtenir tous les symboles avant de pouvoir commencer à coder les données). Les commandes sont tout d'abord codées. Pour cela, il est possible de coder le nombre de commandes, c'est-à-dire ici deux, puis de coder les commandes. Etant donné le nombre réduit de commandes définies par SVG, il est possible de coder chaque commande sur cinq bits. De manière plus avantageuse, il est possible de privilégier les commandes les plus fréquentes afin de leur attribuer un code plus court. Ici, si les commandes � M � et � c � sont associées à des codes de quatre bits, il est possible de coder ces deux commandes sur un seul octet. Le symbole suivant, c'est-à-dire le symbole ayant l'index 2, ici � 0 �, est ensuite obtenu. Etant donné qu'il s'agit du premier nombre, il n'est pas possible de rechercher des séquences similaires. Le symbole est donc codé en tant que séquence de type � Nombre � (séquence d'un seul symbole). 36 Le format de codage des nombres utilisé ici est du type 1 BCD WXYZ où, 1 est l'identifiant du format de codage pour une séquence de type Nombre ; B représente le signe du nombre codé ; C indique la nature du nombre codé (entier ou décimal) ; et, D WXYZ représente le format du nombre suivi d'une description du format c'est-à-dire le nombre d'octets utilisés et la position de la virgule, suivi du nombre codé si le nombre est décimal, ou du nombre codé si le nombre est un entier. Ainsi, le codage de � 0 � est � 1001 0000 � où B=0 (nombre positif), C=0 (nombre entier), D=1 (entier court) et WXYZ=0000 (valeur � 0 �). Le symbole suivant (ayant l'index 3) est constitué d'un seul caractère, un espace, utilisé comme séparateur. La présence d'un séparateur de ce type à la suite d'un nombre est quasi systématique, il n'est donc pas nécessaire de le coder (il suffit, lors de la phase de décodage, pour reconstituer la chaîne de caractères originale, d'ajouter un tel séparateur après chaque nombre û dans le pire des cas, un séparateur superflu est ajouté, mais cela ne change pas les informations contenues dans la chaîne au niveau SVG). Le symbole suivant (ayant l'index 4) est ici le nombre � 45 � qui est groupé avec le symbole suivant � .0 � (ayant l'index 5) afin d'obtenir le nombre � 45.0 �. Pour déterminer les symboles, il est avantageux de distinguer les parties entières et décimales afin d'avoir un niveau de granularité plus fin pour comparer les séquences cependant, pour coder un nombre, il est rarement intéressant de faire cette distinction. Pour coder le nombre � 45.0 �, une séquence de type Nombre ou une séquence similaire, de type Match ou Delta, peut être utilisée. Il est possible de chercher des séquences similaires à partir de tout nombre codé précédemment, toutefois il est généralement plus avantageux de se restreindre à des nombres proches, ces nombres ayant plus de chances de mener à des séquences similaires. Un critère simple de proximité peut être un préfixe commun et une longueur (nombre de caractères) commune. Ici, le seul nombre précédemment codé est � 0 � et il est estimé qu'il n'est pas proche de la valeur � 45.0 �. Par conséquent, aucune recherche de séquence similaire n'est effectuée. Le nombre est donc codé comme une séquence de type Nombre. Ainsi, le codage de � 45.0 � est � 1010 0001 0000 0001 1100 0010 � où B=0 (nombre positif), C=1 (nombre décimal), D=0 (décimal court), WX=00 (une décimale), YZ=01 (valeur sur 2 octets) suivi de la valeur 0000 0001 1100 0010 (valeur � 450 �). Le symbole suivant (ayant l'index 6) est un séparateur, il n'est donc pas nécessaire de le coder. Le symbole suivant (ayant l'index 7) est ici le nombre � 46 � qui est groupé avec le symbole suivant � .5 � (ayant l'index 8) afin d'obtenir le nombre � 46.5 �. Il existe un symbole proche déjà codé (� 45 �) qui forme le nombre � 45.0 � avec le symbole qui le suit. Il est donc possible de rechercher une séquence similaire. Les deux nombres étant différents, la recherche d'une séquence de type Match représentant une suite de symboles identiques est éliminée. En revanche, une séquence de type Delta représentant une différence entre deux nombres proches est possible. La différence vaut � 1.5 � et les deux nombres se suivent immédiatement, c'est-à-dire qu'il y a un décalage nul entre les deux nombres. Afin de déterminer s'il vaut mieux coder une séquence de type Delta ou une séquence de type Nombre, il est nécessaire de comparer le nombre de caractères représentés et le nombre d'octets requis. Dans les deux cas, cinq caractères sont représentés, c'est-à-dire les quatre du nombre plus le séparateur. Avec une séquence de type Nombre, trois octets sont nécessaires. Avec une séquence de type Delta, seulement deux octets sont nécessaires. C'est donc cette séquence qui est avantageusement choisie. Ce choix dépend bien évidemment des codages définis. Il s'agit ici uniquement d'un exemple, d'autres codages pour lesquels la séquence de type Nombre serait plus avantageuse que la séquence de type Delta pourraient être trouvés. La définition des codages ne relève pas de l'invention. En particulier, dans cet exemple, le codage des différences ne requiert pas de préciser le nombre de décimales car il est supposé que deux nombres proches ont le même nombre de décimales. Le format de codage utilisé ici pour représenter une séquence de type Delta est du type 001 D WXYZ où, 001 est l'identifiant du format de codage d'une séquence de type Delta ; D identifie le signe ; W identifie le signe de la différence ; et, XYZ représente le format, c'est-à-dire ici le décalage par rapport au nombre de référence, le nombre d'octets pour la différence (delta) et la valeur de la différence. Ainsi, le codage de � 46.5 � est � 0010 0000 0000 1110 � où D=0 (nombre positif), W=0 (différence positive), X=0 (valeur de la différence codée sur un octet), YZ=00 (décalage par rapport au symbole précédent), suivi de l'octet 0000 1110, représentant la valeur entière de la différence (15) moins un (un est la plus petite différence possible car si la différence vaut zéro il n'y a pas de séquence de type Delta mais une séquence de type Match). Le symbole suivant à coder (ayant l'index 10) est � 200 �. Il n'existe pas de nombre proche déjà codé. Ce symbole est donc codé selon le type 20 Nombre. Le codage de � 200 � est � 1000 0000 1100 1000 � où B=0 (nombre positif), C=0 (nombre entier), D=0 (entier long), WXZ=0000 (nombre d'octets à lire-1) suivi de la valeur 1100 1000 (valeur � 200 �). Les deux symboles suivants (ayant les index 11 et 12) ne sont pas 25 codés. Les symboles suivants (ayant les index 13 et 14) formant le nombre � 45.0 � sont donc lus. Il existe deux nombres proches déjà codés, � 45.0 � (index 4 et 5) et � 46.5 � (index 7 et 8). Pour le premier nombre, il y a égalité des nombres, une séquence de type Match peut donc être obtenue. Les symboles suivant les symboles traités, c'est-à-dire les symboles � �, � 46 �, 30 � .5 � et � � (ayant les index 15 à 18) sont donc analysés et comparés aux symboles suivant celui utilisé comme référence de la séquence. Ils sont ici identiques. Une séquence de type Match ayant une longueur 6 avec un décalage de 2 par rapport au nombre qui sert de référence (deux nombres entre les deux occurrences de � 45.0 �, à savoir � 46.5 � et � 200 �). Les autres nombres codés valent dans un cas � 200 � et dans l'autre � 46.5 �. La différence étant importante, une séquence de type MatchDelta (codage de différences à la suite d'une séquence de symboles identiques) n'est pas recherchée. L'autre nombre proche préalablement codé (� 46.5 �) est différent, une séquence de type Delta peut être utilisée. La différence vaut -1.5, avec un décalage de 1. Une telle différence peut être codée sur 2 octets. Il est alors nécessaire de comparer les différentes séquences entre elles, Nombre ; Delta ; et, Match. - trois octets sont nécessaires pour coder la séquence de type - deux octets sont nécessaires pour coder la séquence de type - deux octets sont nécessaires pour coder la séquence de type La séquence de type Match est celle qui représente le plus de caractères codés, c'est donc cette séquence qui est choisie. Le format de codage utilisé ici pour représenter une séquence de type Match est du type 01 CD WXYZ où, 01 est l'identifiant du format de codage d'une séquence de type Match ; C précise si un codage par différence suit le codage par identité ; 25 D identifie le signe ; W précise le format de la similarité ; et, XYZ représente le format, c'est-à-dire ici le nombre de symboles similaires et le décalage par rapport au symbole de référence. Ainsi, le codage de � -45.0 46.5 � est � 0101 1101 0000 0010 � où 30 C=0 (similarité simple, sans différence), D=1 (premier nombre négatif), W=1 (similarité compacte, longueur sur XYZ, décalage sur l'octet suivant), XYZ=101 (longueur de 6 symboles) suivi du décalage 0000 0011 (décalage de deux nombres). Le symbole suivant (ayant l'index 19) forme le nombre � 46.5 � avec le symbole qui le suit (ayant l'index 20). Il existe quatre nombres proches déjà codés. Sans détailler l'étude de chacun de ces nombres, il peut être constaté qu'il n'existe pas de séquence de type Match qui couvre plus de symboles que le nombre lui-même et le séparateur qui le suit. En revanche, il existe une séquence de type MatchDelta par rapport à la séquence � 46.5 200 �. En effet, il y a tout d'abord une séquence de symboles identiques (� 46.5 �) puis deux nombres proches � 200 � et � 210 �. Il est donc intéressant de coder une séquence de type MatchDelta, qui décrit d'abord une identité (� 46.5 �) puis des différences (ici une seule valant 10). Cette séquence peut être codée sur trois octets. Il s'agit de la séquence la plus efficace. Ainsi, le codage de � 46.5 210 � est � 0110 1010 0000 0011 1000 1001 � où C=1 (similarité simple suivie de différences), D=0 (premier nombre positif), W=1 (similarité compacte, longueur sur XYZ, décalage sur l'octet suivant), XYZ=010 (longueur de 3 symboles) suivi du décalage 0000 0011 (décalage de trois nombres) et enfin du delta, selon la forme ABCD WXYZ, où A indique si ce delta est le dernier delta, B désigne le signe du nombre, C le signe du delta, et D WXYZ la valeur du delta. Ici, il s'agit du dernier delta (A=1), le nombre est positif (B=0), de même que le delta (C=0) et la valeur du delta est de 10 (la valeur 9 est encodée étant donné que le plus petit delta vaut 1). Toutes les données ont été codées, le traitement prend fin. Dans cet exemple, un type particulier de séquence Match n'a pas été pris en compte : une séquence de type Match � proche � où la séquence similaire la plus proche est recherchée (pour une telle séquence la longueur n'est pas prise en compte, seule l'occurrence la plus proche du même nombre est recherchée). Ce type de séquence pourrait être utilisé entre les différentes occurrences des nombres � 45.0 � ou � 46.5 �. L'intérêt de ce type de séquence est de pouvoir coder de manière efficace tout nombre ayant récemment été codé (typiquement coder sur un octet un nombre parmi les quatre derniers codés). Le procédé selon l'invention peut également être appliqué à d'autres langages de description de graphiques en deux dimensions en XML, tels que Microsoft Silverlight (Silverlight est une marque) ou Adobe Mars, ou utilisant d'autres syntaxes, tels qu'Adobe Postscript (Postscript est une marque), Adobe PDF (PDF est une marque) ou Autodesk DXF (DXF est une marque). Il peut aussi être appliqué à des langages de description d'interfaces graphiques, comme XAML (sigle d'eXtensible Application Markup Language en terminologie anglo-saxonne), XUL (sigle d'XML-based User interface Language en terminologie anglo-saxonne), UIML (sigle de User Interface Markup Language en terminologie anglo-saxonne), Adobe Flex (Flex est une marque) et OpenLaszlo. Il peut en outre être appliqué à des langages permettant des descriptions multimédias, en particulier pour coder des listes de valeurs temporelles. Ces langages comprennent SMIL (sigle de Synchronized Multimedia Integration Language en terminologie anglo-saxonne). Enfin, il peut être appliqué à des langages de description de graphiques en trois dimensions, en particulier pour coder des listes de points en trois dimensions. Ces langages comprennent par exemple X3D (sigle d'Extensible 3D en terminologie anglo-saxonne). Naturellement, pour satisfaire des besoins spécifiques, une personne 20 compétente dans le domaine de l'invention pourra appliquer des modifications dans la description précédente. 5 REVENDICATIONS1. Procédé de codage binaire par similarités pour un document structuré comprenant au moins une pluralité de données à coder, ce procédé étant caractérisé en ce qu'il comprend les étapes suivantes, - décomposition (115,135,140) de ladite pluralité de données à coder en une suite de symboles, chaque donnée de ladite pluralité de données étant au moins partiellement représentée par un symbole de ladite suite de symboles ; - sélection (210) d'au moins une donnée dans ladite pluralité de données à coder ; - recherche (315) d'au moins une première séquence de symboles préalablement codés, ladite première séquence étant identique à une séquence de symboles à coder, appelée deuxième séquence, comprenant au moins un symbole représentant au moins une partie de ladite au moins une donnée sélectionnée, appelé symbole traité ; - recherche (315) d'au moins une troisième séquence de symboles préalablement codés, au moins un symbole de ladite troisième séquence étant distinct du symbole correspondant d'une séquence de symboles à coder, appelée quatrième séquence, comprenant au moins ledit au moins un symbole traité ; - comparaison (320) de l'efficacité de codage desdites deuxième et quatrième séquences, lesdites deuxième et quatrième séquences étant codées relativement auxdites première et troisième séquences, respectivement ; et, - en réponse à ladite comparaison, codage (325) de ladite deuxième séquence ou de ladite quatrième séquence. 2. Procédé selon la revendication 1 comprenant en outre une étape de comparaison (305) dudit au moins un symbole traité à une pluralité de symboles préalablement codés et une étape de sélection d'un symbolepréalablement codé, identique audit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite première séquence. 3. Procédé selon la revendication 1 comprenant en outre une étape de comparaison (305) dudit au moins un symbole traité à une pluralité de symboles préalablement codés et une étape de sélection d'un symbole préalablement codé, proche dudit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite troisième séquence. 4. Procédé selon la revendication 2 ou la revendication 3 comprenant en outre une étape de groupement des symboles préalablement codés, les symboles codés étant groupés de telle sorte que les symboles d'un même groupe sont proches les uns des autres. 5. Procédé selon la revendication précédente selon lequel ladite étape de groupement comprend une étape de groupement par préfixe ou une étape de groupement par préfixe et par longueur du préfixe. 6. Procédé selon l'une quelconque des revendications précédentes comprenant en outre une étape de sélection d'une première séquence parmi une pluralité de séquences répondant au critère de recherche de ladite au moins une première séquence, préalablement à ladite étape de comparaison (320) de l'efficacité de codage desdites deuxième et quatrième séquences. 7. Procédé selon l'une quelconque des revendications précédentes comprenant en outre une étape de sélection d'une troisième séquence parmi une pluralité de séquences répondant au critère de recherche de ladite au moins une troisième séquence, préalablement à ladite étape de comparaison (320) de l'efficacité de codage desdites deuxième et quatrième séquences. 8. Procédé selon la revendication 6 ou la revendication 7 selon lequel ladite étape de sélection d'une séquence parmi une pluralité de séquences, ou au moins l'une desdites étapes de sélection d'une séquence parmi une pluralité de séquences, comprend une étape de détermination de la distance entre la position du premier symbole de chacune des séquences de ladite pluralité de séquences et la position dudit symbole traité et une étape de comparaison de ladite distance avec un seuil prédéterminé. 9. Procédé selon l'une quelconque des revendications précédentes selon lequel au moins une donnée de ladite pluralité de données est un nombre décimal, la partie entière dudit nombre décimal étant représentée par un premier symbole et la partie décimale dudit nombre décimal étant représentée par un second symbole. 10. Procédé selon l'une quelconque des revendications précédentes selon lequel au moins une donnée de ladite pluralité de données est un nombre, le signe dudit nombre étant représenté par un premier symbole et la valeur absolue dudit nombre étant représentée par au moins un second symbole. 11. Procédé selon l'une quelconque des revendications précédentes comprenant en outre une étape préalable de réorganisation des données de ladite pluralité de données selon la nature desdites données. 12. Procédé selon l'une quelconque des revendications précédentes selon lequel ladite étape de comparaison de l'efficacité de codage desdites deuxième et quatrième séquences comprend une étape de comparaison du volume de données représentées par lesdites deuxième et quatrième séquences avant et après codage. 13. Procédé de décodage binaire pour un document structuré 20 comprenant au moins une pluralité de données codées, ce procédé étant caractérisé en ce qu'il comprend les étapes suivantes, - obtention de ladite pluralité de données codées, lesdites données étant codées selon l'une quelconque des revendications précédentes ; - sélection (610) d'au moins une donnée codée dans ladite pluralité 25 de données codées ; - détermination (615) du format de codage de ladite au moins une donnée sélectionnée parmi une pluralité de formats de codage prédéterminés, au moins un format de codage étant du type codage par références identiques et au moins un format de codage étant du type codage par références avec au 30 moins une différence ; et,- en réponse à ladite étape de détermination, décodage (620, 625) de ladite au moins une donnée sélectionnée selon une liste de symboles comprenant au moins une donnée préalablement décodée. 14. Procédé selon la revendication précédente comprenant en outre 5 une étape d'ajout (630) des données décodées durant ladite étape de décodage à ladite liste de symboles. 15. Programme d'ordinateur comprenant des instructions adaptées à la mise en oeuvre de chacune des étapes du procédé selon l'une quelconque des revendications précédentes lorsque ledit programme est exécuté sur un 10 ordinateur. 16. Moyen de stockage d'informations, amovible ou non, partiellement ou totalement lisible par un ordinateur ou un microprocesseur comportant des instructions de code d'un programme d'ordinateur pour l'exécution de chacune des étapes du procédé selon l'une quelconque des 15 revendications 1 à 14. 17. Dispositif de codage binaire par similarités pour un document structuré comprenant au moins une pluralité de données à coder, ce dispositif étant caractérisé en ce qu'il comprend les moyens suivants, - moyens pour décomposer ladite pluralité de données à coder en 20 une suite de symboles, chaque donnée de ladite pluralité de données étant au moins partiellement représentée par un symbole de ladite suite de symboles ; - moyens pour sélectionner au moins une donnée dans ladite pluralité de données à coder ; - moyens pour rechercher au moins une première séquence de 25 symboles préalablement codés, ladite première séquence étant identique à une séquence de symboles à coder, appelée deuxième séquence, comprenant au moins un symbole représentant au moins une partie de ladite au moins une donnée sélectionnée, appelé symbole traité ; - moyens pour rechercher au moins une troisième séquence de 30 symboles préalablement codés, au moins un symbole de ladite troisième séquence étant distinct du symbole correspondant d'une séquence desymboles à coder, appelée quatrième séquence, comprenant au moins ledit au moins un symbole traité ; - moyens pour comparer l'efficacité de codage desdites deuxième et quatrième séquences, lesdites deuxième et quatrième séquences étant codées relativement auxdites première et troisième séquences, respectivement ; et, - moyens pour coder ladite deuxième séquence ou ladite quatrième séquence en réponse à ladite comparaison. 18. Dispositif selon la revendication précédente comprenant en outre des moyens de comparaison dudit au moins un symbole traité à une pluralité de symboles préalablement codés et des moyens de sélection d'un symbole préalablement codé, identique audit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite première séquence. 19. Dispositif selon la revendication 17 comprenant en outre des moyens de comparaison dudit au moins un symbole traité à une pluralité de symboles préalablement codés et des moyens de sélection d'un symbole préalablement codé, proche dudit au moins un symbole traité, ledit symbole sélectionné appartenant à ladite troisième séquence. 20. Dispositif selon la revendication 18 ou la revendication 19 20 comprenant en outre des moyens de groupement des symboles préalablement codés. 21. Dispositif selon la revendication précédente selon lequel lesdits moyens de groupement sont adaptés à grouper des symboles préalablement codés par préfixe ou par préfixe et par longueur du préfixe. 25 22. Dispositif selon l'une quelconque des revendications 17 à 21 comprenant en outre des moyens de réorganisation des données de ladite pluralité de données selon la nature desdites données. 23. Dispositif selon l'une quelconque des revendications 17 à 22 selon lequel lesdits moyens de comparaison de l'efficacité de codage desdites 30 deuxième et quatrième séquences comprennent des moyens de comparaison du volume de données représentées par lesdites deuxième et quatrième séquences avant et après codage. 24. Dispositif selon l'une quelconque des revendications 17 à 23 comprenant en outre des moyens de sélection d'une séquence parmi une pluralité de séquences pour sélectionner ladite première et/ou ladite troisième séquences, lesdits moyens de sélection comprenant des moyens pour déterminer la distance entre la position du premier symbole de chacune des séquences de ladite pluralité de séquences et la position dudit symbole traité et des moyens pour comparer ladite distance avec un seuil prédéterminé. 25. Dispositif de décodage binaire pour un document structuré comprenant au moins une pluralité de données codées, ce dispositif étant caractérisé en ce qu'il comprend les moyens suivants, - moyens pour obtenir ladite pluralité de données codées, lesdites données étant codées conformément au dispositif selon l'une quelconque des revendications 17 à 24 ; - moyens pour sélectionner au moins une donnée codée dans ladite 15 pluralité de données codées ; - moyens pour déterminer le format de codage de ladite au moins une donnée sélectionnée parmi une pluralité de formats de codage prédéterminés, au moins un format de codage étant du type codage par références identiques et au moins un format de codage étant du type codage 20 par références avec au moins une différence ; - moyens pour décoder ladite au moins une donnée sélectionnée selon une liste de symboles comprenant au moins une donnée préalablement décodée ; et, - moyens pour ajouter à ladite liste de symboles les données 25 décodées par lesdits moyens de décodage.