डॉक्यूमेंट ऑब्जेक्ट मॉडल

दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) एक क्रॉस-प्लेटफॉर्म और भाषा-स्वतंत्र विनिर्देश है। भाषा-स्वतंत्र इंटरफ़ेस जो एक XML या HTML दस्तावेज़ को पेड़ की संरचना के रूप में मानता है जिसमें प्रत्येक नोड (कंप्यूटर विज्ञान) एक वस्तु (कंप्यूटर विज्ञान) है जो एक भाग का प्रतिनिधित्व करता है। दस्तावेज़ का। DOM एक लॉजिकल ट्री वाले दस्तावेज़ का प्रतिनिधित्व करता है। पेड़ की प्रत्येक शाखा एक नोड में समाप्त होती है, और प्रत्येक नोड में ऑब्जेक्ट होते हैं। DOM विधियाँ पेड़ तक प्रोग्रामेटिक पहुँच की अनुमति देती हैं; उनके साथ कोई दस्तावेज़ की संरचना, शैली या सामग्री को बदल सकता है। नोड्स में आयोजन प्रबंधकर्ता जुड़े हो सकते हैं। एक बार एक घटना शुरू हो जाने के बाद, ईवेंट हैंडलर निष्पादित हो जाते हैं। DOM का प्रमुख मानकीकरण विश्वव्यापी वेब संकाय (W3C) द्वारा नियंत्रित किया गया था, जिसने आखिरी बार 2004 में एक सिफारिश विकसित की थी। WHATWG ने मानक के विकास का जिम्मा लिया, इसे एक जीवित दस्तावेज़ के रूप में प्रकाशित किया। W3C अब WHATWG मानक के स्थिर स्नैपशॉट प्रकाशित करता है।

HTML DOM (दस्तावेज़ ऑब्जेक्ट मॉडल) में, प्रत्येक तत्व एक नोड है:
 * एक दस्तावेज़ एक दस्तावेज़ नोड है।
 * सभी HTML तत्व तत्व नोड हैं।
 * सभी HTML विशेषताएँ विशेषता नोड हैं।
 * HTML तत्वों में डाला गया टेक्स्ट टेक्स्ट नोड है।
 * टिप्पणियाँ टिप्पणी नोड हैं।

इतिहास
दस्तावेज़ ऑब्जेक्ट मॉडल का इतिहास 1990 के दशक के अंत में नेटस्केप नेविगेटर और [[माइक्रोसॉफ्ट अंतर्जाल अन्वेषक]] के साथ-साथ जावास्क्रिप्ट और जेस्क्रिप्ट के बीच ब्राउज़र युद्धों के इतिहास के साथ जुड़ा हुआ है, जावास्क्रिप्ट इंजनों में व्यापक रूप से लागू होने वाली पहली स्क्रिप्टिंग भाषाएं वेब ब्राउज़रों की।

जावास्क्रिप्ट को नेटस्केप संचार द्वारा 1995 में नेटस्केप नेविगेटर 2.0 के भीतर जारी किया गया था। नेटस्केप के प्रतियोगी, माइक्रोसॉफ्ट ने अगले वर्ष इंटरनेट एक्सप्लोरर 3|इंटरनेट एक्सप्लोरर 3.0 जारी किया, जिसमें जेस्क्रिप्ट नामक जावास्क्रिप्ट का पुन: कार्यान्वयन किया गया। जावास्क्रिप्ट और जेस्क्रिप्ट वेब डेवलपर्स को ग्राहक की ओर इंटरएक्टिविटी के साथ वेब पेज बनाने देते हैं। इन भाषाओं की पहली पीढ़ी में उपयोगकर्ता-जनित ईवेंट (कंप्यूटिंग) का पता लगाने और HTML दस्तावेज़ को संशोधित करने की सीमित सुविधाओं को अंततः DOM स्तर 0 या लीगेसी DOM के रूप में जाना जाने लगा। DOM स्तर 0 के लिए कोई स्वतंत्र मानक विकसित नहीं किया गया था, लेकिन इसे HTML4 के विनिर्देशों में आंशिक रूप से वर्णित किया गया था।

लीगेसी डोम उन HTML तत्वों के प्रकारों में सीमित था जिन्हें एक्सेस किया जा सकता था। प्रपत्र (वेब), हाइपरलिंक और छवि तत्वों को एक श्रेणीबद्ध नाम से संदर्भित किया जा सकता है जो मूल दस्तावेज़ वस्तु से शुरू होता है। एक पदानुक्रमित नाम ट्रैवर्स किए गए तत्वों के नाम या अनुक्रमिक अनुक्रमणिका का उपयोग कर सकता है। उदाहरण के लिए, एक पाठ बॉक्स को या तो एक्सेस किया जा सकता है  या.

