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.
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. •Afin de distinguer les fonctions d'extension Altova des fonctions dans la librairie standard, les fonctions d'extension Altova sont nommées dans cette documentation avec un suffixe [altova:]. Par exemple : add-years-to-date [altova:]. •Néanmoins, lorsque vous utilisez des fonctions d'extension Altova dans vos expressions XPath/XQuery, vous devez utiliser la fonction sans préfixe ou suffixe, comme si vous utilisiez une fonction standard XPath/XQuery. Voici un exemple d'extension Altova : add-years-to-date(xs:date("2014-01-15"), 10). 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 |
|
attributes(AttributeName as xs:string) asattribute()* 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. •attributes("MyAttribute") retourne MyAttribute()* |
attributes(AttributeName as xs:string, SearchOptions as xs:string) asattribute()* 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. •attributes("MyAttribute", "rfip") retourne MyAttribute()* •attributes("MyAttribute", "pri") retourne MyAttribute()* •attributes("MyAtt", "rip") retourne MyAttribute()* •attributes("MyAttributes", "rfip") ne retourne aucune correspondance. •attributes("MyAttribute", "") retourne MyAttribute()* •attributes("MyAttribute", "Rip") retourne une erreur de flag non reconnu. •attributes("MyAttribute", ) retourne une erreur d'argument manquant. |
|
elements(ElementName as xs:string) aselement()* 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é. •elements("MyElement") retourne MyElement()* |
elements(ElementName as xs:string, SearchOptions as xs:string) aselement()* 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. •elements("MyElement", "rip") retourne MyElement()* •elements("MyElement", "pri") retourne MyElement()* •elements("MyElement", "") retourne MyElement()* •elements("MyElem", "rip") retourne MyElement()* •elements("MyElements", "rfip") retourne aucune correspondance •elements("MyElement", "Rip") retourne une erreur flag-non reconnu. •elements("MyElement", ) retourne une erreur second-argument-manquant. |
|
find-first((Sequence as item()*), (Condition( Sequence-Item as xs:boolean)) asitem()? 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 find-first, et l'itération s'arrête. •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 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 find-first (dans ce cas 6). •find-first((1 to 10), (function(\$a) {\$a+3=7})) retourne xs:integer 4 Autres exemples Si le fichier C:\Temp\Customers.xml existe : •find-first( ("C:\Temp\Customers.xml", "https://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 https://www.altova.com/index.html existe : •find-first( ("C:\Temp\Customers.xml", "https://www.altova.com/index.html"), (doc-available#1) ) retourne xs:string https://www.altova.com/index.html Si le fichier C:\Temp\Customers.xml n'existe pas, et que https://www.altova.com/index.html n'existe pas non plus : •find-first( ("C:\Temp\Customers.xml", "https://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 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 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. |
|
|
find-first-combination((Seq-01 as item()*), (Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) asitem()* 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 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 find-first-combination retournera Aucun résultat ; (ii) Le résultat de find-first-combination sera toujours une paire d'items (de tout type de données) ou aucun item. •find-first-combination(11 to 20, 21 to 30, function(\$a, \$b) {\$a+\$b = 32}) retourne la séquence de xs:integers (11, 21) •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) •find-first-combination(11 to 20, 21 to 30, function(\$a, \$b) {\$a+\$b = 34}) retourne la séquence de xs:integers (11, 23) |
|
find-first-pair((Seq-01 as item()*), (Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) asitem()* 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 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 find-first-pair retournera Aucun résultat; (ii) Le résultat de find-first-pair sera toujours une paire d'items (de tout type de données) ou aucun item. •find-first-pair(11 to 20, 21 to 30, function(\$a, \$b) {\$a+\$b = 32}) retourne la séquence de xs:integers (11, 21) •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). |
|
find-first-pair-pos((Seq-01 as item()*), (Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) asxs: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 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 find-first-pair-pos retournera Aucun résultat. •find-first-pair-pos(11 to 20, 21 to 30, function(\$a, \$b) {\$a+\$b = 32}) retourne 1 •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. |
|
find-first-pos((Sequence as item()*), (Condition( Sequence-Item as xs:boolean)) asxs: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 find-first-pos, et l'itération stoppe. •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 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 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). •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 : •find-first-pos( ("C:\Temp\Customers.xml", "https://www.altova.com/index.html"), (doc-available#1) ) retourne 1 Si le fichier C:\Temp\Customers.xml n'existe pas, et que https://www.altova.com/index.html existe : •find-first-pos( ("C:\Temp\Customers.xml", "https://www.altova.com/index.html"), (doc-available#1) ) retourne 2 Si le fichier C:\Temp\Customers.xml n'existe pas, et que https://www.altova.com/index.html n'existe pas non plus : •find-first-pos( ("C:\Temp\Customers.xml", "https://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 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 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. |
|
|
for-each-attribute-pair(Seq1 as element()?, Seq2 as element()?, Function as function()) asitem()* 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. •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. •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" /> |
|
for-each-combination(FirstSequence as item()*, SecondSequence as item()*, Function(\$i,\$j){\$i || \$j} ) asitem()* 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). •for-each-combination( ('a', 'b', 'c'), ('1', '2', '3'), function(\$i, \$j){\$i || \$j} ) retourne ('a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3') |
|
for-each-matching-attribute-pair(Seq1 as element()?, Seq2 as element()?, Function as function()) asitem()* 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. •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" /> •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" /> |
|
substitute-empty(FirstSequence as item()*, SecondSequence as item()) asitem()* XP3.1 XQ3.1 Si FirstSequence est vide, retourne SecondSequence. Si FirstSequence n'est pas vide, retourne FirstSequence. •substitute-empty( (1,2,3), (4,5,6) ) retourne (1,2,3) •substitute-empty( (), (4,5,6) ) retourne (4,5,6) |
|