J'essaie de trouver des employés qui travaillent sur des projets situés à Houston, mais le département Le projet est logé dans le Houston. J'essayais de modéliser l'expression après Cet exemple d'expressions de Flwor, mais la requête ne renvoie rien à et il devrait renvoyer des résultats.
Edit: Voici le Entrée . p>
3 Réponses :
Un pour code> est suffisant; Sinon, vous ira bien sur tous les employés à plusieurs reprises:
let $doc := doc(...)
for $e in $doc//employee
let $p := $doc//project[@pnumber = $e/projects/worksOn/@pno]
where $p[plocation = 'Houston']
and $doc//department[@dno = $p/@controllingDepartment]
[not(locations/location = 'Houston')]
return <e>{ $e/fname }{ $e/lname }{ $e/address }</e>
Désolé j'ai ajouté le fichier d'entrée.
Légèrement édité; Cette version de la requête sera évaluée plus rapidement par certains processeurs XQuery (tels que basex).
typo: Vous avez eu une "s" "s": était et $ p / projet [pluctions = "houston"] code> p>
compléments code>. p>
Hmm, cela produit beaucoup de réplication. J'ai essayé des valeurs distinctes (requête ci-dessus) code> mais il est dit qu'il existe une erreur de syntaxe, mais il est recommandé de le faire de cette façon de
Une seule expression XPath 2.0 peut sélectionner tous les employés recherchés:
/*/employees /*[projects/*/@pno = /*/projects/* [plocation eq 'Houston' and boolean (for $dn in @controllingDepartment return /*/departments/* [@dno eq $dn and not(locations/location = 'Houston' ) ] ) ]/@pnumber ]
Xpath est-il meilleur d'une manière ou d'une autre que d'utiliser XQuery?
En fait, le seul avantage utilisant Pure XPath est que vous pouvez également l'utiliser avec des processeurs qui ne supportent pas XQuery.
@ mnky9800n: @_christian Grün a répondu à votre question. Dans un sens, être capable d'exprimer quelque chose dans Pure XPath rend votre solution finalement plus portable. Par exemple, vous pouvez évaluer cette expression XPath non seulement avec votre processeur XQuery (XPath est un sous-ensemble de XQuery) mais également dans n'importe quel processeur XSLT 2.0 ou 3.0 XSLT ou dans tout moteur XPath 2,0 ou 3.0 autonome (hélas que je suis conscient que de psychipathe).
@ mnky9800n: Certaines personnes préfèrent également la syntaxe plus serrée de XPath sur la xquery "Verbose". XPath devient encore plus attrayante en 3.0 avec les fonctions supérieures d'ordre (HOF) et la possibilité de définir des éléments de fonction anonymes en ligne. Je suppose que pour 4.0, nous aurons sérieusement besoin d'une extension de fichier .xpath et d'une "clause d'importation" pour XPath. (: Espérons que cela arrive bientôt :)
Vous avez oublié de nous montrer le document XML.
Désolé j'ai ajouté le fichier d'entrée.