XQuery - Hızlı Kılavuz

XQuery nedir

XQuery, XML biçiminde depolanan bilgileri almak için kullanılan işlevsel bir dildir. XQuery, XML belgelerinde, XML formatlarında veri içeren ilişkisel veritabanlarında veya XML Veritabanlarında kullanılabilir. XQuery 3.0, 8 Nisan 2014 tarihli bir W3C önerisidir.

Resmi belgelerinde verilen XQuery tanımı aşağıdaki gibidir -

XQuery, belgeleri, veritabanlarını, Web sayfalarını ve hemen hemen her şeyi birleştirmek için standart bir dildir. Çok yaygın olarak uygulanmaktadır. Güçlü ve öğrenmesi kolay. XQuery, tescilli ara yazılım dillerinin ve Web Uygulaması geliştirme dillerinin yerini alıyor. XQuery, karmaşık Java veya C ++ programlarını birkaç satır kodla değiştiriyor. XQuery, diğer birçok alternatife göre daha basit ve bakımı daha kolaydır.

Özellikler

  • Functional Language - XQuery, XML tabanlı verileri almak / sorgulamak için kullanılan bir dildir.

  • Analogous to SQL - XQuery, veritabanları için SQL'in ne olduğu XML'e yöneliktir.

  • XPath based - XQuery, XML belgelerinde gezinmek için XPath ifadelerini kullanır.

  • Universally accepted - XQuery, tüm büyük veritabanları tarafından desteklenir.

  • W3C Standard - XQuery bir W3C standardıdır.

XQuery'nin Faydaları

  • XQuery kullanılarak hem hiyerarşik hem de tablo verileri alınabilir.

  • XQuery, ağacı ve grafik yapıları sorgulamak için kullanılabilir.

  • XQuery, web sayfalarını sorgulamak için doğrudan kullanılabilir.

  • XQuery, web sayfaları oluşturmak için doğrudan kullanılabilir.

  • XQuery, xml belgelerini dönüştürmek için kullanılabilir.

  • XQuery, XML tabanlı veritabanları ve nesne tabanlı veritabanları için idealdir. Nesne veritabanları, tamamen tablo veritabanlarından çok daha esnek ve güçlüdür.

Bu bölüm, yerel bir geliştirme ortamında XQuery kitaplığının nasıl kurulacağını açıklar.

Yaygın olarak kullanılan açık kaynaklı bağımsız bir XQuery işlemci Saxon Home Edition (Saxon-HE) kullanıyoruz. Bu işlemci XSLT 2.0, XQuery 3.0 ve XPath 3.0'ı destekler ve performans için son derece optimize edilmiştir. Saxon XQuery işlemcisi, herhangi bir XML veritabanı olmadan kullanılabilir. Örneklerimizde veritabanımız olarak basit bir XML belgesi kullanacağız.

Saxon XQuery işlemcisini kullanmak için, uygulamanızın sınıf yolunda saxon9he.jar, saxon9-test.jar, saxon9-unpack, saxon9-xqj.jar olmalıdır. Bu jar dosyaları, indirme dosyasında mevcutturSaxonHE9-6-0-1J.zipSaxonHE9-6-0-1J.zip dosyasını indirin .

Misal

Java tabanlı Saxon XQuery işlemcisini, XQuery ifadesini örnek XML belgemize, yani books.xml'ye karşı içeren bir dosya olan books.xqy'yi test etmek için kullanacağız.

Bu örnekte, fiyatı 30'dan fazla olan kitapların başlık öğelerini almak için bir sorgunun nasıl yazılacağını ve işleneceğini göreceğiz.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>40.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

books.xqy

for $x in doc("books.xml")/books/book where $x/price>30
return $x/title

XQueryTester.java

package com.tutorialspoint.xquery;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQDataSource;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQResultSequence;

import com.saxonica.xqj.SaxonXQDataSource;

public class XQueryTester {
   public static void main(String[] args){
      try {
         execute();
      }
      
      catch (FileNotFoundException e) {
         e.printStackTrace();
      }
      
      catch (XQException e) {
         e.printStackTrace();
      }
   }

