Benutzer:M.ottenbruch/Versionsimport

aus Wikipedia, der freien Enzyklopädie

Der Versionsimport (auch Importupload oder XML-Import genannt) ist eine Methode, Wikipedia-Artikel von einem Schwesterprojekt ins andere zu importieren oder innerhalb eines Projektes zu duplizieren. Er wird hauptsächlich angewandt, um bei Weiterverwendung der importierten Inhalte den urheberrechtlichen und lizenzmäßigen Ansprüchen der Ersteller der ursprünglichen Artikel genüge zu tun. In einfachen Fällen kann man diesen Ansprüchen genügen, indem Administratoren über das auf der Seite WP:Importwünsche zur Verfügung gestellte „automatische“ Import-Tool die kompletten Artikel samt Versionsgeschichte importieren (eine in geringem Umfang konfigurierbare Version des Import-Tools befindet sich hier, eine Anleitung dazu hier). Dies trifft jedoch in einigen Fällen auf technische und inhaltliche Grenzen, die ein komplexeres Vorgehen notwendig machen, eben den Versionsimport. Dies geschieht insbesondere dann,

  1. wenn ein Artikel über 1000 Versionen hat,
  2. wenn ein Artikel mitsamt seinen Vor-Versionen einen Umfang von mehr als 100 MB hat,
  3. wenn ein Artikel aus einem Projekt importiert werden soll, das nicht zu der hier aufgeführten abschließenden Liste gehört oder
  4. wenn ein Zielartikel zum Zeitpunkt des geplanten Importes bereits existiert und die Versionsgeschichten beider Artikel sich überlappen.

In diesen Fällen muß der Importvorgang in zwei oder gegebenenfalls drei Schritte aufgeteilt werden:

  • Export des Quellartikels,
  • gegebenenfalls zwischenzeitliche Manipulation des Quellartikels,
  • Importupload des (ggflls. veränderten) Artikels

Um einen Importupload durchführen zu können, muß man die erweiterten Benutzerrechte als Importeur haben.

Grundlagen

Um das Vorgehen zu verstehen, ist es notwendig, die Art und Weise zu kennen, wie Wikipedia-Artikel überhaupt gespeichert sind. Jeder aktuelle Wikipedia-Artikel mitsamt seiner Vor-Versionen liegt in Form einer gemeinsamen XML-Datei vor. Der Aufbau dieser Datei ist immer gleich:

  1. Das Wurzelelement trägt die Bezeichnung „<mediawiki>“
  2. Das erste Element innerhalb des Wurzelementes trägt die Bezeichnung „<siteinfo>“ und beschreibt das Wiki, in dem der Artikel existiert, mit Elementen wie „<sitename>“, „<dbname>“, Aufzählungen der Namensräume etc.
  3. Als zweites und letztes Element innerhalb des Wurzelelementes schließt sich das Element „<page>“ an, das den eigentlichen Artikel und seine Versionen enthält. Zunächst wird mit drei Elementen namens „<title>“, <namespace> und <id> der Titel, den Namensraum und die ID-Nummer des Artikels angegeben. Auf diese drei Elemente folgen innerhalb des Elementes „<page>“ ein oder mehrere weitere Elemente namens „<revision>“, die die einzelnen Versionen des Artikels enthalten, beginnend mit der ältesten. Innerhalb des Elementes „<revision>“ folgen Versions-ID, Erstellungsdatum, Angaben zum Autor, ein paar technische Informationen, schließlich der Text der Version und ein Hash-Code.

