GNU social JP
  • FAQ
  • Login
GNU social JPは日本のGNU socialサーバーです。
Usage/ToS/admin/test/Pleroma FE
  • Public

    • Public
    • Network
    • Groups
    • Featured
    • Popular
    • People

Conversation

Notices

  1. Embed this notice
    おかゆりぞっと (okayurisotto@misskey.okayurisotto.net)'s status on Wednesday, 08-Oct-2025 19:20:27 JST おかゆりぞっと おかゆりぞっと

    次のような未知のJSONがソフトウェアに与えられたとき、
    { "name": "Alice" }
    ソフトウェアは"Alice"という値がなんであるかを識別することはできません。よって、nameという文字列キーの代わりに事前に定義された識別子を用いることにしましょう。例えば:
    { "http://xmlns.com/foaf/0.1/name": "Alice" }
    (URLとして解釈可能な文字列ではありますが、これはたまたまです。URLとして機能するわけではありません。便宜上このような文字列を使っているというだけ。ですのでそのURLのドメインが悪意ある第三者によって詐欺サイトにリダイレクトするようになっていても、JSON-LD的には問題ありません!)

    ここで、互換性のため@contextというものを考えたいと思います。これを使って次のように書くと、
    { "@context": { "name": "http://xmlns.com/foaf/0.1/name" }, "name": "Alice" }
    @contextを無視するだけで、従来のソフトウェアは今まで通りにJSONを扱うことができます。これがJSON-LDの基本的なコンセプトです。

    ちなみに@contextではあらゆる識別子をあらゆる文字列へマッピングできます。よって、ソフトウェアは次の2種類のJSON-LDを同じように解釈する必要がありますね!
    { "@context": { "name": "http://xmlns.com/foaf/0.1/name" }, "name": "Alice" }{ "@context": { "名前": "http://xmlns.com/foaf/0.1/name" }, "名前": "Alice" }
    ではここでさらなる抽象化を考えてみましょう。次のようにすると、与えられたJSON-LDが人物の情報であることを表すことができます。
    { "@context": "https://json-ld.org/contexts/person.jsonld", "name": "Alice" }
    コンテキストは複数指定することもできますし、従来の辞書型と混ぜることもできます。さらに、あるコンテキストで定義されたキーに別名を付けて使うこともできます。
    { "@context": [ "https://example.com/foo", "https://example.com/bar", { "buz": "https://example.com/buz", "qux": "buz:qux" } ] }
    そうそう、クラス定義というものもあります。次の例における"Object"という文字列値は、Activity Vocabulary(ActiviyPubを構成する仕様の一つ)におけるObjectというクラスであることを示すものです。
    { "@context": "https://www.w3.org/ns/activitystreams", "type": "Object", "id": "http://www.test.example/object/1", "name": "A Simple, non-specific object" }
    Objectという文字列がキーとして使われることがないことはJSON-LDからは読み取れませんが、まあなんとかしてください!

    ちなみにMisskeyが送信するJSONに付与する@contextは次の通り。つまり、このコンテキストを理解できるソフトウェアを作れば、Misskeyと連携することができるということです。
    { "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { "Key": "sec:Key", "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", "sensitive": "as:sensitive", "Hashtag": "as:Hashtag", "quoteUrl": "as:quoteUrl", "toot": "http://joinmastodon.org/ns#", "Emoji": "toot:Emoji", "featured": "toot:featured", "discoverable": "toot:discoverable", "schema": "http://schema.org#", "PropertyValue": "schema:PropertyValue", "value": "schema:value", "misskey": "https://misskey-hub.net/ns#", "_misskey_content": "misskey:_misskey_content", "_misskey_quote": "misskey:_misskey_quote", "_misskey_reaction": "misskey:_misskey_reaction", "_misskey_votes": "misskey:_misskey_votes", "_misskey_summary": "misskey:_misskey_summary", "isCat": "misskey:isCat", "vcard": "http://www.w3.org/2006/vcard/ns#" } ] }
    (ですがMisskeyは受信したJSON-LDをただのJSONとして解釈し、@contextの内容は関知しません。)

    そもそも情報交換用のサーバ間APIでJSON-LDのような柔軟で既存のJSON構造を壊さずに導入できる仕様を使う必要はないかもしれませんが……まあ細かいことは気にしない!

    それでは、楽しいActivityPubサーバ開発を!!!

    In conversation about 7 months ago from misskey.okayurisotto.net permalink

    Attachments



    1. No result found on File_thumbnail lookup.
      Schema.org - Schema.org
      Schema.org is a set of extensible schemas that enables webmasters to embed structured data on their web pages for use by search engines and other applications.

    2. No result found on File_thumbnail lookup.
      FOAF Vocabulary Specification







    Feeds

    • Activity Streams
    • RSS 2.0
    • Atom
    • Help
    • About
    • FAQ
    • TOS
    • Privacy
    • Source
    • Version
    • Contact

    GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.

    Creative Commons Attribution 3.0 All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.