Minggu, 04 April 2010

Tugas2. Web Architecture ( XSLT )


Mengenal XSL

XSL (Extensible Stylesheet Language) merupakan bahasa pemformatan untuk dokumen XML. Istilah XSLT digunakan untuk menggambarkan bagaimana sebuah dokumen XML di transformasikan ke dokumen XML lain dengan menggunakan aturan pemformatan XSL.

W3C membagi XSL menjadi 2 bagian, yaitu

1.      Transformasi (XSLT)
2.      XSL Formating Object (XSLFO)
Kita akan memfokuskan pada bagian pertama, yaitu XSLT untuk memformat dokumen XML menjadi sebuah dokumen HTML. Mentransformasikan XML artinya melakukan analisa terhadap isi XML dan melakukan suatu tindakan tertentu berdasarkan elemen apa yang ditemukan. Kita dapat menggunakan XSLT untuk menentukan hasil output berdasarkan kriteria yang diberikan.


Sejarah XSL

1. CSS (Cascade Style Sheet)

Sebenarnya, kita cukup menggunakan CSS untuk melakukan pemformatan sebuah dokumen XML ke HTML, namun Anda tidak bisa melakukan pemformatan dokumen XML ke dokumen lain dengan menggunakan CSS. Anda butuh XSLT atau XSLFO, sehingga lebih baik jika Anda belajar XSL.

2. XQL (XML Query Language)

Sejak XML membolehkan siapun untuk mendefinisikan tag-tag elemen untuk dokumen, tarnformasi satu dokumen XML ke beberapa format lain menjadi suatu kebutuhan umum. Selain itu, sejak browser tidak dapat menampilkan dokumen XML secara langsung, dibutuhkan adanya suatu transformasi dari XML ke HTML agar browser dapat menampilkan dokumen XML sebagai dokumen web. Untuk menjawab kebutuhan tersebut, pada September 1998, Microsoft, Texcel, dan webMethods mengajukan proposal ke W3C yang disebut dengan XML Query Language atau XQL. Salah satu bagian dari proposal tersebut adalah menggunakan pola XSL sebagai dasar mekanisme query untuk suatu dokumen XML.

3. eXtensible Stylesheet for Transformation (XSLT)

Pada bulan Mei tahun 1999, W3C memutuskan untuk menggabungkan semua penelitian tentang model query dokumen XML dan dihasilkan eXtensible Stylesheet Language for Transformation atau XSLT.

4. XPath

Selama pengembangan XSLT, terdapat anggota keluarga XML baru yang didefinisikan, yaitu XPointer. XPointer mengambil ide sebuah tag anchor untuk sebuah level baru. Baik XPointer dan XSLT, memerlukan cara untuk menunjuk sembarang bagian dari dokumen XML. XSLT memerlukan hal tersebut untuk memilih bagian dari
dokumen yang harus ditransformasikan dan Xpointer untuk mendefinisikan hubungan (link) antar dua dokumen. Solusinya adalah diperlukan adanya aturan atau sintak baru yang dapat digunakan pada XSLT ataupun Xpointer, yang disebut dengan XPath. Walaupun XPath merupakan subset dari XSLT, namun XPath dapat digunakan untuk dirinya sendiri.

Model Pemrosesan XSLT

Untuk dapat melakukan transformasi sebuah dokumen XML dengan menggunakan bahasa XSLT, berikut adalah cuplikan dari subbab 5.1 dari spesifikasi XSLT yang selengkapnya dapat Anda baca di http://www.w3.org/TR/xslt

"A list of source nodes is processed to create a result tree fragment. The result tree is constructed by processing a list containing just the root node. A list of source nodes is processed by appending the result tree structure created by processing each of the members of the list in order. A node is processed by finding all the template rules with patterns that match the node, and choosing the best amongst them; the chosen rule's template is then instantiated with the node as the current node and with the list of source nodes as the current node list. A template typically contains instructions that select an additional list of source nodes for processing. The process of matching, instantiation and selection is continued recursively until no new source nodes are selected for processing."

Dari cuplikan tersebut dapat disarikan sebagai berikut :

1. Dokumen XML diparsing ke dalam struktur pohon (tree) sumber
2. XSLT diparsing ke dalam struktur pohon pohon stylesheet
3. Pemroses mengidentifikasikan template untuk root dari struktur pohon sumber dan
    pemrosesan terjadi secara rekursif.
