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

XML/XSL et SOAP Discussion :

[PHP] XML adapté au LDVH interactif ? [Débutant(e)]


Sujet :

XML/XSL et SOAP

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut [PHP] XML adapté au LDVH interactif ?
    Bonjour,

    Imaginez un livre dont vous êtes le héros [LDVH] (vous vous déplacez de paragraphe en paragraphe à l'aide de numéros).
    Prenons un exemple :

    Vous pianotez tranquillement sur votre clavier quand soudain un message d'alerte s'annonce :
    Vous vous cachez sous la table, allez au 5
    Vous ne souhaitez pas lire le message d'erreur, allez au 7
    Vous prenez le temps de comprendre, allez au 10

    Transformons le tout en XML :
    Une structure possible pourrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <station id="1">
    <text> Vous pianotez tranquillement sur votre clavier quand soudain un message d'alerte s'annonce : </text>
    <choice station="5"> Vous vous cachez sous la table </choice>
    <choice station="7">Vous ne souhaitez pas lire le message d'erreur</choice>
    <choice station="10"> Vous prenez le temps de comprendre </choice>
    </station>
    Je m'inspire ici de QML(Quest Markup Language).

    Le XML semble parfait, sauf que imaginons que le mot clavier doive être réactif (un lien sur le mot clavier va faire apparaître une image… Un clavier trafiqué !) Passons… Le "text" devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <text> Vous pianotez tranquillement sur votre <choice station="8">clavier</choice> quand soudain un message d'alerte s'annonce : </text>
    Mais, là, c'est – selon moi – pas terrible. Que faire du texte entre <text> et <choice> et entre </choice> et </text>. C'est du texte, mais pas du "XML" pur, mais du XML "trafiqué". Par exemple, il faudra légérement dévier l'utilisation de simplexml pour arriver à ses fins…

    La question :
    Est-ce que XML est adapté dans cette situation (pour le web) [Mot en valeur à l'intérieur d'un texte...] ? Si oui, y-a-t-il une meilleure solution ? Si non, que faire ?

    Merci pour vos suggestions, Jacques

  2. #2
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    en faite tu veux faire un ensemble de page html lié entre elle et tout cela à partir d'un fichier xml?
    ai je bien compris ton objectif

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    Tout a fait, en application cela ressemble à qqch comme ça :
    http://www.ldvh.power-heberg.com/game2.php5
    Le code HTML est désormais lisible...
    http://www.ldvh.power-heberg.com/gameitems.xml

    http://www.ldvh.power-heberg.com/gameworld.xml

    D'après une idéé originale de :

    http://www.hudzilla.org/phpbook/read.php/21_4_1

    Le fichier HTML n'est pas généré à chaque fois, PHP se charge via simplexml_load de parser le XML

    Une réponse à cette balise <choice> baladeuse ? (cf 1er message) Des suggestions ?

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

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

    ce type de construction où on mélange noeuds textes et d'éléments et appelé modèle de contenu mixte, bien que courant, n'est pas pris en charge par SimpleXML (une itération sur les enfants de <text> ne renverra que le <choice>). La seule solution, qui ne grève pas les performances mais nécessite de se familiariser avec cette API, consiste à faire une conversion SimpleXML->DOM, avec la fonction dom_import_simplexml(). Une fois le DOMElement récupéré, il n'y a plus aucun problème pour gérer cela.

    As-tu envisagé la solution XSLT ?
    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

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    Bonjour,
    Merci pour votre réponse qui m'ouvre des horizons.
    J'avoue humblement ne pas fréquenter pour le moment DOM, XPath et XSLT mais j'ai un peu de temps devant moi, je vais en profiter.

    DOM : solution dom_import_simplexml();
    Je n'ai pas testé mais après quelques recherches, la solution me paraît parfaite . (effectivement une étape de familiarisation s'impose)

    XSLT : Je n'avais pas du tout envisagé cette solution, mais je suis prêt à combattre Il faut que je prenne le temps de lire le tutoriel de developpez...
    Quels seraient les avantages principaux dans le cas d'un LDVH (livre dont vous êtes le héros) ?

    Enfin,
    J'avais pensé au CGI pour la génération de page HTML ?
    Est-ce que c'est intéressant dans le cas d'une aventure interactive avec gestion d'inventaire… ?

    Merci pour votre soutien,

    PS – Si vous avez un brin de temps (?) que pensez-vous de la navigation [Observer], [Prendre], [RAZ], [Utiliser]… ? dans cette page par exemple ?
    Les écuries
    PS2 –si vous souhaitez le code : (clic droit enregistrer sous game2.php pour garder la mise en page)
    PS3 - Pour les XML (actuels)
    gameitems.xml
    gameworld.xml

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3
    Par défaut
    Citation Envoyé par GrandFather
    Bonjour,

    ce type de construction où on mélange noeuds textes et d'éléments et appelé modèle de contenu mixte, bien que courant, n'est pas pris en charge par SimpleXML (une itération sur les enfants de <text> ne renverra que le <choice>). La seule solution, qui ne grève pas les performances mais nécessite de se familiariser avec cette API, consiste à faire une conversion SimpleXML->DOM, avec la fonction dom_import_simplexml(). Une fois le DOMElement récupéré, il n'y a plus aucun problème pour gérer cela.

    As-tu envisagé la solution XSLT ?
    Bonjour,
    Je me glisse dans cette discussion intéressante pour un problème similaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <chapter nb='1'>
     <verse nb='1'>bla bla bla <keyword entry='Truc'>Monsieur Turc</keyword>bla bla bla
     </verse>
    </chapter>
    Je dois faire une sortie html (entre autre formats) du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div class='chapter' id='c1'>
    <span class='verse' id='c1v1'>bla bla bla <a href='monGlossaire/index.php/Truc'>Monsieur Turc</keyword>bla bla bla
    </span>
    </div>
    J'ai des templates
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <xsl:template match="verse" mode="body">
      <span class="verse">
       <xsl:attribute name="name">
        <xsl:value-of select="@nb"/>
       </xsl:attribute>
      </span>
      <xsl:value-of select="./*" />
    </xsl:template>
    <xsl:template match="keyword" mode="body">
     <a>
      <xsl:attribute name="href">
       <xsl:value-of select="@entry"/>
       <xsl:value-of select="." />
       </xsl:attribute>
     </a>
    </xsl:template>
    Tout va bien avec les templates XSL jusqu'à la balise verse ->span. Mais pour créer cette balise <a/> au milieu du texte... J'ai bien essayé des trucs du genre :
    <xsl:apply-templates select='./*' /> qui produit des choses exotiques.
    Il y a une solution XSLT ?
    libxslt 1.1.17 sur php 5.2.0
    (Je galère déjà pour produire un pseudo-xml à partir des 79 fichiers qu'on m'a fourni !)
    Merci à vous

  7. #7
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par doustij
    Quels seraient les avantages principaux dans le cas d'un LDVH (livre dont vous êtes le héros) ?
    POur toutes les applications qui nécessitent que le contenu d'un document XML soit transformé pour être affiché dans une page HTML, XSLT est une option à envisager. Le code XSLT est placé dans une feuille de style qui se charge du rendu de la page. Si on souhaite modifier l'apparence d'une page, on ne modifie que cette feuille de style, sans toucher au code PHP, ce qui permet une séparation entre le code "métier" (en PHP) et la partie "présentation" (en XSLT), donc une modularité qui favorise la maintenance. Il est ainsi possible de "relooker" complètement un site sans toucher à une ligne de code PHP, ou même d'ajouter d'autre modes de rendu (ex: un rendu graphique avec SVG) sans toucher ou très peu au code PHP.

    Citation Envoyé par doustij
    J'avais pensé au CGI pour la génération de page HTML ?
    Est-ce que c'est intéressant dans le cas d'une aventure interactive avec gestion d'inventaire… ?
    Qu'appelles-tu CGI, exactement ? CGI est une technologie obsolète, il est possible de faire fonctionner PHP selon ce mode mais c'est déconseillé.

    @Vincent : il ne faut pas utiliser xsl:value-of mais xsl:apply-templates, il est par ailleurs mal positionné (en dehors du <span>) et de toutes façons l'attribut match n'est pas le bon (* ne fait que sélectionner des éléments, alors qu'il faut que tu traites également les noeuds de type texte enfants de <verse>). D'autre part, le xsl:value-of dans le template du "keyword" apparaît dans le xsl:attribute, ce qui me paraît bizarre... Ca fait pas mal d'erreurs, il serait peut-être profitable de réviser les fondamentaux de XSLT.

    Ceci devrait fonctionner mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <xsl:template match="verse" mode="body">
      <span class="verse">
       <xsl:attribute name="name">
        <xsl:value-of select="@nb"/>
       </xsl:attribute>
       <xsl:apply-templates mode="body"/>
      </span>
    </xsl:template>
    <xsl:template match="verse/text()" mode="body">
    	<xsl:value-of select="."/>
    </xsl:template>
    <xsl:template match="keyword" mode="body">
     <a>
      <xsl:attribute name="href">
       <xsl:value-of select="@entry"/>
      </xsl:attribute>
      <xsl:value-of select="." />
     </a>
    </xsl:template>
    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

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    XSLT à regarder attentivement

    CGI : Mon inculture me joue des tours... A force de voir des scripts cgi (et des dossiers cgi-bin) à droite à gauche... je comptais m'y mettre
    Mais il me semble avoir lu qq part que PHP descend de CGI... Si la technologie est obsolète, m'intéresser à XSLT vaut beaucoup mieux, et venir à CGI après PHP est une perte de temps, ?

    Merci, Jacques

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3
    Par défaut Défaire des paquets de nœuds
    Merci au grand père pour l’aide.
    En effet, il y a pas mal d’erreur dans l'exemple (un peu moins dans mon code !)
    En grattant un peu (et dormant très peu ), j'ai trouvé des choses !
    Voici l'état actuel du XSL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <xsl:template match="verse" mode="body">
     <xsl:param name="cn" />
      <span class="verse">
       <xsl:attribute name="name">
        <xsl:value-of select="@nb"/>
       </xsl:attribute>
      </span>
      <xsl:apply-templates select=".//keyword|./text()" mode="body"/>
    </xsl:template>
     
    <xsl:template match="keyword" mode="body">
     <a>
      <xsl:attribute name="href">
        <xsl:text>monGlossaire/index.php/</xsl:text>
        <xsl:value-of select="@entry"/>
       </xsl:attribute>
      <xsl:value-of select="."/>
     </a>
    </xsl:template>
     
    <xsl:template match="text()" mode="body">
     <xsl:value-of select="." />
    </xsl:template>
    Mais effectivement le
    <xsl:apply-templates mode="body"/>
    et
    <xsl:template match="verse/text()"/>
    ça fait plus propre...

    @ doustij :
    On sue un peu au début, mais le xsl vaut le coup pour traiter de l'XML. J'ai différentes sorties à produire à partir un même XML (dont un <mediawiki/> pour alimenter un wiki, un <html/>, un <index/> maison, une sortie sql...). XSL est (assez, jamais suffisamment ) rapide pour produire ces traitements. Et puis on trouve une bonne aide ici
    Merci encore et bon courage à doustij.

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    Merci pour votre aide, je me plonge dans XSLT et je vérifie l'activation de l'extension chez l'hébergeur.

    @Grand Father : Merci de nous consacrer du temps (si difficile à trouver en informatique)

    @Vincent : Merci pour tes encouragements. May your mind stay sharp.

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

Discussions similaires

  1. communication mysql, php, xml, flash
    Par klams dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/03/2006, 18h12
  2. [PHP] <?xml version="1.0" encoding="UTF-16
    Par pierrot10 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 06/03/2006, 11h22
  3. [XML] Php -> XML / Utf-8
    Par gehan dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/02/2006, 10h30
  4. [PHP] XML et jpGraph
    Par icecube216 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 16/12/2005, 14h15
  5. [XSLT][DOM] Php - Xml - Xsl
    Par topolino dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 08/12/2005, 19h34

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