XML DOM – XML SAX
Merhabalar;
Bu benim CETUK’ teki ilk makalem. Umuyorum ki devamı gelecektir.
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 ; 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 Processing XML with Java Kitabı’nda dafarklı DOM ayrıştırıcılarının karşılaştırmasını bulabilirsiniz.
SAX ise SIMPLE 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. 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/ |
İBRAHİM DEMİR –BİLGİSAYAR MÜH.
( ibrahimdemire@yahoo.com )
http://ibrahimdemir.wordpress.com
http://tech.groups.yahoo.com/group/jdbc_tr/












wolfg
makaleniz icin teşekkürler
devamını yazabileceğinizi söylemişsiniz,umarım yakın bir zamanda yazarsiniz…