SAX (Simple API for XML) এবং DOM (Document Object Model) উভয়ই XML ডেটা পার্সিংয়ের জন্য ব্যবহৃত পদ্ধতি। কিন্তু এই দুটি পদ্ধতির মধ্যে প্রধান পার্থক্য রয়েছে, বিশেষ করে তাদের কার্যপ্রণালী এবং পারফরম্যান্সের দিক থেকে। অ্যাপাচি জারসেস (Apache Xerces) লাইব্রেরি দুটি পদ্ধতি সমর্থন করে এবং XML ডেটা পার্স করার জন্য এই পদ্ধতিগুলি ব্যবহৃত হয়।
SAX (Simple API for XML)
SAX একটি ইভেন্ট-ভিত্তিক XML পার্সিং পদ্ধতি। এটি XML ডেটা পাঠের সময় বিভিন্ন ইভেন্ট তৈরি করে এবং প্রতিটি ইভেন্টের সাথে সংশ্লিষ্ট ডেটা প্রসেস করে। SAX পদ্ধতি পুরো XML ডেটা একবারে মেমরিতে লোড না করে, বরং ডেটা টুকরো টুকরো করে পাঠ করে এবং প্রতিটি টুকরোর জন্য নির্দিষ্ট ইভেন্ট তৈরি করে।
এটি স্ট্রিমিং পার্সিং পদ্ধতি হিসেবে পরিচিত, কারণ এটি XML ডেটা প্রবাহের (stream) মতো কাজ করে এবং একে একে ডেটা প্রসেস করে।
SAX এর বৈশিষ্ট্য:
- ইভেন্ট ভিত্তিক: SAX XML ফাইলের প্রতিটি অংশ পড়ার সময় ইভেন্ট তৈরি করে।
- লো মেমরি ব্যবহার: SAX পুরো XML ডকুমেন্টকে মেমরিতে লোড করে না, তাই এটি কম মেমরি ব্যবহার করে।
- ফাস্ট পার্সিং: এটি দ্রুত XML ডেটা পড়তে সহায়তা করে কারণ এটি শুধু প্রয়োজনীয় অংশগুলিই মেমরিতে নিয়ে আসে।
- রিড-ওনলি: SAX এ শুধুমাত্র XML ডেটা পড়া যায়, এটি XML ডেটা পরিবর্তন বা ম্যানিপুলেশন করতে পারে না।
SAX পদ্ধতিতে XML পার্সিং উদাহরণ:
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class SAXParserExample {
public static void main(String[] args) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) {
if (qName.equalsIgnoreCase("person")) {
System.out.println("Person found");
}
}
@Override
public void characters(char[] ch, int start, int length) {
System.out.println(new String(ch, start, length));
}
};
parser.parse("example.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
DOM (Document Object Model)
DOM একটি ট্রি-ভিত্তিক XML পার্সিং পদ্ধতি। এটি পুরো XML ডেটা একটি গাছের (tree) আকারে মেমরিতে লোড করে এবং এই গাছের প্রতিটি নোড (node) বা উপাদান (element) অ্যাক্সেস করে। DOM পদ্ধতিতে XML ডেটা পুরোপুরি মেমরিতে থাকে এবং এটি ডেটার উপর ম্যানিপুলেশন ও পরিবর্তন করতে সক্ষম।
এটি ইন-মেমরি পার্সিং পদ্ধতি, যেখানে পুরো XML ডকুমেন্টকে একটি কাঠামোগত মডেলে (document tree) রূপান্তর করা হয় এবং মেমরিতে রাখা হয়।
DOM এর বৈশিষ্ট্য:
- ট্রি ভিত্তিক: DOM XML ডেটাকে একটি ট্রি স্ট্রাকচারে রূপান্তর করে এবং সেই স্ট্রাকচার মেমরিতে থাকে।
- মেমরি ব্যবহারে বেশি: এটি পুরো XML ডকুমেন্ট মেমরিতে লোড করে, তাই বেশি মেমরি প্রয়োজন হয়।
- ম্যানিপুলেশন: DOM XML ডেটার উপাদানগুলোকে পরিবর্তন বা ম্যানিপুলেট করতে পারে।
- ধীর পার্সিং: DOM XML ডেটাকে পুরোপুরি মেমরিতে লোড করতে কিছুটা সময় নেয়, তাই বড় XML ডেটা সেটের জন্য এটি ধীর হতে পারে।
DOM পদ্ধতিতে XML পার্সিং উদাহরণ:
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DOMParserExample {
public static void main(String[] args) {
try {
File inputFile = new File("example.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(inputFile);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("person");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Name: " + element.getElementsByTagName("name").item(0).getTextContent());
System.out.println("Age: " + element.getElementsByTagName("age").item(0).getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
SAX এবং DOM এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | SAX | DOM |
|---|---|---|
| পার্সিং স্টাইল | ইভেন্ট-ভিত্তিক (Event-based) | ট্রি-ভিত্তিক (Tree-based) |
| মেমরি ব্যবহার | কম মেমরি ব্যবহার (Low memory usage) | উচ্চ মেমরি ব্যবহার (High memory usage) |
| পার্সিং স্পিড | দ্রুত (Faster) | ধীর (Slower) |
| XML ডেটা ম্যানিপুলেশন | শুধুমাত্র পড়া যায় (Read-only) | ম্যানিপুলেশন এবং পরিবর্তন করা যায় (Can manipulate and modify) |
| উপযুক্ত ডেটার আকার | ছোট বা বড় XML ফাইল (Smaller or larger XML files) | ছোট থেকে বড় XML ফাইল (Small to large XML files) |
| নির্দেশনা | শুধুমাত্র ইভেন্ট প্রকাশিত হয়, এগুলি প্রোগ্রামে পাঠানো হয় | সম্পূর্ণ XML গাছ একবারে লোড হয়ে থাকে |
সারাংশ
SAX এবং DOM হল দুটি XML পার্সিং পদ্ধতি, যেখানে SAX একটি ইভেন্ট-ভিত্তিক পদ্ধতি যা XML ডেটা দ্রুত পাঠ করে এবং কম মেমরি ব্যবহার করে, তবে এটি শুধুমাত্র রিড-ওনলি (read-only) মডে কাজ করে। অপরদিকে, DOM একটি ট্রি-ভিত্তিক পদ্ধতি যা পুরো XML ডেটাকে মেমরিতে লোড করে এবং এটি XML ডেটার উপাদানগুলি ম্যানিপুলেট ও পরিবর্তন করতে সক্ষম, তবে এটি বেশি মেমরি ব্যবহার করে এবং কিছুটা ধীর গতির হতে পারে। আপনার প্রয়োজনে, অর্থাৎ ডেটার আকার, মেমরি ব্যবহারের সীমাবদ্ধতা এবং পারফরম্যান্সের প্রয়োজনীয়তার উপর ভিত্তি করে আপনি SAX অথবা DOM নির্বাচন করতে পারেন।
Read more