Skip navigation

Tag Archives: xml


Since I used to work using Java before went to PHP on daily basis, I really like using Apache Ant. Actually there is a similar technology called Phing that is fully integrated with PHP, i.e. you can use a PHP code in the script. Which is good, by the way.

So recently I need to create a gzipped version to each files in a directory for the static assets. Below is the Apache Ant snippet to do that. Enjoy.

<target name="compress-assets">
    <apply executable="gzip">
        <fileset dir="${assets.dir}">
            <include name="**/*.js"/>
            <include name="**/*.css"/>
        </fileset>
        <arg value="-c" />
        <srcfile />
        <redirector>
            <outputmapper id="out" type="glob" from="*" to="${assets.dir}/*.gz"/>
        </redirector>
    </apply>
</target>

The script above basically applies Gzip executable to each JS and CSS file in the directory to their js.gz and css.gz counterpart.


OWL atau Web Ontology Language merupakan bahasa untuk mendefinisikan dan menginstansiasi ontologi sebuah web. Sementara itu ontology merupakan ilmu untuk mendeskripsikan jenis-jenis entitas yang ada di dunia dan bagaimana mereka terkait satu sama lain. Sebuah ontologi OWL mencakup deskripsi dari sebuah kelas, properti, dan instansiasi kelas tersebut.

OWL dibangun di atas skema RDF. OWL dan RDF memiliki fungsi dasar yang sama: mendefinisikan kelas, properti, dan relasi. Meski demikian OWL menawarkan kapabilitas lebih daripada RDF dalam mendefinisikan relasi-relasi yang kompleks seperti subClass, restriction, disjoint, constraint, dan juga cardinality.

<owl:Class rdf:ID="ExpensiveSLR">
   <rdfs:subClassOf rdf:resource="#SLR"/>
     <rdfs:subClassOf>
       <owl:Restriction>
         <owl:onProperty rdf:resource="#owned_by"/>
         <owl:allValuesFrom rdf:resource="#Professional"/>
       </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>

Di dalam dunia web sekarang ini, pengembangan web yang ada hanya memfokuskan pengguna kepada pengguna manusia. Dengan menggunakan HTML, data yang ditampilkan dalam sebuah web hanya berisi informasi yang sifatnya presentasi bagi manusia. Jika sebuah mesin membaca dokumen tersebut maka mesin hanya dapat menerima data tersebut dan bagaimana data tersebut ditampilkan dalam browser. Mesin tidak dapat menerima pengetahuan (knowledge) apa yang terkandung di dalam data tersebut.

RDF (Resource Description Format) merupakan format XML yang memiliki fungsi sebagai metadata yakni untuk memberikan representasi knowledge dari data. Sebuah model data RDF memiliki 4 buah aturan

  1. Sebuah fakta direpresentasikan dalam bentuk triple Subject – Predicate – Object atau lebih dikenal sebagai statement.
  2. Baik Subject, Predicate, dan Object merupakan sebuah entitas atau sering disebut resource dan node. Entitas dapat melambangkan benda, orang, website, keadaan, dan relasi.
  3. Nama yang digunakan merupakan URI yang selalu menunjuk pada entitas yang sama.
  4. Obyek dapat berupa teks atau literal dan dapat direpresentasi baik menggunakan tipe data pada XML Schema ataupun tida
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
    xmlns:edu="http://www.example.org/">
    <rdf:Description rdf:about="http://www.princeton.edu">
        <geo:lat>40.35</geo:lat>
        <geo:long>-74.66</geo:long>
        <edu:hasDept rdf:resource="http://www.cs.princeton.edu"
            dc:title="Department of Computer Science"/>
    </rdf:Description>
</rdf:RDF>

Kode di atas merupakan kode RDF dari representasi tabel di bawah.

Subject Predicate Object
http://www.princeton.edu geo:lat 40.35
http://www.princeton.edu geo:long -74.66
http://www.princeton.edu edu:hasDept http://www.cs.princeton.edu
http://www.cs.princeton.edu dc:title Department of Computer Science

