mium
Skrift
Drop #82··Datalog-Patterns Cookbook

Datalog-Patterns Cookbook··5 opskrifter til mium-power-users

Kopiérbare queries, ærlige faldgruber

Team Mut
bygger mium··Falktron, Oelde
audio··3:00
▶ Lyd kommer snart
Transskription

Hvad nu hvis en Datalog-query ikke var det værktøj, du frygter, men en opskrift, du kopierer og tilpasser én gang? Det er præcis, hvad dette cookbook handler om — fem opskrifter fra mium-hverdagen, hver brugbar i sig selv, hver med et ærligt sted, hvor den ikke bærer.

Datalog er et logisk forespørgselssprog fra halvfjerdserne, som Rich Hickey genopdagede med Datomic til praktisk database-hverdag. mium bruger en Datalog-dialekt til at forespørge sit eget blok-indeks — dine noter, kanter og properties bliver til data, som du stiller præcise spørgsmål til. Du behøver ikke at lære sproget fra bunden; du har brug for mønstre, der allerede virker.

Opskrift et besvarer standard-sprint-spørgsmålet: hvilke tasks er åbne og skal leveres inden kvartalets udgang? Querien filtrerer over fristen i kvartals-vinduet og over status, og returnerer owner. Det ærlige sted: ISO-dato-strings bærer kun, hvis fristen plejes konsistent som år-måned-dag. Blandede formater bryder sammenligningen i stilhed — querien returnerer så en tom mængde, ikke en fejl.

Opskrift to viser dig de centrale knuder i dit vault: de ti oftest refererede blokke. Det er ofte begreber, personer, projekter — de steder, hvor din viden løber sammen. Trade-off'et: tællingen behandler transklusive embeds og rene visnings-wikilinks ligeværdigt. Den, der kun vil tælle ægte semantiske henvisninger, filtrerer yderligere på en property-markør.

Opskrift tre læser audit-trailen for en enkelt blok: hvem har ændret hvad og hvornår? Querien læser transaction-historikken baglæns for et givet blok-ID. Forudsætningen er, at historikken er aktiveret — standard siden mium nul komma fire. I ældre vaults mangler de nødvendige kanter, og for meget gamle blokke kan historikken være komprimeret og kun vise den seneste tilstand.

Opskrift fire aggregerer kunde-tags på tværs af alle vaults til en sorteret hyppighedsliste, og opskrift fem sporer forældreløse op — noter uden indgående backlinks, dit vaults blinde ender. Begge forudsætter property- og namespace-disciplin; uden den returnerer de tomme mængder i stedet for indsigt. Og forældreløs-detektoren med sit not-join er dyr — på store vaults hører den til i en natlig cron-kørsel, ikke i den interaktive session.

Datalog er ikke et universalinstrument, og det er det vigtigste budskab: til fritekst i blok-indholdet, til ustrukturerede vaults og til vag browsing er der bedre veje. Men der, hvor dit spørgsmål er præcist og dine properties plejede, giver din anden hjerne dig på en kopiérbar query præcis det svar tilbage, som længe har ligget i blokkene. Hvilken opskrift der passer hos dig — og hvilken der løber ud i det tomme — fortæller dig mere om dit vault end om sproget.

Dette cookbook henvender sig til mium-power-users og udvikler-profiler, der allerede har strejfet [[advanced-query-datalog]] og søger konkrete, kopiérbare eksempler. Fem opskrifter, hver selvstændig — den, der kun har brug for forældreløs-detektoren, springer direkte til opskrift 5. Datalog selv er et logik-programmeringssprog fra 1970'erne; Rich Hickey genopdagede det med Datomic (Cognitect, siden 2012) til praktisk database-hverdag. mium bruger en Datalog-dialekt til at forespørge sit eget blok-indeks.

Opskrifter

De fem opskrifter er uafhængige af hinanden. Pluk det, du har brug for, eller læs lineært — begge rækkefølger virker. Hver opskrift har: et problem, en query, eventuelt et faldgrube-callout.

