logseq-schema
3
总安装量
2
周安装量
#61009
全站排名
安装命令
npx skills add https://github.com/rcmerci/skills --skill logseq-schema
Agent 安装分布
opencode
2
gemini-cli
2
claude-code
2
github-copilot
2
codex
2
kimi-cli
2
Skill 文档
Logseq Schema
Overview
Use this skill to ground Datascript queries in Logseq’s schema: core block/page/file attributes, built-in properties, built-in classes, and schema entities with :db/ident. Load references/logseq-datascript-schema.md for authoritative sources and query patterns, and
references/logseq-datascript-query-examples.md for scenario-based query examples.
Glossary
db/id: Internal numeric entity id (use with CLI flags like--id).:block/uuid: Stable UUID for a block entity; prefer when you need a persistent reference.:block/name: Lowercased page name, used for page lookup and joins.:block/title: Block or page title stored in the DB graph (use in queries when content text is needed).:block/tags: Ref-many attribute linking blocks to tag/page entities.:user.property/<name>: Namespace for user-defined properties stored directly on block entities.:logseq.property/*: Namespace for built-in properties stored directly on block entities.
Important Notes
- Never use following block attrs in
queryorpull, these attrs are file-graph only, never used in db-graphs::block/format,:block/level,:block/level-spaces,:block/pre-block?,:block/properties-order,:block/properties-text-values,:block/invalid-properties,:block/macros,:block/file,:block.temp/ast-body,:block.temp/ast-blocks,:block/marker,:block/content,:block/priority,:block/scheduled,:block/deadline,:block/properties,:block/left. - User properties are stored as
:user.property/<name>attributes on the block/page entity. - Pull selectors do NOT support namespace wildcards like
:user.property/*or:logseq.property/*. Only*(all attributes) or explicit attributes are allowed inpull. - To fetch user properties, either:
- Query datoms and filter attributes by namespace (e.g.,
user.property), then merge into the entity map, or - Discover explicit user property idents (via
:db/ident) and include them explicitly in the pull selector.
- Query datoms and filter attributes by namespace (e.g.,
- Property values are often entities/refs (not always scalars). When rendering values, check for
:block/title,:block/name, or:logseq.property/valueon the value entity before falling back to stringifying. - Many properties are
:db.cardinality/many(values may be sets/vectors). Treat them as collections in queries and formatting.
Datascript Query Mistakes To Avoid
- In
query:where/pull/find, attributes cannot use namespace wildcards (e.g.,:logseq.property/*,:user.property/*); you must use full attr:db/identvalues (e.g.,:logseq.property/status,:user.property/background). Inpull, only*(all attributes) is special. - Avoid nesting function calls inside predicates in
:where(some Datascript engines reject or mis-handle it). Bind the function result first, then compare.
Example of safe namespace filtering:
[:find [?a ...]
:where
[?e :db/ident ?a]
[(namespace ?a) ?ns]
[(= ?ns "user.property")]]
Workflow
1) Locate schema facts
- Open
references/logseq-datascript-schema.md. - Review the core attribute list and helper sets for ref/cardinality details.
- Review built-in properties and classes to understand available attributes and required fields.
2) Write or validate queries
- Prefer
:block/*attributes for block/page queries; use properties/classes only when needed. - If unsure about available
:db/idententities, run the CLI query listed in the references file. - For user properties, query against
:user.property/<name>directly; for built-ins, use:logseq.property/<name>.
3) Keep queries consistent with schema
- Respect ref vs scalar attributes and
:db.cardinality/manywhen joining. - Use property/class definitions to confirm public/queryable status before exposing a query to users.
Resources
references/
logseq-datascript-schema.mdlogseq-datascript-query-examples.md
Quick Examples
Pull user properties for a block
;; Discover idents, then pull explicitly.
[:db/id :block/title :user.property/background :user.property/notes]
Query blocks with a user property
[:find ?b ?v
:where
[?b :user.property/background ?v]]
Render a property value
Order of preference when value is a map/entity:
:block/title:block/name:logseq.property/value