CodeGym /Java Blog /अनियमित /जावा में एक्सएमएल
John Squirrels
स्तर 41
San Francisco

जावा में एक्सएमएल

अनियमित ग्रुप में प्रकाशित
नमस्ते! आज हम XML नामक एक अन्य डेटा प्रारूप पेश करेंगे। यह एक बहुत ही महत्वपूर्ण विषय है। वास्तविक जावा अनुप्रयोगों पर काम करते समय, आप निश्चित रूप से एक्सएमएल से संबंधित कार्यों का सामना करेंगे। जावा विकास में, इस प्रारूप का उपयोग लगभग सार्वभौमिक रूप से किया जाता है (हम नीचे क्यों पता लगाएंगे), इसलिए मैं अनुशंसा करता हूं कि आप इस पाठ की सतही समीक्षा न करें, बल्कि हर चीज की पूरी तरह से समझ हासिल करें और अतिरिक्त साहित्य/लिंक का भी अध्ययन करें :) यह निश्चित रूप से समय की बर्बादी नहीं होगी। तो, चलिए आसान चीजों से शुरू करते हैं: "क्या" और "क्यों"!

जावा एक्सएमएल क्या है?

XML का मतलब एक्स्टेंसिबल मार्कअप लैंग्वेज है। आप पहले से ही एक मार्कअप भाषा से परिचित हो सकते हैं - क्या आपने HTML के बारे में सुना है, जिसका उपयोग वेब पेज बनाने के लिए किया जाता है :) एक्सएमएल क्या है?  - 1HTML और XML का स्वरूप भी एक जैसा है:
एचटीएमएल 1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
एक्सएमएल 1
<headline>title</headline>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
एचटीएमएल 2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
एक्सएमएल 2
<chief>title</chief>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
दूसरे शब्दों में, XML डेटा का वर्णन करने के लिए एक भाषा है।

आपको एक्सएमएल की आवश्यकता क्यों है?

XML का आविष्कार मूल रूप से इंटरनेट सहित डेटा को अधिक आसानी से स्टोर करने और भेजने के लिए किया गया था। इसके कई फायदे हैं जो आपको इसे हासिल करने में मदद करते हैं। सबसे पहले, मानव और कंप्यूटर दोनों द्वारा पढ़ना आसान है। मुझे लगता है कि आप आसानी से समझ सकते हैं कि यह XML फ़ाइल क्या वर्णन करती है:
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
एक कंप्यूटर भी इस प्रारूप को आसानी से समझ लेता है। दूसरा, चूंकि डेटा को सादे पाठ के रूप में संग्रहीत किया जाता है, जब हम इसे एक कंप्यूटर से दूसरे कंप्यूटर में स्थानांतरित करते हैं तो कोई संगतता समस्या नहीं होगी। यह समझना महत्वपूर्ण है कि XML निष्पादन योग्य कोड नहीं है - यह एक डेटा विवरण भाषा है। XML का उपयोग करके डेटा का वर्णन करने के बाद, आपको कोड लिखने की आवश्यकता होती है (उदाहरण के लिए, जावा में) जो इस डेटा को भेज/प्राप्त/संसाधित कर सकता है।

एक्सएमएल कैसे संरचित है?

