Saturday 26 September 2015

XSL Transformations (XSLT)

XSLT merupakan bahasa pemrograman berdasar XML yang digunakan untuk transformasi  dokumen  XML menjadi  dokumen XML  atau format  lainnya.
Transformas tida menguba dokumen   asli,   melainka menghasilkan

dokumen baru berdasarkan isi dokumen asli. XSLT sering digunakan untuk mengkonversi data dari satu XML schema ke schema lain, ke format XHTML, atau format XML yang dapat diubah menjadi dokumen PDF. Dokumen XSLT yaitu, sebuah XSLT stylesheet berisi template-rule. Setiap template memiliki aturan dan pola tersendiri. Sebuah XLS processor akan membaca dokumen XML dan template (dokumen XSLT). Berdasarkan instruksi yang ditemukan program pada XSLT, maka program akan menghasilkan dokumen XML yang baru.

Contoh Dokumen XML


<?xml version="1.0" ?>
<orang>
<mahasiswa>
<nim>1112</nim>
<nama>Sisanti</nama>
</mahasiswa>
<mahasiswa>
<nim>1111</nim>
<nama>susilo</nama>
</mahasiswa>
</orang>


Dokumen diatas disimpan kedalam file dengan nama orang.xml, dimana dokumen diatas akan kita gunakan untuk penerapan XSLT selanjutnya. XSLT dapat bekerja dengan dokumen yang valid maupun tidak valid asalkan well- formed. Dokumen ini juga tidak menggunakan namespace meskipun bisa juga dengan menggunakan namespace. XSLT hanya dapat berjalan dengan baik jika menggunakan namespace. Tidak seperti DTD, XSLT lebih memperhatikan namespace URIs dari pada prefiks.


xsl:stylesheet
XSLT   stylesheet   merupaka dokumen   XML da umumnya   harus meggunakan deklarasi XML atau paling tidak stylesheets. Root elemen dokumen ini adalah stylesheet atau transform. Selain itu kita juga dapat menggunakan stylesheet atau transform.   Contoh minimal dokumen XSLT :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>

untuk memanggil dokumen XSL kedalam dokumen XML yang kita inginkan, kita dapat mengginakan seperti script sebagai berikut :

<?xml-stylesheet type="text/xsl" href="xsl.xsl" ?>
<orang>
.......
</orang>


Contoh Stylesheet Processors
XML  dokumen  yang  ditampilkan  ke  web  browser  memiliki  xml-stylesheet processing instruction. Contoh penggunaannya adalah sebagai berikut :

<?xml version="1.0"?>
<?xml-stylesheet type="application/xml" href="orang.xsl"?>
<orang>
...
</orang>

pada contoh diatas, dokumen tersebut menggunakan pemprosesan intruksi pada aplikasi XML orang.xsl.

Templates and Template Rules
Untuk  mengontrol  hasil  outputan,  kitdapat menambahkan  template  rule kedalam XSLT stylesheet. Setiap template direpresentasikan dengan elemen xsl:template. Elemen ini harus memiliki kesesuaian atribut dengan XPath pattern dan mengandung template yang di instansiasi dan output jika polanya cocok. Namun ada sedikit terminologi trik; elemen xsl:template merupakan template rule yang mengandung   template. Elemen xsl:template bukan bukan template untuk dirinya sendiri.

Sebagai contoh, kita buat sebuah dokumen XSL dan simpan dengan nama file xsl.xsl untuk menampilkan dokumen diatas sehingga menjadi sesuai dengan yang diinginkan. Sintaks yang dituliskan adalah sebagai berukut :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:output method="html"/>



<xsl:template match="orang">
sebuah tulisan
</xsl:template>
</xsl:stylesheet>

kemudian tambahkan sintaks untuk memanggil dokumen XSL tersebut pada dokumen XML asal sehingga dokumen XML diatas menjadi :

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl" ?>
<orang>
<mahasiswa>
<nim>1112</nim>
<nama>Sisanti</nama>
</mahasiswa>
<mahasiswa>
<nim>1111</nim>
<nama>susilo</nama>
</mahasiswa>
</orang>

Jika dokumen XML diatas dijalankan maka tampak seperti gambar berikut :

