Qu’est-ce réellement que le XML ?

Nous connaissons tous les avantages du XML . Tous les experts et vendeurs le confirment. Le format XML ouvre de nombreuses possibilités pour le contenu. Mais nous ne savons pas toujours exactement comment (et pourquoi). Convertir votre contenu en XML n’est pas suffisant en soi pour bénéficier de tout ou partie de ses avantages. Pour le comprendre, nous devons examiner ce que le XML représente vraiment.

Je vais supposer que vous connaissez les mécanismes de base du XML et savez identifier les éléments, attributs et balises qui les définissent. Je suppose donc que vous reconnaissez que l’échantillon ci-dessous, un extrait de document XHTML, contient un élément <p> et deux éléments <i> <> , et que ces éléments sont définis à l’aide des balises , c’est-à-dire les informations entre les symboles <> :

<p><i>Guerre et Paix</i> est un <i>très</i> gros livre.</p>

Ces balises sont des métadonnées. Quand on évoque les métadonnées, on pense souvent qu’il ne s’agit que d’une simple étiquette attachée à un contenu, généralement à l’aide d’un système de gestion de contenus, permettant de suivre le document et de le trouver plus facilement. C’est effectivement une des principales utilisations des métadonnées, mais les métadonnées offrent beaucoup plus que cela. Les métadonnées sont des données qui décrivent d’autres données. Il existe de nombreuses formes utiles de métadonnées, notamment les balises XML. (Pour plus d’informations à ce sujet, consultez la rubrique The Meaning of Metadata.)

La raison pour laquelle le langage XML est si utile, c’est qu’il nous permet d’assigner des métadonnées au contenu à n’importe quel niveau de granularité, et pas seulement à un document dans son ensemble, mais à une phrase ou à un mot unique. Dans l’exemple ci-dessus, la balise <i> nous indique que la chaîne « Guerre et Paix » devrait apparaître en italique. (Telle est la signification de <i> en langage XHTML. Une balise <i> pourrait signifier quelque chose de complètement différent dans un autre langage de balisage.)

Bien sûr, « afficher ceci en italique » n’est pas la forme de métadonnées la plus complexe qui soit. En outre, cela va à l’encontre de la règle souvent citée selon laquelle XML sépare le contenu de la mise en forme. En fait, cette règle est inexacte. Certains langages de balisage XML comme XHTML et XSL-FO  sont conçus spécifiquement pour appliquer une mise en forme à un contenu. Certains langages XML sont conçus pour séparer le contenu de la mise en forme. D’autres ne s’occupent absolument pas du contenu. Il serait préférable de préciser que le langage XML vous permet d’appliquer des métadonnées au contenu, et que les métadonnées que vous appliquez peuvent exprimer tout ce que vous voulez.

Ainsi, XHMTL n’applique aucune mise en forme au contenu et une application de traitement de XHTML (disons, un navigateur Web) afficherait ainsi le contenu de notre échantillon :

Guerre et Paix est un très gros livre.

Le résultat est satisfaisant, mais le format XML nous permet d’en faire beaucoup plus.

Séparation du texte de la mise en forme

Si nous voulons séparer le contenu de la mise en forme, nous devons ajouter des métadonnées pour créer cette séparation. XHTML nous permet de franchir une première étape vers cet objectif en utilisant la balise <em> (mise en valeur) plutôt que la balise <i> :

<p><em>Guerre et Paix</em> est un <em>très</em> gros livre.</p>

Plutôt que de préciser que « Guerre et Paix » et « très » s’affichent en italique, ce balisage indique simplement que ces éléments seront mis en valeur. L’application de traitement décide seule comment les mettre en valeur. Par exemple, cela peut prendre la forme :

Guerre et Paix est un très gros livre.

Toutefois, un problème se pose alors. L’application de traitement peut parfaitement afficher le contenu mis en valeur en texte rouge gras car le format gras et la couleur rouge correspondent effectivement à une mise en valeur. Mais il existe des conventions précisant comment présenter le titre d’un livre, et l’une d’entre elles stipule que le texte doit apparaître en italique.

Si nous allons séparer le contenu de la mise en forme, mieux vaut donc le faire correctement. Si nous utilisons uniquement <em> comme synonyme de <i>, alors nous ne séparons pas réellement le contenu de la mise en forme. Il vaut donc mieux conserver <i> car cette balise est en fait une meilleure façon d’exprimer ce que nous souhaitons.

