Fonctions XPath/XQuery : Séquence

www.altova.com Agrandir/Réduire tout Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Annexes > Fonctions XSLT et XPath/XQuery > Fonctions d'extension Altova >

Fonctions XPath/XQuery : Séquence

Les fonctions d'extension de la séquence d'Altova peuvent être utilisées dans les expressions XPath et XQuery et proposent des fonctions supplémentaires pour le traitement des données. Les fonctions dans cette section peuvent être utilisées avec les moteurs XPath 3.0 et XQuery 3.0 d'Altova. Ils sont disponibles dans des contextes XPath/XQuery.

 

Note concernant le nommage de fonctions et de l'applicabilité de la langue

Les fonctions d'extension Altova peuvent être utilisées dans les expressions XPath/XQuery. Elles fournissent des fonctions supplémentaires aux fonctions d'ores et déjà disponibles dans la librairie standard des fonctions XPath, XQuery et XSLT. Les fonctions d'extension Altova se trouvent dans l'espace de nom des fonctions d'extension Altova, http://www.altova.com/xslt-extensions, et sont indiquées dans cette section par le préfixe altova:, qui est présupposé être lié à cet espace de nom. Veuillez noter que, en ce qui concerne les versions futures de votre produit, la prise en charge d'une fonction peut être interrompue et le comportement de certaines fonctions peut changer. Veuillez consulter la documentation lors des publications à venir pour plus d'informations concernant la prise en charge des fonctions d'extension Altova de cette version.

 

Fonctions XPath (utilisées dans les expressions XPath dans XSLT) :

XP1 XP2 XP3.1

Fonctions XSLT (utilisées dans les expressions XPath dans XSLT) :

Xslt1 XSLT2 XSLT3

Fonctions XQuery (utilisées dans les expressions XQuery dans XQuery) :

XQ1 XQ3.1

 

 

Click to expand/collapseattributes [altova:]

altova:attributes(AttributeName as xs:string) as attribute()*     XP3.1 XQ3.1

Retourne tous les attributs possédant un nom local qui est le même que le nom fourni dans l'argument d'entrée, AttributeName. La recherche est sensible à la casse et est conduite le long de l'axe attribute:: . Cela signifie que le nœud contextuel doit être le nœud d'élément parent.

altova:attributes("MyAttribute") retourne MyAttribute()*

 

altova:attributes(AttributeName as xs:string, SearchOptions as xs:string) as attribute()*     XP3.1 XQ3.1

Retourne tous les attribut possédant un nom local qui est le même que le nom fourni dans l'argument d'entrée, AttributeName. La recherche est sensible à la casse et est conduite le long de l'axe attribute:: . Le nœud contextuel doit être le nœud d'élément parent. Le deuxième argument est une chaîne contenant des flags optionnels. Les flags disponibles sont :
r = passe à une recherche d'expression régulière ; AttributeName doit alors être une chaîne de recherche d'expression régulière ;
f = si cette option est spécifiée, alors AttributeName fournit une concordance complète ; dans le cas contraire, AttributeName ne nécessite qu'une concordance partielle d'un nom d'attribut pour retourner cet attribut. Par exemple : si f n'est pas spécifié, MyAtt retournera MyAttribute;
i = passe à une recherche insensible à la casse ;

p = comprend le préfixe d'espace de nom dans la recherche ; AttributeName devrait ensuite contenir le préfixe d'espace de nom, par exemple : altova:MyAttribute.
Les flags peuvent être écrits dans n'importe quel ordre. Les flags invalides généreront des erreurs. Un ou plusieurs flags peuvent être omis. La chaîne vide est permise et produire le même effet que la fonction n'ayant qu'un  seul argument (signature précédente). Néanmoins, une séquence vide n'est pas permise en tant que le deuxième argument.

