DocbookSample
Soit le fichier docbookSample.xml
valide par rapport au schéma Docbook 5.0.
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<book
xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:m="http://www.w3.org/1998/Math/MathML"
version="5.0">
<info>
<title>Book Title</title>
<author>
<orgname>Organization Name</orgname>
<address>
<city>City</city>
<street>Street</street>
<postcode>000000</postcode>
<country>Country</country>
</address>
<email>user@example.com</email>
</author>
</info>
<part>
<title>First Part</title>
<subtitle>Subtitle of First Part</subtitle>
<chapter>
<title>Chapter Title</title>
<subtitle>Subtitle of Chapter</subtitle>
<sect1>
<title>Section1 Title</title>
<subtitle>Subtitle of Section 1</subtitle>
<para>Text</para>
</sect1>
</chapter>
</part>
</book>
Question
Pourquoi peut-on dire que le schéma Docbook 5.0 représente un format ou un langage ? Caractérisez-le, justifiez.
Solution
XML est un méta-langage, un schéma XML permet de définir un langage ou format en fixant une liste des balises possibles ainsi que leurs agencements possibles.
Voir aussi : XML : un méta-langage
Ce langage est un langage orienté document structuré standard (standardisé par Oasis).
Voir aussi : Langages XML orientés documents ; Langages standard et langages locaux
Question
Expliquez ce que sont les 4 attributs de l'élément book
commençant par xmlns
. Montrez qu'ils ne sont pas utiles dans le fichier docbookSample.xml
. Inventez un exemple dans lequel deux d'entre eux seraient utiles.
Solution
Les 4 attributs de l'éléments book
sont des namespaces :
le premier est le namespace par défaut (il qualifie les éléments sans préfixe) associé au langage principal Docbook (Oasis)
les trois suivants sont des langages (du W3C) utilisés dans le langage Docbook : XLink pour la gestion des liens, SVG pour les dessins vectoriels et MathML pour les formules de mathématiques.
Ils ne sont pas utiles ici car seul le namespace par défaut est utilisé, en particulier il n'y a aucun risque de conflit de noms dans les balises.
Voir aussi : Namespace
Soit l'exemple ci-après intégrant un graphique dans une section.
<sect1>
<title>Section1 Title</title>
<subtitle>Subtitle of Section 1</subtitle>
<svg:svg>
<svg:circle cx="100" cy="200" r="75"/>
</svg:svg>
</sect1>
Question
Concevez un schéma S1 permettant de valider des fichiers du type de docbookSample.xml
, en faisant des hypothèses adéquates pour les cardinalités. Expliquez pourquoi S1 est un sous-schéma de Docbook 5.0.
Solution
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
ns="http://docbook.org/ns/docbook">
<start>
<element name="book">
<attribute name="version"><text/></attribute>
<optional>
<element name="info">
<element name="title"><text/></element>
<optional>
<element name="author">
<element name="orgname"><text/></element>
<element name="address">
<element name="city"><text/></element>
<element name="street"><text/></element>
<element name="postcode"><text/></element>
<element name="country"><text/></element>
</element>
<element name="email"><text/></element>
</element>
</optional>
</element>
</optional>
<oneOrMore>
<element name="part">
<ref name="Title"/>
<oneOrMore>
<element name="chapter">
<ref name="Title"/>
<zeroOrMore>
<element name="sect1">
<ref name="Title"/>
<zeroOrMore>
<element name="para"><text/></element>
</zeroOrMore>
</element>
</zeroOrMore>
</element>
</oneOrMore>
</element>
</oneOrMore>
</element>
</start>
<define name="Title">
<element name="title"><text/></element>
<optional>
<element name="subtitle"><text/></element>
</optional>
</define>
</grammar>
S1 est un sous-schéma de Docbook car tout fichier valide par rapport à S1 est aussi valide par rapport à Docbook 5.0.
Question
Proposer une représentation UML de S1.
Question
Proposez une feuille de transformation XSLT permettant de publier une instance de S1 en HTML. Intégrez une table des matières. Ajoutez une liste avec le titre de la section précédente et le titre de la section suivante à la fin de chaque section.
Réutilisation par transclusion
L'on souhaite à présent pouvoir réutiliser des fragments sect1
entre plusieurs documents, sans les recopier.
Question
Proposez un exemple de fichiers XML tels que docbookSample2.xml
utilise sect1_001.xml
par transclusion (inclusion par référence). Expliquez en quoi cela permet la réutilisation sans recopie. Présentez un avantage et un inconvénient de cette technique.
Question
Proposez deux schémas S2main et S2sect1 permettant de valider les fichiers précédents.
Question
Proposez une modification de votre XSLT permettant de gérer la transclusion au moment de la transformation en HTML.
Question
Proposez un programme XSLT permettant de créer un fichier XML valide par rapport à S1, à partir d'un fichier valide par rapport à S2main et des fichiers valides par rapport à S2sect référencés.