コンテンツグラフ(Content Graph)
解決済みのWikiLinkとMarkdownリンクから作られる、コンテンツエントリ間の関係の網です。どのノートがどれにリンクしているかに答え、バックリンクや近傍の問い合わせに使います。
辺
解決済みのWikiLinkやMarkdownリンクは、参照元のエントリから参照先への有向の辺を作ります。埋め込みも辺を作り、依存関係として追跡されます。
問い合わせ
graph.outgoing(slug); // entries this note links to
graph.incoming(slug); // backlinks
graph.neighbors(slug); // both directions
リンクに基づく辺の解決
コンテンツグラフは、コンテンツマニフェストのoutgoingLinksとincomingLinksのマップにある解決済みリンクから有向の辺を構築します。SSGのビルド中は次のようになります。
- WikiLink
[[page]]や[[page#heading]]は、kind: "note"と対象のslugを持つ解決済みのノートリンクを生成し、参照元のエントリから参照先のエントリへの発リンクの辺を作ります。 - Markdownリンクは参照元のslugを基準に解決されます。パスが既知のコンテンツslugと一致すれば、参照元からその参照先への発リンクの辺が作られます。
- 未解決のリンク(外部URL、添付ファイルの参照)は
kind: "unresolved"として記録され、グラフの辺を作りません。そのためoutgoing、incoming、neighborsの問い合わせには現れません。
createContentGraph関数は、こうしたリンク由来の辺を問い合わせ可能なグラフにまとめ、バックリンクの表示や関連リンクのセクション向けにgraph.outgoing(slug)、graph.incoming(slug)、graph.neighbors(slug)の検索を可能にします。
extendContentGraphによる拡張
プラグインはextendContentGraphを実装することで、Coreを変更せずに独自の関係を追加できます。コールバックはPluginGraphContextを受け取り、マニフェストのoutgoingLinksやincomingLinksのマップへリンク参照を追加できます。プラグインが追加した辺はcreateContentGraphの呼び出し時に自動的に含まれ、「関連記事」、被引用グラフ、目次の相互参照といった機能を実現できます。
// Example plugin adding a "cites" relationship
context.extendContentGraph?.({
pluginName: "my-plugin",
outgoing: {
"post-a": ["post-b", "post-c"], // post-a cites post-b and post-c
},
});
結果のグラフのoutgoing、incoming、neighborsの問い合わせには、Coreが解決した辺とプラグインが提供した辺の両方が含まれます。
コンテンツグラフのAPI
ContentGraph型(packages/core/src/content/content_graph.ts)は次の問い合わせメソッドを提供します。
graph.outgoing(slug)—slugのノートがリンクしているエントリ(発リンクの辺)を返すgraph.incoming(slug)—slugのノートへのバックリンクを返すgraph.neighbors(slug)—slugのノートへリンクしている、またはそこからリンクされているエントリ(両方向)を返すgraph.outgoingSlugs(slug)— 発リンク先のslugだけを返すgraph.incomingSlugs(slug)— 被リンク元のslugだけを返すgraph.neighborSlugs(slug)— 隣接ノードのslugだけを返す
これらはマニフェストのoutgoingLinksとincomingLinksのマップからcreateContentGraphが構築します。