![]() | |
System.Xml 2.0 İle Gelen Yenilikler II | 16.02.2007 02:18:00 |
| Kategori : XML Web Servisleri Özet : Bu makale serisinde; System.Xml 2.0 ile gelen bazı yeni özelliklere bakacağız ve sıklıkla kullandığınız bazı XML programlama işlerinizi, yeniliklerle birlikte nasıl daha kolay hale getirebileceğinizi göreceğiz. İki diziden oluşan serinin bu ikinci ve son makalesinde, daha çok XML in yazma, doğrulama, sorgulama, yükleme, kaydetme gibi işlemleri üzerinde yoğunlaşarak yeniliklerin getirdiği kolaylıklara hep birlikte bakacağız. | |
Mümkün olduğunca hızlı ve etkili XML yazmanız gerektiğinde, XmlWriter kullanabilirsiniz. XmlWriter ın mimarisi, XmlReader ınki ile çok büyük benzerlikler içerir. Tek farkı sadece XML düğümleri yazmaya odaklanmış olmasıdır.
Yukarıdaki methot da parametre olarak “101010” “167” “2” değerlerini kullandığınızda; aşağıdaki metini yaratır.
Bu basitleştirmelere ek olarak, XmlWriter, yeni WriteValue metodu ile tip dönüşümleri için destek sağlar. Bu metodun birçok overloads (aynı isimde fakat farklı imzaya sahip olan prosedürler) u vardır. Bunların herbiri farklı bir .NET tipi kabul edebilir. Aşağıdaki kodda bu yöntem kullanılarak hazırlanmıştır.
Yine XmlWriter, XPathNavigator düğümünü XmlWriter çıktısına (XmlReader düğümünü çıktıya kopyalamak için versiyon 1.1 de ne sağlanıyorsa burada aynı) kopyalamayı basitleştirmek için yeni bir WriteNode overload ına sahiptir. Fakat şunu söylemem gerekir ki, genel olarak, dokümanları okumak için yapılmaş olan iyileştirme ve geliştirmeler onları yazmak için yapılmışlar da çok daha fazla. Okuma işlemlerinde dokümanı doğrulamak istediğinizde, basit bir şekilde XmlReaderSettings nesnesini konfigüre edebilirsiniz. Aşağıdaki örnekde, XML Şema doğrulaması için yeni bir okuyucuyu nasıl konfigüre edebileceğinizi görebilirsiniz.
Burada, Create i çağırma, birbirine zincirli bir şekilde birçok XmlReader nesnesinin - bir tanesi metin akışını okumak için (XmlTextReaderImpl) diğeri de XSD doğrulaması yapmak için (XsdValidatingReader) - başlatılmasına sebep olur. Buradaki asıl güzellik ise, XmlReader nesneleri ile direkt olarak ilgilenmenize gerek olmadığıdır. Arzularsanız, yine XmlValidatingReader ı programlayabilirsiniz. Fakat tekrar belirtmem gerek, mümkün olduğunca bu factory pattern gerçekten kullanmalısınız.
Çok daha gelişmiş, sofistike navigasyon teknikleri kullanmak için XML dokümanını hafızaya yüklemek istediğinizde, System.Xml size birkaç seçenek sunar. Birincisi, System.Xml, birçok yazılım geliştiricisinin son bir kaç yıldır kullandığı XmlDocument sınıfıyla, W3C Document Object Model (DOM) API nin uygulamasını sağlar.
Doküman hafızaya alınır alınmaz, birçok DOM API sini kullanabilir ya da XPathNavigator ile doküman üzerinde gezinebilir hatta güncelleme işlemi yapabilirsiniz. DOM bugün herkes tarafından kabul edilip, geniş bir yalpazede kullanılıyor olsa da, dürüst olmak gerekirse birçok problem için ağır siklet bir seçenektir. Birçok DOM problemi, API nin XML 1.0 ın tüm syntax yapısını (bütün referansların, CDATA bölümlerinin ve daha nicelerinin hafızaya alındığını bir düşünün) kopyalamaya çalışması gerçeğinden kaynaklanır. Bazı doküman merkezli senaryolar (örneğin, bir XML editörü oluşturmak istiyorsanız) için bu kullanılabilir olsa da, veri merkezli senaryolarda (SOAP processing gibi) iş biraz karmaşıklaşır. DOM ayrıca dahili depolomayı düzenlemeyi oldukça zorlaştıran tekil düğümleri direkt olarak yazılım geliştiriciye yansıtır.
XmlDocument üzerinden XpathDocument deposunu kullanmanın getirdiği esas fayda ise özellikle sorgu ve dönüşümler gerçekleştirirken ve üzerinde gezinirken sağladığı hızdır. Emin olun sırf bu hızdan dolayı hafızadaki dokümanı güncellemek için sıklıkla XmlDocument ı kullanacaksnız.
Hafıza deposunda ister XPathDocument ya da XmlDocument kullanın, XPathNavigator doküman içinde navigasyon ve sorgulama için önerilen bir API dir. XPathNavigator, kod ve uygulamanız arasında sizi daha sonra gelecekteki iyileştirmelerinizde avantaj elde etmenize hazırlayarak; ekstra bir abstract katman sağlar.
Bununla beraber yazılım geliştiriciler için doküman içinde gezinmek için XPath ifadeleri kullanmak muhtemelen çok yaygındır. İşte XPathNavigator da birçok Select metodu ile XPath desteği de sağlar. Jenerik Select metodu, XPath ifadesini girdi olarak alır ve uygun düğümleri işlemek için XpathNodeIterator olarak döndürür. Yine aynı şekilde belirli bir eksende sınırlı olarak arama işlemi de gerçekleştirebilen birçok özel Select metodu (SelectAncestors, SelectChildren, SelectDescendants...) da vardır.
Şunu da belirtmek gerekir ki; eğer XPath ifadelerinizde boş bir isim uzayından farklı olarak XPath ifadelerinizde önek kullanmıyorsanız, varsayılan isim uzayı mapping i kabul edilir. İşte bu yüzden önceki örneğimde açık bir önek kullanmak gerekti. Yine de bu, birçok genel XPath senaryolarını kolaylaştıracak önemli bir gelişmedir.
Hafızada yer alan dokümanı değiştirmeniz ya da güncellemeniz gerektiğinde, XPathDocument değiştirilebilir olmadığı için bellek deposu olarak XmlDocument kullanmanız gerekir. Fakat, XmlDocument de güncelleme işlemleri gerçekleştirebilmek için XPathNavigator kullanabilirsiniz. System.Xml 2.0 da, öncelikli değişiklikleri desteklemesi için XPathNavigator a birkaç yeni metot eklenmiştir (versiyon 1.1 de, salt okunur bir API ydi).
Bu tipte güncellemeler için birçok metot vardır. Eğer DOM API kullanamaya alışıksanız, bu metotlar size başta yabancı gelebilir. Fakat ne olursa olsun onları kullanmanızı öneririm. Eğer kullanırsanız, kodunuz yolun aşağısında yapılan kazı çalışmasındaki değişikliklerden asla etkilenmeyecek ve aynı etkisinde kalacaktır ;)
.NET Framework 2.0 da XSLT dönüşümünü çalıştırmanız gerektiğinde, iki seçeneğe sahipsiniz. İlki, 1.1 versiyonundaki XslTransform sınıfı hala mevcut ve aynı önceden olduğu gibi çalışıyor. System.Xml 2.0, dizayn olarak XslTransform (sınıflar arasındaki geçişi kolaylaştıran) ile aynı olan ama büyük performans gelişimiyle birlikte gelen XslCompiledTransform adında yeni bir sınıf getirdi.
Bu serinin ikinci ve son makalesinde, daha çok XML in yazma, doğrulama, sorgulama, yükleme, kaydetme gibi işlemleri üzerinde yoğunlaşarak yeniliklerin getirdiği kolaylıklara hep birlikte baktık ve System.Xml 2.0 ın, sağladığı birçok yenilik ve geliştirilen birçok yeni metodun işlerimizi nasıl kolaylaştırdığını ve güvenli bir şekilde hızlandırdığını gördük. System.Xml 2.0 performansı ve verimliliği arttırıcı birçok gelişme sağlıyor. Kütüphanesi, genel XML görevleri için açık çözümler getiriyor ve gerçekten nesneleri basitleştirmeye çalışıyor. Özet olarak, iki makaleden oluşan bu seride neler üzerinden geçtiğimize birkaç öneride bulunarak değinelim.
Bir sonraki makalelerde görüşmek üzere. İyi çalışmalar... Tayfun AKCAY
| |
Yazgelistir.com | |