[XML-XSL] [Access] Création d'un album photo

Création d'un album photo [XML-XSL] [Access] - XML/XSL - Programmation

Marsh Posté le 01-01-2006 à 22:26:49    

Bonjour à tous,
 
Je suis en train d'essayer de construire un album photo que je souhaite visualisable sur beaucoup de navigateurs Web, n'ayant pas besoin d'un logiciel spécifique pour sa consultation.
 
J'ai donc pensé à le faire en XML où je pourrais stocker les données sous la forme suivante :

Code :
  1. <album>
  2. <personne>
  3. <nom>
  4. <image>
  5. <commentaire></commentaire>
  6. <fichier></ficher>
  7. </image>
  8. <image>
  9. ....
  10. </image>
  11. </personne>
  12. <personne>
  13. ...
  14. </personne>
  15. </album>


 
Ce fichier XML est en fait une organisation et un commentaire des images et serait dans le dossier racine de l'album. Les images sont bien sûr dans des dossiers enfants.
 
J'ai pensé à ce système car il me permettrait (j'espère au bout du compte) d'avoir un album assez dynamique sur des clients (je voudrai mettre cet album sur CD).
 
Je ne voudrai pas réinventer l'eau tiède et je ne sais pas si un tel système d'album existe (sans installation de quelque logiciel que ce soit...).
 
Pour générer le fichier XML, je vais faire appel à Access pour construire l'album. Cette utilisation d'Access permettra à une personne ne connaissant pas XML de modifier l'album...
 
Je ne suis pas arrivé à constituer une base de donnée Access pour obtenir le type de fichier XML que je souhaite.
 
Peut-on réaliser une base de données pour avoir la structure de fichier que je souhaite avoir ?
 
J'ai essayé de faire un bout XSL pour la visualisation de mon album, et je vais être limité par :
- d'une part la structure de mon fichier (Access donnera/donnera pas cette structure ?)
- le passage d'un paramètre du fichier XML vers lui même...
 
Je souhaite en effet pouvoir choisir une personne dans un menu et afficher dans un cadre, une frame ou autre chose les images concernant cette personne...
 
Je pense que ce projet peut être réalisable et n'est pas trop ambitieux au vu des technologies utilisées...
 
Je vous remercie de votre aide.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 01-01-2006 à 22:26:49   

Reply

Marsh Posté le 02-01-2006 à 13:40:27    

J'ai essayé de faire une base de données avec une structure cohérente et d'exporter cette base de données... Le problème est que je ne peux exporter qu'une table à la fois... La structure ne correspond donc pas...
 
J'ai essayé de faire du reverse ingeneering en prenant mon fichier XML décrit plus haut et de l'importer. J'ai comme résultat deux tables sans relations ayant la structure suivante :
 
table personne :
1 seul champ (nom)
 
table image :
2 champs (description, fichier)
 
Faut-il que je me fasse une base de données cohérente avec l'architecture 2 tables et que je fasse un système en VBA qui construise le fichier XML d'export des données où existe t'il un moyen que je n'ai pas vu et qui pourrai me permettre d'obtenir la structure exposée plus haut.
 
Enfin, dernière question... Est-ce que la struture que je souhaite avoir est la meilleure structure pour ce que je veux faire ? Je pense que oui, mais ce n'est qu'un point de vue et je peux avoir une vision étroite de mon problème...
 
Merci de vos réponses  :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 04-01-2006 à 13:23:30    

Je me débrouille autrement...
 
Je fais une requête sur mes deux tables et je crée un fichier type text avec une extension XML.
 

Code :
  1. Set fs = CreateObject("Scripting.FileSystemObject" )
  2. Set a = fs.CreateTextFile(".\fichiertest.xml", True)


 
Puis j'ajoute des lignes de texte à mon fichier XML en parcourant mon recordset et en faisant quelques traitements.
 

Code :
  1. a.WriteLine ("ligne de texte rajoutée" )


 
C'est peut être pas très joli et un peu lent (je verrai quand j'aurai beaucoup d'enregistrements), mais ca marche....


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 04-01-2006 à 18:09:49    

Je continue d'avancer dans mon projet et dans la découverte de problèmes...
 
Je suis en train de construire ma feuille XSL couplée à mon fichier XML (album).
 
