Aller au contenu
EN FR

Relations, contextes et termes nommés

Statut documentaire : reference — voir Maturité et preuves.

H-Logic conserve les relations polyadiques et sensibles aux rôles. Le contexte est modélisé comme un rôle typé ordinaire, et les valeurs d’environnement sont référencées explicitement avec &.

Relations

define .:#Transfer(sender:#Person, receiver:#Person, amount:#Money, context:#Context);

Utiliser une simple référence de rôle quand la relation est uniquement structurelle. Réifier une relation lorsque le fait a besoin de sa propre identité, de métadonnées, de persistance, d’un cycle de vie, d’actions, de confiance, de provenance ou d’une période de validité.

define .:#BelongsTo(entityA:#Entity, entityB:#Entity);
fact1:#BelongsTo(#child, #parent);

Un fait relationnel nommé peut lui-même porter des attributs ou participer à d’autres relations.

Le contexte est un rôle

define .:#Context(me)[label::#string];
define .:#VisibleIn(item:#Item, context:#Context);

Ne pas utiliser une pseudo-fonction telle que context(projectBeta). Lier explicitement un rôle de contexte.

Termes nommés

projectBeta := #projectBeta;
exists target=&projectBeta on .:#VisibleIn(label42, target);

Le préfixe & signifie « résoudre cette valeur nommée dans l’environnement ». Il ne fait pas partie du nom logique et ne peut pas être utilisé comme nom de rôle.

Valeurs fixes et valeurs par défaut

define .:#FixedScope(context:#Context=&globalContext);
define .:#DefaultScope(context:#Context default &globalContext);

Une valeur fixe contraint la résolution. Une valeur par défaut est fournie uniquement si aucune valeur explicite n’est donnée.

Domaines de rôles

Les domaines logiques peuvent être exprimés explicitement, par exemple role:(#A or #B). Pour une sémantique de sous-ensemble réutilisable, préférer un type nommé dans le graphe plutôt qu’un domaine construit ad hoc.