Makale Özeti

XML veriler ile çalışmak son dönemlerde oldukça populerleşti ve bende yazılarımda daha çok bu konuya yer vermek istiyorum. XMLin bu kadar yaygınlaşmasına karşın çoğu insanın hala anlam veremediği ve kullanımı konusunda endişeye düşüren bir statikliği var. Buda XML verilerin bir HTML sayfa gibi görünmesi. Yani bir XML veri oluşturuyorsunuz ve bir çok node dan ve alt node dan oluşuyor ancak herhangi bir filtreleme yapmak çok zor. İşte bu durumda kullanabileceğimiz yapı Microsoft tarafından 2003 Temmuz unda ortaya çıkarıldı. XQuery

Makale

XQuery Genel Özellikleri ve Dil Yapısı

XML veriler ile çalışmak son dönemlerde oldukça populerleşti ve bende yazılarımda daha çok bu konuya yer vermek istiyorum. XMLin bu kadar yaygınlaşmasına karşın çoğu insanın hala anlam veremediği ve kullanımı konusunda endişeye düşüren bir statikliği var. Buda XML verilerin bir HTML sayfa gibi görünmesi. Yani bir XML veri oluşturuyorsunuz ve bir çok node dan ve alt node dan oluşuyor ancak herhangi bir filtreleme yapmak çok zor. İşte bu durumda kullanabileceğimiz yapı Microsoft tarafından 2003 Temmuz unda ortaya çıkarıldı. XQuery

Şimdi dilin genel yapısını ve syntax ınıinceleyelim:

a. Path expressions
Belirteceğimiz XML dokuman içerisinde XPath de olduğu gibi belirli bir path i getirmemizde işimize yarar. Mesela;

document("kitap.xml")//bolumler/basliklar

ile kitap.xml dosyasındaki tüm bölümlerin başlıklarını listeliyoruz.Veya;

document(kitap.xml")//book[publisher = "Yaşar Kemal" AND @year > "1960"]

ile kitap.xml dosyasındaki yazarı "Yaşar Kemal" ve basım yılı "1960 dan büyük" tüm kitaparı listeliyoruz.

b. Element constructors
Sorgu sonucunda yeni elemanlar üretilecekse kullandığımız metodlardandır. Mesela;

<kitap>
  { $b/@year }
  { $b/baslik }
  </kitap>

ile <kitap> adında bir eleman yaratıyoruz ve içine baslik bilgisi ve tarih bilgisi yerleştiriyoruz. Bu XQuery mizin sonucu şu şekilde oluyor:

<book year="2004">
    <title>Bir Ömrün Kıyılarında</title>
</book>

c. FLWR expressions
"FLWR" için uygun görülmüş kısa okunuş "FLOWER" şeklinde. Kısaltmanın asıl açılımı ise FOR-LET-WHERE-RETURN.
 
  • FOR-clause: Genellikle XPath in sonucunu içerir. Yani hangi XML dosyasında hangi path de sorgunun çalıştırılacağını belirtir.
  • LET-clause: İşlemin yapıldığı kısımdır.
  • WHERE-clause: FOR/LET de ortaya çıkarılan değişkenlere göre bir filtreleme yapılmasına olanak tanır.
  • RETURN-clause: Sonucu ekrana bastırır
Bu konuya örnek vermek gerekirse;

<results>
{
  FOR $t IN distinct(document("fiyatlar.xml")/prices/book/title)
  LET $p := avg(document("fiyatlar.xml")/prices/book[title=$t]/price)
  WHERE (document("bib/xml")/book[title=$t]/publisher) = "Yaşar Kemal"
  RETURN
    <result>
      { $t }
      <avg>
        { $p }
      </avg>
    </result>
}
</results>


Bu XQuery bize;
Öncelikle tekil kitap başlıklarını getirir, daha sonra ortalama bir fiyat bulur ve tüm bu kriterlere uyan kayıtlar içersinden yazar ı Yaşar Kemal olan kayıtları filtreleyerek ekrana bilgilerini basar.

d. Expressions involving operators and functions
XQueryninde bir dil olduğunu söylemek yanlış olmaz, zira bu özelliğinden kaynaklı olarak diğer dillerde olduğu gibi bazı operatörleride kullanabilir ve işlem yaptırabilirsiniz.
Örneğin AVQ, SUM, COUNT, MAX, MIN, DISTINCT, EMPTY, DOCUMENT, vb

<results>
{
  LET $doc := document("fiyatlar.xml")
  FOR $t IN distinct($doc/book/title)
  LET $p := $doc/book[title = $t]/price
  RETURN
    <minprice title={ $t/text() }>
    {
      min($p)
    }
    </minprice>
}
</results>


Bu örnekte tüm kitaplar için minimum fiyat bilgisi <minprice> elemanı yaratılarak içine yazılıyor.

e. Conditional expressions
XQuery içersinde de If..Then..Else...End If gibi şart durumları oluşturabilirsiniz.

<frequent_bidder>
{
  FOR $u IN document("users.xml")//user_tuple
  WHERE
    EVERY $item IN document("items.xml")//item_tuple SATISFIES
      SOME $b IN document("bids.xml")//bid_tuple SATISFIES
        ($item/itemno = $b/itemno AND $u/userid = $b/userid)
  RETURN
    $u/name
}
</frequent_bidder>


XQuery hakkında detaylı bilgi için aşağıdaki linkleri kullanabilirsiniz:

http://www.x-hive.com/xquery/
http://www.fatdog.com
http://www.gnu.org/software/kawa/xquery/
http://db.cis.upenn.edu/Kweelt/
http://db.bell-labs.com/galax/
http://demo.openlinksw.com:8391/xquery/demo.vsp
http://www.softwareag.com/developer/quip/default.htm

Evren AYAN
www.evrenayan.net
www.maxiasp.net