   private static void execute() throws FileNotFoundException, XQException{
      InputStream inputStream = new FileInputStream(new File("books.xqy"));
      XQDataSource ds = new SaxonXQDataSource();
      XQConnection conn = ds.getConnection();
      XQPreparedExpression exp = conn.prepareExpression(inputStream);
      XQResultSequence result = exp.executeQuery();
      
      while (result.next()) {
         System.out.println(result.getItemAsString(null));
      }
   }	
}

XQuery'yi XML'e Karşı Yürütme Adımları

  • Step 1 - XQueryTester.java dosyasını herhangi bir konuma kopyalayın, diyelim ki, E: > java

  • Step 2 - books.xml dosyasını aynı konuma kopyalayın, E: > java

  • Step 3 - books.xqy dosyasını aynı konuma kopyalayın, E: > java

  • Step 4- Konsol kullanarak XQueryTester.java'yı derleyin. Makinenizde JDK 1.5 veya sonraki bir sürümünün kurulu olduğundan ve sınıf yollarının yapılandırıldığından emin olun. JAVA'nın nasıl kullanılacağına ilişkin ayrıntılar için, JAVA Eğitimimize bakın

E:\java\javac XQueryTester.java
  • Step 5 - XQueryTester'ı çalıştırın

E:\java\java XQueryTester

Çıktı

Aşağıdaki sonucu alacaksınız -

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

Örnek Anlamak

  • books.xml örnek verileri temsil eder.

  • books.xqy, books.xml üzerinde yürütülecek XQuery ifadesini temsil eder. İfadeyi bir sonraki bölümde ayrıntılı olarak anlayacağız.

  • Java tabanlı bir XQuery yürütme programı olan XQueryTester, books.xqy dosyasını okur, XQuery ifade işlemcisine iletir ve ifadeyi yürütür. Ardından sonuç yazdırılır.

Misal

Aşağıda, çeşitli kitapların bir kitabevinin kayıtlarını içeren örnek bir XML belgesi verilmiştir.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

Aşağıda, yukarıdaki XML belgesinde yürütülecek sorgu ifadesini içeren örnek bir Xquery belgesi verilmiştir. Amaç, fiyatın 30'dan fazla olduğu XML düğümlerinin başlık öğelerini elde etmektir.

books.xqy

for $x in doc("books.xml")/books/book
where $x/price>30 return $x/title

Sonuç

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

Sonucu Doğrula

Sonucu doğrulamak için, books.xqy'nin içeriğini ( Ortam Kurulum bölümünde verilmiştir) yukarıdaki XQuery ifadesiyle değiştirin ve XQueryTester java programını çalıştırın.

XQuery İfadeleri

Yukarıdaki XQuery ifadesinin her bir parçasını anlayalım.

Fonksiyonların kullanımı

doc("books.xml")

doc (), XML kaynağını bulmak için kullanılan XQuery işlevlerinden biridir. Burada "books.xml" yi geçtik. Göreli yol göz önüne alındığında, books.xml, books.xqy'nin bulunduğu aynı yolda yer almalıdır.

XPath ifadelerinin kullanımı

doc("books.xml")/books/book

XQuery, üzerinde aramanın yapılacağı XML'nin gerekli bölümünü bulmak için yoğun bir şekilde XPath ifadeleri kullanır. Burada, kitaplar düğümü altında bulunan tüm kitap düğümlerini seçtik.

Nesneleri yineleyin

for $x in doc("books.xml")/books/book

XQuery, xml verilerini nesneler olarak değerlendirir. Yukarıdaki örnekte, $ x seçili düğümü temsil ederken, for döngüsü düğüm koleksiyonunu yineler.

Koşulu uygulayın

where $x/price>30

$ X seçilen düğümü temsil ettiğinden, "/" gerekli elemanın değerini almak için kullanılır; Arama sonuçlarına bir koşul koymak için "nerede" cümlesi kullanılır.

Sonucu döndür

return $x/title

$ X seçilen düğümü temsil ettiğinden, "/" gerekli öğe, fiyat, başlık değerini almak için kullanılır; "return" yan tümcesi, öğeleri arama sonuçlarından döndürmek için kullanılır.

FLWOR, "For, Let, Where, Order by, Return" anlamına gelen bir kısaltmadır. Aşağıdaki liste, bir FLWOR ifadesinde neyi açıkladıklarını gösterir -

  • F - For - Tüm düğümlerin bir koleksiyonunu seçer.

  • L - Let - Sonucu bir XQuery değişkenine koyar.

  • W - Nerede - Koşul tarafından belirtilen düğümleri seçer.

  • O - Sırala - Kriterlere göre belirtilen düğümleri sıralar.

  • R - Dönüş - Nihai sonucu verir.