Opskrift 1··Åbne tasks med frist i det aktuelle kvartal

Standard-sprint-spørgsmålet: hvilke tasks er åbne og skal leveres inden kvartalets udgang? Querien filtrerer over `frist::` i Q-vinduet og `status:: offen`, og returnerer owner.

[:find ?block ?frist ?owner
 :where [?block :frist ?frist]
        [?block :status "offen"]
        [(>= ?frist "2026-04-01")]
        [(<= ?frist "2026-06-30")]
        [?block :owner ?owner]]

Opskrift 2··Top-10 backlink-hubs

Hvilke blokke refereres oftest? Top-10 efter indgående `:links-to`-kanter er de centrale knuder i dit vault — ofte begreber, personer, projekter.

[:find (count ?backlink) ?target
 :where [?backlink :links-to ?target]
 :order-by [(count ?backlink) :desc]
 :limit 10]

Opskrift 3··Audit-trail for en blok

Hvem har ændret hvad og hvornår på en blok? Querien læser transaction-historikken baglæns for et givet blok-ID og returnerer `tx`, `attr`, `value` og `added`-flaget.

[:find ?tx ?attr ?value ?added
 :where [?block :db/id "<((uuid))>"]
        [?tx :tx/affected-block ?block]
        [?tx :tx/attr ?attr]
        [?tx :tx/value ?value]
        [?tx :tx/added ?added]]

Opskrift 4··Tag-aggregering på tværs af vaults

Hvor ofte optræder hvert kunde-tag på tværs af alle vaults? Querien grupperer over `tags::` med namespace-præfikset `#kunde-` og returnerer en sorteret hyppighedsliste.

[:find (count ?block) ?tag
 :where [?block :tags ?tag]
        [(re-pattern "^#kunde-") ?tag]
 :group-by ?tag
 :order-by [(count ?block) :desc]]

Opskrift 5··Forældreløs-note-detektor

Hvilke noter har ingen indgående backlinks og er ikke arkiverede? Disse forældreløse er vaultets blinde ender — kandidater til oprydning, sammenkædning eller arkivering.

[:find ?block ?title
 :where [?block :title ?title]
        [?block :archiv? false]
        (not-join [?block]
          [?other :links-to ?block])]

Når disse opskrifter IKKE passer

Datalog-queries er ikke et universalinstrument. Tre situationer, hvor disse opskrifter ikke bærer:

  1. Fritekst-søgning i blok-indholdet — Datalog filtrerer over properties og kanter, ikke over prosa. Til „find hver blok, der indeholder `Auftragsbestätigung` i teksten”, er mium-fritekst-indekset det rigtige instrument, ikke en Datalog-query.
  2. Meget ustrukturerede vaults uden property-disciplin — alle fem opskrifter forudsætter, at `frist::`, `status::`, `owner::`, `tags::` plejes konsistent. I et vault, hvor 80 % af blokkene ikke bærer nogen properties, returnerer querierne tomme mængder, ikke indsigt. Property-disciplin er forarbejde, ikke en bivirkning.
  3. Ad hoc-udforskninger med uklart spørgsmål — Datalog belønner præcise spørgsmål. Den, der bare vil „se lidt på, hvad der står i vaultet”, kommer hurtigere frem med graf-visningen eller backlink-browsing end med en query, der først skal designes.

Et ærligt spørgsmål

Hvilken af de fem opskrifter passede hos dig, og hvilken løb ud i det tomme? Hvis du sætter en af dem i produktion: hvad parametriserede du anderledes — flyttede Q-vinduet, ændrede tag-namespacet, hævede grænsen? Og hvis ingen passer: hvor overså vi hullet? Cookbook-opskrifter lever af at gnubbe sig op ad rigtige vaults — tilbagemeldinger om, hvilken opskrift #6 der mangler her, er velkomne. Videre i denne bølge: [[advanced-query-datalog]] for sprogets grundlag, [[simple-query]] for den blidere indgang uden Datalog-syntaks.

Forårsskolen er slut. Se Dag 93 → Spil spillet →