Sunday, 27 September 2015

XPath (Extensible Path Language)

XPath  (Extensible Path Language) bukanlah bahasa XML, namun, XPath merupakan  bahasuntuk mengalamati  bagian-bagian  didalam  dokumen
XML. Dengan menggunakan XPath, kita dapat secara langsung menunjuk
alamat sebuah elemen yang akan diproses oleh aplikasi. XPath digunakan bersamaan dengan XSLT dimana query atau sintaks XPath ini ditulis didalam bagian XLST untuk menampilkan data yang sesuai.

Expresi XPath dapat direpresentasikan menggunakan angka, sting ataupun boolean. Hal ini memungkinkan XSLT stylesheets untuk melakkan fungsi aritmatik sederhana untuk keperluan penomoran, angka cross-referencing, tabel dan equation. Dengan string manipulation pada XPath memungkinkan XSLT dapat memproses bilai elemen yang ada, misalnya menambahkan atau mengalikan dengan sesuati pada dua digit terahit tahun, dsb


Struktur Dokumen XML
Struktur dokumen XML berbentuk tree yang terdiri dari node-node, dimana masing-masing  node  dapat  berisi  beberapa  node  lainnya.  Terdapat  satu elemen root dimana elemen tadi berisi semua elemen lainnya. Struktur ini mirip dengan struktur penyimpanan data pada  hardisk komputer, dimana node-node tersebut diibaratkan dengan folder dimana masing-masing folder dapat berisi folder lain. Dalam hal ini, XPath merupakan bahasa untuk memilih node-node tersebut untuk mengarahkan pencarian data pada data yang dituju. Dari perspektif XPath, ada tujuh jenis node :
32.   The root node
33.   Element nodes
34.   Text nodes
35.   Attribute nodes
36.   Comment nodes
37.   Processing-instruction nodes
38.   Namespace nodes

Satuhal yang perlu diperhatikan dalam halini adalah struktur atau konstruksi yang tidak termasuk adalah : CDATA section, entity references, dan deklarasi tipe dokumen. XPath akan beroperasi pada dokumen XML setelah semua item telah digabungkan ke dalam dokumen.


Location Paths
Location path akan mengidentifikasi satu set node dalam dokumen, node ini dapat berisi satu node atau lebih mungkin saja kosong. Elemen node ini dapat berisi : node atribut , node nama, node  text, node  komentar, node instruksi pemrosesan, node root, atau kompbinasinya.

Elemen root merupakan elemen paling luar dari setiap dokumen. Elemen ini dapat dikatakan juga sebagai induk dari semua dokumen yang ada. Setiap dokumen XML pasti memiliki satu elemen root. Untuk mengrahkan kita kepada elemen root, kita dapat mengaksesnya dengan menggunakan perintah
: slash ( / ) yang menunjukan posisi absolut. Sebagai contoh,   kita dapat menggunakan dokumen XML sebagai berikut, dab buatlah dokumen tersebut dan simpan menjadi contoh7_1.xml :

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



<orang>
<!--Data Mahasiswa Pertama-->
<mahasiswa angkatan='2007' kelas=”XWS-01”>
<nim>1112</nim>
<nama hobi='Membaca'>Sisanti</nama>
<teman>
<nim>1113</nim>
<nama>Juliana</nama>
</teman>
</mahasiswa>
<!--Data Mahasiswa Kedua-->
<mahasiswa angkatan='2008' kelas=”XWS-02”>
<nim>1111</nim>
<nama>susilo</nama>
<teman>
<nim>1114</nim>
<nama hobi='Olahraga'>Julianto</nama>
</teman>
</mahasiswa>
</orang>

Sebagai contoh XSLT template rule menggunakan pola XPath slash untuk mencocokan entri input dokumen tree dengan dan menuliskannya didalam dokumen html.

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

jika kita jalankan dokumen XML diatas, maka tampilannnya akan seperti pada gambar :
Artinya adalah kita menempatkan template tersebut pada elemen root.