Dieser Artikel beispielsweise sieht daher in seiner Quelldatei so aus:

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="de">
     <siteinfo>
          <sitename>Wikipedia</sitename>
          <dbname>dewiki</dbname>
          <base>https://de.wikipedia.org/wiki/Wikipedia:Hauptseite</base>
          <generator>MediaWiki 1.38.0-wmf.23</generator>
          <case>first-letter</case>
          <namespaces>
                [...]
          </namespaces>
     </siteinfo>
     <page>
          <title>Versionsimport</title>
          <ns>0</ns>
          <id>66303858</id>
          <revision>
               <id>998641683</id>
               <timestamp>2022-03-03T08:16:35Z</timestamp>
               <contributor>
                    <username>M.ottenbruch</username>
                    <id>17301</id>
               </contributor>
               <comment>Beginn einer neuen Anleitung</comment>
               <model>wikitext</model>
               <format>text/x-wiki</format>
               <text bytes="1864" xml:space="preserve">Der '''Versionsimport''' ist eine Methode, Wikipedia-Artikel, von einem Schwesterprojekt ins andere zu importieren [...] </text>
               <sha1>7g1u5hcd448e3wam7nfuaa04u7bzekm</sha1>
          </revision>
          <revision>
               [...]
          </revision>
          [...]
     </page>
</mediawiki>

Hat man diese Datei einmal aus dem Quellwiki exportiert (siehe unten) und auf den Rechner heruntergeladen, kann man sie auf vielfältige Weise manipulieren. Insbesondere kann man

  1. Versionen entfernen, indem man schlicht „<revision>“-Elemente aus dem Quelltext löscht, und
  2. eine XML-Datei in mehrere kleinere aufteilen, wenn die oben genannte Obergrenze von 100 MB überschritten ist.

Das alles bzw. der nachfolgende Import geht nur dann, wenn die Datei weiterhin wohlgeformt und mit der Wikimedia-Software kompatibel ist, d.h. der oben beschriebene Aufbau muß grundsätzlich beibehalten werden; insbesondere muß das Wurzelelement erhalten bleiben, es muß weiterhin ein „<siteinfo>“- und ein „<page>“-Element enthalten sein, wobei Letzteres mindestens ein „<revision>“-Element enthalten muß. Beispielsweise der isolierte Import von einzelnen „<revision>“-Elementen in bestehende Quelldateien ist nicht vorgesehen.

Praktisches Vorgehen

Export der XML-Datei

Aus der de-wp

Aus der de-wp kann dieser Export in einfachen Fällen über das Tool auf der Seite Spezial:Exportieren erfolgen. Dazu sind nicht einmal Administratoren-Rechte erforderlich. Dieses Tool stößt jedoch an die oben genannten Grenze von 1000 Versionen.

Es existieren verschiedene Wege, diese Beschränkung zu umgehen. Der einfachste besteht darin, folgende Zeile in seine commons.js-Datei einzufügen:

mw.loader.load('//de.wikipedia.org/w/index.php?title=Benutzer:Brackenheim/export.js&action=raw&ctype=text/javascript'); // [[Benutzer:Brackenheim/export.js]]

Dies sorgt dafür, daß ein zusätzlicher, mit „export“ beschrifteter Reiter eingeblendet wird, durch den man mit einfachem Klick einen Export des gerade angezeigten Artikels auf den eigenen Rechner anstoßen kann.

Aus Schwesterprojekten

In aller Regel möchte man sich als Importeur nicht darauf beschränken, nur Artikel aus der de-wp zu exportieren. In einigen Schwesterprojekten existieren unserem Spezial:Exportieren vergleichbare Seiten, jedoch nicht in allen. Dann ist das durch die oben genannte Zeile hinzugeladene Tool ebenfalls hilfreich. Es besteht aus folgendem JavaScript-Code:

mw.loader.using('mediawiki.util', function () {
    $(function () {
        mw.util.addPortletLink('p-cactions', 'https://de.wikipedia.org/w/index.php?title=Spezial:Exportieren&pages=' + mw.config.get('wgPageName') + '&dir=desc&limit=5&wpDownload&history=1', 'export'); 
        mw.util.addPortletLink('p-namespaces', 'https://de.wikipedia.org/w/index.php?title=Spezial:Exportieren&pages=' + mw.config.get('wgPageName') + '&dir=desc&limit=5&wpDownload&history=1', 'export'); 
        mw.util.addPortletLink('p-namespaces', 'https://en.wikipedia.org/wiki/' + mw.config.get('wgPageName'), 'export'); 
    }); 
});

