Cours DocBook accelere

4.4. Utiliser des sections marquées pour manipuler du contenu conditionnel

Note

C'est une technologie avancée. Vous pouvez sauter cette étape si vous voulez vous en tenir à l'information de base.

Faites attention que les sections marquées ne sont pas prises en charge par XML. Passez cette section si vous utilisez XML.

Parfois vous avez besoin d'avoir différentes versions pour divers propos. Il existe plusieurs moyens pour faire cela en utilisant SGML, et un de ceux-ci est appelé sections marquées. Un simple exemple de contenu conditionnel peut être la description de clés utilisées dans un programme où elles apparaissent dans des tableaux dans le manuel imprimé mais sont en bleu à l'intérieur de parenthèses sur le site Web ou sur le CD. Plutôt que d'avoir deux versions séparées pour chaque édition du manuel, vous pouvez utiliser les sections marquées pour conserver les différences dans le même document.

Il existe différents types de sections marquées, mais les types qui permettent de faire du contrôle de contenu conditionnel sont les sections ignore/include. Ces marqueurs agissent comme les commutateurs on/off pour permettre au contenu d'être inclu ou ignoré dans les différentes situations.

Le marqueur pour une section marquée include ressemble à ça :


<![INCLUDE [ keys are boxed, such as <key>F1</key> ]]>

tandis qu'une section marquée ignore sera :


<![IGNORE [ keys are blue inside brackets, such as <key>F1</key> ]]>

INCLUDE et IGNORE sont des mots-clé qui indiquent au système SGML quoi inclure ou ignorer. Comme l'exemple le montre, les sections marquées peuvent contenir du texte et des balises tant que les balises dans les marqueurs sont équilibrées (si une balise démarre dans un marqueur, elle finit dans le même marqueur).

Dans cet exemple, nous laissons les marqueurs pour la version imprimable à INCLUDE et les marqueurs pour la version électronique à IGNORE quand nous imprimons une copie principale. Quand nous créons un livre électronique ou HTML pour un site Web, nous changeons les marqueurs pour la version imprimable en IGNORE et les marqueurs pour la version électronique à INCLUDE. Ceci fonctionne bien, à moins que vous ayez différentes sections vous aurez alors besoin de include et ignore ensemble - c'est gênant de changer chaque fois manuellement et vous pouvez aisément faire une erreur.

Ainsi au lieu de ça, vous pouvez définir des paramètres d'entités sous n'importe quel nom que vous voulez et ensuite changer les entités pour modifier les commutateurs include/ignore. Pour faire cela, vous ajoutez des paramètres de déclarations d'entités dans le sous-ensemble interne au début de votre document maître SGML. Par exemple :


<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.4//EN" [
...
<!ENTITY % hardcopy "INCLUDE">
<!ENTITY % softcopy "IGNORE">
...]>

Vous utilisez alors les noms pour chaque section marquée, comme suit :


<![%hardcopy; [ keys are boxed, such as <key>F1</key> ]]>
<![%softcopy; [ keys are blue inside brackets, such as <key>F1</key> ]]>

Pour imprimer une copie principale, vous laissez les déclarations d'entités comme indiqué plus haut. Le système SGML interprète chaque %hardcopy; il trouve INCLUDE et inclut les sections marquées. Le %softcopy; est interprèté comme IGNORE et les sections sont ignorées. Quand vous êtes prêt à éditer la version électronique, vous n'avez qu'à changer les déclarations d'entités au début de votre fichier, comme ceci :


<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.4//EN" [
...
<!ENTITY % hardcopy "IGNORE">
<!ENTITY % softcopy "INCLUDE">
...]>

Avec cette modification unique, les versions électroniques sont inclues et les versions imprimées ignorées.

Les sections marquées peuvent être simples, mais elles ne sont pas toujours le meilleur choix pour manipuler du texte conditionnel. Elles sont le meilleur choix pour gagner du temps et dans des situations très claires. Certains problèmes qui peuvent survenir sont :