# 1

Andika Triwidada
andika@gmail.com 2012, 2013.

# Sintaks XML manajer data

Node akar pohon XML mesti berupa `<data>`, yang diperbolehkan memuat satu atau lebih definisi sumber data. Setiap sumber data didefinisikan oleh node `<query>` atau `<table>`, keduanya menerima atribut opsional berikut:

"id" untuk menyatakan suatu ID string sumber data, dipakai ketika mengaitkan sumber data satu sama lain;

"title" untuk menyatakan judul.

Tentu saja mungkin memakai kedua tag `<query>` atau `<table>` dalam spesifikasi sumber data yang sama.

# Variabel yang diekspor

Setiap sumber data mengekspor beberapa variabel yang dapat dipakai ulang oleh sumber data lain untuk memperkenalkan kebergantungan. Ketika sumber data dieksekusi, isi dari variabel yang diekspor direset bergantung pada baris yang benar-benar dipilih dalam tilikan tabulasi hasilnya. Bila tak ada baris yang dipilih maka variabel dikosongkan.

Sebarang sumber data yang bergantung pada suatu variabel dieksekusi lagi ketika variabel berubah, dan bila variabelnya kosong, hasil eksekusi sumber data adalam set data kosong.

# Tag `<query>`

Pakai tag `<query>` untuk menyatakan pernyataan SQL SELECT, sebagai isi tab. Tautan ke sumber data lain dapat dicapai memakai variabel dalam SQL milik SELECT.

<data> <query title="Customers" id="customers"> SELECT id, name FROM customers where name like ##name::string </query> <query title="Customer's details" id="cust_details"> SELECT * FROM customers WHERE id=##customers@id::int </query> </data>

Sebagai contoh spesifikasi XML sebelumnya mendefinisikan dua sumber data:

sumber data `customers` yang memilih beberapa ruas dari tabel customers, dan yang bergantung kepada suatu variabel string bernama `name`. Variabel ini mesti sudah diisi ketika sumber data dieksekusi karena itu tak akan diekspor oleh sebarang sumber data dalam spesifikasi ini.

sumber data `cust_details` yang memilih semua rincian dari suatu pelanggan dinyatakan memakai IDnya. Sumber data kedua ini bergantung kepada yang sebelumnya karena variabel `customers@id` diekspor dari sumber data `customers`.

Mengeksekusi spesifikasi sumber data ini akan membuat dua tilikan tabulasi: satu dimana Anda dapat memilih suatu pelanggan, dan satu yang menampilkan semua atribut bagi pelanggan yang dipilih.

## Variabel yang diekspor

Setiap sumber data yang didefinisikan oleh suatu tag `<query>` mengekspor variabel berikut bagi setiap kolom dari set data hasilnya (tipe variabel sama dengan tipe kolom):

`<ID sumber data>@<posisi kolom>` dimana posis kolom dimulai dari 1

`<ID sumber data>@<nama kolom> bila kolom set data adalah kolom tabel`

# Tag `<table>`

Pakai tag `<table>` untuk mendefinisikan sumber data yang akan menampilkan isi dari suatu tabel. Tag ini:

memerlukan atribut "name" yang mewakili nama tabel.

bisa punya atribut "id" yang terkait dengan ID sumber data. Bila tak ada, ID akan diberikan secara otomatis.

bisa memuat tag `<depend>` yang menentukan dependensi pada sumber data lain dengan atribut "foreign_key_table" yang menentukan nama tabel yang mana ada foreign key yang dipakai untuk menentukan kebergantungan, dan atribut "id" dapat menyatakan ID sumber data bila berbeda dengan tabel yang disebut sebelumnya

Tag `<depend>`, yang bagi sumber data dari suatu tabel, mendefinisikan dependensi ke sumber data lain dari suatu tabel:

memerlukan atribut "foreign_key_table yang menentukan nama tabel yang mana ada foreign key yang dipakai untuk menentukan kebergantungan

bisa memiliki atribut "id" yang berkaitan dengan ID dari sumber data yang diacu. Bila tak diberikan, maka kebergantungan bisa gagal bila tak ada sumber data yang IDnya adalah atribut "foreign_key_table".

dapat memuat satu atau lebih tag `<column>` yang isinya menentukan kolom yang mengidentifikasikan foreign key yang akan dipakai; ini diperlukan bila ada beberapa foreign key, dan dapat diabaikan bila hanya ada satu foreign key yang mungkin. Kolom yang didaftar adalah yang dari tabel dimana foreign key berada.

<data> <table id="the_cust" name="customers"/> <table name="orders"> <depend id="the_cust" foreign_key_table="customers"> <column>customer_id</column> </depend> </table> </data>

Sebagai contoh spesifikasi XML sebelumnya mendefinisikan dua sumber data:

Sumber data `customers` yang memilih semua isi dari tabel customers.

Sumber data `orders` yang memilih dari dalam isi tabel `orders`, baris-baris yang berkaitan dengan suatu baris dalam tabel `customers` memakai foreign key pada tabel orders yang melibatkan kolom "orders.customer_id" dan kunci primer dari tabel customers. Atribut "id" dari tag `<depend>` perlu disini untuk mengidentifikasi sumber data yang diacu.

Perhatikan dalam contoh ini bahwa:

Anda tak perlu menyatakan ruas yang terlibat dalam foreign key yang menaut tabel `orders` dan `customers`

ID sumber data telah diberi nama dari tabel yang dipilih karena tidak ada atribut "id" yang telah dinyatakan bagi tag `<table>`.

## Variabel yang diekspor

Setiap sumber data yang didefinisikan oleh tag `<query>` mengekspor variabel berikut bagi kolom setiap tabel (tipe variabel sama dengan tipe kolom):

`<ID sumber data>@<nama kolom>`

`<ID sumber data>@<posisi kolom>` dimana posis kolom dimulai dari 1