rdf-pub - generischer Activity-Pub Server
Einleitung
Sorry guys, there is currently no english version !
Fakten
rdf-pub …
-
… verknüpft verschiedenste Inhalte (Veranstaltung, Ort (POI), Artikel, Notiz, Audio, Video, Bild, …) miteinander und dient als Schnittstelle zum Ökosystem sozialer Plattformen (Fediverse).
-
… ermöglicht Anwendungsentwicklern per "Activity-Pub - Client to Server Interactions" (C2S) ihre Anwendungen mit dem Fediverse zu verknüpfen.
-
… spricht die Gruppe von Menschen an, die Daten öffentlich teilen. Es soll kein Messanger sein, dass kann https://matrix.org/ besser.
-
… schafft ein Netz von durchsuchbaren, kategorisierbaren, Maschinen-lesbaren, Maschinen-interpretierbaren und somit auffindbaren Inhalten.
-
… ist eine Datenbank für Inhalte aller Art (RDF)
Zielgruppen
Anwendungsentwickler
rdf-pub soll in erster Linie Anwendungsentwickler ansprechen, die Anwendungen fürs Fediverse entwickeln wollen oder bestehende Anwendungen mit dem Fediverse verknüpfen wollen.
Activity-Pub Community (W3C Social Web Incubator Community Group)
Die Client to Server Interactions haben noch viel Potenzial. rdf-pub wird hoffentlich dabei helfen Lücken der C2S Spezifikation zu füllen und ggf. eine Referenzimplementierung sein. Siehe auch nextgen-activitypub-social-api
Forschende
rdf-pub soll aber auch forschende ansprechen, die mit dem entstehenden Netz von linked-open-data ein "Neues" Internet schaffen. Warum "Neues" in Anführungszeichen? Da Tim Berners-Lee als er das Internet entwickelt hatte nicht an das Internet wie es heute ist gedacht hat, sondern eher an das Internet, das hoffentlich bald entsteht. Siehe auch Social Linked Data.
-
SoLiD hat als Schwerpunkt die wirkliche Hoheit über die eigenen Daten und damit einer besseren Privatsphäre.
-
rdf-pub hat als Schwerpunkt ein Netz von sozialen, öffentlichen* Inhalten.
(*) Was nicht bedeutet, dass in rdf-pub die Privatsphäre keine Rolle spielt. Jeder Nutzer hat in rdf-pub seine eigene Datenbank, die getrennt ist von den öffentlichen Daten.
Unternehmen
Nicht zuletzt kann rdf-pub auch einen großen Mehrwert für "datenlastige" Unternehmen bieten. Ich behaupte, dass alle Unternehmen ein Problem mit Daten und Datenmodellen haben. Diese Probleme sind jedoch in erster Linie nicht mit Software zu lösen! Es braucht ein Unternehmensdatenmodell. Leider sind die Fachbereiche oft nicht in der Lage in Datenmodellen zu denken, daher erledigen das die Entwickler der vielen Anwendungen im Unternehmen. Dies führt zu verteilten, redundanten Daten. Inwieweit rdf-pub irgendwann für Unternehmen interessant werden kann ist noch offen und auch derzeit keineswegs der Schwerpunkt. Falls Sie mit mir über ihr Unternehmensdatenmodell sprechen wollen, kontaktieren Sie mich.
Lese Anleitung
Das Thema Fediverse, Activity-Pub und daher auch rdf-pub ist recht komplex und anfänglich schwer zu verstehen. Ich versuche in dieser Dokumentation verschiedene Zielgruppen anzusprechen, bitte wähle selbst:
Ich bin Anfänger und weniger an der Technik interessiert
-
Du solltest ein Verständnis des Fediverse haben, sonst kannst Du auch rdf-pub nicht verstehen.
-
Schau Dir bitte auch die Informationen unter Activity-Pub an. Das wird Dir helfen.
-
Nachdem Du obiges verstanden hast, kannst Du Dich an die Dokumentation Grundproblem machen.
-
Danach lese weiter bei Anfänger.
Ich bin Anfänger und möchte alles verstehen
-
Super, das freut mich. Du hast evtl. einen längeren Weg vor Dir.
-
Die Community ist aber offen und unterstützt Dich.
-
Schau Dir alles unter Grundlagen an …
-
Nachdem Du obiges verstanden hast, kannst Du Dich an die Dokumentation Grundproblem machen.
-
… und wage Dich dann an die Dokumentation für Fortgeschrittene.
'Fediverse', 'Activity-Pub', 'Linked-Data', 'RDF', … sind für Dich keine Fremdwörter
-
Nachdem Du die Dokumentation Grundproblem gelesen hast, schau Dir die Dokumentation für Fortgeschrittene an.
Grundlagen
Fediverse
Das Fediverse ist ein vernetztes Ökosystem sozialer Plattformen, das auf einem offenen Protokoll namens ActivityPub basiert, mit dem Sie Ihre Inhalte, Daten, … zwischen den Netzwerken übertragen können.
Bitte ?!?!
Es würde den Rahmen diese Website sprengen dies im Detail zu erläutern, daher verweise ich hier auf externe Inhalte
-
Erläuterung von Framasoft englisch
-
Erläuterung von 'The Fediverse Files' (WordPress.com) englisch
-
Erläuterung von youknow deutsch
Einen guten Einstieg ins Fediverse (englisch) findet man hier.
Activity-Pub
Activity-Pub ist ein Protokoll (aus heutiger Sicht eher DAS Protokoll), welches das Fediverse ermöglicht. Die Protokolle hinter E-Mail (Was auch ein föderierter Dienst im Internet ist) sind IMAP und SMTP. Man kann also sagen Activity-Pub ist das IMAP/SMTP des Fediverse.
Vereinfacht kann man sich Activity-Pub wie sein E-Mail-Programm vorstellen. Alles, was man an andere sendet, landet in der eigenen outbox und alles, was an einen gesendet wird, landet in der eigenen inbox. Gesendet wird an Akteure (Person, Group, Organization, Application, Service) oder an Sammlungen (Collections). Eine Sammlung ist z.B. alle Menschen die einem folgen 'follower'. Eine spezielle Sammlung ist 'public' dies bedeutet, dass die Nachricht von allen gesehen werden kann. Wichtig zu wissen ist hier eben der Unterschied zu Plattformen wie Facebook, Instagramm & Co. dass Akteure auf allen Plattformen im Fediverse adressierbar sind und nicht nur auf der eigenen Instanz. (Also @max@rdfpub-organisation1 kann mit @maria@rdfpub-organisation2 Nachrichten austauschen, ebenso wie mit @john@mastodon.sozial)
Hier versucht arthurpizza dies zu erläutern, was ihm mehr oder weniger gelingt. Für Neulinge oder nicht Techniker könnte das etwas verwirrend sein. Das liegt an der Komplexität des Themas, es ist nicht einfach dies zu verstehen und erst gar nicht es zu erläutern. Für Nicht-Techniker ist es aber auch nicht nötig das zu verstehen. Es reicht einigermaßen zu verstehen, was das Fediverse ist und zu wissen, dass Activity-Pub das Protokoll ist, welches das Fediverse aus technischer Sicht ermöglicht.
Linked Data
Manu Sporny hat dazu ein exzellentes Erklärungsvideo englisch erstellt
"Kurz" auf Deutsch:
Es gibt die Adresse: Musterstrasse 13; 1234 Musterstadt. Dieser Adresse können wir die ID 'http://example.com/1234_musterstrasse_13' geben (Id’s sind im Linked Data Kontext immer URL’s).
Es gibt die Person 'Klaus' und die Person 'Petra', beide wohnen an der Adresse 'http://example.com/1234_musterstrasse_13'.
Auch 'Klaus' und 'Petra' bekommen eine ID 'http://example.com/Klaus' & 'http://example.com/Petra'.
Unsere Adresse hat die Eigenschaften: Straße, Hausnummer, Postleitzahl, Ort. Im Kontext von Linked Data sind Eigenschaften wiederum URL’s. Man kann das z.B. so darstellen:
Musterstrasse |
|
13 |
|
1234 |
|
Musterstadt |
Und da dies schnell unübersichtlich wird, kann man für Urls sogenannte Präfixe vergeben. Wenn wir also festlegen, das der Präfix 'example' für 'http://example.com/' steht, schaut es so aus:
example:strasse |
Musterstrasse |
example:hausnummer |
13 |
example:postleitzahl |
1234 |
example:ort |
Musterstadt |
Und für Klaus und Petra:
example:name |
Klaus |
example:adresse |
example:1234_musterstrasse_13 |
example:name |
Petra |
example:adresse |
example:1234_musterstrasse_13 |
Oder als Diagramm so:
Linked Open Data
Auszug aus Wikipedia:
Idee offener vernetzter Daten
Offene vernetzte Daten sind sämtliche Datenbestände, die im Interesse der Allgemeinheit der Gesellschaft ohne jedwede Einschränkung zur freien Nutzung, zur Weiterverbreitung und zur freien Weiterverwendung frei zugänglich gemacht und über das World Wide Web miteinander vernetzt sind. Ein Beispiel für einen Standard unter der Nutzung dieser Prinzipien ist Akoma Ntoso, auf dessen Grundlage in Deutschland offene, maschinenlesbare, vernetzte und adressierbare Rechtsetzungs- und Parlamentsdokumente veröffentlicht werden sollen.
RDF
Ok, bei RDF geht es ans Eingemachte. RDF ist die Abkürzung für 'R esource D escription F ramework' ein Standard des World Wide Web Consortium (W3C)
Wichtig zu wissen ist, dass Activity-Pub auf JSON-LD basiert und dass JSON-LD eine Repräsentation von RDF ist.
Im Moment scheinen sich zwei Fronten in der Activity-Pub-Community zu bilden:
Eine schwierige Situation. Ich setze mich sehr für LSON-LD oder eben mehr RDF ein und möchte eine Lösung für beide Zielgruppen finden. Eine einfache Sicht auf bestimmte Typen mit JSON aber auch die Möglichkeit komplexere, generische Daten in RDF abzubilden/verarbeiten. Es bleibt spannend. rdf-pub könnte hier eine Lösung sein. |
RDF hier zu erklären ist nicht sinnvoll. Ein erster Einblick kann Wikipedia geben.
Wer tiefer einsteigen möchte, kann sich Folgendes ansehen:
-
For the concept of URI, URL, Namespaces and Prefix (in this video called CURIE) see RDFa Basics from 1:25 to 2:23
-
a longer detailed description about URIs How to name Things URIs about 20 minutes
-
A introduction about RDF 1.7 How to Represent Simple Facts with RDF from 3:16 to 10:02
-
The turtle format explained RDF and Turtle Serialization about 14 minutes
Was ist rdf-pub
Grundproblem
Fehlende Implementierung der 'Client to Server Interactions (C2S)'
Oft findet man Bilder wie dieses, die das Fediverse zeigen:
Das zeigt aber nur eine sehr vereinfachte Sicht der Dinge. Es zeigt im Wesentlichen die Server (Mastodon, Pixelfed, Peertube,…). In der Regel redet ein Benutzer aber nicht direkt mit dem Server, sondern mit einer Client-Anwendung, die den Server nutzt.
Und hier sehen wir eine unzufriedenstellende Entwicklung. Die Activity-Pub-Spezifikation beschreibt zwei Teile:
-
Client to Server Interactions (C2S)
-
Server to Server Interactions (S2S)
Die Spezifikation an sich lässt viele Fragen offen, das hat Vor- und Nachteile. Im Bereich C2S allerdings sind die Lücken sehr groß, sodas sich nur wenige, bis keine an die Spezifikation gehalten haben, sondern ihre eigene API (Schnittstelle) entwickelt haben. Das bedeutet jedoch, das eine Client-Anwendung nicht generisch verwendet werden kann. Theoretisch sollte eine Client-Anwendung die C2S mit einem Activity-Pub-Server spricht für alle Activity-Pub-Server verwendbar sein. Das würde bedeuten, dass Mastodon, Pixelfed, Peertube alle mit derselben Client-Anwendung verwendbar sind.
AndStatus ist eine Client-Anwendung, die versucht hat die C2S Schnittstelle zu verwenden. Allerdings fehlt es hier im Moment an der Kommunikation und der weiter Entwicklung. Es ist dringend nötig, dass die Community hier weiter forscht und Erweiterung der Spezifikation vorschlägt.
Idealerweise würde es so aussehen:
rdf-pub möchte versuchen Client-Anwendungen auschließlich per C2S anzubinden und ggf. 'Fediverse Enhancement Proposals' (FEPs) bereitzustellen, falls die C2S API nicht ausreichend ist. Hier gibt es Interesse und Aktivitäten in der Community. |
Server unterstützen 'nur' bestimmte Objekttypen
Im Wesentlichen beschränkt sich die Föderation im Fediverse auf den Austausch von 'Likes', 'Kommentaren' und evtl. noch 'Notitzen'. Mastodon z.B. behandelt schwerpunktmäßig 'Notes', versteht aber auch 'Article'. Leider werden beide irgendwie inkonsistent verarbeitet.
rdf-pub möchte generisch mit Objekttypen umgehen und alle Typen zulassen. Daher auch der Name rdf-pub. Alle RDF Objekttypen sollen akzeptiert werden. Wie sich das in der Praxis gestalten wird, wird noch spannend. |
Anfänger
So, ich hoffe, Du hast jetzt einen Überblick über alles nötige bekommen und hast in etwa eine Ahnung, was im Fediverse abgeht.
Abschließende Sätze:
rdf-pub ist wie E-Mail, Du kannst an alle die irgendwo im Fediverse eine Adresse haben Nachrichten (Veranstaltung, Ort (POI), Artikel, Notiz, Audio, Video, Bild, …) senden.
Im Gegensatz zu E-Mail sendet rdf-pub aber selbstbeschreibende Daten (RDF) die von Maschinen interpretiert & verknüpft werden können und somit ein Netzwerk von Inhalten entsteht.
Und ja, das ist im Sinne von Datenschutz und Überwachung ein Problem! Dies ist es ebenso bei Facebook, Instagramm & Co. ein Problem. Handelt es sich jedoch um öffentliche Daten, dann ist genau dies der Wunsch. Ein Netz von durchsuchbaren, kategorisierbaren Inhalten.
Fortgeschrittene
rdf-pub möchte die Lücken, die unter Grundproblem beschrieben sind, füllen.
-
Es handelt sich um eine Spring-Boot-Anwendung.
-
Programmiersprache ist Java
-
Die Architektur ist Hexagonal.
-
Als Abstraktion zur Datenbank wird apache-commons-rdf eingesetzt.
-
Als Datenbank kommt rdf4j zum Einsatz.
Stand Dezember 2024 hab ich leider noch nicht so viel Inhalte für Fortgeschrittene.
Die "alte" Website hat evtl. noch ein paar Informationen. Relevant für dich wird wohl die entstehende Spezifikation werden.
Diskussionen über Themen rund um rdf-pub finden in socialhub statt, oder im Fediverse. Ich versuche das HashTag #activitypub bzw. #activitypubdev zu verwenden.
Ach, ganz wichtig! Der Source Code.
About
Team
Fred Hauschel
Software Engineer
http://hauschel.de