Jika kita lihat, bahwa dokumen XSL diatas memiliki elemen template yang akan mencocokan dengan elemen orang akan dococokan dengan template sehingga semua isi dari elemen orang akan digantikan dengan template.



Elemen with xsl:value-of
Elemen xsl:value-of digunakan untuk mengambil nilai dari elemen. Contoh penggunaannya adalah sebagai berikut :

buatlah dokumen XML dengan kode sederhana sebagai berikut :

<?xml version='1.0' ?>
<orang>
<mahasiswa>Susilawati</mahasiswa>
</orang>

sekarang buatlah sebuah dokumen XSL dengan kode sebagai berikut :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="orang">
<xsl:value-of select="mahasiswa"/>
</xsl:template>
</xsl:stylesheet>

Jika kita jalankan, maka hasil yang tampil adalah nilai dari elemen mahasiswa
yaitu Susilawati” seperti tampak pada gambar berikut :


Element xsl:apply-templates
Selanjutnya kita kan mencoba menggunakan elemen apply -templates. apply - templates   berfungsing untuk menempakan isi dari elemennya ke elemen dokumen XML yang sesuai. Sebagai conto, buat file XSL baru edit dokumen yang lama sehingga menjadi :

<?xml version="1.0" encoding="UTF-8"?>



<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html"/>

<xsl:template match="/orang">
<html>
<head>
<title>Testing XSL pada XML</title>
</head>
<body>
<h3>Data Mahasiswa</h3>
<table border="1">
<tr><th>NIM</th><th>Nama</th></tr>
<xsl:apply-templates select="mahasiswa">
</xsl:apply-templates>
</table>
</body>
</html>
</xsl:template>

<xsl:template match="mahasiswa">
<tr>
<td>
<xsl:value-of select="nim"/>
</td>
<td>
<xsl:value-of select="nama"/>
</td></tr>
</xsl:template>
</xsl:stylesheet>

jika kita perhatikan pada dokumen XSL diatas, ada sebuah elemen template yang isinya adalah dokumen HTML yang akan ditempatkan pada elemen root orang pada dokumen XML, yaitu : <xsl:template match="/orang">
... </xsl:template>. Selanjutnya didalan template tersebut tedapat
sebuah elemen apply- templates <xsl:apply-templates select="mahasiswa"> ... </xsl:apply-templates> yang akan dicocokan dengan setiap elemen mahasiswa pada dokumen XML. Pada bagian          bawah,          terdapat          elemen          <xsl:template



match="mahasiswa"> ... </xsl:template> yang  akan dipasangkan dengan elemen mahasiswa pada elemen dokumen XSL yang diperoleh   dari   pencocokan   oleh   elemen   template-apply   sebelumnya. Sedangkan  elemen  value-of pada  <xsl:value-of select="nim"/> yang  ada  pada  template  tersebut  berfungsi  untuk mengambil  nilai  dari  elemen  yang  dimaksud,  misanya  select="nim", maka nilai yang diambil adalah nilai dari elemen nama.

Jika pada bagian elemen apply-templates kita tambahkan sebuah sintak untuk mensorting data, maka data yang akan ditampilkan terlebih dahulu disorting. Ubah sintaksnya menjadi :

.........
<xsl:apply-templates select="mahasiswa">
<xsl:sort select="nim" />
</xsl:apply-templates>
.........

maka tada yang tampil telah tersorting menurut nim, dimana tampilannya dapat kita lihat sebagai berikut :


Built-in Pada Template Rule
Yang paling mendasar dari built-in template rule adalah menyalin nilai text dan atribut node kedalam dokumen output. Seperti pada contoh berikut :

<xsl:template match="text( )|@*">
<xsl:value-of select="."/>
</xsl:template>

node text ( ) merupakan pencocokan untuk semua elemen. Sedangkan
@* merupakan    pencocokan  untuk  semua  atribut.  Jika  template  diatas dituliskan dan, maka dokumen XMLnya jika dijalankan akan seperti pada gambar berikut :

Jika XSL yang digunakan seperti berikut :

<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>

hal ini akan menjamin elemen child juga akan diproses. Meskipun hasilnya terlihat sama seperti pada gambar diatas.

