CodeGym /Java Blog /यादृच्छिक /जावा मध्ये XML
John Squirrels
पातळी 41
San Francisco

जावा मध्ये XML

यादृच्छिक या ग्रुपमध्ये प्रकाशित केले
हाय! आज आपण XML नावाचा दुसरा डेटा फॉरमॅट सादर करू. हा अतिशय महत्त्वाचा विषय आहे. रिअल Java अॅप्लिकेशन्सवर काम करताना, तुम्हाला जवळजवळ निश्चितपणे XML-संबंधित कार्ये भेटतील. जावा डेव्हलपमेंटमध्ये, हे स्वरूप जवळजवळ सर्वत्र वापरले जाते (आम्ही खाली का ते शोधू), म्हणून मी शिफारस करतो की तुम्ही या धड्याचे वरवरचे पुनरावलोकन करू नका, त्याऐवजी प्रत्येक गोष्टीची संपूर्ण माहिती मिळवा आणि अतिरिक्त साहित्य/लिंक देखील अभ्यासा :) हे निश्चितपणे वेळेचा अपव्यय होणार नाही. तर, सोप्या गोष्टींपासून सुरुवात करूया: "काय" आणि "का"!

Java XML म्हणजे काय?

XML म्हणजे एक्स्टेंसिबल मार्कअप लँग्वेज. तुम्हाला कदाचित मार्कअप लँग्वेज आधीच माहित असेल — तुम्ही HTML बद्दल ऐकले आहे का, ज्याचा वापर वेब पेजेस तयार करण्यासाठी केला जातो :) XML म्हणजे काय?  - १HTML आणि XML चे स्वरूप सारखेच आहे:
HTML 1

<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 1

<headline>title</headline>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
HTML 2

<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 2

<chief>title</chief>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
दुसऱ्या शब्दांत, XML ही डेटाचे वर्णन करण्यासाठी एक भाषा आहे.

तुम्हाला 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 वापरून डेटाचे वर्णन केल्यानंतर, तुम्हाला कोड लिहावा लागेल (उदाहरणार्थ, Java मध्ये) जो हा डेटा पाठवू/प्राप्त करू शकतो/प्रक्रिया करू शकतो.

XML ची रचना कशी आहे?

मुख्य घटक टॅग आहे: या कोन कंसातील गोष्टी आहेत:

<book>
</book>
ओपनिंग टॅग आणि क्लोजिंग टॅग आहेत. क्लोजिंग टॅगमध्ये अतिरिक्त चिन्ह (" / ") आहे, जसे की वरील उदाहरणामध्ये पाहिले जाऊ शकते. प्रत्येक ओपनिंग टॅगमध्ये क्लोजिंग टॅग असणे आवश्यक आहे. ते फाइलमधील प्रत्येक घटकाचे वर्णन कोठे सुरू होते आणि समाप्त होते ते दर्शवितात. टॅग नेस्ट केले जाऊ शकतात! आमच्या पुस्तकाच्या उदाहरणामध्ये, <book> टॅगमध्ये 3 नेस्टेड टॅग आहेत: <title>, <author> आणि <year>. हे नेस्टिंगच्या एका स्तरापुरते मर्यादित नाही: नेस्टेड टॅगचे स्वतःचे नेस्टेड टॅग इत्यादी असू शकतात. या संरचनेला टॅग ट्री म्हणतात. कार डीलरशिपचे वर्णन करणारी नमुना 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>. <car>, याउलट, 3 चाइल्ड टॅग देखील आहेत: <model>, <year> आणि <price>. प्रत्येक टॅगमध्ये विशेषता असू शकतात, ज्यामध्ये अतिरिक्त महत्त्वाची माहिती असते. आमच्या उदाहरणात, <model> टॅगमध्ये "lang" विशेषता आहे, जी मॉडेलचे नाव रेकॉर्ड करण्यासाठी वापरलेली भाषा दर्शवते:

<model lang="en">Scania R 770</model>
येथे आम्ही सूचित करतो की नाव इंग्रजीमध्ये लिहिलेले आहे. आमच्या <price> टॅगमध्ये "चलन" विशेषता आहे.

