9 Contoh pendeklarasian property menggunakan RDF Schema

3.4.2 Elemen OWL

3.4.2.1 Class dan individual

Class merupakan suatu resource tertentu yang merepresentasikan sekumpulan resource dengan karakteristik yang sama. Adapun resource yang merupakan anggota dari class disebut sebagai individual dan bertindak sebagai instance dari class tersebut. Untuk menyatakan suatu class baru beserta instance- nya, digunakan owl:Class dan rdf:type seperti yang tersaji pada Gambar 3.10.

@prefix ex: <http://example.org/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix owl: <http://www.w3c.org/2002/07/owl#> . ex:Manusia rdf:type owl:Class . ex:Andi rdf:type ex:Manusia .

Gambar 3.10 Pendeklarasian class ex:Manusia

Selanjutnya untuk memberikan batasan mengenai keanggotaan suatu class dapat dilakukan dengan membentuk relasi taksonomi dengan class lainnya menggunakan rdfs:subClassOf . Dengan relasi ini, dapat dinyatakan bahwa class A merupakan spesialisasi dari class B sehingga tiap instance dari class A juga merupakan instance dari class B.

3.4.2.2 Property

Property digunakan untuk mendefinisikan relasi yang ada pada sekumpulan resource. Terdapat dua jenis property pada OWL:

1. datatype properties , digunakan pada relasi antara instance suatu class dengan obyek bertipe literal.

2. object properties , digunakan pada relasi antar instance dari suatu class.

3.4.2.3 Property characteristics

OWL menyediakan sejumlah tambahan vocabulary yang menyediakan tambahan semantik untuk mendeskripsikan karakteristik suatu property. Beberapa vocabulary tersebut diantaranya adalah:

1. owl:TransitiveProperty Apabila terdapat statemen (A p B) dan (B p C), maka secara implisit menyatakan statemen (A p C).

2. owl:SymmetricProperty Apabila terdapat statemen (A p B), maka secara implisit menyatakan statemen (B p A).

3. owl:FunctionalProperty. Apabila terdapat statemen (A p X) dan (A p Y), maka X =Y.

4. owl:InverseFunctionalProperty Apabila terdapat statemen (A p B) dan (C p B), maka A = C.

3.4.2.4 Property restrictions

Property restriction digunakan untuk mendeskripsikan suatu property dalam konteks class tertentu, sehingga dapat ditentukan bagaimana suatu property digunakan pada saat berpasangan dengan instance dari class tertentu. Proses ini dilakukan dengan menggunakan owl:Restriction serta property dimana batasan tersebut hendak diterapkan diidentifikasi menggunakan owl:onProperty.

Terdapat dua jenis property restriction pada OWL, yaitu:

1. Value Restrictions , yaitu batasan untuk menentukan range suatu property pada saat berpasangan dengan instance dari class tertentu. Vocabulary yang digunakan yaitu: owl:allValuesFrom, owl:someValuesFrom dan owl:hasValue.

2. Cardinality Restrictions , yaitu batasan untuk menentukan berapa banyak suatu property dapat muncul pada saat berpasangan dengan instance dari class tertentu. Vocabulary yang digunakan yaitu: owl:minCardinality, owl:maxCardinality dan owl:cardinality.

3.5 SPARQL

SPARQL (SPARQL Protocol and RDF Query language) adalah bahasa query yang digunakan untuk menelusuri data pada graf RDF sekaligus sebagai data access protocol pada semantic web (Doods, 2005). Proses pencarian