altova:attributes("MyAttribute", "rfip") retourne MyAttribute()*
altova:attributes("MyAttribute", "pri") retourne MyAttribute()*
altova:attributes("MyAtt", "rip") retourne MyAttribute()*
altova:attributes("MyAttributes", "rfip") ne retourne aucune correspondance.
altova:attributes("MyAttribute", "") retourne MyAttribute()*
altova:attributes("MyAttribute", "Rip") retourne une erreur de flag non reconnu.
altova:attributes("MyAttribute", ) retourne une erreur d'argument manquant.

 

 

Click to expand/collapseelements [altova:]

altova:elements(ElementName as xs:string) as element()*     XP3.1 XQ3.1

Retourne tous les éléments qui ont un nom local identique au nom fourni dans l'argument d'entrée, ElementName. La recherche est sensible à la casse et est conduite le long de l'axe child::. Le nœud contextuel doit être le nœud parent de/s l'élément/s recherché.

altova:elements("MyElement") retourne MyElement()*

 

altova:elements(ElementName as xs:string, SearchOptions as xs:string) as element()*     XP3.1 XQ3.1

Retourne tous les éléments qui ont un nom local identique au nom fourni dans l'argument d'entrée, ElementName. La recherche est sensible à la casse et est conduite le long de l'axe child::.  Le nœud contextuel doit être le nœud parent de/s l'élément/s recherché. Le second argument est une chaîne contenant des flags optionnels. Les flags disponibles sont :

r = passe à une recherche d'expression régulière ; ElementName doit alors être une chaîne de recherche d'expression régulière ;
f = si cette option est spécifiée, alors ElementName fournit une concordance complète ; dans le cas contraire, ElementName ne nécessite qu'une concordance partielle d'un nom d'élément pour retourner cet élément. Par exemple : si f n'est pas spécifié, MyElem retournera MyElement ;
i = passe à une recherche insensible à la casse ;

p = comprend le préfixe d'espace de nom dans la recherche ; ElementName devrait ensuite contenir le préfixe d'espace de nom, par exemple : altova:MyElement.
Les flags peuvent être écrits dans n'importe quel ordre. Les flags invalides généreront des erreurs. Un ou plusieurs flags peuvent être omis. La chaîne vide est autorisée et produira le même effet que la fonction n'ayant qu'un argument (signature précédente). Néanmoins, une séquence vide n'est pas autorisée.

altova:elements("MyElement", "rip") retourne MyElement()*
altova:elements("MyElement", "pri") retourne MyElement()*
altova:elements("MyElement", "") retourne MyElement()*
altova:attributes("MyElem", "rip") retourne MyElement()*
altova:attributes("MyElements", "rfip") retourne aucune correspondance
altova:elements("MyElement", "Rip") retourne une erreur flag-non reconnu.
altova:elements("MyElement", ) retourne une erreur second-argument-manquant.

 

 

Click to expand/collapsefind-first [altova:]

