law_query
Une requête LawQL déterministe sur le CLIR d'une formalisation : une question sur le modèle de l'acte lui-même, pas sur une affaire. Relations (14) : anchors, edges, fields, imports, interpretations, labels, links, literals, nodes, norms, positions, rules, variables, windows. Listes des champs : law query --schema. Fonctions (9) : anchor/1, labels/1..2, short/1, contains/2, overlaps/2, starts_with/2, ends_with/2, position/2, derivation/2. exists/not exists sur une variable liée ; égalité et appartenance seulement, sans arithmétique ni comparaisons d'ordre. Périmètre : corpus par package.name (par exemple kz.corpus.labour_code, pas un nom de fichier) ou un glob ; sans corpus, toute la tranche du profil ; un périmètre hors profil est vide (CORPUS_EMPTY). Exemples : from r in rules where r.head_predicate == "urn:…#eligible" select r.id as producer, r.strength as strength, anchor(r.id) as anchors — qui produit ; from l in literals where l.predicate == "urn:…#eligible" select l.node as reader, l.context as context — qui lit ; query eligible over "pkg" { for x: Person; where applicant(x); select eligible(x); } — inférence par le noyau. C'est une orchestration au-dessus du CLIR et du noyau ; aucune sémantique juridique nouvelle n'est implémentée ici. Au lieu du texte, une question du catalogue avec arguments : anchors-of, imports-of, links-of, producers, readers, type-step (composition : law query --list) (les paramètres predicate/node/type sont des URN, pkg un package.name ou un glob). La réponse structurelle est une queryPage : resultHash du queryResult complet, snapshot (hachage de la liste des paquets du périmètre), rowCount, rows selon rowLimit (20, au plus 5000) et rowOffset, next avec le snapshot pour continuer ; full: true renvoie le queryResult complet quand le périmètre est un seul paquet. Chaque ligne porte sa provenance (nœuds CLIR) ; une réponse vide porte l'entonnoir explain (emptyAt nomme la clause) ; les erreurs portent des codes LDC-Qxxxx avec des indices ; un produit de sources trop large est refusé avant exécution (QUERY_TOO_BROAD), une continuation sur un autre instantané — SNAPSHOT_CHANGED.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| case | No | l'affaire pour query-over ; elle remplace la clause case | |
| full | No | renvoyer le queryResult complet au lieu d'une page ; seulement quand le périmètre est un seul paquet | |
| limit | No | un plafond explicite des matérialisations eval() (il ne borne PAS les lignes — voir rowLimit) | |
| query | No | inline LawQL | |
| corpus | No | le périmètre de l'instantané : un package.name (par exemple kz.corpus.labour_code) ou un glob sur package.name ; sans corpus, toute la tranche du profil | |
| engine | No | il y a un moteur — le noyau ; l'implémentation de référence est appelée par sa propre commande | lawc |
| question | No | le nom d'une question du catalogue de questions nommées (producers, readers, anchors-of, imports-of, links-of, type-step) ou d'un lint ; à la place de query | |
| rowLimit | No | combien de lignes dans structuredContent (20 ; le budget peut le baisser) | |
| snapshot | No | le hachage d'instantané de next.snapshot de la page précédente : une continuation sur un autre instantané est refusée (SNAPSHOT_CHANGED) | |
| arguments | No | les paramètres de la question : un objet « nom → chaîne » (predicate, node, type — des URN ; pkg — un package.name ou un glob) | |
| rowOffset | No | à partir de quelle ligne (0) ; la continuation vient de next avec snapshot ; requêtes structurelles seulement |