Je voudrais pouvoir créer un menu sur le côté correspondant à une visualisation du haut de mon arborescence (personnes de mon album) et lorsqu'on clique dessus, je fais apparaître la partie concernant cette personne dans une partie centrale.
 
Je voudrai utiliser le même fichier de données (XML). Mais j'ai un problème pour passer le paramètre "personne" du menu à la zone centrale.
 
Je pensais qu'avec un with-param, cela irai mais je pense être sur une fausse piste...
 
Avez-vous des suggestions ?
 
Est-il possible de passer un paramètre xsl dans una balise <a href...> ?
 
Il vaut mieux que j'utilise des frames ou des div ?
 
Je vous remercie de vos conseils.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 04-01-2006 à 21:16:57    

Voilà mon fichier XML avec quelques données dedans :
 
album.xml

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <?xml-stylesheet type="text/xsl" href="menu.xsl" ?>
  3. <album>
  4. <personne>
  5. <nom>personne1</nom>
  6. <image>
  7. <description>première image</description>
  8. <fichier>1.jpg</fichier>
  9. </image>
  10. <image>
  11. <description>image 2</description>
  12. <fichier>2.jpg</fichier>
  13. </image>
  14. <image>
  15. <description>image 3</description>
  16. <fichier>3.jpg</fichier>
  17. </image>
  18. </personne>
  19. <personne>
  20. <nom>personne2</nom>
  21. <image>
  22. <description>image floue</description>
  23. <fichier>image2.jpg</fichier>
  24. </image>
  25. </personne>
  26. </album>


 
et voici mon fichier XSL
 
menu.xsl

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="html" media-type="text/html" encoding="ISO-8859-1" />
  4. <xsl:template match="/">
  5. <html>
  6. <head>
  7. </head>
  8. <body>
  9. <table border="1" align="left">
  10.   <xsl:call-template name="menu">
  11.   </xsl:call-template>
  12. </table>
  13. <div align="center" name="div">
  14.   <xsl:call-template name="div">
  15.   </xsl:call-template>
  16. </div>
  17. </body>
  18. </html>
  19. </xsl:template>
  20. <xsl:template name="menu">
  21. <xsl:for-each select="album/personne">
  22. <tr><td><a><xsl:attribute name="href"><xsl:value-of select="nom" /></xsl:attribute><xsl:value-of select="nom" /></a></td></tr> //paramètre à envoyer
  23. </xsl:for-each>
  24. </xsl:template>
  25. <xsl:template name="div">
  26. <table>
  27. <xsl:for-each select="album/personne">
  28. <xsl:if test="nom = parametre à récupérer">
  29. <xsl:for-each select="image">
  30. <tr><td>
  31. <xsl:value-of select="description" />
  32. </td></tr>
  33. <tr><td><img><xsl:attribute name="src"><xsl:value-of select="fichier" /></xsl:attribute></img></td></tr>
  34. </xsl:for-each>
  35. </xsl:if>
  36. </xsl:for-each>
  37. </table>
  38. </xsl:template>
  39. </xsl:stylesheet>


 
Ce que j'essaie de faire, c'est de mettre un passage de paramètre du menu à la div.


Message édité par Manu la Science le 04-01-2006 à 21:18:15

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 05-01-2006 à 18:17:50    

J'avance un peu dans mon projet mais je rencontre des problèmes...
 
J'ai trouvé un truc sur http://css.alsacreations.com/Tutor [...] le-fenetre et j'essaie de l'adapter à mon code XML.
 
J'ai un soucis pour le code suivant :
 

Code :
  1. <table border="1" align="left">
  2.   <xsl:call-template name="menu">
  3.     <xsl:with-param name="nb_id" select="1" /> 
  4.   </xsl:call-template>
  5. </table>
  6. <xsl:template name="menu">
  7. <xsl:param name="nb_id" />
  8. <xsl:choose>
  9. <xsl:when test="$nb_id &lt;= 100">
  10. <tr><td><a class="pop"><xsl:attribute name="href">#pop<xsl:value-of select="$nb_id" /></xsl:attribute><xsl:value-of select="nom" /></a></td></tr>
  11. <xsl:call-template name="menu">
  12. <xsl:with-param name="nb_id" select="$nb_id + 1" />
  13. </xsl:call-template>
  14.   </xsl:when>
  15.   <xsl:otherwise>
  16.    <xsl:call-template name="interruption" />
  17.   </xsl:otherwise>
  18. </xsl:choose>
  19. </xsl:template>


 
