İçeriğe geç
← Blog

DOM ve SAX Api arasındaki farklar nelerdir ?

4 Aralık 2011, 20:09 Architecture 2 dk 6k 0

Java ile XML dosyaları üzerinde çalışırken en sık kullanılan iki API SAX (Simple API for XML) ve DOM (Document Object Model)‘dur. Her ikisi de XML verilerini okumak için kullanılsa da çalışma şekilleri ve kullanım amaçları birbirinden oldukça farklıdır.

Aşağıda iki API’nin temel özelliklerini ve hangi durumlarda tercih edilmesi gerektiğini özetlemeye çalıştım.

SAX (Simple API for XML)

  • XML dosyasını baştan sona doğru sıralı (stream) olarak okur.
  • Tüm XML belgesini belleğe yüklemez.
  • Bellek tüketimi oldukça düşüktür.
  • Event (olay) tabanlı bir parser’dır.
  • Büyük XML dosyalarında oldukça başarılı performans sunar.
  • XML üzerinde doğrudan değişiklik yapılamaz.
  • Yeni düğüm (node) eklemek veya mevcut düğümleri silmek mümkün değildir.
  • XML içerisindeki yorum satırlarını (comments) koruyabilir.
  • Düşük bellek kullanımı sayesinde genellikle DOM’a göre daha hızlı çalışır.

DOM (Document Object Model)

  • XML belgesinin tamamını belleğe yükledikten sonra işlem yapar.
  • Tree (ağaç) tabanlı bir veri modeli kullanır.
  • XML belgesi üzerinde istenilen düğüme doğrudan erişilebilir.
  • İleri veya geri yönde rahatlıkla dolaşılabilir.
  • Yeni node eklemek, silmek veya güncellemek mümkündür.
  • Bellek kullanımı SAX’a göre daha yüksektir.
  • Büyük XML dosyalarında performans dezavantajı oluşturabilir.
  • XML üzerinde düzenleme yapılacak uygulamalar için oldukça uygundur.

SAX ve DOM Karşılaştırması

ÖzellikSAXDOM
Çalışma modeliEvent tabanlıTree tabanlı
Bellek kullanımıDüşükYüksek
XML’i tamamen belleğe alır mı?HayırEvet
XML üzerinde değişiklik yapılabilir mi?HayırEvet
Node ekleme / silmeDesteklemezDestekler
Büyük XML dosyalarıÇok uygundurBellek tüketebilir
PerformansGenellikle daha hızlıBir miktar daha yavaş
Kullanım kolaylığıDaha basitDaha esnek

Hangisini Tercih Etmeliyim?

XML dosyasını yalnızca okuyacak ve büyük veri kümeleri üzerinde çalışacaksanız SAX daha doğru bir seçim olacaktır.

Eğer XML üzerinde düzenleme yapmanız, yeni düğümler eklemeniz veya mevcut yapıyı değiştirmeniz gerekiyorsa DOM çok daha uygun bir çözümdür.

Kısacası;

  • Sadece okumak → SAX
  • Okumak ve düzenlemek → DOM

Bu iki API uzun yıllardır Java ekosisteminin temel XML işleme çözümleri arasında yer almaktadır ve günümüzde de pek çok projede kullanılmaya devam etmektedir.

📝 Arşiv Notu

Bu yazı ilk olarak 2011 yılında hazırlanmıştır. SAX ve DOM API’lerinin temel çalışma prensipleri günümüzde de değişmemiştir. Ancak modern Java uygulamalarında XML yerine JSON daha yaygın kullanılmakta; XML tabanlı projelerde ise JAXB, StAX ve Jackson XML gibi daha gelişmiş kütüphaneler de tercih edilmektedir.