ฉันกำลังพัฒนาโปรแกรมที่จะต้องมีการจัดเก็บแบบอินไลน์ , intextเมตาดาต้า สิ่งที่ฉันหมายถึงคือสิ่งต่อไปนี้สมมติว่าเรามีข้อความยาวและเราต้องการเก็บข้อมูลเมตาบางส่วนที่เชื่อมต่อกับคำเฉพาะหรือประโยคของข้อความ
อะไรจะเป็นวิธีที่ดีที่สุดในการจัดเก็บข้อมูลนี้
ความคิดแรกของฉันคือการรวมไว้ในข้อความMarkdown
ไวยากรณ์บางอย่างที่จะถูกแยกวิเคราะห์ในการดึง บางสิ่งที่มีลักษณะเช่นนี้:
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.
นี่จะแนะนำปัญหาสองประการที่ฉันสามารถนึกได้:
- สิ่งหนึ่งที่ค่อนข้างเล็กคือถ้าไวยากรณ์ดังกล่าวเกิดขึ้นโดยบังเอิญในข้อความดังกล่าวมันสามารถยุ่งกับการแยกวิเคราะห์
- สิ่งที่สำคัญที่สุดคือสิ่งนี้จะไม่เก็บข้อมูลเมตานี้แยกจากข้อความ
ฉันต้องการให้มีโครงสร้างข้อมูลแบบแยกเพื่อเก็บข้อมูลนี้เช่นตารางฐานข้อมูลที่แตกต่างกันซึ่งข้อมูลเมตาเหล่านี้ถูกเก็บไว้เพื่อให้ฉันสามารถใช้พวกเขาในรูปแบบที่ไม่ต่อเนื่อง: การสืบค้นสถิติการเรียงลำดับและอื่น ๆ
แก้ไข:เนื่องจากผู้ตอบลบคำตอบของเขาฉันคิดว่ามันอาจเป็นการดีที่จะเพิ่มข้อเสนอแนะของเขาที่นี่เนื่องจากเป็นข้อเสนอแนะที่ใช้การได้ซึ่งขยายได้ในแนวคิดแรกนี้ โปสเตอร์แนะนำให้ใช้ไวยากรณ์ที่คล้ายกัน แต่จะเชื่อมโยงข้อมูลเมตาไปPRIMARY KEY
ของmetadata
ตารางฐานข้อมูล
สิ่งที่มีลักษณะเช่นนี้:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam __nonummy nibh__[15432]
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
โดยที่15432
จะID
เป็นแถวของตารางที่มีข้อมูลที่จำเป็นและน่าสงสัยดังตัวอย่างด้านล่าง
ความคิดที่สองของฉันคือการจัดเก็บข้อมูลประเภทนี้ในตารางฐานข้อมูลที่มีลักษณะดังนี้:
TABLE: metadata
ID TEXT_ID TYPE OFFSET_START OFFSET_END CONTENT
1 lipsum note 68 79 this sounds really funny latin
ด้วยวิธีนี้เมตาดาต้าจะมี ID ที่ไม่ซ้ำกันtext_id
เป็นต่างประเทศที่สำคัญที่เชื่อมต่อกับตารางการจัดเก็บตำราและมันจะเชื่อมต่อข้อมูลกับข้อความของตัวเองโดยใช้ตัวอักษรที่เรียบง่ายช่วงชดเชย
นี้จะทำเคล็ดลับของการรักษาที่ข้อมูลที่แยกออกมาจากเมตาดาต้าแต่ปัญหาที่ผมได้ทันทีสามารถมองเห็นได้ด้วยวิธีนี้คือข้อความที่จะเป็นพื้นฐานที่ไม่สามารถแก้ไขได้ หรือถ้าผมต้องการที่จะดำเนินการแก้ไขข้อความหลังจากที่นัดของเมตาดาต้าที่ผมจะโดยทั่วไปมีการคำนวณการเพิ่มตัวอักษรหรือลบเมื่อเทียบกับรุ่นก่อนหน้านี้และตรวจสอบว่าแต่ละของการปรับเปลี่ยนนี้จะเพิ่มหรือตัวอักษรลบก่อนหรือหลังจากที่แต่ละของข้อมูลเมตาที่เกี่ยวข้อง
ซึ่งสำหรับฉันเสียงเหมือนวิธีที่ไม่สง่างามจริงๆ
คุณมีพอยน์เตอร์หรือคำแนะนำสำหรับวิธีที่ฉันสามารถแก้ไขปัญหาได้หรือไม่?
แก้ไข 2: ปัญหา XML บางอย่าง
การเพิ่มเคสอื่นซึ่งจะทำให้ค่อนข้างจำเป็นสำหรับการแยกข้อมูลและเมตาดาต้านี้ให้เกิดขึ้น
- สมมติว่าฉันต้องการให้ผู้ใช้ที่ต่างกันมีชุดข้อมูลเมตาที่แตกต่างกันของข้อความเดียวกันโดยมีหรือไม่มีความเป็นไปได้ของผู้ใช้แต่ละคนที่แสดงข้อมูลเมตาของผู้ใช้อื่น
วิธีการแก้ปัญหาใด ๆ ของประเภทมาร์คดาวน์ (หรือ HTML หรือ XML) จะเป็นเรื่องยากที่จะใช้ในจุดนี้ วิธีการแก้ปัญหาเฉพาะในกรณีนี้ที่ฉันสามารถคิดเกี่ยวกับจะมีอีก DB FOREIGN KEY
ตารางซึ่งจะมีผู้ใช้รุ่นเดียวของข้อความเดิมที่เชื่อมต่อไปยังตารางข้อความเดิมโดยการใช้ที่
ไม่แน่ใจว่านี่มันสง่ามากหรือไม่
- XML มีรูปแบบข้อมูลแบบลำดับชั้น:องค์ประกอบใด ๆ ที่เกิดขึ้นภายในขอบเขตขององค์ประกอบอื่นถือเป็นลูกของมันซึ่งส่วนใหญ่มักจะไม่ใช่กรณีในรูปแบบข้อมูลที่ฉันกำลังมองหา; ในรูปแบบ XML ใด ๆเด็กองค์ประกอบจะต้องปิดก่อนที่พ่อแม่แท็กสามารถปิดการอนุญาตให้ไม่ทับซ้อนกันขององค์ประกอบ
ตัวอย่าง:
<note content="the beginning of the famous placeholder">
Lorem Ipsum ได้บังคับนั่น<comment content="I like the sound of amet/elit">
Amet</note>
, consectetuer adipiscing Elit</comment>
,<note content="adversative?">
sed เส้นผ่าศูนย์กลาง nonummy อะแดปเตอร์euismod tincidunt UT ปั๊ม dolore นาแบ่งปัน Erat volutpat<note content="funny latin">
</note>
</note>
ที่นี่เรามีสองปัญหาที่แตกต่าง:
องค์ประกอบที่แตกต่างกันทับกัน:ความคิดเห็นแรกเริ่มต้นภายในโน้ตตัวแรก แต่จบลงหลังจากโน้ตตัวแรกจบลงนั่นคือไม่ใช่ลูกของมัน
องค์ประกอบที่ทับซ้อนกัน:โน้ตตัวสุดท้ายและตัวหนาโน้ตซ้อนทับ; อย่างไรก็ตามเนื่องจากเป็นองค์ประกอบเดียวกัน parser จะปิดองค์ประกอบสุดท้ายที่เปิดในการปิดครั้งแรกและองค์ประกอบที่เปิดครั้งแรกที่การปิดครั้งสุดท้ายซึ่งในกรณีนี้ไม่ใช่สิ่งที่ตั้งใจไว้