XML Processing – JSON Serialization

Öncelikle Yüksek Lisans öğrencim “Svetoslav Martinov Iliyanov“a teşekkürler. Bu bölümde Python ortamında XML Processing – JSON Serialization konularını göreceğiz.

XML diğer adıyla The Extensible Markup Language HTML ve SGML gibi bir işaretleme dilidir. Taşınabilir, Açık kaynak kodlu olması ve diğer uygulamalar tarafından okunabilir olması XML dilinin kullanım alanlarını genişletir. Veri taşımak için tasarlanmış olan bir dildir. Örnek verecek olursak bir XML dosyasını notepad’te çalıştırdığımızda aşağıdaki gibi bir formatta kod ile karşılaşırız.

XML dosyasındaki veri etiketlerini kendimiz belirleriz. HTML Taglarında olduğu gibi girilen veri <Data TAG>Data</Data TAG> şeklinde yazılır. Kullanımı kolay bir veri depolama yöntemidir. XML dosyasında depolanan veriyi API ler yardımı ile okuyabiliriz. Python da XML işlemleri yapmak için SAX ve DOM, Standart Python Kütüphanesinde bulunan ve XML dosyasından veriyi okumak için en sık kullanılan API’lerden iki tanesidir.

1. SAX ve DOM

1.1. SAX ( Simple API for XML )

SAX , XML ayrıştırma için Java Tabanlı standart bir arayüzdür. XML ayrıştırmak için kendi içerik işleyicinizi oluşturmanız gerekir. Oluşturduğunuz içerik işleyici sizin verdiğiniz belirli olan etiketleri ve belirli olan özellikleri işler. Oluşturulan içerik işleyicisinin ayrıştırma işlemini yapabilmesi için methodları bulunur. Ayrıştırıcı XML dosyasını ayrıştırma esnasında içerik işleyicisinin methodlarını çağırır. startDocument ve endDocument methodu XML dosyasının başında ve sonunda çağırılır. character(text) methodu XML dosyasının karakter verilerini geçirir.

1.1.1. SAX Parser ile ayrıştırma kod Örneği

İçerik işleyici olarak MovieHandler adında bir sınıf oluşturulur. MovieHandler sınıfı XML dosyası içinden kullanmak istediğimiz bilginin bir anlamda iskeletini oluşturmak için kullanılacak sınıftır.def __init__(self) metodu ile XML dosyasında ki sabit etiketler için alan oluşturulur.

MovieHandler sınıfının içinde element başlangıcında çağırılan startElement methodu XML dosyası içerisindeki etiketin “movie” kelimesine eşitliğini kontrol ederek çıktı almamızı sağlar.

endElement methodu XML içindeki film bilgisinin etiketlerinin eşitliğini kontrol ederek program çıktımıza yerleştirmemizi sağlar.

characters methodu ise etiketlerimizi içindeki içeriği yazdırmamızı sağlar. Ayrıştırıcı her koşulun üzerinden geçerek tüm etiketlerin içeriklerini teker teker okur ve içerikleri icerik değişkenine atar.

Son adımda parser isimli ayrıştırıcı xml kütüphane sınıfı kullanılarak yaratılır. Ayrıştırıcı 0’ a eşitlenir.Sonraki adımda MovieHandler sınıfından Handler adında nesne oluşturulur. Ayrıştırma işlemini yapabilmek için ayrıştırma metoduna xml dosyasının ismi yazılır.

1.2. Document Object Model (DOM API)

DOM API World Wide Web Consortium (W3C) tarafından tavsiye edilen XML belgelerine erişmek ve düzenlemek için kullanılan API dir. Tüm XML dosyası okunduktan sonra bellekte ağaç biçimde saklanır.

Python Standart kütüphanesinde bulunan XML ayrıştırmak için kullanılan xml.dom kütüphanesi çağırılır. Minidom ayrıştırıcısı ile XML dökümanının tümü DomTree olarak ayrıştırılır. Bütün dökümanın elementleri collection olarak toplanır.

Collection içindeki “movie” etiketine göre movies değişkenine atılır. Movies içinde for döngüsü oluşturularak movies içinde bulunan her filmin detayı yazdırılır. getElementByTagName ile elemanı seçip childNodes[0].data ile elementin içinde bulunan bilgi okunur.

1.3. SAX ve DOM API avantajlar ve dezavantajlar

SAX API ve DOM API temel anlamda bir XML dosyasını okumak için kullanılır. Fakat çalışma yapıları ve özellikleri dolayısıyla aralarından kullanım farkları oluşur. Bu farklılıklardan dolayı ikisininde avantajları ve dezavantajları ortaya çıkar.

SAX DOM
XML dökümanına rastgele ulaşımı yoktur. Anlık ve belli bir parçaya işlem yapar. XML dökümanını hafızada tuttuğu için dökümana rasgele erişimi vardır.
Karışık aramalar yapmak kolay değildir. Karışık aramalar yapmak kolaydır.
Sadece belgeyi okur. Belgeyi okuma yazma değiştirme ekleme ve silme olanağı verir.
Tarayıcı tarafından desteklenmez. Tarayıcı tarafından desteklenir.
Büyük dosyaları ayrıştırabilir. Büyük dosya ayrıştırmak için yeterli belleğe ihtiyaç vardır.
Küçük küme bir bilgiyi getirmek için kullanışlıdır. Bir veri kümesini getirmek için kullanışlıdır.
DOM a göre daha hızlı çalışır. SAX’tan daha yavaştır.

2. JSON Serialization

Json Javascipt için oluşturulmuş bir veri değişim formatıdır. Veri transferlerinde XML’den daha az yer kaplar. şu anda yazılım geliştirme olarak çok geniş kullanım alanı bulunur. Yazım ve anlam olarak anlaşılabilir bir görünümü vardır.

Serialization işlemi bir anlamda dönüştürme işlemi olarak da bilinir. Bir json bilgisini Python’un standart kütüphanesinde bulunan json modülü ile işleyebiliriz. Bilgiyi ayrıştırmak için json.loads() methodu kullanılır.

Aynı şekilde bir Python nesnesinide Jsona dönüştürmek için json.dumps() metodu kullanılır.

Python nesne tiplerinden dict, list, tuple, string, int, float, True, False ve None Json veri tipie dönüştürülebilir. Daha fazla bilgi için tıklayın.

Referanslar

  • https://www.youtube.com/watch?v=N7GbqTvrWO8&t=60s – Pyhton – Parsing XML with SAX API
  • www.slideshare.net
  • https://www.tutorialspoint.com/python/python_xml_processing.htm
  • https://www.w3schools.com/python/python_json.asp
  • https://www.youtube.com/watch?v=4iH-DRVfOD0 – Pyhton Serializing Objects