मैं एक एप्लिकेशन विकसित कर रहा हूं, जिसे इनलाइन , इंटीटेक्स्ट मेटाडेटा को स्टोर करना होगा । मेरे कहने का मतलब यह है कि निम्नलिखित हैं: मान लें कि हमारे पास एक लंबा पाठ है, और हम एक विशिष्ट शब्द, या पाठ के वाक्य से जुड़े कुछ मेटाडेटा संग्रहीत करना चाहते हैं।
इस जानकारी को संग्रहीत करने का सबसे अच्छा तरीका क्या होगा?
मेरा पहला विचार पाठ में किसी प्रकार के 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.
नीचे दी गई मिसाल के अनुसार आवश्यक, queriable जानकारी वाली टेबल रो की कहां 15432
होगी ID
।
मेरा दूसरा विचार इस तरह की जानकारी को एक डीबी टेबल में इस तरह से देखना था:
TABLE: metadata
ID TEXT_ID TYPE OFFSET_START OFFSET_END CONTENT
1 lipsum note 68 79 this sounds really funny latin
इस तरह मेटाडेटा में एक अद्वितीय आईडी होगी, text_id
जो ग्रंथों को संग्रहीत करने के लिए टेबल से जुड़ी एक विदेशी कुंजी के रूप में होगी और यह एक साधारण चरित्र ऑफसेट रेंज का उपयोग करके डेटा को पाठ के साथ कनेक्ट करेगी ।
यह मेटाडेटा से डेटा को अलग रखने की चाल को करेगा , लेकिन एक समस्या जिसे मैं तुरंत इस दृष्टिकोण के साथ देख सकता हूं वह यह है कि पाठ मौलिक रूप से संपादन योग्य नहीं होगा । या, अगर मैं मेटाडाटा के अर्पण के बाद पाठ का संपादन लागू करने के लिए चाहता था, मैं मूल रूप से पात्रों संशोधन या हटाने की गणना पिछले संस्करण की तुलना में, और जाँच करें कि क्या करना होगा प्रत्येक इस संशोधनों के पहले या बाद में निकालें पात्रों कहते हैं या प्रत्येक संबंधित मेटाडेटा का।
जो, मेरे लिए, वास्तव में एक अभिमानी दृष्टिकोण की तरह लगता है।
क्या आपके पास कोई संकेत या सुझाव है कि मैं समस्या का सामना कैसे कर सकता हूं?
संपादन 2: कुछ XML समस्याएं
एक और मामला जोड़ना जो डेटा और मेटाडेटा के इस पृथक्करण के लिए काफी आवश्यक होगा।
- मान लीजिए कि मैं अलग-अलग उपयोगकर्ताओं के लिए एक ही पाठ के अलग-अलग मेटाडेटा सेट करना संभव बनाता हूं , प्रत्येक उपयोगकर्ता की संभावना के बिना या उसके बिना वास्तव में अन्य उपयोगकर्ता मेटाडेटा प्रदर्शित कर रहा है।
मार्कडाउन प्रकार (या HTML, या XML) का कोई भी समाधान इस बिंदु पर लागू करना मुश्किल होगा। इस मामले में एकमात्र समाधान जो मैं सोच सकता था कि अभी तक एक और डीबी टेबल होगा जिसमें मूल पाठ का एकल उपयोगकर्ता संस्करण होगा, एक के उपयोग से मूल पाठ तालिका से जुड़ा होगा FOREIGN KEY
।
यकीन नहीं होता कि यह बहुत सुंदर है या तो।
- 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?">
एसईडी व्यास nonummy nibh euismod एंड्रॉयड ut laoreet dolore मैग्ना कर्मचारी erat volutpat।<note content="funny latin">
</note>
</note>
यहां हमें दो अलग-अलग समस्याएं हैं:
विभिन्न तत्व ओवरलैपिंग: पहली टिप्पणी पहले नोट के भीतर शुरू होती है, लेकिन पहले नोट के अंत के बाद समाप्त होती है, अर्थात यह उसका बच्चा नहीं है।
ओवरलैपिंग वाले समान तत्व: अंतिम नोट और बोल्डफेड नोट ओवरलैप; हालांकि, चूंकि वे एक ही तरह के तत्व हैं, इसलिए पार्सर पहले बंद होने पर अंतिम रूप से खुले हुए तत्व को बंद कर देगा, और अंतिम बंद होने पर पहला खोला गया तत्व, जो इस परिस्थिति में वह नहीं है, जो इरादा है।