मुख्य घटक टैग है: कोण कोष्ठक में ये चीज़ें हैं:
<book>
</book>
उद्घाटन टैग और समापन टैग हैं। समापन टैग में एक अतिरिक्त प्रतीक (" / ") है, जैसा कि ऊपर के उदाहरण में देखा जा सकता है। प्रत्येक ओपनिंग टैग में एक क्लोजिंग टैग होना चाहिए। वे दिखाते हैं कि फ़ाइल में प्रत्येक तत्व का विवरण कहाँ से शुरू और समाप्त होता है। टैग नेस्ट किया जा सकता है! हमारे पुस्तक उदाहरण में, <पुस्तक> टैग में 3 नेस्टेड टैग हैं: <शीर्षक>, <लेखक>, और <वर्ष>। यह नेस्टिंग के एक स्तर तक सीमित नहीं है: नेस्टेड टैग्स के अपने नेस्टेड टैग आदि हो सकते हैं। इस संरचना को टैग ट्री कहा जाता है। आइए इस ट्री को एक नमूना XML फ़ाइल का उपयोग करके देखें जो कार डीलरशिप का वर्णन करती है:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
यहां हमारे पास एक टॉप-लेवल टैग है: <carstore>। इसे जड़ तत्व भी कहते हैं। <carstore> का एक चाइल्ड टैग है: <car>। <कार> में 3 चाइल्ड टैग भी होते हैं: <मॉडल>, <साल> और <कीमत>। प्रत्येक टैग में विशेषताएँ हो सकती हैं, जिनमें अतिरिक्त महत्वपूर्ण जानकारी होती है। हमारे उदाहरण में, <मॉडल> ​​टैग में एक "लैंग" विशेषता है, जो मॉडल नाम को रिकॉर्ड करने के लिए उपयोग की जाने वाली भाषा को इंगित करती है:
<model lang="en">Scania R 770</model>
यहां हम इंगित करते हैं कि नाम अंग्रेजी में लिखा गया है। हमारे <कीमत> टैग में "मुद्रा" विशेषता है।
<price currency="US dollar">150000.00</price>
यहां हम संकेत देते हैं कि कार की कीमत अमेरिकी डॉलर में दी गई है। इस प्रकार, XML में एक "आत्म-वर्णन" सिंटैक्स है। आप डेटा का वर्णन करने के लिए आवश्यक कोई भी जानकारी जोड़ सकते हैं। इसके अतिरिक्त, फ़ाइल के शीर्ष पर, आप XML संस्करण और डेटा लिखने के लिए प्रयुक्त एन्कोडिंग को इंगित करने वाली एक पंक्ति जोड़ सकते हैं। इसे "प्रोलॉग" कहा जाता है और यह इस तरह दिखता है:
<?xml version="1.0" encoding="UTF-8"?>
हम XML संस्करण 1.0 और UTF-8 एन्कोडिंग का उपयोग कर रहे हैं। यह आवश्यक नहीं है, लेकिन यह उपयोगी हो सकता है यदि, उदाहरण के लिए, आपकी फ़ाइल विभिन्न भाषाओं में टेक्स्ट का उपयोग करती है। हमने उल्लेख किया है कि XML का अर्थ "एक्स्टेंसिबल मार्कअप लैंग्वेज" है, लेकिन "एक्स्टेंसिबल" का क्या अर्थ है? इसका मतलब है कि यह आपके ऑब्जेक्ट्स और फाइलों के नए संस्करण बनाने के लिए एकदम सही है। उदाहरण के लिए, मान लीजिए कि हम भी अपनी कार डीलरशिप पर मोटरसाइकिल बेचना शुरू करना चाहते हैं! उस ने कहा, हमें अपने प्रोग्राम को <कारस्टोर> के दोनों संस्करणों का समर्थन करने की आवश्यकता है: पुराना (मोटरसाइकिल के बिना) और नया। यहाँ हमारा पुराना संस्करण है:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
और यहाँ नया विस्तारित एक है:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
हमारी फ़ाइल में मोटरसाइकिलों का विवरण जोड़ना इतना आसान और सरल है :) और तो और, हमें मोटरसाइकिलों के लिए कारों के समान चाइल्ड टैग रखने की बिल्कुल आवश्यकता नहीं है। कृपया ध्यान दें कि कारों के विपरीत मोटरसाइकिलों में एक <मालिक> तत्व होता है। यह कंप्यूटर (या मानव) को डेटा पढ़ने से नहीं रोकता है।

एक्सएमएल और एचटीएमएल के बीच अंतर

