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.