• Aucun résultat trouvé

Chapitre 4 ContextAA – Modèle théorique

4.4 Noms de Contextes

4.4.7 Reconnaissance de modèles

Le Contexte permet de décrire des modèles pour fins de reconnaissance de Contextes. À cette fin, certains jetons jouent un rôle spécialisé. Pour comprendre ce rôle, il est préférable d’avoir au préalable une familiarité avec les règles d’équivalence de noms et de subsomption.

Le format de Contexte appliqué dans ContextAA permet de représenter des affirmations telles que « le niveau sonore ambiant est de 80 décibels dans la chambre à coucher » ou « la précision du capteur A est meilleure que celle du capteur B », et ce de multiples façons. Le langage interne d’évaluation d’expressions soutient l’expression de certaines de ces relations.

Un modèle de Contexte est une requête exprimée sous forme de Contexte, et dans laquelle certains éléments peuvent être décrits de manière générique. Informellement, dans « le niveau sonore ambiant est de ? = 𝑥 décibels », la valeur mesurée pour 𝑥 est laissée ouverte. ContextAA offre une syntaxe pour poser des questions à éléments manquants, ce qui permet à 𝑎 ∈ ℎ de faire un inventaire des Contexte publiés dans 𝑁 pour déterminer, à partir des valeurs rapportées par ces différents Contextes, quelle est la valeur qui lui semble la plus à propos.

De même, dans « le niveau sonore ambiant est de ? = 𝑣𝑎𝑙 décibels dans ? = 𝑙𝑖𝑒𝑢 », le lieu est associé à un nom (𝑙𝑖𝑒𝑢) et il en va de même pour la valeur mesurée (𝑣𝑎𝑙).

ContextAA n’exprime pas le Contexte sous forme de langage naturel mais bien dans un formalisme qui lui est propre, décrit dans §4.3. Ce langage combine des affirmations telles que :

𝑎: 3 {"𝑏𝑟𝑢𝑖𝑡 𝑎𝑚𝑏𝑖𝑎𝑛𝑡"{𝑢𝑛𝑖𝑡é{𝑑é𝑐𝑖𝑏𝑒𝑙}𝑣𝑎𝑙𝑒𝑢𝑟{80}𝑙𝑖𝑒𝑢{𝑖𝑐𝑖}}} qui représente le Contexte 3 produit par l’Agent 𝑎, et des requêtes telles que :

𝑎′: 7 {"𝑏𝑟𝑢𝑖𝑡 𝑎𝑚𝑏𝑖𝑎𝑛𝑡"{𝑢𝑛𝑖𝑡é{𝑑é𝑐𝑖𝑏𝑒𝑙}𝑣𝑎𝑙𝑒𝑢𝑟{∗}}} ce qui équivaut à :

96

où 𝑙𝑖𝑒𝑢 n’est pas pris en considération et où la présence du sous-Contexte 𝑣𝑎𝑙𝑒𝑢𝑟 est importante, sans égard à sa valeur, ou encore :

𝑎′′: 35 {"𝑏𝑟𝑢𝑖𝑡 𝑎𝑚𝑏𝑖𝑎𝑛𝑡"{𝑢𝑛𝑖𝑡é{𝑑é𝑐𝑖𝑏𝑒𝑙}𝑣𝑎𝑙𝑒𝑢𝑟{? = 𝑣𝑎𝑙}𝑙𝑖𝑒𝑢{? = 𝑙𝑖𝑒𝑢}}}

Représenté sous forme fonctionnelle, la mise en correspondance d’un modèle de Contexte avec une séquence de Contextes a la signature suivante :

𝐷𝑖𝑐𝑡𝑖𝑜 ∷ 𝑃𝑎𝑖𝑟〈𝐿𝑖𝑠𝑡〈𝐶〉, 𝐿𝑖𝑠𝑡〈𝑃𝑎𝑖𝑟〈𝑠𝑡𝑟𝑖𝑛𝑔, 𝐿𝑖𝑠𝑡〈𝑠𝑡𝑟𝑖𝑛𝑔〉〉〉〉 𝑐𝑜𝑟𝑟𝑒𝑠𝑝 ∷ 𝐶 → 𝐿𝑖𝑠𝑡〈𝐶〉 → 𝐷𝑖𝑐𝑡𝑖𝑜