Dieser JavaScript-Code hat den Vorteil, daß er mit minimaler Anpassung in allen Sprachversionen funktioniert: Es muß nur das Länderkürzel in den drei URLs an die jeweilige Sprachversion angepaßt werden. Aus 'https://de.wikipedia.org/w/index.php?title=Spezial:Exportieren&pages=' wird also beispielsweise für die en-wp: 'https://en.wikipedia.org/w/index.php?title=Spezial:Exportieren&pages='. Nach dieser Anpassung kann der Code in die eigene commons.js des Schwesterprojektes eingefügt werden.

Einstellungen/Aussehen mit markiertem Link auf commons.js

Für exotischere Sprachversionen empfiehlt es sich – falls noch nicht geschehen – zunächst im Menüpunkt „Globale Einstellungen“ unter „Sprache der Benutzeroberfläche:“ die Benutzerführung für alle internationalen Versionen auf „de-Deutsch“ einzustellen, damit man den dortigen Menüpunkt „Einstellungen/Aussehen“, in dem die commons.js geändert werden kann (Abschnitt: „Gemeinsames CSS/JSON/JavaScript aller Benutzeroberflächen:“, Link: „Benutzerdefiniertes JavaScript“), gegebenenfalls überhaupt findet.

Bearbeiten der Quelldatei

Im Folgenden werden die notwendigen Bearbeitungen der Quelldatei beschrieben, wie sie in verschiedenen Ausgangssituationen erforderlich sein können. Natürlich kann es vorkommen, daß mehrere der hier aufgeführten Punkte zutreffen und die entsprechenden Maßnahmen miteinander kombiniert werden, daß also beispielsweise sowohl das „<title>“-Element verändert, als auch die Quelldatei aufgeteilt und die Versionsgeschichte gekürzt werden muß.

Import aus einem dem Import-Tool nicht zugänglichem Schwester-Projekt oder Artikel mit mehr als 1000 Versionen

Der einfachste Fall liegt vor, wenn es lediglich darum geht, einen Artikel aus einem Schwesterprojekt, das dem Import-Tool nicht zugänglich ist, unter demselben Lemma in die de-wp zu importieren. In diesem Fall kann die XML-Datei so, wie sie ist, importiert werden (siehe unten). Dasselbe gilt, wenn ein Importupload notwendig wurde, weil die Quellartikel mehr als 1000 Versionen hat. Die Beschränkung der Versionsanzahl gilt nur für das automatische Export-Tool, nicht für das Import-Tool.

Import unter anderem Lemma oder Duplikation eines Artikels

Wenn lediglich das Lemma geändert werden soll, genügt es, im „<page>“-Element das Element „<title>“ wie gewünscht zu ändern, und die XML-Datei kann importiert werden.

XML-Datei zu groß für Import

Wenn die Quelldatei größer als 100 MB ist, muß sie vor dem Import in mehrere kleinere Dateien aufgeteilt werden, die anschleßend nacheinander importiert werden. Aus dem unter #Grundlagen Ausgeführten geht hervor, daß jede dieser Dateien das Wurzelelement, ein „<siteinfo>“- und ein „<page>“-Element enthalten muß, wobei in Letzterem mindestens ein „<revision>“-Element enthalten sein muß. Das praktische Vorgehen gestaltet sich also so, daß man in einem geeigneten Editor (beispielsweise Notepad++ im XML-Modus) eine oder mehrere „Rahmendateien“ anlegt, die das Wurzelelement, das „<siteinfo>“- und das „<page>“-Element mit den Elementen „<title>“, „<ns>“ und „<id>“ jeweils der Original-Datei (bzw. das „<title>“-Element des gewünschten Ziel-Lemmas) enthalten, wobei das „<page>“-Element einer „Rahmendatei“ zunächst ohne „<revision>“-Element angelegt wird. Eine solche „Rahmendatei“ hätte also folgendes Aussehen:

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="de">
     <siteinfo>
          [...]
     </siteinfo>
     <page>
          <title>[...]</title>
          <ns>0</ns>
          <id>[...]</id>
     </page>