लीगेसी डोम सक्षम क्लाइंट-साइड फॉर्म सत्यापन और सरल इंटरफ़ेस अन्तरक्रियाशीलता जैसे टूलटिप्स बनाना।

1997 में, नेटस्केप और माइक्रोसॉफ्ट ने क्रमशः नेटस्केप नेविगेटर और इंटरनेट एक्सप्लोरर का संस्करण 4.0 जारी किया, गतिशील एचटीएमएल (डीएचटीएमएल) कार्यक्षमता के लिए समर्थन जोड़कर एक लोड किए गए एचटीएमएल दस्तावेज़ में परिवर्तन को सक्षम किया। डीएचटीएम को प्राथमिक दस्तावेज़ ऑब्जेक्ट के लिए एक्सटेंशन की आवश्यकता होती है जो लीगेसी डीओएम कार्यान्वयन में उपलब्ध था। हालांकि जेस्क्रिप्ट जावास्क्रिप्ट पर आधारित होने के कारण लीगेसी डोम कार्यान्वयन काफी हद तक संगत थे, डीएचटीएमएल डोम एक्सटेंशन प्रत्येक ब्राउज़र निर्माता द्वारा समानांतर में विकसित किए गए थे और असंगत बने रहे। DOM के इन संस्करणों को इंटरमीडिएट DOM के रूप में जाना जाने लगा।

ECMAScript के मानकीकरण के बाद, वर्ल्ड वाइड वेब कंसोर्टियम DOM वर्किंग ग्रुप ने एक मानक DOM विनिर्देशन का मसौदा तैयार करना शुरू किया। पूर्ण विनिर्देश, जिसे DOM स्तर 1 के रूप में जाना जाता है, 1998 के अंत में W3C अनुशंसा बन गया। 2005 तक, W3C DOM के बड़े हिस्से सामान्य ECMAScript-सक्षम ब्राउज़रों द्वारा अच्छी तरह से समर्थित थे, जिनमें Internet Explorer 6 (2001 से), ओपेरा (वेब ​​ब्राउज़र) शामिल थे। ), सफारी (वेब ​​ब्राउज़र) और गेको (लेआउट इंजन)-आधारित ब्राउज़र (जैसे मोज़िला एप्लीकेशन सूट, मोज़िला फ़ायरफ़ॉक्स, समुद्री बन्दर और कैमिनो (वेब ​​ब्राउज़र))।

मानक
W3C DOM वर्किंग ग्रुप ने अपनी अंतिम सिफारिश प्रकाशित की और बाद में 2004 में भंग कर दिया। विकास के प्रयास WHATWG में चले गए, जो एक जीवन स्तर को बनाए रखना जारी रखता है। 2009 में, वेब एप्लिकेशन समूह ने W3C में DOM गतिविधियों को पुनर्गठित किया। 2013 में, प्रगति की कमी और आप ऊब जाएंगे 5 की आसन्न रिलीज के कारण, डीओएम लेवल 4 विनिर्देश को एचटीएमएल वर्किंग ग्रुप को पूरा करने में तेजी लाने के लिए पुन: असाइन किया गया था। इस बीच, 2015 में, वेब एप्लिकेशन समूह को भंग कर दिया गया और DOM स्टीवर्डशिप वेब प्लेटफ़ॉर्म समूह को दे दी गई। 2015 में DOM स्तर 4 के प्रकाशन के साथ शुरुआत करते हुए, W3C WHATWG मानक के स्नैपशॉट के आधार पर नई अनुशंसाएँ बनाता है।


 * DOM स्तर 1 संपूर्ण HTML या XML दस्तावेज़ के लिए एक पूर्ण मॉडल प्रदान करता है, जिसमें दस्तावेज़ के किसी भी हिस्से को बदलने का साधन शामिल है।
 * DOM लेवल 2 को 2000 के अंत में प्रकाशित किया गया था  फ़ंक्शन के साथ-साथ DOM ईवेंट और XML नामस्थान और CSS के लिए समर्थन।
 * DOM लेवल 3, अप्रैल 2004 में प्रकाशित, XPath और कीबोर्ड घटना से निपटना के लिए समर्थन जोड़ा गया, साथ ही XML के रूप में क्रमांकन दस्तावेज़ों के लिए एक इंटरफ़ेस।
 * DOM Level 4 को 2015 में प्रकाशित किया गया था। यह WHATWG जीवन स्तर का एक स्नैपशॉट है।

