logseq-schema について
logseq-schemaは、Logseqのスキーマに沿ったDatascriptクエリ作成を支援するリファレンススキルです。属性の説明やクエリ上の注意点、シナリオ別の例を提供します。
主な機能
- 01コアスキーマ属性の参照
- 02組み込みプロパティとクラスの説明
- 03ユーザープロパティのクエリ指針
- 04Datascriptクエリの注意点
- 05スキーマとクエリ例の参照
活用シーン
- 01Logseqのブロックやページを検索
- 02ブロックのユーザープロパティを取得
- 03プロパティ値とカーディナリティを確認
- 04クエリで無効な属性を避ける
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rcmerci/ skills --skill logseq-schemaインストール後、Claude Code で/logseq-schemaを入力して読み込まれたか確認します。
同梱ファイルreferences/logseq-datascript-query-examples.mdreferences/logseq-datascript-schema.md
詳細
Logseq Schema
概要
このスキルを使って、Logseq のスキーマに基づいた Datascript クエリを作成します。対象となるのは、ブロック、ページ、ファイルのコア属性、組み込みプロパティ、組み込みクラス、および :db/ident を持つスキーマエンティティです。信頼できる情報源とクエリパターンについては references/logseq-datascript-schema.md を、シナリオ別のクエリ例については
references/logseq-datascript-query-examples.md を読み込んでください。
用語集
db/id:内部の数値エンティティ ID です(--idなどの CLI フラグで使用します)。:block/uuid:ブロックエンティティの安定した UUID です。永続的な参照が必要な場合に優先して使用してください。:block/name:小文字に変換されたページ名で、ページの検索や結合に使用します。:block/title:DB グラフに保存されたブロックまたはページのタイトルです(コンテンツテキストが必要なクエリで使用します)。:block/tags:ブロックをタグ/ページエンティティにリンクする ref-many 属性です。:user.property/<name>:ブロックエンティティに直接保存される、ユーザー定義プロパティの名前空間です。:logseq.property/*:ブロックエンティティに直接保存される、組み込みプロパティの名前空間です。
重要な注意事項
- 次のブロック属性は
queryまたはpullで使用しないでください。これらはファイルグラフ専用であり、DB グラフでは使用されません。: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.property/<name>属性として保存されます。 - Pull セレクターでは、
:user.property/*や:logseq.property/*などの名前空間ワイルドカードはサポートされません。pullで使用できるのは*(すべての属性)または明示的な属性のみです。 - ユーザープロパティを取得するには、次のいずれかを行います。
- データムをクエリし、名前空間(例:
user.property)で属性をフィルタリングしてから、エンティティマップに統合する - 明示的なユーザープロパティの ident(
:db/ident経由)を特定し、pull セレクターに明示的に含める
- データムをクエリし、名前空間(例:
- プロパティ値は、多くの場合エンティティ/ref です(常にスカラーとは限りません)。値を表示するときは、文字列化する前に値のエンティティに
:block/title、:block/name、または:logseq.property/valueがあるか確認してください。 - 多くのプロパティは
:db.cardinality/manyです(値はセット/ベクターになることがあります)。クエリや整形ではコレクションとして扱ってください。
避けるべき Datascript クエリの誤り
queryの:where/pull/findでは、属性に名前空間ワイルドカード(例::logseq.property/*、:user.property/*)を使用できません。完全な attr:db/ident値(例::logseq.property/status、:user.property/background)を使用する必要があります。pullでは*(すべての属性)のみが特殊な値です。:whereの述語内に関数呼び出しをネストしないでください(Datascript エンジンによっては拒否されたり、誤って処理されたりします)。関数の結果を先に束縛してから比較してください。
名前空間を安全にフィルタリングする例:
[:find [?a ...]
:where
[?e :db/ident ?a]
[(namespace ?a) ?ns]
[(= ?ns "user.property")]]
ワークフロー
1) スキーマの情報を確認する
references/logseq-datascript-schema.mdを開きます。- ref/カーディナリティの詳細について、コア属性の一覧とヘルパーセットを確認します。
- 使用可能な属性と必須フィールドを把握するため、組み込みプロパティとクラスを確認します。
2) クエリを作成または検証する
- ブロック/ページのクエリでは
:block/*属性を優先し、必要な場合にのみプロパティ/クラスを使用します。 - 使用可能な
:db/identエンティティがわからない場合は、参照ファイルに記載された CLI クエリを実行します。 - ユーザープロパティには
:user.property/<name>を直接、組み込みプロパティには:logseq.property/<name>を使用してクエリします。
3) クエリをスキーマに沿わせる
- 結合する際は、ref 属性とスカラー属性の違い、および
:db.cardinality/manyを考慮します。 - クエリをユーザーに公開する前に、プロパティ/クラスの定義で公開/クエリ可能な状態か確認します。
リソース
references/
logseq-datascript-schema.mdlogseq-datascript-query-examples.md
簡単な例
ブロックのユーザープロパティを取得する
;; Discover idents, then pull explicitly.
[:db/id :block/title :user.property/background :user.property/notes]
ユーザープロパティを持つブロックをクエリする
[:find ?b ?v
:where
[?b :user.property/background ?v]]
プロパティ値をレンダリングする
値がマップ/エンティティの場合の優先順位:
:block/title:block/name:logseq.property/value
コメント
Markdown 対応