pengertian dan pengenalan XML
Pendahuluan
XML
Extensible Markup Language (XML) adalah sebuah markup language yang mempunyai himpunan aturan untuk pengkodean dokumen dalam format yang dimengerti oleh manusia dan mesin.
Tujuan perancangan dari XML menekankan pada kesederhanaan, keumuman, dan kegunaan melalui Internet. XML adalah format data tekstual dengan dukungan yang kuat melalui Unicode untuk bahasa-bahasa di seluruh dunia. Meskipun desain dari XML memfokuskan pada dokumen, yang digunakan secara luas untuk representasi struktur data yang bebas, sebagai contoh pada web services.
Banyak application programming interfaces (APIs) telah dikembangkan untuk memproses data XML, dan ada beberapa sistem skema untuk membantu dalam proses mendefinisikan dari bahasa berbasis XML.
Pada tahun 2009, ratusan bahasa berbasis XML telah dikembangkan, termasuk RSS, Atom, SOAP, dan XHTML. Format berbasis XML telah menjadi standar bagi banyak kakas office-productivity, termasuk Microsoft Office (Office Open XML), OpenOffice.org dan LibreOffice (OpenDocument), dan iWork dari Apple. XML juga diperlakukan sebagai bahasa baku untuk protokol komunikasi, seperti XMPP (eXtensible Messaging and Presence Protocol).
Terminologi Kunci
Materi pada bagian ini berdasarkan pada spesifikasi XML. Tidak semua dituliskan, hanya terminologi yang sering dipakai saja.
(Unicode) Character
Definisi sebuah dokumen XML adalah kumpulan dari karakter. Hampir semua karakter Unicode yang legal bisa tampil di dokumen XML.
Prosesor dan Aplikasi
Prosesor menganalisa markup, kemudian melempar informasi yang terstruktur ke sebuah aplikasi. Spesifikasi XML mempunyai kebutuhan yang menentukan apa yang harus dilakukan dan tidak dilakukan oleh sebuah prosesor XML, tetapi tidak untuk aplikasinya. Prosesor XML juga sering disebut XML parser.
Markup dan Konten
Karakter yang membangun dokumen XML dibagi menjadi markup dan konten.
Markup dan konten dapat dikenali oleh aplikasi dengan aturan sintaksis yang sederhana. Semua string yang merupakan sebuah markup dapat diawali dengan karakter < dan diakhiri dengan > atau diawali dengan karakter & dan diakhiri dengan ;. String yang bukan merupakan markup adalah konten.
Tag
Tag adalah sebuah markup yang diawali dengan < dan diakhiri dengan >.
Ada tiga jenis tag:
- start-tags; contohnya: <section>
- end-tags; contohnya: </section>
- empty-element tags; contohnya: <line-break />
Elemen
Elemen adalah sebuah komponen dokumen logikal yang diawali oleh sebuah start-tag dan diakhiri oleh end-tag yang sepadan dengan start-tag nya atau berisi hanya sebuah empty-element tag. Karakter-karakter diantara start-tag dan end-tag, jika ada, adalah konten dari elemen, dapat mempunyai markup, elemen-elemen lain, yang disebut child elements. Contoh dari elemen adalah <Greeting>Hello, world.</Greeting>. Yang lainnya <line-break />.
Atribut
Sebuah rangkaian markup yang terdiri dari pasangan nama/nilai yang ada dalam start-tag atau empty-element tag. Pada contoh berikut ini, elemen img mempunyai dua atribut, src dan alt: <img src="madonna.jpg" alt='Foligno Madonna, by Raphael' />. Contoh lain <step number="3">Connect A to B.</step> dimana nama atributnya adalah "number" dan nilainya "3".
Deklarasi XML
Dokumen XML dapat diawali dengan mendeklarasikan beberapa informasi mengenai dirinya, sebagai contoh:
<?xml version="1.0" encoding="UTF-8" ?>
RSS
RSS, awalnya RDF Site Summary (versi 1.0), sering disebut Really Simple Syndication (versi 2.0), adalah sebuah rumpun format web feed yang digunakan untuk mempublikasikan pekerjaan yang memerlukan update secara reguler—seperti blog, berita, audio, dan video—dalam sebuah format yang telah dibakukan. Sebuah dokumen RSS (yang disebut sebuah "feed", "web feed", atau "channel") meliputi sebuah rangkuman teks ataupun teks penuh, ditambah metadata seperti tanggal terbit dan pembuat/penulis.
RSS menguntungkan para penerbit untuk menggabungkan konten secara otomatis. Sebuah format file XML memungkinkan informasi diterbitkan satu kali dan dilihat melalui banyak sekali aplikasi yang berbeda. Hal ini juga menguntungkan para pembaca yang ingin berlangganan update secara berkala dari banyak website favorit mereka ke dalam satu tempat.
RSS feed dapat dibaca menggunakan perangkat lunak yang disebut "RSS reader", "feed reader", atau "aggregator", dengan platform web-based, desktop-based, atau mobile-device-based. Pengguna perangkat lunak tersebut dapat berlangganan feed dengan memasuki URI feed-nya, atau dengan mengklik sebuah ikon feed pada web browser yang menginisiasi proses berlangganan. Perangkat lunak pembaca RSS memeriksa feed-feed yang dilanggan oleh pengguna secara reguler untuk entry baru, mengunduh update tersebut, dan menyediakan tampilan antarmuka untuk memonitor dan membaca feed-feed tersebut. RSS memungkinkan para pengguna untuk menghindari memeriksa semua website favorit mereka secara manual, sebagai gantinya, mereka berlangganan ke website tersebut melalui RSS reader.
Contoh RSS:
<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>RSS Title</title> <description>This is an example of an RSS feed</description> <link>http://www.someexamplerssdomain.com/main.html</link> <lastBuildDate>Mon, 06 Sep 2010 00:01:00 +0000 </lastBuildDate> <pubDate>Mon, 06 Sep 2009 16:45:00 +0000 </pubDate> <ttl>1800</ttl> <item> <title>Example entry</title> <description>Here is some text containing an interesting description.</description> <link>http://www.wikipedia.org/</link> <guid>unique string per item</guid> <pubDate>Mon, 06 Sep 2009 16:45:00 +0000 </pubDate> </item> </channel> </rss> |
Contoh Penggunaan RSS
1. Membaca headline berita, melalui browser
Pada browser-browser masa kini, kita dapat berlangganan feed untuk headline berita dari berbagai website berita. Contoh pada gambar diatas
adalah fitur pembaca RSS dari Mozilla Firefox.
2. Menjadikan konten web/blog lebih kaya.
Kita dapat memasukkan konten-konten dari website lain ke website kita dengan menggunakan RSS. Banyak plugin atau service yang bisa digunakan untuk menampilkan feed RSS dari web lain.
3. News aggregator
News aggregator adalah sebuah aplikasi (biasanya berupa aplikasi desktop client, meskipun ada yang berupa aplikasi web) yang dapat mengumpulkan konten-
konten dari RSS. Beberapa aplikasi news aggregator mempunyai kemampuan untuk memposting berita-berita tersebut ke blog/website pribadi penggunanya.
Masih banyak kegunaan RSS yang lain, silahkan baca lebih lanjut mengenai RSS di internet.
Latihan 1. Membuat Feed RSS dengan PHP
◦ Buat database rss_feeds dengan skrip berikut:
CREATE DATABASE `rss_feeds` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `rss_feeds`;
CREATE TABLE IF NOT EXISTS `feeds`
( `id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`pubDate` datetime NOT NULL,
`link` varchar(255) NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`id`) )
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
◦ Buat folder baru dengan nama rss_[nrp] pada htdocs
◦ Buat file database.php, dengan isi sebagai berikut
- Buat file database_config.php, dengan isi sebagai berikut
◦ Buat file rss_feed.php, dengan isi sebagai berikut
<?php
class Feed{ private $items = array(
);
private $channels = array( );
public function __construct( ){
$count =
func_num_args();
$parameters = func_get_args();
if( $count == 3 ){
$this->setFeedTitle(
$parameters[0] );
$this->setFeedLink(
$parameters[1] );
$this->setFeedDesc(
$parameters[2] );
}
else if ( $count == 1 AND is_array(
$parameters[0] ) )
foreach( $parameters[0] as $key => $value
)
if( $key == 'title' )
$this->setFeedTitle( $value );
else if( $key == 'link' )
$this->setFeedLink( $value );
else if( $key == 'description' )
$this->setFeedDesc( $value );
else if( $key == 'generator' )
$this->setFeedGenerator( $value
);
else if( $key == 'language' )
$this->setFeedLang( $value );
else if( $key == 'image' )
$this->setFeedImage( $value[0],
$value[1], $value[2] );
else $this->setChannelElm( $key, $value
);
}
/* * Function responsible of treating the
channel elements
* Responsible of making the conversion of
arrays to tags */
private function meta_array( $array
){
$output = '';
foreach( $array as $key => $value )
if( is_array( $value ) )
if( is_array( $value ) )
$output .= PHP_EOL . "<$key>" . $this->meta_array(
$value ) . "</$key>" . PHP_EOL;
else
$output .= PHP_EOL . "<$key>$value</$key>" .
PHP_EOL;
return $output;
}
/*
* Sets any channel element
*/
public function setChannelElm( $tagName, $content ){
$this->channels[ $tagName ] =
$content ;
}
public function setFeedTitle( $title
){ $this->setChannelElm( 'title', $title );
}
/* * Sets channel link */
public function setFeedLink( $link ){
$this->setChannelElm( 'link', $link );
}
/* * Sets channel description */
public function setFeedDesc( $desc ){
$this->setChannelElm( 'description', $desc);
}
/* * Sets channel language */
public function setFeedLang( $lang='en_en' ){
$this->setChannelElm( 'language', $lang );
}
/*
* Sets channel image
*/
public function setFeedImage( $title, $imag, $link, $width = '',
$height = '' ){
$this->setChannelElm('image', array(
'title' => $title,
'link'=> $link,
'url' => $imag,
'width' => $width,
'height' => $height
) );
}
/*
* Sets channel Feed Generator Script
*/
private function setFeedGenerator( $desc = 'RSS Feed Generator -
http://www.example.com/rss' ){
$this->setChannelElm('generator', $desc );
}
private function genHead( ) {
echo '<?xml version="1.0" encoding="utf-8"?>'
. PHP_EOL . '<rss version="2.0">' . PHP_EOL;
}
private function genChannel( ){
echo '<channel>' . PHP_EOL;
echo $this->meta_array( $this->channels );
}
/*
* Add each Item object to an array to be treated after
*/
public function addItem( $item ){
if( is_array( $item ) )
foreach( $item as $itm )
$this->addItem( $itm );
array_push( $this->items, $item );
}
private function genBody( ){
foreach( $this->items as $item )
$item->parseItem( );
}
private function genBottom( ){
echo '</channel>' . PHP_EOL . '</rss>';
}
/*
* Generates the Feed
*/
public function genFeed( ){
header( "Content-type: text/xml" );
$this->genHead( );
$this->genChannel( );
$this->genBody( );
$this->genBottom( );
}
}
/***************** Item Class ***************** */
class Item{
private $elements = array( );
public function __construct( ) {
$count = func_num_args();
$parameters = func_get_args();
if( $count == 3 ) {
$this->setItemTitle( $parameters[0] );
$this->setItemLink( $parameters[1]
);
$this->setItemDesc( $parameters[2] );
}
else if ( $count == 1 AND is_array( $parameters[0] ) )
foreach( $parameters[0] as $key => $value )
if( $key == 'title' )
$this->setItemTitle( $value );
else if( $key == 'link' )
$this->setItemLink( $value );
else if( $key == 'desc' )
$this->setItemDesc( $value );
else if( $key == 'date' )
$this->setItemDate( $value );
else if( $key == 'author' )
$this->setItemAuthor( $value );
else if( $key == 'category' )
if( is_array( $value ) )
$this->setItemCat( $value[0], $value[1] );
else
$this->setItemCat( $value );
else if( $key == 'comments' )
$this->setItemComm( $value );
else if( $key == 'source' )
$this->setItemSource( $value );
else if( $key == 'enclosure' )
$this->setItemEnclosure( $value[0], $value[1], $value[2] );
else
if( is_array( $value ) )
$this->setItemElm( $key, $value[0], $value[1] );
else
$this->setItemElm( $key, $value );
}
/*
* Sets any item element
*/
public function setItemElm( $tagName, $content, $attributes = '' ){
$this->elements[ $tagName ] = array ( $tagName, $content ,
$attributes );
}
/*
* Sets item title
*/
public function setItemTitle( $title ){
$this->setItemElm( 'title', $title );
}
/*
* Sets item link
*/
public function setItemLink( $link ){
$this->setItemElm( 'link', $link );
}
/*
* Sets item description
*/
public function setItemDesc( $desc ){
$this->setItemElm( 'description', $desc );
}
/*
* Sets item author
*/
public function setItemAuthor( $author ){
$this->setItemElm( 'author', $author );
}
/*
* Sets item category
*/
public function setItemCat( $cat, $link = '' ){
if( !empty( $link ) ) $link = ' ' . $link;
$this->setItemElm( 'category', $cat, $link );
}
/*
* Sets item comments page
*/
public function setItemComm( $comm ){
$this->setItemElm( 'comments', $comm );
}
/*
* Sets item publication date
*/
public function setItemDate( $date ){
$this->setItemElm( 'pubDate', $date );
}
/*
* Sets item source
*/
public function setItemSource( $source ){
$this->setItemElm( 'source', $source );
}
/*
* Sets item enclosure
*/
public function setItemEnclosure( $link, $lenght='auto', $type ){
$attributes = ' url="' . $link . '" lenght="' . $lenght
. '" type="' . $type . '"';
$this->setItemElm( 'enclosure', '', $attributes );
}
/*
* Parses the Item elements defined by the user and prints it on the
output
*/
public function parseItem( ){
echo '<item>' . PHP_EOL;
foreach( $this->elements as $elm )
echo '<' . $elm[0] . $elm[2] . '>' . $elm[1] . '</' . $elm[0]
. '>' . PHP_EOL;
echo '</item>' . PHP_EOL;
}
}
?>
|
◦ Buat file rss_generator.php, dengan isi sebagai berikut
Buka di browser anda dengan alamat http://localhost/rss_[nrp]/rss_generator.php
akan tampil halaman seperti pada gambar berikut:
Membaca RSS dengan PHP
Untuk membaca RSS feed dengan PHP, kita dapat menggunakan fungsi simplexml_load_file(). Fungsi ini ada sejak PHP 5.0. Fungsi ini akan mengubah sebuah dokumen XML menjadi sebuah objek.
filename Path dari file XML
parameter
class_name
Parameter opsional ini dapat digunakan sehingga fungsi simplexml_load_file() akan mengembalikan objek dari kelas tersebut. Kelas tersebut harus menginduk (extend) kelas SimpleXMLElement.
options
Sejak PHP 5.1.0 dan Libxml 2.6.0, kita bisa menggunakan parameter options untuk menspesifikasikan parameter-parameter tambahan untuk Libxml.
ns
Namespace prefix atau URI.
is_prefix TRUE
jika ns adalah prefix, FALSE jika ns adalah URI; default isi parameter ini
FALSE.
Latihan 2. Membaca RSS dengan PHP
Buat file rss_reader.php, dengan isi sebagai berikut
Akan tampil halaman seperti pada gambar berikut:
sekian terima kasih ,,,