हम पहले ही कह चुके हैं कि XML और HTML दिखने में काफी समान हैं। यह जानना बहुत महत्वपूर्ण है कि वे कैसे भिन्न हैं। सबसे पहले, उनका उपयोग विभिन्न उद्देश्यों के लिए किया जाता है। HTML वेब पेजों को चिह्नित करने के लिए है। उदाहरण के लिए, एक वेबसाइट बनाते समय, आप निर्दिष्ट करने के लिए HTML का उपयोग कर सकते हैं: "मेनू ऊपरी दाएं कोने में होना चाहिए। इसमें ऐसे और ऐसे बटन होने चाहिए"। दूसरे शब्दों में, HTML का काम डेटा प्रदर्शित करना है। XML मनुष्यों और कंप्यूटरों के लिए सुविधाजनक रूप में जानकारी संग्रहीत करने और भेजने के लिए है। इस प्रारूप में कोई संकेत नहीं है कि यह डेटा कैसे प्रदर्शित किया जाना चाहिए: यह उस प्रोग्राम के कोड पर निर्भर करता है जो इसे पढ़ता है। दूसरा, एक बड़ा तकनीकी अंतर है। HTML टैग पूर्वनिर्धारित हैं। दूसरे शब्दों में, एक HTML हेडर बनाने के लिए (उदाहरण के लिए, पृष्ठ के शीर्ष पर एक बड़ा कैप्शन) केवल <h1></h1> का उपयोग करता है टैग (<h2></h2> और <h3></h3> छोटे हेडर के लिए उपयोग किए जाते हैं)। आप अन्य टैग्स का उपयोग करके HTML हेडर नहीं बना सकते हैं। एक्सएमएल पूर्वनिर्धारित टैग का उपयोग नहीं करता है। आप अपनी इच्छानुसार टैग को कोई भी नाम दे सकते हैं: <शीर्षक>, <शीर्षक>, <idontknow2121>।

युद्ध वियोजन

XML द्वारा प्रदान की जाने वाली स्वतंत्रता से कुछ समस्याएँ हो सकती हैं। उदाहरण के लिए, एक और एक ही इकाई (उदाहरण के लिए, एक कार) का उपयोग एक कार्यक्रम द्वारा विभिन्न उद्देश्यों के लिए किया जा सकता है। उदाहरण के लिए, हमारे पास एक XML फ़ाइल है जो कारों का वर्णन करती है। हालाँकि, हमारे प्रोग्रामर आपस में एक पूर्व समझौते पर नहीं पहुँचे। और अब, वास्तविक कारों के बारे में डेटा के अतिरिक्त, हमें अपने XML में खिलौना कारों के बारे में डेटा मिल सकता है! इसके अलावा, उनके पास समान गुण हैं। मान लीजिए कि हमारा प्रोग्राम ऐसी XML फ़ाइल में पढ़ता है। हम असली कार को खिलौना कार से कैसे अलग करते हैं?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
यहाँ उपसर्ग और नामस्थान हमारी सहायता करेंगे। हमारे कार्यक्रम में खिलौना कारों को वास्तविक कारों से अलग करने के लिए (और वास्तव में किसी भी खिलौने को उनके वास्तविक समकक्षों से अलग करने के लिए), हम दो उपसर्ग पेश करते हैं: "वास्तविक" और "खिलौना"।
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
अब हमारा प्रोग्राम विभिन्न संस्थाओं के बीच अंतर करने में सक्षम होगा! खिलौना उपसर्ग वाली हर चीज को खिलौने के रूप में माना जाएगा :) हालाँकि, हमने अभी तक नहीं किया है। उपसर्गों का उपयोग करने के लिए, हमें उनमें से प्रत्येक को नामस्थान के रूप में पंजीकृत करने की आवश्यकता है। दरअसल, "रजिस्टर" एक मजबूत शब्द है :) हमें बस उनमें से प्रत्येक के लिए एक अद्वितीय नाम के साथ आने की जरूरत है। यह कक्षाओं की तरह है: एक वर्ग का एक छोटा नाम ( Cat ) और एक पूरी तरह से योग्य नाम होता है जिसमें सभी पैकेज शामिल होते हैं ( Zoo.animals.Cat). एक यूआरआई आमतौर पर एक अद्वितीय नामस्थान नाम बनाने के लिए प्रयोग किया जाता है। कभी-कभी यह एक इंटरनेट पते का उपयोग करके किया जाता है, जहां इस नामस्थान के कार्यों का वर्णन किया गया है। लेकिन यह एक वैध इंटरनेट पता होना जरूरी नहीं है। बहुत बार, परियोजनाएं यूआरआई-जैसी स्ट्रिंग्स का उपयोग करती हैं जो नामस्थान पदानुक्रम को ट्रैक करने में मदद करती हैं। यहाँ एक उदाहरण है:
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
बेशक, "http://testproject.developersgroup1.companyname/department2/namespaces/real" पर कोई वेबसाइट नहीं है लेकिन इस स्ट्रिंग में उपयोगी जानकारी है: विभाग 2 में समूह 1 के डेवलपर्स "वास्तविक" नामस्थान बनाने के लिए ज़िम्मेदार हैं . यदि हमें नए नामों का परिचय देने या संभावित संघर्षों पर चर्चा करने की आवश्यकता है, तो हमें पता चल जाएगा कि कहां मुड़ना है। कभी-कभी डेवलपर वास्तविक वर्णनात्मक वेब पते का उपयोग अद्वितीय नामस्थान नाम के रूप में करते हैं। उदाहरण के लिए, यह एक बड़ी कंपनी का मामला हो सकता है जिसकी परियोजना का उपयोग दुनिया भर के लाखों लोगों द्वारा किया जाएगा। लेकिन यह निश्चित रूप से हमेशा नहीं किया जाता है: स्टैक ओवरफ़्लो में इस मुद्दे पर चर्चा है। सामान्य तौर पर, यूआरआई को नामस्थान नामों के रूप में उपयोग करने की कोई सख्त आवश्यकता नहीं है: आप केवल यादृच्छिक स्ट्रिंग्स का उपयोग भी कर सकते हैं। यह विकल्प भी काम करेगा:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
उस ने कहा, यूआरआई का उपयोग करने के कई फायदे हैं। आप इसके बारे में यहीं और अधिक पढ़ सकते हैं ।