Di dalam kode tersebut terdapat 4 buah representasi triple: 3 buah representasi dari entitas “http://www.princeton.edu” dan 1 buah milik “http://www.cs.princeton.edu “.  Kedua triple berikutnya menjelaskan letak geografis dari Universitas Princeton. Triple ketiga menjelaskan bahwa Universitas Princeton memiliki departemen Computer Science. Dan triple terakhir menjelaskan nama dari departemen tersebut.

Selain dengan format XML, RDF juga dapat diekspresikan dengan menggunakan format Notation3.

@prefix rdf:  .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix geo: <http://www. w3.org/2003/01/geo/wgs84_pos#> .
@prefix edu: <http://www.example.org/> .

<http://www.princeton.edu> geo:lat "40.35" ; geo:long "-74.66" .
<http://www.cs.princeton.edu> dc:title "Department of Computer Science" .
<http://www.princeton.edu> edu:hasDept <http://www.cs.princeton.edu> .

Baru bikin wrapper yang lumayan enak buat digunain.

/*AJAX Wrapper!*/
/**
 * @param method Request method
 * @param url Request URL
 * @param onLoad Function callback on request complete
 * @param onProgress Function callback on request progress
 * @param data
 */
function doRequest(method,url,async,onLoad,onProgress,data) {
    var xhr;
    try{
        xhr=new XMLHttpRequest();
    } catch (e) {
        // Internet Explorer
        try{
            xhr=new ActiveXObject("Msxml2.xhr");
        } catch (e) {
            try {
                xhr=new ActiveXObject("Microsoft.xhr");
            } catch (e) {
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }
    // W3C requests and streaming
    xhr.open(method,url,async);
    if (method == "POST") /* Set request header on POST */
    {
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.setRequestHeader("Content-length", data.length);
        xhr.setRequestHeader("Connection", "close");
    }
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 3) // interactive mode
            onProgress(xhr.responseText);
        if (xhr.readyState == 4) // finished
            onLoad(xhr.responseText,xhr.status);
    }
    xhr.send(data); // finally send the request whether it be XDR or XHR
}

Read More »


Melanjutkan bahasan yang ada di blog gw tentang JSON. Penggunaan JSON sangat mudah karena sudah banyak fungsi bawaan dari berbagai bahasa yang dapat langsung kelakukan encode dan decode format data JSON.

Contoh sebuah kode PHP yang menghasilkan JSON.

//file: test2.php
<?php
	$user = array (
		"id" => 1,
		"username" => "petra",
		"fullname" => "Petra Barus"
	);

	echo json_encode($user);
?>

Jika kode ini ditampilkan secara biasa maka halaman akan menampilkan format JSON dari array $user tersebut

{"id":1,"username":"petra","fullname":"Petra Barus"}

Dengan menggunakan kode pada tulisan sebelumnya

//cut
/* Test AJAXnya */
function testAjax()
{
	var url = "test2.php";
	xmlHttp.onreadystatechange = function () {
			if (xmlHttp.readyState==4)
			{
				var user = eval("("+xmlHttp.responseText+")");
				alert("ID       : " + user.id+"\n" +
				      "Username : " + user.username +"\n" +
					  "Fullname : " + user.fullname);
			}
		};
	xmlHttp.open("GET", url, true);
	xmlHttp.send(null);
}

Seperti sebelumnya, isi dari atribut XHR responseText akan berisi tampilan dari server scriptnya. Isi ini dapat langsung diubah mejadi objek Javascript dengan menggunakan fungsi eval. Sebenarnya fungsi eval dapat mengeksekusi kode javascript apa pun tidak hanya JSON. Oleh karena itu gunakan hanya untuk kode JSON yang dipercaya.

Kode penuhnya dapat diambil di sini. (rename extension ke zip)


XML HTTP Request atau sering disingkat XHR adalah sebuah object pada API Javascript yang dapat dipakai untuk melakukan HTTP Request secara asynchronous yakni melakukan HTTP Request tanpa perlu melakukan page loading. Berikut contoh pemakaian XHR

Untuk kode client-sidenya

<html>
	<head>
		<script type="text/javascript" languange="javascript" src="test1.js"></script>
	</head>
	<body>
		<button id="button1" onclick="testAjax()">Test</button>
	</body>
</html>

Pada kode di atas halaman akan mengeksekusi fungsi testAjax setiap kali tombol button1 ditekan.
Read More »

%d blogger menyukai ini: