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 :

Typage et conversion des expressions


Sujet :

XML/XSL et SOAP

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Typage et conversion des expressions
    Bonjour,
    j' apprends XPath et j'aurais qques questions à vous soumettre au sujet du typage des expressions.
    je prends deux exemples. pouvez vous me dire si les commentaires que je fais sont corrects.

    ----- exemple 1 -----
    // FILM[TITRE = "le seigneur des anneaux"]

    TITRE est un noeud et "le seigneur des anneaux" est une string
    TITRE est converti en string en convertissant récursivement les valeurs des ses fils en string et en les concaténant.
    question : que se passe-t-il si il y a plusieurs TITRE dans mon FILM, i.e., j'ai un ensemble de noeuds?

    ----- exemple 2 -----
    // FILM[TITRE]

    TITRE est un noeud converti en booléen
    [TITRE] = false si le noeud est null, true sinon
    même question : que se passe-t-il si il y a plusieurs TITRE dans mon FILM?

    Merci pour votre aide

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    [TITRE = "le seigneur des anneaux"]

    Il existe au moins un Titre , noeud de type element (balise) dont la valeur (concatenation de ses noeuds text() et de ceux de ses descendant element) est identique à la chaine le seigneur des anneaux

    // FILM[TITRE]
    FILM possède au moins un fils Titre de type element :celui -ci peut tres bien être vide (pas de fils qu'ils soient text(), element ou autre)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    merci pour ton aide

    Citation Envoyé par Erwy
    [TITRE = "le seigneur des anneaux"]
    Il existe au moins un Titre , noeud de type element (balise) dont la valeur (concatenation de ses noeuds text() et de ceux de ses descendant element) est identique à la chaine le seigneur des anneaux
    maintenant si j'ai
    //FILM[TITRE = ""]
    est ce qu'un FILM est retourné si il n'a pas de fils TITRE

    donc les attributs ne sont pas pris en compte quand TITRE est converti en string?

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par qouify


    maintenant si j'ai
    //FILM[TITRE = ""]
    est ce qu'un FILM est retourné si il n'a pas de fils TITRE

    donc les attributs ne sont pas pris en compte quand TITRE est converti en string?
    Je crains que tu ne comprenne pas Il n'y a pas de "conversion" le signe egal "=" compare les valeurs textuels de noeuds

    //FILM[TITRE = ""]

    Il existe au moins un Titre , noeud de type element (balise) dont la valeur est null/vide (donc pas de noeud text() mais peut tresd bien contenir d'autre noeud element)


    C'est un article en ecriture/correction mais ca t'aidera peut être a comprendre
    http://erwy.developpez.com/cours/langage/xpath/types/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Erwy
    la valeur (concatenation de ses noeuds text() et de ceux de ses descendant element)
    c'est ce que j'entends par conversion

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    merci pour ton lien.

    donc, si je comprends bien,

    //FILM[TITRE = ""]

    n'est pas équivalent à

    //FILM[string(TITRE) = ""]

    puisque string(TITRE) = "" si il n'y a pas de titre

  7. #7
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par qouify
    c'est ce que j'entends par conversion
    Sauf que si on parlait objet (ce qui n'est pas le cas), ce n'est qu'une des propriétés de ce noeud, merci de faire attention au vocabulaire qui peut facilement induire en erreur (ou la prolonger...)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Erwy
    Sauf que si on parlait objet (ce qui n'est pas le cas), ce n'est qu'une des propriétés de ce noeud, merci de faire attention au vocabulaire qui peut facilement induire en erreur (ou la prolonger...)
    ok, désolé pour ce manque de rigueur

  9. #9
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par qouify
    merci pour ton lien.

    donc, si je comprends bien,

    //FILM[TITRE = ""]

    n'est pas équivalent à

    //FILM[string(TITRE) = ""]

    puisque string(TITRE) = "" si il n'y a pas de titre
    encore moins puisqu'en general pour les fonctions xpath prevu pour 1 noeud si on leur met un ensemble elle ne prenne que le premier ainsi

    //FILM[string(TITRE) = ""]

    equivaut à
    FILM dont le premier fils TITRE de type element (s'il en a un) et dont la valeur textuel a été converti en chaine (cela aurait pu être coverti en nombre et dans ce cas 01=1 par exemple) est egal à : vide/nulle

  10. #10
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Par contre dans l'implementation que j'utilise si il n'y a pas de fils TITRE
    //FILM[string(TITRE) = ""]

    marche

    mais il faut écrire si on recherche ce cas

    //FILM[not(TITRE) ]

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    donc l'algo pour l'évaluation de [TITRE = ""] est le suivant

    si TITRE est l'ensemble vide alors
    renvoyer FALSE
    sinon si valeur textuelle du premier element de l'ensemble TITRE est "" alors
    renvoyer TRUE
    sinon
    renvoyer FALSE
    fin si

    vrai?

  12. #12
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    false()

    si TITRE est l'ensemble vide alors
    renvoyer FALSE
    sinon si la valeur textuelle d'un des elements de l'ensemble TITRE est "" alors
    renvoyer TRUE
    sinon
    renvoyer FALSE
    fin si

    tu confond avec string(TITRE) mais comme deja dit je me mefierais suivant les implementations pour le
    si TITRE est l'ensemble vide alors
    renvoyer FALSE

    dans ce cas

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    ok. merci bcp pour ton aide.
    je trouve ca tout de même assez contre-intuitif.
    je pensait que l'algo était plus simplement :

    si la valeur textuelle de l'ensemble TITRE est "" alors
    renvoyer TRUE
    sinon
    renvoyer FALSE
    fin si

    avec

    valeur textuelle d'un ensemble E =
    si E est vide alors ""
    sinon valeur textuelle d'un élément de E

  14. #14
    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,

    l'algorithme précis tel qu'il figure dans la spéc du W3C est celui-ci :
    Si les deux objets à comparer sont des ensembles de noeuds, alors la comparaison ne sera vraie que si et seulement s'il y a un noeud dans chacun des deux ensembles qui satisfassent à la condition de comparaison de type string-values. Si l'un des objets à comparer est un ensemble de noeuds et l'autre est un nombre, alors la comparaison sera vraie si et seulement s'il existe un noeud de l'ensemble de noeuds tel que le résultat de la comparaison entre le nombre à comparer et le résultat de la conversion de son contenu textuel obtenu par string-value en un nombre par l'utilisation de la fonction number est vraie. Si l'un des objets à comparer est un ensemble de noeuds et l'autre une chaîne de caractères, alors la comparaison est vraie si et seulement s'il existe un noeud de l'ensemble des noeuds tel que le résultat de la comparaison de son contenu textuel obtenu par string-value et la chaîne de caractères est vraie. Si l'un des objets est un ensemble de noeuds et l'autre un booléen, alors la comparaison sera vraie si et seulement si le résultat de la comparaison entre le booléen et le résultat de la conversion de l'ensemble de noeuds en booléen avec la fonction boolean est vrai.
    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

Discussions similaires

  1. Conversions des typages dans un wxString
    Par jamesb dans le forum wxWidgets
    Réponses: 2
    Dernier message: 13/02/2009, 10h51
  2. Conversion des heures en minutes
    Par lacrevette dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/02/2005, 17h50
  3. Conversion et re-conversion des caractères reservé à MySQL
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/06/2004, 14h23
  4. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14

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