IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT]petit(s) pb(s) avec les xmlns et <xsl:namespace-ali


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut [XSLT]petit(s) pb(s) avec les xmlns et <xsl:namespace-ali
    Bonjour, tout le monde.

    comme je suis en train de passer aux XSD, j'inclue des namespace XML (xmlns) dans mes xml, donc, dans mes xslt, aucun problème jusque là, j'ai un xmlns que j'ai l'habitude de préfixé par 'content' or, pour la génération de rss 1 (RDF) j'utilise le namespace "http://purl.org/rss/1.0/modules/content/" qui est également préfixé par content, vous allez me dire, les habitudes ça se change, certes, mais j'aimerais trouver une façon plus élgante de faire ceci, j'ai donc ajouté comme pour chacun de mes XSLT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:content="http://presentation-de-glys.homedns.org/xsd/content.xsd" exclude-result-prefixes="content"
    dans le <xsl:stylesheet> puisque le namespace n'est utilisé que pour mes xml, et pas pour la sortie. ensuite, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:namespace-alias stylesheet-prefix="rdf-content" result-prefix="content"/>
    et ensuite, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rdf-content:encoded xmlns:rdf-content="http://purl.org/rss/1.0/modules/content/">
    normal, sauf que j'ai mis rdf-content, au lieu de content, en espérant qui'l soit remplacé par content grâce au <xsl:namespace-alias>, or : 1°) erreur, car il croit que le préfixe rdf-content n'existe pas...

    je me suis dis, qu'à celà ne tienne, c'est pasqu'il doit être déclaré avant, j'ai alors mis le xmlns:rdf-content dans le <xsl:stylesheet> et là, stupeur, plus d'erreur, certes, mais d'une part, mon xmlns:rdf-content apparait tel quel ! et en plus, il ne me traite plus mon élement xml content:content,

    càd, au lieu d'avoir en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <content:content>bla bla bla</content:content>
    j'ai avec un joli xmlns:rdf-content.... dans le <rdf:RDF>...

    si quelqu'un y comprends quelque chose, merci d'avance, comme processeur XSLT, j'utilise les fonction XSLT de PHP 4.3.8, si ça éclaire quelqu'un ...

    voilà, merci d'avance à tous, n'hésitez pas à demander des précisions si besoin est
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    à mon avis, ton parseur réagit bizarrement parce que tu lui fais une demande contradictoire : avec le <xsl:namespace-alias> tu veux substituer 'content' à 'rdf-content', en en même temps tu exclus 'content' de l'arbre de sortie avec exclude-result-prefixes...

    Il faut bien garder à l'esprit que dans les espaces de nom, c'est l'URI qui compte ; le préfixe n'est que la clé permettant de retrouver l'URI associée dans la table des espaces de nom maintenue par le parseur et qu'il créée avec les déclarations xmlns. Cela signifie notamment que les préfixes utilisés dans ton XML et dans ta feuille de style peuvent être différents et néammoins désigner le même espace de nom, à partir du moment où ils pointent vers la même URI.

    Dans ton cas, il suffit tout simplement d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:stylesheet
    ...
    xmlns:content="http://presentation-de-glys.homedns.org/xsd/content.xsd" 
    xmlns:rdf-content="http://purl.org/rss/1.0/modules/content/"
    exclude-result-prefixes="content">
    Et le <xsl:namespace-alias> est inutile. Pour la plupart des auteurs, la seul utilité de cette balise est dans le cas d'une génération d'une feuille de style à partir d'une autre feuille de style.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ok,

    la peur que j'avais et que le fil RSS ne soit plus valide du fait que le préfixe ne soit plus content mais rdf-content, merci pour les explications !
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ReBonjour !

    j'ai le défaut de ne pas me contenter d'une réponse en bloc, mais de toujours cherché une explication , je me doutais que cette erreure venait d'un malcompréhension de ma part sur le fonctionnement de <xsl:namespace-alias>, j'ai donc chercher à comprendre le fonctionnement de cette balise, in case of, à l'avenir

    et j'ai finalement compris mon erreur, ainsi que le fonctionnement de la balise...

    voilà un petit résumé de ce que j'ai compris :

    je croyais de l'effet de <xsl:namespace-alias> était de la réécriture de préfixe, or c'est (ce qui est un poil plus logique) de la réécriture de namespace, càd que le préfixe utilisé en sortit n'est pas celui spécifié dans le <xsl:stylesheet> pour le même préfixe, mais pour celui du préfixe de destinationvoilà donc ce que j'ai fait, avant j'utilisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:stylesheet version="1.0" xmlns:content="http://presentation-de-glys.homedns.org/xsd/content.xsd" exclude-result-prefixes="content" xmlns:rdf-content="http://purl.org/rss/1.0/modules/content/">
    	<xsl:namespace-alias stylesheet-prefix="rdf-content" result-prefix="content"/>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    					<content:encoded>
    						<xsl:apply-templates select="$params/param[@id='Error']/content:content"/>
    					</content:encoded>
    pensant que rdf-content: serait remplacer par content: et que le namespace associé serait celui de rdf-content,

    or c'est ceci qu'il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:content="http://presentation-de-glys.homedns.org/xsd/content.xsd" exclude-result-prefixes="content rdf-content" xmlns:rdf-content="http://purl.org/rss/1.0/modules/content/">
    	<xsl:namespace-alias stylesheet-prefix="content" result-prefix="rdf-content"/>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    					<content:encoded>
    						<xsl:apply-templates select="$params/param[@id='Error']/content:content"/>
    					</content:encoded>
    ainsi le content: dans le <apply-templates> est bien interprété, et le <content:encoded> retrouve bien le préfixe content avec namespace spécifié pour rdf-content dans le <xsl:stylesheet> !!!

    Ne croyez pas que je n'ai pas tenu compte de votre remarque : je m'étais résigné à utiliser un préfixe différent pour un des deux namespaces, mais j'aime comprendre mes erreurs et faire les choses proprement...

    (le content dans exclude-prefixe est là pour que l'attribut xmlns:content soit présent sur la balise utilisant le namespace puisqu'il n'y en a qu'une qui est présente que sous certaines conditions, ça allège un peu le document final si la balise n'y est pas, et rend plus facile la lecture par un humain...)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème de débutant avec les tableaux
    Par crazy_zakaria dans le forum Débuter
    Réponses: 10
    Dernier message: 20/11/2009, 10h25
  2. Réponses: 1
    Dernier message: 10/03/2009, 17h05
  3. Réponses: 10
    Dernier message: 26/10/2006, 12h25
  4. Besoin d'un petit coup de main avec les hash
    Par scaleo dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2006, 23h12
  5. petit soucis avec les listes
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2005, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo