Saya mengembangkan aplikasi yang perlu menyimpan metadata inline , intext . Yang saya maksud dengan itu adalah sebagai berikut: katakanlah kita memiliki teks yang panjang, dan kami ingin menyimpan beberapa metadata yang terhubung dengan kata tertentu, atau kalimat dari teks tersebut.
Apa cara terbaik untuk menyimpan informasi ini?
Pikiran pertama saya adalah memasukkan dalam teks semacam Markdown
sintaks yang kemudian akan diuraikan saat mengambil. Sesuatu yang terlihat seperti ini:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam __nonummy nibh__[@note this sounds really funny latin]
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Ini akan memperkenalkan dua masalah yang dapat saya pikirkan:
- Yang relatif kecil, adalah bahwa jika sintaks tersebut kebetulan kebetulan pada teks tersebut, itu dapat mengacaukan parsing.
- Yang paling penting adalah ini tidak mempertahankan metadata ini terpisah dari teks itu sendiri.
Saya ingin memiliki struktur data diskrit untuk menyimpan data ini, seperti Tabel DB yang berbeda di mana metadata ini disimpan, sehingga saya bisa menggunakannya dalam cara-cara yang berbeda: query, statistik, pengurutan, dan sebagainya.
EDIT: Karena penjawabnya menghapus jawabannya, saya pikir mungkin baik untuk menambahkan sarannya di sini, karena itu adalah saran yang bisa diterapkan yang diperluas pada konsep pertama ini. Poster menyarankan untuk menggunakan sintaks mirip, tapi untuk menghubungkan metadata ke PRIMARY KEY
dari metadata
tabel database.
Sesuatu yang akan terlihat seperti ini:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam __nonummy nibh__[15432]
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Di mana 15432
akan ada ID
baris tabel yang berisi informasi yang diperlukan dan cukup, seperti contoh di bawah ini.
Pikiran kedua saya adalah untuk menyimpan informasi seperti ini di Tabel DB terlihat seperti ini:
TABLE: metadata
ID TEXT_ID TYPE OFFSET_START OFFSET_END CONTENT
1 lipsum note 68 79 this sounds really funny latin
Dengan cara ini metadata akan memiliki id unik, a text_id
sebagai kunci asing yang terhubung ke tabel yang menyimpan teks dan itu akan menghubungkan data dengan teks itu sendiri dengan menggunakan rentang offset karakter sederhana .
Ini akan melakukan trik untuk menjaga data terpisah dari metadata , tetapi masalah yang dapat saya segera lihat dengan pendekatan ini adalah bahwa teks pada dasarnya tidak dapat diedit . Atau, jika saya ingin mengimplementasikan pengeditan teks setelah penugasan metadata, pada dasarnya saya harus menghitung penambahan karakter, atau menghapus dibandingkan dengan versi sebelumnya, dan memeriksa apakah masing - masing modifikasi ini menambah atau menghapus karakter sebelum atau setelah masing-masing metadata terkait.
Bagi saya, ini kedengarannya seperti pendekatan yang benar-benar tidak penting.
Apakah Anda memiliki petunjuk atau saran tentang bagaimana saya dapat mendekati masalah?
Sunting 2: beberapa masalah XML
Menambahkan kasus lain yang akan membuat cukup penting untuk pemisahan data dan metadata ini terjadi.
- Katakanlah saya ingin memungkinkan pengguna yang berbeda memiliki set metadata berbeda dari teks yang sama , dengan atau tanpa kemungkinan masing-masing pengguna benar-benar menampilkan metadata pengguna lain.
Solusi apa pun dari jenis penurunan harga (atau HTML, atau XML) akan sulit diterapkan pada titik ini. Satu-satunya solusi dalam hal ini yang dapat saya pikirkan adalah dengan memiliki DB Table lain yang akan memuat versi pengguna tunggal dari teks asli, yang terhubung ke tabel teks asli dengan menggunakan a FOREIGN KEY
.
Tidak yakin apakah ini sangat elegan.
- XML memiliki model data hierarkis: elemen apa pun yang berada di dalam batas elemen lain dianggap sebagai anaknya , yang paling sering tidak terjadi dalam model data yang saya cari; dalam XML setiap elemen anak - anak harus ditutup sebelum tag induk dapat ditutup, sehingga tidak ada elemen yang tumpang tindih.
Contoh:
<note content="the beginning of the famous placeholder">
Lorem ipsum dolor sit<comment content="I like the sound of amet/elit">
amet</note>
, consectetuer adipiscing elit</comment>
,<note content="adversative?">
sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna Aliquam ERat volutpat.<note content="funny latin">
</note>
</note>
Di sini kita memiliki dua masalah berbeda:
Elemen yang berbeda tumpang tindih: Komentar pertama dimulai dalam not pertama, tetapi berakhir setelah akhir not pertama, artinya bukan anaknya.
Elemen yang sama tumpang tindih: Nada terakhir dan huruf tebal bertumpang tindih; Namun, karena mereka adalah jenis elemen yang sama, parser akan menutup elemen yang terakhir dibuka pada penutupan pertama, dan elemen terbuka pertama pada penutupan terakhir, yang, dalam keadaan ini, bukan apa yang dimaksudkan.