XML DOM – XML SAX

Günümüzde XML’ in popülaritesi artık tartışılmaz. Elbette ki bu
popülerliğin içi boş değil. XML gerçekten hayatımıza büyük kolaylıklar
getirdi. Keyword ezberleme gibi bir derdimiz kalmadı. Elektronik
ortamda belge değişimi (EDI: ELECTRONIC DOCUMENT INTERCHANGE ) artık
sorun olmaktan çıktı. Verilerimizi sakladığımız belgeler üzerinde DTD
ve SCHEMA gibi kavramlarla denetim şansımız oldu. Sunum ile verinin
ayrılmasında getirdiği kolaylıkların üstüne bir de hızı eklenince artık
uygulamaların vazgeçilmez bir parçası oldu XML.

Peki sizler XML’ i projelerinizde nasıl kullanacaksınız yada XML
belgelerinizde etiketler arasına yerleştirdiğiniz verilere nasıl
erişeceksiniz. Bu işlem için size bir PARSER (AYRIŞTIRICI) gerekecek.
Ayrıştırıcıların da pek çok çeşidi mevcut ve bu yazıda bunlardan ikisi
ele alınacak. Ayrıştırıcıların arasına her gün bir yenisi katılıyor ve
fırsat oldukça diğer makalelerde onlara da yer vereceğim.

İlk yöntem olarak DOM’ u ele alalım. DOM ; D ocument O bject M odel
kelimelerinin baş harflerinden oluşmaktadır. DOM ile bir XML belgesinin
içeriğini, stilini ve yapısını görüp değiştirebiliriz . DOM
ayrıştırıcısı kullanıldığı zaman XML belgesi kök elemanından başlanarak
hafızada bir ağaca yerleştirilir. Bu ayrıştırıcı XML belgesini
öncelikle baştan sona okur ve tüm bileşenler mantıksal düğümler modeli
olarak hafızadaki yerini alır. Bu aşamadan sonra içerdiği metotlar ile
bu düğümler arasında ileri ve geri hareket edebilirsiniz. Yine aynı
şekilde DOM metotlarını kullanarak bu düğümlerdeki değerleri
değiştirebilirsiniz. DOM’ da en önemli noktalardan biri de etiklerde
yer alan özellikler bir alt düğüm olarak ağaca yerleştirilmezler ve o
düğümün özelliği olarak ele alınırlar. DOM tarafından kullanılan düğüm
türleri şunlardır:

* XMLDOMDocument
* XMLDOMNode
* XMLDOMNodeList
* XMLDOMElement
* XMLDOMAttribute

XML belgenizi bir veritabanı gibi düşünürseniz DOM ile SELECT,
INSERT, DELETE ve UPDATE işlemlerini gerçekleştirebilirsiniz. Xerces-J
2. ve Crimson JAVA dünyasında en çok bilinen DOM
ayrıştırıcılarındandır. Ayrıca
http://www.cafeconleche.org/books/xmljava/chapters/ch09s05.html bu adreste farklı DOM ayrıştırıcılarının karşılaştırmasını bulabilirsiniz.

SAX ise S IMPLE A PI FOR X ML
kelimelerinin baş harflerinden oluşmaktadır. DOM ayrıştırıcısı W3C
tarafından onaylanmış olmasına rağmen SAX David Magginson tarafından
yürütülen açık kaynak kodlu bir projenin ürünüdür. DOM’ dan bahsederken
tüm XML belgesinin hafızaya bir ağaç yapısında yerleştirildiğinden
bahsettik. Bu da beraberinde fazla sistem kaynağı kullanılması
problemini getirmektedir. İşte SAX ayrıştırıcılar bu soruna çözüm
üretmek için ortaya çıkmışlardır. Özellikle internet tarayıcılarına
ayrılan sistem kaynaklarının sınırlı olması nedeniyle web
uygulamalarında sıkça kullanılmışlardır.

SAX ayrıştırıcılar çalışma esnasında karşılaştıkları her etiket
tanımı için bir olay (event) oluştururlar. Bu olaylar anında uygulamaya
bildirilirler ve uygulamadaki olay yöneticileri (event-handler) gereken
işlemleri yaparlar. Burada her olaya karşılık bir olay yöneticinin
tanımlanması tamamen uygulama geliştiriciye aittir. Yine XML
doğrulaması (validation) uygulama tarafından yapılır. Sorumluluğun
uygulamada olması nedeniyle SAX ayrıştırıcısının belgenin tamamını
hafızaya yüklemesi gerekmez. Uygulama içerisinden SAX yarıştırıcısı
çağırıldığında, ayrıştırıcı da kendisine vermiş olduğumuz metotları
çağıracaktır. Buna CALLBACK mekanizması da denmektedir.

Yukarıda bahsettiğimiz noktaları bir karşılaştırma tablosuna taşıyacak olursak:

DOM SAX

DOM tüm XML belgesini okur ve tamamını hafızaya bir ağaç yapısı olarak yerleştirir.

 

SAX belgeyi okur ve okuduğu kısım yada o elemente ait tanımladığımız metodu çağırır

DOM tüm belgeyi hafızaya yüklediğinden rastgele erişime (Random Access) izin verir.

(Ör: XPATH kullanarak)

SAX ise ancak sıralı erişime (Sequential Access ) izin verir.

 

DOM tüm belgeyi hafızaya yerleştirdiğinden yavaştır ve büyük XML belgeleri için tercih edilmez.

 

SAX
daha hızlıdır ve daha az hafızaya ihtiyaç duymaktadır. Bu nedenlerden
ötürü büyük XML belgelerinde tercih edilmektedir ve WEB uygulamalarında
daha popülerdir

Bazı DOM versiyonlarında hafızaya yerleştirilen XML belgesini değiştirmek için metotlar vardır. (UPDATE)

Bu tarz metotlar SAX için bulunmamaktadır

DOM ve SAX ayrıştırıcıları için söyleyebileceklerim bunlar. Yazının
başında da belirttiğim gibi ayrıştırıcıların aralarına her geçen gün
bir yenisi ekleniyor. Özellikle JDK 1.6 versiyonu ile gündeme STAX gibi
Stream-Based olarak tanımlanan ayrıştırıcılar geldi. STAX daha çok SAX
ayrıştırıcılara alternatif olacaktır. Çalışma mantığı hemen hemen aynı
olmasına rağmen STAX ile XML belgesi üzerinde değişiklik yapma şansınız
var. Fırsat olursa bu yeni ayrıştırıcı modeliyle ilgili de bir makale
hazırlayacağım.
Aşağıdaki kaynakları kullanarak bu ayrıştırıcılar hakkında daha detaylı
bilgi alabilirsiniz. Sabırla okuduğunuz için teşekkür ediyorum.
Yeni bir makalede görüşmek dileğiyle…

DOM Parsers for Java

http://www.cafeconleche.org/books/xmljava/chapters/ch09s05.html

Parsing the XML DOM

http://www.w3schools.com/dom/dom_parser.asp

DOM Parser:

http://www.cafeconleche.org/books/xmljava/chapters/ch09s06.html

Using the SAX Parser

http://www.javacommerce.com/displaypage.jsp?name=saxparser1.sql&id=18232

SAX Samples

http://xerces.apache.org/xerces2-j/samples-sax.html

 

Simple API for XML

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPSAX.html

 

SAX Project

: http://www.saxproject.org/

Kaynak

Bu yazı Programlama içinde yayınlandı. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s