CodeGym/Java Blog/এলোমেলো/জাভাতে XML
John Squirrels
লেভেল 41
San Francisco

জাভাতে XML

এলোমেলো দলে প্রকাশিত
সদস্যগণ
ওহে! আজকে আমরা XML নামে আরেকটি ডেটা ফরম্যাট উপস্থাপন করব। এটি একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়। বাস্তব জাভা অ্যাপ্লিকেশনগুলিতে কাজ করার সময়, আপনি প্রায় অবশ্যই XML-সম্পর্কিত কাজগুলির মুখোমুখি হবেন। জাভা ডেভেলপমেন্টে, এই ফরম্যাটটি প্রায় সর্বজনীনভাবে ব্যবহার করা হয় (কেন আমরা নীচে তা খুঁজে বের করব), তাই আমি সুপারিশ করছি যে আপনি এই পাঠটি অতিমাত্রায় পর্যালোচনা করবেন না, বরং সবকিছুর পুঙ্খানুপুঙ্খ ধারণা অর্জন করুন এবং অতিরিক্ত সাহিত্য/লিঙ্কগুলি অধ্যয়ন করুন :) এটি অবশ্যই সময় নষ্ট হবে না। সুতরাং, আসুন সহজ জিনিস দিয়ে শুরু করা যাক: "কি" এবং "কেন"!

জাভা XML কি?

এক্সএমএল মানে এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ। আপনি ইতিমধ্যেই একটি মার্কআপ ভাষার সাথে পরিচিত হতে পারেন — আপনি কি এইচটিএমএল সম্পর্কে শুনেছেন, যা ওয়েব পেজ তৈরি করতে ব্যবহৃত হয় :) XML কি?  - ১HTML এবং XML এর চেহারাও একই রকম:
এইচটিএমএল ১
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 1
<headline>title</headline>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
এইচটিএমএল 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 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 ব্যবহার করে ডেটা বর্ণনা করার পরে, আপনাকে কোড লিখতে হবে (উদাহরণস্বরূপ, জাভাতে) যা এই ডেটা পাঠাতে/গ্রহণ করতে/প্রসেস করতে পারে।

কিভাবে 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 ব্যবহার করতে পারেন: "মেনুটি উপরের ডানদিকে কোণায় থাকা উচিত। এতে অমুক এবং অমুক বোতাম থাকা উচিত"। অন্য কথায়, 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) একটি ইউআরআই সাধারণত একটি অনন্য নেমস্পেস নাম তৈরি করতে ব্যবহৃত হয়। কখনও কখনও এটি একটি ইন্টারনেট ঠিকানা ব্যবহার করে করা হয়, যেখানে এই নামস্থানের ফাংশনগুলি বর্ণনা করা হয়। কিন্তু এটি একটি বৈধ ইন্টারনেট ঠিকানা হতে হবে না. প্রায়শই, প্রকল্পগুলি কেবল ইউআরআই-এর মতো স্ট্রিংগুলি ব্যবহার করে যা নামস্থানের শ্রেণিবিন্যাস ট্র্যাক করতে সহায়তা করে। এখানে একটি উদাহরণ:
<?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"
এটি বলেছে, একটি URI ব্যবহার করার বিভিন্ন সুবিধা রয়েছে। আপনি এখানে এই সম্পর্কে আরো পড়তে পারেন .

মৌলিক XML মান

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>
এর দুটি বই আছে। বইগুলির একটি <title> উপাদান আছে। এখানে আমরা আমাদের 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>-এর বৈধ বৈশিষ্ট্যের একটি তালিকা সংজ্ঞায়িত করেছি। সেখানে একটি নতুন উপাদান যোগ করার চেষ্টা করুন এবং আপনি অবিলম্বে একটি ত্রুটি পাবেন!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
ত্রুটি! "এলিমেন্ট মেইনহেরো এখানে অনুমোদিত নয়" অন্যান্য অনেক এক্সএমএল মান আছে। আপনি তাদের প্রত্যেকের সাথে নিজেকে পরিচিত করতে পারেন এবং কোডের গভীরে খনন করার চেষ্টা করতে পারেন। যাইহোক, আপনার যদি XML-এ তথ্যের প্রয়োজন হয়, আপনি সেখানে প্রায় সবকিছুই খুঁজে পেতে পারেন :) এবং এর সাথে আমাদের পাঠ শেষ হয়। এটা কাজ ফিরে পেতে সময়! :) পরের বার পর্যন্ত!
মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই