Oubliez la validation DTD dans Adobe InDesign ?

Votre client, la DSI, vous même peut-être, a imposé l’usage d’une DTD dans votre flux XML. Règle stricte s’il en est, la DTD vise à imposer la nomenclature, l’architecture et les attributs que devra posséder votre fichier XML une fois sorti de votre document InDesign. En termes très imagés, une DTD est une table de loi inviolable à laquelle vous devrez vous conformez sous peine d’être rejeté par vos pairs.

Si le concept ne fait pas débat, tenter de respecter une DTD dans Adobe InDesign fait autant de sens que tenter de porter un petit 36 quand visiblement votre taille avoisine plutôt la dizaine au dessus. Vous voici avec un logiciel ouvrant la voie à la créativité et pourtant il vous faut évoluer dans un univers de contraintes qui vous demandera parfois d’aller à contre courant. Non vraiment ce n’est pas logique.

Oui mais comment je fais moi avec ma DTD ? Et bien pourquoi ne pas procrastiner joyeusement ici et effectuer ce travail de conformation au moment de votre export sans même vous soucier de la structure de votre XML ?

Ce billet concernera surtout ceux qui souffrent tous les jours de la nécessité de respecter une DTD dans Adobe InDesign. Nous compatissons. Pour les autres, gardez au moins à l’esprit la conclusion. En premier lieu, nous allons revenir sur le concept de la DTD. Ensuite, nous verrons son implémentation dans Adobe InDesign et pourquoi cette dernière est parfois contre-productive. Enfin, nous verrons quelle alternative nous proposons.

A) DTD en bref

DTD est un acronyme pour Document Type Definition. Une DTD est un fichier XML qui énumère la structure attendue pour un document XML donné. Valider un document XML avec une DTD vise à vérifier que ce dernier respecte bien la nomenclature des balises et la structure du document. Si le document XML testé contient des nœuds non conformes ou une structure indue, la validation échoue.

L’usage d’une DTD est particulièrement critique lorsque le fichier XML doit être injecté dans un système documentaire qui attend de recevoir des informations spécifiques. Il existe des DTDs bien connues dans le monde de l’édition comme la DTD « DOCBOOK ». Mais toute organisation peut écrire sa propre DTD en fonction de ses besoins.