Misal

Aşağıda, bir kitap koleksiyonu hakkında bilgi içeren örnek bir XML belgesi verilmiştir. Fiyatı 30'dan fazla olan bu kitapların başlıklarını almak için bir FLWOR ifadesi kullanacağız.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

Aşağıdaki Xquery belgesi, yukarıdaki XML belgesinde yürütülecek sorgu ifadesini içerir.

books.xqy

let $books := (doc("books.xml")/books/book) return <results> { for $x in $books where $x/price>30
   order by $x/price return $x/title
}
</results>

Sonuç

<title lang="en">Learn XQuery in 24 hours</title>
<title lang="en">Learn .Net in 24 hours</title>

Sonucu Doğrula

Sonucu doğrulamak için, books.xqy'nin içeriğini ( Ortam Kurulumu bölümünde verilmiştir) yukarıdaki XQuery ifadesiyle değiştirin ve XQueryTester java programını çalıştırın.

XQuery, bir XML belgesini bir HTML sayfasına dönüştürmek için de kolayca kullanılabilir. XQuery'nin bunu nasıl yaptığını anlamak için aşağıdaki örneğe bir göz atın.

Misal

Aynı books.xml dosyasını kullanacağız. Aşağıdaki örnek, XQuery'nin books.xml'den veri ayıklamasını kullanır ve ilgili fiyatları ile birlikte tüm kitapların başlıklarını içeren bir HTML tablosu oluşturur.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

Aşağıda, yukarıdaki XML belgesinde çalıştırılacak Xquery ifadesi verilmiştir.

books.xqy

let $books := (doc("books.xml")/books/book) return <table><tr><th>Title</th><th>Price</th></tr> { for $x in $books order by $x/price
   return <tr><td>{data($x/title)}</td><td>{data($x/price)}</td></tr>
}
</table>
</results>

Sonuç

<table>
   <tr>
      <th>Title</th>
      <th>Price</th>
   </tr>
   <tr>
      <td>Learn XPath in 24 hours</td>
      <td>16.50</td>
   </tr>   
   <tr>
      <td>Learn Java in 24 Hours</td>
      <td>30.00</td>
   </tr>
   <tr>
      <td>Learn XQuery in 24 hours</td>
      <td>50.00</td>
   </tr>   
   <tr>
      <td>Learn .Net in 24 hours</td>
      <td>70.50</td>
   </tr>
</table>

Sonucu Doğrula

Sonucu doğrulamak için, books.xqy'nin içeriğini ( Ortam Kurulum bölümünde verilmiştir) yukarıdaki XQuery ifadesiyle değiştirin ve XQueryTester java programını çalıştırın.

XQuery İfadeleri

Burada aşağıdaki XQuery ifadelerini kullandık -

  • title öğesinin değerini değerlendirmek için data () işlevi ve

  • {} operatörü, XQuery işlemcisine verileri () bir işlev olarak kabul etmesini söyler. {} Operatörü kullanılmazsa, data () normal metin olarak değerlendirilecektir.

XQuery, XPath uyumludur. XML koleksiyonlarındaki arama sonuçlarını kısıtlamak için XPath ifadeleri kullanır. XPath'in nasıl kullanılacağı hakkında daha fazla ayrıntı için, XPath Eğitimimize bakın .

Kitapların listesini almak için daha önce kullandığımız aşağıdaki XPath ifadesini hatırlayın.

doc("books.xml")/books/book

XPath Örnekleri

Books.xml dosyasını kullanacağız ve ona XQuery uygulayacağız.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>40.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

Burada, 30'dan büyük bir fiyat değerine sahip kitap başlıklarını sergilemekle aynı amacı yerine getiren bir XQuery ifadesinin üç versiyonunu verdik.

XQuery - Sürüm 1

(: read the entire xml document :)
let $books := doc("books.xml") for $x in $books/books/book where $x/price > 30
return $x/title

Çıktı

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

XQuery - Sürüm 2

(: read all books :)
let $books := doc("books.xml")/books/book

for $x in $books
where $x/price > 30 return $x/title

Çıktı

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

XQuery - Sürüm 3