<price currency="US dollar">150000.00</price>
येथे आम्ही सूचित करतो की कारची किंमत यूएस डॉलरमध्ये दिली आहे. अशा प्रकारे, XML मध्ये "स्व-वर्णन" वाक्यरचना आहे. डेटाचे वर्णन करण्यासाठी तुम्हाला आवश्यक असलेली कोणतीही माहिती तुम्ही जोडू शकता. याव्यतिरिक्त, फाइलच्या शीर्षस्थानी, तुम्ही XML आवृत्ती आणि डेटा लिहिण्यासाठी वापरलेले एन्कोडिंग दर्शविणारी एक ओळ जोडू शकता. याला "प्रोलॉग" म्हणतात आणि ते असे दिसते:

<?xml version="1.0" encoding="UTF-8"?>
आम्ही XML आवृत्ती 1.0 आणि UTF-8 एन्कोडिंग वापरत आहोत. हे आवश्यक नाही, परंतु, उदाहरणार्थ, तुमची फाईल वेगवेगळ्या भाषांमधील मजकूर वापरत असल्यास ते उपयुक्त ठरू शकते. आम्ही नमूद केले आहे की XML म्हणजे "एक्सटेंसिबल मार्कअप भाषा", परंतु "एक्सटेंसिबल" म्हणजे काय? याचा अर्थ आपल्या वस्तू आणि फायलींच्या नवीन आवृत्त्या तयार करण्यासाठी ते योग्य आहे. उदाहरणार्थ, समजा आम्हाला आमच्या कार डीलरशीपवर मोटारसायकलींची विक्री सुरू करायची आहे! ते म्हणाले, आम्हाला आमच्या प्रोग्रामला <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>
</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 मधील फरक

आम्ही आधीच सांगितले आहे की XML आणि HTML दिसण्यात खूप समान आहेत. ते कसे वेगळे आहेत हे जाणून घेणे खूप महत्वाचे आहे. प्रथम, ते वेगवेगळ्या हेतूंसाठी वापरले जातात. एचटीएमएल वेब पृष्ठे मार्कअप करण्यासाठी आहे. उदाहरणार्थ, वेबसाइट तयार करताना, आपण निर्दिष्ट करण्यासाठी HTML वापरू शकता: "मेनू वरच्या उजव्या कोपर्यात असावा. त्यात अशी आणि अशी बटणे असावी". दुसऱ्या शब्दांत, HTML चे काम डेटा प्रदर्शित करणे आहे. XML हे मानवांसाठी आणि संगणकांसाठी सोयीस्कर स्वरूपात माहिती साठवण्यासाठी आणि पाठवण्यासाठी आहे. हा डेटा कसा प्रदर्शित करायचा याचे कोणतेही संकेत या फॉरमॅटमध्ये नसतात: ते तो वाचणाऱ्या प्रोग्रामच्या कोडवर अवलंबून असते. दुसरे, एक प्रमुख तांत्रिक फरक आहे. HTML टॅग पूर्वनिर्धारित आहेत. दुसऱ्या शब्दांत, HTML शीर्षलेख तयार करणे (उदाहरणार्थ, पृष्ठाच्या शीर्षस्थानी एक मोठा मथळा) फक्त <h1></h1> वापरतो टॅग्ज (<h2></h2> आणि <h3></h3> लहान शीर्षलेखांसाठी वापरले जातात). तुम्ही इतर टॅग वापरून HTML शीर्षलेख तयार करू शकत नाही. XML पूर्वनिर्धारित टॅग वापरत नाही. तुम्ही टॅग्जला तुम्हाला हवे असलेले कोणतेही नाव देऊ शकता: <header>, <title>, <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>
आता आमचा कार्यक्रम विविध घटकांमधील फरक ओळखण्यास सक्षम असेल! खेळण्यांचा उपसर्ग असलेल्या प्रत्येक गोष्टीला खेळणी मानले जाईल :) तथापि, आम्ही अद्याप पूर्ण केलेले नाही. उपसर्ग वापरण्यासाठी, आम्हाला त्या प्रत्येकाची नेमस्पेस म्हणून नोंदणी करावी लागेल. वास्तविक, "नोंदणी" हा एक सशक्त शब्द आहे :) आम्ही फक्त प्रत्येकासाठी एक अद्वितीय नाव आणणे आवश्यक आहे. हे वर्गांसारखेच आहे: वर्गाला लहान नाव ( मांजर ) आणि पूर्ण पात्र नाव आहे ज्यात सर्व पॅकेजेस समाविष्ट आहेत ( zoo.animals.Cat). URI सहसा एक अद्वितीय नेमस्पेस नाव तयार करण्यासाठी वापरला जातो. काहीवेळा हे इंटरनेट पत्ता वापरून केले जाते, जेथे या नेमस्पेसची कार्ये वर्णन केली जातात. पण तो वैध इंटरनेट पत्ता असण्याची गरज नाही. बर्‍याचदा, प्रकल्प फक्त URI सारखी स्ट्रिंग वापरतात जे नेमस्पेस पदानुक्रमाचा मागोवा घेण्यास मदत करतात. येथे एक उदाहरण आहे:

