Wednesday 28 September 2016

Export/Import Data dari PostgreSQL Menggunakan PHP dengan Format XML

Status : Draft

Latar Balakang

Pada salah satu aplikasi yang kita kembangkan, Bank Soal [1], kita memerlukan proses export/import data custom, karena proses export/import data menggunakan database yang kita gunakan, PostgreSQL, sudah tidak memenuhi kebutuhan lagi. Oleh karena itu diperlukan utilitas export/import data yang custom menggunakan format data xml.

Solusi

Export

Untuk export, kita menggunakan solusi built-in postgresql query_to_xml(query text, nulls boolean, tableforest boolean, targetns text) [2].

Salah satu contoh SQL untuk exportnya seperti ini :

SELECT * FROM query_to_xml('SELECT * FROM jenis_soal  WHERE id_jenis_soal
                           IN(SELECT DISTINCT(id_jenis_soal)
                              FROM soal WHERE id_set_soal = '||$1||')',true,false,'') jenis_soal_xml;
Contoh Outputnya seperti berikut :

<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
  <id_jenis_soal>1</id_jenis_soal>
  <nama>Pilihan Berganda</nama>
  <urut>1</urut>
</row>
<row>
  <id_jenis_soal>2</id_jenis_soal>
  <nama>Kombinasi Berganda</nama>
  <urut>3</urut>
</row>
</table>


Import

Untuk proses import kita menggunakan php dengan bantuan pustaka sabre/xml [5].

Contoh Implementasi Import :

  $service = new Sabre\Xml\Service();
  $service->elementMap = [
   '{}row' => function(Sabre\Xml\Reader $reader) {
return Sabre\Xml\Deserializer\keyValue($reader, '');
},
'table' => function(Sabre\Xml\Reader $reader) {
return Sabre\Xml\Deserializer\repeatingElements($reader, 'row');
},
  ];

  $data_xml   = $service->parse(file_get_contents($file_xml));

Outputnya akan berupa array, seperti berikut :

Array
(
    [0] => Array
        (
            [id_jenis_soal] => 1
            [nama] => Pilihan Berganda
            [urut] => 1
        )
    [1] => Array
        (
            [id_jenis_soal] => 2
            [nama] => Kombinasi Berganda
            [urut] => 3
        )
)

Referensi

  1. Sistem Informasi Bank Soal,Transformative Assesment : When Assesment is Not Only About Judging The Students But Developing Their Performance,  http://banksoal.openthinklabs.com
  2. PostrgreSQL : Export - Import Data, http://postgresql.openthinklabs.com/2016/08/postrgresql-export-import-data.html
  3. Export/Import Data dari MySQL Menggunakan PHP dengan Format XML, http://software.openthinklabs.com/2015/10/exportimport-data-dari-mysql.html
  4. An XML library for PHP you may not hate., http://evertpot.com/an-xml-library-you-may-not-hate/
  5. sabre/xml, http://sabre.io/xml/