वेब ब्राउजर
वेब ब्राउज़र इंजन के लिए एक HTML पेज जैसे दस्तावेज़, अधिकांश वेब ब्राउज़र DOM के समान एक आंतरिक मॉडल का उपयोग करते हैं। प्रत्येक दस्तावेज़ के नोड्स को ट्री स्ट्रक्चर में व्यवस्थित किया जाता है, जिसे 'DOM ट्री' कहा जाता है, जिसमें सबसे ऊपरी नोड को डॉक्यूमेंट ऑब्जेक्ट नाम दिया जाता है। जब एक HTML पृष्ठ ब्राउज़रों में प्रस्तुत किया जाता है, तो ब्राउज़र HTML को स्थानीय मेमोरी में डाउनलोड करता है और स्क्रीन पर पृष्ठ प्रदर्शित करने के लिए स्वचालित रूप से इसे पार्स करता है। हालाँकि, DOM को एक पेड़ के रूप में प्रस्तुत करने की आवश्यकता नहीं है, और कुछ ब्राउज़रों ने अन्य आंतरिक मॉडलों का उपयोग किया है।

जावास्क्रिप्ट
जब कोई वेब पेज लोड होता है, तो ब्राउजर पेज का एक डॉक्यूमेंट ऑब्जेक्ट मॉडल बनाता है, जो एक HTML डॉक्यूमेंट का ऑब्जेक्ट ओरिएंटेड प्रतिनिधित्व होता है जो जावास्क्रिप्ट और खुद डॉक्यूमेंट के बीच एक इंटरफेस के रूप में कार्य करता है। यह गतिशील वेब पृष्ठों के निर्माण की अनुमति देता है, क्योंकि एक पृष्ठ के भीतर जावास्क्रिप्ट कर सकता है:


 * किसी भी HTML तत्व और विशेषताओं को जोड़ें, बदलें और हटाएं
 * किसी भी CSS स्टाइल को बदलें
 * सभी मौजूदा घटनाओं पर प्रतिक्रिया करें
 * नई घटनाएँ बनाएँ

डोम वृक्ष संरचना
डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM) ट्री एक HTML या XML दस्तावेज़ का एक पदानुक्रमित प्रतिनिधित्व है। इसमें रूट नोड होता है, जो दस्तावेज़ ही होता है, और बाल नोड्स की एक श्रृंखला होती है जो दस्तावेज़ के तत्वों, विशेषताओं और टेक्स्ट सामग्री का प्रतिनिधित्व करती है। ट्री में प्रत्येक नोड में रूट नोड को छोड़कर एक पैरेंट नोड होता है, और इसमें कई चाइल्ड नोड हो सकते हैं।

नोड्स
के रूप में तत्व HTML या XML दस्तावेज़ में तत्वों को DOM ट्री में नोड्स के रूप में दर्शाया जाता है। प्रत्येक तत्व नोड में एक टैग नाम, विशेषताएँ होती हैं, और इसमें अन्य तत्व नोड या बच्चों के रूप में टेक्स्ट नोड हो सकते हैं। उदाहरण के लिए, निम्न संरचना वाला HTML दस्तावेज़: DOM ट्री में इस रूप में दर्शाया जाएगा: DOM ट्री में इस रूप में दर्शाया जाएगा:, ,  , और   DOM संरचना बनाने का एक अन्य तरीका HTML कोड को एक स्ट्रिंग के रूप में सम्मिलित करने के लिए innerHTML गुण का उपयोग करना है, जिससे प्रक्रिया में तत्व और बच्चे बनते हैं। उदाहरण के लिए: <वाक्यविन्यास लैंग = जावास्क्रिप्ट> document.getElementById (रूट) .आंतरिक HTML = ; एक अन्य विधि जावास्क्रिप्ट लाइब्रेरी या फ्रेमवर्क जैसे कि jQuery, AngularJS, React (जावास्क्रिप्ट लाइब्रेरी), Vue.js, आदि का उपयोग करना है। ये लाइब्रेरी DOM बनाने, हेरफेर करने और बातचीत करने के लिए एक अधिक सुविधाजनक और कुशल तरीका प्रदान करती हैं।.

