Oracle XML DB


Ketika kita memasang Oracle 10g atau 11g, pada database yang dibuat secara otomatis akan terpasang default komponen yaitu XML DB. Apa itu XML DB? Seperti biasa, saya cuplik dari wikipedia saja :

An XML database is a data persistence software system that allows data to be stored in XML format. This data can then be queried, exported and serialized into any format the developer wishes.

Ada dua tipe XML DB, yaitu: XML-enabled dan Native XML. XML-enabled secara sederhana adalah dalam sebuah produk RDBMS terdapat dukungan middleware untuk menjembatani dan memetakan antara database relational dengan dokumen XML sebagai input (query) dan outputnya. Sedangkan untuk Native XML adalah database yang murni menerapkan persisten data dalam format XML.  Database Oracle mendukung keduanya. Di artikel ini saya mencoba untuk memberikan gambaran tentang keduanya di database Oracle agar kita dapat mencicipi XML DB.

Konfigurasi XMLDB Oracle

Sebelum dapat mengakses Oracle DB dengan antarmuka XML, kita harus aktifkan terlebih dahulu listener untuk XML DB Oracle ini. Di versi 9i dan 10g, ada dua protokol yang didukung, yaitu HTTP dan FTP. Tapi di versi 11g, ada tambahan satu lagi yaitu HTTPS. Untuk melihat status listener salah satu atau kedua port tersebut, kita dapat melihat status dengan perintah lsnrctl :

Contoh Hasil lsnrctl status

Contoh Hasil lsnrctl status

Untuk konfigurasi port XML DB Oracle, kita dapat menggunakan Oracle Enterprise Manager ataupun dengan perintah console di sqlplus. Jika menggunakan Enterprise Manager (untuk Oracle 9i, silahkan baca dokumentasinya), kita dapat langsung menuju ke Administration (oracle 10g) atau Schema (oracle 11g) lalu di halaman, pilih menu Configuration pada bagian XML. Untuk lebih mudahnya, kita bisa langsung menggunakan console sqlplus dan memberikan perintah berikut untuk mengkonfigurasi port FTP dan HTTP Oracle XML DB:
DECLARE
v_cfg XMLType;
BEGIN
SELECT updateXML(DBMS_XDB.cfg_get(),
'/xdbconfig/descendant::ftp-port/text()', '2121',
'/xdbconfig/descendant::http-port/text()', '8080')
INTO v_cfg FROM DUAL;
DBMS_XDB.cfg_update(v_cfg);
COMMIT;
END;
/

Setelah itu, kita restart database kita. Untuk menguji layanan HTTP Oracle XML DB, kita dapat mencoba mengaksesnya dengan menggunakan protokol WebDav, salah satunya dengan menggunakan Windows Explorer atau web browser dan kunjungi http://localhost:8080/. Berikut contohnya:

Contoh Akses Oracle DB Repository dengan HTTP

Contoh Akses Oracle DB Repository melalui HTTP


XML-enabled

Untuk pemetaan antara relational dan XML, Oracle menyediakan beberapa mekanisme, seperti XSQL atau DBUri Servlet. Keduanya menggunakan paket XMLType yang merupakan komponen kunci di Oracle DB untuk penerapan XML DB. Yang paling sederhana adalah menggunakan DBUri Servlet. Untuk itu kali ini saya hanya memberikan gambaran tentang DBUri Servlet.

Dengan DBUri Servlet ini, kita dapat mengakses database kita melalui protokol HTTP. Yang kita butuhkan hanyalah sebuah web browser untuk mengakses http://alamatservicedburi:8080/oradb/xpath. Sebagai syarat untuk memanfaatkan ini, kita harus memahami terlebih dahulu tentang XPath, yaitu sebuah spesifikasi format sintak path yang dapat menunjuk pada satu elemen, atribut atau nilai dan kondisi terhadap dokumen XML. Dari setiap query yang kita berikan ke DBUri, hasil yang kita peroleh adalah dokumen XML.

Berikut beberapa contoh query untuk DBUri Servlet:

  • melihat semua data hr.departments
  • melihat semua data hr.departments yang berlokasi di 1800.

http://localhost:8080/oradb/HR/DEPARTMENTS/ROW%5BLOCATION_ID=”1800″%5D?rowsettag=”DEPARTMENTS”

http://localhost:8080/oradb/HR/DEPARTMENTS/ROW%5BLOCATION_ID=%221800%22%5D?rowsettag=DEPARTMENTS

Hasil query XPath

Mudah bukan?

Native XML

Kedua, kita akan mencoba untuk memanfaatkan Native XML DB, dimana kita akan membuat struktur ‘record’ dari setiap data kita yang tersimpan dalam dokumen format XML. Definisi struktur ‘record’ ini kita tulis dalam bahasa XML Schema.

Dengan menggunakan teks editor, atau menggunakan JDeveloper, kita definisikan XMLSchema untuk ‘record’ ponsel:

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xdb="http://xmlns.oracle.com/xdb">
<xsd:element name="ponsel" xdb:defaultTable="PONSEL">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="merk" type="xsd:string"/>
<xsd:element name="produsen" type="xsd:string"/>
<xsd:element name="harga" type="xsd:integer"/>
<xsd:element name="kemampuan" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