dilakukan berdasarkan pattern yang diajukan oleh query kemudian hasi pencarian ditampilkan dalam model RDF . Kebanyakan query pada SPARQL mengandung sekumpulan triple pattern yang disebut juga sebagai basic graph pattern. Triple tersebut mirip dengan triple pada RDF , kecuali pada tiap-tiap subyek, predikat dan obyek dapat berupa variabel. Penamaan variabel ini bersifat bebas, terdiri dari string dan diawali oleh tanda “?” atau tanda “$” seperti ?name atau $ address (Prud'hommeaux, 2008 ) . Variabel ini nantinya berisi data hasil dari pencarian query yang hendak ditampilkan ke client.

Selain sebagai bahasa query, SPARQL juga berfungsi sebagai data access protocol yang menggambarkan mekanisme bagaimana mengakses sekumpulan repository data RDF secara remote (Doods, 2005). Protokol ini mendefinisikan bagaimana cara user mengajukan query ke SPARQL endpoint menggunakan protokol HTTP. SPARQL endpoint sendiri merupakan layanan yang disediakan untuk melayani request data dalam bentuk query SPARQL. Beberapa situs menyediakan layanan ini, seperti DBPedia dan LinkedMDB.

Berdasarkan spesifikasi dari W3C 26 Januari 2010 tentang SPARQL versi

1.1, query yang dikembangkan masih terbatas hanya untuk operasi yang bersifat read only . Operasi lainnya seperti insert, update, atau delete belum tersedia sehingga tidak dimungkinkan memodifikasi dataset RDF menggunakan query tersebut. Query ini terdiri atas empat bentuk query, yaitu SELECT, CONSTRUCT, ASK dan DESCRIBE. Fungsi dari masing-masing bentuk query dijelaskan sebagai berikut:

1. Query SELECT Query SELECT digunakan untuk menampilkan data hasil pencarian berdasarkan triple pattern yang disebutkan setelah klausa WHERE. Data- data ini nantinya disertakan (binding) ke dalam variabel yang terletak

sesudah klausa SELECT. Contoh sintak query SELECT sebagai berikut : PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name ?mbox WHERE

{ ?x foaf:name ?name . ?x foaf:mbox ?mbox }

2. Query CONSTRUCT Query CONSTRUCT digunakan untuk mengembalikan data hasil pencarian ke dalam bentuk graf. Penggunaannya mirip dengan query SELECT. Contohnya sebagai berikut :

PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX org: <http://example.com/ns#> CONSTRUCT { ?x foaf:name ?name } WHERE { ?x org:employeeName ?name }

3. Query ASK Query ASK digunakan untuk menentukan apakah graph pattern yang dicari ditemukan atau tidak. Hasil dari query ini bisa bernilai true atau false.

4. Query DESCRIBE Query DESCRIBE bersifat deskriptif, digunakan untuk menampilkan informasi terkait dengan resource yang diminta.

Selain bentuk dasar query yang dijelaskan diatas, disediakan sejumlah fungsi tambahan berupa modifier terhadap hasil query. Beberapa fungsi tambahan tersebut diantaranya:

1. ORDER BY Klausa ORDER BY digunakan untuk mengurutkan kumpulan hasil query, baik secara menaik ataupun menurun.

2. DISTINCT Klausa DISTINCT digunakan untuk menghapus duplikasi yang ada dari tiap hasil query. Klausa ini diletakkan tepat di depan variabel dari query SPARQL.

3. OFFSET OFFSET digunakan untuk menampilkan subset dari hasil query pada urutan tertentu. Biasanya digunakan berpasangan dengan klausa LIMIT.

4. LIMIT LIMIT digunakan untuk membatasi hasil query yang hendak ditampilkan. Jumlah dari hasil query yang akan ditampilkan sebanyak nilai yang ditentukan oleh LIMIT. Nilai dari LIMIT sendiri tidak boleh bernilai negatif.

3.6 Linked Data

Linked data adalah sekumpulan langkah/metode terbaik untuk mempublikasikan sekaligus menghubungkan kumpulan data terstruktur pada Web (Heath dkk, 2009). Hal ini didasarkan pada asumsi dimana nilai dan kegunaan suatu data akan meningkat apabila terhubung dengan sumber data lainnya. Untuk itu, model RDF digunakan sebagai format representasi data beserta RDF link untuk menghubungkan sekumpulan data dari sumber yang berbeda.

RDF link memiliki fungsi seperti hypertext link yang menghubungkan sekumpulan halaman web di internet, hanya saja pada RDF link dapat dinyatakan suatu data memiliki relasi tertentu dengan data lainnya. Masing-masing relasi ini nantinya dapat berbeda satu sama lain. Contohnya seperti penggunaan RDF link pada sekumpulan orang untuk menyatakan relasi bahwa mereka saling mengenal satu sama lain, atau pada perpustakaan untuk menyatakan sekumpulan buku yang dikarang oleh pengarang tertentu. Dengan ini, sekumpulan data yang tadinya terisolir alias saling terpisah satu sama lain dapat saling terhubung menjadi satu RDF link memiliki fungsi seperti hypertext link yang menghubungkan sekumpulan halaman web di internet, hanya saja pada RDF link dapat dinyatakan suatu data memiliki relasi tertentu dengan data lainnya. Masing-masing relasi ini nantinya dapat berbeda satu sama lain. Contohnya seperti penggunaan RDF link pada sekumpulan orang untuk menyatakan relasi bahwa mereka saling mengenal satu sama lain, atau pada perpustakaan untuk menyatakan sekumpulan buku yang dikarang oleh pengarang tertentu. Dengan ini, sekumpulan data yang tadinya terisolir alias saling terpisah satu sama lain dapat saling terhubung menjadi satu

Dalam sejarahnya, linked data mulanya berasal dari upaya untuk mewujudkan visi dari semantic web dimana perkembangan teknologi semantic web yang tadinya masih terbatas hanya pada ruang lingkup penelitian agar dapat diimplementasikan ke dalam dunia nyata. Hal ini dapat terjadi apabila data yang digunakan tersedia dalam jumlah besar, tidak saling terisolir satu sama lain dan direpresentasikan menggunakan format standar yang disepakati bersama, yaitu format RDF. Selanjutnya upaya ini diwujudkan secara nyata oleh komunitas Semantic Web Education and Outreach (SWEO) yang merupakan bagian dari W3C dengan meluncurkan proyek Linking Open Data di tahun 2007. Tujuannya adalah mengupayakan tersedianya sekumpulan dataset di web dalam format RDF serta menghubungkan item data dari dataset yang berbeda menggunakan RDF link. Gambar 3.11 menampilkan kumpulan dataset yang tergabung dalam proyek Linking Open Data .

Gambar 3.11 Kumpulan dataset yang tergabung dalam linked data (Heath dkk, 2009)

3.6.1 Prinsip dasar linked data

Berners-Lee (2006) menyatakan terdapat empat prinsip dasar dalam mempublikasikan data sebagai bagian dari Web of Data, yaitu :

1. Semua item harus diidentifikasi menggunakan URI.

2. URI yang dipakai harus bersifat dereferenceable, yaitu HTTP URI dapat menelusuri item yang ditunjuk oleh URI tersebut.

3. Ketika URI tersebut ditelusuri - yaitu pada saat menggunakan property RDF sebagai hyperlink - hal ini membawa ke lebih banyak data.

4. Sertakan link yang menuju ke URI lainnya agar dimungkinkan penemuan ke lebih banyak data.

Pada linked data, tiap item data yang ada terbagi atas dua macam, yaitu information resource s (berupa data atau dokumen digital) dan non-information resource s (berupa entitas di dunia nyata). Pada information resources, apabila item tersebut ditelusuri, maka server akan merespon dengan HTTP response code 200 OK dan mengirimkan ke client item data tersebut. Sedangkan pada non- information resource s, HTTP redirecting dilakukan untuk mengarahkan request ke dokumen metadata yang mendesripsikan item/entitas tersebut. Server cukup merespon dengan HTTP respon code 303 See Other. Selanjutnya client akan diarahkan ke file RDF yang mendeskripsikan item/entitas yang diminta.

3.6.2 Content negotiation

Dalam menelusuri non-information resources, untuk menentukan jenis representasi yang tepat berdasarkan jenis client yang memintanya disediakan mekanisme HTTP yang disebut dengan content negotiation. Disini HTTP client akan mengirimkan HTTP header pada saat melakukan request untuk menentukan jenis representasi yang diminta. Apabila client meminta representasi dalam format HTML, maka server merespon dengan menghasilkan representasi dalam format HTML. Namun apabila client meminta representasi dalam format RDF , maka Dalam menelusuri non-information resources, untuk menentukan jenis representasi yang tepat berdasarkan jenis client yang memintanya disediakan mekanisme HTTP yang disebut dengan content negotiation. Disini HTTP client akan mengirimkan HTTP header pada saat melakukan request untuk menentukan jenis representasi yang diminta. Apabila client meminta representasi dalam format HTML, maka server merespon dengan menghasilkan representasi dalam format HTML. Namun apabila client meminta representasi dalam format RDF , maka

Sebagai contoh, dimisalkan terdapat request untuk item non-information resource s

dengan URI http://www.example.com/resources/john . Untuk itu, disediakan URI tambahan berupa http://www.example.com/html/john (information resources dalam format representasi HTML) dan URI http://www.example.com/RDF /john (information resource s dalam format representasi RDF/XML). Selanjutnya tahapan proses yang terjadi pada saat menelusuri item tersebut dijelaskan sebagai berikut:

1. Client melakuan

request pada URI http://www.example.com/resources/john . Apabila client berupa manusia, maka baris Accept: text/html ditambahkan pada HTTP header untuk secara spesifik meminta representasi dalam format HTML. Sedangkan apabila client berupa mesin, maka baris Accept: application/rdf+xml ditambahkan pada HTTP header untuk secara spesifik meminta representasi dalam format RDF/XML. Dimisalkan dalam contoh ini client adalah mesin.

HTTP

GET

2. Server menerima request URI yang diminta, merespon dengan HTTP respon code 303 See Other dan mengirimkan ke client URI dari information resource s yang mendeskripsikan non-information resources yang diminta. Proses ini dikenal sebagai HTTP redirecting.

3. Client melakukan request kembali menggunakan URI yang diterima, masih dalam format RDF/XML. Adapun URI yang diminta yaitu http://www.example.com/RDF /john .

4. Server merespon dengan mengirimkan ke client file RDF/XML yang mendeskripsikan John tersebut.

Gambaran tentang alur proses request yang terjadi ini dapat dilihat pada Gambar 3.12.

Gambar 3.12 Mekanisme content negotiation (Berrueta dan Phipps, 2008)

3.6.3 Vocabulary pada linked data

Pada linked data, disarankan untuk menggunakan vocabulary yang telah dibuat sebelumnya. Pembuatan vocabulary baru dilakukan apabila vocabulary yang sudah ada dianggap tidak cocok untuk digunakan. Beberapa vocabulary yang cukup terkenal diantaranya seperti FOAF (Friend of a Friend), Dublin Core, SKOS (Simple Knowledge Organization System), dan Music Ontology.

Berikut ini sejumlah petunjuk terkait dengan penggunaan vocabulary pada linked data (Bizer dkk, 2007):

1. Jangan ciptakan kembali vocabulary yang serupa dari nol, tapi lengkapi yang telah ada untuk merepresentasikan data yang digunakan.

2. Sediakan dalam format yang dapat dikonsumsi oleh manusia dan mesin.

3. Pastikan URI yang digunakan bersifat dereferenceable. Ini penting agar client dapat menelusuri definisi dari vocabulary tersebut.

4. Jika memungkinkan, gunakan vocabulary yang dipakai oleh orang lain.

5. Nyatakan seluruh informasi yang disajikan secara eksplisit.

6. Jangan terlalu ketat membatasi vocabulary yang dibuat, berikan ruang kebebasan untuk berkembang.

3.6.4 Sumber dataset di linked data

3.6.4.1 DBPedia

DBPedia merupakan hasil dari upaya komunitas untuk mengekstrak kumpulan informasi di Wikipedia ke dalam bentuk dataset RDF meliputi berbagai macam domain informasi. Tujuannya adalah agar dapat dimanfaatkan di dalam pengembangan aplikasi semantic web serta menghubungkannya dengan dataset lainnya dari luar sehingga menciptakan apa yang dikenal sebagai Web of Data. Tak hanya itu, DBPedia juga menyediakan fasilitas untuk melakukan operasi query terhadap dataset tersebut via SPARQL endpoint .

Diperkirakan sat ini terdapat lebih dari 274 juta triple RDF yang terkandung di DBPedia tersedia dalam 14 jenis bahasa. Kumpulan triple ini mendeskripsikan setidaknya 2,6 juta resource yang ada, terdiri dari 213.000 orang, 328.000 tempat, 57.000 album musik, 36.000 film, 20.000 perusahaan dan masih banyak lagi. Selain itu, tersedia 609.000 link untuk gambar, 3.150.000 link ke halaman situs luar dan 4.878.100 link ke dataset RDF di luar. Hal ini menjadikan DBPedia sebagi sebuah sumber dataset RDF yang kaya akan data dan berfungsi sebagai hubs bagi sumber dataset lainnya yang tergabung dalam komunitas Open Linked Data.

Mengenai operasi query data pada DBPedia, fasilitas ini disediakan oleh DBPedia dengan menggunakan bahasa SPARQL dan didukung oleh OpenlinkVirtuoso. Format representasi hasil query yang didukung pun bermacam- macam, mulai dari HTML, RDF/XML, JSON dan CSV. Hal ini bertujuan untuk memudahkan para pengguna apabila hendak mengintegrasikan data tersebut ke dalam aplikasi mereka. Selain itu, proses penjelajahan data juga dapat dilakukan menggunakan Semantic web browser seperti Disco, Tabulator, atau Marbles.

3.6.4.2 LinkedMDB

LinkedMDB (Linked Movie Database) merupakan proyek yang bertujuan mendemonstrasikan untuk pertama-kalinya sebuah dataset terbuka dengan area khusus seputar perfilman. Diperkirakan terdapat lebih dari ratusan ribu triple RDF LinkedMDB (Linked Movie Database) merupakan proyek yang bertujuan mendemonstrasikan untuk pertama-kalinya sebuah dataset terbuka dengan area khusus seputar perfilman. Diperkirakan terdapat lebih dari ratusan ribu triple RDF

Sebagai basis penciptaan linknya, LinkedMDB menggunakan sumber data Freebase dengan lisensi Creative Commons Attribution. LinkedMDB juga memanfaatkan sumber dataset lainnya seperti RDFBookMashup (menyediakan link terhadap sejumlah buku yang terkait dengan film), Musicbrainz (link ke album terkait soundtrack film) dan Reyvu.com (link terkait review film). Adapun mengenai publikasi data, LinkedMDB menggunakan situs www.linkedmdb.org sebagai halaman utamanya, http://data.linkedmdb.org/resource/ untuk merefer ke tiap

bentuk RDF dan http://data.linkedmdb.org/sparql untuk SPARQL endpointnya.

entitas yang

dipublikasikan

dalam

3.6.5 Open World Assumption dan No Uniques Name Assumption

Teknologi semantik web dirancang untuk menjadikan world wide web yang ada saat ini menjadi lebih bersifat machine-understandable. Resource yang ada disajikan dalam bentuk terdistribusi, begitu pula deskripsi dari resource tersebut, dalam hal ini OWL. OWL mendukung hal semacam ini dikarenakan model representasi yang digunakan menggunakan RDF yang memanfaatkan link dalam merepresentasikan relasi yang ada. Selain itu OWL juga menyediakan mekanisme untuk meng-import dan mempergunakan ontologi yang sudah ada dalam lingkungan sistem yang terdistribusi.

Dalam perancangan OWL pada lingkungan sistem terdistribusi, ada dua asumsi yang harus dipahami terkait dengan hal tersebut, yaitu open world assumption dan no unique names assumption (Hebeler dkk, 2009). Pada open world assumption , segala statement yang ada bisa saja bernilai benar kecuali bila dibuktikan bahwa statement sepenuhnya bernilai salah. Tidak diketahui dengan pasti kebenaran dari suatu statement tidaklah menyatakan bahwa statement tersebut bernilai salah, melainkan masih bersifat “undefined”. Hal ini didasarkan Dalam perancangan OWL pada lingkungan sistem terdistribusi, ada dua asumsi yang harus dipahami terkait dengan hal tersebut, yaitu open world assumption dan no unique names assumption (Hebeler dkk, 2009). Pada open world assumption , segala statement yang ada bisa saja bernilai benar kecuali bila dibuktikan bahwa statement sepenuhnya bernilai salah. Tidak diketahui dengan pasti kebenaran dari suatu statement tidaklah menyatakan bahwa statement tersebut bernilai salah, melainkan masih bersifat “undefined”. Hal ini didasarkan

Selanjutnya mengenai no unique names assumption yang menyatakan bahwa tidak dapat diasumsikan kumpulan resource yang diidentifikasi oleh URI yang berbeda benar-benar berbeda satu sama lain, kecuali bila dinyatakan sebaliknya secara eksplisit. Tidaklah dimungkinkan untuk mengasumsikan tiap user menggunakan URI yang sama dalam merepresentasikan resource tertentu dalam skala global. Yang terjadi adalah sebaliknya, dimana tiap user menggunakan URI miliknya masing-masing dalam merepresentasikan resource yang digunakan. Duplikasi dianggap sebagai hal yang lumrah karena tidak ada kontrol penuh terhadap sumber informasi untuk mengatur pemberian URI pada resource yang ada.

3.7 Jena Framework

Jena merupakan suatu framework yang cukup terkenal dan digunakan untuk membangun aplikasi semantic web. Jena dibangun menggunakan bahasa Java dan merupakan proyek open source. Pada Jena disediakan dukungan untuk RDF, RDF Schema, OWL API dan mesin inference untuk melakukan reasoning. Untuk query data, disediakan query engine yaitu ARQ untuk menelusuri data dalam bentuk graf. ARQ sendiri merupakan implementasi pada Jena untuk pemrosesan bahasa query SPARQ.

Jena menawarkan sejumlah fleksibilitas dimana reasoner engine yang digunakan dapat berasal dari fitur bawaan Jena atau menggunakan reasoner engine dari luar, seperti Pellet Reasoner. Selain itu, untuk menyimpan data RDF maupun OWL secara persistent, Jena menyediakan dukungan baik dalam bentuk file teks ataupun menggunakan database relasional sebagai tempat Jena menawarkan sejumlah fleksibilitas dimana reasoner engine yang digunakan dapat berasal dari fitur bawaan Jena atau menggunakan reasoner engine dari luar, seperti Pellet Reasoner. Selain itu, untuk menyimpan data RDF maupun OWL secara persistent, Jena menyediakan dukungan baik dalam bentuk file teks ataupun menggunakan database relasional sebagai tempat

3.7.1 Reasoner engine pada Jena

Pada Jena disediakan inference subsystem yang memungkinkan proses inferensi untuk dilakukan. Proses inferensi ini pada dasarnya terbagi atas dua macam, yaitu menggunakan ontologi yang disertakan ke dalam model atau menggunakan sekumpulan rule yang dimuat ke dalam reasoner. Inferensi memungkinkan sekumpulan statemen yang tadinya masih bersifat implisit untuk kemudian dinyatakan secara eksplisit. Beberapa built-in reasoner yang terdapat pada Jena disajikan dibawah ini:

1. Transitive reasoner Menyediakan dukungan untuk penelusuran class dan property. Reasoner ini mendukung property transitive dan reflexive dari rdfs:subPropertyOf dan rdfs:subClassOf.

2. RDF Schema rule reasoner Mengimplementasikan subset dari RDF Schema entailments.

3. OWL, OWL Mini dan OWL Micro Reasoner Mengimplementasikan sebagian dari OWL/Lite yang merupakan subset dari OWL/Full language.

4. DAML micro reasoner Menyediakan dukungan penggunakaan API DAML.

5. Generic rule reasoner Merupakan reasoner yang mendukung user-defined rules. Beberapa jenis strategi yang didukungnya yaitu forward-chaining, backward-chaining dan hybrid rule.

3.7.2 Contoh inferensi menggunakan Jena

Dimisalkan hendak dilakukan proses inferensi berbasis OWL. Disini kumpulan triple statement disimpan pada file DemoData.rdf sedangkan skema ontologi disimpan pada file schema.owl. Contoh baris kode untuk melakukan inferensi ditampilkan pada Gambar 3.13.

Model schema = FileManager.get().loadModel("file:data/schema.owl"); Model data = FileManager.get().loadModel("file:data/DemoData.rdf "); Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); reasoner = reasoner.bindSchema(schema); InfModel infmodel = ModelFactory.createInfModel(reasoner, data);

