XQuery quelques xml des dossiers?

Est-il possible d'ouvrir 2 Le document est xQuery et faire une connexion sur eux?
Invité:

Blanche

Confirmation de:

Oui ici
http://www.w3.org/TR/xquery/%2 ... tions
de
http://www.w3.org/TR/xquery
XQuery .:

"Les connexions qui associent des données à partir de sources multiples à un résultat sont un type de demande très important. Dans cette section, nous illustrons comment plusieurs types de composés peuvent être exprimés dans XQuery. Nous allons baser nos exemples dans les trois documents suivants:

Document avec le nom
parts.xml

, Plusieurs éléments
part

; Chaque élément
part

, À son tour, contient des sous-éléments
partno

et
description

.

Document avec le nom
suppliers.xml

, Plusieurs éléments
supplier

; Chaque élément
supplier

, À son tour, contient des sous-éléments
suppno

et
suppname

.

Document avec le nom
catalog.xml

, contenant des informations sur les relations entre fournisseurs et détails. Document de répertoire contient de nombreux éléments
item

, dont chacun , À son tour, contient des sous-éléments
partno

,
suppno

et
price

.

Connexion normale /"inner"/ Renvoie des informations de deux sources ou plus connexes, comme indiqué dans l'exemple suivant, qui allie des informations de trois documents. Cet exemple crée "descriptive catalog", Dérivé du document de répertoire, mais contenant des descriptions de pièces au lieu de nombres de pièces et noms de fournisseurs au lieu de numéros de fournisseurs. Le nouveau catalogue est commandé par ordre alphabétique par la description de la pièce et, deuxièmement, par le nom du fournisseur. *


<descriptive-catalog>
{
for $i in fn:doc/"catalog.xml"//items/item,
$p in fn:doc/"parts.xml"//parts/part[partno = $i/partno],
$s in fn:doc/"suppliers.xml"//suppliers
/supplier[suppno = $i/suppno]
order by $p/description, $s/suppname
return
<item>
{
$p/description,
$s/suppname,
$i/price
}
</item>
}
</descriptive-catalog>


La requête précédente renvoie des informations uniquement sur des détails fournisseurs de fournisseurs et de fournisseurs avec des pièces. Extérieur

composé

- Il s'agit d'une connexion qui permet d'économiser des informations d'une ou de plusieurs des sources participantes, y compris des éléments qui n'ont pas d'élément approprié dans une autre source. Par exemple,

Connexion externe gauche

Entre les fournisseurs et les détails peuvent renvoyer des informations sur les fournisseurs qui n'ont pas les pièces correspondantes."

Notez que XQuery n'a pas de fonction standard

document// /c'est

http://www.w3.org/TR/xslt20/#function-document
XSLT/ et a plutôt

Fonction doc//, qui fait partie "
http://www.w3.org/TR/xpath-functions
XQuery 1.0 et XPath 2.0 ".

Dans la réponse, Chris a au moins deux erreurs

:

XQuery Sensible à K.
http://www.w3.org/TR/xquery/#lexical-structure
-Fréquences de mots-clés utilisés dans l'exemple des chuses ne seront pas autorisés par le processeur correspondant XQuery.

Pas besoin de préfixer les fonctions standard, telles que doc//, Je viens de citer la spécification XQuery, qui a préfixe

. Sinon dans mon propre code, je baisserais le préfixe "
fn

".

Fonction document// non-fonction standard

XQuery/XPath . Au lieu de cela, vous devriez

http://www.w3.org/TR/xpath-functions/#func-doc
Fonction doc//.

Dominique

Confirmation de:

C'est plus facile que ça /au moins en utilisant SAXON/:


let $items := /
doc/"file1.xml"/ ,
doc/"file2.xml"/ ,
doc/"file3.xml"/
/

for $x in $items ...

Catherine

Confirmation de:

DANS XQuery, Si vous écrivez quelque chose comme ce qui suit:


for $x in doc/'doc1.xml'///a
for $y in doc/'doc2.xml'///a
where $x/@name = $y/@name
return $x


Alors votre processeur XQuery Il devrait y avoir assez intelligent pour déterminer quelle est la connexion.

Vous ne signalez jamais clairement XQuery, Qu'est-ce qui est connecté. Sujet total B. XQuery réside dans le fait que votre programme dit

Quel

informations que vous voulez obtenir et non

comme

Il est calculé.

Bien que cela puisse sembler que vous avez une boucle à plusieurs reprises sur le deuxième document, en pratique un véritable processeur XQuery l'exécutera plus raisonnablement, approximativement similaire à l'opérateur suivant SQL /ma SQL très rouillé, donc je m'excuse si cette syntaxe est complètement infiden/


SELECT doc1.a
FROM doc1 INNER JOIN doc2
WHERE doc1.name = doc2.name


Référence XMark Contient plusieurs exemples de demandes de faire attention à. En particulier, les demandes de 9 par 12 Les connexions sont effectuées.

Pour répondre aux questions, connectez-vous ou registre