Simpan dengan nama ponsel.xsd.

Untuk lebih mempermudah saja, mari kita buat sebuah user account baru:

SQL> conn / as sysdba

SQL> create user coba identified by coba;

SQL> grant connect, resource, dba, xdbadmin to coba;

Dengan diberikan hak xdbadmin, user coba dapat melakukan administrasi XML DB. Sekarang dengan menggunakan user coba tersebut, kita buat folder baru di Oracle repository server dengan perintah berikut :

SQL> conn coba/coba

SQL> DECLARE
v_return  BOOLEAN;
BEGIN
v_return := dbms_xdb.createFolder(‘/home/COBA/’);
v_return := dbms_xdb.createFolder(‘/home/COBA/xsd/’);
v_return := dbms_xdb.createFolder(‘/home/COBA/ponsel/’);
COMMIT;
END;
/

Kemudian dari windows explorer, kita buat koneksi baru ke Oracle Repository yang sebelumnya sudah kita coba. Setelah terhubung, kita masuk ke folder /home/COBA. Di sana kita mendapat 2 sub folder, yaitu xsd dan ponsel. Copykan file siswa.xsd ke folder xsd. Sehingga nantinya jika diakses dari browser dengan alamat http://localhost:8080/home/COBA/xsd/ponsel.xsd akan nampak isi dokumen di browser Anda.

Lokasi dan isi ponsel.xml di repository

Lokasi dan isi ponsel.xml di repository

Langkah berikutnya, kita harus mendaftarkan schema ponsel.xsd kita ke daftar schema Oracle XML DB dengan perintah berikut (dari lingkungan sqlplus):

SQL> BEGIN
DBMS_XMLSchema.registerSchema(
schemaurl=>’http://budsus.localdomain:8080/home/COBA/xsd/ponsel.xsd&#8217;,
schemadoc=>sys.UriFactory.getUri(‘/home/COBA/xsd/ponsel.xsd’));
END;
/

Dengan proses registrasi tersebut, Oracle akan membuat default table yang dapat kita gunakan untuk melakukan query ke data XML kita dari lingkungan sqlplus atau yang lain dengan perintah SELECT seperti biasanya.

SQL> select * from tab;

Dari deklarasi XSD kita, maka kita bisa tahu bahwa nama tabel yang mewakili seluruh dokumen XML yang menggunakan schema ponsel.xsd adalah PONSEL. Jika kita query “SELECT * FROM PONSEL;” sekarang, oracle masih memberikan hasil ‘no rows selected’.

Kita coba tambahkan ‘record’ baru melalui definisi dokumen XML baru yang mengikuti schema ponsel.xsd di atas:

<?xml version="1.0" encoding="UTF-8" ?>
<ponsel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://budsus.localdomain:8080/home/COBA/xsd/ponsel.xsd">
<merk>N78</merk>
<produsen>Nokia</produsen>
<harga>335</harga>
<kemampuan>bluetooth, a-gps, WiFi, 3G, S60 3rd, J2ME MIDP 2</kemampuan>
</ponsel>

Simpan dan beri nama ponsel1.xml. Lalu copy ke repository server di dalam folder /home/COBA/ponsel, sehingga jika kita akses dengan alamat http://localhost:8080/home/COBA/ponsel/ponsel1.xml akan terlihat isinya. Catatan: jika selama proses copy, ternyata ada pesan error dari server, kemungkinan besar disebabkan karena dokumen xml kita tidak sesuai dengan schema yang kita daftarkan sebelumnya.

Jika berhasil, kita dapat mencoba melakukan query dari sqlplus terhadap tabel PONSEL yang mewakili data-data XML untuk schema ponsel.xsd.

SQL> select count(*) from ponsel;

Jika yang dihasilkan adalah 1, berarti penambahan ‘record’ ponsel telah berhasil. Cobalah lakukan query seperti ditunjukkan pada gambar berikut:

SELECT * FROM PONSEL;

SELECT * FROM PONSEL;

Untuk insert, update, delete, kita bisa lakukan dengan cara seperti menambah data ponsel1.xml di atas.😀 Semoga bermanfaat. Thanks.

2 thoughts on “Oracle XML DB

  1. Mas budi mo tanya nich, knp ya kmaren saya habis install oracleXE di ubuntu bisa,setelah itu saya hapus&install lg oracle nya tp koq ga bsa lg ya,,
    knp ya kira …… di konsol nya blg ky gni
    ” dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb
    (Reading database … 146625 files and directories currently installed.)
    Preparing to replace oracle-xe-universal 10.2.0.1-1.0 (using oracle-xe-universal_10.2.0.1-1.0_i386.deb) …
    Unpacking replacement oracle-xe-universal …
    Setting up oracle-xe-universal (10.2.0.1-1.0) …
    Executing Post-install steps…
    /bin/chown: invalid user: `oracle:dba’

    Processing triggers for man-db …”

  2. wah.. ini dia yang saya cari, saya tertarik sekali ama xml database, dan sekarang tools yang saya pake baru DB2 dari IBM, mungkin yang 10g menarik jugha..

    Klo boleh sih, ada link atau artikel laen yang njelasin konsep si native ituh..

    Trims infonya..

Komentar ditutup.