Si nous voulons vraiment séparer le contenu de la mise en forme, mieux vaut trouver un moyen plus judicieux que simplement remplacer partout <i> par <em>. Si nous n’allons pas mettre en forme le texte directement, alors nous devons fournir à l’application de traitement suffisamment de métadonnées pour qu’elle puisse distinguer les éléments à mettre en forme différemment.

Pour fournir à cette application de traitement suffisamment d’informations pour mettre correctement en forme « Guerre et Paix », nous devons fournir des métadonnées indiquant que la chaîne « Guerre et Paix » est un titre :

<p><title>Guerre et Paix</title> est un <em>très</em> gros livre.</p>

Maintenant, nous avons fourni suffisamment d’informations pour qu’un processeur XML affiche la phrase appropriée :

Guerre et Paix est un très gros livre.

Cependant, en ajoutant la balise <title> à notre langage de balisage, nous nous sommes écartés de XHTML. Le langage XHTML ne prend pas en charge la balise <title> mais il l’utilise à l’intérieur de l’élément <head> pour capturer le titre du document actuel. Il ne prend pas en charge l’utilisation de la balise <title> à l’intérieur de l’élément <p> pour marquer les titres des livres. Alors, si nous n’utilisons plus XHTML, qu’utilisons-nous ? Nous utilisons maintenant un langage de balisage de notre propre invention. Il s’agit de YAMLX (Yet Another Markup Language eXample). Nous commençons à capturer les métadonnées spécifiques à notre entreprise. Cela signifie que nous devons commencer à assumer la conception de notre propre système de balises, et trouver un langage de balisage existant capable de fournir les métadonnées dont nous avons besoin ou en créer un nous-mêmes. Dans le cadre de cet article, peu importe si YAMLX est un langage accessible au public ou s’il s’agit d’un langage que vous créez vous-même. L’important, c’est que YAMLX capture les métadonnées nécessaires pour exécuter efficacement votre processus de contenu.

Bien entendu, YAMLX n’est pas XHTML, et les navigateurs Web ne pourront pas l’interpréter directement. Pour publier votre contenu, vous devrez le traiter d’une certaine manière afin que les navigateurs sachent comment l’afficher. Il existe deux façons de procéder. L’une consiste à créer une feuille de style CSS pour indiquer au navigateur comment afficher les éléments YAMLX, et l’autre à créer un script XSLT pour convertir YAMLX en HTML. Certains des éléments que nous allons ajouter ultérieurement à YAMLX nous rapprocheront de l’utilisation de XSLT, et c’est ce que nous allons examiner ici.

Heureusement, YAMLX ne diffère de XHTML qu’au niveau d’une balise (jusqu’à présent), et nous pouvons donc écrire un modèle XSLT pour convertir un élément <title> d’un élément <p> en une balise XHTML valide. Il suffit ensuite de copier le reste. Voici le modèle qui convertit l’élément <title> en un élément <i> :

<xsl:template match=”p/title”>
<i>
<xsl:apply-templates/>
</i>
</xsl:template>

Ne vous laissez pas impressionner par ce balisage. Il est très simple. Il indique au moteur de rendu de contenu : si vous détectez un élément <title> à l’intérieur d’un élément <p>, remplacez-le par un élément <i>. Peu importe si vous comprenez exactement le fonctionnement, mais vous pouvez constater que ce n’est pas sorcier.

 

Balisage sémantique

Bien, nous avons séparé le texte de la mise en forme et fait une distinction entre les titres et la mise en valeur afin d’appliquer une mise en forme différente, mais la seule chose que nous pouvons vraiment faire avec ce balisage, c’est de lui appliquer la mise en forme. La séparation du contenu de la mise en forme n’est pas exactement une révolution en matière de productivité. Surtout si vous vous contentez de regrouper à nouveau ces éléments. Pour obtenir tous les avantages réels de la séparation, nous devons en faire plus. Nous allons donc mettre à jour le langage YAMLX pour capturer certaines métadonnées plus utiles :

<p><title isbn=”1400079985″>Guerre et Paix</title> est un <em>très</em> gros livre.</p>

