Michael Sperberg-McQueen pose sur XML-DEV une question qui semble aussi surprenante surréaliste : quelqu'un utilise t-il les facettes fondamentales de W3C XML Schema?
Eric van der Vlist, Dyomedea (vdv@dyomedea.com).
vendredi 10 octobre 2003
Le problème de base est simple et bien connu : le type « xs:duration » de W3C XML Schema qui suit le format « PnYnMnDTnHnMnS » permet de mélanger des durées exprimées en années, mois, jours, heures, minutes et secondes.
Le nombre de jours dans un mois (entre 28 et 31) ou dans une année (365 ou 366) étant variable, la relation d'ordre entre durées mélangeant ces unités n'est que partielle. Ainsi, les deux durées « P1M » (1 mois) et « P30D » (30 jours) ne peuvent pas être comparées puisque un mois est composé de 28 à 31 jours.
La solution lorsque les applications ont besoin d'utiliser des durées disposant d'une relation d'ordre totale est tout aussi connue : on définit des durées composées soit uniquement de mois et d'années soit uniquement de jours, heures, minutes et secondes.
Ces durées peuvent être définies par dérivation en utilisant la facette « pattern » (voir par exemple la section correspondante dans mon livre « RELAX NG »).
Deux valeurs appartenant à un de ces types, par exemple « P24M » (24 mois) et « P1Y12M » (1 année et 12 mois) peuvent être comparées sans problème puisque les unités utilisées ont des correspondances fixes dans chacun de ces deux sous-types.
Ce besoin de types dérivés du type « xs:duration » disposant de relations d'ordre totales a été formulée par le groupe de travail XQuery et le groupe de travail W3C XML Schema songe à les définir comme des types prédéfinis dans sa version 1.1.
Tout irait bien s'il n'était spécifié dans la recommandation W3C XML Schema que les types dérivés (prédéfinis ou non) héritent de toutes les propriétés de leur type de base.
Appliqué à notre problème, cela signifie que dans la mesure où le type de base « xs:duration » dispose d'une relation d'ordre qui n'est que partielle, les types dérivés doivent avoir la même propriété et ne peuvent pas être considérés comme ayant une relation d'ordre totale.
D'où la question de Michael Sperberg-McQueen qui demande si les applications respectent cette règle en souhaitant que ce ne soit pas le cas pour pouvoir tout simplement
"ignorer le problème"
.
Que le coresponsable d'un groupe de travail puisse publiquement souhaiter que personne n'ait eu l'idée de suivre à la lettre une de ses recommandations montre bien la limite du système de typage de W3C XML Schema.
Ce que l'on peut reprocher ici au groupe de travail W3C XML Schema, ce n'est bien entendu pas la complexité des unités de date héritée du calendrier Grégorien, mais plutôt d'avoir cherché à imposer des types de données universels devant convenir à tout le monde au lieu d'avoir proposé un mécanisme permettant à chacun de créer les types de données qui lui conviennent.
Pour en revenir au type « xs:duration », ce type ne convient ni au contrôleur de gestion qui souhaiterait des facteurs de conversions fixes entre jours, mois et années (un mois = 30 jours, 1 année = 360 jours) ni à l'astronome qui souhaiterait des taux de conversions variable entre années et secondes pour tenir compte d'ajustements plus fins entre ces durées.
Nous ne pouvons pas reprocher à W3C XML Schema de ne pas avoir défini tous ces types, mais il est difficile d'accepter que les applications en ayant besoin soient bloquées et ne puissent pas les définir de manière complète, avec leurs propriétés (ou facettes fondamentales pour reprendre l'expression de Michael Sperberg-McQueen).
Plutôt que d'ignorer le problème, peut-être serait-il souhaitable d'essayer de le résoudre enfin?
Il faut dire que le problème est de taille et que la partie correspondante au niveau du projet ISO/DSDL semble être, elle aussi, en panne!
Autres articles :
Copyright 2003, Eric van der Vlist.
|