pengertian dan pengenalan XML
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 ,,,