Inhaltsverzeichnis
Grund Idee
Problemanalyse
- Die Datenspeicherung der Wikis ist nicht kompatibel und führt dazu, dass man weder das Wiki noch das Backend problemlos wechseln kann.
- Die meisten Wikis bieten nur den den Zugriff über http/html-Interface an.
- Man ist stets an eine bestimmte Wiki-Sprache, einen bestimmten HTML-Generator, etc. gebunden.
Schlussfolgerung
Der einzige Ausweg aus dem derzeitigen Wiki-Dschungel ist ein eigenes Wiki-Protokoll.
Am besten auf Basis von XML. Mit meheren Versionen mit unterschiedlichen Umfang von Funktionalität. Die Implementierung eines Wikis allein kann keine Kompatibilität schaffen. Die Datensicherheit / Konsistenz / Kompatibilität kann nur durch eine definierte Syntax & Verhalten gewährleiste werden. Parallelen sind bei SQL zu sehen. SQL sichert nicht nur, dass Klienten ein garantierte Syntax erwarten können und somit kompatibel zu allen DBs sind, die korrektes SQL beherrschen. Es garantiert (bzw. sollte...) außerdem, dass Datensätze mit Dump unabhängig von der internen Speicherung auf alle SQL-DB verschoben werben können, oder innerhalb der Versionen einer DB sicher gehandhabt werden können.
Gäbe es ein Wiki-Protokoll mit Dump-Funktion, kann es mir egal sein, welches Wiki und welche Version ich benutze, solange alle beteiligten Wikis eine Wiki-Dump unterstützen.
Das Wiki-Protokoll soll außerdem eine gemeinsame Darstellung (z.B. XML-Format) für Wiki-Dokumente beinhalten. So brauchen PDF-Export, HTML-Ausgabe, etc. nicht mehr für jede Wikisprache extra neu geschrieben werden.
Außerdem hätte der Benutzer dann die freie Wahl, welche Wiki-Syntax er verwenden möchte, bzw. ob er einen WYSIWYG-Editor will.
Dinge wie das Wechseln des Wikis oder das Transportieren von Seiten zwischen verschiedenen Wikis wären ohne ein gemeinsames Wiki-Format kaum denkbar.
Überlegung zur Anforderung
Generell
"Wiki-DNS" bzw. "Wiki-ANS"
> Wie gut ist Wikipedia dabei, Hyperlinks auf andere Artikel upzudaten? > (wenn der Artikel von Alkohol nach Aethanol wandert.. was passiert mit dem > Link auf Alkohol im Artikel Suchtproblem?)
Klappt bei Wikipedia nicht. Man könnte sowas wie ein Wiki-DNS machen. Jeder Artikel bekommt eine ID wie eine IP. Wenn du ein Wort verlinken willst, müsstest du über den Wiki-DNS die Artikel-ID abfragen. Das hätte eine Reihe von positiven Neben Effekten!! Einige Artikel-Namen sind technisch nicht möglich bei Wikipedia. So z.B. 'C#'. Mit einem Wiki-DNS währe man technisch nicht mehr beschränkt in der Namensgebung.
Ping
Klint |
</hallo> |
Server |
<okay>[ortszeit]</okay> |
Sessions
Nicht bei einfachen <get>-Anfragen.
MD5-Autentifizierung
Klint |
</md5_get_phrase> |
Server |
<md5_phrase>belangloser_string</md5_phrase> |
Klint |
<md5>3ab4b9bbafd6c8757d35e202fe5eeaf4<md5> |
Server bei Erfolg |
</login-success> |
Server bei Misserfolg |
<error>[fehlernummer]</error> |
Verschlüsselung
Soll VPN erledigen, sag ich mal
Komprimierung
Fehler-Codes
Server
001 |
unbestimmter Fehler |
002 |
Login abgelehnt |
003 |
Kein Login, Acount nicht vorhanden |
004 |
Kein Login, Passwort falsch |
005 |
Kein Service für Anfragen von dieser IP |
006 |
Protokoll Fehler |
007 |
Syntax Fehler |
008 |
keine Berächtigung |
101 |
commit zu groß, abgebrochen |
102 |
Ende nach Time-Out |
Abfragen von Konsumer ohne Account
Klient
Artikel-ID abfrage |
<get_article_id>artikel_name</get_article_id> |
Artikel abruf |
<get_article>[artikel-id]</get_article> |
Nach Artikel/Diskusionen/Usern suchen |
<search namespace='diskusionen'>string</search> |
Für oder bei Suche |
<or>kann_vorkommen</or> |
Für und bei Suche |
<and>muss_vorkommen</and> |
letzte änderungen abfragen |
</recent_changes> |
Artikel-Diskusion abrufen |
<get_discussion>[weiter merkmale]</get_discussion> |
...Von welchen Artikel |
<article_id>[artikel-id]</article_id> |
...von...bis... |
<start>[datum]</start><end>[datum]</end> |
...zu einen bestimmten Thema |
<thread>betrift string</thread> |
./Beispiel_get_discussion ./get_discussionDTD
Für Diff ist der Klient zuständig. Er holt zwei Versionen vom Server und muss selber Anaysieren.
Datenveränderungs-Zugriffe
Klient
Änderungen hochladen |
<commit>[weiter element]</commit> |
Kommentar zu Änderung |
<changelog>fehler behoben</changelog> |
Wiki-Artikel |
<doc article_id="ID:734873">mehr oder weniger text</doc> |
Wiki-Diskusion |
<discussion article_id="ID:734873">[weiter Elemente]</discussion> |
betreff |
<thread>betrift string</thread> |
Bezugs-Beitrag (optional) |
<contribution_id>betrift string</contribution_id> |
/Beispel_discussion /discussionDTD
Daten-Satz(-Backup) Export bzw. Dump-Funktion
Client |
<get_dump max_part_site='1024'>[was]</get_dump> |
Obtionen von get_dump |
article/history/discussion/all |
Sonstige Funktionalitätrn
- Diskusionen?
- "Echtzeit"-Benachrichtigungen?
- Benutzer- und Rechteverwaltung?
Formatierungs-Elemente
- Listen mit und ohne Nummerierung?
- Verweise:
- Referenzen innerhalb des Wiki
- Web-Links
- Literaturangaben
- Fußnoten / Quellenangaben?
- Mehrspaltige Formatierung?
- Tabellen mit und ohne Rahnen?
- Kursiv- und Fett-Schrift?
- Kategorien?
- Engebettete Fremdformate:
- LaTeX
- HTML
- PNG, JPEG
- SVG
Dokumenten-Elemente
Kapitel |
<chapter title='Beispiel-Überschrift'>text</chapter> |
Absatz |
<paragraph>test</paragraph> |
Externe Formate |
<content mimetype="application/latex">\LaTeX</content> |
Referenzimplementierung
Ich währe gewillt, eine Server-Referenzimplementierung in C# auf zu setzen. OlafRadicke
Diskusion
Hier mal ein Beispiel um sich dem Thema zu nähern mit kommentar: /Beispiel 1.
Die Fragezeichen im Punkt Formatierungs-Elemente deuten es schon an: Es ist ueberhaupt nicht klar was der "Haupt-Nenner" aller Wikis ist. Den brauchst Du aber, wenn Du aber, wenn das Protokoll wirklich verlustfrei zwischen zwei Wikis vermitteln soll. Ein kleinster gemeinsamer Nenner waere dagegen schon machbar und wahrscheinlich auch brauchbar. -- HenrykGerlach 2006-05-10 11:16:57