बुनियादी एक्सएमएल मानक

XML मानक एक्सटेंशन का एक सेट है जो XML फ़ाइलों में अतिरिक्त कार्यक्षमता जोड़ता है। XML में बहुत सारे मानक हैं, लेकिन हम केवल सबसे महत्वपूर्ण देखेंगे और पता लगाएंगे कि वे AJAX को संभव बनाते हैं, जो कि सबसे प्रसिद्ध XML मानकों में से एक है। यह आपको किसी वेब पेज को फिर से लोड किए बिना उसकी सामग्री बदलने देता है! XSLT आपको XML टेक्स्ट को अन्य स्वरूपों में बदलने देता है। उदाहरण के लिए, आप XML को HTML में बदलने के लिए XSLT का उपयोग कर सकते हैं! जैसा कि हमने कहा है, XML का उद्देश्य डेटा का वर्णन करना है, उसे प्रदर्शित करना नहीं है। लेकिन XSLT के साथ हम इस सीमा को पार कर सकते हैं! XML DOM आपको XML फ़ाइल से अलग-अलग तत्वों को पुनः प्राप्त करने, संशोधित करने, जोड़ने या हटाने देता है। यह कैसे काम करता है इसका एक छोटा सा उदाहरण यहां दिया गया है। हमारे पास एक books.xml फ़ाइल है:
<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J. K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
इसकी दो पुस्तकें हैं। पुस्तकों में एक <शीर्षक> तत्व होता है। यहां हम अपनी XML फ़ाइल से सभी पुस्तक शीर्षक प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं और पहले वाले को कंसोल पर प्रिंट कर सकते हैं:
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
DTD ("दस्तावेज़ प्रकार की परिभाषा") आपको किसी XML फ़ाइल में किसी इकाई के लिए अनुमत तत्वों की सूची परिभाषित करने देता है। उदाहरण के लिए, मान लीजिए कि हम एक किताबों की दुकान की वेबसाइट पर काम कर रहे हैं और सभी विकास दल इस बात से सहमत हैं कि XML फ़ाइलों में पुस्तक तत्वों के लिए केवल शीर्षक, लेखक और वर्ष विशेषताएँ निर्दिष्ट की जानी चाहिए। लेकिन हम खुद को लापरवाही से कैसे बचाते हैं? बहुत आसान!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
यहां हमने <पुस्तक> के लिए मान्य विशेषताओं की एक सूची परिभाषित की है। वहां एक नया तत्व जोड़ने का प्रयास करें और आपको तुरंत एक त्रुटि मिलेगी!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
गलती! "एलिमेंट मेनहेरो की यहां अनुमति नहीं है" कई अन्य एक्सएमएल मानक हैं। आप उनमें से प्रत्येक के साथ खुद को परिचित कर सकते हैं और कोड में गहरी खुदाई करने का प्रयास कर सकते हैं। वैसे भी, अगर आपको XML के बारे में जानकारी चाहिए, तो आप वहां लगभग सब कुछ पा सकते हैं :) और इसके साथ ही हमारा पाठ समाप्त हो जाता है। यह कार्यों पर वापस जाने का समय है! :) अगली बार तक!
टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION