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 :

Comment récupérer un element / n en fonction d'un de ses attribut


Sujet :

XQUERY/SGBD XML

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut Comment récupérer un element / n en fonction d'un de ses attribut
    Bonjour,

    Tout d'abord, je débute vraiment sous XQuery.
    Mais il se trouve que j'en aurais besoin.

    Je voudrais donc récupérer dans un fichier xml d'une base existDB toutes les balises item dont l'attribut = "fragment".
    le 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
    	....</teiHeader>
    	<text xml:id="T2377" type="scenarique" subtype="PP">
    		<body>
    			<pb xml:id="g226_3_f_015__r____" type="recto" n="1"/>
    			<list type="gloss">
    				<head>
    					<term dbp:hand="GF-encre" rend="underline">
    						<choice>
    							<abbr>gds</abbr>
    							<expan>g<ex>ran</ex>ds</expan>
    						</choice>
    						<choice>
    							<abbr>Hom</abbr>
    							<expan>Hom<ex>mes</ex></expan>
    						</choice>
    					</term>
    				</head>
    				<label>
    					<term dbp:hand="GF-encre">Luther</term>
    				</label>
    				<item type="fragment" n="1">
    					<cit dbp:hand="GF-encre">
    						<quote>donna à la cupidité des princes <choice>...
    mais je n'arrive au mieux qu'a récupérer tout le fichier
    la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare namespace dbp="http://dossiers-flaubert.ish-lyon.cnrs.fr/ns/1.0";
    let $doc := doc("/db/flaubert/g226_3_f_015__r____-ver3.xml")
    return $doc//item[@type="fragment"]
    celle-ci ne fonctionne pas; et si je return $doc seul j'obtiens tout le document
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  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
    Je connais pas grand-chose aux BDD XML, mais je jette une idée comme ça :
    Avec le XPath

    $doc//item[@type="fragment"]

    tu impliques que l'élément <item> n'est dans aucun namespace.
    C'est voulu ? C'est sûr ? Il n'y a pas de xmlns="machin" nulle part dans ton XML ? Je trouve inhabituel qu'il y ait du dbp:hand par-ci par-là dans les attributs, mais que les éléments principaux n'aient pas de namespace.

    Si par le plus grand des hasards il y avait bel et bien, à la racine, un namespace genre

    xmlns="http://machin.com/truc"

    Il te faudrait quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare namespace truc="http://machin.com/truc";
     
    return $doc//truc:item[@type="fragment"]
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    J'ai résolu mon problème ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $_XQUERY1 = 'declare namespace dbp="http://dossiers-flaubert.ish-lyon.cnrs.fr/ns/1.0";
    let $doc := doc("/db/ma_base/g...-ver3.xml")
    for $fragment in $doc//*:div[@*:type="fragment"]|$doc//*:item[@*:type="fragment"]
    	return <record><fragment>{$fragment[@n="1"]}</fragment></record>';
     
    $result1 = $db->executeQuery($_XQUERY1);
     
    $_RESULTID1 = $result1;
    $fragment = $db->retrieve($_RESULTID1, 0);
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  4. #4
    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
    C'est bien pour dépanner, mais une idée intéressante serait d'apprendre les namespaces en XML. Ce n'est pas difficile, pas peur, pas peur.

    - Je ne connais pas grand-chose aux BDD XML, mais j'ai du mal à croire qu'il soit si compliqué de trouver le vrai, bon, namespace des balises <div> et <item>. Bon, après, on peut trouver qu'il est plus court de noter *:item que rss:item. C'est possible. Les risques de problème sont assez faibles.

    - type étant un attribut, nous pouvons voir dans ton exemple qu'il n'a pas de préfixe, donc pas de namespace.
    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. [AC-2007] Comment récupérer 2 résultats avec 1 fonction ?
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/08/2010, 17h14
  2. comment récupérer un element dans un listbox via un template d'element
    Par Pol63 dans le forum Windows Presentation Foundation
    Réponses: 16
    Dernier message: 28/04/2009, 23h17
  3. Réponses: 3
    Dernier message: 23/01/2007, 09h20
  4. Réponses: 11
    Dernier message: 06/09/2006, 12h48
  5. Réponses: 13
    Dernier message: 07/05/2006, 11h54

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