<!ELEMENT ALIMENTS (ALIMENT+)>
<!ELEMENT ALIMENT (NOM, PERIODE, NUTRIMENTS)>
<!ELEMENT NOM (#PCDATA)>
<!ELEMENT PERIODE (#PCDATA)>
<!ELEMENT NUTRIMENTS (#PCDATA)>
<!ATTLIST ALIMENT TYPE (Fruit|Légume) #REQUIRED>

Dans cette DTD, on définit que le document XML doit contenir un nœud « ALIMENTS » racine. Ce dernier pourra contenir un ou plusieurs nœuds « ALIMENT ». Chaque nœud « ALIMENT » aura un nœud « NOM », « PERIODE » et « ALIMENTS », etc.

B) DTD et InDesign

Imaginons que notre structure XML dans InDesign doive respecter cette DTD. A partir d’un tableau simple contenant des informations sur des aliments, nous allons tenter de créer une structure XML valide.

00001_aliments

Après avoir appliqué les styles ad hoc à chaque colonne, nous convertissons le tableau en texte. Si nous laissions le tableau natif, l’application des balises aurait produit une structure XML selon une nomenclature propre aux tableaux InDesign. En convertissant le tableau en texte, nous nous facilitons la tâche.

00002_conversion

Chargeons notre DTD. Ainsi la nomenclature propre à la DTD va produire l’ensemble des balises XML. Ces dernières ne sont pas modifiables car nous évoluons désormais sous contrôle.

Locked tags with DTD

Il ne nous reste plus qu’à baliser nos contenus. Nous utilisons la commande « Faire correspondre les styles aux balises ». Ainsi tout contenu possédant un style spécifique verra le contenu associé marqué de la balise correspondante. Si l’on prend soin de nommer ses styles correctement, un simple clic sur « Faire correspondre avec le nom » fait tout le travail pour nous.

00005_styles_aux_balises

Après quelques modifications mineures, on obtient déjà une structure plutôt correcte. Mais est-elle valide ?

InDesign XML structure

Pour s’assurer de la validité de notre structure, cliquons maintenant sur le petit éclair. 

validationg InDesign Structure

Si des problèmes de validité sont présents, nous en sommes alertés.

DTD validation issue

A nous de procéder aux ajustements. On peut aussi cliquer sur la suggestion de correction si cette dernière nous convient.

Solution to DTD Validation

Il faut renouveler l’opération de validation aussi longtemps que des problèmes sont relevés.

DTD Validation OK

Enfin, quand tout est ok, InDesign affiche « Aucune erreur connue ». Votre structure XML est maintenant valide et vous pouvez exporter votre XML les yeux fermés sans redouter les foudres de votre partenaire externe.

Tout cela est bien joli mais à vrai dire bien contraignant. Bien des fois le respect d’une DTD et les modifications attendues représenteront au mieux une perte de temps conséquente, au pire un objectif utopique. Pourquoi ? Les nécessités de mise en page dans Adobe InDesign imposent souvent des structures XML qui supporteront bien mal de se contorsionner pour votre bonne vieille DTD.

Alors quoi ? On valide pas ?

Oui et non. Plutôt que de jouer au Yogi aventureux, nous allons simplement déporter notre exercice de conformation à la DTD grâce à l’utilisation de la technologie de transformation XSL.

C) Utiliser XSL en sortie

Il est en effet possible d’utiliser une transformation XSL au moment de l’export XML depuis InDesign. C’est une bonne nouvelle car il n’est plus besoin d’essayer de respecter à tout prix une structure type dans Adobe InDesign. On pourra tout à fait effectuer ce travail en toute automatisation et continuer à garder les coudées franches dans InDesign.

Revenons à notre guide d’aliments. La méthode précédente impliquait de modifier en profondeur notre tableau. Il a été démonté. Le contenu a été supprimé de la page. Il est toujours très dangereux de s’attaquer ainsi à son fichier.

00001_aliments

Nous allons ici utiliser une méthode qui va nous permettre de garder l’intégrité de notre tableau InDesign tout en produisant un fichier XML valide. Appliquons un balisage simple à notre tableau. Par commodité, nous avons également associé les styles aux balises Mais cette fois, nous n’allons pas plus loin.

InDesign Table XML tagging

A ce stade, la validation de la structure au regard de la DTD échouerait à coup sûr. Nous allons faire appel à la syntaxe XSLT suivante :

Using XSLT to make our InDesign Structure compliant to our DTD

Il ne nous reste plus qu’à exporter notre XML en prenant soin d’utiliser notre fichier XSL.

Export XML from InDesign with XSLT

Pour vérifier la validité de notre document XML généré, nous pouvons faire appel à un logiciel comme Oxygen XML. Si tout va bien, la validation est confirmée.

Validating XML syntax with DTD

 

XML is Valid regarding to the DTD

L’intérêt ici, c’est que je peux continuer à travailler avec des objets natifs comme notre tableau. Si j’ai besoin d’exporter à nouveau, notre XSL servira de convertisseur pro DTD.

D) Conclusion

Bien entendu, sous une accroche un brin polémique, cet article n’entend pas éradiquer la possibilité de valider sa structure XML directement dans Adobe InDesign. Reposer son travail sur XSLT implique de connaître la structure interne du document InDesign. Si vous travaillez avec plusieurs collaborateurs, il est très probable que chacun finisse par avoir sa propre cuisine et XSLT risque d’être d’aucuns secours.

Oui il y a des cas où la validation dans InDesign sera incontournable et il n’y a pas de mal à l’utiliser. Pour autant je maintiens que bien souvent les nécessités de mises en page dans Adobe InDesign sont en opposition avec une structure rigide. L’utilisation d’XSLT en sortie est pour moi un parfait compromis entre créativité et respect d’une structure attendue.

Valider avant, après. Je vous laisse juge d’en décider 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *