Chapitre 2. La formation d'un document Docbook

Table des matières

Le document de base
Les informations relatives au document
Organisation hiérarchique du document
Le document book
Le document article
Quelques balises génériques
La balise de mise en valeur : emphasis
Les balises pour les liens hypertextes : ulink, link et xref
La balise des exemples : example
Les balises utiles pour l'informatique
La balise indiquant une commande : command
La balise de nom de fichier, d'extention ou de répertoire : filename
La balise de variable d'environement : envar
Les balises représentant une interaction avec un shell
La balise programlisting
Les énumérations
La balise itemizedlist
La balise procedure

Le document de base

Le document xml de base doit contenir au minimum les entêtes XML. Pour commencer, je vous conseille d'utiliser ces lignes (à adapter en fonction de la version utilisée, ici 4.1.2) :

<?xml version='1.0' encoding="ISO-8859-15" ?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

Cela indique au programme que c'est un document XML version 1.0, utilisant un codage de caractère ISO-8859-15 (europe de l'ouest avec le symbole de l'euro €) et la DTD précise que vous allez utiliser.

Il faut ensuite donner le type de document :

<book lang="fr">

Pour ceux qui connaisent un peu LateX, on retrouve les même styles de documents, à savoir, book et article pour les plus courants. On va également spécifier la langue utilisée. En effet, dans la génération de page HTML par exemple, on génère automatiquement les sommaires et il est plus agréable pour un document en francais (comme celui-ci) de voir écrit Chapitre plutôt que Chapter.

Et voila, en fermant cette balise (avec </book>), nous avons fait notre premier document Docbook. Celui-ci ne contient rien, mais il est valide et peut être traité par les outils XML.

Exemple 2.1. Un document Docbook très simple

Soit un document (book) très simple contenant un chapitre (chapter) et un paragraphe (para), défini dans le fichier test.dbk.xml :

<?xml version='1.0' encoding="ISO-8859-15" ?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<book lang="fr">
<chapter>
	<title>Mon premier chapitre</title>
	<para>
		Ceci est le premier paragraphe.
	</para>
</chapter>

</book>

Les informations relatives au document

Un document Docbook commence souvent par une description du document, de ses auteurs, ... tout ceci est regroupé dans une section <bookinfo> ... </bookinfo>.

Par exemple pour ce document, nous avons les informations suivantes :

Exemple 2.2. Une description simple d'un document Docbook

<bookinfo>
	<title>Mon premier document</title>
	<date>18 Jui 2004</date>
	<author>
		<firstname>Stéphane</firstname>
		<surname>Urbanovski</surname>
	</author>
</bookinfo>

ou encore :

Exemple 2.3. Une description plus complète d'un document Docbook

<bookinfo>
	<title>Utilisation simplifiée de Docbook </title>

	<revhistory>
		<revision>
			<revnumber>1.1</revnumber>
			<date>19 Oct 2001</date>
			<authorinitials>S.Urbanovski</authorinitials>
			<revremark>Corrections, mise en forme, et ajout du § sur dssl.</revremark>
		</revision>
		<revision>
			<revnumber>1.0</revnumber>
			<date>18 Nov 2000</date>
			<authorinitials>F.Marchewka</authorinitials>
			<revremark>Version originale de ce document</revremark>
		</revision>
	</revhistory>

	<authorgroup>
		<author>
			<firstname>Marchewka</firstname>
			<surname>Fabien</surname>
			<affiliation>
				<orgname>Mirabellug</orgname>
				<address>
					<email>furax(chez)linux-france.org</email>
				</address>
			</affiliation>
		</author>
	</authorgroup>

	<abstract>
		<title>A propos de ce document</title>
		<para>
			Description du document ...
		</para>
	</abstract>

</bookinfo>

Que doit-on mettre dans une section bookinfo ? Ce que vous voullez !

La documentation originale de Docbook en donne plusieurs examples et le "Guide de l'autheur" du TLDP aussi (voir [Docbook-LDP-AG]).

Organisation hiérarchique du document

Les 2 principaux documents Docbook sont book et article.

Le document book

Il est pricipalement composé de chapitres (chapter), de sections (sect1,sect2,sect3, etc ...) et de paragraphes (para).

Par exemple si l'on veut créer deux chapitres avec deux sous-sections dans le second chapitre, on obtiendra le document suivant :

Exemple 2.4. Structure d'un document de type book


<book lang="fr">
<chapter id="chapitre1">
	<title>chapitre 1</title>
	<para>Paragraphe 1 du chapitre 1</para>
	<para>Paragraphe 2 du chapitre 1</para>
</chapter>