</mediawiki>

Zur Erstellung der „Rahmendatei“ kopiert man den Quelltext von der ersten Zeile der Quelldatei bis zur Zeile <id>[...]</id> in eine neue Datei und kopiert anschließend die beiden letzten Zeilen der Quelldatei, „0000</page>“ und „</mediawiki>“, darunter. Die so entstandene Datei kann gegebenenfalls wiederum mehrfach kopiert werden.

Nun werden in hinreichender Anzahl vollständige „<revision>“-Elemente (also jeweils vom Tag „<revision>“ bis zum Tag „</revision>“, jeweils einschließlich) aus der Originaldatei ausgeschnitten (nicht: kopiert!) und in die „Rahmendatei“ zwischen den Zeilen <id>[...]</id> und </page> eingefügt. Bei einer Quelldatei, die weniger als 200 MB umfaßt, springt man also beispielsweise im Editor bis etwa zur Mitte der Datei, sucht das nächste „<revision>“-Tag, markiert den Quelltext vom Zeilenbeginn des „<revision>“-Tags bis zum Ende der Datei, geht dann mit der Markierung wieder zwei Zeilen zurück (die Zeilen „</page>“ und „</mediawiki>“ müssen ja am Ende der Ursprungsdatei enthalten bleiben – das Ende der Markierung sollte sich also jetzt am Ende der drittletzten Zeile der Datei, „</revision>“ oder am Beginn der vorletzten Zeile, „</mediawiki>“ befinden), schneidet den markierten Bereich aus und fügt ihn in der „Rahmendatei“ wie beschrieben ein.

Nach dem Speichern der Dateien hat man nun zwei XML-Dateien, die jeweils halb so groß sind wie die Ursprungsdatei. Diese werden nun nacheinander importiert.

Aus praktischen Gründen empfiehlt es sich, bei noch größeren Quelldateien das Prinzip der Halbierung beizubehalten, also – falls notwendig, um unter je 100 MB zu kommen – die beiden so entstandenen Dateien jeweils wiederum zu halbieren.

Überlappende Versionsgeschichten

Wird der Import nicht – idealerweise: – vor oder wenigstens unmittelbar nach bsplsw. der Übersetzung durchgeführt, so kann es dazu kommen, daß der Quellartikel bereits weiter verändert wurde, nachdem der Zielartikel erstellt wurde. Technisch wäre zwar auch dann ein Import der Versionsgeschichte des Quellartikels in den Zielartikel möglich, aber die Versionen würden zwischen den beiden Artikelzweigen „hin- und herspringen“, was extrem unübersichtlich ist. Aus urhebererrechtlichen und lizenzrechtlichen Gründen ist ein so vollständiger Import der Versionsgeschichte des Quellartikels nach Abspaltung des Zielartikels keineswegs notwendig. Daher wird in einem solchen Fall die Versionsgeschichte des Quellartikels nur bis zum Zeitpunkt der Abspaltung des Zielartikels importiert. Dazu werden die Versionen, die nicht importiert werden sollen, aus dem XML-Code des Quellartikels gelöscht.

Hierzu vergleicht man zunächst die Versionsgeschichten von Quell- und Zielartikel, stellt fest, welche die letzte Version des Quellartikels ist, die noch importiert werden soll, und notiert dann den timestamp der nächstfolgenden Version. Nach dem Export der Quelldatei sucht man in dieser mit dem Editor nach diesem timestamp, also beispielsweise nach der Zeichenfolge <timestamp>2022-03-03T08:15 (man beachte dabei, daß der timestamp in der XML-Datei in der Regel in UTC festgehalten ist, wohingegen die Versionsgeschichten den Erstellungszeitpunkt einer Version in der Regel in MEZ bzw. MESZ angeben). Hat man den gesuchten timestamp gefunden, so befindet sich aufgrund des immer gleichen Aufbaus der XML-Datei genau zwei Zeilen über dem „<timestamp>“-Element das zugehörige „<revision>“-Tag dieser Artikel-Version. Nun markiert man wiederum vom Zeilenbeginn des „<revision>“-Tags bis zum Ende der Datei, geht dann mit der Markierung wieder zwei Zeilen zurück (die Zeilen „</page>“ und „</mediawiki>“ müssen ja am Ende der Ursprungsdatei enthalten bleiben) und löscht die markierten „<revision>“-Elemente.

