Skip to content

Note

このドキュメントは2026-02-27 02:17PLaMo Translation Modelを使用して自動翻訳されました。

FEP-34c1: TREEハイパーメディア語彙を用いたコレクションフィルタリング

概要

本仕様では、ActivityPubプロトコルにおけるコレクションフィルタリング機能を定義します。これにより、クライアントは特定の条件に基づいてサーバーから取得するコンテンツを絞り込むことが可能になります。この機能は、Timeline、Mentions、Private Messagesなどのビュー作成に活用できます。

基本概念

1. フィルターリクエスト形式

フィルター要求は以下のJSON形式で行います:

{
  "@context": {
    "tree": "https://w3id.org/tree#",
    "fep34c1": "https://w3id.org/fep/34c1#",
    "as": "https://www.w3.org/ns/activitystreams#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  },
  "@type": "fep34c1:FilterRequest",
  "tree:relation": [
    {
      "@type": "tree:EqualToRelation",
      "tree:path": { "@id": "rdf:type" },
      "tree:value": [
        { "@id": "as:Create" },
        { "@id": "as:Update" },
        { "@id": "as:Delete" },
        { "@id": "as:Announce" }
      ]
    },
    {
      "@type": "tree:EqualToRelation",
      "tree:path": { "@id": "as:actor" },
      "tree:value": { "@id": "as:following" }
    },
    {
      "@type": "tree:EqualToRelation",
      "tree:path": [{ "@id": "as:to" }, { "@id": "as:cc" }],
      "tree:value": [
        { "@id": "https://www.w3.org/ns/activitystreams#Public" },
        { "@id": "as:followers" }
      ]
    }
  ],
  "fep34c1:pageSize": 20
}

2. サポートされる関係タイプ

  • tree:EqualToRelation:指定されたパス値が一致する場合にマッチ
  • tree:NotEqualToRelation:指定されたパス値が一致しない場合にマッチ
  • tree:GreaterThanRelation:数値型のパス値が大きい場合にマッチ
  • tree:LessThanRelation:数値型のパス値が小さい場合にマッチ
  • tree:PrefixRelation:文字列が指定したプレフィックスで始まる場合にマッチ

3. 特殊プレースホルダー値

以下の値はクエリ実行時にサーバー側で動的に処理されます: - as:following:フォロワーリストに基づくフィルタリング用 - as:followers:フォローされているユーザーに基づくフィルタリング用

実装ガイドライン

1. サーバー側要件

  1. 特殊プレースホルダー値の処理
  2. クエリ受信時にこれらの値を動的に解決し、フィルター条件を適用します(セクション4参照)

  3. 許可されるパス値

  4. tree:pathで指定可能な値は、あらかじめ定義されたActivityStreamsプロパティに制限することを推奨します(セキュリティ考慮事項を参照)

  5. 複数パスと関係タイプの解釈

  6. 単一パスでEqualToRelationを使用する場合:UNION演算子を適用(いずれかのパスがマッチすればOK)
  7. NotEqualToRelationを使用する場合:ALL演算子を適用(すべてのパスが不一致である必要あり)

2. クライアント側実装

  1. コレクションプロパティの確認
  2. リクエスト対象のコレクションにtree:searchが存在するか確認します

  3. フォールバック処理

  4. tree:searchが存在しない場合:クライアント側でフィルタリングを実装します

  5. キャッシュ戦略

  6. フィルター要求結果はETag/If-None-Matchヘッダーを使用してキャッシュすることを推奨します

  7. エラーハンドリング

  8. サーバー側がフィルター機能をサポートしていない場合は405 Method Not Allowedを返すことを期待してください

後方互換性

本仕様は以下の点で完全な後方互換性を確保しています: - フィルタリング非対応のサーバーはPOSTリクエストに対して405 Method Not Allowedを返します - クライアント側はクライアントサイドフィルタリングにフォールバック可能です - 既存のコレクションGET操作はそのまま使用可能です - tree:searchプロパティの有無がフィルター機能対応の指標となります


実装事例

  • ChangingGraph:Spring BootとRDF4Jで構築された分散型ソーシャルプラットフォーム。インボックスフィルタリングにTREE関係を使用し、フィルター要求をSPARQLクエリに変換します。Timeline、Mentions、Private Messagesなどのビュー作成時にマルチパスフィルタリングを適用します。

参考文献


著作権

CC0 1.0 Universal(パブリックドメイン)による献呈

本Fediverse Enhancement Proposalの著者は、法律の範囲内ですべての著作権および関連権利を放棄しています。