a. Aturan pada template di buat objek baru (instantiated)
b. sebuah template berisi instruksi yang akan dikerjakan, atau
c. Content di duplikasi ke result tree     
d. Pemrosesan terjadi dalam suatu urutan dokumen.

Sebelum ke pembahasan lebih detail, perhatikan contoh XML sederhana berikut ini :

bab.xml

XML
Bab ini akan membahas tentang file XML yang dapat mendeskripsikan suatu struktur data

Sekarang cobalah Anda membuat sebuah file XSL berikut :

bab.xsl

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">

Setelah itu, dari pustaka SAXON, jalankan perintah berikut pada shell prompt Anda :

prompt> java com.icl.saxon.StyleSheet bab.xml bab.xsl
xmlns="http://www.w3.org/TR/xhtml1/strict">

Catatan :

a. perlu diingat, bahwa posisi direktori Anda sekarang adalah direktori dimana berkas
bab.xml dan bab.xsl berada.

b. Instalasi SAXON :

c. ekstrak berkas saxon.jar dan saxon-fop.jar ke direktori $JAVA_HOME/jre/lib/ext

Dari definisi XSL dan hasil yang Anda dapat, berikut struktur dokumen XSL

1. Elemen

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
atribut xmlns:xsl memberikan URI dari namespace XSLT yang akan digunakan

2. Elemen : merupakan elemen yang mendefinisikan teks keluaran apa yang akan dihasilkan dari transformasi nantinya. Perlu diketahui : teks pada elemen template akan diduplikasi ke source tree xml sesuai dengan nilai atribut match.

XPath
Xpath adalah pola pencocokan yang dapat dimasukkan pada atribut match dari elemen xsl : template berikut

Pola-pola pencocokan untuk tiap elemen dokumen XML harus mengikuti aturan XPath. Aturan penulisan XPath sama dengan sistem file pada Unix/Linux. Jika dimulai dengan /
(slash), akan mewakili absolut path terhadap elemen yang Anda sebutkan nantinya. Berikut adalah beberapa aturan pola pada XPath :

/AAA (memilih elemen root AAA)

/AAA/CCC (memilih semua elemen CCC yang merupakan anak dari AAA).


/AAA/DDD/BBB (memilih semua elemen BBB yang merupakan anak dari DDD, dimana DDD merupakan anak dari AAA)


//BBB (jika dimulai dengan //, berarti semua elemen dalam dokumen XML yang memenuhi kriteria BBB akan terpilih)


//DDD/BBB (pilih semua elemen BBB yang merupakan anak dari elemen DDD)