<chapter id="chapitre2">
	<title>chapitre 2</title>
	<sect1>
		<title>Titre de la section</title>
		<para>Paragraphe 1 de la section 1 du chapitre 2</para>
		<para>Paragraphe 2 de la section 1 du chapitre 2</para>
	</sect1>
	<sect1>
		<title>Titre de la section</title>
		<sect2>
			<title>Titre de la sous-section</title>
			<para>Paragraphe 1 de la section 2 du chapitre 2</para>
		</sect2>
	</setc1>
</chapter>
</book>

Le document article

Le document article est un sous ensemble du document book. On ne trouvera donc pas d'élément chapter, par contre on retrouve sect1 et sect2 ainsi que para. Il suffit donc de se reporter au paragraphe précédent pour avoir plus d'informations. Je vous conseille tout de même d'utiliser book dès que le document fait plus de 2 ou 3 pages.

Quelques balises génériques

La balise de mise en valeur : emphasis

Cette balise permet de mettre du texte en valeur. Par exemple, dans ce cas, il à été mis en italique, mais il aurait pu être mis en gras, en script, .... tout cela dépend de la feuille de style.

Les balises pour les liens hypertextes : ulink, link et xref

Il existe principalement deux sortes de lien hypertexte : les liens internes au document ou les liens externes.

Pour un lien externe (vers une URL), on utilise la balise ulink. Cette balise ressemble comme deux gouttes d'eau à la balise a href="" du HTML. Par exemple, pour un lien vers la page d'acueil du Mirabellug on peut faire ainsi :

Exemple 2.5. Exemple d'utilisation de ulink

<ulink url="http://www.mirabellug.org/">le site du mirabellug</ulink>

Ce qui donnera le lien suivant :

le site du mirabellug.

Pour les liens internes, il faut définir un nom pour l'entité cible (un id) et ensuite faire le lien en faisant une réference à cet id. En pratique, si je veux faire un lien vers un exemple (ou n'importe quelle autre entité Docbook), je doit le définir de la manière suivante :

<example id="example-xref1">

Pour pouvoir ensuite faire un lien vers cet entité, il suffira de faire :

Exemple 2.6. Exemple d'utilisation de xref

<example id="example-xref1">
[...]
<para>
	Vous pouvez revoir l'<xref linkend="example-xref1" />
</para>

Ce qui donne ceci :

Vous pouvez revoir l'Exemple 2.6, « Exemple d'utilisation de xref »

On remarque que le texte du lien est géré par défaut par l'outil de conversion et dépend de la cible. Si la cible possède un attribut xreflabel, la valeur de cet attribut est utilisée comme texte du lien.

Exemple 2.7. Exemple d'utilisation de xref avec xreflabel

<example id="example-xref2" xreflabel="exemple d'utilisation de xreflabel">
[...]
<para>
	Vous pouvez revoir l'<xref linkend="example-xref2" />
</para>

Ce qui donne ceci :

Vous pouvez revoir l'exemple d'utilisation de xreflabel

Note

Il ne faut pas oublier le / final de la balise puisqu'elle est utilisée seule (sans balise fermante).

On peut enfin utiliser la balise link, qui est un peu une combinaison des deux précédantes.

Exemple 2.8. Exemple d'utilisation de link

<para>
	Vous pouvez revoir l'<link linkend="example-xref2">exemple numéro 2 </link>.
</para>

Ce qui donne ceci :

Vous pouvez revoir l'exemple d'utilisation de xref .

La balise des exemples : example

La balise example est utilisée pour donner des exemples, ceux-ci seront alors automatiquement numérotés. Une contrainte cependant : vous êtes obligé de définir un titre juste après avec la balise title et au moins un élément de contenu (comme un paragraphe). Le titre sera également utilisé pour générer la table des exemples en dessous de la table des matières.

Exemple 2.9. Exemple d'utilisation de la balise example

<example>
	<title>Un exemple</title>
	<para>Le texte de l'exemple</para>
</example>

Cela donnera donc :

Exemple 2.10. Un exemple

Le texte de l'exemple

Les balises utiles pour l'informatique

La balise indiquant une commande : command

Elle sert à pouvoir inclure une commande dans le code.

Par exemple : la commande ls permet de lister le contenu d'un répertoire.

La balise de nom de fichier, d'extention ou de répertoire : filename

Cette balise est utilisée pour représenter les noms de fichier ou de répertoires. La sortie donne quelque chose comme ca : /etc/passwd.

Pour préciser qu'il s'agit d'un répertoire, on peut utiliser filename class="directory".

La balise de variable d'environement : envar

