DBMS-də XQuery

XQuery, XML sənədindəki qeydləri sorğu etmək üçün istifadə olunan sorğu dilidir. RDBMS-də SQL sorğusuna bənzəyir. Sənəddəki XML məlumatlarının formatından asılı olmayan funksional dildir. Bu, XML sənədini, XML verilənlər bazasını və ya XML məlumatları ilə əlaqəli verilənlər bazasını sorğu etmək üçün istifadə edilə bilər.

XQuery aşağıdakı xüsusiyyətlərə malikdir

  • Hər hansı bir sənəddən və ya verilənlər bazasından XML məlumatlarını almaq üçün istifadə olunan funksional bir dildir.
  • Bu, RDBMS-də SQL-yə bənzəyir və XML məlumatlarını sorğulayır / keçir.
  • Qeydləri gətirmək üçün XML məlumatlarını keçmək üçün XPaths istifadə edir.
  • XQuery demək olar ki, bütün verilənlər bazası sistemi tərəfindən dəstəklənir.

Yuxarıda gördüyümüz ifadələr fərqli qovşaqlara işarə etsə də, sadəcə ifadəni yazmaq lazımi nəticəni verməyəcəkdir. Bu ifadələr sadəcə ifadələr tərəfindən göstərilən qovşaqlara işarə edəcəkdir. Düyündəki dəyərləri çəkmək üçün düzgün bir sorğu olmalıdır. Bunu XQuery edir.

Aşağıdakı ABŞ-da müxtəlif insanların ünvanlarına aid XML sənədini nəzərdən keçirin. Sənədin adı address.xml olsun. İndi bilirik ki, bu sənəd daxilində hər hansı bir qovşaq elementinə girməliyiksə, XPath ifadələrini istifadə etməliyik. Ancaq bu ifadələr bu xml sənədində yazıla bilməz. İfadəni yazmaq üçün ayrıca bir sənədimiz və ya platformamız olmalıdır. Yəni ifadələr address.xml faylının xaricində yazılmışdır. Bəs onda ifadə adres.xml sənədinə daxil olduğunu necə biləcək?

<Contact>
         <Address Name=”Rose”>
<ApartmentNum>APT 201 </ ApartmentNum>
<Street>Lakeside Village Drive </Street>
<Town> Clinton Township </Town>
<State> MI </State>
<Country> US </Country>
           </Address>
           <Address Name=”William”>
<ApartmentNum>APT 671 </ ApartmentNum>
<Street>Fraser Village Drive </Street>
<Town> Fraser Township </Town>
<State> NY </State>
<Country> US </Country>
           </Address>
           <Address Name=”Robert”>
<ApartmentNum>APT 232 </ ApartmentNum>
<Street>Seianna Drive </Street>
<Town> Danbury </Town>
<State> CT </State>
<Country> US </Country>
           </Address>
</Contact>

 XQuery funksiyaları

XQuery XPath ifadələrini istifadə etdikdə, xml sənədinin xaricində, ayrı bir sənəd və ya alətdə yazılacaqdır. Sonra ifadənin əldə etdiyi xml faylı ilə əlaqəsi olmayacaqdır. İfadəni address.xml faylına daxil olmaq üçün XQuery doc () funksiyasından istifadə edir. Bu funksiya XQuery və XPath arasında əlaqə yaradır. Yəni XPath ifadələri doc () funksiyası ilə göstərilən fayl əsasında yazılır.

doc (“file_name”)

doc (“address.xml”)

Yol ifadələri

Doc funksiyasından istifadə edildikdə, XQuery artıq keçməsi lazım olan xml sənədinə işarə edir. İndi bu xml faylı içindəki qovşaqları keçmək üçün XPath ifadələrini istifadə edə bilər. yəni;

doc (“address.xml”)/Contact/Address/Street
doc (“address.xml”)/Contact/Address[State = “NY”]

Yuxarıdakı ifadə, vəziyyəti 'NY' olan bütün Ünvanları seçəcəkdir. Yəni aşağıdakı kimi bütün detalları seçəcək:
<Address Name=”William”>
      <ApartmentNum>APT 671 </ ApartmentNum>
      <Street>Fraser Village Drive </Street>
      <Town> Fraser Township </Town>
       <State> NY </State>
      <Country> US </Country>
</Address>

Tutaq ki, bütün detalları seçmək əvəzinə yuxarıdakı siyahıdan yalnız müəyyən bir sahəni seçməliyik, 'NY' dəki hər ünvanın küçəsini deyək, sonra aşağıdakı ifadəni dəyişdirə bilərik:
doc (“address.xml”)/Contact/Address[State = “NY”]/Street

Bu ifadə, vəziyyəti 'NY' olan ünvanlardakı bütün küçələri çəkəcəkdir. XPath ifadəsini və predikatını istifadə edərək xml faylından xüsusi elementi belə əldə edirik. Ancaq XQuery-də eyni XPath ifadəsini istifadə edərək bir az fərqli bir şəkildə istifadə edilə bilər. XQuery, FLWOR - 'Let Where Order Order By Return' istifadə edərək yuxarıdakı ifadəyə sorğu toxunuşu verir. yəni;

