Copyright © 2007-2023 Yves MARCOUX; dernière modification de cette page: 2023-02-20.
Yves MARCOUX – EBSI – Université de Montréal
Ces exemples sont en lien avec le texte Attributs et modélisation en XML.
Illustrent une structure simple de mémo.
Supposons qu’on désire ajouter au modèle précédent (memo.1.dtd) la possibilité d’indiquer pour chaque
paragraphe si l’information a été vérifiée ou non. On veut donc que
chaque paragraphe puisse être marqué d’une façon quelconque comme
vérif ou nonVérif.
En première hypothèse, essayons d’ajouter cette information sous la forme d’un
sous-élément de par. On peut par exemple définir deux
éléments vides (EMPTY), appelés vérif et
nonVérif, et en placer un des deux au tout début du
contenu de chaque élément par pour en indiquer le statut de
vérification. L’exemple memo.2.xml
illustre ce que cela donne dans un document.
Du côté de la DTD (memo.2.dtd),
cependant, cette approche n’est pas optimale. En effet, comme le modèle de
contenu originel de par est un modèle de contenu mixte, on ne peut
ajouter un sous-élément qu’en l’ajoutant à ce modèle de contenu mixte. Cet ajout
résulte alors en un modèle trop permissif, puisqu’il permet de mettre
plusieurs éléments vérif et nonVérif dans
le même paragraphe. Un document, même valide, peut donc renfermer de
l’information incohérente, par exemple un paragraphe portant à la fois les
mentions vérif et nonVérif. L’exemple memo.2.bis.xml illustre cette possibilité
d’incohérence.
Illustrent qu’on peut faire mieux que memo.2.dtd, en utilisant un attribut. Au lieu d’ajouter
des sous-éléments dans par, on définit un attribut
(niveauVérif) sur cet élément. La valeur de cet attribut est de
type énuméré (vérif | nonVérif) et indique si le paragraphe est
vérifié ou non. Comme un attribut ne peut pas être spécifié plus d’une fois dans
une même balise, un document valide ne peut plus indiquer qu’un paragraphe est à
la fois vérifié et non vérifié !
Montrent une variante de la solution memo.3.dtd qui utilise un nom et des valeurs d’attributs
différents (vérif="oui" ou vérif="non"). Notez que
cette solution est tout à fait équivalente à memo.3.dtd du point de vue de l’information véhiculée par les
documents.