Lokasi path selanjutnya adalah nama elemen single. Path ini akan memilih semua elemen anak dari konteks node denga spesifikasi nama yang sama. Misalnya jika kita ingin mengunjungi elemen nama, maka kita dapat memanggilnya dengan /orang/mahasiswa/nama. Pada bab sebelumnya sebenarnya kita telah membuat dokumen XSL dengan menerapkan XPath. Namun itu hanya sekilas. Sekarang kita akan mempelajarinya secara lebih mendalam. Buatlah sebuah file XSL dengan kode

<?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="/orang/mahasiswa/nama"/>
</xsl:template>
</xsl:stylesheet>

Jika  kita  jalankan  dokumen  XML  diatas,  maka  tampilannya  akan  tampak seperti berikut :
Dari kode diatas, maksudnya adalah template di-match-kan dengan elemen orang pada dokumen XML dan isi dari template tersebut adalah hasil select dari elemen nama dimana posisinya  adalah  /orang/mahasiswa/nama pada bagian pertama.

Kita juga dapat menggunakan pemilihan lokasi dengan menggunakan double slash (//) dimana ini berfungsi untuk memilih seluruh elemen yang dimaksud tampa memperhatikan kedalamannya. Misalnya kita ingin memilih semua elemen nama didalam dokumen, maka tuliskan XPath-nya menjadi //nama. Misalnya dengan XSL seperti berikut :

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


Jika dijalankan akan tampil seperti pada gambar berikut :
Selain itu, kita juga bisa menggunakan karakter bintang ( * ) untuk menuju ke lokasi elemen apapun. Kita juga bisa mengkombinasikan * dengan XPath yang lain. Misalnya dengan menggunakan /*/*/nama. Artinya, kita memilih elemen nama yang berada pada kedalaman 2 hirarki dari elemen root. Contoh penggunaannya adala 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:apply-templates select="/*/*/nama"/>
</xsl:template>
</xsl:stylesheet>

dengan menggunakan karakter @, kita juga bisa memilih atribut-atribut yang ada pada sebuah elemen. Misalnya kita ingin memilih semua elemen nama yang memiliki atribut hobi, maka penulisanny adalah : //nama[@hobi] sehingga sintaks XSLnya adalah sebagai berikut :

<xsl:template match="/orang">
<xsl:apply-templates select="//nama[@hobi]"/>
</xsl:template>

selain itu, kita juga dapat memilih elemen yang yang nilai atributnya tertentu denga menggunaka //nama[@hobi='Olahraga'] Jika   dituliskan,   maka kodenya seperti berikut :



<xsl:template match="/orang">
<xsl:apply-templates select="//nama[@hobi='Olahraga']"/>
</xsl:template>

Kita juga dapat menggunakan string garis vertikal ( | ) untuk memilih lebih dari satu eleme. Misalnya kita ingin memilih elemen /orang/mahasiswa/nama dan nim     dimanapun     posisinya,     maka     dapat     kiga     tuliskan     dengan
/orang/mahasiswa/nama | //nim sehingga kode XSLnya adalah sebagai berikut :

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

Jika menjalankan sintaks diatas, maka hasilnya adalah sebagai berikut :


Kita juga dapat menggunakan tanda double period ( .. ) untuk keluar dari elemen asal menuju elemen induk. Misalnya pada sintaks berikut :

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



Maksud sintaks diatas adalah kita akan menampilkan nama yang ada pada lokasi /orang/mahasiswa/teman/nama, namun template yang akan ditempati adalah elemen /orang/mahasiswa” sehingga posisi kita saat itu berada didalam elemen mahasiswa. Saat kita memilih nilainya, kita keluar terlebih dahulu dari elemen mahasiswa dengan string .., namun kita masuk kembali kedalamannya hingga ke elemen nim. Jika kita jalankan dokumen XML tersebut, maka tampilannya dapat kita lihat seperti pada gambar berikut :

kita  juga  dapat  menggunakan    comment(), text().  comment() Digunakan untuk menempatkan template pada komentar. Perhatikan script dibawah :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="comment()">
Sesuatu Teks
</xsl:template>
</xsl:stylesheet>



Jika kita tampilkan, maka terlihat seperti pada gambar berikut dibawah ini :

Sedangkan text() digunakan memilih teks atau isi dari elemen. Contoh penggunaan nya adalah sebagai berikut :


<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates
select="/orang/mahasiswa/nama/text()"/>
</xsl:template>
</xsl:stylesheet>



Jika dijalankan, maka hasil tampilannnya dapat kita lihat seperti berikut :


Menggabungkan Location Part
Penggabungan path berguna untuk memilih elemen yang berada didalam elemen lain atau atribut yang berada pada elemen lain atau lebih jauh berada didalam  elemen  lain.  Misalnya  kita  telah  mengenal  xpath  //nama,  /nama,
@kelas dan sebagainya. Dalam penggabungannya bisa saja kita gunakan seperti berikut :

//mahasiswa/nama
untuk memilih semua elemen nama yang berada didalam elemen mahasiswa
dimana elemen mahasiswanya berada didalam elemen apapun.

untuk   memilih   atribut   angkata yang   berada   didala semua  elemen
mahasiswa.

Untuk prakteknya kita bahas pada sebelumnya.

Predikat
Kita dapat memilih elemen yang sesuai dengan yang kita inginkan. Kita dapat menggunakan  ekspresi  <,  >,  <=,  >=  dan  !=.  Misalnya  kita ingin  memilih



elemen  mahasiswa  yang  angkatannya  lebih  dari  2007,  maka  penulisanhya seperti berikut :

...
<xsl:apply-templates select="/mahasiswa[@angkatan>=2007]"/>
...


Unabbreviated Location Paths
Unablbreviated location path merupakan penulisan lain untuk path. Misalnya untuk penulisan xpath :
people/person/@id maka penulisannya menjadi : child::people/child::person/attribute::id

General XPath Expressions
Layaknya bahasa pemprograman, Pada XPath kita juga dapat memberikan expresi aritmatik, XPath juga dapat mengambalikan nilai number, boolean, dan string.

XPath menyediakan lima operator aritmatika dasar yaitu :

+
Addition

-
Subtraction
*
Multiplication
div
Division
mod
Taking
the
remainder




Conto  <xsl:value-o select="6*7"/> dala templat XSL akan menghasilkan  nilai  42.  contohnya  mari  kita  buat  file  XSL  yang  akan



menambahkan angkatan menjadi tahun lulus, asumsi bahwa mahasiswa akan lulus tepat tiga tahun. Sintaksnya adalah 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:apply-templates select="mahasiswa" />
</xsl:template>
<xsl:template match="mahasiswa">
<xsl:value-of
</xsl:template>
</xsl:stylesheet>

kita juga dapat membuat XPath dengan ekpresi boolean. Perhatikan Contoh berikut :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/orang">
<html><table border='1'>
<xsl:apply-templates select='mahasiswa'/>
</table></html>
</xsl:template>
<xsl:template match="mahasiswa">
<xsl:if test="nim='1111' or nim='1112'">
<tr><td><xsl:value-of
select="nama"/></td></tr>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

Jika dokumen tersebut dijalankan, maka tampilannya akan tampak seperti berikut :
Fungsi XPath
Terdapat beberapa fungsi XPath yang bisa digunakan dalam mengelola dokumen. Misalnya kita ingin memilih elemen ke-n pada dokumen, maka kita dapat  menggunakan  sintaks  //nama_elemen[n] (n  =  elemen  ke  n). Contohnya kita memilih elemen pertama mahasiswa maka skriptnya adalah :
/orang/mahasiswa[1]. atau kita juga dapat menggunakan fungsi position(), yaitu dengan sintaks //nama_elemen[position()=n] sehingga              penulisannya              sintaksnya              menjadi              :
/orang/mahasiswa[position()=1]. Contoh lain, kita juga bisa memilih elemen yang mengandung tepat dua elemen lain, maka sintaksnya adalah //*[count(*)=2].






No comments:

Post a Comment