XPath est un langage permettant d'adresser des éléments disposés dans un modèle de données arborescent (modèle où les éléments ont une relation d'appartenance parent - enfant).
Un élément (ou noeud) peut être de différente nature :
- soit un élément final valeur ayant un type primitif (alphanumérique, numérique, booléen),
- soit un élément attribut.
Dans le cadre d'utilisation dans l'AMBSS, le modèle est constitué d'une arborescence de Java Beans.
XPath est un langage permettant d'adresser des objets disposés dans un modèle de données arborescent (modèle ou les objets ou une relation d'appartenance parent - enfant).
Un objet (ou noeud) peut être de différente nature :
- soit un noeud final valeur ayant un type primitif (alphanumérique, numérique, booléen, etc.),
- soit un noeud attribut. Il est composé d'un marqueur (un nom) et d'un noeud valeur affecté à l'attribut. Les nœuds attribut sont considérés comme appartenant à un nœud élément,
- soit un noeud élément. Il est composé de noeuds attributs (sans notion d'ordre entre ces noeuds),
- soit un noeud liste. Ces noeuds fils sont ordonnés et il est possible d'accéder à chaque noeud grâce a un index.
La localisation des éléments est effectuée sous la forme de chemins de localisation, à la manière du système de répertoires Unix : Un chemin de localisation est composé de différentes étapes de localisation qui sont séparées par des barres obliques (/), de façon analogue à l'adressage de fichiers dans des systèmes de répertoires.
L'ordre des nœuds est déterminé par le chemin (induit par l'imbrication des noeuds, du parent vers l'enfant). Le premier noeud est le noeud racine du chemin.
Les chemins de localisation sont analysés de gauche à droite.
Dans le cadre d'utilisation dans l'AMBSS, le modèle est constitué d'une arborescence de Java Beans :
- un noeud final est un type primitif Java,
- un noeud attribut équivaut au getter d'une propriété d'un Java Bean,
- un noeud élément est un Java Bean ou une Java Map (une table de hachage),
- un noeud liste est une collection Java.
Clé standard d'un souscripteur Adélia
Un souscripteur est défini par un modèle objet arborescent en YAML (dans le fichier SubscribersConf.yml) ou en JSON (dans le body d'un requête HTTP d'API REST) :
Souscripteur Adélia YAML id: mySubcriber startOnCreation: true config: adeliaPgm: objectFileName: EAP_1 javaPackage: my.package.for.eadelia parameters: - Bob - Brown - 38 customObjectMapper: mapperBean1 adeliaPoolName: poolLambdaServer brokerConfig: factory: id: company.BrokerSubscriberFactory parameters: provider: factory.json aggregate: false | Souscripteur en JSON { "id": "mySubcriber", "startOnCreation": true, "config": { "adeliaPgm": { "objectFileName": "EAP_1", "javaPackage": "my.package.for.eadelia", "parameters": [ "Bob", "Brown", 38 ], "customObjectMapper": "mapperBean1" }, "adeliaPoolName": "poolLambdaServer", "brokerConfig": { "factory": { "id": "company.BrokerSubscriberFactory", "parameters": { "provider": "factory.json", "aggregate": false } } } } } |
---|
Noeud attribut
Une clé standard est définie par un noeud racine "subconf" qui identifie un souscripteur et stocke les informations le constituant. Les sous-noeuds "id", "startOnCreation" et "config" sont des noeuds attributs.
Les noeuds "id" et "startOnCreation" ont des types primitifs (alphanumérique et booléen). Leur valeurs sont accessibles par les chemins "subconf/id" et "subconf/startOnCreation".
Le noeud "config" est un noeud élément avec comme fils les sous-noeuds "adeliaPgm", "adeliaPoolName" et "brokerConfig".
Noeud liste
Pour récupérer les paramètres du programme EADELIA associé au souscripteur il faut accéder aux éléments du noeud liste 'subconf/config/adeliaPgm/parameters'. Il est possible d'utiliser la notation indexée pour accéder à un élément dans la liste :
'subconf/config/adeliaPgm/parameters[1]' permet d'accéder au premier élément de la liste.
Remarques :
- L'expression 'subconf/config/adeliaPgm/parameters[<index>]' est un raccourci d'écriture de l'expression XPath utilisant la fonction prédéfinie position() : 'subconf/config/adeliaPgm/parameters[position()=<index>]'
- L'accès au dernier élément peut se faire en utilisant la fonction prédéfinie last() : 'subconf/config/adeliaPgm/parameters[last()]'
Accès aux propriétés d'une liste
Liste vide
Pour déterminer si un élément liste est vide, il faut utiliser l'attribut "empty" comme suit :
'subconf/config/adeliaPgm/parameters/empty' retourne une valeur booléene.
Taille de liste
La taille d'une liste peut être récupérée grâce à la fonction XPath prédéfinie count :
'count(subconf/config/adeliaPgm/parameters)'
ou par une fonction prédéfinie livrée dans l'AMBSS :
'adelUtils:collectionSize(subconf/config/adeliaPgm/parameters)'
Noeud élément Map
Dans certains cas d'utilisation un noeud élement représente une table de hachage (structure qui permet une association clé-valeur, c'est-à-dire une implémentation du type abstrait tableau associatif). Il s'agit d'un tableau ne comportant pas d'ordre (contrairement à un tableau ordinaire qui est indexé par des entiers). On accède à chaque valeur du tableau par sa clé, qui, transformée par une fonction de hachage en une valeur de hachage (un nombre), indexe les éléments de la table.
Dans ce cas les éléments attributs font office de clé.
Dans un souscripteur Adélia, les paramètres d'instanciation de la fabrique désignés par le chemin XPATH 'subConf/config/brokerConfig/factory/parameters' sont stockés sous la forme d'une Map. Chaque fabrique ayant une signature différente, le nom, la cardinalité et le type des paramètres sont définis par la fabrique.
Accès aux propriétés d'une map
Valeur associée à une clé
Pour accéder à la valeur associée à un nom de clé connu, il faut utiliser l'expression XPath suivante :
'subConf/config/brokerConfig/factory/parameters/provider' qui est un raccourci d'écriture de l'expression :
'subConf/config/brokerConfig/factory/parameters[@name='provider']'
Liste des clés
L'AMBSS fournit une fonction prédéfinie qui permet de retourner la liste des clés d'une table de hachage :
'adelUtils:mapKeys(subConf/config/brokerConfig/factory/parameters)' retourne un élément liste de deux éléments valeur ['provider', 'aggregate']
Liste des valeurs associées aux clés
L'AMBSS fournit une fonction prédéfinie qui permet de retourner la liste des valeurs associées aux clés d'une table de hachage :
'adelUtils:mapValues(subConf/config/brokerConfig/factory/parameters)' retourne un élément liste de deux éléments valeur ['factory.json', false]
Remarque :
Clé spécifique d'un souscripteur Adélia
Les clés spécifiques correspondant aux éléments variants 'subconf/config/brokerConfig/brokerConnection' et 'subconf/config/brokerConfig/subscribeTopic' suivent les mêmes principes d'écriture et de syntaxe. Se référer à la documentation liée à chaque courtier pour connaître le modèle de données des éléments variants.