Cette balise est utilisée pour représenter les variables d'environement comme par exemple SGML_CATALOG_FILES.

Les balises représentant une interaction avec un shell

La balise screen est utilisée pour représenter une interraction avec un shell, en dehors des interfaces graphiques. La balise prompt sert à afficher le prompt, la balise userinput les entrées de l'utilisateur et la balise computeroutput le résultat de la commande. Voici un exemple simple d'utilisation de ces balises :

Exemple 2.11. Utilisation de screen, prompt, userinput et computeroutput

<screen><prompt>[furax@localtux]$ </prompt><userinput> rpm -qa | grep sgml</userinput>
<computeroutput>sgml-common-0.2-4mdk
docbook-dtd41-sgml-1.0-3mdk
sgml-tools-1.0.9-19mdk
</computeroutput></screen>

Ce qui peut donner la sortie suivante :

[furax@localtux]$  rpm -qa | grep sgml
sgml-common-0.2-4mdk
docbook-dtd41-sgml-1.0-3mdk
sgml-tools-1.0.9-19mdk

Attention

Attention, contrairement à la plupart des balises Docbook, ces balises sont sensibles à la mise en page originale (indentation, retour à la ligne, etc ...) !

La balise programlisting

On utilise souvent aussi à l'intérieur la balise programlisting pour décrire du code source. Par exemple, dans ce document j'utilise très souvent cette balise.

Exemple 2.12. Exemple d'utilisation de la balise programlisting

Hello world en C

<programlisting>
int main(int argc, char *argv[])
{
	printf("hello world\n");
	exit(-1);
}
</programlisting>

Attention, si votre code contient des balises intérprétables pas le processeur XML, il faudra protégé votre code.

Vous pouvez échapé les < et > : en utilisant respectivement les entités &lt; et &gt;.

Une autre solution est d'utiliser la construction <![CDATA[ ... ]]> :

Exemple 2.13. Exemple d'utilisation de la balise programlisting avec CDATA

Un exemple de synthaxe utilisant des balises

<programlisting><![CDATA[
<code><xml><bidon>
]]</programlisting>

Ce qui sera rendu comme ceci :

<code><xml><bidon>

Les énumérations

La balise itemizedlist

Cette balise permet de faire une liste d'élements précedés par un petit cercle pour énumérer des éléments par exemple. Chaque élément doit être encadré par la balise listitem

Exemple 2.14. Exemple d'utilisation de itemizedlist

<itemizedlist>
	<listitem>
		<para>Premier élément de la liste</para>
	</listitem>
	<listitem>
		<para>Deuxième élément de la liste</para>
	</listitem>				
</itemizedlist>

Le résultat produit est le suivant :

  • Premier élément de la liste

  • Deuxième élément de la liste

La balise procedure

Cette balise ressemble un peu à la précédente et va permettre de décrire une liste d'évènements ordonnés. Attention, il semble qu'il ne faille pas être déjà à l'interieur d'une balise para pour l'utiliser. Chaque étape de cette procédure sera encadrée par la balise step.

Par exemple si l'on veut illustrer la compilation et l'installation de gcompte :

Exemple 2.15. Exemple d'utilisation de la balise procedure


<procedure>
	<step>
		<para>Décompresser l'archive :
<screen>
<prompt>[furax@localtux]$ </prompt><userinput> tar -zxvf gcompte-0.3.8.tar.gz</userinput>
</screen>
		</para>
	</step>
	<step>
		<para>Puis on lance <command>configure</command> et on compile le programme :
<screen>
<prompt>[furax@localtux]$ </prompt><userinput>cd gcompte-0.3.8</userinput>
<prompt>[furax@localtux]$ </prompt><userinput>./configure</userinput>
<prompt>[furax@localtux]$ </prompt><userinput>make</userinput>
</screen>
		</para>
	</step>
	<step>
		<para>Ensuite on installe le programme :
<screen>
<prompt>[furax@localtux]$ </prompt><userinput>su</userinput>
<computeroutput>Password: </computeroutput><userinput>secure_pass</userinput>
<prompt>[root@localtux]# </prompt><userinput>make install</userinput>
</screen>
		</para>
	</step>
</procedure>

Ce qui va donner le résultat suivant :

  1. Décompresser l'archive :

    [furax@localtux]$  tar -zxvf gcompte-0.3.8.tar.gz

  2. Puis on lance configure et on compile le programme :

    [furax@localtux]$ cd gcompte-0.3.8
    [furax@localtux]$ ./configure
    [furax@localtux]$ make

  3. Ensuite on installe le programme :

    [furax@localtux]$ su
    Password: secure_pass
    [root@localtux]# make install