(: read books with price > 30 :)
let $books := doc("books.xml")/books/book[price > 30] for $x in $books return $x/title

Çıktı

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

Sonucu Doğrulayın

Sonucu doğrulamak için, books.xqy'nin içeriğini ( Ortam Kurulum bölümünde verilmiştir) yukarıdaki XQuery ifadesiyle değiştirin ve XQueryTester java programını çalıştırın.

Sıralar, öğelerin benzer veya farklı türlerde olabileceği sıralı bir öğe koleksiyonunu temsil eder.

Sıra Oluşturma

Diziler, tırnak içinde dizeler veya çift tırnak ve bunun gibi sayılarla parantez kullanılarak oluşturulur. XML öğeleri, bir dizinin öğeleri olarak da kullanılabilir.

XQuery İfadesi

let $items := ('orange', <apple/>, <fruit type="juicy"/>, <vehicle type="car">sentro</vehicle>, 1,2,3,'a','b',"abc") let $count := count($items) return <result> <count>{$count}</count>
   
   <items>
      {
	     for $item in $items
         return <item>{$item}</item>
      }
   </items>
   
</result>

Çıktı

<result>
   <count>10</count>
   <items>
      <item>orange</item>
      <item>
         <apple/>
      </item>
      <item>
         <fruit type="juicy"/>
      </item>
      <item>
         <vehicle type="car">Sentro</vehicle>
      </item>
      <item>1</item>
      <item>2</item>
      <item>3</item>
      <item>a</item>
      <item>b</item>
      <item>abc</item>
   </items>
</result>

Bir Sıradaki Öğeleri Görüntüleme

Bir dizinin öğeleri, indeks kullanılarak veya değere göre tek tek yinelenebilir. Yukarıdaki örnek, bir dizinin öğelerini tek tek yineledi. Diğer iki yolu iş başında görelim.

XQuery İfadesi (Dizin)

let $items := (1,2,3,4,5,6)
let $count := count($items)
return
   <result>
      <count>{$count}</count> <items> { for $item in $items[2] return <item>{$item}</item>
      }
      </items>
      
   </result>

Çıktı

<result>
   <count>6</count>
   <items>
      <item>2</item>
   </items>
</result>

XQuery İfadesi (Değer)

let $items := (1,2,3,4,5,6) let $count := count($items) return <result> <count>{$count}</count>
      
      <items>
      {
         for $item in $items[. = (1,2,3)]
         return <item>{$item}</item>
      }
      </items>
      
   </result>

Çıktı

<result>
   <count>6</count>
   <items>
      <item>1</item>
      <item>2</item>
      <item>3</item>
   </items>
</result>

Aşağıdaki tablo, XQuery tarafından sağlanan yaygın olarak kullanılan sıra işlevlerini listeler.

Sr.No İsim & Açıklama
1

say (öğe olarak $ seq () *)

Öğeleri sırayla sayar.

2

toplam (öğe olarak $ seq () *)

Bir dizideki öğelerin toplamını verir.

3

ort (öğe olarak $ seq () *)

Bir dizideki öğelerin ortalamasını verir.

4

min ($ seq as item () *)

Sırayla minimum değerli öğeyi döndürür.

5

max ($ seq as item () *)

Sırayla maksimum değerli öğeyi döndürür.

6

farklı değerler ($ seq as item () *)

Bir diziden seçilen farklı öğeleri döndürür.

7

alt sıra ($ seq as item () *, $startingLoc as xs:double, $uzunluk xs olarak: double)

Sağlanan dizinin bir alt kümesini döndürür.

8

önce ekle ($seq as item()*, $xs olarak konumlandırın: tamsayı, öğe olarak $ ekler () *)

Sıraya bir öğe ekler.

9

remove ($ seq as item () *, $ pozisyon xs olarak: tamsayı)

Bir diziden bir öğeyi kaldırır.

10

ters (öğe olarak $ seq () *)

Tersine çevrilmiş sırayı verir.

11

indeksi($seq as anyAtomicType()*, $target as anyAtomicType ())

Bir dizideki bir öğenin kullanılabilirliğini belirtmek için dizinleri tamsayı olarak döndürür.

12

son()

Yüklem ifadesinde kullanıldığında bir dizinin son öğesini döndürür.

13

durum()

FLOWR ifadelerinde, bir sıradaki bir öğenin konumunu almak için kullanılır.