üçün: bu bənd verilən XPath ifadəsi altındakı bütün elementləri seçir.
Edək: Maddə üçün seçilmiş elementləri $ x dəyişənində saxlayır. XQuery-də dəyişənlər '$' simvolu ilə başlayır.
harada: bu bənd hər hansı predikat / şərtləri göstərmək üçün istifadə olunur.
sifariş : Bu bənd nəticə dəstini sıralayacaqdır.
qayıtmaq: Bu bəndin qaytarılması lazım olan elementləri olacaqdır.

for $x in doc (“address.xml”)/Contact/Address
where $x/State=”NY”
return $x/Street

 Bu sorğu yuxarıda yazılmış XPath ifadəsi ilə eyni nəticəni verəcəkdir, yəni;
 <Street>Fraser Village Drive </Street>

 Başqa bir XQuery düşünək:
for $x in doc (“address.xml”)/Contact/Address
where $x/ Country =”US”
return $x/Street

 Bu sorğu ABŞ-dakı bütün küçələri çəkir. İndi nəticə olacaq
<Street>Lakeside Village Drive </Street>
<Street>Fraser Village Drive </Street>
<Street>Seianna Drive </Street>

Bu nəticə sifariş edilmir. Tutaq ki, sıralanmış nəticəni görmək istəyirik. Sonra XQuery aşağıdakı kimi dəyişəcək:
for $x in doc (“address.xml”)/Contact/Address
where $x/ Country =”US”
order by $x/Street
return $x/Street

İndi xml sənədindən nəticə əmri vermiş olacağıq.
<Street>Fraser Village Drive </Street>
<Street>Lakeside Village Drive </Street>
<Street>Seianna Drive </Street>

Yuxarıdakı xquery-də göstərilməli birdən çox şərtimiz olduğunu düşünək. Sonra yuxarıdakı if..taha .. başqa ifadədən istifadə edə bilərik. XQuery istifadə edərək hətta qovşaq / element adını dəyişə bilərik.
for $x in doc (“address.xml”)/Contact/Address
return if ($x/@Category=”Rose”)
         then <Rose_Address>{data(return $x/Street)} </Rose_Address>
         else <Others_Address>{data(return $x/Street)} </Others_Address>

Yuxarıdakı sorğu, küçə dəyərini qaytarmadan əvvəl ünvanın atributunun dəyərini yoxlayacaqdır. "Gül" olub olmadığını yoxlayır, sonra küçə adını etiketlə qaytarır, , əks halda küçəni olduğu kimi qaytarır aşağıda göstərildiyi kimi.
<Rose_Address>Lakeside Village Drive </ Rose_Address >
< Others_Address >Fraser Village Drive </ Others_Address >
< Others_Address >Seianna Drive </ Others_Address >

 XQuery-də şərtlərdə müqayisə iki üsulla edilə bilər

  • Ümumi müqayisə: Bu müqayisə metodunda =,! =, <, <=,> Və> = kimi hesab operatorları istifadə olunur. Bu operatorlar müqayisə üçün istifadə edildikdə, müqayisə ifadənin qaytardığı bir və ya daha çox dəyər üzərində aparılır. Yəni müqayisə dəyərlər dəsti üzərində aparılır və hansı dəyərlər şərti təmin edirsə, həmin elementlər qaytarılacaqdır.

Məsələn, $ x / Country = "US" olduğu halda, ABŞ olaraq ölkəsi olan bütün ünvanları yoxlayacaq və onlar üçün küçə elementini götürəcəkdir.

  • Dəyər müqayisəsi: Bu, müqayisə üçün eq, lt, gt, le, ge və ne istifadə olunan başqa bir müqayisə metodudur. Bu yuxarıdakı müqayisəyə bənzəyir, ancaq yalnız bir dəyər müqayisə edilir və nəticələr buna əsasən qaytarılır.

Məsələn, $ x / @ Kateqoriya eq ”Gül”, kateqoriya dəyərinin “Gül” ə bərabər olub olmadığını yoxlayacaq və uyğun gəldikdə, detalları qaytaracaq. Əgər uyğun gəlmirsə, dəyər üçün başqa heç bir atribut yoxlamaz.

XQuery funksiyası zəngləri də dəstəkləyir. Tutaq ki, küçə adının içərisində 'Fraser' olub olmadığını yoxlamaq istəyirik və bəli, sonra şəhərini qaytarırıq. Bu, aşağıdakı kimi substring funksiyasından istifadə etməklə edilir:

for $x in doc (“address.xml”)/Contact/Address
where $x/ substring(Street , 1, 6) =”Fraser”
return $x/Town

XQuery-nin XML sənədini keçməkdə faydalı olan bir çox başqa funksiyası var.

XQuery-nin üstünlükləri:

  • XQuery, həm cədvəlli, həm də iyerarxik məlumatların XML formatında olması şərti ilə keçmək üçün istifadə edilə bilər.
  • Bunlar qrafik və ağac kimi strukturları keçmək üçün istifadə edilə bilər.
  • XML sənədlərini çevirmək üçün istifadə edilə bilər.
  • Veb səhifələrini keçmək və yaratmaq üçün istifadə edilə bilər.
Translate »