Home
Reserver →
MODUL·· MOD-DATALOG-COOKBOOK-0.1

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

Kopiérbare queries, ærlige faldgruber

LÆRINGSMÅL
  1. Du læser og parametriserer de fem cookbook-queries til dit eget vault. ·· Succeskriterium: Du tilpasser Q-vinduet, tag-namespacet og grænsen korrekt i tre opskrifter uden at bryde syntaksen.
  2. Du benævner per opskrift det ærlige sted, hvor den ikke bærer, og dens forudsætning. ·· Succeskriterium: Du tilordner fem faldgruber (datoformat, kant-tælling, historik, namespace, not-join-omkostning) fejlfrit til deres opskrift.
  3. Du afgør, hvornår en Datalog-query er det forkerte middel, og en anden vej trækker. ·· Succeskriterium: Du genkender i fem tilfælde, om Datalog, fritekst-indekset eller graf-visningen giver det rigtige svar.
TEORI

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.

ØVELSER
  1. Tag opskrift 1 og tilpas den til dit aktuelle kvartal og dine property-navne. Tjek på forhånd med et re-pattern-filter, om dine frist-værdier overhovedet plejes konsistent som YYYY-MM-DD — og notér, hvor mange blokke der falder gennem nettet.⏱ 15 min

    💡 Kør først kun de to dato-sammenligninger, uden status-filteret. Bliver resultatet tomt, selvom du har åbne frister, er det næsten altid datoformatet, ikke logikken.

  2. Lad opskrift 5 (forældreløs-detektor) køre over dit vault én gang, og tæl træfferne. Afgør per forældreløs, om den skal kædes sammen, arkiveres eller slettes — og overvej, om kørslen er bærbar interaktivt hos dig eller hører til i et cron-job.⏱ 20 min

    💡 Hvis querien tydeligt hænger interaktivt, er dit vault stort nok til not-join-omkostningen. Pleje så i stedet en has-backlinks?-property og filtrér direkte på den.

VIDENS-QUIZ
  1. Hvorfor returnerer opskrift 1 (frist-filter) en tom mængde i stedet for en fejl ved blandede datoformater?

  2. Hvad tæller opskrift 2 (backlink-hubs) med som standard, som man bevidst måtte filtrere fra?

  3. Hvornår er en Datalog-query det forkerte middel?

  4. Hvorfor hører forældreløs-detektoren (opskrift 5) til i en natlig cron-kørsel på store vaults?

Modul-ID: MOD-DATALOG-COOKBOOK-0.1 ·· Falktron GmbH, Oelde
Forårsskolen er slut. Se Dag 93 → Spil spillet →