Bojour,
J'ai 1 fichier XML lié à une feuille XSLT par
<?xml-stylesheet type="application/xml" href="exemple2html.xsl"?> 

La feuille exemple2html.xsl contient, elle (entre autres)
  
<xsl:output 
               method="xml" encoding="ISO-8859-1"
               media-type="text/html" 
               omit-xml-declaration="yes"
               doctype-public= "-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
	       indent="yes"/>

Je voudrais utiliser ces données dans 2 contextes :
1 : visualisation directe dans firefox (ou autre navigateur)
2 - production d'un fichier XHTML 1.0 par un processeur XSLT quelconque
(par exemple xsltproc)

J'ai le problème suivant :
- Le code xsl:output ci-dessus ne donne pas un affichage correct dans le navigateur (données brutes, pas mises en page). Si je change en
method="html"
tout devient OK... pour çà.
- mais avec method="html" le fichier produit par un processeur XSLT n'est plus du XHTML (balises isolées non fermées par exemple), conformément aux specs XSL.

Bref, pas moyen d'utiliser la même feuille xslt dans les 2 contextes.
Bon, je peux bidouiller avec 3 fichiers et des xsl:include ...

Mais quelqu'un aurait-il une solution plus simple, avec une unique feuille XSLT ?
salut
c'est le probleme de toute interpretation, c'est interpreter differemnt par tout le monde Smiley bawling
passe par une techno serveur tu aura moins de sousci
Bonjour,

@ tergal> D'après mon expérience l'analyse que tu fais du problème n'est pas exacte.

1/ un navigateur, tel Firefox pour reprendre ton exemple, sait parfaitement bien exploiter du XML et le présenter comme il faut pour peu que les styles y soient. D'ailleurs le XHTML qui n'est que du XML finalement lui convient bien sinon ça se saurait.
2/ j'ai déjà expérimenté la transformation XSL sur IE et FF sans aucun problème y compris avec <xsl:output method="xml">.

Ton problème doit se situer ailleurs, et je te confirme qu'il est possible d'utiliser une unique feuille XSLT pour les 2 contextes que tu évoques.

@ jeff> Hum, les standards sont tout de même là pour réconcilier, sur un socle commun, les interprétations des uns et des autres.
Xavier a écrit :
Hum, les standards sont tout de même là pour réconcilier, sur un socle commun, les interprétations des uns et des autres.


Mais leurs mésusages consistant ici à publier du XML propriétaire laissent sur le carreau beaucoup d'UA (Je n'emploie volontairement pas le mot navigateur, quoique beaucoup entrent dans ce champ de cette erreur) Smiley cligne

Relire Never send content in proprietary formats over the wire

Tiens : ou alors, on se refait par exemple le contenu d'openweb, mais sous une forme un peu brutale : docbook (qui gère les sources actuellement) + XSLT . Docbook est déjà "a pain in the ass", mais si on fait ainsi, ce serait un petit peu pire et qui plus est ce serait publiquement pire Smiley cligne
Modifié par Laurent Denis (10 Feb 2006 - 15:46)
Laurent,

Si j'ai pu, à un moment ou un autre, laisser un écrit conduisant à penser que j'encourageais dans le cas général l'exécution d'une transformée XSL sur le poste client ou l'envoi vers celui-ci de fragments XML propriétaires, alors c'est une véritable maladresse de ma part.