altova:find-first((Sequence as item()*)(Condition( Sequence-Item as xs:boolean)) as item()?     XP3.1 XQ3.1

Cette fonction prend deux arguments. Le premier argument est une séquence d'un ou de plusieurs items de tout type de données. Le second argument, Condition, est une référence à une fonction XPath qui prend un argument (possède une arité de 1) et retourne un booléen. Chaque item de Sequence est soumis à son tour à la fonction référencée dans Condition. (Rappel : cette fonction prend un seul argument.) Le premier item Sequence qui cause la fonction dans Condition à évaluer à true() est retourné en tant que le résultat de altova:find-first, et l'itération s'arrête.

 

altova:find-first(5 to 10, function($a) {$a mod 2 = 0}) retourne xs:integer 6

L'argument Condition référence la fonction en ligne XPath 3.0, function(), qui déclare une fonction en ligne nommée $a puis la définit. Chaque item dans l'argument Sequence de altova:find-first est passé à son tour à $a en tant que sa valeur d'entrée. La valeur d'entrée est testée sur la condition dans la définition de la fonction ($a mod 2 = 0). La première valeur d'entrée pour satisfaire cette condition est retournée en tant que le résultat de altova:find-first (dans ce cas 6).

 

altova:find-first((1 to 10), (function($a) {$a+3=7})) retourne xs:integer 4

 

 

Autres exemples

Si le fichier C:\Temp\Customers.xml existe :

altova:find-first( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) retourne xs:string C:\Temp\Customers.xml

 

Si le fichier C:\Temp\Customers.xml n'existe pas et que http://www.altova.com/index.html existe :

altova:find-first( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) retourne xs:string http://www.altova.com/index.html

 

Si le fichier C:\Temp\Customers.xml n'existe pas, et que http://www.altova.com/index.html n'existe pas non plus :

altova:find-first( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) ne retourne aucun résultat

 

Notes à propos des exemples indiqués ci-dessus

La fonction XPath 3.0, doc-available, prend un seul argument de chaîne, qui est utilisé en tant qu'URI, et retourne true si un nœud de document est trouvé à l'URI soumis. (Le document à l'URI soumis doit donc être un document XML.)
La fonction doc-available peut être utilisée pour Condition, le second argument de altova:find-first, parce qu'il ne prend qu'un seul argument (arité=1), parce qu'il prend un item() en tant qu'entrée (une chaîne qui est utilisée en tant qu'URI), et retourne une valeur booléenne.
Veuillez noter que la fonction doc-available est uniquement référencée, elle n'est pas appelée. Le suffixe #1 qui y est attaché indique une fonction avec une arité de 1. Sous sa forme complète, doc-available#1 signifie simplement : Utiliser la fonction doc-availabe() à l'arité=1, en l'y passant en tant que son seul argument, chacun à son tour, chacun des items dans la première séquence. En résultat, chacun des deux chaînes sera passée à doc-available(), qui utilise la chaîne en tant qu'URI et teste si un nœud de document existe à l'URI. S'il en existe un, doc-available() évalue à true() et cette chaîne est retournée en tant que le résultat de la fonction altova:find-first. Note à propos de la fonction doc-available() : les chemins relatifs sont résolus relativement à l'URI de base actuel, qui est par défaut l'URI du document XML à partir duquel la fonction est chargée.

 

 

Click to expand/collapsefind-first-combination [altova:]

altova:find-first-combination((Seq-01 as item()*)(Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) as item()*     XP3.1 XQ3.1

Cette fonction prend trois arguments :

Les deux premiers arguments, Seq-01 et Seq-02, sont des séquences d'un ou de plusieurs items de tout type de données.
Le troisième argument, Condition, est une référence à une fonction XPath qui prend deux arguments (a une arité de 2) et retourne un booléen.

 

Les items de Seq-01 et Seq-02 sont passés dans des paires ordonnées (un item de chaque séquence faisant une paire) en tant que les arguments de la fonction dans Condition. Les paires sont classées comme suit :

If   Seq-01 = X1, X2, X3 ... Xn

And  Seq-02 = Y1, Y2, Y3 ... Yn

Then (X1 Y1), (X1 Y2), (X1 Y3) ... (X1 Yn), (X2 Y1), (X2 Y2) ... (Xn Yn)

 

La première paire ordonnée qui entraîne la fonction Condition à évaluer à true() est retournée en tant que le résultat de altova:find-first-combination. Veuillez noter que : (i) si la fonction Condition itère par le biais des paires d'argument soumises et n'évalue pas une fois à true(), alors altova:find-first-combination retournera Aucun résultat ; (ii) Le résultat de altova:find-first-combination sera toujours une paire d'items (de tout type de données) ou aucun item.

 

altova:find-first-combination(11 to 20, 21 to 30, function($a, $b) {$a+$b = 32}) retourne la séquence de xs:integers (11, 21)
altova:find-first-combination(11 to 20, 21 to 30, function($a, $b) {$a+$b = 33}) retourne la séquence de f xs:integers (11, 22)
altova:find-first-combination(11 to 20, 21 to 30, function($a, $b) {$a+$b = 34}) retourne la séquence de xs:integers (11, 23)

 

 

Click to expand/collapsefind-first-pair [altova:]

altova:find-first-pair((Seq-01 as item()*)(Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) as item()*     XP3.1 XQ3.1

Cette fonction prend trois arguments :

Les deux premiers arguments, Seq-01 et Seq-02, sont des séquences d'un ou de plusieurs items de tout type de données.
Le troisième argument, Condition, est une référence à une fonction XPath qui prend deux arguments (a une arité de 2) et retourne un booléen.

 

Les items de Seq-01 et Seq-02 sont passés dans des paires ordonnées en tant que les arguments de la fonction dans Condition. Les paires sont classées comme suit :

If   Seq-01 = X1, X2, X3 ... Xn

And  Seq-02 = Y1, Y2, Y3 ... Yn

Then (X1 Y1), (X2 Y2), (X3 Y3) ... (Xn Yn)

 

La première paire ordonnée qui cause la fonction Condition à évaluer à true() est retournée en tant que le résultat de altova:find-first-pair. Veuillez noter que : (i) Si la fonction Condition itère par le biais des paires d'arguments soumis et n'évalue pas une seule fois à true(), alors altova:find-first-pair retournera Aucun résultat; (ii) Le résultat de altova:find-first-pair sera toujours une paire d'items (de tout type de données) ou aucun item.

 

altova:find-first-pair(11 to 20, 21 to 30, function($a, $b) {$a+$b = 32}) retourne la séquence de xs:integers (11, 21)
altova:find-first-pair(11 to 20, 21 to 30, function($a, $b) {$a+$b = 33}) retourne Aucun résultat

 

Veuillez noter à partir des deux exemples ci-dessus que l'ordonnance des paires est : (11, 21) (12, 22) (13, 23)...(20, 30). C'est pourquoi le second exemple retourne Aucun résultat (parce qu'aucune paire ordonnée de donne une somme de 33).

 

 

Click to expand/collapsefind-first-pair-pos [altova:]

altova:find-first-pair-pos((Seq-01 as item()*)(Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) as xs:integer     XP3.1 XQ3.1

Cette fonction prend trois arguments :

Les deux premiers arguments, Seq-01 and Seq-02, sont des séquences d'un ou de plusieurs items de tout type de données.
Le troisième argument, Condition, est une référence à une fonction XPath qui prend deux arguments (a une arité de 2) et retourne un booléen.

 

Les items de Seq-01 et Seq-02 sont passés dans des paires ordonnées en tant que les arguments de la fonction dans Condition. Les paires sont classées comme suit :

If   Seq-01 = X1, X2, X3 ... Xn

And  Seq-02 = Y1, Y2, Y3 ... Yn

Then (X1 Y1), (X2 Y2), (X3 Y3) ... (Xn Yn)

 

La position d'index de la première paire ordonnée qui entraîne la fonction Condition à évaluer à true() est retournée en tant que le résultat de altova:find-first-pair-pos. Veuillez noter que si la fonction Condition itère par le biais des paires d'arguments soumises et n'évalue pas une seule fois à true(), alors altova:find-first-pair-pos retournera Aucun résultat.

 

altova:find-first-pair-pos(11 to 20, 21 to 30, function($a, $b) {$a+$b = 32}) retourne 1
altova:find-first-pair-pos(11 to 20, 21 to 30, function($a, $b) {$a+$b = 33}) retourne Aucun résultat

 

Veuillez noter à partir des deux exemples ci-dessus que l'ordonnance des paires est : (11, 21) (12, 22) (13, 23)...(20, 30). dans le premier exemple, la première paire entraîne la fonction Condition à évaluer à true(), et donc sa position d'index dans la séquence, 1, est retournée. Le second exemple retourne Aucun résultat parce qu'aucune paire ne totalise pas une somme de 33.

 

 

Click to expand/collapsefind-first-pos [altova:]

altova:find-first-pos((Sequence as item()*)(Condition( Sequence-Item as xs:boolean)) as xs:integer     XP3.1 XQ3.1

Cette fonction prend deux arguments. Le premier argument est une séquence d'un ou de plusieurs items de tout type de données. Le second argument, Condition, est une référence à une fonction XPath qui prend un argument (a une arité de 1) et retourne une booléenne. Chaque item de Sequence est soumis à son tour à la fonction référencée dans Condition. (Rappel : cette fonction prend un seul argument.) Le premier item Sequence qui cause la fonction dans Condition à évaluer à true() voit sa position index dans Sequence retournée en tant que résultat de altova:find-first-pos, et l'itération stoppe.

 

altova:find-first-pos(5 to 10, function($a) {$a mod 2 = 0}) retourne xs:integer 2

L'argument Condition référence la fonction en ligne XPath 3.0, function(), qui déclare une fonction en ligne nommée $a et puis la définit. Chaque item dans l'argument de Sequence de altova:find-first-pos est passé à son tour à $a en tant que sa valeur d'entrée. La valeur d'entrée est testée à la condition dans la définition de la fonction ($a mod 2 = 0). La position d'index dans la séquence de la première valeur d'entrée pour satisfaire à cette condition est retournée en tant que le résultat de altova:find-first-pos (dans ce cas 2, puisque 6, la première valeur (dans la séquence) afin de satisfaire à la condition, est à la position d'index 2 dans la séquence).

 

altova:find-first-pos((2 to 10), (function($a) {$a+3=7})) retourne xs:integer 3

 

 

Autres exemples

Si le fichier C:\Temp\Customers.xml existe :

altova:find-first-pos( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) retourne 1

 

Si le fichier C:\Temp\Customers.xml n'existe pas, et que http://www.altova.com/index.html existe :

altova:find-first-pos( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) retourne 2

 

Si le fichier C:\Temp\Customers.xml n'existe pas, et que http://www.altova.com/index.html n'existe pas non plus :

altova:find-first-pos( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) ne retourne aucun résultat

 

Notes à propos des exemples donnés ci-dessus

La fonction XPath 3.0, doc-available, prend un seul argument de chaîne qui est utilisé en tant qu'un URI, et retourne true si un nœud de document est trouvé à l'URI soumis. (Le document à l'URI soumis doit donc être un document XML.)
La fonction doc-available peut être utilisée pour Condition, le second argument de altova:find-first-pos, parce qu'il ne prend qu'un seul argument (arité=1), parce qu'il prend un item() en tant qu'entrée (une chaîne qui est utilisée en tant qu'un URI), et retourne une valeur booléenne.
Veuillez noter que la fonction doc-available est uniquement référencée, elle n'est pas appelée. Le suffixe #1 qui y est attaché indique une fonction avec une arité de 1. dans sa totalité, doc-available#1 signifie simplement : Utiliser la fonction doc-availabe() qui a arité=1, y passant, en tant que son argument simple, chacun à son tour, chaque item dans la première séquence. En tant que résultat. chacune des deux chaînes sera passée à doc-available(), qui utilise la chaîne en tant qu'un URI et teste si un nœud de document existe à l'URI. Si c'est le cas, la fonction doc-available() évalue à true() et la position de l'index de cette chaîne dans la séquence est retournée en tant que le résultat de la fonction altova:find-first-pos. Note à propos de la fonction doc-available() : les chemins relatifs sont résolus relativement à l'URI de base actuel, qui par défaut est l'URI du document XML à partir duquel la fonction est chargée.

 

 

Click to expand/collapsefor-each-attribute-pair [altova:]

altova:for-each-attribute-pair(Seq1 as element()?Seq2 as element()?, Function as function()) as item()*     XP3.1 XQ3.1

Les premiers deux arguments identifient deux éléments, dont les attributs sont utilisés pour générer des paires d'attribut, dans laquelle un attribut d'une paire est obtenu depuis le premier élément et l'autre attribut est obtenu depuis le second élément. Les paires d'attribut sont sélectionnées sur le fait qu'ils présentent le même nom, et les paires sont classées par ordre alphabétique (sur leur nom) dans un ensemble. Si, pour un attribut, aucun attribut correspondant n'existe dans l'autre élément, la paire sera "disjointe", ce qui signifie qu'elle consiste en un seul membre. L'item de fonction (troisième argument Function) est appliqué séparément à chaque paire dans la séquence des paires (joints et disjointe), résultant en une sortie qui est une séquence d'items.

altova:for-each-attribute-pair(/Example/Test-A, /Example/Test-B, function($a, $b){$a+b}) retourne ...

 

  (2, 4, 6) si

   <Test-A att1="1" att2="2" att3="3" />

   <Test-B att1="1" att2="2" att3="3" />

 

  (2, 4, 6) si

   <Test-A att2="2" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

 

  (2, 6) si

   <Test-A att4="4" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

    Note : Le résultat (2 6) est obtenu par le biais de l'action suivante : (1+1 ()+2 3+3 4+()). Si un des opérandes est la séquence vide, comme c'est le cas des items 2 et 4, le résultat de l'addition est une séquence vide.

 

altova:for-each-attribute-pair(/Example/Test-A, /Example/Test-B, concat#2) retourne ...

 

  (11 22 33) si

   <Test-A att1="1" att2="2" att3="3" />

   <Test-B att1="1" att2="2" att3="3" />

 

  (11 2 33 4) si

   <Test-A att4="4" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

 

 

Click to expand/collapsefor-each-combination [altova:]

altova:for-each-combination(FirstSequence as item()*SecondSequence as item()*Function($i,$j){$i || $j} ) as item()*     XP3.1 XQ3.1

Les items des deux séquences dans les deux premiers arguments sont combinés de manière à ce que chaque item de la première séquence est combiné, dans l'ordre, une fois avec chaque item de la seconde séquence. La fonction donnée en tant que le troisième argument est appliquée à chaque combinaison dans la séquence résultante, entraînant une sortie qui est une séquence d'items (voir exemple).

altova:for-each-combination( ('a', 'b', 'c'), ('1', '2', '3'), function($i, $j){$i || $j} ) retourne ('a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3')

 

 

Click to expand/collapsefor-each-matching-attribute-pair [altova:]

altova:for-each-matching-attribute-pair(Seq1 as element()?Seq2 as element()?, Function as function()) as item()*     XP3.1 XQ3.1

Les premiers deux arguments identifient deux éléments, dont les attributs sont utilisés pour générer des paires d'attribut, dans laquelle un attribut d'une paire est obtenu depuis le premier élément et l'autre attribut est obtenu depuis le second élément. Les paires d'attribut sont sélectionnées sur le fait qu'ils présentent le même nom, et les paires sont classées par ordre alphabétique (sur leur nom) dans un ensemble. Si, pour un attribut, aucun attribut correspondant n'existe dans l'autre élément, aucune paire ne sera générée. L'item de fonction (troisième argument Function) est appliqué séparément à chaque paire dans la séquence des paires, résultant en une sortie qui est une séquence d'items.

altova:for-each-matching-attribute-pair(/Example/Test-A, /Example/Test-B, function($a, $b){$a+b}) retourne ...

 

  (2, 4, 6) si

   <Test-A att1="1" att2="2" att3="3" />

   <Test-B att1="1" att2="2" att3="3" />

 

  (2, 4, 6) si

   <Test-A att2="2" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

 

  (2, 6) si

   <Test-A att4="4" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att3="1" />

 

altova:for-each-matching-attribute-pair(/Example/Test-A, /Example/Test-B, concat#2) retourne ...

 

  (11, 22, 33) si

   <Test-A att1="1" att2="2" att3="3" />

   <Test-B att1="1" att2="2" att3="3" />

 

  (11, 33) si

   <Test-A att4="4" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

 

 

Click to expand/collapsesubstitute-empty [altova:]

altova:substitute-empty(FirstSequence as item()*SecondSequence as item()) as item()*     XP3.1 XQ3.1

Si FirstSequence est vide, retourne SecondSequence. Si FirstSequence n'est pas vide, retourne FirstSequence.

altova:substitute-empty( (1,2,3), (4,5,6) ) retourne (1,2,3)
altova:substitute-empty( (), (4,5,6) ) retourne (4,5,6)

 

 

 


© 2018 Altova GmbH