डेटा को पार्स करने और उसके अनुसार नोड्स बनाने के लिए जावास्क्रिप्ट विधियों का उपयोग करके XML या JSON डेटा से DOM संरचना बनाना भी संभव है।

यह ध्यान रखना महत्वपूर्ण है कि एक डोम संरचना बनाने का मतलब यह नहीं है कि यह वेब पेज में प्रदर्शित होगा, यह केवल स्मृति में मौजूद है और इसे दस्तावेज़ निकाय या एक विशिष्ट कंटेनर में प्रस्तुत किया जाना चाहिए।

संक्षेप में, एक DOM संरचना बनाने में अलग-अलग नोड्स बनाना और प्रतिक्रिया (जावास्क्रिप्ट पुस्तकालय) अन्य प्रोग्रामिंग भाषाओं का उपयोग करके एक पदानुक्रमित संरचना में व्यवस्थित करना शामिल है, और यह उपयोग के मामले और डेवलपर की वरीयता के आधार पर कई तरीकों का उपयोग करके किया जा सकता है।

कार्यान्वयन
क्योंकि DOM किसी भी दिशा में नेविगेशन का समर्थन करता है (उदाहरण के लिए, माता-पिता और पिछले भाई-बहन) और मनमाना संशोधनों की अनुमति देता है, एक कार्यान्वयन को कम से कम उस दस्तावेज़ को बफर करना चाहिए जो अब तक पढ़ा गया है (या इसके कुछ पार्स किए गए रूप)।

लेआउट इंजन
वेब ब्राउज़र HTML को DOM में पार्स करने के लिए वेब ब्राउज़र इंजन पर भरोसा करते हैं। कुछ लेआउट इंजन, जैसे ट्राइडेंट (लेआउट इंजन) | ट्राइडेंट/एमएसएचटीएमएल, मुख्य रूप से या विशेष रूप से इंटरनेट एक्सप्लोरर जैसे किसी विशेष ब्राउज़र से जुड़े होते हैं। ब्लिंक (लेआउट इंजन), वेबकिट, और गेको (लेआउट इंजन) सहित अन्य, कई ब्राउज़रों द्वारा साझा किए जाते हैं, जैसे Google क्रोम, ओपेरा (वेब ​​ब्राउज़र), सफारी (वेब ​​ब्राउज़र), और फ़ायरफ़ॉक्स। अलग-अलग लेआउट इंजन अनुपालन की अलग-अलग डिग्री के लिए DOM मानकों को लागू करते हैं।

पुस्तकालय
डोम कार्यान्वयन:


 * libxml2
 * एमएसएक्सएमएल
 * Apache Xerces C++, Java और Perl में लिखे गए DOM इम्प्लीमेंटेशन का संग्रह है
 * xml.dom पायथन (प्रोग्रामिंग भाषा) के लिए
 *  के लिए XML एक JavaScript-आधारित DOM कार्यान्वयन है
 * PHP.Gt DOM एक सर्वर-साइड DOM कार्यान्वयन है जो libxml2 पर आधारित है और DOM स्तर 4 अनुकूलता लाता है PHP प्रोग्रामिंग भाषा के लिए
 * डोमिनोज़ एक सर्वर-साइड (नोड.जेएस) डोम कार्यान्वयन है जो मोज़िला के डोम.जेएस पर आधारित है। डोमिनोज़ का उपयोग विज़ुअल एडिटर के साथ मीडियाविकि स्टैक में किया जाता है।
 * SimpleHtmlDom C# में एक साधारण HTML डॉक्यूमेंट ऑब्जेक्ट मॉडल है, जो प्रोग्रामेटिक रूप से HTML स्ट्रिंग उत्पन्न कर सकता है।

एपीआई जो डीओएम कार्यान्वयन का खुलासा करते हैं:


 * एक्सएमएल प्रोसेसिंग के लिए जावा एपीआई (एक्सएमएल प्रोसेसिंग के लिए जावा एपीआई) डोम प्रदाताओं तक पहुंचने के लिए एक एपीआई है
 * Lazarus (IDE) (फ़्री पास्कल IDE) में DOM के दो वेरिएंट हैं - UTF-8 और ANSI फॉर्मेट के साथ

निरीक्षण उपकरण:


 * डोम इंस्पेक्टर एक वेब डेवलपर टूल है

यह भी देखें

 * छाया डोम
 * वर्चुअल डोम

बाहरी संबंध

 * DOM Living Standard by the WHATWG
 * Original W3C DOM hub by the W3C DOM Working Group (outdated)
 * Web Platform Working Group (current steward of W3C DOM)