Mais je n'ai trouvé dans les échanges précédents aucun indice relatif à la DTD XML employée. Par ailleurs et concernant XSLT, la déporter sur le client est généralement une mauvaise idée, mais en l'absence d'information relative au contexte appelant la question initiale, il est permis d'espérer des circonstances particulières (expérimentations, exploitation d'un intranet...) qui justifient le procédé.

En revanche, renvoyer la transformée XSL coté serveur au prétexte qu’il ne serait pas possible d’exploiter le standard XSLT (et XML qu'elle qu'en soit la DTD) avec l’espoir d’un résultat identique sous Firefox et sous une plateforme serveur ne me parait définitivement pas recevable.
Bonsoir,
Merci de vos réponses.
Ma question était au depart surtout "technique", mais je peux dire un mot du contexte. Il s'agit bien pour moi d'utiliser la visualisation firefox pour faire des tests et mises au point, tout en ayant à l'esprit qu'un usage de ce type pourrait eventuellement etre acceptable dans une contexte "intranet" où l'on domine le type des clients. Cette solution n'est pas aujourd'hui envisageable sur un serveur public (d'où le deuxième contexte).
Cela étant, pourquoi une solution XML+DTD/schema publics+XSLT, donc reposant sur des standard ne pourrait-elle à terme être viable dans un contexte large ?
Je reviens à la question purement technique.
J'ai un exemple de non fonctionnement de la visualisation sur firefox d'une transfo xslt faite en mode xml. cet exemple est extrèmement réduit (10 lignes de source XML+20 lignes de XSL environ)
Je peux le poster sur ce forum si quelqu'un veut y jeter un coup d'oeil et me dire où est le problème, mais je ne sais pas si c'est l'usage sur ce forum de poster des sources.
Dites-moi ce qu'il en est Smiley cligne
Merci.
tergal a écrit :
Cela étant, pourquoi une solution XML+DTD/schema publics+XSLT, donc reposant sur des standard ne pourrait-elle à terme être viable dans un contexte large ?
je ne crois pas que personne n'ai mis en cause le principe que tu indiques.
En revanche ta question démontrait ton intention de confier la transformée XSLT à l'agent utilisateur sur le poste client. En général, à savoir lorsque l'on ne maîtrise pas le poste client et l'agent utilisateur, c'est une très mauvaise idée. Voilà, telle que je l'ai compris le sens de la remarque de Laurent Denis. La solution consiste plutôt à rapatrier cette transformée coté serveur, architecture visiblement mise en place sur openweb.
Quand à XML+DTD/schéma publics, il n'y a pas de problème particulier. A mon sens il faut vraiment étudier toutes les possibilités de DTD/schéma les plus "connus et publics" avant de décider qu'une solution exotique voire totalement propriétaire serait finalement plus adaptée.
tergal a écrit :
Je peux le poster sur ce forum si quelqu'un veut y jeter un coup d'oeil et me dire où est le problème, mais je ne sais pas si c'est l'usage sur ce forum de poster des sources.
Beaucoup de questions sont posées sur ce forum à partir de codes sources. C'est souvent une bonne façon de se faire réellement comprendre. La démarche est donc bien venue.
Ta question sera d'autant plus appréciée que tu auras fait l'effort de rendre ton exemple synthétique. Et puisque tu parles d'un écart entre 2 processus de transformée XSL, je crois qu'il serait bien venue de donner le XML avec seulement 1 ou 2 éléments qui font apparaître visuellement le delta, et la portion de ton XSL devant traiter ces 2 éléments.
Voici donc mon petit exemple. Le source XML :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE racine [
<!ELEMENT racine (#PCDATA)>
]>
<?xml-stylesheet type="text/xsl" href="exemple2html.xsl"?>
<racine>
Contenu XML
</racine>

La feuille XSLT :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
  <xsl:output
               method="xml" encoding="ISO-8859-1"
               media-type="text/html"  omit-xml-declaration="yes"
               doctype-public= "-//W3C//DTD XHTML 1.0 Strict//EN"
               doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
               indent="yes"/>
  <xsl:template match="/">
    <html>
      <head><title>Test</title></head>
      <body>
        <h1 style="color:red">
          <xsl:text>Titre avec </xsl:text><xsl:value-of select="/racine"/>
          <img src="http://www.w3.org/Icons/WWW/w3c_home" alt="w3c"/>
        </h1>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

En résumé, donc
- Un processeur XSLT produit du XHTML valide
- Le fichier XML est visualisé correctement dans IE6 (après avoir du changer le application/xml en text/xsl bien-sûr)
- La visualisation n'est pas correcte dans firefox 1.5 (elle l'est si l'on change en method="html").

Peut-être trouverez-vous une erreur. A moins que ce ne soit firefox qui ait un comportement bizarre.
Il y a bien une erreur, et FF a un comportement normal. Tu dois en effet spécifier l'espace de nom des éléments de ton arborescence : http://www.w3.org/1999/xhtml.

Tel que ton code est écrit, les éléments appartiennent à l'espace de nom par défaut qui se trouve être l'espace de nom vide.

L'une des façons de régler le problème est d'ajouter l'attribut
xmlns="http://www.w3.org/1999/xhtml"
à l'élément <xsl:stylesheet>