1. FII Linked Data
Barat Mihaela, Mihai Teodora
Facultatea de Informatica Iasi
Abstract. Aplicatie web care ofera un punct terminal SPARQL pentru
interogarea resurelor publice de interes din cadrul FII pe baza unui model de
cunostinte privitor la personal, studenti, discipline, locatii, evenimente.
Cuvinte cheie: RDF, SPARQL, FII, Virtuoso, Jena, JSP.
Tehnologii folosite
Aplicatia web a fost implementata folosind tehnologiile Java EE:
JSP, Jena API, Jasper Reports. Ca server web s-a folosit Apache
Tomcat 7.0, pentru stocarea datelor interogate serverul Virtuoso, iar ca
IDE Eclipse Helios.
Descrierea succinta a tehnologiilor utilizate
Eclipse Helios
Eclipse Helios este un IDE open-source ce permite crearea facila
de aplicatii in diferite limbaje de programare: Java, C, C++, Perl, PHP,
Python etc. Poate rula pe diferite sisteme de operare: Linux, Mac OS X,
Solaris, Windows. Un avantaj al acestui IDE este faptul ca utilizatorii
pot sa ii extinda capacitatile prin instalarea de plug-inuri scrise pentru
Eclipse, precum tool-urile de dezvoltare pentru alte limbaje de
programare.
2. FII Linked DATA
Java EE
Proiectul a fost dezvoltat folosind JDK 1.5, Apache Tomcat 7.0
( deoarece are suport pentru dezvoltarea aplicatiilor web semantice) si
JSP (Java Server Pages), care este o modalitate pentru generarea de
continut dinamic pe web, si totodata este strategia Java EE pentru
generarea prezentarii (View).
O pagina JSP este formata din:
Tipar (componenta statica – HTML, XML)
Taguri JSP
Secvente de cod (scripleturi)
RDF & Jena API
RDF ( Resource Description Fremework) este un framework
pentru descrierea resurselor web, cum ar fi titlul, autorul, continutul si
informatiile de copyright ale unei pagini web. Modelul RDF este
similar cu alte concepte de modelare si se bazeaza pe ideea crearii de
afirmatii despre resurse (resurse web in particular) , sub forma de
expresii subiect-predicat-obiect. Acestea sunt cunoscute sub numele
de triple in terminología RDF. Subiectul este reprezentat de o resursa,
predicatul de trasatura a resursei si exprima o relatie intre subiect si
obiect.
Jena este un API Java pentru aplicatiile web semantice. Pachetul
Java care trebuie importat este com.hp.hpl.jena.rdf.model.
API-ul a fost definit sub forma de interfete, astfel incat codul aplicatiei
sa poata lucra cu diferite implementari fara a se recurge la modificari.
Pachetul contine interfete pentru reprezentarea modelelor, resurselor,
proprietatilor, literalilor si a altor concepte cheie privitoare la RDF,
precum si un ModelFactory pentru crearea modelelor. In acest mod
codul aplicatiei ramane independent de implementare.
Virtuoso OpenLink
Serverul Virtuoso este un server hibrid de baze de date care
combina functionalitatea unui RDBMS ( sistem de management pentru
base de date relationale), ORDBMS (sistem de management pentru
baze de date obiectual-relationale), RDF, XML intr-un singur sistem.
3. FII Linked DATA
Editia open-source al acestui server este cunoscuta ca “OpenLink
Virtuoso”.
Virtuoso este alcatuit din doua componente: client si server.
Elementele tipice utilizate pentru a comunica cu un server Virtuoso
local sau la distanta includ:
Driverele Virtuoso pentru ODBC, JDBC, ADO.NET si OLE DB
Conductor, o interfata web pentru administrarea bazei de date
ISQL ( SQL Interactiv)
Documentatie si tutoriale
Exemple
Acest server pune la dispozitia utilizatorilor o interfata grafica
prietenoasa, usor de utilizat. Intefata permite administrarea si
configurarea facila a serverului.
Descrierea proiectului
In Virtuoso, datele sunt stocate sub forma de triple ( care sunt
formatul pentru Linked Data). Linked data descrie o metoda de a afisa
date structurate, astfel incat sa fie interconectate si sa devina mult mai
utile. Se bazeaza pe tehnologiile web standard ca HTTP sau URI-uri,
dar in loc sa se foloseasca la crearea paginilor web pentru utilizatori,
aceasta extinde functionalitatea astfel incat sa fie automat citite de
calculatoare.
In proiect s-a utilizat principiul linked data, prin crearea unui
document RDF ce stocheaza datele de interes referitoare la personalul,
4. FII Linked DATA
studentii, disciplinele, locatiile si evenimentele din cadrul Facultatii de
Informatica, Iasi. Documentul RDF a fost validat folosind w3.org –
Validator. Instantele prezente in document apartin unor clase precum:
Profesor
Student
Materie
Eveniment
Sala
Concurs
GrupaStudent
Mai jos sunt prezentate cateva instante ale claselor mentionate:
<rdf:Description rdf:about="#Imagine Cup">
<rdf:type rdf:resource="#Concurs" />
</rdf:Description>
<rdf:Description rdf:about="#Grigoras Gheorghe">
<esteDecan rdf:resource="#Facultatea de
Informatica" />
<rdf:type rdf:resource="#Decan"/>
</rdf:Description>
<rdf:Description rdf:about="#Grupa Master2 ISS">
<rdf:type rdf:resource="#GrupaStudent" />
</rdf:Description>
Relatiile dintre clase
Aplicatia permite, printre altele, afisarea tuturor colaboratorilor,
asistentilor, profesorilor, personalului asociat, studentilor. Pentru a
exemplifica relatia dintre acestia a fost definita clasa Persoana, care are
ca subclase clasele: Colaborator, Asistent, Staff, Profesor, Student.
Fragmentul de cod care prezinta cele mentionate mai sus este
urmatorul:
5. FII Linked DATA
<rdfs:Class rdf:ID="Persoana" >
</rdfs:Class>
<rdfs:Class rdf:ID="Profesor">
<rdfs:subClassOf
rdf:resource="http://www.infoiasi.ro#Persoana" /
>
</rdfs:Class>
<rdfs:Class rdf:ID="Asistent">
<rdfs:subClassOf rdf:resource="#Persoana" />
</rdfs:Class>
<rdfs:Class rdf:ID="Colaborator">
<rdfs:subClassOf rdf:resource="#Persoana" />
</rdfs:Class>
<rdfs:Class rdf:ID="Staff">
<rdfs:subClassOf rdf:resource="#Persoana" />
</rdfs:Class>
<rdfs:Class rdf:ID="Student">
<rdfs:subClassOf rdf:resource="#Persoana" />
</rdfs:Class>
Fiecare clasa are o serie de proprietati reprezentative, ce au
rolul de a evidentia trsaturile clasei in cauza; de exemplu clasa Materie
are urmatoarele proprietati: areProfSeminar, areProfCurs, iar o instanta
a sa are urmatoarea forma:
<rdf:Description rdf:about="Algoritmi si
Programare">
<rdf:type
rdf:resource="http://www.infoiasi.ro#Materie" />
<areProfSeminar rdf:resource="Necula Raluca;
Necula Emilian"/>
<areProfCurs rdf:resource="Lucanu Dorel"/>
</rdf:Description>
6. FII Linked DATA
Afisarea informatiilor
Pentru afisarea informatiilor a fost necesara interogarea
documentului RDF cu ajutorul limbajului SPARQL (este un limbaj
descriptiv standardizat pentru realizarea de interogari pe baza
potrivirilor de sabloane referitoare la triple RDF; este inspirit din
RDQL si este oferit de Jena, RAP, Redland) .
De exemplu, interogarea SPARQL necesara pentru aflarea
tuturor colaboratorilor in ordine alfabetica, precum si a trasaturilor
acestora, din cadrul FII are urmatoarea forma:
query = "prefix fii:<http://www.infoiasi.ro#>
prefix rdf:<http://www.w3.org/1999/02/22-rdf-
syntax-ns#> select distinct ?a ?b ?c where {?a
rdf:type fii:Colaborator. ?a fii:areEmail ?b. ?a
fii:areUrl ?c. }order by ?a";
Instructiunile java care proceseaza rezultatul din urma interogarii
SPARQL de mai sus sunt:
QueryExecution e =
QueryExecutionFactory.sparqlService( service,
query );
ResultSet results =
e.execSelect();
while ( results.hasNext() ) {
QuerySolution s =
results.nextSolution();
System.out.println("Afisare
s:"+s);
String nume =
s.getResource("a").toString();
System.out.println(nume);
System.out.println("Am ajuns
la e-mail");
String email =
s.getResource("b").toString();
System.out.println(email);
String url =
s.getResource("c").toString();%>
<tr>
<td>
7. FII Linked DATA
<%
out.println(nume.toString()); %>
</td>
<td>
<%
out.println(email.toString()); %>
</td>
<td>
<a href="http://<%
out.println(url.toString());%>"
target="_blank"><% out.println(url.toString());
%></a>
</td>
</tr>
<% }
e.close();
Colaboratorii din cadrul aplicatiei FII Linked Data sunt afisati in
tabelul de mai jos:
Functionalitatea aplicatiei
Aplicatia FII Linked Data are, printre altele, urmatoarele
functionalitati:
8. FII Linked DATA
Prima pagina (index.jsp) afiseaza cele mai recente stiri si evenimente
cu toate informatiile aferente lor;
Pagina filtered.jsp are un combobox de unde utilizatorul poate
selecta o anumita optiune (All Staff / Teachers / Collaborators /
Assistants), iar la apasarea butonului Submit vor aparea datele aferente
optiunii respective;
Pagina students.jsp permite afisarea informatiilor foarte utile
studentilor ca: toate grupele existente impreuna cu coordonatorii
acestora si numarul de studenti prezenti in fiecare grupa; toate materiile
impreuna cu profesorii care predau materia respectiva la seminar/
laborator si la curs;
se poate observa sa exista materii care pot avea la seminar/
laborator unul sau mai multi profesori/colaboratori/asistenti;
9. FII Linked DATA
Pagina resources.jsp prezinta: toate salile din cadrul FII Linked Data,
tipul lor (curs/seminar/laborator/amfiteatru) si etajul la care sunt
situate; o parte din cartile cele mai utile studentilor (acestea sunt
identificate printr: titlu, autor, tema, descriere, data publicarii, format);
concursurile care tocmai s-au desfasurat sau urmeaza sa se desfasoare
cat mai repede;
Pagina contact.jsp afiseaza decanul, prodecanii, personalul asociat
din cadrul FII Linked Data precum si cateva linkuri utile pentru
10. FII Linked DATA
utilizator; Staff-ul tehnic si administrativ are asociate in documentul
RDF proprietati ca: areFunctie, areEmail;
Vocabulare de meta-date
In aplicatia FII Linked Data este utilizat vocabularul de meta-
date DCMI (Dublin Core Metadata Initiative care contine
proprietati pentru descrierea resurselor) la crearea modelului de
cunostinte privitor la cartile cele mai utile studentilor;
<rdf:Description rdf:about="Programarea
retelelor">
<dc:Title>
Atelier de programare in retele de
calculatoare
</dc:Title>
<dc:Creator>
Sabin Buraga
11. FII Linked DATA
</dc:Creator>
<dc:Subject>
networks,network
programming,client/server,signals
</dc:Subject>
<dc:Description>
An introduction in network programming
using socket interface BSD.
</dc:Description>
<dc:Date>
2005-01-08
</dc:Date>
<dc:Format>
text/html
</dc:Format>
</rdf:Description>
Interogarea SPARQL care afiseaza toate cartile si detaliile acestora
are urmatoarea forma:
query = "prefix fii:<http://www.infoiasi.ro#>
prefix rdf:<http://www.w3.org/1999/02/22-rdf-
syntax-ns#> prefix
dc:<http://purl.org/dc/elements/1.1/> select
distinct ?b ?c ?d ?e ?f ?g where {?a dc:Title ?
b. ?a dc:Creator ?c. ?a dc:Subject ?d. ?a
dc:Description ?e. ?a dc:Date ?f. ?a dc:Format ?
g } order by ?a";
Rezultatul efectiv al acestei interogari este prezentat in imaginea de
mai jos:
12. FII Linked DATA
Interfata & meniul aplicatiei
Interfata aplicatiei este simpla, dispune de un meniu prietenos,
astfel incat utilizatorul sa poata naviga si sa poata cauta cu
usurinta informatiile de interes;
Elementele importante ale interfetei (de exemplu meniul=element de
navigatie) sunt vizibile, exista consistenta de la o pagina la alta (prin
utilizarea unui template) pentru a reduce incarcarea memoriei si pentru
a nu forta utilizatorul sa nu se refamiliarizeze cu interfata la fiecare
schimbare de pagina;
Meniurile, link-urile ajuta la localizarea informatiei, astfel incat
userul sa poata gasi repede si cu usurinta datele dorite;
Imaginea de mai jos reprezinta meniul aplicatiei:
Se poate observa ca meniul are 5 optiuni (Home, Academic
Staff, Students, Resources, Contact) fiecare din ele permitand afisarea
anumitor categorii de date. De exemplu optiunea Academic Staff
listeaza tot personal din cadrul FII, toti colaboratorii, asistentii,
profesorii,
Prima pagina a aplicatiei (index.jsp), ce contine printre altele si cele
mai recente stiri din cadrul FII Linked Data, permite citirea in
intregime a unei stiri de interes prin simpla apasare pe link-ul intitulat
“read more”, asa cum este ilustrat in imaginea urmatoare:
13. FII Linked DATA
Generarea de rapoarte cu JasperReports
In cadrul aplicatiei este posibila si generarea de diferite rapoarte :
lista tuturor profesorilor din facultate, lista referitoare cu grupele de
studenti sau lista de cursuri predate in cadrul facultatii. Pentru aceasta
s-a folosit biblioteca Jasper Reports si tool-ul iReport. Pentru a putea
genera rapoartele cu date provenind din rdf-ul stocat pe serverul
Virtuoso, a fost nevoie intai de crearea de java beanuri, care nu sunt
altceva decat clase avand ca metode doar getteri si setteri.
Mai jos este prezentat bean-ul referitor la cursurile din facultate :
package Staff;
public class Course {
private String course;
private String courseTeacher;
private String labTeacher;
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
14. FII Linked DATA
}
public String getCourseTeacher() {
return courseTeacher;
}
public void setCourseTeacher(String
courseTeacher) {
this.courseTeacher = courseTeacher;
}
public String getLabTeacher() {
return labTeacher;
}
public void setLabTeacher(String
labTeacher) {
this.labTeacher = labTeacher;
}
}
Atunci cand graful rdf este interogat in aplicatie, este populata o lista
avand ca obiecte entitati din bean-ul respectiv . La sfarsitul interogarii,
dupa ce lista s-a populat cu datele din rdf, este apelat un fisier cu
extensia jrmxl (creat cu ajutorul tool-ului iReport) si generat raportul in
format PDF, XML SI HTML. Codul pentru crearea unui astfel de
raport este prezentat mai jos :
FileInputStream inputStream = new
FileInputStream ("G:/report/Courses.jrxml");
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(courses);
JasperDesign jasperDesign =
JRXmlLoader.load(inputStream);
JasperReport jasperReport =
JasperCompileManager.compileReport(jasperDesign;
JasperPrint jasperPrint =
JasperFillManager.fillReport(jasperReport, new
HashMap(), beanColDataSource);
JasperExportManager.exportReportToPdfFile(jasper
Print, "G:/report/all_courses.pdf");