Matthias Pfefferle<p><strong>It’s a Thing!</strong></p><p>Das Fediverse tut sich schwer, das volle Potential der verschiedenen <a href="https://www.w3.org/TR/activitystreams-vocabulary/#object-types" rel="nofollow noopener" target="_blank">Activity-Objects</a> auszunutzen, hauptsächlich aus Angst, sie falsch oder schlecht darzustellen und deshalb teilen die meisten großen Netzwerke leider nur <code>Note</code>s.</p><p>Dabei könnte es so einfach sein!</p><p><a rel="nofollow noopener" class="u-url mention" href="https://social.wedistribute.org/users/deadsuperhero" target="_blank">@<span>deadsuperhero</span></a> schreibt auf seinem <a href="https://deadsuperhero.com/" rel="nofollow noopener" target="_blank">Blog</a>, dass er eigentlich gerne <code>Article</code>s veröffentlichen will, aber (hauptsächlich) durch Mastodon zu <code>Note</code> gezwungen wird, wenn er sicher gehen will, dass der Text vollständig dargestellt wird.</p><blockquote><p>Here’s the problem, though: the biggest player in the space, Mastodon, does a poor job of supporting Article. Instead, every post Mastodon uses is instead a <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-note" rel="nofollow noopener" target="_blank">Note</a>. From a semantic point of view, it might not seem like there’s a lot of difference between the two: both are effectively texts posts that can contain some formatting markup, both can hold an arbitrary amount of characters, and both can effectively be used to represent a full article.</p><p><a href="https://deadsuperhero.com/2024/04/a-content-fallback-mechanism-for-the-fediverse/" rel="nofollow noopener" target="_blank">A Content-Fallback Mechanism for the Fediverse</a></p></blockquote><p>Ironischerweise zeigt Mastodon eine föderierte <code>Note</code> vollständig an, auch wenn der Text weit über die eigentlich erlaubten 500 Zeichen hinaus geht, bei einem <code>Article</code> wird statt dessen aber nur die kurze <code>summary</code> benutzt.</p><p>Seine Idee: Ein Content-Fallback Mechanismus!</p><p>Das heißt jede Aktivität, egal von welchem Typ, liefert zusätzlich zu dem spezifischen Objekt, eine standardisierte <code>Note</code> (<code>content-fallback</code>): </p><pre><span><code>{ <span class="">"@context"</span>:[ <span class="">"https://www.w3.org/ns/activitystreams"</span>, { <span class="">"Hashtag"</span>:<span class="">"as:Hashtag"</span> } ], <span class="">"id"</span>:<span class="">"https://wedistribute.org/2024/04/iftas-dsa-guide/"</span>, <span class="">"type"</span>:<span class="">"Article"</span>, <span class="">"content-fallback"</span>: { <span class="">"content"</span>:<span class="">"IFTAS, the dedicated Trust & Safety organization ..."</span>, <span class="">"mediaType"</span>:<span class="">"text/plain"</span>, <span class="">"summary"</span>:<span class="">""</span>, <span class="">"tag"</span>:[{ <span class="">"href"</span>:<span class="">"https://wedistribute.org/tags/fediverse"</span>, <span class="">"name"</span>:<span class="">"#fediverse"</span>, <span class="">"type"</span>:<span class="">"Hashtag"</span> }], <span class="">"type"</span>:<span class="">"Note"</span>, <span class="">"updated"</span>:<span class="">"2024-04-11T20:55:29Z"</span> }}</code></span><span class="">Code-Sprache:</span> <span class="">JSON / JSON mit Kommentaren</span> <span class="">(</span><span class="">json</span><span class="">)</span></pre><p>Ich verstehe das Problem und finde die Idee generell nicht schlecht, aber eigentlich bietet ActivityPub alles Nötige schon von Haus aus! <a href="https://www.w3.org/TR/activitypub/" rel="nofollow noopener" target="_blank">ActivityPub</a> oder besser <a href="https://www.w3.org/TR/activitystreams-vocabulary/" rel="nofollow noopener" target="_blank">ActivityStreams</a> ist so aufgebaut, dass alle Objekte von einem Art <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-object" rel="nofollow noopener" target="_blank">Base-Object</a> abgeleitet werden. Das heißt <code>Article</code>, <code>Note</code>, <code>Event</code> oder <code>Place</code>, haben ein gleiches Minimal-Set an Attributen:</p><ul><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-attachment" rel="nofollow noopener" target="_blank">attachment</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-attributedto" rel="nofollow noopener" target="_blank">attributedTo</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-audience" rel="nofollow noopener" target="_blank">audience</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-content" rel="nofollow noopener" target="_blank">content</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-context" rel="nofollow noopener" target="_blank">context</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-name" rel="nofollow noopener" target="_blank">name</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-icon" rel="nofollow noopener" target="_blank">icon</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-image" rel="nofollow noopener" target="_blank">image</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-inreplyto" rel="nofollow noopener" target="_blank">inReplyTo</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-published" rel="nofollow noopener" target="_blank">published</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-replies" rel="nofollow noopener" target="_blank">replies</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-summary" rel="nofollow noopener" target="_blank">summary</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tag" rel="nofollow noopener" target="_blank">tag</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-updated" rel="nofollow noopener" target="_blank">updated</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-url" rel="nofollow noopener" target="_blank">url</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-to" rel="nofollow noopener" target="_blank">to</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-bto" rel="nofollow noopener" target="_blank">bto</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-cc" rel="nofollow noopener" target="_blank">cc</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-bcc" rel="nofollow noopener" target="_blank">bcc</a></code></li><li><code><a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-mediatype" rel="nofollow noopener" target="_blank">mediaType</a></code></li><li>…und <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-object" rel="nofollow noopener" target="_blank">mehr</a></li></ul><p>Und auch wenn beispielsweise <code>Place</code> oder <code>Event</code> einige spezifische Eigenschaften haben, die nicht jede Plattform „kennt“ und „versteht“, sollte es immer möglich sein, die Beschreibung (<code>description</code> oder <code>summary</code>) und den Titel (<code>name</code>) anzuzeigen.</p><p>Das Prinzip ist ähnlich wie, wenn nicht sogar inspiriert durch, <a href="https://schema.org/Thing" rel="nofollow noopener" target="_blank">schema.org/Thing</a>. Auch hier basieren alle Objekte letztendlich auf einem <code>Thing</code> und trotz der wesentlich größeren Anzahl1 an Objekten und Attributen, können Suchmaschinen sich immer sicher sein, dass es zumindest einen <code>name</code>, eine <code>description</code> und eine <code>url</code> zum Anzeigen gibt.</p><p>Bevor wir über also über ein `content-fallback` nachdenken, sollten wir (meiner Meinung nach) erst einmal dafür sorgen, dass die vorhanden Möglichkeiten richtig genutzt werden.</p><ol><li>The vocabulary currently consists of 806 Types, 1474 Properties 14 Datatypes, 90 Enumerations and 480 Enumeration members. – <a href="https://schema.org/docs/schemas.html" rel="nofollow noopener" target="_blank">https://schema.org/docs/schemas.html</a> ↩︎</li></ol>