Ici, nous avons ajouté d’autres métadonnées à la balise <title> sous la forme d’un attribut isbn. Avec ces métadonnées supplémentaires, le balisage ne se contente pas d’identifier « Guerre et Paix » comme un titre. Il l’identifie comme le titre d’une œuvre spécifique .

Que pouvons-nous faire avec ces métadonnées supplémentaires ?  Un numéro ISBN  permet d’accéder à une grande quantité d’informations sur un livre publié. En disposant d’un numéro ISBN, nous pouvons rechercher toutes sortes d’autres informations. Par exemple, nous pouvons utiliser le numéro ISBN pour rechercher des détails de publication en utilisant un service Web comme ISBNdb.

La plupart des services Web renvoient des informations au format XML, ce qui est parfait pour nous, puisque notre contenu est en XML. Par exemple, un service Web ISBN peut renvoyer un document XML similaire à celui-ci (il ne s’agit pas d’un résultat obtenu avec ISBNdb, mais juste d’un exemple simplifié) :

<book>
<isbn>1400079985</isbn>
<title>Guerre et Paix</title>
<author>Léon Tolstoï</author>
<publisher>Classique</publisher>
<publication-year>2008</publication-year>
<page-count>1296</page-count>

</book>

Nous pourrions alors extraire des éléments de ce document XML et les ajouter à notre propre contenu pour obtenir le résultat suivant :

Guerre et Paix (Léon Tolstoï, Classique, 2008, 1296 pages) est un très gros livre.

Bien entendu, cette opération n’est pas manuelle. Nous utilisons un script. Pour vous prouver que cette opération n’a rien de compliqué, voici un extrait de code XSLT permettant d’obtenir ce résultat :

<xsl:template match=”p/title”>
<!– capturer le numéro isbn à rechercher –>
<xsl:variable name=”isbn” select=”@isbn”/>