Bei einem Import der so entstandenen Datei werden nur die Versionen bis zur letzten Version vor der ersten markierten importiert. Es kann sinnvoll sein, weitere, überflüssige Versionen der Quelldatei ebenfalls zu löschen, bsplsw. wenn größere Teile der Versionsgeschichte des Quellartikels wegen Urherberrechtsverletzungen oder aus anderen Gründen bereits versionsgelöscht waren.

Grenzen der Kürzung der Versionsgeschichte

Sofern durch Kürzung der Versionsgeschichten nicht dafür gesorgt werden kann, daß einerseits eine überlappungsfreie, andererseits aber auch eine den Lizenzansprüchen genügende Version entsteht – beispielsweise wenn Artikelinhalte in mehreren Etappen oder aus mehreren Artikeln eingefügt werden –, ist der Versionsimport keine geeignete Methode, um den Lizenzansprüchen genüge zu tun. Dann muß ein anderes Verfahren gewählt werden, zum Beispiel das in Hilfe:Artikelinhalte auslagern#Bei fehlgeschlagener Duplizierung sowie zum Übernehmen von Artikelinhalten in einen bestehenden Artikel beschriebene. Zu beachten ist, daß dieses Verfahren nicht – wie der Versionsimport – auch noch nachträglich angewendet werden kann. Einfügungen von relevanter Schöpfungshöhe aus anderen Artikeln ohne Anwendung dieses Verfahrens stellen nicht heilbare Urheberrechts- und Lizenzverletzungen dar, die versionsgelöscht werden müssen.

Import der XML-Datei

Auf der Seite Spezial:Importieren sind zwei unterschiedliche Tools versammelt:

  • oben das Tool für den XML-Import und
  • unten die in geringem Maße konfigurierbare Version des Interwiki-Import-Tools.

Bedienung des Tools

XML-Importtool

