· Tech watch

Faisons le point sur les langages de schéma XML

L’intérêt de l’utilisation de XML ne se démontre plus. Toutes les architectures d’intégration de Systèmes d’Information utilisent maintenant systématiquement ce langage. La définition d’un langage XML est alors essentielle pour communiquer et échanger des informations métier afin d’être correctement interprétées par une ou plusieurs machines tierces.

Le dictionnaire définit le terme « schéma » comme suit : « un schéma est une représentation graphique réduite à l’essentiel, et souvent symbolique, mais où toutes les informations se trouvent de façon précise ». En extrapolant cette définition aux schémas XML, ces langages doivent définir précisément comment un langage XML doit être représenté et traité.

Un schéma XML est un ensemble de définitions et de contraintes applicables aussi bien sur le contenu que sur la structure même d’un document XML. Nous pouvons dire qu’un schéma est une définition spécifique d’un langage XML.

Dans la pratique, le schéma XML sera utilisé comme support de modélisation ainsi que pour la validation d’un document XML.

Quand utiliser un schéma ?

L’utilisation d’un schéma XML n’est pas nécessaire lorsque l’on développe une application XML. En effet, il n’est pas nécessaire d’utiliser un schéma pour lire et comprendre du XML, même s’il est très fortement conseillé d’en concevoir pour n’importe quelle application XML.

Considérons deux types d’applications XML :
– Les applications d’échanges XML-RPC d’informations entre systèmes d’information.
– Les applications utilisant le XML comme définition interne pour des besoins de configuration ou l’expression de règles.

Le premier type d’applications nécessite obligatoirement la conception d’un ou plusieurs schémas. Ces schémas serviront à préciser aux partenaires la façon dont les applications devront communiquer entre elles ainsi qu’un moyen de contrôler l’intégrité des données échangées.

La validation d’un document XML doit vérifier 4 points :
– La structure XML c’est-à-dire l’enchaînement des noeuds, des éléments et des attributs
– L’intégrité du contenu XML (vérifié par la spécification des types de données)
– L’intégrité des liens entre nœuds d’un même document ou d’un autre document
– Les règles métier du langage comme la présence de certains contenus par rapport à d’autres

Dans le deuxième cas, il faut procéder à la création d’un schéma XML lors des phases de conception de l’application. Cette tâche n’est pas indispensable, mais permet de mieux cadrer les spécifications techniques.

Les Schémas

Un peu d’histoire pour commencer. A la fin des années 90, avec l’avènement de XML, il était nécessaire d’exprimer la structure du document XML. De tous les langages de schémas définis, il n’en reste plus que trois.

DTD

Le XML est dérivé du langage SGML qui est aussi un langage à balises. Pour valider un document SGML, le modèle DTD (Document Type Definition) était utilisé. Le langage DTD a donc été simplifié pour être adapté à XML.

Les DTD sont actuellement très bien supportées par de très nombreuses applications, mais la possibilité d’y définir finement un document XML est limitée. En effet, une DTD définit très peu de types de données pour la validation du contenu, et il est également impossible d’intégrer d’autres définitions existantes puisque le support des namespaces différenciant les langages n’est pas supporté. Enfin, dernier défaut, le langage n’est pas exprimé en XML, ce qui est en contradiction avec la forme même du langage défini.

W3C XML Schema

Le langage W3C XML Schema est le langage de référence des langages de schémas pour le W3C. Celui-ci, dont la normalisation date de mai 2001, est un savant compromis entre de nombreux langages de schémas proposés par tous les grands acteurs du web.

En vue de développer les échanges d’informations, des éditeurs comme Microsoft, IBM, Commerce One, etc., ont proposé des langages de schémas. Par besoin de normalisation, le W3C a pris le meilleur de chaque langage et a publié la recommandation XML Schema. Maintenant, ces acteurs utilisent cette normalisation dans toutes leurs solutions d’échanges XML.

|W3C XML Schema|W3C XML Schema|W3C|mai-01|
|DDML|Document Definition Markup Language – Xschema|XML-Dev list|janv-99|
|SOX|Schema Definition Object-Oriented XML|Veo Systems/Commerce One |sept-98|
|DCD|Document Content Description for XML|Microsoft / IBM|juil-98|
|XDR|XML-Data-Reduced|Microsoft / Université d’Edinbourg|juil-98|
|XML-Data|XML-Data|Microsoft, DataChannel, Arbortext, Inso Corporation, Université d’Edimbourg|janv-98|

