Proksi Data dengan Analisis Tinta

Seperti disebutkan dalam Gambaran Umum Analisis Tinta, teknologi analisis tinta secara internal mempertahankan model dokumen berbasis pohon untuk berisi hasil analisis dan hubungan. Jika aplikasi Anda sudah memiliki penyimpanan dokumen mapan yang berbeda, Anda harus menggunakan fitur analisis tinta yang dirancang untuk mem-proxy data antara model dokumen yang berbeda.

Jenis Proksi Data

Fitur proksi data memungkinkan aplikasi Anda untuk:

  • Integrasikan data hasil analisis kembali ke model dokumen yang ada.
  • Komunikasikan hasil sebelumnya (atau status) kembali ke InkAnalyzer.
  • Komunikasikan status non-tinta ke dalam InkAnalyzer.
  • Komunikasikan hanya kumpulan data minimum (baik status sebelumnya maupun non-tinta) yang diperlukan untuk menyelesaikan operasi analisis.
  • Perbarui model dokumen aplikasi internal dengan mudah dengan hasil analisis.

Ada dua pendekatan dasar untuk proksi data analisis tinta. Perbedaannya terletak pada detail kapan dan bagaimana sinkronisasi antara model dokumen terjadi. Pendekatan pertama, pembaruan sinkron, memerlukan modifikasi model dokumen analisis tinta saat perubahan terjadi dalam dokumen aplikasi. Pendekatan kedua, pembaruan sesuai permintaan, hanya memerlukan data yang terpengaruh oleh perubahan pada model dokumen aplikasi yang akan diteruskan ke InkAnalyzer. Artinya, hanya data untuk bagian model dokumen Analisis Tinta yang berada di area yang sama dengan modifikasi pada dokumen aplikasi yang perlu diteruskan ke InkAnalyzer karena membutuhkannya.

Pembaruan Sinkron

Pendekatan pembaruan sinkron memerlukan modifikasi (pembuatan dan penghapusan) simpul dalam koleksi objek InkAnalyzer objek ContextNode saat terjadi dalam dokumen aplikasi. Misalnya, setiap kali kata teks ditambahkan ke aplikasi, ContextNode bergaya TextWord yang sesuai dibuat di InkAnalyzer. Jika lokasi kata teks di halaman berubah, maka lokasi ContextNode yang sesuai diperbarui secara bersamaan. Metode ini kurang efisien dalam hal sumber daya komputasi daripada metode sesuai permintaan karena setiap perubahan dokumen melibatkan pembaruan pada InkAnalyzer, bahkan jika perubahan tidak memengaruhi tinta yang dianalisis.

Contoh berikut dimaksudkan untuk menunjukkan cara kerja pembaruan sinkron. Bayangkan aplikasi yang memiliki model dokumen yang ada. Saat pengguna akhir membuat perubahan pada dokumen, seperti menambahkan teks baru, perubahan diproses sebagai berikut:

  1. Pengguna akhir membuat data baru.
  2. Aplikasi menentukan cara memproses data, menyimpannya, dan merendernya.
  3. Untuk tujuan praktis, langkah-langkah berikut berlangsung secara bersamaan.
    1. Aplikasi menempatkan data ke dalam model dokumennya.
    2. Aplikasi ini membuat InkAnalyzer dan memperbaruinya. Melakukan ini secara bersamaan memastikan bahwa InkAnalyzer selalu memiliki informasi terbaru.
    3. Aplikasi memanggil BackgroundAnalyze pada InkAnalyzer untuk memulai analisis.
  4. Serangkaian peristiwa diaktifkan jika perubahan melibatkan tinta dan InkAnalyzer menentukan hasil baru. Satu peristiwa diaktifkan untuk setiap perubahan yang dilakukan pada koleksi objek ContextNode di InkAnalyzer. Peristiwa ini termasuk ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeleting, dan ContextNodeReparenting. Aplikasi menangani peristiwa ini untuk mem-proxy hasil operasi analisis kembali ke model dokumen yang sesuai.
  5. Aplikasi memperbarui tata letak dokumen, menarik data baru dari model dokumen.
  6. Data baru dirender kembali ke pengguna akhir.

Pembaruan Sesuai Permintaan

Pendekatan sesuai permintaan hanya mengharuskan data diteruskan untuk objek ContextNode yang ada di area yang sedang dianalisis. Objek ContextNode yang diperlukan diekstrak dari model dokumen aplikasi tepat setelah operasi analisis dipanggil, dan sekali lagi tepat sebelum merekonsiliasi hasilnya. Meskipun lebih rumit untuk diterapkan daripada pembaruan sinkron, pendekatan ini menghasilkan hasil performa yang lebih baik.

Gambaran Umum Analisis Tinta

Kelas InkAnalyzer (C++)

Microsoft.Ink.InkAnalyzer

Microsoft.Ink.ContextNode