Praktikum Semantic Web: Panduan Konversi Data SIAKAD ke RDF, RDFS, dan SPARQL
Praktikum Semantic Web: Panduan Konversi Data SIAKAD dari Relasional (SQL/CSV) ke RDF, RDFS, dan Query SPARQL dengan Apache Jena Fuseki (Tanpa Python)
Kategori: Modul Praktikum / Basis Data & Semantic Web | Estimasi Waktu: 60–90 Menit | Tingkat: Pemula – Menengah (Tanpa Python)
Pengantar Praktikum: Modul mandiri ini membimbing mahasiswa memahami transisi dari model relasional ke model Knowledge Graph Web Semantik secara bertahap tanpa kode Python: dimulai dari validasi SQL, konversi tabular ke RDF Turtle, hosting triple store di Apache Jena Fuseki, hingga kueri taksonomi hierarki SPARQL.
Download Resource & Bahan Praktikum: Seluruh berkas latihan (CSV, SQLite database, skrip SQL, RDF acuan 8.224 triple, skema RDFS, kueri SPARQL, dan modul) dapat diunduh pada tautan resmi: https://s.telkomuniversity.ac.id/rdfacw
Tujuan Pembelajaran
- Memahami perbedaan arsitektur model relasional (baris/kolom) vs model graf semantik (RDF Triple).
- Mengeksplorasi keterkaitan data relasional serta menguji relasi PK-FK melalui SQLiteOnline.
- Mengonversi data tabular CSV menjadi RDF Turtle menggunakan ConvertMatrix dan Prompt LLM terstruktur.
- Membangun Triple Store lokal dengan Apache Jena Fuseki dan memuat RDF acuan (8.224 triple).
- Mengeksekusi kueri SPARQL serta menelusuri hierarki taksonomi RDFS memanfaatkan Property Path.
1. Peta Arsitektur Data SIAKAD Sintetis
Praktikum ini menggunakan 8 tabel data SIAKAD sintetis yang saling berelasi:
| Nama Tabel | Kunci Utama (PK) | Kunci Asing (FK) & Relasi | Jumlah Record |
|---|---|---|---|
| program_studi | prodi_id |
- | 3 |
| dosen | nidn |
prodi_id → program_studi |
12 |
| mata_kuliah | kode_mk |
- | 24 |
| mahasiswa | nim |
prodi_id → program_studi |
300 |
| kelas_kuliah | kelas_id |
kode_mk, nidn |
36 |
| krs | krs_id |
nim → mahasiswa, kelas_id → kelas |
1.200 |
| kegiatan | kegiatan_id |
- | 30 |
| partisipasi | partisipasi_id |
nim → mahasiswa, kegiatan_id → kegiatan |
360 |
Alur Relasi Kunci yang Diuji:
- Jalur Akademik: Mahasiswa → KRS → Kelas Kuliah → Mata Kuliah
- Jalur Kegiatan: Mahasiswa → Partisipasi → Kegiatan
2. Dasar Teori: Relasional vs Graf RDF
Pada basis data relasional, fakta dihubungkan menggunakan kunci asing (Foreign Key) yang dipertemukan lewat klausa JOIN. Sedangkan pada Semantic Web (RDF), data dimodelkan sebagai graf relasi mandiri: Subject → Predicate → Object.
Contoh penulisan serialisasi Turtle (.ttl):
@prefix ex: <https://example.org/siakad/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
ex:230001 ex:mengikutiKegiatan ex:A013 .
ex:A013 rdfs:label "Seminar AI 13" ;
a ex:Seminar .
Dalam bentuk graf, relasi di atas membentuk simpul (node) entitas yang saling terhubung dengan edge berarah:
3. Tahap 1: Eksplorasi Data di SQLiteOnline
Buka situs https://sqliteonline.com/ pada browser Anda. Pilih tipe mesin SQLite, lalu buka berkas siakad.sqlite atau jalankan skrip SIAKAD_LENGKAP_SCHEMA_DAN_DATA.sql.
Kueri 1: Validasi Jumlah Baris Data
SELECT COUNT(*) AS jumlah_mahasiswa FROM mahasiswa;
SELECT COUNT(*) AS jumlah_partisipasi FROM partisipasi;
SELECT COUNT(*) AS jumlah_krs FROM krs;
Hasil Validasi yang Diharapkan: 300 mahasiswa, 360 partisipasi, dan 1.200 KRS.
Kueri 2: JOIN Mata Kuliah Mahasiswa (NIM 230001)
SELECT m.nim, m.nama, mk.nama_mk
FROM mahasiswa m
JOIN krs r ON r.nim = m.nim
JOIN kelas_kuliah k ON k.kelas_id = r.kelas_id
JOIN mata_kuliah mk ON mk.kode_mk = k.kode_mk
WHERE m.nim = '230001'
ORDER BY mk.nama_mk;
Kueri 3: JOIN Partisipasi Kegiatan Mahasiswa (NIM 230001)
SELECT m.nim, m.nama, a.nama_kegiatan, a.jenis_kegiatan
FROM mahasiswa m
JOIN partisipasi p ON p.nim = m.nim
JOIN kegiatan a ON a.kegiatan_id = p.kegiatan_id
WHERE m.nim = '230001'
ORDER BY a.kegiatan_id;
4. Tahap 2: Konversi CSV ke RDF Turtle
Metode A: Konverter Online (ConvertMatrix)
Buka situs https://file.shawonweb.com/csv-to-rdf, unggah kegiatan.csv, pilih format keluaran Turtle (.ttl), tentukan namespace https://example.org/siakad/, lalu unduh hasilnya.
Metode B: Rekayasa Prompt LLM Terstruktur
Gunakan template prompt berikut pada ChatGPT / Gemini / Claude untuk memetakan data CSV ke RDF Turtle:
Anda adalah asisten pemetaan Semantic Web profesional.
Tugas Anda: Petakan data CSV SIAKAD sintetis berikut ke format RDF Turtle (.ttl).
Aturan Pemetaan:
- PREFIX ex: <https://example.org/siakad/>
- PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
- kegiatan_id -> resource IRI ex:<ID>
- nama_kegiatan -> rdfs:label
- jenis_kegiatan -> rdf:type (a) ex:<Jenis> (contoh: ex:Seminar)
- nim mahasiswa -> resource IRI ex:<NIM>
- relasi partisipasi -> ex:<NIM> ex:mengikutiKegiatan ex:<kegiatan_id>
- Seminar, Workshop, Kompetisi rdfs:subClassOf ex:KegiatanAkademik .
- ex:KegiatanAkademik rdfs:subClassOf ex:Kegiatan .
- Jangan mengarang data baru di luar baris CSV!
Sampel CSV:
[Tempel 5 baris dari contoh_flat_partisipasi_kegiatan.csv]
5. Tahap 3: Menjalankan Apache Jena Fuseki
- Unduh distribusi binary resmi Apache Jena Fuseki dari situs resmi W3C/Apache Jena.
- Jalankan server via terminal:
./fuseki-server(macOS/Linux) ataufuseki-server.bat(Windows). - Akses dashboard di http://localhost:3030/
- Pilih Manage datasets → Add new dataset, beri nama siakad_acuan dengan tipe penyimpanan Persistent (TDB2).
- Masuk ke dataset, pilih tab upload files, lalu unggah berkas acuan
03_RDF_ACUAN/siakad_acuan_lengkap.ttl.
Jalankan kueri verifikasi jumlah triple pada tab Query:
SELECT (COUNT(*) AS ?jumlahTriple)
WHERE { ?s ?p ?o . }
Hasil Validasi Triple Store: Tepat bernilai 8.224 triple.
6. Tahap 4: Eksekusi Kueri SPARQL
Kueri 1: Mata Kuliah Mahasiswa NIM 230001 (Setara JOIN SQL)
PREFIX ex: <https://example.org/siakad/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?nim ?nama ?mataKuliah WHERE {
ex:230001 rdfs:label ?nama ;
ex:mengambilKelas ?kelas .
?kelas ex:kelasDari ?mk .
?mk rdfs:label ?mataKuliah .
BIND("230001" AS ?nim)
}
ORDER BY ?mataKuliah
Kueri 2: Partisipasi Kegiatan Mahasiswa NIM 230001
PREFIX ex: <https://example.org/siakad/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?kegiatan ?nama ?jenis WHERE {
ex:230001 ex:mengikutiKegiatan ?kegiatan .
?kegiatan rdfs:label ?nama ;
a ?jenis .
}
ORDER BY ?kegiatan
Kueri 3: Penelusuran Taksonomi RDFS dengan Property Path (*)
Dalam RDFS, kita dapat menyusun hierarki taksonomi kegiatan di mana Seminar, Workshop, dan Kompetisi merupakan turunan dari KegiatanAkademik:
Untuk menelusuri seluruh kegiatan akademik beserta seluruh subkelasnya tanpa menyalakan inference reasoner server, gunakan operator Property Path (*) berikut:
PREFIX ex: <https://example.org/siakad/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?kegiatan ?jenis WHERE {
?kegiatan a ?jenis .
?jenis rdfs:subClassOf* ex:KegiatanAkademik .
}
ORDER BY ?kegiatan
Catatan Reasoning (Penalaran): Kueri langsung
?kegiatan a ex:KegiatanAkademik .mengembalikan 0 baris karena server standar Fuseki belum menyalakan reasoner inferensi aktif. Operator property pathrdfs:subClassOf*menelusuri hierarki turunan subkelas secara langsung tanpa beban inferensi server.
7. Perbandingan Kunci: SQL vs Semantic Web
| Fitur Evaluasi | Basis Data Relasional (SQL) | Semantic Web (RDF / RDFS / SPARQL) |
|---|---|---|
| Representasi Relasi | Kunci Asing (Foreign Key) via JOIN | Predikat eksplisit sebagai edge graf berarah (IRI) |
| Skema & Fleksibilitas | Skema kaku (kolom didefinisikan di awal) | Graf dinamis (mudah menambahkan triple baru) |
| Hierarki Taksonomi | Bisa via CTE Rekursif (WITH RECURSIVE) | Standar global W3C (rdfs:subClassOf) |
| Interoperabilitas Web | Rendah (terisolasi pada basis data internal) | Tinggi (menggunakan namespace URI/IRI standar web) |
8. Panduan Penyelesaian Masalah (Troubleshooting)
| Gejala Masalah | Penyebab Umum | Solusi Cepat |
|---|---|---|
| Tabel SQLite kosong / tidak ditemukan | Database belum terpilih atau skrip SQL terputus | Buka tab baru, jalankan ulang skrip SIAKAD_LENGKAP_SCHEMA_DAN_DATA.sql |
| Konversi menghasilkan XML bukan Turtle | Opsi keluaran default ke format XML/RDF | Pilih format Turtle (.ttl) saat export atau manfaatkan prompt LLM |
| localhost:3030 tidak dapat diakses | Server Fuseki belum running atau port bentrok | Cek terminal tempat Fuseki dijalankan; pastikan Java (JDK 17+) terpasang |
| SPARQL mengembalikan 0 baris data | Kesalahan penulisan prefix atau namespace URI | Pastikan deklarasi PREFIX ex: <https://example.org/siakad/> persis sama |
| Upload RDF ke Fuseki gagal (Parse Error) | Sintaks Turtle keliru / tanda titik akhir hilang | Periksa baris error dan pastikan setiap triple diakhiri tanda titik (.) |
9. Rubrik Penilaian Laporan Mahasiswa
| Komponen Penilaian | Bobot | Luaran yang Dikumpulkan |
|---|---|---|
| Uji Kueri SQL | 20% | Screenshot 3 kueri SQL + penjelasan alur relasi JOIN |
| Konversi ConvertMatrix | 20% | Berkas .ttl hasil konversi + analisis kolom relasi |
| Pemetaan Semantik LLM | 20% | Prompt yang dipakai, tabel mapping, dan contoh data valid |
| Fuseki & SPARQL | 25% | Screenshot dataset 8.224 triple + hasil kueri SPARQL & Property Path |
| Analisis & Refleksi | 15% | Jawaban tertulis atas 3 pertanyaan refleksi mandiri |
Pertanyaan Refleksi Mandiri:
- Apa perbedaan arsitektur menghubungkan data via Foreign Key di SQL dengan objek IRI di RDF?
- Mengapa dua file RDF yang sama-sama valid secara sintaksis bisa memiliki rancangan graf yang berbeda?
- Jelaskan mengapa LLM tidak boleh menjadi satu-satunya validator tanpa parser RDF resmi!
Unduh Paket Praktikum: Akses seluruh file latihan (CSV, SQLite database, skrip SQL, RDF acuan 8.224 triple, skema RDFS, dan query SPARQL) di https://s.telkomuniversity.ac.id/rdfacw.