A ce jour, XML Schéma est le langage le plus complet, mais aussi le plus complexe. L’utilisation d’un outil graphique[Par exemple [XMLSpy de la société Altova]] est très fortement recommandée pour la conception d’un schéma XML.

Il est à peu près possible de tout définir en XML Schéma, comme d’inclure d’autres définitions grâce au support des namespaces, de créer ses propres types de données en dérivant les types déjà existants, etc. Il est par contre impossible de définir des règles métiers, c’est-à-dire de valider la présence d’un certain type de contenu par rapport à un autre.

Voici un exemple de document XML Schema :

<pre><code> commentaire

RELAX NG

RELAX NG se révèle comme une alternative à XML Schema. C’est le standard proposé par OASIS[ [Organization for the Advancement of Structured Information Standards ]] comme définition de schémas. Créé par James Clark et Murata Makoto, ce langage se veut plus simple, plus clair et plus puissant. RELAX NG a pour origine le langage RELAX publié en 2000 par Murata Makoto comme standard ISO Japonais et TYREX publié en 2001 par James Clark.

|RNG|Relax New Generation|OASIS|mai-01|
|TREX|Tree Regular Expression for XML|James Clack|janv-01|
|Xduce|XML transduce|-|mars-00|
|RLX|Regular Language description for XML – RELAX|Murata Makoto|mars-00|

Plus permissif qu’XML Schema, il permet de définir à peu près tout, dont des combinaisons de structures XML interdites en XML Schema. La structure du langage est très proche d’une description d’instance de document XML. Le langage est exclusivement orienté structure, mais il est néanmoins possible d’utiliser les définitions des types de données XML Schema pour valider le contenu.

Il est à noter qu’il existe une forme compacte du langage dont la sémantique est plus proche de celle du prolog que du XML. Toutes les caractèristiques du langage sont reprises dans cette forme compacte. La philosophie de RELAX NG étant la simplicité, c’est ce que nous offre cette forme compacte sans l’aspect verbeux d’XML.

RELAX NG n’est pas une recommandation officielle, ce qui implique que très peu d’outils et de composants supportent pour l’instant ce langage.

Voici un exemple de document RELAX NG :

<pre><code> <a>commentaire</a>

Le meme avec la forme compacte :


personne <em>element titre {text</em> ?,
element nom <em>text</em>,
element prenom <em>text</em>,
element adresse <em>text</em>,
}

Quel Schéma utiliser ?

Pourquoi faire compliqué quand on peut faire simple ? Avec ces trois types de représentations, nous devrions trouver notre bonheur dans la façon de définir un langage XML !

DTD

Même si le langage DTD est le moins riche, il est toujours utilisé dans de très nombreux produits. RELAX NG est d’ailleurs lui-même défini par une DTD. Il est surtout utilisé pour la description de grammaire XML documentaires comme DocBook XML. Les modèles documentaires XML des outils de publication et de gestion de contenu utilisent des DTDs. Ces langages n’ont pas besoin de validation très fine et sont donc appelés à peu évoluer.

En résumé, nous pouvons donner ces conditions sur l’utilisation de DTD :
– Structure XML peu évolutive.
– Structure XML ne demandant qu’une validation structurelle.
– Pas de besoin d’intégration de structures XML externes.
– Adapté pour la définition de langages simples.

RELAX NG ou W3C XML Schema

L’utilisation d’un de ces deux langages sera préférée pour ces raisons :
– Validation du contenu
– Langage XML amené à évoluer
– Intégration de structures externes définies par des namespaces
– Définition de langages d’échanges XML-RPC

La médiatisation récente de RELAX NG fait couler beaucoup d’encre et fait souvent passer XML Schema comme le vilain langage qui a tous les défauts.

De nombreux articles mettent en avant la simplicité de représentation de RELAX NG par rapport à la complexité de XML Schema.

RELAX NG définit uniquement la structure XML (élément et attributs), avec la même granularité que XML Schema, voir de manière plus permissive, mais plus simplement et plus lisiblement. De ce point de vue, sans contrainte de validation de contenu, autant utiliser le plus simple.

Maintenant, si un langage XML a besoin d’exprimer des contraintes de contenu, un schéma RELAX NG devra intégrer les définitions des types de données XML Schema et dans ce cas le choix est beaucoup plus discutable.