Namun jika kita menggunakan XSL :
<xsl:template
match="processing-instruction()|comment( )"/>

rule ini akan mencocokan pada semua command dan pemprosesan instruksi.



Mode
Terkadang suatu dokumen kita ingin ingin mengubahnya menjadi beberapa dokumen. Untuk itu kita dapat menggunakan mode. Cara kerjanya adalah, sebuah template menempati elemen yang cocok, namun pada template tersebut kita dapat menempatkan template lagi. Penggunaannya dapat menggunakan elemen xsl:apply-template, dimana kita menggunakan atribut select untuk mencocokan dengan template. Contohnya dapat dilihat pada kode dibawah ini :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html"/>

<xsl:template match="/orang">
<xsl:apply-templates select="mahasiswa" />
</xsl:template>

<xsl:template match="mahasiswa"> Sesuatu teks
</xsl:template>
</xsl:stylesheet>

Jika kita jalankan, maka akan tampak seperti gambar berikut :


Template untuk nilai Attribute
Sebelumnya kita telah mengetahui apa yang dimaksud dengan atribut dan kapan kita harus menggunakannya. Dalam XSL kita juga dapat memilih atribut dan mengambil nilainya. Pada dasarnya, untuk pencocokan pada nilai atribut



sama halnya dengan elemen, tetapi kita tambahkan string @ pada awal nama atribut tersebut. Misalnya pada contoh sebelumnya, ubahlah atau buat file baru yang isinya sebagai berikut :

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl" ?>
<orang>
<mahasiswa angkatan='2007' kelas=”XWS-01”>
<nim>1112</nim>
<nama>Sisanti</nama>
</mahasiswa>
<mahasiswa angkatan='2008' kelas=”XWS-02”>
<nim>1111</nim>
<nama>susilo</nama>
</mahasiswa>
</orang>

Selanjutnya kita akan menggunakan dokumen XSL untuk mengatur panampilannya. Buat dokumen XSL baru dengan nama xsl2.xsl. Yang isinya adalah sebagai berikut :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html"/>

<xsl:template match="/orang">
<html>
<head>
<title>Testing XSL pada XML</title>
</head>
<body>
<h3>Data Mahasiswa</h3>
<table border="1">
<tr>
<th>NIM</th>
<th>Nama</th>
<th>Kelas</th>
</tr>



<xsl:apply-templates select="mahasiswa">
</xsl:apply-templates>
</table>
</body>
</html>
</xsl:template>

<xsl:template match="mahasiswa">
<tr>
<td>
<xsl:value-of select="nim"/>
</td>
<td>
<xsl:value-of select="nama"/>
</td>
<td>
<xsl:value-of select="@angkatan"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="@kelas"/>
</td></tr>
</xsl:template>
</xsl:stylesheet>

Jika dokumen XML diatas dijalankan, maka tampilannya akan seperti gambar berikut :


XSLT dan Namespace
Selanjutnya kita akan mecoba membuat XSL pada dokumen yang namespace XML Sekarang   kita   bua sebua dokumen   XML   yang   mengandung namespace. Silahkan ketikan kode berikut ini dan simpan dengan extensi XML
:


<?xml version='1.0' ?>
<bahan>
<a:bambu xmlns:a="Namespace1">
<a:asal>Jawa</a:asal>
<a:jenis>Besar</a:jenis>
</a:bambu>
<b:bambu xmlns:b="Namespace2">
<b:jenis>belah 4</b:jenis>
<b:panjang>3</b:panjang>
</b:bambu>
</bahan>

selanjutnya mari kita buat dokumen XSLnya sebagai berikut :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:b="Namespace2">
<xsl:template match="bahan">
<xsl:value-of select="b:bambu"/>
</xsl:template>
</xsl:stylesheet>

jika kita jalankan, maka akan tampak seperti berikut :



Elemen XSLT
Fitur-ritur yang belum dan tidak akan kita bahas adalah :
26. Named templates
27. Numbering and sorting output elements
28. Conditional processing
29. Iteration
30. Extension elements and functions
31. Importing other stylesheets

silahkan anda cari referensi dan enggunaan untuk fitur ini.