In acest studiu vom prezenta cateva API- uri pentru procesare RDF in PHP. Aceste instrumente pot si folosite atat in PHP4 cel putin versiunea 4.2 cat si in PHP5 cel putin versiunea 5.0.1. Majoritatea API-uri pot fi folosite sub licente GNU.
Studiu Comparativ Privind API-urile de Procesare RDF Inplementate in PHP
1. Studiu Comparativ Privind API-urile de Procesare RDF
Inplementate in PHP
Budai Steliana: steliana@infoiasi.ro
Gorea Alexandra Diana: alexandra.gorea@infoiasi.ro
In acest studiu vom prezenta cateva API- uri pentru procesare RDF in PHP.
Aceste instrumente pot si folosite atat in PHP4 cel putin versiunea 4.2 cat si in PHP5
cel putin versiunea 5.0.1. Majoritatea API-uri pot fi folosite sub licente GNU.
Testele pentru unele api le-am executat pe pagina http://alex.seosite.ro. Pentru
fiecare API am creat un director unde am copiat fisierele sursa precum si exemplele.
1 RAP
RAP este un instrument Semantic Web pentru parsare, interogare manipulare si
serializare si folosire de modele RDF. A fost creat la Freie Universität Berlin in 2002
si tot a fost modificat de atunci.
Ultima versiune lansate contine:
• Un API bazat pe obiecte pentru manipularea grafurilor RDF ca un set de
obiecte
• API bazat pe resurse
• Parsere N-TRIPLE si N3 pentru RDF/XML
• Serializari N-TRIPLE si N3 pentru RDF/XML
• Suport pentru limbajul de interogare RDLQ
• Elemente OWL
• Interogari baze de date Mysql
• Interfata grafice petru lucrul cu DbModels
• Acest API contine si suport pentru SPARQL
Rap poate fi folosit sub licenta GNU LESSER GENERAAL PUBLIC LICENCE
Se poate downloada de la adresa: http://sourceforge.net/projects/rdfapi-php/
La adresa mentionata mai sus am instalat toate sursele oferite de RAP. Problema
este la configurare. Nu sunt oferite suficiente detalii de instalare si utilizare.
Instalare:
• se downloadeaza pachetul de la adresa mentionata mai sus
2. • se dezarhiveaza
• se va include RDF API in scripturi: define('RDFAPI_INCLUDE_DIR' , '/
home/seosite/public_html/alex/RAP/rdfapi-php/api/');
include(RDFAPI_INCLUDE_DIR . "RDFAPI.php");
• constanta 'RDFAPI_INCLUDE_DIR va contine calea catre unde am
dezarhivat continutul arfivei.
Urmand acesti pasi, nu am obtinut rezultatul dorit. Adica macar sa pot rula
exemplele oferite de autori ceea ce nu am reusit. La inceput fara sa modific ceva...
unele exemple au mers dar in momentul cand am vrut sa le vad pe toate, si am inceput
sa fac setarile necesare am scapat de unele warninguri dar nu am putut sa le rulez.
Observand acest lucru am inceput sa studiez exemplele deja date de ei. E frustrant mai
ales pentru un incepator sa nu poata rula un script sa zicem „hello world”.
Pentru memorarea triplelor de foloseste Mysql sau baze de date relationale
folosind doua tipuri de modele: InfModelF si InfModelB.
$mysql_database = ModelFactory::getDbStore('MySQL',
'host', 'db_name', 'user_name', 'password');
$oracle_database = ModelFactory::getDbStore('Oracle',
FALSE, 'db_name', 'username', 'password');
Unul din exemplele care l-am putut vedea este cel de manipulare a unui model:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<html>
<head>
<title>Test Manipulate and Search RDF Model</title>
</head>
<body>
<?php
// Include RAP
define("RDFAPI_INCLUDE_DIR", "./../api/");
include(RDFAPI_INCLUDE_DIR . "RdfAPI.php");
// Filename of an RDF document
3. $base="example1.rdf";
// Create a new MemModel
$model = new MemModel();
// Load and parse document
$model->load($base);
// Output model as HTML table
$model->writeAsHtmlTable();
echo "<P>";
// Ceate new statements and add them to the model
$statement1 = new Statement(new
Resource("http://www.w3.org/Home/Lassila"),
new
Resource("http://description.org/schema/Description"),
new Literal("Lassila's personal Homepage", "en"));
$statement2 = new Statement(new Resource
("http://www.w3.org/Home/Lassila"),
new
Resource("http://description.org/schema/Description"),
new Literal("Lassilas persönliche Homepage ", "de"));
$model->add($statement1);
$model->add($statement2);
$model->writeAsHtmlTable();
echo "<P>";
// Search model 1
$homepage = new
Resource("http://www.w3.org/Home/Lassila");
$res = $model->find($homepage, NULL, NULL);
4. $res->writeAsHtmlTable();
echo "<P>";
// Search model 2
$description = new
Resource("http://description.org/schema/Description");
$statement = $model->findFirstMatchingStatement
($homepage, $description, NULL);
// Check if something was found and output result
if ($statement) {
echo $statement->toString();
} else {
echo "Sorry, I didn't find anything.";
}
echo "<P>";
// Search model 3
$res3 = $model->findVocabulary
("http://example.org/stuff/1.0/");
$res3->writeAsHtmlTable();
echo "<P>";
// Write model as RDF
$model->writeAsHtml();
// Save model to file
$model->saveAs("Output.rdf");
?>
</body>
</html>
5. Exemplul poate fi vizualizat aici: http://alex.seosite.ro/RAP/rdfapi-
php/test/test_ManipulateMemModel.php si face parte din documentatia proiectului.
Suport oferit programatorilor:
• documentatie: http://www.seasr.org/wp-content/plugins/meandre/rdfapi-php/
doc/tests.html
• documentatia API-ului: http://www.seasr.org/wp-
content/plugins/meandre/rdfapi-php/doc/phpdoc/index.html
2 ARC
ARC este un sistem RDF open source si poate fi rulat in majoritatea serverelor web.
• lucreaza cu PHP4 si cu PHP5
• nu se folosesc variabile globale, constante, etc ce pot cauza probleme de
integrare.
Componente: dintre componente putem enumera:
• parseri pentru RDF/XML, SPARQL+SPOG, RSS, etc.
• Serializari N-Triples, RDF/JSON, RDF/XML
• 2 structuri interne: precesare bazata pe resurse si bazata pe obiecte
• Clasa SPARQL Endpoint: compilator SPARQL endpoint
• Clasa RemoteStore: interogheaza in mod remote ca si cum ele s-ar afla
pastrate local.
• SPARQLScript
• Suport pentru formatari date Web 2.0 (microformate, RSS2, Atom, JSON)
• Instrumente ce pot fi usor combinate cu un soft existent
Sursele sunt disponibile la: http://arc.semsol.org/download
Suport pentru programatori:
Documentatie: http://arc.semsol.org/docs . Exemple nu am reusit sa gasesc. In
pachetul de instalare am gasit doar sursele de procesare si utilizare RDF. Nu am gasit
nici un exemplu de folosire acestui api. Din vizitare site si din exemplele de situri ce
foloseste acest suport RDF am descoperit ca poate fi folosit si ca plugin wordpress.
In schimb pe site la documentatii, sunt diferite exemple de cum pot fi folosite
componentele acestui API.
Tripletele sunt de fapt niste vectori ce contin in mod asociativ 3 vectori ce
pot fi procesati printr-o bucla simpla. Triplele sunt stocate intr-o baza de date mysql.
...
6. $triples = $parser->getTriples();
for ($i = 0, $i_max = count($triples); $i < $i_max; $i++)
{
$triple = $triples[$i];
...
}
http://semsol.org/dooit/sparql - aici se gaseste un instrument pentru interogari
SPARQL folosind ARC. Pe pagina http://arc.semsol.org/sites se gasesc mai multe
exemple de situri ce utilizeaza acest api.
Este mai usor de utilizat observand asta din portofoliul de situri ce utilizeaza
acest api, ofera suficienta documentatie pentru a putea dezvolta un site si poate fi
utilizat ca plugin pentru wordpress utilizand pluginul wp-arc-1-1, acesta fiind ultimul
lansat cu niste modificari facute si anumite bug-uri rezolvate.
ARC este disponibil sub licenta W3C Software Licence si din 2009
deasemeni sub licenta GPL
Mai multe detalii despre acest API se gasesc aici: http://arc.semsol.org/
3 PHP XML Classes
Informatii http://phpxmlclasses.sourceforge.net/
Un API dezvoltat sub licenta GNU/GPL in php ce proceseaza atat xml cat si
rdf. Se poate downloada de la adresa
http://sourceforge.net/projects/phpxmlclasses/files/ . Pe langa fisierele sursa sunt si
exemple precum si tutoriale cu exemple in utilizarea acestui api. Clasa care se ocupa
de procesare RDF este class_rdf_parser.
Fisierele RDF sunt reprezentate folosind XML sub forma urmatoare:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
</rdf:RDF>
In RDF se vor descrie resursele si proprietatile precum si valorile resurselor.
Proprietatile sunt reprezentate ca elemente XML si obiectele reprezinta continutul
proprietatilor ca de exemplu:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7. xmlns:s="http://description.org/schema/">
<rdf:Description about="http://www.w3.org/Home/Lassila">
<s:Creator>Ora Lassila</s:Creator>
</rdf:Description>
</rdf:RDF>
Pentru a parsa aceste tipuri de fisiere se utilizeaza clasa class_rdf_parser.php,
care la baza de va defini un handler pentru obiecte RDF si doar parseaza documentul,
in momentul cand se identifica un obiect RDF functia de callback va fi apelata
Un exemplu de cum se poate folosi clasa:
/* Se pune URI documentului de parsare, se poate folosi
un nume de fisier */
$base="http://luigi.melpomenia.com.ar/example5.rdf";
$statements=0;
$input = fopen($base,"r");
$rdf=new Rdf_parser();
$rdf->rdf_parser_create( NULL );
$rdf->rdf_set_user_data( $statements );
$rdf-
>rdf_set_statement_handler( "my_statement_handler" );
$rdf-
$rdf->rdf_set_base($base );
$done=false;
while(!$done)
{
$buf = fread( $input, 512 );
$done = feof($input);
if ( ! $rdf->rdf_parse( $buf, strlen($buf),
feof($input) ) )
{
die(" O eroare a fost detectata in timp ce s-a incercat
parsarea. Se poate din cauza ca documentul nu este
formatat cum trebuie");
}
}
/* close file. */
fclose( $input );
$rdf->rdf_parser_free();
printf( "Total statements: ". $statements );
Aceste exemple sunt luate din tutorialele ce se regasesc in arhiva.
Parsarea se realizeaza prin chuncks de cate 512 bytes. Se seteaza lungimea
bufferului cum se doreste. Acest lucru permite parsarea unui fisier RDF mare
consumand memorie constant ceea ce nu duce la terminarea nedorita a serverului.
8. Acest api contine o documentatie destul de ampla ce se gaseste in arhiva
downloadata. De asemenea ofera o suita de exemple si explicatii pentru metodele
clasei. Usor de inteles si de implementat. Nu suporta interogari SPARQL. Binenteles
cu bug-uri. Intrand pe Browse bugs am observat persoane care au obtinut diferite erori
si care nu au stiut cum sa le refaca. Nu prea este vizitat si downloadat si nu se
specifica versiunea.
Comparatie intre RAP ARC si PHPXML Classes
http://www4.wiwiss.fu-berlin.de/bizer/toolkits/index.htm#php
PHPXML
RAP 0.9.4 ARC
Classes 1.1
Ultimul release 6/2006 5/2006 07/2002
Numar
8 1 1
dezvoltatori
Lista mail activa + - -
Licenta LGPL Licenta W3C GPL
Centrat pe obiecte
Centrat pe resurse Centrat pe
Paradigma Api Centrat pe model
Centrat pe ontologie obiecte
Quad-centric
Limbaj de SPARQL
SPARQL RDQL
interogare RDQL
Memorare in Memorare in baze
Pastrare modele Memorare in baze de date
baze de date de date
Baza de date ADOdb compliant
MySQL MySQL
suportate databases (30+)
RDF/XML Parser
N-Triples RDF/XML,
Formate de
N3 serializare N3,
serializare RDF/XML
TriX JSON pentru
suportate
GRDDL SPARQL
RSS/ATOM results
RDFS
Suport reguli - -
cateva reguli OWL
SPARQL
RDF Server SPARQL protocol -
protocol
Alte GUI pentru utilizare modele
9. pastrate in baza de date,
modul vizualizari grafuri,
imbunatatiri
Client pentru remote
SPARQL endpoints
4 PHP RDF Parser
PHP RDF Parser este o clasa PHP ca parseaza si afiseaza fisiere rdf si rss in
nescape. Poate fi integrat in aplicatii web. Este disponibil sub licenta GNU/GPL
Se poate downloada de aici: http://www.jasonandann.com/php_rdf/ sectiunea
Downloading (pur si simplu fisierul rdf_class.php).
Aceasta clasa este folosita doar pentru parsare feeduri rdf . Trebuie trecut
doar adresa de unde trebuie downloadat fisierul rdf.
Pe pagina parserului gasim putina documentatie referitoare la elementele
clasei de parsare. Sunt explicate fiecare functie si variabile.
5 POWL
POWL este o platforma de dezvoltare web semantic si contine mai multe
componente:
• RAP-RDF pt PHP un proiect prezentat mai sus
• API RDFS si OWL pentru PHP – parte integrala a lui POWL
• CMS
• Framework pentru aplicatii web
Se poate downloada de la adresa: http://sourceforge.net/projects/powl/. Acest
program este oferit sub licenta GNU general public license. Termenii si conditiile se
gasesc un sursa programului. Programul este web-based
Instalare:
• se copiaza fisierele pe server
• se creaza o baza de date si un user dupa care se vor trece datele in fisierul
config.inc.php-dist dupa care se redenumeste acest fisier config.inc.php
• se deschide adresa unde s-au copiat sursele /powl.
• s-a deschis o pagina de administrare unde se poate introduce modele noi se
pot edita, se poate interoga.
Incercand sa instalez la adresa http://alex.seosite.ro/powl/index.php , nu am
apucat sa vad mare lucru ca deja am obtinut un warning: „Unknown column 'id' in
10. 'field list'Unknown column 'id' in 'field list'Unknown column 'id' in 'field
list'Unknown column 'id' in 'field list'Unknown column 'id' in 'field list'Unknown
column 'id' in 'field list'”. Am incercat sa gasesc fisierul error.log de pe server pentru a
vedea de unde am obtinut eroarea. Dar si acest fisier lipseste. O bila neagra. Nu
suporta interogari SPARQL.
In ceea ce priveste documentatia, este foarte putina. Incercand sa fac un exemplu,
nu am gasit nimic in fisiere si nici pe internet exemple care sa le pot utiliza cu acest
api. Documentatia doar explica pe scurt clasele acestui program. Este dificil sa inveti
utilizat acest api deoarece nu contine o documentatie suficienta.
6 RDFTP
Rdftp este un server ce suporta operatii de interogare asupra unui fisier RDF si
este dezvoltat sub licenta GNU/GPL creat de Vangelis Vassiliadis. Este o
implementare experiment a unui protocol de transmisie RDF scris in php. Informatii
sumare se gasesc la adresa http://www.semanticweb.gr/rdftp/#_Toc19086344
Tripletele RDF sunt pastrate in baza de date relationale si in format graf.
Problema este ca nu am gasit un link de unde as putea copia sursele pentru a le
putea instala pe un server ce utilizeaza php si baza de date. Dar in schimb ofera un
demo online: http://www.semanticweb.gr/rdftp/rdftp.php care are unele probleme la
conectarea la baza de date. Neavand documentatii si exemple concrete, este greu de
utilizat si de invatat.
7 Rdfworld
Rdfworld.php este un convertor din obiecte RDF in obiecte PHP. Este gratis
di este distribuit sub licenta Gnu GPL. Se downloadeaza de la adresa http://chxo.com/
rdfworld/index.htm unde se pot gasi si unele informatii referitoare la aceasta clasa. El
foloseste anumite module din RAP pentru a executa parsarea.
Acest program este distribuit gratuit sub licenta GNU/GPL.
Prentru programatori ofera o documentatie catusi de cat ok si de asemenea
ofera posibilitate de testare online aici: http://chxo.com/rdfworld/rdfworld-test.php .
Tripele sunt de tip obiect. Nu detine suport pentru SPARQL.
8 EasyRdf 0.2
Este o librarie scrisa in PHP orientat obiect ce lucreaza cu fisiere RDF. A
fost creat pentru pezvolatori web cu sau fara experienta. In timpul parsarii, programul
construieste un graf cu obiecte PHP. Suporta interogari SPARQL. Se downloadeaza
de la adresa:
http://linux.softpedia.com/get/Programming/Libraries/EasyRdf-51534.shtml
Cateva adaugiri:
11. • Este documentat cu documentatie scrisa in phpdoc
• Unitati de testare folosinf phpuni
• Alegerea parsarii RDF
• Contine o serie de exemple
Este distribuit gratis sub licenta BSD.
Documentatie : http://www.aelius.com/njh/easyrdf/docs/li_EasyRdf.html si
exte inclusa si in sursele disponibile.
Exemple: in sursa. Pentru a rula exemplele trebuie instalat si unele module
din RAP.
Aceasta este versiunea a doua a acestui proiect. Prima versiune EasyRdf 0.1
contine suport pentru ARC2 si Rapper, documentatie, unitati testare pentru fiecare
clasa, si cateva exemple. Versiunea curenta ii este adaugat suport si pentru legaturi
Redland PHP, suport pentru n-trible, imbunatatit utilizarea blank note si adaugat
newBNode() pentru EasyRdf_Graph, adaugat stiluri pentru exemple.
In surse nu se gasesc informatii pentru instalare si de aceea obtin erori in
executarea exemplelor, in plus nu se dau informatii despre cum se pot rula exemplele.
9 Trice
Este un framework dezvoltat pentru web ce utilizeaza tehnologia RDF. Este
scris in PHP. Este gratis, open source, bazat pe ARC, un toolkit usor de utilizat ce
ofera suport pentru SPARQL.
Sursele sunt disponibile la adresa http://code.semsol.org/source/trice/ .
Momentan nu exista documentatie pentru acest proiect si nici exemple de utilizare a
acestui API.
Informatii despre acest API se gasesc la adresa: http://trice.semsol.org/
Referinte:
Pentru fiecare API este specificat locul de unde s-au luat informatiile, in
general de pe pagina librariei respective.