Zur Bedienung des XML-Import-Tools sind folgende Schritte notwendig:

  1. Die zu importierende Datei wird in der Zeile „Dateiname:“ ausgewählt. Hier öffnet sich beim Klick auf Eine Datei auswählen ein Dateiauswahlfenster des eigenen Betriebssystems, in dem man auf die bekannte Weise zur hochzuladenden Datei navigiert und diese – beispielsweise in Windows – durch Klick auf Öffnen auswählt.
  2. In der Zeile „Interwiki-Präfix:“ trägt man das Länderkürzel des Projektes ein, aus dem die Quelldatei stammt, also beispielsweise „en“ für einen Import aus der en-WP oder „de“ für eine Duplizierung aus der de-WP. Dieses hier gewählte Kürzel erscheint in der Regel nach dem Import in der Versionsgeschichte vor den Benutzenamen der Autoren der importierten Artikelversionen, es sei denn, man stellt in der folgenden Zeile etwas anderes ein:
  3. In der Zeile: „Weist Bearbeitungen lokalen Benutzern zu, wo der benannte Benutzer lokal vorhanden ist“, kann man durch Anklicken der Option festlegen, daß bei lokal vorhandenen Benutzern mit diesem Namen das unter 2. erwähnte Länderkürzel nicht vorangestellt wird. Dies ist insbesondere bei Duplizierungen aus der de-WP sinnvoll, weil hier davon auszugehen ist, daß der lokal vorhandene Benutzer tatsächlich mit dem in der Versionsgeschichte des Quellartikels aufgeführten Benutzer identisch ist. Seit der engültigen Einführung des Single-User-Logins im Jahre 2015 sollte das für alle Projekte gelten, aber da Versionsgeschichten zum Teil deutlich länger zurückreichen, sollte diese Option nur mit äußerstem Bedacht ausgewählt werden, weil die Gefahr besteht, daß Änderungen Benutzern zugeschrieben werden, die nichts mit ihnen zu tun haben. Außerdem dient es der Übersichtlichket, wenn importierte Änderungen durch das vorangestellte Kürzel unmittelbar als solche erkennbar sind.
  4. In der nächsten Zeile wird der Grund für den Import angegeben. Es bietet sich an, hier den Eintrag auf WP:Importwünsche zu verlinken, aufgrund dessen der Import durchgeführt wird. Das dortige Import-Tool stellt nach dem Klick auf Bearbeiten die Versions-ID der Einstellung des Wunsches zur Verfügung. Ein möglicher Eintrag in dieser Zeile wäre also beispielsweise: „[[Spezial:Diff/<Versions-ID>#<Abschnittsüberschrift des Importwunsches>|Importwunsch]]“.
  5. In den folgenden drei Zeilen kann durch Anklicken eines der Radiobuttons ausgewählt werden, ob
    1. „zu den Standard-Speicherorten“, also in den Artikelnamensraum,
    2. „in einen [anderen] Namensraum“ oder
    3. "als Unterseite der folgenden Seite", also insbesondere in einen Benutzernamensraum, der dann in der Form „Benutzer:<Benutzername>“ hier eingetragen werden muß,
    importiert werden soll.
  6. Ist alles korrekt ausgefüllt, wird der Import durch Klick auf Datei hochladen gestartet.

Mögliche Probleme und wie man sie vermeidet

  1. Vergeht zuviel Zeit zwischen zwei mit dem Tool durchgeführeten XML-Importen, gehen die Sitzungsdaten verloren und eine entsprechende Fehlermeldung erscheint. Das ist völlig unproblematisch. Alle vorgewählten Einstellungen bleiben dabei erhalten, lediglich die Auswahl der zum Upload vorgesehenen Datei geht verloren. Wiederholt man diese Auswahl, kann man den Upload problemlos starten.
  2. Die Operationen auf dem Server sind zeitkritisch und laufen gerne in einen Timeout. Hierzu gibt es zwei Maßnahmen zur Problemvermeidung:
    1. Der Import in einen nicht vorhandenen Artikel dauert länger als der in einen vorhandenen. Es empfiehlt sich daher insbesondere bei großen XML-Files, den Artikel bereits vor dem Import anzulegen. Man kann dies dadurch tun, daß man in dem ebenfalls auf der Seite enthaltenen Interwiki-Import-Tool – sofern die Voraussetzungen dafür erfüllt sind (siehe oben) – Quellwiki und Artikelname einträgt und – ohne eines der weiteren Häkchen zu setzen – auf Importieren klickt. Schneller geht es meistens, wenn man den Quellartikel öffnet, auf Bearbeiten klickt, im Bearbeitungsfenster alles markiert, kopiert, dann auf den Rotlink des Zielartikels klickt, diesen anlegt und den kopierten Artikeltext des Quellartikels einfügt. Bei dieser Gelegenheit kann man dann auch gleich die Vorlage:Importartikel in die erste Zeile des Artikels einfügen und die Kategorien auskommentieren. Nach dem Abspeichern führt man dann den XML-Import durch. Dieses Vorgehen beschleunigt übrigens auch den Import mithilfe des halbautomatischen Importtools. Auch dort lohnt es sich bei Quellartikeln mit vielen Versionen, zunächst die Zieldatei mit dem aktuellen Inhalt der Quelldatei anzulegen und erst dann den (dann: Nach-)Import durchzuführen.
    2. Auch wenn man die Grenze von 100 MB pro XML-Import einhält, kann es passieren, daß der Upload in einen Timeout läuft. Meiner Erfahrung nach hat es wenig Sinn, jetzt nach einem Fehler zu suchen. Man sollte vielmehr die XML-Datei(en) noch einmal halbieren (siehe hier) und die kleineren Dateien der Reihe nach importieren. Das klappt immer.

Siehe auch

Weitere Anleitungen zu diesem Thema sind: