TIBCO EBX®
Documentation > Manuel de référence > Intégration
Mode navigationDocumentation > Manuel de référence > Intégration

Syntaxe XPath supportée

Vue d'ensemble

L'écriture XPath utilisée dans TIBCO EBX® doit être conforme à la syntaxe abrégée du XML Path Language (XPath) Version 1.0 standard, avec certaines restrictions. Ce document décrit la syntaxe abrégée supportée.

Exemple d'expressions

L'expression générale XPath est :

path[predicate]

Chemin absolu

/bibliotheque/livres/

Chemins relatifs

./Auteur

../Titre

Racine et chemins descendants

//livres

Chemins de table avec prédicats

../../livre/[auteur_id = 0101 and (editeur = 'harmattan')]

/bibliotheque/livres/[not(editeur = 'dumesnil')]

Prédicats complexes

starts-with(col3,'xxx') and ends-with(col3,'yyy') and osd:is-not-null(./col3))

contains(col3 ,'xxx') and ( not(col1=100) and date-greater-than(col2,'2007-12-30') )

Prédicats avec paramètres

author_id = $param1 and publisher = $param2 où les paramètres $param1 et $param2 ont respectivement pour valeurs 0101 et 'harmattan'

col1 < $param1 and col4 = $param2 où les paramètres $param1 et $param2 ont respectivement pour valeurs 100 et 'true'

contains(col3,$param1) and date-greater-than(col2,$param2) où les paramètres $param1 et $param2 ont respectivement pour valeurs 'xxx' et '2007-12-30'

Note

L'utilisation de cette notation est uniquement limitée à l'API Java puisque les valeurs des paramètres peuvent uniquement être définies par la méthode Request.setXPathParameter.

Prédicats sur libellé

osd:label(./delivery_date)='12/30/2014' and ends-with(osd:label(../adress),'Beijing - China')

Prédicats sur libellé d'un enregistrement

osd:contains-record-label('dumesnil') or osd:contains-record-label('harmattan')

Prédicats pour la recherche sur validation

osd:has-validation-item()

osd:has-validation-item('error,info')

osd:contains-validation-message('xxx')

osd:contains-validation-message('xxx','info,warning')

Note

Attention

Afin de garantir que le rapport de validation est à jour lors de la recherche, il est nécessaire de valider explicitement la table juste avant d'utiliser ces prédicats.

Spécifications de syntaxe pour les expressions XPath

Vue d'ensemble

Expression

Format

Exemple

Expression XPath

<chemin container>[predicate]

/livres[titre='xxx']

<container path>

<chemin absolu> ou <chemin relatif>

<absolute path>

/a/b ou //b

//livres

<relative path>

../../b, ./b ou b

../../livres

Spécification du prédicat

Expression

Format

Notes/Exemple

<predicate>

Exemple : A et (B et non(C)) A,B,C : <expression atomique>

Composition de : parenthèses d'opérateurs logiques, not() et expressions atomiques.

<atomic expression>

<chemin><comparateur><critère> ou méthode(<chemin>,<critère>)

royalty = 24.5

starts-with(title, 'Johnat')

booleanValue = true

<path>

<chemin relatif> ou osd:label(<chemin relatif>)

Relatif à la table qui le contient :

../authorstitle

<comparator>

<comparateur booléen>, <comparateur numérique> ou <comparateur 'string'>

<boolean comparator>

= ou !=

<numeric comparator>

=!=<, >, <=, ou >=

<string comparator>

=

<method>

<méthode date>, <méthode 'string'>, méthode osd:is-null ou méthode osd:is-not-null

<date, time & dateTime method>

date-less-than, date-equal ou date-greater-than

<string method>

matches, starts-with, ends-with, contains, osd:is-empty, osd:is-not-empty, osd:is-empty-or-nil, osd:is-neither-empty-nor-nil, osd:is-equal-case-insensitive, osd:starts-with-case-insensitive, osd:ends-with-case-insensitive, osd:contains-case-insensitive, ou osd:contains-record-label

<criterion>

<critère booléen>, <critère numérique>, <critère 'string'>, <critère date>, <critère 'time'>, ou <critère 'dateTime'>

<boolean criterion>

truefalse

<numeric criterion>

Un entier ou un décimal

-4.6

<string criterion>

Chaîne de caractères entre apostrophes

'azerty'

<date criterion>

Entre apostrophes et formaté comme suit 'aaaa-MM-jj'

'2007-12-31'

<time criterion>

Entre apostrophes et formaté comme suit 'HH:mm:ss' ou 'HH:mm:ss.SSS'

'11:55:00'

<dateTime criterion>

Entre apostrophes et formaté comme suit 'aaaa-MM-jjTHH:mm:ss' ou 'aaaa-MM-jjTHH:mm:ss.SSS'

