Contents
Model Compounds
Compounds let you represent structured records in Liquid syntax while still storing everything in graph form.
Step 1. Define a Compound Type
select cid, user_name, domain
from liquid.query($$
DefCompound("Email", "user", "0", "liquid/string").
DefCompound("Email", "domain", "0", "liquid/string").
Edge("Email", "liquid/mutable", "false").
Email@(user="root", domain="example.com").
Email@(cid=cid, user=user_name, domain=domain)?
$$) as t(cid text, user_name text, domain text);
Step 2. Understand cid
The compound identity is a canonical Liquid literal built from the type and roles.
cid=is optional when assertingcid=is useful when querying or joining compounds with edges
Step 3. Join Compounds with Other Facts
select cid, label
from liquid.query($$
DefCompound("Task", "label", "0", "liquid/string").
Edge("Task", "liquid/mutable", "false").
Task@(label="write_docs").
Edge("workflow:docs", "has_task", "Task@(label='write_docs')").
Task@(cid=cid, label=label)?
$$) as t(cid text, label text);
Step 4. Use Compounds as Your Public Model
Compounds are a good fit for:
- typed domain records
- claims or observations
- workflow entities
- security grants
- ontology statements with structured authorship
Step 5. Know the Storage Model
Compounds are still graph data:
- one compound vertex
- one edge per role
- canonical relative identity string as the vertex literal