Bonjour

Quelqu'un aurait-il déjà utilisé la méthode Xinclude pour fusionner plusieurs documents .xml ?
La méthode est une recommandation de la W3C. Je suis les exemples présents ici etdans la littérature de la Toile, rien n'y fait quelque soit le navigateur, le résultat est muet.
Exemple. J'ai les 2 documents xml ci-dessous.

livre1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<livre>
<titre>Les contes de Perrault</titre>
</livre>


livre2.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<livre>
<titre>Les contes de Grimm</titre>
</livre>


Pour les fusionner j'écris le fichier xml suivant
livres.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="livre.xsl"?>
<livres version="5.0" xmlns:xi="http://www.w3.org/2001/XInclude">
	<xi:include href="livre1.xml" parse="xml"/>
	<xi:include href="livre2.xml" parse="xml"/>	  
</livres>



J'édite le résultat avec la feuille de style livre.xsl suivante :

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<font color="red">Ma bibliothèque</font>
<xsl:for-each select="livres/livre">
<font color="green"><xsl:value-of select="titre"/></font>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="titre">
<xsl:value-of select="."/><br />
</xsl:template>
</xsl:stylesheet>


Résultat, la fusion est ignorée. Tout se passe comme si le fichier résultat était vide.
Modifié par rimousky (20 Jul 2011 - 00:21)
Ah merci pour le titre c'est beaucoup mieux ainsi.
Je dois partir mais je reviens en soirée je suis de QC et on est loin du dodo.

Mais je vais pouvoir te parler de XInclude : j'espère que tu as saxon ou autre parce que nos navigateurs ne gère pas XInclude : ça prend un processeur comme saxon (v9 gratuit) ou autre.

On indique, en ligne de commande : -xi:on|off » c'est on ou off. Mais un processeur est inévitable. Moi je suggère Saxon que tu trouve sur Saxonica.

Évidemment il y a la structure du fichier XML et l'appelle de XInclude avec son namespace. Aussi essais de te brancher sur la doc, c'est fr.

Ne craint pas Saxon car c'est simple. On lie le fichier xml au fichier xsl avec un outout en HTML ou XML, ou TEXT. On appui sur ENTER et tout ce fait aisément. D'autres options comme XMLSchema peuvent aussi être utilisé. Et beaucoup d'autre choses encore.

Il serait bien que tu utilise l'élément FALLBACK avec XInclude. Son rôle est de transférer à une autre page (une page d'erreur personnalisé comme exemple), si jamais le fichier XML n'est pas trouver, ou tout simplement un message d'erreur sur le même fichier.

++
Modifié par zardoz (20 Jul 2011 - 05:09)
Salutation rimousky »

Eh bien j'espère que tu n'est pas déçu d'apprendre que nos navigateur ne gère pas tous les technologies XML, quoique des progrès ont été fait avec SVG aujoud'hui.

J'ai choisi XML à la methode : <xsl:output methode="xml" . . . />. Mais sache que c'est aussi effectif avec HTML et une sortie de fichier HTML : commande de sortie -o:xml/html/monFichier.html. Alors ne te surprend si ma méthode de travail est différente de la tienne. Toutefois elle n'est pas plus difficle à exécuter.

Les fichierS XML et XSL

ici » base.xml


<?xml version="1.0" encoding="UTF-8"?>
<sources>
 <!-- Fichier à inclure : baseInclue.xml -->
 <sujet>Fichier de base : base.xml - test d'inclusion</sujet>
 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="baseInclue.xml" parse="xml">
  <xi:fallback>
   <xi:include href="avertissement.xml" parse="xml" />
  </xi:fallback>
 </xi:include>
</sources>


ici le fichier (fragment) XML » baseInclue.xml
Remarque ici que le PI (Processing Instruction) n'est pas nécessaire. Le PI n'existera que dans base.xml


<inclusion>
 Fragment inclu de : baseInclue.xml
</inclusion>


Le fichier XSL » ici non plus le PI n'est pas nécessaire. Et comme tu pourras le constater le fichier est présenter à sa plus simple expression. Le but étant d'inclure un fragment XML en provenance d'un autre fichier XML.


<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" />
<xsl:template match="/">
 <xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>


Le fichier XML » avertissement.xml : c'est ce fichier qui est manipuler par <xi:fallback />, si et seulement si, le fichier d'inclusion baseInclue.xml n'existe pas. On manque la cible. Ici je m'en sert comme message inclue dans le même fichier base.xml. Avec aucun PI.

Pour simuler une cible manquer tu n'a qu'à changer le nom du fichier XML dans base.xml à l'attribut href » comme ceci : href="nonExistant.xml" et tu compile à nouveau. Ça donnera les résultats de la 2ième image (capture).


<alerte>
 Le fragment XML cible n'existe pas.
</alerte>


Les résultats en ligne de commande avec cmd.exe - Ouch c'est du Windows Smiley biggrin

Image 1 ) La cible XML est atteinte.

upload/20350-include01.jpg

Image 2 ) La cible XML est manquer.

upload/20350-nonExistan.jpg

Comme tu peux le voir oui » on cible un fragment XML et on l'inclu dans un autre fichier XML. On peut très bien faire une sortie XML : -o:xml/base_02.xml.

Comprenons ici que ça fonctionne très bien avec une sortie HTML. Donc en visuel. Le fichier inclu sera présent.

Sur la première image on voit à la première ligne la commande avec les options à exécuter


c:\saxon>java -jar saxon9.jar -s:xml/base.xml -xsl:xml/xsl/base.xsl -xi:on


Comme tu pourra le voir il n'y a aucune sortie HTML ou XML mais on peut le faire avec
-o:xml/autreBase.xml ou -o:xml/html/autreBase.html

J'ai choisi de travailler en console pour la démonstration. Évidemment tu pourras faire des structures plus complexe, si coeur t'en inspire.

Quand on travail avec Saxon version 9 + c'est la version 2 de <xsl:stylesheet version="2.0">

..
Modifié par zardoz (20 Jul 2011 - 06:06)
Merci pour ces explications.
Je vais les examiner et les tester, je te tiendrai au courant de l'avancé de mes réflexions (et le reste de la comunauté Alsacréations bien sûr.
Je serai à QC en octobre (secteur Beaupré/St Joachim exactement).


Bonne nuit
Salutation

Alors bonne chance rimousky »

D'ailleurs il y a une ville dans notre région nommé Rimousky dans le bas du fleuve.

Ici à QC, c'est le festivale d'été de Québec. Il y a bien du monde dans les rues de Québec.
Avec le beau temps (ciel bleu et tout). Trop chaud cependant.

C'est super fête à QC.

..
Modifié par zardoz (20 Jul 2011 - 16:16)