Mempelajari Tutorial Fungsi XQuery

zorba-xquery – Kami memulai rangkaian artikel ini dengan tur singkat bahasa XQuery selama sepuluh menit, dan kemudian menindaklanjutinya dengan tampilan terperinci pada pekerja keras bahasa tersebut, ekspresi FLWOR. Jika kami mengikuti perkembangan logis, kami kemudian akan membahas fitur-fitur lain dari bahasa pada tingkat detail yang sama. Sebagai gantinya, kami pergi ke bidang yang sedikit berbeda, dengan beberapa artikel “strategis”, satu tentang sinergi antara XQuery dan XML Schema, dan satu lagi tentang desain aplikasi berbasis alur kerja.Tapi kami selalu berniat untuk kembali ke tema coding, karena pada akhirnya, codinglah yang penting. Jadi dalam tutorial ini, kami ingin melihat blok bangunan penting lainnya dari bahasa XQuery, fungsi yang ditentukan pengguna.

Fungsi XQuery Sederhana
Mempelajari Tutorial Fungsi XQuery – Fungsi XQuery untuk menghitung nilai total pesanan pembelian. Ada banyak alasan Anda mungkin ingin menulis kode ini sebagai fungsi XQuery daripada meletakkannya sebaris, dan kita akan melihat manfaat spesifik di waktunya. Pada prinsipnya, tentu saja, tidak ada bedanya dengan menulis fungsi atau metode dalam bahasa pemrograman lain, keuntungan utamanya adalah memecah kode kompleks menjadi bagian-bagian yang dapat dikelola.

Mempelajari Tutorial Fungsi XQuery

Mempelajari Tutorial Fungsi XQuery

Anatomi Deklarasi Fungsi XQuery
Sekarang mari kita lihat bagian yang berbeda dari deklarasi fungsi XQuery secara lebih rinci. Kami akan menyoroti setiap bagian saat kami mendiskusikannya. Satu hal sepele terlebih dahulu: titik koma setelah kurung kurawal di akhir fungsi XQuery adalah wajib. XQuery bisa tak kenal ampun! (Salah satu keuntungan dari aturan ini adalah memudahkan parser XQuery untuk melaporkan beberapa kesalahan sintaks dalam satu kali proses. Untuk melakukan ini, parser perlu memulihkan setelah kesalahan, yang dapat menjadi tantangan signifikan dalam bahasa dengan tidak ada kata-kata yang dicadangkan. Titik koma wajib menyediakan titik jangkar yang solid di mana penguraian dapat dilanjutkan.)

Nama Fungsi XQuery
Fungsi yang ditulis pengguna selalu dalam namespace XML. XQuery (seperti XSLT dan XPath sebelumnya) telah memperluas konsep nama XML dan ruang nama dengan menggunakan nama yang memenuhi syarat namespace tidak hanya untuk elemen dan atribut, tetapi juga untuk variabel dan fungsi. Awalan namespace “local” hanyalah singkatan dari nama asli namespace. Sebenarnya awalan ini agak tidak biasa, karena sudah ditentukan sebelumnya untuk Anda, dan Anda tidak benar-benar diberi tahu apa nama sebenarnya dari namespace (namespace URI). Selama kueri Anda terdiri dari satu modul, Anda dapat meletakkan semua fungsi Anda di ruang nama anonim ini, dan merujuknya dengan awalan “lokal” yang nyaman. Setelah Anda mulai menulis aplikasi XQuery berkualitas produksi, Anda akan ingin menggunakan beberapa modul, dengan ruang nama yang berbeda untuk fungsi dalam modul yang berbeda: kita akan melihat cara kerjanya nanti.

Seperti yang Anda harapkan, aturan untuk nama fungsi sama seperti untuk elemen XML dan nama atribut: Anda dapat menggunakan rentang huruf dan angka yang sangat luas dari alfabet mana pun di dunia, ditambah karakter tanda baca tanda hubung, garis bawah, dan titik. Matematikawan dapat memiliki hari lapangan: tidak perlu lagi memanggil fungsi Anda sigma, Anda dapat menyebutnya . (Yah, hampir: seperti yang kami katakan sebelumnya, itu harus di namespace. Jadi, Anda harus puas dengan sesuatu seperti :S.)

Anda dapat memiliki dua fungsi dengan nama yang sama, selama mereka memiliki jumlah argumen yang berbeda. Saat Anda memanggil fungsi XQuery, sistem dapat melihat berapa banyak argumen yang diberikan dalam pemanggilan fungsi XQuery, sehingga sistem dapat menentukan fungsi mana yang akan dipanggil. Pada prinsipnya dua fungsi tersebut sama sekali tidak terkait, tetapi dalam praktiknya adalah umum untuk berbagi nama dalam sekelompok fungsi yang memiliki tujuan yang sama. Tidak ada kelebihan beban lain yang diizinkan: Anda tidak dapat memiliki satu fungsi XQuery yang disebut local:order-value yang menggunakan pesanan pembelian sebagai argumennya, dan fungsi lain yang menggunakan faktur. Ini datang sebagai sedikit pukulan bagi kita yang telah terbiasa dengan pemrograman berorientasi objek dan pengikatan dinamis, tetapi pembatasan ada untuk alasan yang baik. XQuery dirancang pertama dan terutama sebagai bahasa kueri basis data, dan salah satu tujuan desain utama bahasa kueri basis data adalah untuk mengaktifkan optimasi statis yaitu, pembuatan pada waktu kompilasi dari rencana eksekusi kueri yang memaksimalkan penggunaan indeks dan lainnya jalur akses untuk membuat kueri berjalan secepat mungkin. Untuk melakukan itu, sistem harus dapat melihat apa yang akan terjadi sebelumnya, dan khususnya perlu mengetahui, ketika melihat pemanggilan fungsi XQuery, fungsi XQuery mana yang sebenarnya akan dipanggil.