Aşağıdaki tablo, XQuery tarafından sağlanan yaygın olarak kullanılan dize işleme işlevlerini listeler.

Sr.No İsim & Açıklama
1

string-length ($ string as xs: string) as xs: integer

Dizenin uzunluğunu döndürür.

2

concat (xs olarak $ girdi: anyAtomicType?) xs: string

Birleştirilmiş dizeyi çıktı olarak döndürür.

3

string-join ($sequence as xs:string*, $sınırlayıcı xs: string) xs: string olarak

Sınırlayıcıyla ayrılmış bir sıradaki öğelerin kombinasyonunu döndürür.

Aşağıdaki tablo, XQuery tarafından sağlanan yaygın olarak kullanılan tarih işlevlerini listeler.

Sr.No İsim & Açıklama
1

Geçerli tarih()

Geçerli tarihi döndürür.

2

şimdiki zaman()

Geçerli saati döndürür.

3

current-dateTime ()

Hem güncel tarihi hem de geçerli saati döndürür.

XQuery tarafından sağlanan yaygın olarak kullanılan normal ifade işlevlerinin listesi aşağıdadır

Sr.No İsim & Açıklama
1

maçlar($input, $normal ifade)

Girdi, sağlanan normal ifadeyle eşleşirse doğru döndürür.

2

değiştir ($input, $normal ifade, $ dize)

Eşleşen giriş dizesini verilen dizeyle değiştirir.

3

belirteç oluşturma ($ input, $ regex)

Normal ifadeyle eşleşen bir dizi öğe döndürür.

XQuery, aktarılan giriş değerlerinin geçerliliğini kontrol etmek için çok yararlı bir eğer-ise-ise yapısı sağlar. Aşağıda, if-then-else yapısının sözdizimi verilmiştir.

Sözdizimi

if (condition) then
 ... 
else
 ...

Misal

Aşağıdaki books.xml dosyasını kullanacağız ve 30'dan büyük bir fiyat değerine sahip kitapların başlıklarını almak için eğer-ise-else yapısını içeren XQuery ifadesini kullanacağız.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>40.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author>
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
</books>

Aşağıdaki XQuery ifadesi, yukarıdaki XML belgesine uygulanacaktır.

books.xqy

<result>
{
   if(not(doc("books.xml"))) then (
      <error>
         <message>books.xml does not exist</message>
      </error>
   )
   else ( 
      for $x in doc("books.xml")/books/book	
      where $x/price>30 return $x/title
   )
}
</result>

Çıktı

<result>
   <title lang="en">Learn .Net in 24 hours</title>
   <title lang="en">Learn XQuery in 24 hours</title>
</result>

Sonucu Doğrulayın

Sonucu doğrulamak için, books.xqy'nin içeriğini ( Ortam Kurulum bölümünde verilmiştir) yukarıdaki XQuery ifadesiyle değiştirin ve XQueryTester java programını çalıştırın.

XQuery, özel işlevler yazma yeteneği sağlar. Aşağıda, özel bir işlev oluşturmaya yönelik yönergeler listelenmiştir.

  • Anahtar kelimeyi kullanın declare function bir işlevi tanımlamak için.

  • Geçerli XML Şemasında tanımlanan veri türlerini kullanın

  • İşlevin gövdesini küme parantezleri içine alın.

  • İşlevin adının önüne bir XML ad alanı ekleyin.

Özel bir işlev oluştururken aşağıdaki sözdizimi kullanılır.

Sözdizimi

declare function prefix:function_name($parameter as datatype?...)
as returnDatatype?
{
   function body...
};

Misal

Aşağıdaki örnek, XQuery'de kullanıcı tanımlı bir işlevin nasıl oluşturulacağını gösterir.

XQuery İfadesi

declare function local:discount($price as xs:decimal?,$percentDiscount as xs:decimal?) as xs:decimal? { let $discount := $price - ($price * $percentDiscount div 100) return $discount
};

let $originalPrice := 100 let $discountAvailed := 10

return ( local:discount($originalPrice, $discountAvailed))

Çıktı

90

Sonucu Doğrulayın

Sonucu doğrulamak için, books.xqy'nin içeriğini ( Ortam Kurulum bölümünde verilmiştir) yukarıdaki XQuery ifadesiyle değiştirin ve XQueryTester java programını çalıştırın.