DOM
Document Object Model atau DOM
adalah Platform atau anatarmuka bahasa netral yang menyediakan model standar
bagaimana objek dalam suatu objek XML diletakkan bersama-sama dan interface
standar untuk mengakses dan memanipulasi objek-objek dan berhubungan dengan
mereka.
DOM adalah antarmuka yang
mengekspos dokumen XML sebagai struktur pohon yang terdiri dari node. DOM
memungkinkan kita untuk menavigasi pohon dan menambah, mengubah dan menghapus
setiap elemen. Standar pemograman antarmuka DOM didefinisikan oleh World Wide
Web Consortium(W3C).
Untuk dapat menggunakan
fitur-fitur XML, DOM menggunakan parser DOM-enabled, misalnya JAXP. Parser
DOMenabled membaca dokumen XML, menelusurinya, meyakinkan bahwa ia valid.
Kemudian, ia membuat representasi memori dalam struktur data tree. Struktur
tree terbuat dari node-node. Anda dapat menggunakan object-object DOM yang
disediakan parser DOM-enabled untuk memanipulasi node-node ini.
DOM juga mendefinisikan sejumlah subinterfaces ke interface Node:
• Element: Represents an XML element in the source
document.
• Attr: Represents an attribute of an XML element.
• Text: The content of an element. This means that
an element with text
contains text node children; the text
of the element is not a
property of the
element itself.
• Document: Represents the entire XML document. Exactly
one Document
object exists for each XML document you
parse. Given a Document
object, you can find the root of the
DOM tree; from the root, you can use DOM functions to read and manipulate the
tree.
Method
yang umum digunakan di DOM
Ketika kita bekerja dengan DOM, kita
akan sering menggunakan metode berikut:
• Document.getDocumentElement(): Returns
the root of the DOM
tree. (This function is a method of the Document interface; it isn't defined
for other subtypes of Node. )
• Node.getFirstChild() and Node.getLastChild(): Return the first
or last child of a given Node.
• Node.getNextSibling() and Node.getPreviousSibling():
Return the next or previous sibling of a
given Node.
• Element.getAttribute(String attrName): For a given Element,
return the value of the attribute named attrName. If you want the value
of the "id" attribute,
use Element.getAttribute("id"). If that
attribute doesn't exist, the method returns
an empty string ( "" ).
contoh
membuat xml dengan DOM menggunakan JAPX:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
class CreateDomXml
{
public static void main(String[] args)
{
try{
//Create instance of DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//Get the DocumentBuilder
DocumentBuilder docBuilder = factory.newDocumentBuilder();
//Create blank DOM Document
Document doc = docBuilder.newDocument();
//create the root element
Element root = doc.createElement("bukudetails");
//all it to the xml tree
doc.appendChild(root);
//create a comment
Comment comment = doc.createComment("This is comment");
//add in the root element
root.appendChild(comment);
//create child element
Element childElement = doc.createElement("buku");
//Add the atribute to the child
childElement.setAttribute("ID_BUKU","CM107");
root.appendChild(childElement);
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource(doc);
Result dest = new StreamResult(System.out);
aTransformer.transform(src, dest);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
class CreateDomXml
{
public static void main(String[] args)
{
try{
//Create instance of DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//Get the DocumentBuilder
DocumentBuilder docBuilder = factory.newDocumentBuilder();
//Create blank DOM Document
Document doc = docBuilder.newDocument();
//create the root element
Element root = doc.createElement("bukudetails");
//all it to the xml tree
doc.appendChild(root);
//create a comment
Comment comment = doc.createComment("This is comment");
//add in the root element
root.appendChild(comment);
//create child element
Element childElement = doc.createElement("buku");
//Add the atribute to the child
childElement.setAttribute("ID_BUKU","CM107");
root.appendChild(childElement);
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource(doc);
Result dest = new StreamResult(System.out);
aTransformer.transform(src, dest);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
XML yang Terbentuk adalah
<?xml version="1.0"
encoding="UTF-8" ?>
<bukudetails>
<!-- This is comment-->
<buku id_buku="CM107" />
</bukudetails>
<bukudetails>
<!-- This is comment-->
<buku id_buku="CM107" />
</bukudetails>
SAX
Simple API for XML (SAX) dibuat oleh David
Megginson dan bersifat open source. Versi awal SAX dibuat untuk Java, tetapi
versi SAX2, juga mendukung VB 6.0 dan VB.NET. SAX API digunakan untuk memproses
dokumen XML.
Software
yang menggunakan SAX untuk memproses dokumen XML disebut SAX parser. SAX parser
tidak mengambil seluruh dokumen XML dalam memori, tetapi hanya yang dibutuhkan
saja. SAX parser adalah parser event-driven yang membaca data di dokumen XML
berurutan dari awal hingga akhir. SAX API cocok untuk memproses dokumen XML
yang besar karena menggunakan sedikit memori.
SAX menggunakan class dan interface SAX API
untuk memproses dokumen XML. SAX memiliki beragam event listener yang
memberitahu parser SAX tentang beragam kejadian di dokumen, apakah “start
document”, “end document”, “start tag”, “end tag”, atau lainnya. SAX parser
memberitahu aplikasi SAX setiap kali ia mendapatkan event tersebut.
Pemberitahuan dikerjakan dengan method callback: startDocument(), characters(),
endDocument(). Method-method ini didefinisikan oleh handler interfaces, semisal
ContentHandler, DTDHandler, ErrorHandler, dan EntityResolver
Handler
interface mendefinisikan method untuk setiap event. Lakukan implements handler
interfaces dalam aplikasi SAX dan override method callback untuk menerima
pemberitahuan event penelusuran. Sebagai contoh, parser SAX memanggil method
startElement() ketika ia menemukan <, memanggil endElement() ketika
menemukan </. Apa yang akan dilakukan ketika menemukan <, perlu
dituliskan dalam method startElement().
SAX API
SAX API
terdiri dari beragam paket yang digunakan untuk menelusuri dokumen XML. Paket
org.xml.sax berisi interface dasar SAX API. Handler interface inti dari paket
ini adalah:
-
ContentHandler
-
ErrorHandler
- DTDHandler
- EntityResolver
Contoh cara menampilkan file XML
dengan menggunakan java sax
Employee-Detail.xml
<?xml version = "1.0" ?>
<Employee-Detail>
<Employee>
<Emp_Id> E-001 </Emp_Id>
<Emp_Name> Vinod </Emp_Name>
<Emp_E-mail> Vinod1@yahoo.com </Emp_E-mail>
</Employee>
<Employee>
<Emp_Id> E-002 </Emp_Id>
<Emp_Name> Amit </Emp_Name>
<Emp_E-mail> Amit2@yahoo.com </Emp_E-mail>
</Employee>
<Employee>
<Emp_Id> E-003 </Emp_Id>
<Emp_Name> Deepak </Emp_Name>
<Emp_E-mail> Deepak3@yahoo.com </Emp_E-mail>
</Employee>
</Employee-Detail>
<Employee-Detail>
<Employee>
<Emp_Id> E-001 </Emp_Id>
<Emp_Name> Vinod </Emp_Name>
<Emp_E-mail> Vinod1@yahoo.com </Emp_E-mail>
</Employee>
<Employee>
<Emp_Id> E-002 </Emp_Id>
<Emp_Name> Amit </Emp_Name>
<Emp_E-mail> Amit2@yahoo.com </Emp_E-mail>
</Employee>
<Employee>
<Emp_Id> E-003 </Emp_Id>
<Emp_Name> Deepak </Emp_Name>
<Emp_E-mail> Deepak3@yahoo.com </Emp_E-mail>
</Employee>
</Employee-Detail>
EmployeeDetails.java
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
public class EmployeeDetails{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter XML file name:");
String xmlFile = bf.readLine();
EmployeeDetails detail = new EmployeeDetails(xmlFile);
}
public EmployeeDetails(String str){
try{
File file = new File(str);
if (file.exists()){
SAXParserFactory parserFact = SAXParserFactory.newInstance();
SAXParser parser = parserFact.newSAXParser();
System.out.println("XML Data: ");
DefaultHandler dHandler = new DefaultHandler(){
boolean id;
boolean name;
boolean mail;
public void startElement(String uri, String localName,
String element_name, Attributes attributes)throws SAXException{
if (element_name.equals("Emp_Id")){
id = true;
}
if (element_name.equals("Emp_Name")){
name = true;
}
if (element_name.equals("Emp_E-mail")){
mail = true;
}
}
public void characters(char[] ch, int start, int len) throws SAXException{
String str = new String (ch, start, len);
if (id){
System.out.println("Emp_Id: "+str);
id = false;
}
if (name){
System.out.println("Name: "+str);
name = false;
}
if (mail){
System.out.println("E-mail: "+str);
mail = false;
}
}
};
parser.parse(str, dHandler);
}
else{
System.out.println("File not found!");
}
}
catch (Exception e){
System.out.println("XML File hasn't any elements");
e.printStackTrace();
}
}
}
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
public class EmployeeDetails{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter XML file name:");
String xmlFile = bf.readLine();
EmployeeDetails detail = new EmployeeDetails(xmlFile);
}
public EmployeeDetails(String str){
try{
File file = new File(str);
if (file.exists()){
SAXParserFactory parserFact = SAXParserFactory.newInstance();
SAXParser parser = parserFact.newSAXParser();
System.out.println("XML Data: ");
DefaultHandler dHandler = new DefaultHandler(){
boolean id;
boolean name;
boolean mail;
public void startElement(String uri, String localName,
String element_name, Attributes attributes)throws SAXException{
if (element_name.equals("Emp_Id")){
id = true;
}
if (element_name.equals("Emp_Name")){
name = true;
}
if (element_name.equals("Emp_E-mail")){
mail = true;
}
}
public void characters(char[] ch, int start, int len) throws SAXException{
String str = new String (ch, start, len);
if (id){
System.out.println("Emp_Id: "+str);
id = false;
}
if (name){
System.out.println("Name: "+str);
name = false;
}
if (mail){
System.out.println("E-mail: "+str);
mail = false;
}
}
};
parser.parse(str, dHandler);
}
else{
System.out.println("File not found!");
}
}
catch (Exception e){
System.out.println("XML File hasn't any elements");
e.printStackTrace();
}
}
}
Perbandingan antara DOM dan SAX
SAX berbeda dengan DOM dalam hal : Kriteria
|
DOM
|
SAX
|
Cara
penelusuran
|
DOM
membaca keseluruhan
|
SAX
membaca satu per satu komponen XML
|
Organisasi
informasi
|
DOM
menggunakan struktur tree
|
SAX
bukan tree
|
Akses
informasi
|
dalam DOM
dilakukan dengan penelusuran pohon
|
dalam
SAX sekuensial
|
Kecepatan
|
DOM
me-load semua data XML. Jika dokumen besar, akan lambat.
|
untuk
browse SAX lebih bagus
|
kompleksitas
pengembangan
|
Sudah
disedikana object berikut property dan methodnya
|
Di
SAX harus meng-override method terkait.
|
penggunaan
memori
|
DOM
butuh memori untuk menyimpan tree
|
SAX
tidak
|
kemampuan
navigasi
|
Setelah
tersimpan di memori, tree DOM dapat diakses bebas
|
dalam
SAX jika ingin mengulang, selalu dari awal lagi
|
kemudahan
transformasi
|
dalam
DOM isi dokumen XML dapat diubah
|
dalam
SAX dokumen XML hanya untuk dibaca
|
DAFTAR
PUSTAKA
Kusmayadi Hendra, Eko Darwiyanto, “XML dan WEB SERVICE”, Politeknik
Telkom,2009.
Doug Tidwell, “XML
Programing in Java Technology, Part 1”, IBM, 13 Januari 2004.