Baca Juga : Oracle Exec Lobbies Yang Menjadi Sumber Terbuka Pada Mesin Zorba XQuery

Setiap argumen memiliki nama (“po” dalam contoh kita atau Anda mungkin lebih suka menganggap tanda “$” sebagai bagian dari nama, karena dalam XQuery mereka tidak dapat dipisahkan.) Klausa “sebagai” menyatakan jenis argumen. Anda dapat mengabaikan ini jika Anda mau: ini sama dengan menulis “sebagai item()*”, dan berarti semua jenis nilai apa pun dapat diterima. Saya akan merekomendasikan untuk selalu mendeklarasikan tipe yang diharapkan, karena tiga alasan:

Ini adalah dokumentasi yang sangat berguna ketika Anda kembali ke kueri setelah beberapa bulan dan mencoba memahami apa yang dilakukannya. Bahkan lebih berguna jika Anda telah menyerahkan pekerjaan itu kepada orang lain!
Sistem akan secara otomatis memeriksa, pada waktu kompilasi jika memungkinkan tetapi bagaimanapun juga pada waktu berjalan, bahwa argumen yang benar-benar diteruskan ke fungsi XQuery adalah tipe yang benar. Ini berarti bahwa kesalahan terdeteksi jauh lebih cepat, yang pada gilirannya membuatnya lebih mudah untuk didiagnosis. Dan kita semua membuat kesalahan pengkodean.
Sistem memiliki kesempatan setidaknya menggunakan informasi untuk optimasi. Misalnya, jika mengetahui bahwa argumen tidak boleh berupa urutan lebih dari satu item, ia mungkin dapat menghasilkan kode yang lebih sederhana untuk ekspresi yang menggunakan argumen tersebut.

Dalam sistem tipe XPath 2.0 (yang dibagikan XQuery dan XSLT), setiap nilai dianggap sebagai urutan. Nilai tunggal, seperti string atau bilangan bulat, hanyalah kasus khusus urutan panjang satu. Saat Anda mendeklarasikan jenisnya, Anda memberikan dua informasi: Anda mengatakan jenis item apa yang dapat muncul dalam urutan, dan Anda mengatakan berapa banyak dari mereka yang diizinkan.Kami lebih suka membahas manfaat dari mendeklarasikan tipe dalam artikel Kami tentang pemrosesan skema-sadar – jadi Anda mungkin dimaafkan jika berpikir bahwa jika Anda tidak menggunakan skema, Anda dapat mengabaikan apa pun yang menyebutkan tipe. Anda akan salah: tanpa skema, Anda tidak dapat merujuk ke tipe yang ditentukan pengguna, tetapi masih ada banyak jarak tempuh hanya dengan menggunakan tipe bawaan yang tersedia apakah Anda menggunakan skema atau tidak.

Item dapat berupa node atau nilai atom.Dalam contoh kita, fungsi XQuery mengambil sebuah node sebagai inputnya, dan mengembalikan nilai atomik (sebuah xs:double) sebagai hasilnya. Node biasanya berupa elemen, tetapi juga dapat berupa atribut atau jenis node lainnya: node dokumen, node teks, bahkan komentar atau instruksi pemrosesan. Dalam tanda tangan fungsi XQuery, Anda dapat membatasi jenis node apa yang diizinkan.Ini memungkinkan Anda untuk menjadi spesifik atau umum seperti yang Anda inginkan. Dalam contoh kami, kami menggunakan elemen formulir (pesanan pembelian) yang hanya membatasi nama elemen.

Dalam kueri skema-sadar, kami akan menggunakan elemen skema(pesanan pembelian), yang memberi sistem lebih banyak informasi: ia tidak hanya mengetahui bahwa nama elemen akan menjadi “pesanan pembelian”, tetapi juga mengetahui dalam memajukan apa struktur internalnya.Untuk nilai atomik, Anda dapat menggunakan nama tipe bawaan yang ditentukan dalam Skema XML, seperti xs:integer, xs:string, xs:date,xs:anyURI; atau Anda dapat menggunakan nama tipe atom yang telah Anda tentukan dalam skema Anda sendiri. Dalam hal ini Anda harus mengimpor skema menggunakan deklarasi “impor skema” di awal kueri sehingga kompiler tahu di mana menemukan definisi jenis ini.

Facebooktwitterredditpinteresttumblr