'2007-12-31T11:55:00'

Formule XPath 1.0

Il est possible d'utiliser une formule XPath 1.0 dans la partie valeur du critère d'une expression de prédicat atomique (côté droit).

Par exemple, au lieu de [./a=3], il est possible d'utiliser l'expression [./a=(floor(./d)+ 2.0)].

En raison de la forte dépendance des prédicats et le type du noeud du critère, la portion de chemin de l'expression du prédicat atomique (côté gauche) doit être un chemin de noeud et ne peut être une formule XPath. Par exemple, l'expression /table[floor(./a) > ceiling(./d)] n'est pas valide.

Prédicat sur libellé

La fonction osd:label() peut être appliquée à la portion de chemin du prédicat atomique, afin de résoudre le prédicat sur le libellé et non sur la valeur. Dans ce cas, seuls les opérateurs et les critères de chaîne peuvent être utilisés, i.e. ends-with(osd:label(./price),'99').

Un prédicat sur libellé est localisé, le critère doit donc être exprimé dans la même locale que la requête filtrée par prédicat. Par exemple : request.setLocale(Locale.FRENCH); request.setXPathFilter("osd:label(./delivery_date)='30/12/2014'");

Note

Il est interdit d'utiliser la fonction osd:label si la partie droite du prédicat est une valeur contextuelle.

Note

Si la fonction osd:label est utilisée dans un modèle de données, par exemple dans une sélection ou dans le prédicat de filtre du noeud de référence d'une table, la locale par défaut du modèle de données (telle que définie dans sa déclaration de module) doit être utilisée pour le format du critère (même si cela n'est généralement pas recommandé).

Valeurs contextuelles

Pour les prédicats se rapportant à un noeud de sélection, la valeur du critère (à savoir, le coté droit du prédicat) peut être remplacée par un chemin contextuel utilisant la syntaxe ${<relative-path>}<relative-path> est l'emplacement de l'élément lié au noeud de sélection.

Note

Lors de l'appel à une méthode, le critère est le deuxième paramètre, et le premier paramètre ne peut pas être une valeur relative.

Listes groupées

Pour les prédicats sur listes groupées, le prédicat renvoie true indépendamment du comparateur si l'un des éléments de la liste vérifie le prédicat.

Note

Une attention particulière doit être portée au comparateur !=. Par exemple, pour une liste groupée, ./list != 'a' est différent de not(./list = 'a'). Là où la liste contient les éléments (e1,e2,..), le premier prédicat équivaut à e1 != 'a' or e2 != 'a' ..., alors que le second équivaut à e1 != 'a' and e2 != 'a' ....

Valeurs 'Null'

Les valeurs Null doivent être traitées explicitement dans uns prédicat utilisant les opérateurs osd:is-null et osd:is-not-null.

Par exemple, /root/products[./price<100] ou /root/products[./price!=100] ne retournera aucun produit dont les prix ne sont pas définis (null). Dans ce cas, pour retourner également les valeurs non définies, le prédicat devrait plutôt être : /root/products[./price!=100 or osd:is-null(./price)].

Comment gérer les apostrophes simples et doubles dans les expressions littérales

Par défaut, une expression littérale est délimitée par des apostrophes simples ('). Si l'expression littérale contient des apostrophes simples et pas d'apostrophes doubles, l'expression doit être délimitée par des apostrophes doubles ("). Si l'expression littérale contient des apostrophes simples et doubles, les apostrophes simples doivent être doublées.

Géré par la méthode XPathExpressionHelper.encodeLiteralStringWithDelimiters dans l'API Java.

Exemples d'utilisation de encodeLiteralStringWithDelimiters

Valeur de l'expression littérale

Résultat de cette méthode

Coeur

'Coeur'

Coeur d'Alene

"Coeur d'Alene"

Il a dit: "Ils vivent dans Coeur d'Alene".

'Il a dit: "Ils vivent dans Coeur d''Alene".'

Extraction de clés étrangères

Dans EBX®, les clés étrangères sont regroupées dans un champ unique avec la déclaration osd:tableRef.

La syntaxe XPath standard a été étendue afin d'extraire la valeur de n'importe quel champ de clé primaire ciblé.

Exemple

Si la table /root/tableA a un champ osd:tableRef nommé 'fkB' dont la cible est /root/tableB et la clé primaire de tableB a deux champs, id de type xs:int et date de type xs:date, alors les expressions suivantes sont valides :

API Java

Utilisation de XPath dans l'API Java :

En API Java, la classe XPathFilter permet de définir des prédicats XPath et d'exécuter des requêtes sur ceux-ci.

La classe XPathExpressionHelper offre des méthodes utilitaires pour manipuler les prédicats et les chemins XPath.

Documentation > Manuel de référence > Intégration