/AAA/CCC/DDD/* (tanda * akan memilih semua elemen yang memiliki lokasi diawali dengan /AAA/CCC/DDD)


/*/*/*/BBB (pilih semua elemen BBB yang memiliki 3 elemen induk)


//* (memilih semua elemen)


/AAA/BBB[1] (Memilih elemen BBB pertama yang merupakan anak elemen AAA. Ekspresi yang terletak di dalam [ ], nantinya dapat berisi suatu elemen. Angka yang terletak di dalam [ ] menunjuk posisi elemen yang terpilih.)


/AAA/BBB[last()] (ekpresi last() akan memilih elemen BBB terakhir yang merupakan anak dari elemen AAA)


//@id (memilih semua atribut id. Suatu atribut dideklarasikan dengan @)


//BBB[@id] (memilih elemen BBB yang memiliki atribut id)


//BBB[@*] (memilih semua elemen BBB yang memiliki sembarang atribut)


//BBB[not(@*)] (memilih semua elemen BBB yang tidak memiliki atribut. Ekspresi not() menunjukkan logika kebalikan)


//BBB[@id='b1'] (memilih elemen BBB yang memiliki nilai atribut ID adalah b1. Disini nilai suatu atribut dapat dijadikan sebagai pola pilihan)


//BBB[normalize-space(@nama)='bbb'] (memilih elemen BBB yang memiliki nilai atribut nama adalah 'bbb', dimana spasi di awal atau di akhir diabaikan. Disini ekspresi normalize-space() akan menghilangkan spasi di awal atau di akhir)


//*[count(BBB)=2] (memilih elemen yang memiliki 2 elemen anak BBB. Di sini fungsi count() akan mengembalikan jumlah elemen yang terpilih)


Bagaimana dengan pola //*[count(*)=2] ?

//*[name()='BBB'] (memilih semua elemen dengan nama BBB, sama dengan pola //BBB)


//*[starts-with(name(),'B')] (memilih semua elemen yang namanya dimulainya dengan B)


//*[contains(name(),'C')] (memilih semua elemen yang namanya mengandung huruf C)


//*[string-length(name()) = 3] (memilih elemen yang panjang namanya adalah 3 karakter)


Catatan : untuk operator perbandingan, Anda tetap dapat menggunakan =, >, >=, <, <= atau <>.

//CCC | //BBB (memilih semua elemen CCC atau BBB)


Bagaimana dengan /AAA/EEE | //BBB dan /AAA/EEE | //DDD/CCC | /AAA | //BBB ? /child::AAA (sama dengan pola /AAA. Axis child:: berisi elemen anak dari suatu kontek node) /child::AAA/child::BBB (sama dengan /AAA/BBB ataupun /child::AAA/BBB /descendant::* (memilih semua descendant dari root dokumen, sehingga semua elemen akan terpilih)

/AAA/BBB/descendant::* (memilih semua descendant dari /AAA/BBB)


//CCC/descendant::* (memilih semua elemen yang memiliki ancestor CCC)


//CCC/descendant::DDD (memilih semua elemen DDD yang memiliki ancestor CCC)


//DDD/parent::* (memilih semua parent dari elemen DDD)


XSL

Sebagai acuan, kita akan menggunakan dokumen XML bab.xml yang sudah kita gunakan di awal. Baik, daripada bolak-balik kertas Anda atau capek melakukan scrolling dokumen, berikut adalah dokumen bab.xml tersebut :

XML
Bab ini akan membahas tentang file XML
yang dapat mendeskripsikan suatu struktur data

Sekarang, dari berkas bab.xsl Anda sebelumnya cobalah Anda ubah dan sesuaikan dengan

contoh XSL berikut :

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">


Anda perhatikan, pada XSL kita, tepatnya untuk template elemen “judul”, tidak ada elemen , artinya nilai dari source tree untuk node “judul” tidak di duplikasi.

Coba Anda transformasikan :

prompt> java com.icl.saxon.StyleSheet bab.xml bab.xsl
xmlns="http://www.w3.org/TR/xhtml1/s
trict">

Bab ini akan membahas tentang file XML
yang dapat mendeskripsikan suatu struktur data

OK, kita akan membuat definisi template untuk elemen “judul”. Dan kita ingin memasukkan nilai dari elemen “judul” pada template root (/). Untuk dapat melakukan hal ini, gunakan elemen

Cobalah definisi XSL berikut :

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">

dan lakukan transformasi :

priompt> java com.icl.saxon.StyleSheet bab.xml bab.xsl
xmlns="http://www.w3.org/TR/xhtml1/s
trict">
XML
Bab ini akan membahas tentang file XML yang dapat mendeskripsikan suatu
struktur data

Anda perhatikan ekspresi XPath pada atribut select, yaitu “//judul” dan “//teks”. Anda dapat menggantikan dengan pola lain, misalnya “/bab/judul” atau “/bab/teks”. Hal baru lainnya adalah pada elemen , yaitu jika Anda berikan hanya dengan elemen seperti ini berarti Anda mengambil nilai dari setiap elemen di mulai dari yang tersebut pada atribut match dari elemen . Jika Anda ingin hanya mengambil nilai dari suatu elemen tertentu beserta elemen anaknya, Anda dapat menggunakan atribut select seperti pada contoh berikut :


Lalu bagaimana caranya untuk mengambil nilai atribut? Seperti yang sudah dipelajari pada bagian XPath, kita dapat menggunakan notasi @nama_atribut. Sekarang cobalah Anda ubah XSL Anda menjadi seperti berikut ini :

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
,
select="//judul"/>

Dan setelah Anda transformasikan, dokumen HTML yang dihasilkan :

5, XML
Bab ini akan membahas tentang file XML
yang dapat mendeskripsikan suatu struktur data
Mari kita mencoba untuk memformat elemen istilah. Ubahlah XSL Anda menjadi berikut :
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
,
select="//judul"/>

Setelah Anda transformasikan, dokumen yang Anda dapatkan :

5, XML
Bab ini akan membahas tentang file XML
yang dapat mendeskripsikan suatu struktur data

Tidak ada komentar:

Posting Komentar