où le type 𝐷𝑖𝑐𝑡𝑖𝑜 représente un dictionnaire de modèles (plus de détails plus bas) . Le dictionnaire accepte plusieurs valeurs pour un même nom, ce qui permet à un modèle comme ∗∗ {𝑣𝑎𝑙𝑒𝑢𝑟{? = 𝑣𝑎𝑙}} de faire correspondre 𝑣𝑎𝑙 à plusieurs noms.

La définition de 𝑐𝑜𝑟𝑟𝑒𝑠𝑝(𝑐, 𝑙𝑠𝑡) a été omise par souci de simplicité, celle-ci étant complexe. Soit 𝑐𝑜𝑟𝑟𝑒𝑠𝑝(𝑚, 𝑙𝑠𝑡) = 𝑝, alors 𝑓𝑖𝑟𝑠𝑡(𝑝) est une liste de Contextes 𝑐 ∈ 𝑙𝑠𝑡 pour lesquels la mise en correspondance de 𝑚 avec 𝑐 résulte en 𝑐′: 𝐶(¬𝑒𝑚𝑝𝑡𝑦(𝑐)), alors que 𝑠𝑒𝑐𝑜𝑛𝑑(𝑝) est un

dictionnaire.

Ces deux exemples de requêtes mettent en relief qu’une requête pour du Contexte dans ContextAA résulte en la production de deux résultats, soit un Contexte, fruit de la correspondance entre le modèle de Contexte décrit par la requête, et un dictionnaire des noms de Contexte correspondant aux noms préfixés par ? = dans un modèle lors de la mise en correspondance avec d’autres Contextes.

4.4.7.1 Jeton ∗ (match any)

Le jeton ∗ subsume un nom de Contexte. Par exemple :  l’expression ∗ subsume tout Contexte;

 l’expression ∗ {𝑎} correspond à un Contexte, peu importe son nom, dont l’une des valeurs est 𝑎, comme par exemple 𝑏{𝑎} ou 𝑏{𝑐 𝑎{𝑏} 𝑑};

 l’expression 𝑎 {∗ {𝑏}} correspond à un Contexte nommé 𝑎 dont l’une des valeurs contient dans ses valeurs un Contexte 𝑏, comme par exemple 𝑎{𝑐{𝑏}} ou 𝑎{𝑑 𝑐{𝑏}} mais pas 𝑎{𝑏}.

4.4.7.2 Jeton ∗∗ (multilevel match any)

Le jeton ∗∗ subsume à un nombre arbitrairement grand de Contextes hiérarchisés dans une même branche. Ce jeton apparaît habituellement dans une structure hiérarchique avec un sous-Contexte indiquant où il faut cesser de réaliser une correspondance implicite. Par exemple :

 l’expression ∗∗ subsume tout Contexte;

 l’expression ∗∗ {𝑣𝑎𝑙} correspond à toute séquence de Contextes dans une même branche jusqu’à correspondance du nom 𝑣𝑎𝑙, comme par exemple 𝑎{𝑏{𝑣𝑎𝑙}}, 𝑎 {𝑏 {𝑐{𝑣𝑎𝑙{10}}}}, 𝑣𝑎𝑙 ou 𝑣𝑎𝑙{𝑎}, mais pas 𝑎{𝑏};

 l’expression 𝑎 {∗∗ {𝑏{∗∗ {𝑐}}}} correspond à un Contexte 𝑎 ayant un sous-Contexte 𝑏, ce dernier ayant un sous-Contexte 𝑐;

97 4.4.7.3 Jeton ? (match auto)

Le jeton ? subsume un seul élément de nom. Par exemple :  l’expression ? correspond à 𝑎 ou à 𝑏{𝑐} mais pas à 𝑎: 𝑏{𝑐};

 l’expression ? : 𝑎{𝑏} correspond à 𝑎: 𝑎{𝑏} ou 𝑐: 𝑎{𝑏} mais ne correspond ni à 𝑏, ni à 𝑎: 𝑐{𝑏}. Pour un nom non-composite, ? équivaut à ∗.

