Skip to content

Note

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

FEP-fb2a: Actorメタデータ仕様

概要

アクターが拡張プロパティや追加の語彙を定義することなく、自身に関する構造化情報を付加的に公開することは有用です。このFEPでは、アクターがそのメタデータを表現するための汎用的なキーバリューペアを公開する方法について規定します。

履歴

Mastodon v2.4.0(2018年3月)では「バイオフィールド」機能[1]が実装されました。これはプロフィールに構造化データを追加する機能で、attachmentフィールドを介してフェデレーションされ、schema.org語彙から派生したPropertyValue型の配列項目をフィルタリングして処理します。各項目ではActivityStreams語彙のname属性と、schema.orgコンテキストのvalue属性が使用されていました。schema.org名前空間はschemaとして定義されていましたが、誤ってhttp://schema.org#(本来あるべきhttp://schema.org/またはhttps://schema.orgではなく)にマッピングされていました[JSON-LDコンテキストプロパティ内]。

Misskey(2018年12月)では「ユーザーフィールド」機能[2]が実装され、Mastodonと同様のフェデレーションロジックを採用しました(まずPropertyValue型をフィルタリングし、その後namevalue属性を取得)。

Pleroma(2019年8月)では「カスタムプロフィールフィールド」機能[3]を実装し、これもMastodonと同様にPropertyValue型のフィルタリング後にnamevalueを取得するロジックを採用しました。

1. schema.org PropertyValueの代わりにActivityStreams Noteを使用する方法

不要な追加語彙に依存するのではなく、アクターに関する構造化メタデータを表現するより「ネイティブ」な方法を定義する方が合理的です。この目的のため、本FEPでは既存のActivityStreams 2.0語彙におけるNoteタイプ(schema.orgのPropertyValueではなく)と、同じく既存のcontentプロパティ(schema.orgのvalueではなく)を使用することを提案します。なお、nameプロパティはActivityStreams 2.0語彙とschema.org語彙の両方に存在し、ほぼ同様の意味論を持ちますが、本FEPではschema.org語彙の使用範囲外とします。

これにより、既存の慣例を基盤としたアクターメタデータの標準規格を定義することが可能となります。

2. 汎用的なアクターメタデータをキーバリューペアとして定義する

一般的なアクターメタデータフィールドは、アクターのattachment配列内に含める必要があります。より具体的なプロパティが存在し、表現しようとする特定のメタデータにより適した形式である場合、実装はこの汎用的なアクターメタデータの代わりに、あるいはそれに加えてその特定のプロパティを使用することが可能です:

  • 各汎用メタデータフィールドは必ずNote型でなければなりません
  • 各メタデータフィールドには必ず、そのフィールド名(キー)を表すname属性が必要です
  • 各メタデータフィールドには必ず、そのフィールド値(バリュー)を表すcontent属性が必要です

3. リンク形式による汎用アクターメタデータの定義

アクターメタデータフィールドは、コンテンツ値の代わりにリンク形式で表現することも可能です。

  • 各汎用リンクは必ずLink型でなければなりません
  • 各リンクフィールドには必ず、リンク先URLを表すhref属性が必要です
  • 各リンクフィールドには任意で、リンクのラベルを表すname属性を使用することが推奨されます
  • 適切なリンク関係が存在する場合(例えば"me"など)、rel値を使用することが望ましいです

4. 誤ったschema.org IRIを使用するレガシー実装との後方互換性確保

(本セクションは規範的ではありません)

現在誤ってhttp://schema.org#PropertyValueおよびhttp://schema.org#valueというIRIを使用している既存実装は、移行期間中に両形式をサポートすることで互換性を維持できます。以下のアルゴリズムを使用することで、本FEPに準拠した実装を優先的にサポートしつつ、レガシー実装にも対応可能です:

  • attachment配列からNote型またはLink型の項目のみをフィルタリングします。タイプがNoteの場合は各残り項目からnamecontentを取得し、Linkの場合はnamehrefを取得します。Linkタイプでrel属性に"me"が含まれる場合、rel-me検証を試みます
  • 該当する項目が見つからない場合(またはattachmentセット内に項目が残っている場合)、attachment配列からhttp://schema.org#PropertyValue型の項目のみをフィルタリングします。各残り項目からnamehttp://schema.org#valueを取得し、nameが既存のname値と重複する場合はその項目を無視します

移行期間が経過した後、実装はロジックを簡素化するため、Note型のみを対象にフィルタリングを行い、http://schema.org#PropertyValuehttp://schema.org#value、およびschema.orgコンテキストを完全にサポート対象外とすることもできます(ただし、これらの実装がschema.orgコンテキスト内の他の語彙を使用していない場合に限ります)。

5. 本FEPに基づくシリアライゼーションと比較した現行レガシー実装例

以下のプロフィールフィールドを持つプロファイルを例に考えます:

代名詞
: 彼ら/彼女ら

ポートフォリオ
: https://example.com/

従来の実装ではこれらを以下のようにシリアライズする場合があります:

{
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        {
            "sc": "http://schema.org#",
            "PropertyValue": "sc:PropertyValue",
            "value": "sc:value"
        }
    ],
    "id": "https://social.example/someone",
    "type": "Person",
    "attachment": [
        {
            "type": "PropertyValue",
            "name": "代名詞",
            "value": "they/them"
        },
        {
            "type": "PropertyValue",
            "name": "ポートフォリオ",
            "value": "<a href="https://example.com" target="_blank" rel="nofollow noopener noreferrer me" translate="no"><span class="invisible">https://</span><span class="">example.com</span><span class="invisible"></span></a>"
        }
    ]
}

文脈内で誤ったIRI用語マッピングを含まない実装の場合、圧縮後のシリアライゼーションは以下のようになります:

{
    "@context": "https://www.w3.org/ns/activitystreams",
    "id": "https://social.example/someone",
    "type": "Person",
    "attachment": [
        {
            "type": "http://schema.org#PropertyValue",
            "name": "代名詞",
            "http://schema.org#PropertyValue": "they/them"
        },
        {
            "type": "http://schema.org#PropertyValue",
            "name": "ポートフォリオ",
            "http://schema.org#PropertyValue": "<a href="https://example.com" target="_blank" rel="nofollow noopener noreferrer me" translate="no"><span class="invisible">https://</span><span class="">example.com</span><span class="invisible"></span></a>"
        }
    ]
}

本FEPに準拠した実装では、より簡潔で意味的に正しいシリアライゼーションが可能となり、以下のような同等の表現が得られます:

{
    "@context": "https://www.w3.org/ns/activitystreams",
    "id": "https://social.example/someone",
    "type": "Person",
    "attachment": [
        {
            "type": "Note",
            "name": "代名詞",
            "content": "they/them"
        },
        {
            "type": "Link",
            "name": "ポートフォリオ",
            "href": "https://example.com",
            "rel": ["nofollow", "noopener", "noreferrer", "me"]
        }
    ]
}

実装例

  • WordPress
  • Streams
  • NodeBB

参考文献

著作権

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

法律で許容される範囲において、本Fediverse Enhancement Proposalの著者らは当該著作物に関するすべての著作権および関連する権利を放棄しています。