Makale Özeti

Günümüzün iş dünyasında XML'in veri alışverişindeki gün geçtikçe artan önemi ortadır. Firmalar birbirlerine, beraber çalışabilmeleri için gerekli olan bilgileri, hızla artan bir şekilde XML olarak vermektedirler. SQL Server, daha önceki versiyonlarından bu yana XML desteğini çeşitli şekillerde sağlamaktadır. SQL Server 2005 de XML’in, bir veritipi olarak SQL Server engine'ine eklenmesi sonucu 'XML' e verilen destek oldukça artmıştır.Bu desteğin örneklerinden biri de FOR XML anahtar sözcüğüne yapılan ilavelerdir. FOR XML anahtar kelimesi sayesinde SQL Server 2005'de Sorgularımızın sonuç değerlerini XML formatında alabiliyoruz.

Makale

Günümüzün iş dünyasında XML'in veri alışverişindeki gün geçtikçe artan önemi ortadır. Firmalar birbirlerine, beraber çalışabilmeleri için gerekli olan bilgileri, hızla artan bir şekilde XML olarak vermektedirler.

SQL Server, daha önceki versiyonlarından bu yana XML desteğini çeşitli şekillerde sağlamaktadır. SQL Server 2005 de XML’in, bir veritipi olarak SQL Server engine'ine eklenmesi sonucu 'XML' e verilen destek oldukça artmıştır.Bu desteğin örneklerinden biri de FOR XML anahtar sözcüğüne yapılan ilavelerdir. FOR XML anahtar kelimesi sayesinde SQL Server 2005'de Sorgularımızın sonuç değerlerini XML formatında alabiliyoruz.

FOR XML anahtar kelimesini kullanırken seçebileceğimiz bir çok alternatif var;

Anahtar Kelime Kullanım Amacı
RAW XML çıktısının Attiribute olarak üretilmesini sağlar
RAW('İsim') Her satırın verilen isimle üretilmesini sağlar
ELEMENTS XML çıktısının Element olarak üretilmesini sağlar
XSINIL Veritabanında boş (null) olan alanların yerine xsi:nill değerinin gelmesini sağlar
ROOT('İsim') XML çıktıya kök eleman ilave edilmesini ve bu kök elemanın isimlendirilmesini sağlar.
XMLSCHEMA XML çıktı için aynı zamanda bir XML şemasının da üretilmesini sağlar.
AUTO XML çıktısında satır isimlerinin tablo isimleriyle üretilmesini sağlar. Ve ilişkisel veriyi sunmak için etkili bir alternatifdir.

FOR XML ile birlikte kullanabileceğimiz ilk alternatiflerden biri RAW anahtar kelimesi. Bu modda sorgunun dönüşü olarak oluşan XML'in elemanları sadece ‘Attirubute' lardan oluşur. Kolonlar için kullanılabilecek takma isimlerin (alias), ‘attiribute' ların isimleri olarak sonuca yansıyacağı görülecektir.

Select ContactId Numara,
            FirstName Ad,
            MiddleName IkinciAd,
            LastName Soyad,
            EMailAddress eMail
            from Person.Contact
            for xml raw

sorgusu aşağıdaki gibi bir sonuç değeri üretecektir.

Eğer ELEMENTS anahtar kelimesi sorguya eklenirse, XML üyelerinin element'lere dönüştüğü görülecektir.

use AdventureWorks
Select ContactId Numara,
            FirstName Ad,
            MiddleName IkinciAd,
            LastName Soyad,
            EMailAddress eMail
            from Person.Contact
            for xml raw, elements

sorgusu aşağıdaki gibi bir sonuç değeri üretecektir.

Fakat yine de birinci kayıtda IkinciAd alanının boş olmasından kaynaklanan bir sorun oluşucaktır. Bu sorun XML'in geçerli (valid) bir XML olmasını engelleyecektir. 'xsi:nill' elemanının XML verisindeki ilgili alana  eklenmesini sağlamak için XSINIL anahtar kelimesi sorguya eklenebilir.

use AdventureWorks
Select ContactId Numara,
            FirstName Ad,
            MiddleName IkinciAd,
            LastName Soyad,
            EMailAddress eMail
            from Person.Contact
            for xml raw, elements xsinil

sorgusu aşağıdaki sonuçu üretecektir.

Sonuç olarak oluşacak XML'in her satırı adlandırılabilir. Bu RAW anahtar kelimesinden sonra, parantez içinde belirtilecek isim ile sağlanacaktır.

Select ContactId Numara,
            FirstName Ad,
            MiddleName IkinciAd,
            LastName Soyad,
            EMailAddress eMail
            from Person.Contact
            for xml raw('Kisi'), elements xsinil

sorgusu aşağıdaki sonuçu üretecektir.

Sonuç XML' imizin geçerli (Valid) bir XML olabilmesi için bir kök (root) elemana sahip olması gerekmektedir. XML verimizin bir kök elemana sahip olabilmesi için ROOT anahtar kelimesinin kullanılması gerekmektedir . Opsiyonel olarak ROOT elemana isim de verilebilir.

Select ContactId Numara,
            FirstName Ad,
            MiddleName IkinciAd,
            LastName Soyad,
            EMailAddress eMail
            from Person.Contact
            for xml raw('Kisi'), elements xsinil, root('Kisiler')

sorgusu aşağıdaki sonuçu üretecektir.

Eğer sorgunun XML Schema sı (xsd) üretmesi istenilirse XMLSCHEMA anahtar kelimesi kullanılabilir.

Select ContactId Numara,
            FirstName Ad,
            MiddleName IkinciAd,
            LastName Soyad,
            EMailAddress eMail
            from Person.Contact
            for xml raw('Kisi'), root('Kisiler'), XMLSchema

AUTO anahtar kelimesi ile yine XML çıktı üretilir. Farklı olarak her satır tabloyla aynı isimde adlandırılı. Yine opsiyonel olarak ROOT ve ELEMENTS anahtar kelimeleri ile birlikte kullanılabilirler. Fakat önemli bir avantaja sahiptir. İliskisel veriyi (relational data) sunmak için bizlere etkil bir çözüm sunar.

SELECT Fatura.SalesOrderID FaturaId,
            Fatura.OrderDate FaturaTarihi,
            FaturaDetay.ProductId Urun,
            FaturaDetay.OrderQty Miktar,
            FaturaDetay.UnitPrice BirimFiyat
            FROM Sales.SalesOrderHeader Fatura
            Inner Join Sales.SalesOrderDetail FaturaDetay
            ON Fatura.SalesOrderId = FaturaDetay.SalesOrderId
            ORDER BY Fatura.SalesOrderId
            FOR XML AUTO, ELEMENTS, ROOT('Faturalar')

Özet olarak FOR XML anahtar kelimesi SQL Server 2005’ de XML verisinin daha anlamlı kullanıabilmesi için bize bir çok yenilikler sunmaktadır. 

İyi Çalışmalar

Bülent Sözge
bulent.sozge@netron.com.tr