4.4.7.4 Jeton ? = (named element)

Le jeton ? = a un impact semblable à celui du jeton ? mais associe un nom au modèle correspondant dans un dictionnaire de modèles.

4.4.7.5 Jeton 𝒂𝒍𝒍

Le jeton 𝑎𝑙𝑙 a pour impact d’obliger que tous les modèles d’un même groupe aient une correspondance, puis de fusionner les résultats. Il sert par exemple à exprimer une requête pour un Contexte contenant à la fois une unité exprimée en degrés Celsius et une valeur numérique. Pour distinguer les unes des autres les règles décrivant les modèles qui doivent être identifiés pour remplir les exigences d’un 𝑎𝑙𝑙, on aura recours à des clauses d’échappement. Par exemple :

𝑎𝑙𝑙 {#1{∗∗ {𝑡𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑒}}#2{∗∗ {𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛}}}

pour tout Contexte ayant à la fois un sous-Contexte 𝑡𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑒 et un sous-Contexte 𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛. Notez la distinction entre 𝑟𝑞 =∗∗ {𝑎 𝑏} et 𝑟𝑞′= 𝑎𝑙𝑙 {#1{∗∗ {𝑎}}#2{∗∗ {𝑏}}} : le modèle de

Contexte 𝑟𝑞 requiert qu’un sous-Contexte ait comme valeurs les Contextes 𝑎 et 𝑏, alors que le modèle de Contexte 𝑟𝑞′ requiert qu’un Contexte ait un sous-Contexte 𝑎 et un autre sous-Contexte

𝑏, sans que ces deux Contextes fassent partie de la valeur d’un même Contexte. Concrètement, 𝑟𝑞 accepte 𝑐{𝑎 𝑏} mais pas 𝑐{𝑥{𝑎}𝑦{𝑏}} ou 𝑐{𝑎{𝑏}} alors que 𝑟𝑞′ accepte les trois.

4.4.7.6 Jeton # (échappement)

Une clause d’échappement est un élément de nom débutant par le symbole #. Les clauses d’échappement sont pour l’essentiel escamotées lors de la construction d’une opération sur le Contexte. Une clause d’échappement permet d’exprimer un modèle jouant un rôle structurel mais ne devant pas intervenir dans le processus de mise en correspondance.

Un exemple est donné dans §4.4.7.5 avec l’expression 𝑎𝑙𝑙 {#1{∗∗ {𝑡𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑒}}#2{∗∗ {𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛}}} où les expressions ∗∗ {𝑡𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑒} et ∗∗ {𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛} sont identiques au sens de la comparaison des Contextes (une comparaison de surface). L’insertion de clauses d’échappement comme #1 et #2, constituant des noms distincts, permet d’intégrer ces deux expressions sous un même nom. Dans le cas d’une composition d’opérations sur le Contexte, il est possible de voir les noms précédés par un # comme des étapes du calcul.

98

4.4.7.7 Échappement et ordonnancement des valeurs

Dans le cas où 𝑐: 𝐶 décrit une composition d’opérations, il se peut que celles-ci doivent être exécutées dans un ordre particulier, or le fait que 𝑣𝑎𝑙𝑢𝑒(𝑐) soit un ensemble a pour effet que l’ordre dans lequel se trouvent ses éléments soit a priori indéfini, et peut par conséquent ne pas être celui souhaité.

Les clauses d’échappement permettent de résoudre ce problème. Par exemple, il est possible d’utiliser l’écriture #𝑛, où 𝑛 ∈ ℤ et où #𝑖 < #𝑗 ⇔ 𝑖 < 𝑗, pour imposer un ordre de traitement des Contextes 𝑐′ tels que 𝑐∈ 𝑣𝑎𝑙𝑢𝑒(𝑐). Cette mise en ordre des Contextes est contextuelle, et n’est

faite par ContextAA que dans les cas où un tel ordonnancement est pertinent.