Comme vous avez pu le voir dans l'analyse, les planètes ont aussi des données précises : nom, diamètre, masse, que nous qualifierons de méta-données. Ce type d'information n'est pas bien adapté à une structure type "bloc de contenu" ou "ensemble de paragraphes" car trop peu contrainte. Nous n'utiliserons donc pas les compositionPrim, mais un nouveau type de primitive de contenu : les dataformPrim.
Permet de créer des modèles de champs de données structurées. Se rapproche de la représentation d’un formulaire.
La primitive dataform est très importante pour une modélisation fine des documents : contrainte de champs courts, ou de typage précis (nombre, date) ; ou encore pour ajouter des paramètres de publications (pour les modélisateurs expérimentés uniquement).
Vous avez déjà fait usage de méta-données : le titre est une meta donnée avec une seule information.
Dans astrobj.model, vous allez supprimer la référence à sTitle.model
Supprimer la référence ≠ Supprimer l’item
à la place, créez un nouvel item : dans l'écran de création des items : Primitives -> Primitives de métadonnées -> dataFormPrim. de nom astrobjMeta.model ou astrobjM.model
Les conventions de nommages que l’on se donne tendent vers l’ajout simplement du suffixe M (exemple : rootM.model) qui suffit à nous indiquer rapidement que l’item est une méta donnée d’un certain modèle root.model.
Renseignez les champs namespace, prefixe et code
créez le premier field (champ de données) de la dataform : le nom de l'astre.
Pour déterminer le caractère obligatoire ou facultatif d'un champ, il faut spécifier une valeur à l'attribut occurences.
Il n'y a pas d'attribut required ou optional mais plutôt occurrence.
Ajoutez un champ Photo de type refItem autorisant l’insertion d’une image de type jpeg
Les formats d’images sont disponibles dans l’espace binaries
Si vous voulez créer un champ qui pointe vers un autre item, comme par exemple pour associer une image à vos méta-données de l'astre, vous allez définir un 2ème champ "photo" avec un type refItem. Comme pour les parts des compositions, vous y placez des allowedModel.

Mettez les modèles ainsi renseignés dans le wspdef dans le publicClasses pour que l'auteur puisse les créer.

Nous souhaitons maintenant demander à l'auteur le type de planète, ce type va toujours appartenir à un ensemble fini de possibilités : "étoile", "tellurique" ou "chtonienne". Créez un champ de type enum
Un champ enum contient des couples key / name, le premier étant l'identifiant utilisé à l'intérieur du fichier XML de stockage produit par Scenari, le deuxième étant le nom tel qu'affiché dans l'interface auteur (il est aussi possible de le réutiliser en publication).
Pour les satellites qui contiennent 2 données : le nom et la distance, l'approche la plus intuitive serait de créer une autre dataform et au lieu de déclarer un nouveau field, de faire un subData. Cette approche est tout à fait valable, mais comme nos données sont relativement simples, nous pouvons plutôt faire un group "satellite" et ajouter à l'intérieur 2 field "nom" et "distance".
Recopiez les éléments suivants dans le fichier astrobjMeta.model:

Nous avons vu que les dataforms sont une liste de champs. Lorsque le contexte s'y prête, vous devez choisir un des champs de la dataform qui sera utilisé en tant que titre. Dans notre exemple, c'est le champ ayant pour code name (le nom de l'astre) qui sera utilisé comme titre.
Dans le fichier astrobjMeta.model, allez au niveau de la balise storage puis double-cliquez sur la balise fullTitleBuilder et taper name dans refCode.

Jusqu'à présent nous avons uniquement parlé de "titres simples". Dans certains cas, nous pourrions être amené à demander à l'auteur 2 types de titres, un fullTitle et un shortTitle, pour pouvoir soit être exhaustif lorsque l'on dispose d'une ligne complète pour publier le titre, soit de faire un petit lien de menu ou synthétiser encore plus lorsque l'on doit faire tenir ce titre en quelques caractères. Pour utiliser ce genre de "double titre", insérer dans le fichier part.model soit le fichier title.model des modelets à la place de sTitle, soit une dataform dans laquelle vous allez définir les 2 mécanismes fullTitleBuilder et shortTitleBuilder.
Il existe au moins 3 méthodes pour intégrer des dataforms :
La construction du titre est une partie très importante de la modélisation. Une dataform pouvant contenir tout un tas de champs, il est absolument nécessaire d’indiquer explicitement le ou lesquels de ces champs peuvent constituer le titre.
Ce n’est pas parce qu’on nomme un champ title ou name que le titre sera automatiquement l’un de ces champs.