Un autre argument mis en avant est la performance de validation de RELAX NG. A langage simple interpréteur simple, donc en théorie, temps de traitement beaucoup plus court. Avec les performances actuelles des machines virtuelles de tous les langages et la puissance des machines, cet argument ne pèse plus vraiment pour l’adoption de RELAX NG.

A titre d’exemple, un benchmark sur une plateforme e-commerce XML-RPC en Java, validant un flux XML avec un XML Schema à chaque requête, traite plus de 2 millions de requêtes par jours !

Actuellement, l’argument majeur en faveur d’XML Schema est bien entendu sa maturité. Presque tous les éditeurs d’EAI utilisent XML Schema comme définition d’échanges XML. De nombreux outils graphiques de conception existent et leur efficacité est prouvée par la qualité de génération du XML Schema. Leurs fonctionnalités supplémentaires, comme la génération de documentation, apportent un plus indéniable. Cette fonctionnalité est très pratique pour l’échange de vocabulaire XML entre partenaires.

La question est donc de déterminer si RELAX NG, si simple, va remplacer XML Schéma.

Cette perspective est peu probable, étant donné l’investissement actuel fait par les éditeurs dans XML Schema, particulièrement dans les domaines liés à l’intégration de Systèmes d’Informations.

|Propriété de validation|W3C XML Schema|RELAX NG|
|Editeur|W3C|OASIS et ISO|
|Status|Recommandation|Working Draft|
|Structure|oui|oui|
|Types de données|oui|non – utilisation des types de données XML Schema|
|Intégrité|oui en interne|non|
|{{Support|Tous les grands éditeurs|Très peu supporté|

Et les règles métier dans tout ça ?

Malheureusement, dans ce contexte, le langage parfait n’existe pas. Bien qu’ XML Schema soit le plus complet en terme de propriétés et de fonctionnalités, il est impossible d’y exprimer des règles métier.

Imaginons que nous ayons à valider un type de contenus en fonction d’un autre contenu présent dans une balise XML. Ni XML Schema, ni DTD, ni RELAX NG n’est capable de l’exprimer.

Schematron est alors le seul langage mature capable d’exprimer ce type de contrainte. Basé sur XSLT et Xpath, il exprime des règles métier en complément d’un langage de schéma (RELAX NG ou XML Schema).

Malheureusement, l’intégration de Schematron avec XML Schema ou RELAX NG est loin d’être évidente. Du fait qu’il y a très peu de parseurs, la question des performances de la validation à plus de sens.

Néanmoins, le projet DSDL (Document Schema Definition Languages), dont la plupart des membres sont des acteurs d’OASIS (James clark, Murato Makoto …), tente de répondre à cette problématique. Créé en marge de la conférence XML 2002, ce projet propose une série de spécifications sur RELAX NG ainsi qu’un framework d’interopérabilité pouvant supporter tous les langages de schémas.
Ce projet permettrait de valider de façon plus précise des morceaux de documents XML en affectant un nombre de schémas non limité sur un document XML. Schematron fait aussi partie de cet ensemble pour la validation de contenu.

Conclusion

En sortant de la nécessité de la validation applicative du XML par un schéma, il va sans dire que par sa simplicité, RELAX NG serait le langage le plus approprié. Si les outils graphiques de schémas n’existaient pas, RELAX NG serait incontestablement le langage de conception XML idéal.

Pour une application ayant besoin de validation, W3C XML Schema est le langage le plus mature et surtout le mieux supporté par de nombreuses briques applicatives et outils.

On pourrait voir RELAX NG comme une divergence d’idée voulant qu’un schéma ne doit valider que la structure XML et avoir la capacité d’intégrer un langage différent pour la validation des données métiers. Le projet DSDL, dont fait partie RELAX NG, doit répondre à cette problématique en fournissant des briques applicatives dans cette idée.

En bref, ce qui compte le plus pour l’utilisateur ce sont les retours d’expériences. XML Schema bénéficie de ces retours, et les intégrateurs connaissent bien les pièges et savent les éviter pour assurer le succès d’un projet XML. RELAX NG n’est encore qu’un prototype qui devra fournir des briques applicatives stables et performantes répondant à des besoins que ne couvre pas XML Schema seul.

2 commentaires

  1. J’ai trouvé cet article très intérressant. Surtout la comparaison entre Relax NG et Xml Schéma.

  2. Bravo, cet article est très intéressant, et l’introduction au ‘Relax NG’ donne vraiment envie d’en savoir plus.

Les commentaires sont désormais fermés.