Datenproxy mit Ink-Analyse

Wie unter Übersicht über die Ink-Analyseerwähnt, verwaltet die Technologie für die Ink-Analyse intern ein strukturbasiertes Dokumentmodell, das Analyseergebnisse und Beziehungen enthält. Wenn Ihre Anwendung bereits über einen anderen Dokumentspeicher verfügt, müssen Sie die Funktionen für die Ink-Analyse verwenden, die als Proxy für Daten zwischen unterschiedlichen Dokumentmodellen entworfen wurden.

Typen des Datenproxys

Die Datenproxyfunktionen ermöglichen Ihrer Anwendung Die folgenden Funktionen:

  • Integrieren Sie Analyseergebnisdaten wieder in ein vorhandenes Dokumentmodell.
  • Kommunizieren Sie vorherige Ergebnisse (oder den Zustand) zurück an inkAnalyzer.
  • Kommunizieren Sie den Nicht-Freik-Zustand mit inkAnalyzer.
  • Kommunizieren Sie nur den minimalen Satz von Daten (sowohl vorheriger als auch nicht freier Zustand), der zum Abschließen des Analysevorgang erforderlich ist.
  • Aktualisieren Sie problemlos das interne Anwendungsdokumentmodell mit Analyseergebnissen.

Es gibt zwei grundlegende Ansätze für den Datenproxy der Ink-Analyse. Die Unterschiede liegen in den Details dazu, wann und wie die Synchronisierung zwischen den Dokumentmodellen erfolgt. Der erste Ansatz, das synchrone Update, erfordert die Änderung des Dokumentmodells für die Ink-Analyse, wenn Änderungen im Anwendungsdokument vorgenommen werden. Der zweite Ansatz, das bedarfsbasierte Update, erfordert, dass nur die Daten, die von Änderungen am Anwendungsdokumentmodell betroffen sind, an InkAnalyzer übergeben werden. Das heißt, dass nur die Daten für die Teile des Ink Analysis-Dokumentmodells, die sich im selben Bereich wie Änderungen am Anwendungsdokument befinden, nach Bedarf an InkAnalyzer übergeben werden müssen.

Synchrones Update

Der synchrone Updateansatz erfordert die Änderung (Erstellung und Löschung) von Knoten in der Sammlung von ContextNode-Objekten des InkAnalyzer-Objekts, wie sie im Anwendungsdokument auftreten. Jedes Mal, wenn der Anwendung ein Textwort hinzugefügt wird, wird beispielsweise ein entsprechender ContextNode im TextWord-Format im InkAnalyzer erstellt. Wenn sich die Position des Textworts auf der Seite ändert, wird die Position des entsprechenden ContextNode gleichzeitig aktualisiert. Diese Methode ist in Bezug auf die Berechnung von Ressourcen weniger effizient als die bedarfsbasierte Methode, da jede Dokumentänderung eine Aktualisierung des InkAnalyzer beinhaltet, auch wenn sich die Änderung nicht auf die analysierte Ink-Datei ausdringt.

Das folgende Beispiel soll zeigen, wie synchrone Updates funktionieren. Imagine anwendung, die über ein vorhandenes Dokumentmodell verfügt. Wenn der Endbenutzer eine Änderung am Dokument vor sich hat, z. B. das Hinzufügen von neuem Text, wird die Änderung wie folgt verarbeitet:

  1. Der Endbenutzer erstellt die neuen Daten.
  2. Die Anwendung bestimmt, wie die Daten zu verarbeiten, gespeichert und gerendert werden.
  3. Aus praktischen Gründen werden die folgenden Schritte gleichzeitig ausgeführt.
    1. Die Anwendung platziert die Daten in ihr Dokumentmodell.
    2. Die Anwendung erstellt einen InkAnalyzer und aktualisiert ihn. Dadurch wird gleichzeitig sichergestellt, dass InkAnalyzer immer über die neuesten Informationen verfügt.
    3. Die Anwendung ruft BackgroundAnalyze auf dem InkAnalyzer auf, um mit der Analyse zu beginnen.
  4. Eine Reihe von Ereignissen wird ausgelöst, wenn die Änderung Ink umfasst und der InkAnalyzer neue Ergebnisse bestimmt. Ein Ereignis wird für jede Änderung ausgelöst, die an der Auflistung von ContextNode-Objekten im InkAnalyzer vorgenommen wird. Zu diesen Ereignissen gehören ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeletingund ContextNodeReparenting. Die Anwendung verarbeitet diese Ereignisse, um die Ergebnisse des Analysevorgang entsprechend an das Dokumentmodell zurück zu geben.
  5. Die Anwendung aktualisiert das Layout des Dokuments und pullt die neuen Daten aus dem Dokumentmodell.
  6. Die neuen Daten werden an den Endbenutzer zurück gerendert.

Bedarfsbasiertes Update

Der bedarfsbasierte Ansatz erfordert nur, dass die Daten an die ContextNode-Objekte übergeben werden, die sich in den zu analysierenden Bereichen befinden. Die benötigten ContextNode-Objekte werden direkt nach dem Aufruf des Analysevorgang und erneut vor dem Abgleich der Ergebnisse aus dem Dokumentmodell der Anwendung extrahiert. Obwohl die Implementierung komplizierter ist als synchrone Updates, führt dieser Ansatz zu besseren Leistungsergebnissen.

Übersicht über die Ink-Analyse

InkAnalyzer-Klasse (C++)

Microsoft.Ink.InkAnalyzer

Microsoft.Ink.ContextNode