Praktikum Semantic Web: Panduan Konversi Data SIAKAD ke RDF, RDFS, dan SPARQL

Ilustrasi materi artikel
info Dokumentasi materi: 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

  1. Memahami perbedaan arsitektur model relasional (baris/kolom) vs model graf semantik (RDF Triple).
  2. Mengeksplorasi keterkaitan data relasional serta menguji relasi PK-FK melalui SQLiteOnline.
  3. Mengonversi data tabular CSV menjadi RDF Turtle menggunakan ConvertMatrix dan Prompt LLM terstruktur.
  4. Membangun Triple Store lokal dengan Apache Jena Fuseki dan memuat RDF acuan (8.224 triple).
  5. 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
Diagram ERD SIAKAD 8 Tabel
Gambar 1: Diagram ERD Hubungan 8 Tabel Basis Data SIAKAD

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.

Anatomi RDF Triple Subject Predicate Object
Gambar 2: Anatomi Dasar Pernyataan RDF Triple (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:

Model Graph RDF Partisipasi Mahasiswa
Gambar 3: Representasi Graph RDF Relasi Mahasiswa dan Partisipasi Kegiatan

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

  1. Unduh distribusi binary resmi Apache Jena Fuseki dari situs resmi W3C/Apache Jena.
  2. Jalankan server via terminal: ./fuseki-server (macOS/Linux) atau fuseki-server.bat (Windows).
  3. Akses dashboard di http://localhost:3030/
  4. Pilih Manage datasets → Add new dataset, beri nama siakad_acuan dengan tipe penyimpanan Persistent (TDB2).
  5. 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:

Hierarki Kelas RDFS subClassOf
Gambar 4: Taksonomi Hierarki Kelas Kegiatan Menggunakan rdfs:subClassOf

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 path rdfs: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:

  1. Apa perbedaan arsitektur menghubungkan data via Foreign Key di SQL dengan objek IRI di RDF?
  2. Mengapa dua file RDF yang sama-sama valid secara sintaksis bisa memiliki rancangan graf yang berbeda?
  3. 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.