#1 Le 16/10/2011, à 07:47
- Hibou57
[DocType] DocBook, XMLLint et catalogues XML
Hello les gens d'ici,
Je ne sais pas si Bureautique est le meilleur endroit pour poster cette question, mais verra bien.
Je constate une bizarrerie avec les DTD DocBook installées.
La DTD suivante est installée:
/usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd
Pourtant elle n’apparait pas dans les catalogues XML.
Et si je tente de faire référence à la dernière version de la DTD d'un document, via
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML//EN" "-">
Alors la validation d’un document DocBook 5 échoue, et je crois deviner que cette référence à la dernière version, fait référence à la version 4.5, et non pas à la version 5, qui est pourtant la plus récente des versions installées.
Question : comment se fait-il qu’un paquet ait installé la DTD DocBook 5, et qu’elle n’apparaisse pas dans les catalogues ?
Question en marge : qu’elle est le répertoire le plus recommandé ou le plus standard, pour y installer des catalogues dans le répertoire d’un utilisateur ? Dans ~/.local/catalog ?
Dernière modification par Hibou57 (Le 01/06/2012, à 00:18)
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne
#2 Le 16/10/2011, à 10:03
- Hibou57
Re : [DocType] DocBook, XMLLint et catalogues XML
Je l'ai finalement fait avec un catalog dans mon dossier personnel. Comme je n'ai pas trouvé ce qu'il faut prendre comme emplacement standard, j'ai essayé de deviner.
Voici, en trois étapes.
1) ---------
Éditez le fichier ~/.profile pour y ajouter ceci :
# set XML_CATALOG_FILES so it includes user's private xml/catalog if it exists
if [ -f "$HOME/.local/share/xml/catalog" ] ; then
if [ -z "$XML_CATALOG_FILES" ] ; then
XML_CATALOG_FILES="$HOME/.local/share/xml/catalog"
export XML_CATALOG_FILES
else
XML_CATALOG_FILES="$XML_CATALOG_FILES $HOME/.local/share/xml/catalog"
fi
fi
Attention à bien le mettre dans ~./profile, et non pas dans ~./bashrc ou même ~./szhrc ! Les résultats ne sont pas les mêmes. Il faut que la variable soit positionnée dans tous les contextes d’exécution, et pas seulement quand vous ouvrez une console.
Une chose qui me pose une colle, et que si j’ai bien compris, la variable d’environnement XML_CATALOG_FILES, utilise l'espace comme séparateur, eu lieu du classique « : ». Alors ça doit poser un problème si un chemin contient des espaces, ou alors il ne faut placer des catalogues que dans des chemins qui ne contiennent pas d'espace.
2) ---------
Ensuite, créez un dossier xml dans ~./local/share. Créer un fichier catalog dans ~./local/share/xml. Éditez le fichier ~./local/share/xml/catalog pour y mettre ceci :
<?xml version="1.0"?>
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD XML Catalogs V1.0//EN" "file:///usr/share/xml/schema/xml-core/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<public
publicId="-//OASIS//DTD DocBook XML//EN"
uri="/usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd"/>
<public
publicId="-//OASIS//DTD DocBook XML 5//EN"
uri="/usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd"/>
</catalog>
Déconnectez‑vous de votre session, puis reconnecter vous, de manière à ce que le fichier ~./profile prenne effet.
3) ---------
Testez que ça fonctionne en créant un fichier Sample.docbook sur votre bureau. Dans ce fichier, ajoutez par exemple
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5//EN" "-">
<book xml:id="simple_book" xmlns="http://docbook.org/ns/docbook" version="5.0">
<title>Very simple book</title>
<chapter xml:id="chapter_1">
<title>Chapter 1</title>
<para>Hello world!</para>
<para>I hope that your day is proceeding <emphasis>splendidly</emphasis>!</para>
</chapter>
<chapter xml:id="chapter_2">
<title>Chapter 2</title>
<para>Hello again, world!</para>
</chapter>
</book>
Ouvrez un terminal sur le bureau, et entrez
xmllint --noout --valid Sample.docbook
Si vous ne recevez aucun message d’erreur, c’est bon.
Remarque : vous pouvez remplacer
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5//EN" "-">
par
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML//EN" "-">
puisque le catalogue créé ci-dessus, associe le FPI (*) sans numéro de version, à la version 5. Mais je trouve qu’il est préférable de toujours indiquer un numéro de version tout de même.
(*) FPI = Formal Public Identifier, c’est la chaîne “-//OASIS//DTD DocBook XML//EN”, par exemple.
Ça peut se corriger, mais ça n’enlève rien à l’erreur qui existe dans l’installation par défaut, qui fait que la version 5 de DocBook, bien qu’installée, est inaccessible.
Dernière modification par Hibou57 (Le 16/10/2011, à 10:15)
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne
#3 Le 16/10/2011, à 12:41
- Hibou57
Re : [DocType] DocBook, XMLLint et catalogues XML
Correction. Dans le fichier ~./profile, remplacer
XML_CATALOG_FILES="$HOME/.local/share/xml/catalog"
par
XML_CATALOG_FILES="/etc/xml/catalog $HOME/.local/share/xml/catalog"
Sans cela, XMLLint ne peut plus retrouve le contenu du catalogue par défaut.
Toujours au sujet de l'accès à DocBook 5, je viens de remarquer que le problème est corrigé automatiquement dans la catalogue par défaut, dans /etc/xml, dès que l'on installe le paquet docbook-xsl-ns. Le paquet docbook-xsl-ns n'est pas nécessaire, mais il est recommandé avec DocBook 5.
Par contre il faut tout de même indiquer la version 5, parce que le FPI dans version, censé faire référence à la dernière version, fait toujours référence à la version 4.5, mais ce n'est pas un problème, parce que c'est mieux d'indiquer la version explicitement.
A ce sujet justement, pour DocBook 5, il ne faut pas ajouter de V avant le numéro de version. Cela se faisait avec les version 4 et antérieur
Ne faite donc pas
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V5//EN">
mais
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5//EN">
Malgré que le problème soit corrigé par l’installation de docbook-xsl-ns, la mise en place d’un catalogue personnel reste utile, au moins avec XSLT, parce que les feuilles XSLT, on les crée souvent soi-même, ou même quand on ne les crée pas et qu’on utilise des feuilles standard, comme celle de DocBook, on les personnalise quand même, et c’est parfois mieux d’y faire référence par un nom court plutôt que par un chemin absolu, et de pouvoir leur donner un FPI.
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne
#4 Le 16/10/2011, à 13:25
- Hibou57
Re : [DocType] DocBook, XMLLint et catalogues XML
Suite et fin
Comme ça ne sert presque à rien d’éditer du DocBook sans le publier, il faut maintenant s’assurer que la transformation XSLT fonctionne.
Si vous avez installé le paquet apt:docbook-xsl-ns indiqué ci-dessus, alors placer vous dans la répertoire ou vous avez créé votre fichier Sample.docbook, pour y ouvrir une console.
Exécutez la commande suivante :
xsltproc --output sample.html --stringparam use.extensions 0 http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl Sample.docbook
Si tout se passe bien, que vous avez vu un fichier sample.html apparaitre et aucun message d’erreur, c’est un premier pas.
Vérifiez que la feuille XSLT est bien retrouvée localement, en interdisant les requêtes aux net. Vous pouvez le faire en ajoutant l’option “--nonet” à la commande ci‑dessus.
Si vous ne voulez pas avoir à donner la référence de la feuille XSLT à chaque invocation de XSLTProc, vous pouvez y faire référence directement dans le document, en y ajoutant l’instruction de traitement suivante :
<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl" ?>
Que vous placerez juste à la suite de la référence à la DTD.
Lancez maintenant la commande suivante :
xsltproc --output sample.html --stringparam use.extensions 0 Sample.docbook
La même que ci-dessus, mais sans la référence à la feuille XSLT, qui est maintenant dans le document.
Suggestion :
Créez un fichier que vous nommerez DocBook.docbook, puis ouvrez le pour y placer ceci :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5//EN" "http://www.docbook.org/xml/5.0/dtd/docbook.dtd">
<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl-ns/current/html/docbook.xsl" ?>
<book xml:lang="fr" xml:id="book" xmlns="http://docbook.org/ns/docbook" version="5.0">
<title>Votre titre ici</title>
<chapter xml:id="chapter_1">
<title>Premier chapitre</title>
<para>Votre paragraphe ici</para>
</chapter>
</book>
Coller ce document dans votre répertoire ~/Modèles
Ainsi, vous n’aurez plus à entrer les références de la DTD et des feuilles XSLT à chaque fois, et vous créerez votre document vide depuis le menu contextuel de GNOME, « Créer un document » -> « DocBook ».
Et voilà Elle est pas belle la vie ?
Dernière modification par Hibou57 (Le 16/10/2011, à 16:34)
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne
#5 Le 16/10/2011, à 15:18
- alej
Re : [DocType] DocBook, XMLLint et catalogues XML
C'est bizarre pasque chez moi, l'installation de docbook5-xml suffit...
$ xmlcatalog -shell
> public "-//OASIS//DTD DocBook XML 5//EN"
file:///usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd
> public "-//OASIS//DTD DocBook XML 5.0//EN"
file:///usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd
> quit
Sinon, pour régler, même si elle est maintenant sans objet, la problématique initiale sans se casser le tronc...
$ xmlcatalog -shell
> public "-//OASIS//DTD DocBook XML//EN"
file:///usr/share/xml/docbook/schema/dtd/4/docbookx.dtd
> quit
$ xmlcatalog --noout --create --add "public" "-//OASIS//DTD DocBook XML//EN" "/usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd" $HOME/.local/share/xml/catalog.xml
$ XML_CATALOG_FILES="$HOME/.local/share/xml/catalog.xml /etc/xml/catalog" xmlcatalog -shell
> public "-//OASIS//DTD DocBook XML//EN"
file:///usr/share/xml/docbook/schema/dtd/5.0/docbook.dtd
> quit
Hors ligne
#6 Le 16/10/2011, à 16:11
- Hibou57
Re : [DocType] DocBook, XMLLint et catalogues XML
Bizarre alors. Peut-être quelque chose qui a cafouillé dans l’installation, et que ça a été corrigé depuis. Je ne me souviens plus si je l’ai installé moi-même ou si ça faisait partie de l’installation par défaut.
Sinon, comme je vois que tu parle de la commande xmlcatalog, une note à ce sujet. Ce n'est pas commande la plus conseillé, car comme il est dit dans /usr/share/doc/xml-core/README.Debian :
update-xmlcatalog in the xml-core package is the de-facto standard tool to be used to maintain XML catalog files on a Debian system […] update-xmlcatalog in the xml-core package and mlcatalog in the libxml2-utils package are _incompatible_. The former has an internal database of all the entries in all the XML catalog files it maintains and regenerates the indicated XML catalog file completely from scratch upon an update. The latter updates the indicated XML catalog file directly. This means that any change made to an XML catalog file using xmlcatalog is overwritten the next time that XML catalog file is updated using update-xmlcatalog.
Attention donc aux mauvaises surprise avec cette commande,risques de perdre ses modifications personnelles, et il semble préférable de passer par update-xmlcatalog.
-- EDIT -- OK, je n’avais pas tiqué, en fait dans ton exemple tu l’utilise pour un catalogue de l’utilisateur. Pour ça c’est OK.
-- EDIT 2 --
Un autre truc : n'oubliez pas de renseigner l'attribut xml:lang dans l'élément racine de votre document, pour que XSLTProc sache quelle langue utiliser
Uploaded with ImageShack.us
Uploaded with ImageShack.us
Certaines feuilles XSLT sont automatiquement choisies en fonction de la langue du document. De toutes les manières, c’est une bonne habitude que de penser à systématiquement renseigner cet attribut, qui est toujours valide, car faisant partie de l’espace de nom réservé “xml:”.
Je corrige dans un précédent message, le fichier d’exemple à placer dans ~/Modèles
Dernière modification par Hibou57 (Le 16/10/2011, à 16:33)
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne
#7 Le 16/10/2011, à 16:21
- alej
Re : [DocType] DocBook, XMLLint et catalogues XML
Attention donc aux mauvaises surprise avec cette commande,risques de perdre ses modifications personnelles, et il semble préférable de passer par update-xmlcatalog
Je dirais exactement l'inverse dans la mesure où, justement, xmlcatalog permet de bricoler dans son home sans toucher au système. Après, effectivement, faire des modifs système avec xmlcatalog n'est pas recommandé mais ce n'était pas le sujet.
Hors ligne
#8 Le 27/04/2012, à 16:27
- Hibou57
Re : [DocType] DocBook, XMLLint et catalogues XML
Petite chose à laquelle il faut faire attention. Si dans votre catalogue XML, vous ajoutez une entré delegatePublic ou delegateUri ou nextCatalog, et que l’attribut uri (ou catalog) contient des caractères accentués, n’oubliez pas de les encoder avec les %NN%NN, sinon XMLLint ne reconnait pas les URLs (normalement, on devrait d’ailleurs toujours encoder les caractères accentués dans les URLs), et se plaind que l’entrée est “broken”. Ajouter un attribut encoding="utf-8" à la déclaration xml du catalogue n’y change rien, il faut encoder les caractères accentués dans les URLs.
Dernière modification par Hibou57 (Le 01/06/2012, à 03:16)
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne
#9 Le 29/04/2012, à 19:01
- Hibou57
Re : [DocType] DocBook, XMLLint et catalogues XML
La spécification des catalogues XML, qui n’est pas spécifique à Ubuntu (c’est un standard), est ici :
XML Catalogs (oasis-open.org). Aout 2011.
Dernière modification par Hibou57 (Le 29/04/2012, à 19:01)
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne
#10 Le 01/06/2012, à 03:20
- Hibou57
Re : [DocType] DocBook, XMLLint et catalogues XML
Petite chose à laquelle il faut faire attention. Si dans votre catalogue XML, vous ajoutez une entré delegatePublic ou delegateUri ou nextCatalog, et que l’attribut uri (ou catalog) contient des caractères accentués, n’oubliez pas de les encoder avec les %NN%NN, sinon XMLLint ne reconnait pas les URLs (normalement, on devrait d’ailleurs toujours encoder les caractères accentués dans les URLs), et se plaind que l’entrée est “broken”. Ajouter un attribut encoding="utf-8" à la déclaration xml du catalogue n’y change rien, il faut encoder les caractères accentués dans les URLs.
Malgré cette précaution, si vous n’avez pas de chance, un élément de la chaîne peut ne pas interpréter correctement les caractères accentués encodés dans les URLs. C’est le cas au moins de Syntext Serna Editor.
Ça peut piquer les yeux d’écrire les mots contenus dans les noms de fichiers, sans accents là où il en faudrait, mais avec les chemins vers les modèles de documents et les catalogues XML, c’est apparemment à éviter, alors que ça ne devrait pas.
Voilà ce qu’il arrive quand des gens ne respectent pas les standards et les interprètent à leur manière.
Dernière modification par Hibou57 (Le 01/06/2012, à 03:21)
Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)
Hors ligne