Bei der "konsistente Versionierung" können sowohl bei der Variante 1 als auch bei der Variante 2 Knoten umgezogen werden. Wie dies funktioniert wird hier genauer erläutert.
Beim Umziehen von Knoten werden die Knoten, welche nicht versioniert werden, an das neue Objekt gehängt. Es gibt weder Vorgänger- noch Nachfolgeversionen, weshalb der gleiche Knoten in zwei Objekte gleichzeitig existiert. Die umgezogenen Knoten bekommen als OGUID die GUID des neuen Kopfs und sie behalten als PREVOGUID die OGUID der ersten Version des Objekts. Deswegen kann das Vorgängerobjekt weiter verwendet, aber nicht bearbeitet werden.
Beispiel
Anhand eines Beispiels lässt sich das Umziehen bei der "konsistente Versionierung" besser nachvollziehen: In der folgenden Abbildung ist ein Objekt dargestellt, welches aus mehreren Kindern und Kindeskindern besteht. Es werden beide Varianten der "konsistente Versionierung" dargestellt. Für die Variante 1 wird der Kopf versioniert und für die Variante 2 wird zunächst der Knoten C und im Anschluss der Knoten G der Nachfolgeversion versioniert . Die Ergebnisse werden in der folgenden Abbildung dargestellt.
Beispiel Schritt 1
Die Versionierung in der Variante 1 wird ausgeführt.
Beispiel Schritt 2a
Als nächstes soll Knoten C Version 1 unter ROOT A Version 2 versioniert werden.
Das Objekt in seiner Ursprungsform, bevor es versioniert wird:
Beispiel Schritt 2b
Der Knoten C soll versioniert werden.
Knoten B Version 1 ist Elternknoten von Knoten C Version 1 und ist freigegeben. Daher muss Knoten B Version 1 versioniert werden.
Knoten A Version 1 ist Elternknoten von Knoten B Version 1 und ist freigegeben. Daher muss Knoten A Version 1 versioniert werden.
Somit Knoten A Version 1 ist der höchste Knoten unterhalb des ROOTs, welcher versioniert werden muss.
Knoten A Version 1 wird versioniert. Dazu wird die Nachfolgeversion, Knoten A Version 2, unter ROOT Version 2 gehängt.
Knoten B Version 1 wird versioniert. Dazu wird die Nachfolgeversion, Knoten B Version 2, unter Knoten A Version 2 gehängt.
Alle notwendigen Eltern wurden versioniert.
Knoten C Version 1 wird versioniert. Dazu wird die Nachfolgeversion, Knoten C Version 2, unter Knoten B Version 2 gehängt.
Der alte Teilbaum mit den Vorgängerversionen (Knoten A Version 1, Knoten B Version 1 und Knoten C Version 1) und dessen Unterknoten befindet sich noch in dem Objekt.
Der neue Teilbaum mit den Nachfolgeversionen (Knoten A Version 2, Knoten B Version 2 und Knoten C Version 2) befindet sich ebenfalls im Objekt.
Jetzt ist bekannt, welcher Knoten im Objekt versioniert wurde und welcher nicht.
Beispiel Schritt 2c
Die nicht versionierten Knoten müssen umgezogen werden.
Das Umziehen beginnt vom höchsten Knoten im Objekt, derjenige Knoten mit der kleinsten Hierarchie, welcher versioniert wurde: Knoten A Version 1.
Der Algorithmus geht horizontal durch das Objekt. Das bedeutet, das alle Knoten eines Hierarchielevels und Hierarchienummer gruppiert abgearbeitet werden.
Hierarchielevel 1: Für Knoten A Version 1 wird geprüft:
Gibt es direkte Kindsknoten von Knoten A Version 1, welche nicht versioniert worden sind?
Die Antwort ist Nein.
In diesem Hierarchielevel 1 und Hierarchienummer gibt es keine weiteren Knoten.
Der nächste Knoten wird geprüft.
Hierarchielevel 2: Für Knoten B Version 1 wird geprüft:
Gibt es direkte Kindsknoten von Knoten B Version 1, welche nicht versioniert worden sind?
Die Antwort ist Ja:
Der Knoten F Version 1. Dieser Knoten wird an den Nachfolger von Knoten B Version 1, den Knoten B Version 2, gehängt.
In diesem Hierarchielevel 2 und Hierarchienummer gibt es keine weiteren Knoten.
Der nächste Knoten wird geprüft.
Hierarchielevel 3: Für Knoten F Version 1 wird geprüft:
Gibt es direkte Kindsknoten von Knoten F Version 1, welche nicht versioniert worden sind?
Die Antwort ist Ja:
Der Knoten G Version 1. Dieser Knoten wird an den Nachfolger von Knoten F Version 1, den Knoten F Version 1 (nicht 2), gehängt.
Der Knoten H Version 1. Dieser Knoten wird an den Nachfolger von Knoten F Version 1, den Knoten F Version 1 (nicht 2), gehängt.
Hierarchielevel 3: Für Knoten C Version 1 wird geprüft:
Gibt es direkte Kindsknoten von Knoten C Version 1, welche nicht versioniert worden sind?
Die Antwort ist Ja:
Der Knoten D Version 1. Dieser Knoten wird an den Nachfolger von Knoten C Version 1, den Knoten C Version 2, gehängt.
Der Knoten E Version 1. Dieser Knoten wird an den Nachfolger von Knoten C Version 1, den Knoten C Version 2, gehängt.
Hierarchielevel 4: Für Knoten G Version 1, H Version 1, D Version 1, E Version 1 wird jeweils geprüft.
Gibt es direkte Kindsknoten, welche nicht versioniert worden sind?
Die Antwort ist Nein.
Alle 5 Knoten wurden nun umgezogen.
Der Teilbaum mit den Vorgängerversionen und dessen Unterknoten befindet sich noch in dem Objekt
Beispiel Schritt 2d
Der Knoten A Version 1 und seine Kindeskinder mit den Vorgängerversionen wird aus dem Objekt gelöscht.
Beispiel Schritt 2e
Das Objekt hat nur noch die versionierten und umgezogenen Knoten.
Beispiel Schritt 3a
Als nächstes soll Knoten G Version 1 unter ROOT A Version 2 versioniert werden.
Knoten F Version 1 ist Elternknoten von Knoten G Version 1 und ist freigegeben. Daher muss Knoten Knoten F Version 1 versioniert werden.
Knoten B Version 2 ist Elternknoten von Knoten F Version 1 und ist "In Erstellung". Daher muss Knoten B Version 2 nicht versioniert werden.
Somit ist Knoten F Version 1 der höchste Knoten unterhalb des ROOTs, welcher versioniert werden muss.
Knoten F Version 1 wird versioniert. Die Nachfolgeversion, Knoten F Version 2, wird unter Knoten B Version 2 gehängt.
Alle notwendigen Eltern wurden versioniert.
Knoten G Version 1 wird versioniert. Die Nachfolgeversion, Knoten G Version 2, wird unter Knoten F Version 2 gehängt.
Der alte Teilbaum mit den Vorgängerversionen (Knoten F Version 1 und Knoten G Version 1) und dessen Unterknoten befindet sich noch in dem Objekt.
Der neue Teilbaum mit den Nachfolgeversionen (Knoten F Version 2 und Knoten G Version 2) befindet sich ebenfalls im Objekt.
Jetzt ist bekannt, welcher Knoten im Objekt versioniert wurde und welcher nicht.
Beispiel Schritt 3b
Die nicht versionierten Knoten müssen umgezogen werden.
Das Umziehen beginnt vom höchsten Knoten im Objekt, derjenige Knoten mit der kleinsten Hierarchie, welcher versioniert wurde: Knoten F Version 1.
Der Algorithmus geht horizontal durch das Objekt. Das bedeutet, das alle Knoten eines Hierarchielevels und Hierarchienummer gruppiert abgearbeitet werden.
Hierarchielevel 3: Für Knoten F Version 1 wird geprüft:
Gibt es direkte Kindsknoten von Knoten F Version 1, welche nicht versioniert worden sind?
Die Antwort ist Ja.
Der Knoten H Version 1. Dieser Knoten wird an den Nachfolger von Knoten F Version 1, den Knoten F Version 2, gehängt.
In diesem Hierarchielevel 3 und Hierarchienummer gibt es keine weiteren Knoten.
Der nächste Knoten wird geprüft.
Alle notwendigen Knoten wurden nun umgezogen.
Der Teilbaum mit den Vorgängerversionen und dessen Unterknoten befindet sich noch in dem Objekt
Beispiel Schritt 3c
Der Knoten F Version 1 und seine Kindeskinder mit den Vorgängerversionen wird aus dem Objekt gelöscht.
Beispiel Schritt 3d
Das Objekt hat nur noch die versionierten und umgezogenen Knoten.