<?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 चे विकासक "वास्तविक" नेमस्पेस तयार करण्यासाठी जबाबदार आहेत . आम्हाला नवीन नावे सादर करायची असल्यास किंवा संभाव्य संघर्षांवर चर्चा करायची असल्यास, आम्हाला कुठे वळायचे ते कळेल. काहीवेळा विकासक एक अद्वितीय नेमस्पेस नाव म्हणून वास्तविक वर्णनात्मक वेब पत्ता वापरतात. उदाहरणार्थ, एखाद्या मोठ्या कंपनीसाठी हे प्रकरण असू शकते ज्याचा प्रकल्प जगभरातील लाखो लोक वापरतील. परंतु हे नेहमीच केले जात नाही: स्टॅक ओव्हरफ्लो या विषयावर चर्चा आहे. सर्वसाधारणपणे, नेमस्पेस नाव म्हणून URI वापरण्याची कोणतीही कठोर आवश्यकता नाही: तुम्ही यादृच्छिक स्ट्रिंग देखील वापरू शकता. हा पर्याय देखील कार्य करेल:

xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
ते म्हणाले, URI वापरण्याचे अनेक फायदे आहेत. आपण याबद्दल अधिक येथे वाचू शकता .

मूलभूत XML मानके

XML मानके विस्तारांचा एक संच आहे जो XML फायलींमध्ये अतिरिक्त कार्यक्षमता जोडतो. XML मध्ये बरीच मानके आहेत, परंतु आम्ही फक्त सर्वात महत्वाची मानके पाहू आणि शोधू की ते AJAX शक्य करतात, जे सर्वात प्रसिद्ध XML मानकांपैकी एक आहे. हे तुम्हाला वेब पेजची सामग्री रीलोड न करता बदलू देते! XSLT तुम्हाला XML मजकूर इतर फॉरमॅटमध्ये रूपांतरित करू देते. उदाहरणार्थ, तुम्ही XML ला HTML मध्ये रूपांतरित करण्यासाठी XSLT वापरू शकता! आम्ही म्हटल्याप्रमाणे, XML चा उद्देश डेटाचे वर्णन करणे आहे, ते प्रदर्शित करणे नाही. पण XSLT सह आम्ही ही मर्यादा पार करू शकतो! XML DOM तुम्हाला XML फाइलमधून वैयक्तिक घटक पुनर्प्राप्त, सुधारित, जोडू किंवा हटवू देते. हे कसे कार्य करते याचे एक लहान उदाहरण येथे आहे. आमच्याकडे book.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 फाईलमधून पुस्तकांची सर्व शीर्षके मिळविण्यासाठी JavaScript वापरू शकतो आणि कन्सोलवर पहिले प्रिंट करू शकतो:

<!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> साठी वैध गुणधर्मांची सूची परिभाषित केली आहे. तेथे एक नवीन घटक जोडण्याचा प्रयत्न करा आणि तुम्हाला लगेच एक त्रुटी येईल!

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