Başlangıç > MESLEKTEN, NEDİR?, XML SERİSİ > XML DOM – XML SAX NEDİR?

XML DOM – XML SAX NEDİR?

xml3d.JPGGü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 yazılarımda onlara da yer vereceğim.

İlk yöntem olarak DOM’ u ele alalım. DOM ; Document Object Model 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 SIMPE API FOR XML 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. 

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/

NOT: Bu makaleme  http://www.ceturk.com/makaleoku.asp?id=246 adresinden de ulaşabilirsiniz.

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

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

%d blogcu bunu beğendi: