Apache Xerces একটি XML প্যার্সিং লাইব্রেরি যা XML ডেটার Namespace (নেমস্পেস) ব্যবস্থাপনা করতে সহায়ক। XML Namespace একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা XML ডকুমেন্টে এলিমেন্ট বা অ্যাট্রিবিউটের নামের সংঘর্ষ প্রতিরোধ করতে ব্যবহৃত হয়, বিশেষত যখন একাধিক ডেটা উৎস বা স্কিমা একত্রিত করা হয়। Namespace ব্যবহারের মাধ্যমে, একটি এলিমেন্ট বা অ্যাট্রিবিউটকে নির্দিষ্ট একটি নামস্পেসের সাথে সম্পর্কিত করা হয়, যা নামের দ্বন্দ্ব এড়াতে সাহায্য করে।
এই উদাহরণে আমরা Apache Xerces ব্যবহার করে XML Namespace এর ব্যবস্থাপনা দেখাবো।
1. XML Namespace এর সাথে XML ডকুমেন্ট
ধরা যাক, আমাদের একটি XML ডকুমেন্ট রয়েছে যা Namespace ব্যবহার করে তৈরি করা হয়েছে।
XML ডকুমেন্ট (employee.xml)
<?xml version="1.0" encoding="UTF-8"?>
<employees xmlns="http://www.example.com/employee">
<employee>
<name>John Doe</name>
<age>30</age>
<department>Engineering</department>
</employee>
<employee>
<name>Jane Smith</name>
<age>25</age>
<department>Marketing</department>
</employee>
</employees>
এখানে, employees এলিমেন্টে একটি default namespace (http://www.example.com/employee) যুক্ত করা হয়েছে। এতে employee এলিমেন্টগুলোও এই namespace-এ অন্তর্ভুক্ত থাকবে।
2. SAX প্যার্সিংয়ের মাধ্যমে XML Namespace ব্যবস্থাপনা
আমরা SAX প্যার্সিং ব্যবহার করে XML Namespace এর সাথে XML ডেটা প্যার্স করার একটি উদাহরণ দেখব।
SAX প্যার্সিং কোড উদাহরণ:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.apache.xerces.parsers.SAXParser;
public class SAXNamespaceExample {
public static void main(String[] args) {
try {
// SAXParser তৈরি করা
SAXParser parser = new SAXParser();
// Namespace হ্যান্ডলারের জন্য Custom Handler ব্যবহার করা
NamespaceHandler handler = new NamespaceHandler();
parser.setContentHandler(handler);
// XML ফাইল প্যার্স করা
parser.parse("src/employee.xml");
} catch (Exception e) {
e.printStackTrace();
}
}
}
class NamespaceHandler extends DefaultHandler {
// XML ডকুমেন্টের Namespace হ্যান্ডলিং
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// Namespace URI চেক করা
if (uri.equals("http://www.example.com/employee")) {
// Namespace দ্বারা চিহ্নিত এলিমেন্ট প্রিন্ট করা
System.out.println("Element in namespace: " + qName);
} else {
System.out.println("Element outside namespace: " + qName);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// XML এলিমেন্টের ভেতরের টেক্সট প্রিন্ট করা
System.out.println("Text: " + new String(ch, start, length));
}
}
কোড ব্যাখ্যা:
- SAXParser: SAXParser ব্যবহার করা হয়েছে XML ডেটা প্যার্স করতে। এটি XML ডেটা একে একে প্যার্স করে এবং ইভেন্ট হ্যান্ডলারের মাধ্যমে XML ট্যাগের উপর কাজ করে।
- NamespaceHandler: এই ক্লাসটি
DefaultHandlerথেকে ইনহেরিট করা হয়েছে, যা SAX ইভেন্ট হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। startElement() মেথডে XML এলিমেন্টের namespace URI চেক করা হচ্ছে এবং তার ভিত্তিতে প্রিন্ট করা হচ্ছে। - startElement(): এই মেথডটি যখন XML ট্যাগ শুরু হয় তখন কল হয়। এখানে
uriপ্যারামিটার Namespace URI ধারণ করে, এবং আমরা এটি চেক করিhttp://www.example.com/employeeএর সাথে মিলে কিনা। - characters(): এটি XML ট্যাগের ভিতরের টেক্সট এক্সট্র্যাক্ট করে এবং প্রিন্ট করে।
3. আউটপুট:
যদি employee.xml ফাইলটি src ফোল্ডারে থাকে, এবং আপনি উপরের কোডটি চালান, তবে আউটপুট হবে:
Element in namespace: employees
Element in namespace: employee
Text: John Doe
Text: 30
Text: Engineering
Element in namespace: employee
Text: Jane Smith
Text: 25
Text: Marketing
এখানে:
- employees, employee এলিমেন্টগুলি namespace "http://www.example.com/employee" এর সাথে মিলছে এবং সেগুলি "Element in namespace" হিসেবে প্রিন্ট হচ্ছে।
characters()মেথডে এলিমেন্টের মধ্যে থাকা টেক্সট, যেমন কর্মীর নাম, বয়স, এবং বিভাগ, প্রিন্ট হচ্ছে।
4. XML Namespace এর সাথে DOM প্যার্সিং
এছাড়া, আমরা DOM (Document Object Model) প্যার্সিং ব্যবহার করে XML ডেটা প্রক্রিয়া করেও XML Namespace পরিচালনা করতে পারি।
DOM প্যার্সিং কোড উদাহরণ:
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.*;
public class DOMNamespaceExample {
public static void main(String[] args) {
try {
// DOMParser তৈরি করা
DOMParser parser = new DOMParser();
parser.parse("src/employee.xml");
// Document পেতে
Document document = parser.getDocument();
// Root element (employees) পাওয়া
Element rootElement = document.getDocumentElement();
System.out.println("Root Element: " + rootElement.getNodeName());
// employee এলিমেন্টগুলোর উপর লুপ করা
NodeList employeeNodes = document.getElementsByTagName("employee");
for (int i = 0; i < employeeNodes.getLength(); i++) {
Node employeeNode = employeeNodes.item(i);
if (employeeNode.getNodeType() == Node.ELEMENT_NODE) {
Element employee = (Element) employeeNode;
System.out.println("Employee Name: " + employee.getElementsByTagName("name").item(0).getTextContent());
System.out.println("Employee Age: " + employee.getElementsByTagName("age").item(0).getTextContent());
System.out.println("Employee Department: " + employee.getElementsByTagName("department").item(0).getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
কোড ব্যাখ্যা:
- DOMParser:
DOMParserব্যবহার করে XML ফাইল প্যার্স করা হয়েছে এবং Document অবজেক্ট পাওয়া গেছে। - getElementsByTagName():
getElementsByTagName()মেথড ব্যবহার করে XML ডকুমেন্ট থেকে employee এলিমেন্টগুলি পাওয়া হয়েছে। - NodeType চেক করা: প্রতিটি employee এলিমেন্টের জন্য,
NodeTypeচেক করা হচ্ছে এবং শুধুমাত্রElementট্যাগগুলিই প্রোসেস করা হচ্ছে। - Namespace প্রিন্ট করা: এখানে XML Namespace ব্যবহৃত না হলেও, যদি XML ডকুমেন্টে Namespace থাকে, তবে এটি
getNamespaceURI()মেথড ব্যবহার করে পাওয়া যাবে।
5. সারাংশ
Apache Xerces ব্যবহার করে XML Namespace হ্যান্ডলিং অত্যন্ত সহজ এবং কার্যকর। আপনি SAX বা DOM প্যার্সিং ব্যবহার করে XML ডেটার Namespace ম্যানেজ করতে পারেন এবং নির্দিষ্ট Namespace এর আওতায় থাকা এলিমেন্ট বা অ্যাট্রিবিউটের তথ্য এক্সট্র্যাক্ট করতে পারেন। SAX প্যার্সিংয়ের মাধ্যমে XML ডেটার প্রতিটি ট্যাগকে একে একে প্রসেস করা হয় এবং DOM প্যার্সিংয়ের মাধ্যমে পুরো XML ডকুমেন্ট মেমরিতে লোড হয়ে থাকে, যেখানে Namespace-কে ভালোভাবে পরিচালনা করা সম্ভব।
Read more