Mon problème est dans la construction de la balise <a href=...>. Le nom de la personne n'apparaît pas. C'est un peu normal puisque je ne réussie pas à mettre un code me permettant de sélectionner une personne, puis une autre en même temps que l'incrémentation de "nb_id".
De plus, j'aimerai remplacer "100" par le nombre de balise personne de mon fichier XML, mais en vain.
 
Si quelqu'un de plus doué que moi peut m'aider, car là je sèche un peu... Merci


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 05-01-2006 à 19:45:45    

Salut.
 
Je te conseille plutôt de faire générer du HTML à Excel, car tous les navigateurs ne savent pas transformer des feuilles XML à partir d'une feuille XML !
 
Heureusement, tout n'est pas à mettre à la poubelle : en VBA, tu peux instancier DOM et transformer le document et récupérer l'ouput en HTML, donc tu peux garder ta structure XML/XSL, mais je te déconseille de diffuser ce support.

Reply

Marsh Posté le 05-01-2006 à 20:15:58    

Je te remercie Arjuna,
 
Mon petit programme est sous Access 2002 et c'est lui qui fait le fichier XML.
 
Pour réaliser le html, il faut que je fasse le fichier XSL,non ? Et après j'utilise VBA pour le parser via le DOM (dont j'ignore encore totalement le fonction dans VBA, un autre problème pour moi en vue  :pt1cable: ...) ?
 
Sinon, concernant le XSL, est-ce que quelqu'un sait comment mettre un xsl:for-each dans un xls:when ou faire un équivalent ?
 
Merci de votre aide  :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 06-01-2006 à 18:03:28    

Je suis arrivé à faire à peu près ce que je voulais avec mon problème de XSL...
 
Je vous poste mon code dès que je l'aurai un peu arrangé.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 12-01-2006 à 15:15:36    

Voici mon code de génération de mon XML :
 

Code :
  1. Sub construction_xml()
  2. Dim SQL_ligne As String
  3. Dim var As String
  4. Dim premiere_personne As String
  5. Dim personne_en_cours As String
  6. Set fs = CreateObject("Scripting.FileSystemObject" )
  7. Set a = fs.CreateTextFile(".\fichiertest.xml", True)
  8. Dim cnnLocal As New ADODB.Connection
  9. Dim rstCurr As New ADODB.Recordset
  10. Set cnnLocal = CurrentProject.Connection
  11. rstCurr.Open "SELECT personne.nom, personne.prenom, image.id_image, image.description, image.fichier FROM personne INNER JOIN [image] ON personne.id_personne = image.id_personne ORDER BY personne.nom, personne.prenom;", cnnLocal, adOpenStatic, adLockPessimistic
  12. premiere_personne = rstCurr("nom" )
  13. a.writeLine ("<?xml version='1.0' encoding='iso-8859-1'?>" )
  14. a.writeLine ("<?xml-stylesheet type='text/xsl' href='menu.xsl'?>" )
  15. a.writeLine ("<album>" )
  16. a.writeLine ("<personne>" )
  17. a.writeLine ("<nom>" & rstCurr("nom" ) & "</nom>" )
  18. Do While Not rstCurr.EOF
  19.     personne_en_cours = rstCurr("nom" )
  20.     If personne_en_cours <> premiere_personne Then
  21.         a.writeLine ("</personne>" )
  22.         a.writeLine ("<personne>" )
  23.         a.writeLine ("<nom>" & rstCurr("nom" ) & "</nom>" )
  24.     End If
  25.     a.writeLine ("<image>" )
  26.     a.writeLine ("<description>" & rstCurr("description" ) & "</description>" )
  27.     a.writeLine ("<fichier>" & rstCurr("fichier" ) & "</fichier>" )
  28.     a.writeLine ("</image>" )
  29.     premiere_personne = rstCurr("nom" )
  30.     rstCurr.MoveNext
  31. Loop
  32. a.writeLine ("</personne>" )
  33. a.writeLine ("</album>" )
  34. a.Close
  35. End Sub


 
Si ca peut servir à d'autres...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed