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 :

XML1 + XML2 = XML3 > HTML


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut XML1 + XML2 = XML3 > HTML
    Bonsoir,

    L'intitulé de mon message n'est surement pas très clair, mais j'ai pas trouvé mieux...

    En fait, j'ai le fichier XML suivant, album.xml :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?xml version="1.0"?>
     
    <album>
     
    <photo>
    <titre>Lac de montagne</titre>
    <lieu>Alpes</lieu>
    <date>2012</date>
    <auteur>
    <nom>Dupont</nom>
    <prenom>Pierre</prenom>
    <age>42</age>
    <pays>France</pays>
    </auteur>
    </photo>
     
    <photo>
    <titre>Désert</titre>
    <lieu>Sahara</lieu>
    <date>2007</date>
    <auteur>
    <nom>Olivier</nom>
    <prenom>Alex</prenom>
    <age>27</age>
    <pays>Suisse</pays>
    </auteur>
    </photo>
     
    <photo>
    <titre>Océan</titre>
    <lieu>Bretagne</lieu>
    <date>2011</date>
    <auteur>
    <nom>Dupont</nom>
    <prenom>Pierre</prenom>
    <age>42</age>
    <pays>France</pays>
    </auteur>
    </photo>
     
    <photo>
    <titre>Centre Ville</titre>
    <lieu>Tokyo</lieu>
    <date>2000</date>
    <auteur>
    <nom>Haston</nom>
    <prenom>Mora</prenom>
    <age>33</age>
    <pays>Autralie</pays>
    </auteur>
    </photo>
     
    </album>
    Ce fichier n'est pour l'instant pas très long et je voudrais en profiter pour chercher un moyen plus élégant qui éviterait la redondance de l'information concernant les auteurs. Je voudrais savoir s'il y aurait pas plutôt moyen de partir plutôt de deux fichiers xml différents, comme par exemple :

    photo.xml

    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
    24
    25
    26
     
    <?xml version="1.0"?>
    <photo>
    <titre>Lac de montagne</titre>
    <lieu>Alpes</lieu>
    <date>2012</date>
    <auteur id="1"/>
    </photo>
    <photo>
    <titre>Désert</titre>
    <lieu>Sahara</lieu>
    <date>2007</date>
    <auteur id="2"/>
    </photo>
    <photo>
    <titre>Océan</titre>
    <lieu>Bretagne</lieu>
    <date>2011</date>
    <auteur id="1"/>
    </photo>
    <photo>
    <titre>Centre ville</titre>
    <lieu>Tokyo</lieu>
    <date>2000</date>
    <auteur id="3"/>
    </photo>
    et auteur.xml

    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
     
    <?xml version="1.0"?>
    <auteur id="1">
    <nom>Dupont</nom>
    <prenom>Pierre</prenom>
    <age>42</age>
    <pays>France</pays>
    </auteur>
    <auteur id="2">
    <nom>Olivier</nom>
    <prenom>Alex</prenom>
    <age>27</age>
    <pays>Suisse</pays>
    </auteur>
    <auteur id="3">
    <nom>Haston</nom>
    <prenom>Mora</prenom>
    <age>33</age>
    <pays>Australie</pays>
    </auteur>
    pour ensuite les combiner et obtenir un fichier équivalent à ablum.xml. Est-ce que c'est possible grâce à XSL ? Si oui, comment faire ensuite pour transformer le résultat obtenu en HTML ? Toujours grâce à XSL ?

    Merci à tous ceux qui pourront me renseigner !

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    La notation XML est naturellement hiérarchique (c'est un arbre !) et il me semblerait plus naturel de n'avoir qu'un seul document avec les livres par auteur pourvu qu'un livre ne puisse pas avoir plusieurs auteurs !

    Sinon, tout mettre dans un même document, mais en deux parties disjointes, est encore intéressant : un document XML est comme une petite base de données cohérente et autonome. Les valeurs d'id n'auraient, alors, qu'à avoir une unicité locale (ce qui pourrait être un problème si la fusion de deux documents à ce format-là venaient à avoir un sens...).

    En fait, avec n documents par type de données, on se demande l'intérêt d'utiliser la notation XML "en rateau" par rapport à du basique CSV.

    XSLT 1.0, lui, ne sait lire qu'un document XML "en entrée", celui sur lequel on applique la transformation. Mais on peut aussi y lire d'autres documents XML à l'aide de la fonction document().

    La génération de HTML avec XSLT est faite avec <xsl:output method="html"> où l'on peut préciser une DTD (HTML5 n'est pas encore supporté...) et un encodage.

    -Alain

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Pour résumer ce qu'à dit Alain :
    C'est possible (en utilisant la fonction document() de XSLT), mais est-ce judicieux étant donné qu'il est possible d'avoir exactement la même structure (que tes 2 documents) dans un seul document ?

    Personnellement j'avoue que je ne sais pas répondre, de toute façon c'est à toi de choisir.
    Tout avoir dans un seul document permettrait d'utiliser le type ID/IDREF de XML (je ne sais pas si c'est géré en multidocuments), de ne pas avoir de nom d'un fichier XML en dur dans le XSL (ce qui est quand même moche) et de tout avoir "sous la main".
    Avoir 2 documents séparés permet de n'avoir qu'un seul type d'information dans le document.

    Après c'est à toi de voir.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Merci pour votre réponse et les pistes que vous me donnez.

    Le premier fichier XML (album.xml) comprenant à la fois la description des livres et la description des auteurs marche bien, mais j'aurais voulu séparer ces deux types d'informations car je pense que je devrais modifier parfois les informations sur un auteur (changer le nom, ajouter une nouvelle balise).

    Ce genre de modification serait surement plus facile à faire si j'avais deux fichiers XML différents ? Je me vois pas trop modifier les informations sur les auteurs livre par livre ! Ou alors comme vous me dites, dans un seul fichier XML, mais en deux parties disjointes ? Mais concrètement, comme je débute avec XSL, je ne vois pas trop comment recombiner les deux parties correctement dans une transformation en HTML.

    L'idée d'organiser l'information dans un seul fichier XML en fonction des auteurs aurait pu marcher, mais comme vous le dites, ça posera un peu problème lorsqu'il y aura plusieurs auteurs pour un même livre...


    Pour l'instant, en partant des fichiers photo.xml et auteur.xml, j'ai réussi grâce à la fonction document() de XSL à afficher et organiser l'information comme il faut ma transformation en HTML.

    Le problème, c'est qu'une fois que j'ai importé les informations du document auteur.xml avec XSL appliquer à photo.xml, je n'arrive pas à intervenir sur le style comme je voudrais (du genre : gras pour le nom d'auteur, italique pour le pays...). Du coup, l'information est là, mais niveau présentation, c'est pas terrible !

    Mais peut-être que le plus simple dans mon cas serait que je me mette à MySQL et PHP ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Merci Loceka,

    Je vais creuser la piste ID/IDREF...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    En reprenant l'idée d'un seul fichier XML organisé en deux parties (informations sur les auteurs vs informations sur les oeuvres), j'ai créé le fichier XML suivant :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?xml version="1.0"?>
     
    <album>
     
    <artiste>
    	<auteur id="1">
    		<nom>Dupont</nom>
    		<prenom>Pierre</prenom>
    		<age>42</age>
    		<pays>France</pays>
    	</auteur>
    	<auteur id="2">
    		<nom>Olivier</nom>
    		<prenom>Alex</prenom>
    		<age>27</age>
    		<pays>Suisse</pays>
    	</auteur>
    	<auteur id="3">
    		<nom>Haston</nom>
    		<prenom>Mora</prenom>
    		<age>33</age>
    		<pays>Australie</pays>
    	</auteur>
    </artiste>
     
    <oeuvre>
    	<photo>
    		<titre>Lac de montagne</titre>
    		<lieu>Alpes</lieu>
    		<date>2012</date>
    		<auteur idref="1"/>
    	</photo>
    	<photo>
    		<titre>Desert</titre>
    		<lieu>Sahara</lieu>
    		<date>2007</date>
    		<auteur idref="2"/>
    	</photo>
    	<photo>
    		<titre>Ocean</titre>
    		<lieu>Bretagne</lieu>
    		<date>2011</date>
    		<auteur idref="1"/>
    	</photo>
    	<photo>
    		<titre>Centre ville</titre>
    		<lieu>Tokyo</lieu>
    		<date>2000</date>
    		<auteur idref="3"/>
    	</photo>
    </oeuvre>
     
    </album>
    Du coup, j'ai deux questions :

    - Est-ce que c'est bien comme-ça que je peux organiser mes données dans le document XML avec ID/IDREF ?

    - Quelles sont les étapes à suivre ensuite pour réorganiser les données grâce à XSL de manière à avoir une présentation sur ma page web du genre :

    Titre
    Nom Prénom
    Lieu
    Date

    Titre
    Nom Prénom
    Lieu
    Date

    [...]

    J'ai regardé un peu sur différents sites, mais j'ai l'impression qu'il me manque une notion évidente...

  7. #7
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par ApprentiXML Voir le message
    Est-ce que c'est bien comme-ça que je peux organiser mes données dans le document XML avec ID/IDREF ?
    Pas du tout.

    C'est bien ça qu'elle ressembleront mais là tu as de simples attributs.

    Pour typer les attributs il faut ajouter une DTD (ou un XSD) à ton XML.
    C'est dans cette DTD que tu pourras dire que l'attribut auteur/@id est de type ID et que l'attribut auteur/@idref est de type IDREF.
    Tu peux d'ailleurs nommer tes attributs autrement que id et idref, tout ce qui importe est le type définit dans la DTD.

    Après, personnellement je ne me suis jamais servi de cette notion en XSL, mais il te faut utiliser la fonction XPath id(valeurDeLaClef) qui te retournera le noeud possédant cet ID.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    D'accord, alors voici ma DTD :

    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
    <!ELEMENT album (artiste, oeuvre)>
    <!ELEMENT artiste (auteur)>
    <!ELEMENT auteur (nom, prenom, age, pays)>
    <!ATTLIST auteur
    	id ID #REQUIRED>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT prenom (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT pays (#PCDATA)>
     
    <!ELEMENT oeuvre (photo)>
    <!ELEMENT photo (titre, lieu, date, auteur)>
    <!ELEMENT titre (#PCDATA)>
    <!ELEMENT lieu (#PCDATA)>
    <!ELEMENT date (#PCDATA)>
    <!ELEMENT auteur EMPTY>
    <!ATTLIST auteur
    	idref IDREF #REQUIRED>

    C'est la première fois que j'en fait une, est-ce que je m'en suis bien sorti ?

    Je vais regarder maintenant la fonction XPath dont tu parles...

    Merci

Discussions similaires

  1. XSL + XML1 + (XML2 memoire en paramètre)
    Par domiq44 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 01/10/2008, 16h49
  2. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29
  3. composant builder4 pour afficher du code html
    Par BranRuz dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2002, 11h35
  4. delphi XML / HTML caractéres speciaux !
    Par adem dans le forum EDI
    Réponses: 2
    Dernier message: 29/08/2002, 17h48
  5. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57

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