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

XQUERY/SGBD XML Discussion :

Requêtes XQuery qui ne fonctionnent pas [XQUERY]


Sujet :

XQUERY/SGBD XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 26
    Points
    26
    Par défaut Requêtes XQuery qui ne fonctionnent pas
    Bonjour,

    J'aurais deux question a vous poser en XQuery. Je n'arrive pas a trouver la solution qui doit être simple. Pouvez-vous m'aiguiller ?

    Question 1:

    Définir une fonction qui transforme 1 noeud bookmark passé en paramètre en 1 noeud élément div,tel que
    • Le titre et l'url sont mis dans un premier paragraphe (élément p) qui contient un lien (élément a) ayant pour référence l'url et pour contenu textuel, le titre s'il existe et à défaut l'url.
    • Si la description existe elle est mise dans un second paragraphe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare function local:sortie_bookmarks($bm as element(bookmark)) as element(div){
    element div {
        element p {
          <a href='{$bm/@url}'>{if (exists($bm/title/text())) then ($bm/title/text()) else ($bm/@url)}</a>
        },
        element p {
          if (exists($bm/description/text())) then $bm/description/text() else ()
        }
      }
    };
    
    local:sortie_bookmarks(//bookmark[@url="http://www.linux.org"])
    le code ci-dessous ne fonctionne pas correctement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href='{$bm/@url}'>{if (exists($bm/title/text())) then ($bm/title/text()) else ($bm/@url)}</a>
    Question 2:

    Je sèche sur cette question:

    URL de l'XML http://www.fil.univ-lille1.fr/~caron.../bookmarks.xml

    Définir une fonction qui transforme 1 noeud categorie passé en paramètre en 1 noeud div,tel que

    Le nom de la catégorie apparaît en titre h3
    La description est rangée dans un paragraphe
    Puis, on affiche récursivement les sous-catégories et les bookmarks (cf question précédente)

    J'ai commence par cela mais cela ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare function local:sortie_categorie($cat as element(categorie)) as element(div){
    element div {
        element h3 {
          $cat/@nom/text()
        },
        element p {
          $cat/bokmark/decription/text()
        }
      }
    };
     
    local:sortie_bookmarks(//bookmark[@url="http://www.lesite.org"])
    Merci pour votre aide,

    Nikolas

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Question 1 :

    Quand tu sélectionnes $bm/@url tu sélectionnes un attribut qui s'appelle url. Donc quand tu produis ça entre <a> et </a> tu produis un attribut nommé url. Un attribut doit toujours être associé à un élément, ce qui fait que là, l'attribut url va aller se mettre dans la balise <a>.

    Bref tu as besoin de produire un texte et pas un attribut. Une solution est de faire string($bm/@url). La fonction string(), comme son nom l'indique, transforme ce qu'on lui donne en string. Dans le cas d'un attribut, ça consiste à prendre la valeur de cet attribut.

    Tu te demandes certainement pourquoi ça marchait avec href='{$bm/@url}' qui sélectionne exactement la même chose. Oui, cela aussi sélectionne un attribut. Mais dans le but de produire le contenu d'un autre attribut. Le contenu produit à l'intérieur d'un attribut est automatiquement converti en string (puisque rien d'autre n'est possible, contrairement au contenu d'un élément,) et donc tu n'as pas besoin de le faire toi-même.

    Question 2 :

    "Cela ne fonctionne pas" c'est pas très clair. Juste une remarque donc.

    On ne peut pas faire @nom/text(). Cela veut dire "sélectionner l'attribut nom. Puis, parmi ses enfants, sélectionner les nœuds textes." Un attribut n'a pas d'enfant, que ce soit des nœuds textes ou autre chose. Un attribut a un nom, une valeur, et c'est tout. Si on lui cherche des enfants, on ne trouve rien.

    Ne mets pas ce /text() inutile. Par contre tu devras refaire ce que j'ai dit en question 1.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Merci pour ton aide thelvin, je teste...

    Nikolas

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Question complementaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    declare function local:sortie_categorie($bks as element(bookmarks)) as element(div){
    element div {
        element h3 {
          for $y in $bks
          return $y
        }
      }
    };
     
    local:sortie_categorie(/*)
    Je souhaite avoir tout les attributs nom de la première catégorie et je n'y arrive pas !!! $y me donne les catégories et les sous-categories !! J'ai essayé avec string, $bks/@nom etc....

    Pourriez-vous m'aider ?

    Nikolas

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je comprends pas trop de quoi tu parles...

    "Tous les attributs nom de la première catégorie"... La première catégorie n'a qu'un seul attribut nom bien sûr, puisqu'un élément ne peut pas avoir plusieurs fois le même attribut...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Interbase requête SQL qui ne fonctionne pas
    Par colorid dans le forum InterBase
    Réponses: 6
    Dernier message: 20/11/2007, 17h36
  2. Requête hibernate qui ne fonctionne pas
    Par sheura dans le forum Hibernate
    Réponses: 4
    Dernier message: 28/09/2007, 16h20
  3. requête match qui ne fonctionne pas.
    Par sam01 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/05/2006, 20h28
  4. [MySQL] Requête update qui ne fonctionne pas
    Par Sylvain245 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/12/2005, 16h40
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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