<!– contacter le service Web pour obtenir des infos sur le livre à l’aide du numéro isbn –>
<xsl:variable name=”book-info” select=”document(concat(‘http://example.com/isbn/lookup?’, $isbn))”/>

<!– afficher le titre du livre –>
<i>
<xsl:apply-templates/>
</i>

<!– afficher des informations supplémentaires sur le livre –>
<xsl:text> (<xsl:text>
<xsl:value-of select=”$book-info/book/author”/>
<xsl:text>, <xsl:text>
<xsl:value-of select=”$book-info/book/publisher”/>
<xsl:text>, <xsl:text>
<xsl:value-of select=”$book-info/book/publication-year”/>
<xsl:text>, <xsl:text>
<xsl:value-of select=”$book-info/book/page-count”/>
<xsl:text>) <xsl:text>
</xsl:template>

Encore une fois, ce n’est pas sorcier, mais cette technique élémentaire nous ouvre toutes sortes de portes. Les informations de publication n’étaient pas au format XML original. Elles proviennent d’une autre source en utilisant des métadonnées capturées dans le fichier XML. La puissance du balisage sémantique pour fusionner des informations provenant de différentes sources est considérable. Voici quelques-unes des astuces dont nous pouvons profiter en utilisant les informations extraites à l’aide du numéro ISBN :

  • Extraire une photo de la couverture du livre.
  • Créer un lien vers un article consacré à Guerre et Paix sur votre site Web.
  • Créer un lien vers une librairie en ligne, où le lecteur pourra acheter le livre. Si vous apparteniez à un programme d’affiliation d’une librairie en ligne, vous pourriez gagner un peu d’argent chaque fois qu’un lecteur cliquerait sur votre lien et achèterait un livre. Désormais, les métadonnées des numéros ISBN transforment une référence occasionnelle en une source potentielle de revenus.

Des auteurs plus efficaces

Il est possible d’améliorer considérablement le processus en extrayant ce type de métadonnées de votre contenu XML. Si vous pouvez utiliser les métadonnées clés pour extraire des informations provenant de sources externes, les auteurs n’ont pas à rechercher eux-mêmes toutes ces informations lorsqu’ils écrivent. Ils n’ont pas à choisir les détails du livre qui apparaîtront dans le résultat final. Cette décision est prise en éditant la feuille de style XSLT, et vous pouvez modifier l’ensemble de votre contenu existant simplement en modifiant cette feuille de style.

Comme vous pouvez le voir, l’insertion d’un simple bloc de métadonnées dans notre XML permet d’économiser beaucoup de temps lors de la création et nous laisse toute latitude quant aux détails qui seront publiés. Cette efficacité et cette flexibilité peuvent se traduire par des économies de coûts substantielles et par une augmentation des revenus dans le cas d’un ensemble de contenus volumineux.

Amélioration des métadonnées

Bien que l’ajout d’un numéro ISBN dans YAMLX nous offre de nombreuses options, ce balisage présente quelques problèmes.

Le premier concerne l’exactitude des métadonnées. Un numéro ISBN n’identifie pas directement une œuvre littéraire. Il identifie une édition particulière d’un livre d’un éditeur particulier dans une reliure particulière et pour une année donnée. Cette distinction peut être importante. Il existe de nombreuses autres éditions de Guerre et Paix, traduites dans de nombreuses langues. Guerre et Paix est un très gros livre dans toutes ces éditions et toutes ces langues. Le paragraphe ne se réfère pas spécifiquement à l’édition Classique de 2008. Il considère Guerre et Paix comme un roman en général. Avec l’utilisation du numéro ISBN, les métadonnées sont plus précises que le texte qu’elles balisent. Cela pourrait poser des problèmes pour quelques-unes des méthodes d’interrogation de ce contenu.

Supposons que nous voulions dresser une liste de toutes les références à Guerre et Paix dans notre contenu. Cette opération peut être facilement réalisée à l’aide d’une expression XPath  semblable à ceci :

p[title="Guerre et Paix"].

Celle-ci permet d’afficher tous les éléments <p> avec un élément <title> contenant “Guerre et Paix”. Encore une fois, ne vous préoccupez pas de la syntaxe. L’unique raison pour laquelle je souhaite afficher ces informations, c’est pour montrer que tout cela n’est pas très compliqué.

Cette expression XPath présente cependant un problème. Elle affiche tous les paragraphes contenant le titre « Guerre et Paix ». Mais cela pourrait inclure des références au titre du film qui porte le même nom, à l’opéra de Prokofiev ou à un autre ouvrage intitulé « Guerre et Paix », et ce n’est pas le but recherché. Nous voulons seulement des informations sur le roman.

Pour affiner les résultats, nous devons rechercher d’autres métadonnées. Utilisons par exemple les métadonnées ISBN :

p[title/@isbn="1400079985"].

Cela permet d’afficher tous les éléments <p> avec un élément <title> contenant un attribut isbn dont la valeur est “1400079985″. Cette méthode va certainement éliminer tous les films, opéras et œuvres non romanesques, mais elle risque également d’exclure quelques références au roman. Le problème est qu’il existe plusieurs numéros ISBN pouvant faire référence au roman Guerre et Paix car de nombreuses éditions différentes ont été publiées. Il est évident qu’un auteur qui balise une référence à Guerre et Paix cherchera le même numéro ISBN. C’est pourquoi le fait que nos métadonnées soient plus spécifiques que le contenu qu’elles décrivent pose problème : nous risquons de rater quelques instances du contenu.

Le second problème est lié à la productivité de l’auteur. L’auteur qui a écrit le paragraphe ne connaît sûrement pas par cœur les numéros ISBN de toutes les éditions de Guerre et Paix. Si le balisage faisait référence à un numéro ISBN, l’auteur devra s’interrompre pour rechercher cette information. Éviter aux auteurs d’avoir à s’arrêter pour rechercher des données peut apporter d’importants gains de productivité. Cela peut aussi potentiellement élargir votre pool d’auteurs disponibles.

Ainsi, l’utilisation du numéro ISBN comme métadonnée est trop précise et complique la tâche des auteurs. Nous devons trouver un balisage offrant le niveau de précision approprié et que les auteurs peuvent facilement créer. Nous pouvons, par exemple, utiliser la formulation suivante :

<p><novel author=”Léon Tolstoï”>Guerre et Paix</novel> est un <em>très</em> gros livre.</p>

Ici, nous avons remplacé la balise <title> par la balise <novel> plus spécifique, et remplacé l’attribut isbn trop spécifique par l’attribut plus simple author (au cas où un autre auteur a également écrit un roman intitulé Guerre et Paix).

Ce balisage est évidemment plus facile à créer pour les auteurs. Il ne leur demande que des éléments qu’ils connaissent déjà, de sorte qu’ils n’auront pas à s’arrêter pendant la création pour rechercher ces informations.

Et si nous sélectionnions chaque paragraphe faisant référence au roman de Tolstoï ?  Nous pouvons également le faire avec plus de précision en utilisant une expression XPath de type :

p[novel[@author="Léon Tolstoï"] = “Guerre et Paix“]

Cela permet d’afficher tous les éléments <p> avec un élément <novel> contenant un attribut author avec la valeur « Léon Tolstoï » et dont le contenu est « Guerre et Paix ». C’est ce que nous cherchions et nos métadonnées semblent donc correctes.

Les métadonnées ISBN nous permettent de récupérer des informations de publication en utilisant le numéro ISBN pour interroger la base de données ISBN. Sans numéro ISBN, comment obtenir ces données ? Nous pouvons toujours extraire ces informations, mais en utilisant une requête différente. Voici le code d’origine de notre recherche :

<xsl:variable name=”book-info” select=”document(concat(‘http://example.com/isbn/lookup?’, $isbn))”/>

Nous devons le modifier afin de lancer la recherche sur les métadonnées dont nous disposons : catégorie (roman), titre et auteur :

<xsl:template match=”p/novel”>
<!– capturer les métadonnées à rechercher –>
<xsl:variable name=”title” select=”.”/>
<xsl:variable name=”author” select=”@author”/>

<!– contacter le service Web pour obtenir des informations sur le livre –>

<xsl:variable name=”book-info” select=”document(concat(‘http://example.com/isbn/lookup?category=novel&title=’, $title, ‘&author=’, $author))”/>

La seule différence dans les résultats que nous obtiendrons à partir de cette requête est le fait qu’il peut y avoir plusieurs livres avec ce numéro ISBN (ce sera sûrement le cas car il existe de nombreuses éditions de Guerre et Paix). Par conséquent, le code qui ajoute les informations sur le livre au contenu devra choisir l’une des alternatives à partir des éléments pertinents des données de publication (date de publication la plus récente, par exemple). Autre avantage : les informations de publication que nous affichons seront compatibles partout où nous ferons référence à Guerre et Paix dans notre contenu.

Devrions-nous toujours marquer « Guerre et Paix » en utilisant la balise <novel> et un attribut d’auteur ?  Pas nécessairement. Ce que nous constatons ici, c’est que lorsque nous évoquons « Guerre et Paix » dans notre contenu, nous pourrions effectivement faire référence à des choses différentes. Nous pourrions, comme dans le cas qui nous concerne, parler du roman en général. Mais dans une autre circonstance, nous pourrions nous référer à une édition publiée spécifique. Même si la chaîne reste « Guerre et Paix » dans les deux cas, ce texte désigne des éléments différents. Un des rôles les plus importants des métadonnées XML consiste à effectuer clairement ce genre de distinction afin que nous puissions traiter chaque cas de façon appropriée.

Ce dont nous avons réellement besoin dans YAMLX, ce sont deux balises différentes de telle sorte que nous puissions appliquer les bonnes métadonnées aux termes « Guerre et Paix » en fonction de ce qu’ils signifient dans chaque cas.  Pour faire référence au roman, nous pourrions écrire :

<p><novel author=”Léon Tolstoï”>Guerre et Paix</novel> est un <em>très</em> gros roman.</p>

Pour faire référence à une édition particulière du roman, nous pourrions étendre l’expression YAMLX afin d’inclure un élément édition comprenant un attribut isbn :

<p><edition isbn=”1400079985″>Guerre et Paix</title> est <em>toujours</em> en rupture de stock.</p>

Maintenant, notre application de traitement peut reconnaître que les mots signifient quelque chose de différent dans chaque cas et les traiter en conséquence.

 

Maîtriser le format des données pour maîtriser la fonctionnalité

Quelle est donc la balise à utiliser pour marquer la chaîne « Guerre et Paix » — <i>, <em>, <title>, <novel> ou <book> ? Impossible de donner une bonne réponse absolue. Tout dépend de ce que vous voulez faire avec vos données. Contenu signifie données. Le contenu se transforme en données dès que vous l’entrez dans un système informatique. Qu’il s’agisse d’un document Microsoft Word, d’un fichier Adobe FrameMaker ou d’un document XML, contenu signifie données. La différence réside dans le fait qu’avec le format XML, vous maîtrisez la structure avec vos propres données de contenu.

Maîtriser la structure des données de votre contenu est important car cela vous permet de contrôler la création et la publication de vos contenus. En utilisant un format binaire, comme Word ou FrameMaker, vous bénéficiez des fonctionnalités de Word ou de FrameMaker. À l’aide de quelques scripts, vous pourrez peut-être ajouter des fonctionnalités supplémentaires, à condition que le modèle de données Word ou FrameMaker les prenne en charge. Avec XML, vous choisissez le format de fichier et la fonctionnalité à mettre en œuvre pour traiter vos données. Vous pouvez définir le format de données qui répond le mieux aux besoins particuliers de votre entreprise.

Mais cela n’a pas beaucoup d’importance, sauf si vous faites quelque chose avec vos données que vous ne pourriez pas faire avec Word ou FrameMaker, par exemple l’extraction automatique de contenus supplémentaires à partir d’une base de données pour améliorer vos contenus et enregistrer le travail de vos auteurs.

Ici, le véritable atout de XML est sa capacité à intégrer vos contenus dans une base de données. Car XML vous permet d’appliquer des métadonnées à votre contenu, d’interroger et de gérer votre contenu, à n’importe quel niveau de granularité. Parallèlement, il vous permet d’intégrer des métadonnées à votre contenu afin de créer une requête de base de données qui extrait d’autres données (comme nous l’avons vu avec l’exemple ISBN).

Telle est la fonction de chaque langage de balisage XML : transformer du contenu en une base de données. Les différences entre les divers langages XML résident dans le degré de détail et la spécificité de la structure de cette base de données, ainsi que sa capacité à répondre à un ensemble particulier de besoins de l’entreprise. Cela a une conséquence très importante si vous faites l’acquisition d’un système de création ou si vous construisez votre propre système : le format des données est plus important que la fonctionnalité de l’application.

Lorsque vous achetez un outil standard comme Word ou FrameMaker, votre décision d’achat repose essentiellement sur la fonctionnalité de l’application. Vous vous préoccupez plus des capacités actuelles de l’outil que de ses possibilités futures. En règle générale, vous n’avez pas à vous soucier de la façon dont le format de fichier que l’application utilise prend en charge sa fonctionnalité. Vous achetez une fonctionnalité, pas une structure de données.

Mais avec le langage XML, ce n’est pas la fonctionnalité de base dont vous disposez qui devrait être une priorité, mais la fonctionnalité que la structure de données XML prend en charge. Même si vous utilisez un ou plusieurs outils avec des fonctionnalités existantes, vous n’êtes pas limité à cette fonctionnalité, et cela ne devrait pas être l’argument principal sur lequel reposera votre décision. Vous pouvez toujours ajouter une fonctionnalité dont vous avez besoin, si votre structure de données la prend en charge. Mais vous ne pouvez pas construire ni acheter des fonctionnalités que les données ne prennent pas en charge.

Tels sont les éléments à prendre en compte lorsque vous envisagez une solution XML :

  • XML transforme votre contenu en une base de données. Vous pouvez interroger cette base de données pour organiser et structurer votre contenu et combiner des contenus provenant de différentes sources.
  • La conception de cette base de données détermine ce que vous pouvez faire avec les données. Vous devez porter une attention particulière à la conception de votre balisage pour vous assurer qu’il vous permet de mettre en œuvre la fonctionnalité dont vous avez besoin pour rationaliser vos processus de développement de contenus.
  • Vous pouvez améliorer la productivité de l’auteur, et intégrer d’autres auteurs, en concevant un balisage qui demande des informations qu’ils connaissent déjà, puis utiliser ces informations pour importer des données connexes.
  • La principale décision que vous devez prendre n’est pas de savoir quelle fonctionnalité un outil particulier prend en charge par défaut, mais quelle fonctionnalité le format de votre contenu prendra en charge.

À propos de l’auteur

Mark Baker, Président d’Analecta Communications Inc., a plus de 20 ans d’expérience dans le domaine des communications techniques et plus de 15 ans dans la conception, la mise en œuvre et l’utilisation de systèmes de publication structurés. Vous pouvez consulter son blog sur le site everypageispageone.com.

Archives

Connect