Tur Terpandu Untuk Tutorial XQuery – XQuery didefinisikan dalam model data formal, bukan dalam teks XML.
Tur Terpandu Untuk Tutorial XQuery
zorba-xquery – Setiap masukan ke kueri adalah turunan dari model data, dan keluaran dari setiap kueri adalah turunan dari model data.
Dalam model data XQuery, setiap dokumen direpresentasikan sebagai pohon simpul. Jenis node yang mungkin terjadi adalah: document, element , atribut, teks, name space , instruksi pemrosesan, dan komentar. Setiap node memiliki identitas node unik yang membedakannya dari node lain bahkan dari node lain yang identik.
Selain node, model data memungkinkan nilai atom , yang merupakan nilai tunggal yang sesuai dengan tipe sederhana yang didefinisikan dalam Rekomendasi W3C, “Skema XML, Bagian 2” SCHEMA, seperti string, Boolean, desimal, bilangan bulat, float dan ganda, dan tanggal.
Jenis sederhana ini dapat terjadi di dokumen apa pun yang terkait dengan Skema XML W3C. Seperti yang akan kita lihat nanti, kita juga dapat merepresentasikan beberapa tipe sederhana secara langsung sebagai literal dalam bahasa XQuery, termasuk string, integer, double, dan desimal.
Baca Juga : Pengembangan Aplikasi Web Dengan XQuery
Sebuah barang adalah simpul tunggal atau nilai atom. Serangkaian item dikenal sebagai urutan. Di XQuery, setiap nilai adalah urutan, dan tidak ada perbedaan antara satu item dan urutan yang panjangnya satu. Urutan hanya dapat berisi node atau nilai atom; mereka tidak dapat berisi urutan lain.
Node pertama dalam dokumen apa pun adalah node dokumen, yang berisi seluruh dokumen. Node dokumen tidak sesuai dengan apa pun yang terlihat di dokumen; itu mewakili dokumen itu sendiri. Node elemen, node komentar, dan node instruksi pemrosesan terjadi dalam urutan di mana mereka ditemukan dalam XML (setelah perluasan entitas).
Node elemen terjadi sebelum anakanak mereka node elemen, node teks, node komentar, dan instruksi pemrosesan yang dikandungnya. Atribut tidak dianggap anakanak dari suatu elemen, tetapi mereka memiliki posisi yang ditentukan dalam urutan dokumen: Mereka muncul setelah elemen di mana mereka ditemukan, sebelum anakanak dari elemen. Urutan relatif dari node atribut bergantung pada implementasi. Dalam urutan dokumen, setiap node terjadi tepat satu kali, jadi menyortir node dalam urutan dokumen menghilangkan duplikat.
Menemukan Node dengan Ekspresi Jalur di XQuery
Di XQuery, ekspresi jalur digunakan untuk menemukan node dalam data XML. Ekspresi jalur XQuery diturunkan dari XPath 1.0 dan identik dengan ekspresi jalur XPath 2.0. Fungsionalitas ekspresi jalur terkait erat dengan model data yang mendasarinya. Kami mulai dengan beberapa contoh yang menyampaikan intuisi di balik ekspresi jalur, kemudian menentukan bagaimana mereka beroperasi dalam kaitannya dengan model data.
Operator yang paling umum digunakan dalam ekspresi jalur menemukan node dengan mengidentifikasi lokasinya dalam hierarki pohon. Ekspresi jalur terdiri dari serangkaian satu atau lebih langkah, dipisahkan oleh garis miring, /, atau garis miring ganda, //. Setiap langkah dievaluasi ke urutan node. Misalnya, perhatikan ekspresi berikut:
doc(“books.xml”)/bib/book
Ekspresi ini membuka books.xml menggunakan fungsi doc() dan mengembalikan simpul dokumennya, menggunakan /bib untuk memilih elemen bib di bagian atas dokumen, dan menggunakan /book untuk memilih elemen buku di dalam elemen bib. Ekspresi jalur ini berisi tiga langkah. Buku yang sama dapat ditemukan dengan kueri berikut, yang menggunakan garis miring ganda, //, untuk memilih semua elemen buku yang terdapat dalam dokumen, terlepas dari tingkat di mana mereka ditemukan:
Jalur tersebut dimulai dengan simpul akar dokumen, tetapi bagaimana simpul ini diidentifikasi ditentukan oleh implementasi. Untuk setiap / dalam ekspresi jalur, XQuery mengevaluasi ekspresi di sisi kiri dan mengembalikan simpul yang dihasilkan dalam urutan dokumen; jika hasilnya berisi sesuatu yang bukan simpul, kesalahan jenis akan muncul.
Setelah itu, XQuery mengevaluasi ekspresi di sisi kanan / sekali untuk setiap node kiri, menggabungkan hasil untuk menghasilkan urutan node dalam urutan dokumen; jika hasilnya berisi sesuatu yang bukan simpul, kesalahan jenis akan muncul. Ketika ekspresi kanan dievaluasi, node kiri yang sedang dievaluasi dikenal sebagai node konteks.
Ekspresi langkah yang mungkin terjadi di sisi kanan a / adalah sebagai berikut:
NameTest , yang memilih node elemen atau atribut berdasarkan namanya. String sederhana ditafsirkan sebagai nama elemen; kita telah melihat bib NameTest , yang mengevaluasi ke elemen bib yang merupakan anak dari simpul konteks. Jika nama diawali dengan karakter @ (diucapkan “at”), maka NameTest mengevaluasi atribut node konteks yang memiliki nama tertentu. Misalnya, doc(“books.xml”)/bib/book/@year mengembalikan atribut tahun dari setiap buku. NameTest mendukung namespace dan wildcard, yang akan dibahas nanti di bagian ini.
KindTest , yang memilih instruksi pemrosesan, komentar, simpul teks, atau simpul apa pun berdasarkan jenis simpulnya . KindTest yang digunakan untuk memilih jenis simpul tertentu terlihat seperti fungsi dengan nama yang sama dengan jenis simpul: instruksipemrosesan(), komentar(), teks(), dan simpul().
Ekspresi yang menggunakan “sumbu” eksplisit bersama dengan NameTest atau KindTest untuk memilih node dengan hubungan struktural tertentu ke node konteks. Jika buku NameTest memilih elemen buku, maka anak::buku memilih elemen buku yang merupakan anak dari simpul konteks; keturunan::buku memilih elemen buku yang merupakan turunan dari simpul konteks; atribut::buku memilih atribut buku dari simpul konteks; self::book memilih simpul konteks jika itu adalah elemen buku, keturunanataudiri::buku memilih simpul konteks atau turunannya jika itu adalah elemen buku, dan induk::buku memilih induk dari simpul konteks jika itu adalah elemen buku. Sumbu eksplisit tidak sering digunakan di XQuery.
Sebuah PrimaryExpression , yang mungkin literal, panggilan fungsi, nama variabel, atau ekspresi kurung. Ini dibahas di bagian selanjutnya dari tutorial ini.
Bekerja dari kiri ke kanan, XQuery pertamatama mengevaluasi fungsi input, doc(“books.xml”), mengembalikan simpul dokumen, yang menjadi simpul konteks untuk mengevaluasi ekspresi di sisi kanan garis miring pertama. Ekspresi tangan kanan ini adalah bib, sebuah NameTest yang mengembalikan semua elemen bernama bib yang merupakan anak dari node konteks. Hanya ada satu elemen bib, dan itu menjadi simpul konteks untuk mengevaluasi buku ekspresi, yang pertamatama memilih semua elemen buku yang merupakan anakanak dari simpul konteks dan kemudian menyaringnya untuk mengembalikan hanya elemen buku pertama.
Menggabungkan dan Merestrukturisasi Node di XQuery
Kueri di XQuery sering menggabungkan informasi dari satu atau lebih sumber dan menyusunnya kembali untuk membuat hasil baru. Bagian ini berfokus pada ekspresi dan fungsi yang paling umum digunakan untuk menggabungkan dan merestrukturisasi data XML.
Ekspresi FLWOR
Ekspresi FLWOR, diucapkan “ekspresi bunga,” adalah salah satu ekspresi paling kuat dan umum di XQuery. Mereka mirip dengan pernyataan SELECTFROMWHERE dalam SQL. Namun, ekspresi FLWOR tidak didefinisikan dalam tabel, baris, dan kolom; sebagai gantinya, ekspresi FLWOR mengikat variabel ke nilai dalam klausa for dan let, dan menggunakan ikatan variabel ini untuk membuat hasil baru. Kombinasi dari ikatan variabel yang dibuat oleh klausa for dan let dari ekspresi FLWOR disebut tuple.