Gambar 3.13 Contoh baris kode untuk proses inferensi

Langkah pertama yang dilakukan adalah membuat instance model. Disini terdapat dua instance model dimana yang satu membaca file yang berisi asserted statement dan satunya lagi membaca file ontology. Pada Jena disediakan class FileManager yang memudahkan dalam memuat file RDF ataupun file OWL ke dalam instance dari class Model. Setelah dibuat instance model, class ReasoneRegistry dipanggil untuk membuat instance reasoner dengan berbagai macam

getRDFSReasoner, getRDFSSimpleReasoner, getOWLReasoner, getOWLMiniReasoner dan terakhir getOWLMicroreasoner). Instance reasoner ini disertakan pada instance model schema untuk menciptakan reasoner baru berbasiskan instance model schema tersebut. Selanjutnya langkah terakhir berupa proses inferensi dengan menempelkan instance reasoner tersebut ke instance model data. Hal ini akan menghasilkan instance dari class InfModel yang memuat statement pada instance model schema, instance model data dan segala statemen yang dihasilkan dari proses inferensi (yang disebut juga dengan entailment statement). Proses ini sendiri tidak mempengaruhi kumpulan statement yang terdapat pada data model.

jenis

(getTransitiveReasoner,

3.8 JSP dan Struts

3.8.1 JSP (Java Server Pages)

JSP merupakan teknologi yang dikembangkan oleh Sun Microsystem sebagai bagian dari J2EE (Java Enterprise Edition). JSP dibangun dengan tujuan untuk mempermudah para developer yang sebelumnya berkutat dengan servlet dalam membangun aplikasi berbasis web. Dengan JSP, proses perancangan aplikasi lebih mudah karena terdapat pemisahan yang jelas antara komponen view yang menampilkan layout dari aplikasi dan komponen kode yang mengurus bussiness logic dari aplikasi. Selain itu, pada JSP disediakan JSTL yang meringkas penulisan kode ke dalam bentuk tag seperti HTML di layer view.

Dengan adanya pemisahan layer bussiness logic dari layer view, para developer dapat berfokus dalam penulisan kode aplikasi sementara untuk layout presentasi diserahkan kepada web designer. Hasilnya proses pengembangan aplikasi menjadi lebih produktif dan efisien. Apabila terjadi perubahan pada bussiness logic code tidak mempengaruhi proses perancangan layout aplikasi.

Untuk memproses halaman JSP, pada web server diperlukan JSP container. Container ini nantinya akan mengubah halaman JSP tersebut menjadi servlet, dimana tiap-tiap template text yang ada diubah menjadi string dan disertakan ke dalam println method, sedangkan elemen-elemen pada JSP diubah menjadi kode Java. Langkah terakhir container melakukan compiling pada class- class servlet tersebut. Proses ini sendiri biasanya dikenal sebagai translation phase . Gambar 3.14 menampilkan alur pemrosesan yang terjadi pada JSP.

Gambar 3.14 Alur pemrosesan pada JSP (Bergsten, 2002)

3.8.2 Struts

Struts merupakan MVC framework yang dikembangkan oleh Craig McClanahan dengan tujuan untuk mempermudah didalam proses pengembangan aplikasi web. Dengan Struts, operasi-operasi umum yang terdapat dalam aplikasi web dapat diringkas seperti penanganan input pada form web, validasi input, error handling dan masih banyak lagi. Selain itu, disediakan pula sejumlah plug-in yang menyediakan fungsionalitas tambahan seperti Tiles (untuk menyederhanakan proses perancangan layout web). Hal ini menjadikan Struts sebagai salah satu framework yang cukup populer dan banyak dipakai dalam pengembangan aplikasi berbasis web.

MVC (Model View Controller) merupakan arsitektur yang dipakai oleh Struts dalam merancang sebuah aplikasi berbasis web (Cavaness, 2004). Model merupakan bagian yang menangani kontrol akses data dan bussiness logic, View untuk mengatur bagaimana data disajikan ke user dan Controller untuk menangani request dan alur data yang terjadi antara Model dan View. Gambaran mengenai alur proses yang terjadi disajikan pada Gambar 3.8.

Gambar 3.15 Diagram alur MVC pada Struts (Holmes, 2007)

Pada Struts, bagian Controller diterapkan menggunakan class Action. Class Action ini digunakan untuk menangani request tertentu dan secara spesifik ditangani pada method execute(). Selanjutnya untuk bagian View, proses perancangannya dapat menggunakan JSP atau JSP tag library. Disediakan pula tag

library tambahan yang berasal dari Struts, seperti HTML tag library, Bean tag library dan Logic tag library. Yang terakhir adalah bagian Model, dimana seluruh code bussiness logic ditempatkan. Disini class-class yang menangani sejumlah operasi, mulai dari akses ke database, pengelolaan data dan lain sebagainya dibuat dan nantinya dipanggil di bagian Controller melalui class Action.

BAB IV ANALISIS DAN PERANCANGAN SISTEM

4.1 Gambaran Umum Sistem

Sistem yang akan dibuat merupakan aplikasi penyajian informasi seputar dunia perfilman berbasis web dengan sumber data utama berasal situs DBPedia. Sumber data disediakan dalam format RDF dan menggunakan mekanisme content negotiation untuk memperoleh data yang diinginkan. Adapun ragam informasi yang disajikan terbagi atas dua macam kategori, yaitu kategori artis dan kategori film. Untuk memperoleh informasi yang lebih relevan, disediakan pula halaman pencarian berdasarkan kedua kategori tersebut.

4.2 Spesifikasi Kebutuhan Sistem

Dalam merancang sebuah sistem, perlu didefinisikan terlebih dahulu kebutuhan fungsional dan non-fungsional yang dibutuhkan.

4.2.1 Kebutuhan fungsional

Berikut ini daftar dari kebutuhan fungsional sistem yang sedang dibangun:

1. Sistem menyediakan informasi seputar perfilman yang terbagi atas dua kategori, yaitu kategori artis dan kategori film.

2. Sistem menyediakan fungsi pencarian seputar artis dan film.

3. Sistem menyediakan halaman login untuk mengakses modul administrator.

4. Sistem menyediakan pengaturan terhadap konfigurasi sistem (khusus administrator).

5. Sistem menyediakan form antarmuka yang berfungsi untuk me-retrieve sekumpulan dokumen RDF dari luar (dataset source) beserta fasilitas pengelolaannya (khusus administrator).

6. Sistem menyediakan form antarmuka yang mengelola proses inferensi pada graf RDF yang disimpan (khusus administrator).

7. Sistem menyediakan pembuatan halaman berita baru dengan sumber data berasal dari kumpulan graf data yang tersimpan (khusus administrator).

4.2.2 Kebutuhan non-fungsional

Adapun kebutuhan non-fngsional yang diperlukan adalah sebagai berikut:

1. Keamanan: Disediakan mekanisme login agar dapat masuk sebagai administrator.

2. Koneksi internet: Diperlukan koneksi internet yang stabil untuk mengakses dataset dari luar.

3. Software dan tools: Aplikasi dibangun menggunakan teknologi JSP dan framework Struts disertai library Jena. Adapun IDE yang digunakan yaitu NetBeans versi 6.9.

4.3 Perancangan Ontologi

Semenjak sistem menggunakan DBPedia sebagai sumber data utamanya, ontology yang digunakan disini tidak dibuat dari awal melainkan menggunakan ontology yang tersedia pada DBPedia. Ontologi DBPedia ini digambarkan sebagai satu dari sekian ontology multi-domain yang terbesar yang pernah ada. Diperkirakan terdapat lebih dari 259 class dengan 1.200 properti yang mengikutinya. Untuk menyesuaikan dengan sistem yang dibangun, maka class- class yang digunakan disini dibatasi terkait dengan domain informasi seputar perfilman.

DBPedia menyediakan dokumentasi lengkap terkait ontologi yang dikembangkannya. Pada gambar 4.1 disajikan potongan dari hirarki class yang terdapat pada ontologi DBPedia.

Gambar 4.1 Potongan hirarki class ontologi DBPedia (Thibodeau, 2010)

Adapun penjelasan mengenai sejumlah class yang terdapat pada Gambar

4.1 adalah sebagai berikut:

1. Person, merepresentasikan objek berupa manusia. Sebagai parent-class dari class Artist dan class Actor.

2. Artist, merepresentasikan para pemain film.

3. Actor, merepresentasikan para pemain film. Merupakan sub-class dari class Artist.

4. Work, merepresentasikan objek berupa hasil karya manusia. Merupakan parent-class dari class Film.

5. Film, merepresentasikan segala jenis film. Setelah ditentukan class-class yang hendak digunakan, dilanjutkan dengan

sejumlah properti yang melekat pada class-class tersebut. Pada Tabel 4.1 disajikan sebagian dari properti yang melekat pada class Artis.

Tabel 4.1 Daftar properti pada class Artis (Thibodeau, 2010)

foaf:familyName family name ow l:Thing xsd:st ring foaf:givenName given name ow l:Thing xsd:st ring foaf:homepage homepage ow l:Thing ow l:Thing foaf:name name ow l:Thing xsd:st ring foaf:page homepage ow l:Thing ow l:Thing birt hDat e birt h dat e Person xsd:dat e birt hName birt h name Person xsd:st ring birt hPlace birt h place Person Place

nat ionalit y nat ionalit y Person ow l:Thing part ner part ner Person Person

spouse spouse Person Person

abst ract has abst ract ow l:Thing xsd:st ring act iveYearsSt art Year act ive years st art year ow l:Thing xsd:gYear aw ard aw ard ow l:Thing Aw ard

rdf:t ype has t ype ow l:Thing ow l:Thing rdfs:comment has comment ow l:Thing xsd:st ring

Selanjutnya pada Gambar 4.2 disajikan sebagian dari properti yang melekat pada class Film.

Tabel 4.2 Daftar properti pada class Film (Thibodeau, 2010)

cinemat ography Cinemat ography Film Person

edit ing Edit ing Film Person

gross Gross Film Currency imdbId IM DB id Film xsd:st ring narrat or Narrat or Film Person

creat or Creat or Work Person

musicComposer music composer Work M usicalArt ist

previousWork previous w ork Work Work

publisher Publisher Work Company

releaseDat e release dat e Work xsd:dat e runt ime Runt ime Work Time st arring St arring Work Person

w rit er Writ er Work Person

abst ract has abst ract ow l:Thing xsd:st ring associat edBand associat ed band ow l:Thing Band

budget Budget ow l:Thing Currency composer Composer ow l:Thing Person

count ry Count ry ow l:Thing Count ry

dat e Dat e ow l:Thing xsd:dat e direct or Direct or ow l:Thing Person

dist ribut or Dist ribut or ow l:Thing Organisat ion

edit or Edit or ow l:Thing Person

execut iveProducer execut ive producer ow l:Thing Person

rdf:t ype has t ype ow l:Thing ow l:Thing rdfs:comment has comment ow l:Thing xsd:st ring rdfs:label has label ow l:Thing xsd:st ring

4.4 Perancangan Aplikasi Situs Perfilman Berbasis Web

4.4.1 Gambaran Umum Aplikasi

Setelah ditentukan ontologi yang akan dipakai, selanjutnya adalah merancang aplikasi situs perfilman berbasis web. Gambaran umum dari aplikasi tersebut dapat dilihat pada Gambar 4.2.

Gambar 4.2 Gambaran umum aplikasi

Sebelum menggunakan aplikasi, langkah pertama yang harus dilakukan adalah memuat sumber data utama bagi sistem. Hal ini dilakukan dengan cara melakukan request data ke sumber data yang telah ditentukan, yaitu DBPedia. Proses request data dilakukan dengan mengajukan string query SPARQL ke DBPedia Endpoint. Hasil dari query ini berupa dokumen RDF yang memuat sekumpulan URI. Tiap-tiap URI ini selanjutnya ditelusuri melalui mekanisme content negotiation dan menghasilkan dokumen RDF spesifik untuk dimuat ke dalam instance Model dan disimpan ke dalam sistem. Penyimpanan data sendiri dilakukan dengan memanfaatkan fitur bawaan Jena berupa Jena SDB.

Setelah sumber data bagi sistem tersedia, kini pengguna sistem dapat melakukan browsing ke sejumlah informasi yang disajikan terkait artis dan film. Pengguna juga dapat melakukan pencarian spesifik untuk memperoleh informasi yang diinginkan.

4.4.2 Perancangan model sistem

4.4.2.1 Model use case

Model use case ini menggambarkan kebutuhan fungsional sistem dari perspektif pengguna sistem. Diagram yang disajikan menggambarkan perilaku dari sistem yang dibangun tanpa harus menjelaskan detail dari implementasi perilaku tersebut (Booch dkk, 1998). Gambar 4.3 memperlihatkan diagram use case dari sistem yang dibangun, dimulai dari pengguna umum sistem.

Gambar 4.3 Diagram use-case pada pengguna umum sistem

Pada Gambar 4.3 disajikan gambaran mengenai sejumlah fungsi yang disediakan sistem untuk pengguna umum. Fungsi-fungsi ini meliputi navigasi informasi film dan artis dan pencarian data. Untuk pencarian data diperluas lagi menjadi pencarian data film dan pencarian data artis.

Selanjutnya disajikan diagram use-case administrator pada Gambar 4.4.

Sistem

Buat graf data baru «extends»

«extends»

Tambahkan data RDF ke

Pengelolaan graf

graf data yang sudah ada

data sumber

«extends»

«uses»

Hapus graf data sumber ada

Buat graf data baru

hasil inferensi

Pengelolaan proses

«uses»

inferensi pada graf data

Hapus graf data

«uses»

hasil inferensi

login *

«uses»

Ganti user name

«uses»

dan password

Pengaturan umum

«uses»

settingan aplikasi

Pengaturan namespace

«uses»

Pengaturam file

«uses»

ontology

«extends» Buat halaman

berita baru

Pengelolaan halaman berita tambahan «extends»

«extends»

Edit halaman berita

Hapus halaman berita

Gambar 4.4 Diagram use case pada administrator sistem Pada diagram use-case administrator terdapat banyak fungsi yang termuat didalamnya seperti penarikan graf sumber data, proses reasoning, pengaturan setting aplikasi dan ganti username/password. Sebelum administrator dapat melakukan fungsi-fungsi yang disebutkan, administrator harus dicek terlebih dahulu untuk memastikan keabsahan administrator. Proses pengecekan ini dilakukan melalui mekanisme login, yaitu dengan memasukkan username beserta password.

4.4.2.2 Rancangan proses pencarian quick search

Pada bagian ini dan seterusnya, proses yang terjadi dalam sistem dipecah dan digambarkan dalam bentuk kumpulan aktifitas bertahap step-by-step atau yang lebih dikenal dengan diagram aktifitas. Diagram aktifitas ini menekankan pada aliran kontrol dari satu aktifitas ke aktifitas lainnya. Contoh diagram aktifitas yang menggambarkan aliran proses pada saat proses quick search dilakukan dapat dilihat pada Gambar 4.5.

Gambar 4.5 Diagram aktifitas pencarian quick search

Pada Gambar 4.5, aktifitas pertama diawali dengan aplikasi menampilkan halaman default (index.jsp) pada saat request dilakukan untuk pertama kalinya. Pada tampilan default ini, terdapat sebuah input field dimana pengguna dapat memasukkan kata kunci untuk melakukan pencarian. Setelah selesai, selanjutnya pengguna mengklik tombol search supaya proses diteruskan ke server. Mulai dari sini, kontrol aktifitas sepenuhnya ditangani oleh aplikasi. Langkah pertama yang dilakukan adalah memvalidasi input kata kunci yang diterima. Setelah itu, graf sumber data dimuat ke dalam sistem. String query SPARQL lalu disusun untuk kemudian dieksekusi oleh graf data tersebut. Hasilnya berupa sekumpulan string yang kemudian disusun kembali dalam format yang dapat dibaca oleh manusia, yaitu dalam bentuk HTML. Kemudian halaman HTML yang berisi jawaban ini diteruskan untuk disampaikan ke pengguna.

4.4.2.3 Rancangan proses pencarian kategori artis dan kategori film

Proses selanjutnya adalah pencarian berdasarkan kategori artis dan kategori film. Pada tahapan ini, proses pencarian dilakukan secara lebih mendetail. Untuk melakukan pencarian, mula-mula pengguna memasukkan kata kunci beserta sejumlah kriteria yang diinginkan. Setelah itu, pengguna mengklik tombol search untuk mengirimkan input yang diisikan ke server. Begitu tiba di server, mula-mula dilakukan validasi terlebih dahulu. Apabila tidak terdapat error, selanjutnya aplikasi memuat graf data sumber. String query SPARQL disusun berdasarkan input yang diberikan oleh pengguna, lalu dieksekusi oleh aplikasi. Hasilnya berupa object data dengan tipe data string. Proses parsing dilakukan untuk menyajikan hasil dari pencarian dalam bentuk yang dapat dibaca oleh pengguna. Hasilnya disajikan dalam format HTML lalu disampaikan ke pengguna. Proses ini dapat dilihat pada Gambar 4.6.

Gambar 4.6 Diagram aktifitas pencarian kategori artis dan kategori film

4.4.2.4 Rancangan proses login

Proses login merupakan mekanisme autentikasi untuk memastikan bahwa sesorang berhak untuk masuk ke dalam sistem dengan level administrator. Disini sesorang harus memasukkan username beserta password yang valid. Begitu tombol login diklik, aplikasi akan memproses input yang diberikan dan memeriksa apakah username dan password yang diterima sesuai dengan data yang tersimpan pada database. Apabila berhasil, pengguna akan diarahkan ke halaman administrator. Namun apabila gagal, pengguna akan diarahkan ke Proses login merupakan mekanisme autentikasi untuk memastikan bahwa sesorang berhak untuk masuk ke dalam sistem dengan level administrator. Disini sesorang harus memasukkan username beserta password yang valid. Begitu tombol login diklik, aplikasi akan memproses input yang diberikan dan memeriksa apakah username dan password yang diterima sesuai dengan data yang tersimpan pada database. Apabila berhasil, pengguna akan diarahkan ke halaman administrator. Namun apabila gagal, pengguna akan diarahkan ke

Pengguna Aplikasi web penyedia informasi perfilman

Menampilkan halaman login

Masukkan username dan password

Klik tombol login Validasi username dan login

Masuk ke halaman administrator redirect ke halaman administrator

Gambar 4.7 Diagram aktifitas login

4.4.2.5 Rancangan proses penarikan sumber data dari luar

Proses ini merupakan upaya untuk memuat sekumpulan data RDF yang berasal dari luar (internet) untuk disimpan ke dalam sistem sebagai sumber data utama bagi aplikasi. Proses dimulai dengan memilih situs yang menyediakan layanan SPARQL endpoint sebagai target operasi. Selanjutnya query SPARQL diisikan ke dalam kolom query editor. Begitu tombol simpan diklik, string query SPARQL akan dikirim ke url target dari SPARQL endpoint. Response dari request ini berupa dokumen XML yang berisi jawaban dari query tersebut. Langkah selanjutnya adalah menghimpun baris data yang terkandung didalamnya berupa kumpulan URI untuk dilakukan request berdasarkan alamat pada URI tersebut. Request ini nantinya menghasilkan dokumen RDF yang berisi kumpulan triple statement untuk disimpan ke dalam sistem. Hasil dari proses ini nantinya dicatat dan disimpan ke dalam sistem, lalu disampaikan pesan konfirmasi bahwa Proses ini merupakan upaya untuk memuat sekumpulan data RDF yang berasal dari luar (internet) untuk disimpan ke dalam sistem sebagai sumber data utama bagi aplikasi. Proses dimulai dengan memilih situs yang menyediakan layanan SPARQL endpoint sebagai target operasi. Selanjutnya query SPARQL diisikan ke dalam kolom query editor. Begitu tombol simpan diklik, string query SPARQL akan dikirim ke url target dari SPARQL endpoint. Response dari request ini berupa dokumen XML yang berisi jawaban dari query tersebut. Langkah selanjutnya adalah menghimpun baris data yang terkandung didalamnya berupa kumpulan URI untuk dilakukan request berdasarkan alamat pada URI tersebut. Request ini nantinya menghasilkan dokumen RDF yang berisi kumpulan triple statement untuk disimpan ke dalam sistem. Hasil dari proses ini nantinya dicatat dan disimpan ke dalam sistem, lalu disampaikan pesan konfirmasi bahwa

Gambar 4.8 Diagram aktifitas penarikan sumber data dari luar

4.4.2.6 Rancangan proses inferensi pada graf data sumber

Proses selanjutnya yaitu inferensi pada graf data yang tersimpan di sistem. Diagram aktifitas dari proses ini dapat dilihat pada Gambar 4.9.

Gambar 4.9 Diagram aktifitas proses inferensi pada graf data sumber

Proses ini dilakukan dengan tujuan melakukan reasoning pada graf RDF yang sudah ada untuk menghasilkan statement tambahan (entailment statement) sehingga memperkaya data yang ada. Mula-mula pengguna memilih graf data yang dijadikan target, lalu memilih jenis inferensi yang hendak dilakukan (ontology-based reasoning atau rule-based reasoning). Setelah selesai, tombol proses diklik untuk memulai proses inferensi. Hasil dari proses ini berupa graf data baru yang memuat semua data dari graf data target dan data hasil inferensi. Selanjutnya sistem menyimpan daftar graf yang dibuat ke dalam sistem. Terakhir, pesan konfirmasi disampaikan ke user untuk memberitahu status dari proses tersebut.

4.4.2.7 Rancangan proses pembuatan halaman berita

Proses selanjutnya yaitu pembuatan halaman berita pada sistem. Diagram aktifitas dari proses ini dapat dilihat pada Gambar 4.10.

Gambar 4.10 Diagram aktifitas pembuatan halaman berita

Proses pembuatan halaman berita bertujuan untuk menyajikan informasi tambahan terkait dengan dunia perfilman. Informasi tersebut sifatnya opsional namun menarik, informasi yang digali berasal dari graf data sumber yang belum sempat tersajikan pada halaman kategori artis dan film.

4.4.2.8 Proses ubah pengaturan pada aplikasi

Proses ubah pengaturan pada aplikasi bertujuan mengatur hal-hal yang terkait dengan settingan pada aplikasi. Mula-mula ditampilkan halaman pengaturan ke administrator. Selanjutnya administrator memasukan nilai baru pada settingan yang ada, lalu mengklik tombol proses. Oleh sistem, input tersebut diterima dan divalidasi terlebih dahulu untuk selanjutnya disimpan ke dalam sistem. Pesan konfirmasi disampaikan untuk memberitahukan status dari proses tersebut. Diagram aktifitas dari proses ini dapat dilihat pada Gambar 4.11.

Gambar 4.11 Diagram aktifitas pengaturan pada aplikasi

4.4.2.9 Proses pengubahan username dan password

Untuk mengubah username beserta password sang administrator, disediakan halaman yang menangani proses tersebut. Administrator mengisikan username dan password yang baru, lalu mengklik tombol ganti untuk diproses oleh sistem. Sistem akan memeriksa input yang diberikan, lalu menyimpan perubahan tersebut ke dalam database. Apabila berhasil, pesan konfirmasi akan disampaikan ke administrator oleh sistem. Diagram aktifitas dari proses ini dapat dilihat pada Gambar 4.12.

Gambar 4.12 Diagram aktifitas pengubahan username dan password

4.4.3 Perancangan antarmuka

Pada bagian ini dijelaskan perancangan antarmuka dari aplikasi yang dibangun. Layout terbagi atas empat area, yaitu header, main area (dimana informasi ditampilkan), menu navigasi dan terakhir footer. Gambar 4.13 menampilkan rancangan halaman utama aplikasi

Gambar 4.13 Antamuka halaman depan

Pada area menu navigasi, nantinya bagian ini berisi daftar link untuk menelusuri informasi artis dan film yang disajikan. Link yang disajikan seperti daftar film, kategori film, daftar artis. dan kategori artis. Dibawahnya terdapat link tambahan untuk menelusuri info-info lainnya seputar perfilman.

Selanjutnya pada bagian header disebelah pojok kanan atas, terdapat input pencarian quick search. Disini pengguna cukup memasukkan keyword yang berkaitan dengan nama artis atau judul film tertentu. Sedangkan disisi pojok kiri, terdapat tiga menu tambahan, yaitu menu Depan, menu Pencarian dan terakhir menu Tentang. Menu pencarian ini berguna apabila pengguna hendak melakukan pencarian secara lebih mendalam.

4.4.3.1 Antarmuka halaman kategori film

Halaman ini dirancang untuk menampilkan informasi tentang film, namun dikelompokkan berdasarkan kategori-kategori yang ada. Dibagian atas, terdapat combo box yang berisi daftar kategori film sedangkan pada bagian bawah berupa daftar dari film-film tersebut. Adapun jumlah baris film yang disajikan maksimal

20 baris perhalaman. Untuk menelusuri ke 20 baris sebelum atau selanjutnya, 20 baris perhalaman. Untuk menelusuri ke 20 baris sebelum atau selanjutnya,

Gambar 4.14 Antarmuka halaman kategori film

Adapun pada kategori artis, rancangan antarmukanya mengikuti halaman kategori film seperti yang telah dijelaskan sebelumnya.

4.4.3.2 Antarmuka halaman deksripsi film

Gambar 4.15 Antarmuka halaman deskripsi film

Halaman deskripsi film bertujuan untuk menampilkan deskripsi detail dari film yang diminta oleh pengguna. Banyak informasi yang disajikan, mulai dari nama pemain film tersebut, sutradara, produser, ringkasan cerita dari film tersebut dan masih lain-lain. Rancangan antarmuka halaman ini dapat dilihat pada Gambar

4.4.3.3 Rancangan halaman deskripsi artis

Rancangan halaman ini mirip seperti pada halaman deskripsi film, kecuali deksripsi detail yang disajikan merupakan profil dari artis. Disini disajikan informasi terkait film yang pernah dibintangi, tanggal kelahiran sang artis dan lain-lain. Rancangan antarmuka halaman ini dapat dilihat pada Gambar 4.16.

Header

Depan Pencarian

Tentang

Quick search Search

Nama artis

Deskripsi Film Kategori Film Daftar Film

Artis Tanggal lahir

Kategori Artis Daftar Artis Film yang dimainkan

Berita 3.

Berita -1 Berita -2

Kategori Partner Produser film Bintang tamu film

Situs

Footer

Gambar 4.16 Antarmuka halaman deskripsi artis

4.4.3.4 Rancangan halaman daftar film

Halaman ini bertujuan menampilkan daftar film tanpa dikelompokkan berdasar kategori-kategori yang ada, melainkan menampilkannya diurutkan berdasar tanggal rilis film. Jumlah baris film yang ditampilkan dibatasi maksimal

20 baris. Disediakan pula link paging untuk menelusuri 20 baris film sebelum atau sesudahnya. Rancangan antarmuka dapat dilihat pada Gambar 4.17.

Gambar 4.17 Antarmuka halaman daftar film

4.4.3.5 Rancangan halaman daftar artis

Tampilan halam ini mirip dengan halaman daftar film, hanya saja menampilkan daftar artis. Rancangan antarmuka dapat dilihat pada Gambar 4.18.

Gambar 4.18 Antamuka halaman daftar artis

4.4.3.6 Rancangan halaman login

Pada halaman ini, disediakan dua buah input text berupa username dan password untuk memvalidasi akses ke halaman administrator. Rancangan antarmuka dapat dilihat pada Gambar 4.19

Gambar 4.19 Antarmuka halaman login

4.4.3.7 Rancangan halaman penarikan data dari luar

Halaman ini menyediakan fungsi dalam melakukan penarikan data dari luar. Terdapat form yang mengatur proses penarikan data-data tersebut. Pada form ini, terdapat textarea yang menampung query yang hendak diajukan. Pada saaat proses penarikan data dilakukan, tiap proses tersebut nantinya dicatat dan ditampilkan di bagian bawah form. Proses penarikan data sendiri menggunakan AJAX call method dan log proses ditampilkan menggunakan kode Javascript.

Selanjutnya dibagian paling bawah sendiri merupakan tabel yang memuat daftar graf data yang berhasil dibuat disertai aksi untuk mengelolanya. Daftar graf ini ditampilkan apabila sewaktu-waktu administrator hendak melihat kumpulan graf data yang sudah pernah dibuatnya serta hendak menghapus atau menambahkan data baru. Rancangan antarmuka dapat dilihat pada Gambar 4.20.

Gambar 4.20 Antarmuka halaman penarikan data

4.4.3.8 Rancangan halaman proses inferensi

Halaman ini bertujuan untuk mengatur proses inferensi yang dilakukan pada graf data yang sudah ada. Disediakan form yang mengatur bagaimana proses tersebut dilakukan.

Pada form, administrator dapat memilih graf data target untuk dilakukan proses inferensi. Selain itu, administrator juga dapat memilih jenis proses inferensi yang hendak dilakukan, apakah rule-based inference atau ontology- based inference . Apabila berbasis rule, maka administrator harus memasukkan string rule, sedangkan apabila berbasis ontology, maka administrator memilih file OWL yang akan digunakan. Pada bagian bawah setelah form, akan ditampilkan hasil dari proses tersebut. Terakhir, daftar dari graf hasil inferensi ditampilkan dalam bentuk tabel. Rancangan antarmuka dapat dilihat pada Gambar 4.21.

Sumber data

Inferensi

Nama

Model target

Model data Model hasil inferensi

Jenis inferensi

I nferensi ontology I nferensi rule

Log proses..

No

Nama

Model target

Keterangan

Aksi

Gambar 4.21 Antarmuka halaman proses inferensi

4.4.3.9 Rancangan halaman berita

Halaman berita dibuat dengan tujuan menciptakan berita yang berfungsi sebagai informasi tambahan terkait dunia perfilman. Disediakan form yang mengatur bagaimana proses ini dapat dilakukan. Pada form, terdapat combo box berisi daftar graf data target an textarea untuk menerima input query SPARQL. Disediakan juga textfield untuk mengisi judul berita dan textarea untuk mengisi deskripsi dari content berita tersebut. Dibagian bawah, terdapat daftar berita yang telah dibuat dan disajikan dalam bentuk tabel. Rancangan antarmuka dapat dilihat pada Gambar 4.22.

Gambar 4.22 Antarmuka halaman berita

BAB V IMPLEMENTASI

Bab ini membahas implementasi terhadap sejumlah fungsi utama pada sistem, dimulai dari penarikan data dari luar, pencarian terhadap data artis dan data film, proses reasoning terhadap data-data yang tersimpan di dalam sistem, dan terakhir penyajian informasi oleh sistem seputar perfilman.

5.1 Implementasi Fungsi Penarikan Data dari DBPedia

Fungsi ini pertama kali dibuat untuk menyediakan sumber data bagi sistem. Proses request dilakukan seluruhnya menggunakan AJAX Call melalui library jQuery. Mula-mula administrator mengisikan input seperti nama model untuk menyimpan graf hasil request dan string query SPARQL yang hendak diajukan. Pada saat button simpan diklik, string query SPARQL tersebut diajukan ke DBPedia SPARQL endpoint sebagai parameter dengan URL http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org .

Mengenai tampilan antarmuka form penarikan data dapat dilihat pada Gambar 5.1.

Gambar 5.1 Tampilan form penarikan data

Pada Gambar 5.2 disajikan cuplikan kode Javascript yang menangani request ke DBPedia endpoint.

var dbpedia_endpoint = "http://dbpedia.org/sparql?default-graph- uri=http://dbpedia.org";

$('#form_query_dbpedia #button_submit_model').click(function(){ var _http_endpoint = dbpedia_endpoint; var _string_query = $('#form_query_dbpedia #query').val(); var _nama_model = $('#form_query_dbpedia #nama_model').val(); var _id_endpoint = $('#form_query_dbpedia

#id_endpoint').val(); var _keterangan = $('#form_query_dbpedia #keterangan').val(); var _url_target = $('#form_query_dbpedia #url').val(); var display_message = $("#form_query_dbpedia ~ .result"); var results = ""; var error_message = ""; display_message.text("");

if(_string_query == "") { error_message = "Query string harus diisi!"; } else if(_nama_model == "") { error_message = "Nama dari model data harus diisi!"; } else {} if(error_message != ""){

display_message.append(error_message); return false;

} //first step, query ke dbpedia endpoint.... $.ajax({

type:'GET', url:_http_endpoint, dataType:'html', data:{

query:_string_query, format:'application/sparql-results+xml'

Gambar 5.2 Cuplikan kode Javascript untuk me- request data ke DBPedia

Pada saat administrator mengklik button submit, hal ini akan memicu eksekusi sekumpulan baris perintah yang terdapat dalam fungsi

$('#form_query_dbpedia #button_submit_model').click(function(){ }.

Sejumlah variabel dibuat untuk menampung nilai input pada form penarikan data. Selanjutnya request via AJAX dilakukan menggunakan perintah $.ajax({ .. }. Beberapa nilai konfigurasi disertakan didalamnya seperti url untuk menentukan url target dimana request dilakukan, type untuk menentukan jenis request (POST Sejumlah variabel dibuat untuk menampung nilai input pada form penarikan data. Selanjutnya request via AJAX dilakukan menggunakan perintah $.ajax({ .. }. Beberapa nilai konfigurasi disertakan didalamnya seperti url untuk menentukan url target dimana request dilakukan, type untuk menentukan jenis request (POST

Apabila proses request berhasil dilakukan, maka respon yang didapat berupa dokumen XML yang memuat sekumpulan URI tertentu sesuai dengan query SPARQL yang diajukan. Kumpulan URI tersebut nantinya ditelusuri satu per satu untuk memperoleh data spesifik dalam format RDF. Proses penelusuran URI tersebut dilakukan di sisi server melalui kode Javascript sebagai pemicunya. Pada Gambar 5.3 disajikan cuplikan kode Javascript untuk memicu request URI di sisi sever.

//Telusuri uri satu persatu ($(datax).find("uri")).each(function(){

loadThisURIToSystem($(this).text()); });

function loadThisURIToSystem(uri_rdf){ _r = false; $.ajax({

type:'GET', url:_url_target, dataType:'xml', data:{

act:"2", uri: uri_rdf, nama_model: _nama_model

}, success:function(data){ no_urut++; display_message.append(no_urut+". Meload dokumen RDF dengan

URI: '"+uri_rdf+"'.<br>\n"); }, ...

Gambar 5.3 Cuplikan kode Javascript untuk memicu request URI

Pada server, tiap parameter URI RDFyang diterima akan ditelusuri untuk kemudian disimpan ke dalam sistem. Cuplikan kode Java yang menangani proses tersebut disajikan pada Gambar 5.4. Log log = LogFactory.getLog(AddDataModelAction.class);

AturDataModel _atur = new AturDataModel(); int act = 0; if(request.getParameter("act") != null) { act = Integer.valueOf(request.getParameter("act")); } StringBuffer error_message = new StringBuffer(); StringBuffer result_message = new StringBuffer(); HttpSession _session; log.info("Parameter yg disertakan pada request:

"+request.getQueryString()); switch(act){

case 1: ...... case 2:

//Langkah ke-2, masukkan tiap uri tsb ke data model... _atur = new AturDataModel(); _session = request.getSession(); model = (Model)_session.getAttribute("model_db"); String _uri = request.getParameter("uri"); if( _uri != null && !_uri.isEmpty() ){

try{ model.read(_uri); //simpan dokumen RDF ke dalam sistem log.info("memuat uri "+_uri+" berhasil...");

} catch(Exception e){ error_message = new StringBuffer(); error_message.append("" +

"<result>\n" + " <type>error</type>\n" + " <message>Tidak dapat mengakses Model yg telah

dibuat!!</message>\n" + "<result>\n"); response.setContentType("application/xml"); response.getWriter().write(error_message.toString()); log.info("Tidak dapat memuat URI”); return null;

} } else { log.info("Parameter URI yg diberikan kosong!!!!"); } model.commit(); result_message = new StringBuffer(); result_message.append("" +

"<result>\n" + " <type>ok</type>\n" + " <message>Memuat uri "+_uri+"

berhasil..</message>\n" + "</result>\n"); response.setContentType("application/xml"); response.getWriter().write(result_message.toString());

break; .... response.setContentType("application/xml"); response.getWriter().write(result_message.toString()); return null;

Gambar 5.4 Cuplikan kode Java untuk menelusuri URI RDF

5.2 Implementasi Fungsi Pencarian Artis dan Film

5.2.1 Pencarian quick search

Pencarian quick search dimaksudkan untuk melakukan pencarian secara cepat tanpa harus menyertakan sejumlah input tambahan untuk membuat Pencarian quick search dimaksudkan untuk melakukan pencarian secara cepat tanpa harus menyertakan sejumlah input tambahan untuk membuat

public ArrayList<Object> getResultFromSimpleSearch(String key){ if(model==null) model

= getModelFromJenaDatabase(Settings.getSetting("main model")); String query = Prefix.getPrefix(new String[]{"rdf","rdfs", "dbpp","dbpo","xsd"}); query += "" + "select distinct ?target ?s where{" + " ?s rdf:type ?x." + " ?s rdfs:label ?target." + " FILTER((?x = dbpo:Film) || (?x = dbpo:Person)). " + " FILTER(lang(?target) = 'en')." + " FILTER regex(str(?target),\""+key+"\", \"i\") " + "} order by ?target ";

Query _query = QueryFactory.create(query); QueryExecution qexec = QueryExecutionFactory.create(_query,

model); try { ResultSet results = qexec.execSelect(); while ( results.hasNext()) {

... } } catch(Exception e){ e.getMessage(); e.printStackTrace();

} finally { qexec.close(); } return data; }

Gambar 5.5 Cuplikan kode pada pencarian quick search

Mula-mula sistem menerima input kata pencarian yang diberikan sebagai parameter POST. Selanjutnya nilai parameter tersebut dikirimkan ke method getResultFromSimpleSearch() untuk disertakan ke dalam string SPARQL. String SPARQL ini nantinya dieksekusi menggunakan method execSelect() dari class QueryExecution dan objek yang dihasilkan ditelusuri satu per satu untuk memperoleh hasil pencarian yang diminta.

Untuk melakukan pencarian quick search, user dapat melakukannya dengan mengisi input field yang terletak di bagian header sebelah kanan. Hal ini dapat dilihat pada Gambar 5.6.

Gambar 5.6 Tampilan halaman depan

5.2.2 Pencarian artis

Pencarian artis bertujuan untuk menyediakan pencarian secara spesifik berdasarkan sejumlah atribut yang melakat pada artis. Atribut yang dimaksud diantaranya seperti tanggal lahir, film yang dibintangi, kategori sang artis (komedia, aksi, atau drama), dan masih banyak lagi. Atribut-atribut yang diisi akan dihimpun untuk disertakan ke dalam string SPARQL dan kemudian dieksekusi untuk memperoleh hasil yang diinginkan.

Gambar 5.7 memuat cuplikan kode yang berisi fungsi pencarian artis.

public String getResultSearch(){ StringBuffer query = new StringBuffer(); query.append(Prefix.getAllPrefix()); query.append("Select distinct ?artis ?name {\n"); query.append(wherePredicate.toString()); query.append(filterPredicate.toString()); query.append("} order by ?name" ); if(model == null){

model = getModelFromJenaDatabase(Settings.getSetting("main model")); } Query _query = QueryFactory.create(query.toString()); log.info(query); QueryExecution qexec = QueryExecutionFactory.create(_query,

model); try { ResultSet results = qexec.execSelect(); ...

} catch(Exception e){

e.getMessage(); e.printStackTrace(); }

finally { qexec.close(); } log.info(tableResults.toString()); return tableResults.toString(); }

Gambar 5.7 Cuplikan kode pada pencarian aktor/artis

Untuk tampilan antarmuka form pencarian artis dapat dilihat pada Gambar

Gambar 5.8 Tampilan halaman pencarian aktor/artis

5.2.3 Pencarian film

Pencarian film ini bertujuan untuk mencari sejumlah film secara spesifik dengan menambahkan beberapa atribut di dalam proses pencarian seperti nama pemainnya, tanggal dirilis, nama sutradara, dan masih banyak lagi. Seperti pada pencarian artis, atribut-atribut yang diisi selanjutnya dihimpun untuk disertakan ke dalam string query SPARQL dan kemudian dieksekusi untuk memperoleh data yang diinginkan. Gambar 5.9 memuat cuplikan kode yang berisi fungsi pencarian.

Public String getResultSearch(){ StringBuffer query = new StringBuffer(); query.append(Prefix.getAllPrefix()); query.append(“Select distinct ?film ?judul {\n”); query.append(wherePredicate.toString()); query.append(filterPredicate.toString()); query.append(“} order by ?judul “); if(model == null) { model = getModelFromJenaDatabase( Settings.getSetting(“main

model”)); } log.info(query); Query _query = QueryFactory.create(query.toString()); QueryExecution qexec = QueryExecutionFactory.create(_query,

model); try { ResultSet results = qexec.execSelect();

... } catch(Exception e){ e.getMessage(); e.printStackTrace();

} finally { qexec.close(); } log.info(tableResults.toString()); return tableResults.toString(); }

Gambar 5.9 Cuplikan kode pada pencarian film

Untuk tampilan antarmuka form pencarian film dapat dilihat pada Gambar

5.10.

Gambar 5.10 Tampilan halaman pencarian film

5.3 Implementasi fungsi reasoning data

Proses reasoning dilakukan dengan tujuan untuk menghasilkan statement tambahan yang bersumber dari kumpulan statement RDF yang sudah ada. Administrator dapat memilih jenis inferensi yang diinginkan, apakah berbasis ontologi atau berbasis rule. Untuk inferensi berbasis rule, maka jenis rule yang dipakai adalah Jena rule.

Tampilan antarmuka form reasoning data dapat dilihat pada Gambar 5.11.

Gambar 5.11 Tampilan halaman form reasoning data

Adapun cuplikan kode yang memuat proses inferensi dapat dilihat pada Gambar 5.12.

private InfModel makeInferenceInModel(Model _model, String ontology_file, String rule_string){

Model data = _model; OntModel ontology_model =

ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM, data); Reasoner reasoner ;

if(ontology_file != null && !ontology_file.isEmpty()) { log.info("Mencoba memuat file ontology: "+ontology_file); InputStream in = FileManager.get().open(ontology_file); if(in != null) { ontology_model.read(in, null); } //Jika ontmodel ada, lakukan inference menggunakan owl

reasoner... if(!ontology_model.isEmpty()){ reasoner = ReasonerRegistry.getOWLReasoner(); reasoner = reasoner.bindSchema(ontology_model); inf_model = ModelFactory.createInfModel(reasoner, data); data = (Model)inf_model; }} //jika rule string ada, lakukan inference menggunakan rule

string tsb.. if(!rule_string.isEmpty()){ try{ List rule = Rule.parseRules(rule_string); string tsb.. if(!rule_string.isEmpty()){ try{ List rule = Rule.parseRules(rule_string);

e.getMessage(); e.printStackTrace();

}} if(inf_model == null) log.info("Tidak ada proses inferensi yg terjadi!"); return inf_model; }

Gambar 5.12 Cuplikan kode pada proses inferensi data

Pada cuplikan kode diatas, sejumlah variabel dibuat untuk menampung input yang diberikan, seperti nama file ontologi, string rule, dan nama instance model yang dijadikan target. Selanjutnya apabila jenis inferensi yang digunakan adalah

digunakan method

ReasonerRegistry.getOWLReasoner()

untuk memuat OWL reasoner yang terkandung di dalam Jena library. Sedangkan apabila jenis inferensi berbasis rule yang dipilih, maka digunakan perintah new GenericRuleReasoner(rule) untuk menghasilkan rule reasoner. Setelah reasoner yang diperlukan telah dibuat, maka langkah terakhir adalah melakukan proses inferensi dengan menggunakan method ModelFactory.createInfModel(reasoner, data) . Hal ini akan menghasilkan sebuah instance model terbaru yang memuat sekumpulan statement dari instance model target dan sejumlah statement tambahan yang dihasilkan dari proses tersebut (entailment statement). Apabila berhasil, selanjutnya instance model yang dihasilkan ini akan disimpan ke dalam sistem.

5.4 Implementasi Fungsi Penyajian Informasi

5.4.1 Halaman daftar artis

Halaman ini dibangun untuk menampilkan daftar sejumlah artis berdasarkan urutan abjad. Daftar artis yang ditampilkan maksimal 20 per halaman. Pada bagian atas disediakan link previous dan next apabila user hendak melihat daftar artis sebelum atau sesudahnya. Disediakan pula input filter dibagian atas sebelum link previous dan next. Fungsinya mirip dengan pencarian quick search , untuk melakukan pencarian berdasarkan input yang diberikan Halaman ini dibangun untuk menampilkan daftar sejumlah artis berdasarkan urutan abjad. Daftar artis yang ditampilkan maksimal 20 per halaman. Pada bagian atas disediakan link previous dan next apabila user hendak melihat daftar artis sebelum atau sesudahnya. Disediakan pula input filter dibagian atas sebelum link previous dan next. Fungsinya mirip dengan pencarian quick search , untuk melakukan pencarian berdasarkan input yang diberikan

Gambar 5.13 Tampilan halaman daftar artis

Adapun cuplikan kode yang memuat string SPARQL untuk me-retrieve data-data artis dapat dilihat pada Gambar 5.14.

private void arrangeQuery(){ query = Prefix.getPrefix(new String[]{"rdf","rdfs", "rdf", "dbpp","dbpo","xsd", "foaf"}); if(filter.isEmpty()){ query += "" + "select distinct ?any ?name where{" + "?any rdf:type dbpo:Person." + "?any rdfs:label ?name." + "FILTER( lang(?name) = 'en')" + "} ";

query_total = query; } else { query += "" + "select distinct ?any ?name where{" + "?any rdf:type dbpo:Person." + "?any rdfs:label ?name." + "FILTER regex(str(?name), '"+filter+"', 'i')" + "FILTER( lang(?name) = 'en')" + "} ";

query_total = query; } int x = Integer.valueOf(offset) *

Integer.valueOf(Settings.getSetting("limit result")); query+="OFFSET "+x+" LIMIT "+Settings.getSetting("limit result"); log.info("The query to display list artis is: \n"+query); }

Gambar 5.14 Cuplikan kode untuk menampilkan daftar artis

5.4.2 Halaman kategori artis

Halaman kategori artis ini mirip dengan halaman daftar artis, hanya saja tiap artis yang ada dikelompokkan berdasarkan jenis masing-masing artis, seperti artis komedi, aktor Amerika, aktris yang juga sekaligus model, dan masih banyak lagi. Pengguna dapat memilih kategori artis yang dikehendaki dengan memilih sekumpulan kategori yang tertera dalam combo-box, lalu mengklik button pilih. Selanjutnya sistem akan menampilkan daftar artis sesuai dengan kategori yang dipilih oleh pengguna. Tampilan dari halaman ini ditunjukkan pada Gambar 5.15.

Gambar 5.15 Tampilan halaman kategori artis

Adapun cuplikan kode untuk menampilkan daftar artis berdasarkan kategori tertentu dapat dilihat pada Gambar 5.16.

public ArrayList<DaftarArtis> getListArtistWithCategory(String uri_kategori){

if(model == null)

{model = getModelFromJenaDatabase(Settings.getSetting("main model")); data = new ArrayList<DaftarArtis>(); ListStatementRelatedWithURI getIt = new

ListStatementRelatedWithURI(); int x = offset * Integer.valueOf(Settings.getSetting("limit result")); query = Prefix.getPrefix(new String[]{"rdf", "rdfs", "skos", "dbpp", "dbpo"}); query+= "select distinct ?artis ?nama where {" + " ?artis rdf:type dbpo:Person. " + " ?artis rdfs:label ?nama. " + " ?artis skos:subject <"+uri_kategori+">. "+ " FILTER(lang(?nama) = 'en'). "+

"} order by ?artis offset "+x+" limit "+Settings.getSetting("limit result");

Query _query = QueryFactory.create(query); QueryExecution qexec = QueryExecutionFactory.create(_query,

model); try { ResultSet results = qexec.execSelect(); while ( results.hasNext()) {

QuerySolution soln = results.nextSolution(); ... } } catch(Exception e){ e.getMessage(); e.printStackTrace();

} finally {qexec.close(); } return data;

Gambar 5.16 Cuplikan kode untuk daftar artis per kategori

5.4.3 Halaman daftar film

Tampilan dari halaman daftar film ini mirip dengan tampilan pada halaman daftar artis. Sejumlah film ditampilkan maksimal 20 judul film per halaman dan diurutkan berdasarkan tanggal rilis film tersebut. Disediakan pula link previous dan next apabila pengguna hendak melihat daftar fim sebelum atau sesudahnya. Tampilan halaman daftar film ini dapat dilihat pada Gambar 5.17.

Gambar 5.17 Tampilan halaman daftar film

Adapun cuplikan kode untuk me-retrieve data-data film dapat dilihat pada Gambar 5.18.

private void arrangeQuery(){ query = Prefix.getPrefix(new String[]{"rdf","rdfs","dbpp", "dbpo", "xsd"}); if(filter.isEmpty()){ query += "" + "select distinct ?any ?title where{" + "?any rdf:type dbpo:Film." + "?any rdfs:label ?title." + "?any dbpo:releaseDate ?rilis." + "FILTER( lang(?title) = 'en' )." + "} " ;

query_total = query; } else { query += "" + "select distinct ?any ?title where{" + "?any rdf:type dbpo:Film." + "?any rdfs:label ?title." + "?any dbpo:releaseDate ?rilis." + "FILTER( lang(?title) = 'en' )." + "FILTER regex(str(?title), \""+filter+"\", \"i\")" +

"} " ; query_total = query; } String _ob = ""; if(order.compareToIgnoreCase("DESC") == 0){

query+="ORDER BY DESC("+_ob+") "; } else query+="ORDER BY "+_ob+" "; int x = Integer.valueOf(offset) *

Integer.valueOf(Settings.getSetting("limit result")); query+="OFFSET "+x+" LIMIT "+Settings.getSetting("limit result"); log.info("The query to display list film is: \n"+query); }

Gambar 5.18 Cuplikan kode untuk menampilkan daftar film

5.4.4 Halaman kategori film

Halaman ini mengelompokkan daftar film yang hendak ditampilkan berdasarkan kategori film tersebut. Pertama kali ditampilkan, halaman ini memuat daftar kategori dari film ke dalam combo-box. Selanjutnya pengguna memilih salah satu dari daftar kategori tersebut dan mengklik button pilih untuk menampilkan sejumlah film berdasarkan kategori yang dipilih. Daftar film yang ditampilkan dibatasi maksimal 20 film per halaman. Tampilan halaman kategori film dapat dilihat pada Gambar 5.19.

Gambar 5.19 Tampilan halaman kategori film

Adapun cuplikan kode untuk menampilkan daftar film berdasarkan kategori dapat dilihat pada Gambar 5.20.

public ArrayList<DaftarFilm> getListFilmWithCategory(String uri_kategori){

if(model == null){ model = getModelFromJenaDatabase(Settings.getSetting("main model")); } data = new ArrayList<DaftarFilm>(); ListStatementRelatedWithURI getIt = new

ListStatementRelatedWithURI(); int x = offset * Integer.valueOf(Settings.getSetting("limit result")); String query = Prefix.getPrefix(new String[]{"rdf", "rdfs", "skos", "dbpp", "dbpo"}); query+= "select distinct ?film ?judul where {" + " ?film rdf:type dbpo:Film." + " ?film rdfs:label ?judul. " + " ?film skos:subject <"+uri_kategori+">. " + " FILTER(lang(?judul) = 'en'). "+ "} order by ?film offset "+x+" limit

"+Settings.getSetting("limit result"); log.info(query); Query _query = QueryFactory.create(query); QueryExecution qexec = QueryExecutionFactory.create(_query,

model); try { ResultSet results = qexec.execSelect(); while ( results.hasNext()) {

QuerySolution soln = results.nextSolution(); ...

} } catch(Exception e){ e.getMessage(); e.printStackTrace();

} finally { qexec.close(); } return data;

Gambar 5.20 Cuplikan kode untuk daftar film per kategori

5.4.5 Form pembuatan berita

Dengan form ini administrator dapat membuat berita tambahan terkait film atau artis yang tidak tersajikan pada halaman daftar film atau daftar artis. Disini administrator memilih instance model yang dijadikan target beserta query SPARQL untuk menampilkan berita yang diinginkan. Input yang diberikan nantinya disimpan ke dalam sistem dan pada halaman depan ditampilkan link daftar berita yang dibuat. Apabila ada pengunjung yang mengklik link tersebut, maka query SPARQL yang terkait akan dieksekusi dan menghasilkan berita yang diminta. Tampilan form ini dapat dilihat pada Gambar 5.21.

Gambar 5.21 Form pembuatan berita

Adapun cuplikan kode untuk menyimpan input data pada form pembuatan berita dapat dilihat pada Gambar 5.22.

Public boolean AddBerita(String model, String judul, String deskripsi, String query){

DataConnection _dc = new DataConnection(); Connection _con = _dc.createConnection(); if(!isModelAlreadyExist(model)) { return false; }

String sql = “insert into berita set no = null, judul = ‘”+judul+”’, nama_graf_sumber = ‘”+model+”’ , query_sparql = ‘”+query+”’, deskripsi = ‘”+deskripsi+”’ “;

log.info(“Eksekusi query berupa: “+sql); try{

Statement _stat = _con.createStatement(); _stat.executeUpdate(sql); }catch(Exception e){

e.getMessage(); e.printStackTrace(); return false;

} return true;

Gambar 5.22 Cuplikan kode untuk menyimpan input pada form pembuatan berita

Pada method AddBerita() , terdapat sejumlah parameter yang menampung nilai dari input yang diberikan seperti String model, String judul, String deskripsi, dan String query . Selanjutnya parameter tersebut disertakan ke dalam variabel sql untuk membentuk perintah query SQL berupa insert data. Nantinya query ini dieksekusi menggunakan perintah _stat.executeUpdate(sql) dan apabila berhasil akan menghasilkan nilai kembalian berupa true .

BAB VI HASIL PENELITIAN DAN PEMBAHASAN

Setelah serangkaian fungsi pada sistem berhasil diimplementasikan, langkah selanjutnya menguji apakah fungsi tersebut berjalan sesuai dengan rancangan yang telah ditetapkan sebelumnya. Pada fungsi penarikan data, pengujian dilakukan dengan melakukan request langsung ke DBPedia melalui form yang disediakan, fungsi reasoning dilakukan dengan memasukkan input berupa file ontologi atau string rule, fungsi pembuatan halaman berita dengan memasukkan sejumlah input seperti string SPARQL ke dalam form pembuatan berita, dan terakhir fungsi pencarian dengan memasukkan sejumlah input terhadap atribut-atribut tertentu untuk memperoleh hasil pencarian yang spesifik.

6.1 Penarikan Data ke DBPedia Endpoint

Dimisalkan administrator hendak me-request sejumlah data terkait film yang dirilis mulai dari tahun 2009 dan seterusnya maksimal 200. Adapun query SPARQL yang diisikan dapat dilihat pada Gambar 6.1.

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbpp: <http://dbpedia.org/property/> PREFIX dbpo: <http://dbpedia.org/ontology/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> select distinct ?film where{ ?film rdf:type dbpo:Film. ?film dbpo:starring ?artis. ?film dbpo:releaseDate ?rilis. FILTER(?rilis >= "2009-01-01"^^xsd:date) } order by ?film limit 200

Gambar 6.1 Query SPARQL untuk menampilkan daftar film

Selanjutnya query SPARQL tersebut diisikan ke dalam form penarikan data. Untuk instance model yang akan dihasilkan diberi nama “Daftar Film” dan diisikan pada field nama. Proses ini dapat dilihat pada Gambar 6.2.

Gambar 6.2 Pengisian input pada form penarikan data

Setelah semua input yang diperlukan diisi, selanjutnya button simpan diklik untuk memulai proses penarikan data. Begitu diklik, request akan langsung dikirim ke DBPedia dengan parameter berupa string SPARQL. Bila berhasil, diperoleh result dalam bentuk RDF/XML dan proses dilanjutkan dengan memuat tiap-tiap URI RDF yang tertera didalamnya. Selanjutnya tiap proses yang terjadi dicatat dan ditampilkan dibawah form dan di layar console menggunakan kode Javascript, seperti event saat request ke DBPedia dilakukan, event saat memulai penyimpanan data, dan event saat memulai request ke alamat URI RDF.

Gambar 6.3 dan 6.4 menampilkan aktifitas pencatatan (logging) oleh sistem selama proses penarikan data berlangsung.

Gambar 6.3 Tampilan log pada form penarikan data

Gambar 6.4 Tampilan log pada layar console di NetBeans

Pada Gambar 6.3 dan 6.4 terlihat daftar alamat URI yang dimuat kedalam sistem. Alamat URI ini ditampilkan satu persatu di layar seiring dengan proses yang terjadi pada sistem dan terus berlangsung hingga proses penarikan data selesai. Dengan adanya pencantuman URI ini, administrator dapat melihat daftar URI yang di-retrieve terkait dengan query SPARQL yang dikirim.

Setelah proses selesai, administrator dapat me-refresh halaman penarikan data untuk melihat instance model yang berhasil dibuat. Gambar 6.5 menampilkan instance model dengan nama “Daftar Film” yang berhasil dibuat oleh sistem.

Gambar 6.5 Instance model “Data Film” yang berhasil dibuat

6.2 Reasoning Data

Proses reasoning dilakukan dengan tujuan memperoleh statement tambahan berdasarkan pada kumpulan statement sebelumnya. Disini hendak dilakukan pengujian proses reasoning menggunakan Jena rule. Adapun contoh kasusnya adalah menyediakan daftar film yang layak untuk ditonton dengan mendasarkan pada aktor yang memerankan film tersebut. Apabila aktor tersebut pernah mendapat penghargaan (award), maka film yang dimainkannya akan disertakan ke dalam daftar film yang direkomendasikan.

Gambar 6.6 menampilkan string rule yang dipakai dalam proses inferensi.

[ goodMovies: (?x rdf:type http://dbpedia.org/ontology/Film), (?x http://dbpedia.org/ontology/starring ?artis), (?artis http://purl.org/dc/terms/subject ?o), regex(str(?o), '.*award.*' ) -> (?x rdf:type http://www.linkeddataProject/ns#goodMovies) ]

Gambar 6.6 String rule yang disertakan pada proses reasoning

Selanjutnya string rule ini disertakan ke dalam form reasoning data dengan target instance model yaitu “New Movies”. Apabila semua input yang diperlukan sudah diisi, button “Proses” diklik untuk memulai proses. Hal ini dapat dilihat pada Gambar 6.7.

Gambar 6.7 Pengisian input pada form reasoning

Pada saat proses dimulai, sejumlah aktifitas yang terjadi akan dicatat pada layar console di NetBeans. Aktifitas ini meliputi pemuatan instance model yang dijadikan target, penyiapan reasoner yang digunakan (dalam hal ini rule engine bawaan Jena), ekseskusi proses reasoning, dan terakhir menampilkan entailment statement yang diperoleh apabila proses reasoning berjalan sukses. Gambar 6.8 menampilkan aktifitas yang dicatat pada layar console termasuk entailment statement yang diperoleh.

Gambar 6.8 Log aktifitas di layar console NetBeans

6.3 Pembuatan Berita

Dimisalkan administrator hendak membuat halaman berita tentang perolehan pendapatan serta dana pembuatan untuk film-film tahun 2009. Untuk itu administrator memilih instance model yang dipakai, mengisi judul berita, content berita, dan query SPARQL untuk menampilkan data yang terkait. Secara default , data-data ini nantinya ditampilkan dalam bentuk tabel. Gambar 6.9 menampilkan proses pengisian pada form pembuatan berita.

Gambar 6.9 Pengisian input pada form pembuatan berita

Administrator dapat memeriksa apakah query SPARQL yang diisikan valid atau tidak dengan mengklik button “Tes query”. Apabila tidak ada error, tabel yang memuat data-data terkait akan ditampilkan dibawah form penarikan data. Proses ini sendiri dilakukan via AJAX. Gambar 6.10 menampilkan result pad saat button “Tes query” diklik.

Gambar 6.10 Tabel data hasil tes pada SPARQL Query

Setelah semuanya diisikan dengan benar, selanjutnya administrator mengklik button “Buat Berita” untuk memulai proses penyimpanan. Apabila berhasil, pada tabel daftar berita akan tertera judul berita yang baru saja dibuat, yaitu “Pendapatan Film 2009”. Gambar 6.11 menampilkan daftar berita yang tersimpan dalam sistem.

Gambar 6.11 Data berita yang berhasil disimpan

Content dari berita ini akan ditampilkan pada halaman depan dan dapat diakses oleh setiap pengunjung situs ini. Link yang merefer ke bagian berita ditampilkan di sisi sebelah kanan bagian bawah. Pengunjung dapat memilih berita yang diinginkan dengan mengklik link berita tersebut.

Gambar 6.12 menampilkan halaman depan situs yang memuat content berita yang dibuat.

Gambar 6.12 Informasi berita pada halaman depan situs

6.4 Pencarian Data

6.4.1 Pencarian data film

Pencarian film secara spesifik dilakukan dengan memasukkan sejumlah nilai pada atribut-atribut tertentu, seperti judul film, tanggal dirilis, nama sutradara, dan lain-lain. Misalkan hendak dilakukan pencarian untuk film dengan kategori “American comedy films” keluaran tahun 2009 dan seterusnya, maka user memilih kategori film yang tertera pada list dan mengisi nilai “2009-01-01” pada field tanggal rilis. Gambar 6.13 menampilkan query SPARQL yang dihasilkan pada saat user memulai pencarian dengan mengklik button search.

PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#> PREFIX dc: <http://purl.org/dc/terms/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX movie: <http://data.linkedmdb.org/resource/movie/> PREFIX imdb: <http://data.linkedmdb.org/resource/> PREFIX my: <http://www.linkeddataProject/ns#> PREFIX dbpo: <http://dbpedia.org/ontology/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbpp: <http://dbpedia.org/property/> PREFIX dbp: <http://dbpedia.org/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX fn: <http://www.w3.org/2005/xpath-functions#> Select distinct ?film ?judul { ?film rdf:type dbpo:Film. ?film rdfs:label ?judul. ?film skos:subject ?kategori. ?film dbpo:releaseDate ?tanggal_rilis. FILTER(lang(?judul)='en'). FILTER( str(?kategori) = "http://dbpedia.org/resource/Category:American_comedy_films" ). FILTER(?tanggal_rilis > "2009-01-01"^^xsd:date ). } order by ?judul

Gambar 6.13 Query SPARQL yang dihasilkan pada pencarian film

Setelah selesai diproses, selanjutnya hasil pencarian tersebut ditampilkan dibawah form pencarian data. Gambar 6.14 merupakan hasil dari pencarian yang dilakukan. Total terdapat 29 judul film yang masuk dalam daftar pencarian.

Gambar 6.14 Tabel data hasil pencarian film

Contoh lainnya, dilakukan pencarian untuk film keluaran tahun 2009 yang didistribusikan oleh Warner Bros. Untuk itu user memasukkan nilai “2009-01-01” pada field tanggal rilis dan nilai “Warner Bros” pada field distributor. Adapun query SPARQL yang dihasilkan dapat dilihat pada Gambar 6.15.

PREFIX dbpo: <http://dbpedia.org/ontology/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> Select distinct ?film ?judul { ?film rdf:type dbpo:Film. ?film rdfs:label ?judul. ?film dbpo:releaseDate ?tanggal_rilis. ?film dbpo:distributor ?distributor. FILTER(lang(?judul)='en'). FILTER(?tanggal_rilis > "2009-01-01"^^xsd:date ). FILTER(regex(str(?distributor), "warner_bros", "i")). } order by ?judul

Gambar 6.15 Query SPARQL yang dihasilkan pada pencarian film

Hasil dari pencarian ini berupa 23 judul film disertai tanggal rilis dan nama distributor masing-masing film tersebut. Gambar 6.16 menampilkan daftar film hasil pencarian tersebut.

Gambar 6.16 Tabel data hasil pencarian film

6.4.2 Pencarian data artis

Pencarian artis dilakukan dengan menyertakan sejumlah atribut tertentu ke dalam proses pencarian, seperti nama, judul film yang dibintangi, tanggal lahir, dan lain-lain. Misalkan hendak dilakukan pencarian artis yang pernah menjadi sutradara sekaligus produser suatu film. Untuk itu user memberi centang pada checkbox sutradara dan produser, lalu mengklik button search untuk memulai proses pencarian. Adapun query SPARQL yang dihasilkan dapat dilihat pada Gambar 6.17.

PREFIX imdb: <http://data.linkedmdb.org/resource/> PREFIX dbpo: <http://dbpedia.org/ontology/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> Select distinct ?artis ?name { ?artis rdf:type dbpo:Person. ?artis rdfs:label ?name. ?sutradara_film dbpo:director ?artis. { ?produser_film dbpo:executiveProducer ?artis}

union { ?produser_film dbpo:producer ?artis}. FILTER(lang(?name)='en'). } order by ?name

Gambar 6.17 Query SPARQL pada pencarian artis

Hasil dari proses pencarian ini diperoleh 34 nama artis disertai judul film yang pernah disutradarai dan diproduseri. Gambar 6.18 menampilkan hasil dari pencarian tersebut.

Gambar 6.18 Tabel data hasil pencarian artis

Contoh lainnya, dilakukan pencarian artis amerika berdarah yahudi kelahiran tahun 1980 an. Untuk itu user memilih “American Jews” pada kategori artis dan memasukkan nilai “1980-01-01” pada field tanggal lahir. Adapun query SPARQL yang dihasilkan dapat dilihat pada Gambar 6.19.

PREFIX dbpo: <http://dbpedia.org/ontology/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> Select distinct ?artis ?name { ?artis rdf:type dbpo:Person. ?artis rdfs:label ?name. ?artis dbpo:birthDate ?tanggal_lahir. ?artis skos:subject ?kategori. FILTER(lang(?name)='en'). FILTER(?tanggal_lahir > "1980-01-01"^^xsd:date ). FILTER( str(?kategori) = "http://dbpedia.org/resource/Category:American_Jews" ). } order by ?name

Gambar 6.19 Query SPARQL pada pencarian artis

Hasil dari pencarian ini akan menghasilkan 9 daftar artis amerika berdarah yahudi disertai tanggal lahirnya. Daftar hasil pencarian ini dapat dilihat pada Gambar 6.20.

Gambar 6.20 Tabel data hasil pencarian artis

6.4.3 Penelusuran hypertext link pada halaman depan situs

Pada halaman depan situs, tiap nama artis dan judul film yang tertera disertakan hypertext link. Tujuannya apabila user mengklik link tersebut, maka akan memperoleh informasi baru. Misalkan user mengklik nama artis yang tersaji pada halaman daftar, maka aplikasi akan menampilkan profil detil tentang artis tersebut seperti judul film yang dibintangi, tanggal lahir, dan lain sebagainya. Gambar 6.1 menampilkan profil tentang artis yang bernama Dany Glover.

Gambar 6.21 Halaman profil artis “Dany Glover”

Tak hanya itu, user juga dapat menelusuri informasi tiap-tiap film yang yang dibintangi oleh Dany Glover. Pada daftar judul film yang tertera disertakan link yang mengarah ke informasi tentang film tersebut. Apabila user mengklik salah satu link tersebut, maka akan memperoleh deskripsi tentang film tersebut.

Gambar 6.22 Halaman informasi film “Harimaya Bridge”

Dengan hypertext link, tiap link memuat informasi terkait dengan hal yang dideskripsikan dan informasi-informasi tersebut disediakan oleh situs ini dengan bersumber dari linked data. Link yang terkait dengan situs luar juga disediakan apabila informasi yang diinginkan tidak ada pada situs ini, contohnya seperti informasi tentang produser film, distributor film, dan lain-lain.

BAB VII KESIMPULAN DAN SARAN

7.1 Kesimpulan

Dari pembahasan pada bab-bab sebelumnya, dapat diperoleh kesimpulan sebagai berikut:

1. Implementasi penggunaan sumber data dari luar berupa linked data berhasil dilakukan oleh sistem.

2. Sistem yang dibangun dapat menyajikan informasi dengan domain seputar perfilman, menyediakan pencarian spesifik dan proses reasoning pada data yang tersimpan.

3. Pemanfaatan format RDF disertai mekanisme content negotiation mempermudah didalam proses pengumpulan data yang tersebar di internet. Pengguna (mesin pencari) cukup menelusuri link yang tertera untuk membawa ke sumber data yang lain dengan syarat seluruh data tersimpan dalam format RDF.

7.2 Saran

Berikut ini saran yang dapat dijadikan sebagai acuan bagi penelitian selanjutnya:

1. Adanya kolaborasi ontology (mapping ontology/ alignment ontology) saat memanfaatkan sumber data RDF dari luar untuk menyediakan proses reasoning yang lebih powerfull terkait domain dan konteks data tersebut.

2. Saat ini mulai berkembang penelitian tentang faceted search and navigation dimana eksplorasi data dalam format RDF dilakukan dengan mengelompokkan graf statement ke dalam facet dan menampilkan data dengan mem-filter facet yang dipilih. Hal ini cocok bila digabungkan dengan linked data karena menyediakan banyak data RDF dengan berbagai macam domain.

3. Pastikan ketersediaan koneksi jaringan yang tidak harus cepat namun stabil dalam menelusuri sejumlah URI. Hal ini penting mengingat data yang dipakai bersumber dari internet.