Studiu Comparativ Privind API-urile de Procesare RDF Inplementate in PHPaledi
油
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.
O imagine de ansamblu asupra principalelor concepte privind dezvoltarea jocurilor electronice i a modalitilor prin care acestea sunt puse 樽n practic de ctre dezvoltatorii de jocuri independeni. Aspectele prezentate vor fi evideniate cu ajutorul unui proiect original, Beneath a Crimson Sky, un simulator de zbor dezvoltat utiliz但nd framework-ul Microsoft XNA.
Aspecte privind managementul datelor RDF si a aplicatiilor folosind RDF, inclusiv instrumentele software necesare, sisteme de stocare, maniere de interogare prin SPARQL etc.
A presentation explaining to (high-school) students what Web development is, including career information.
O prezentare pentru elevi i studeni oferind informaii despre ceea ce 樽nseamn dezvoltarea de apllicaii Web.
Aspecte privind managementul datelor RDF si a aplicatiilor folosind RDF, inclusiv instrumentele software necesare, sisteme de stocare, maniere de interogare prin SPARQL etc.
A presentation explaining to (high-school) students what Web development is, including career information.
O prezentare pentru elevi i studeni oferind informaii despre ceea ce 樽nseamn dezvoltarea de apllicaii Web.
WADe 2017-2018 (6/12) RDF Data Management. Accessing RDF Data via SPARQLSabin Buraga
油
A lecture delivered for "Web Application Development" discipline (MSc studies at Faculty of Computer Science, 'Alexandru Ioan Cuza' University of Iasi, Romania): https://profs.info.uaic.ro/~busaco/teach/courses/wade/web-film.html
WADe 2017-2018 (5/12) Data Modeling in RDF (Resource Description Framework)Sabin Buraga
油
A lecture delivered for "Web Application Development" discipline (MSc studies at Faculty of Computer Science, 'Alexandru Ioan Cuza' University of Iasi, Romania): https://profs.info.uaic.ro/~busaco/teach/courses/wade/web-film.html
A lecture delivered for "Web Application Development" discipline (MSc studies at Faculty of Computer Science, 'Alexandru Ioan Cuza' University of Iasi, Romania): https://profs.info.uaic.ro/~busaco/teach/courses/wade/web-film.html
1. Studiu comparativ a librriilor de procesare a
documentelor RDF
Antochi Anca Mihaela
aantochi@infoiasi.ro
Abstract. Acest document este un studiu comparativ 樽ntre librriile SemWeb i
LinqToRdf de procesare RDF. Sunt comparate metodele de citire i de scriere a
fiierelor RDF cu ajutorul celor dou librrii, suportul pentru triple i
posibilitatea de interogare.
Keywords: RDF, SPARQL, .NET, C#, LINQ
1 Introducere
n 樽ncercarea de a gsi librrii de procesare RDF pentru framework-ul .Net am
observat c interesul dezvoltatorilor .Net este sczut, iar librriile care au fost
dezvoltate nu au mai fost actualizate de un timp 樽ndelungat.
API-ul SemWeb a fost dezvoltat de ctre Joshua Tauberer i prima versiune a
aprut 樽n anul 2005. Librria a fost scris 樽n C# pentru versiunile 1.1 i 2.0 ale
limbajului. Pe data de 19 mai 2009 Joshua Tauberer a anun釘at ca renun釘 la acest
proiect din cauza interesului sczut pentru semantic Web a programatorilor .Net1.
Proiectul LinqToRdf este un provider pentru LINQ, ce transform interogrile din
C# 樽n SPARQL i are ca autor pe Andrew Matthews. n LinqToRdf este folosit
librria SemWeb dezvoltat de Joshua Tauberer. Se pare c nici LinqToRdf nu a mai
fost actualizat i ultima versiune a aprut 樽n august 2008.
Codul surs i librriile pentru SemWeb sunt disponibile la
http://razor.occams.info/code/semweb/. La aceeai adres se gsesc documenta釘ie i
exemple. Licen釘a SemWeb este 樽n termenii GNU GPL i Creative Commons
Attribution. n proiect sunt folosite i librrii externe: SPARQL engine cu licen釘
GNU LGPL, mecanism de validare Euler sub licen釘 W3C Software Licence i
IKVM care este compatibil GPL.
LinqToRdf poate fi descrcat de la adresa http://code.google.com/p/linqtordf/ sub
forma unui fiier msi ce instaleaz librriile necesare i tot la aceast adres se gsesc
documenta釘ia i exemplele. Codul surs se gsete la http://linqtordf.googlecode.com/
svn/trunk/src/linqtordf. LinqToRdf se afl sub licen釘 BSD.
1 Anun釘ul lui Joshua Tauberer gsit la adresa http://razor.occams.info/code/semweb/
2. 2 Suport pentru triple
n proiectul SemWeb triplele din RDF sunt reprezentate de structura Statement.
Spre deosebire de specifica釘iile RDF 樽n care triplele sunt construite din subiect,
predicat i obiect, 樽n Statement exist i un c但mp meta. Astfel a putea spune c
specifica釘iile nu au fost 樽ntocmai respectate i a fost ad ugat meta care este specific
proiectului SemWeb, dar folosirea lui este op釘ional.
La baza ierarhiei de clase pentru a reprezenta componentele unei triple se afl clasa
abstract Resource. Subiectul poate fi, conform specifica釘iilor, referin釘 URI sau nod
gol. Acestea sunt reprezentate 樽n SemWeb de clasele Entity i BNode. Entity este
subclas direct a clasei Resource, iar BNode motenete Entity. Predicatul poate fi
de tip referin釘 URI i, dupa cum am vazut mai sus, este reprezentat de clasa Entity.
Obiectul, pe l但ng referin釘 URI i nod gol, mai poate fi i literal, care este reprezentat
de clasa Literal, subclas a clase Resource. Se poate vedea 樽n figura de mai jos
ierarhia acestor clase:
3. Dup cum putem vedea 樽n diagram, exist o clas Variable ce poate fi utilizat la
interogri i reprezint o variabil 樽n interogare.
Exemplu de creare a unei triple:
Statement triple = new Statement(
new Entity("http://www.example.org/Maria"),
new Entity("http://www.example.org/hasMother"),
new Literal("Alina") );
Op釘ional, un literal poate avea tag de limb sau tipul datei. Tag-ul de limb i tipul
se transmit ca parametrii la instan釘ierea clasei Literal, dar cu restric釘ia de a fi transmis
doar unul dintre cei doi parametrii:
new Literal("12", null, XSDNS + "#integer");
new Literal("Alina", "ro_RO", null);
LinqToRdf foloeste librria SemWeb, la care aduga suport pentru LINQ. Nu
exist 樽n acest proiect clase ce corespund triplelor din RDF i a componentelor din
triple (subiect, predicat i obiect). Modul de scriere a interogarilor este foarte
asemntor cu alte tipuri de interogri LINQ (LINQ la SQL sau LINQ la colec釘ii).
Pentru a crea fiiere RDF i pentru interograrea acestora este necesar s mapm
triplele din RDF la clase C# cu ajutorul atributelor OwlResource. Maparea se poate
face manual prin crearea claselor necesare cu attribute sau se pot genera clasele
pornind de la o ontologie cu ajutorul uneltei RdfMetal ce este descrcat 樽mpreun cu
LinqToRdf.
Exemplu:
[OwlResource(OntologyName="Genealogy",
RelativeUriReference="Person")]
public class Person : OwlInstanceSupertype
{
[OwlResource(OntologyName = "Genealogy",
RelativeUriReference = "name")]
public string Name { get; set; }
[OwlResource(OntologyName = "Genealogy",
RelativeUriReference="age")]
public string Age { get; set;}
}
3 Citirea fiierelor RDF
Pentru procesarea unui set de triple (obiecte de tip Statement) trebuie s avem o
clas ce implementeaz interfa釘a StatementSink ce con釘ine o singur metod cu
semntura:
public bool Add(Statement statement);
4. Autorul proiectului nu respect aici conven釘ia de nume din C# dup care ar fi
trebuit s numeasc aceast interfa釘 IStatementSink.
De asemenea este necesar o clas ce implementeaz interfa釘a StatementSource ce
are o singur metod cu semntura:
public void Select(StatementSink)
Clasele ce implementeaz interfa釘a StatementSource reprezint o surs de obiecte
Statement. Clasa abstract RdfReader implementeaz interfa釘a StatementSource, iar la
r但ndul ei este motenit de clasele RdfXmlReader i N3Reader.
O clas ce implementeaz ambele interfe釘e de mai sus este MemoryStore, ce re釘ine
triplele 樽n memorie.
n exemplul urmtor se citete dintr-un RDF i triplele se re釘in 樽n MemoryStore:
MemoryStore store = new MemoryStore();
using (RdfReader reader = new RdfXmlReader("Test.rdf"))
{
reader.Select(store);
}
n LinqToRdf pentru a citi dintr-un fiier RDF trebuie mai int但i s mapm datele
din fiier la clase C#. De asemenea este nevoie de o clas de tip TripleStore pentru a
specifica loca釘ia triplelor i tipul de interogare.
Exemplu:
TripleStore store = new
TripleStore(@"http://localhost/genealogy/Family.aspx");
store.QueryType = QueryType.RemoteSparqlStore;
RdfDataContext context = new RdfDataContext(store);
var result = select parent in context.ForType<Parent>()
where parent.Name = Mary
select {parent.Name, parent.Age};
Observm ca in LinqToRdf nu sunt 樽ntoarse triple ca urmare a citirii, ci obiecte de
tipul claselor ce au fost mapate la datele din RDF. De asemenea citirea se face ca o
interograe SPARQL, deoarece la execu釘ie interogarea de mai sus este transformat in
SPARQL. Asemnarea este foarte mare cu o interogare de tip Linq to SQL, doar
maparea datelor fiind diferit.
4 Creare de fiiere RDF
Scriere 樽n fiiere RDF se face 樽n SemWeb cu ajutorul clasei abstracte RdfWriter ce
este extins de ctre clasele XmlTextWriter i N3Writer. RdfWriter implementeaz
interfa釘a StatementSink. Astfel putem apela metoda Add pentru a aduga c但te o tripl
sau metoda Write ce primete ca parametru un obiect de tip StatementSource.
Exemplu:
MemoryStore store = new MemoryStore();
Entity subject = new Entity("http://ex.org/Mary");
5. Entity property = "http://ex.org/hasSon";
Literal obj = new Literal("John", "en_US", null);
store.Add(new Statement(subject, property, obj));
XmlTextWriter xmlWriter = null;
try
{
xmlWriter =
new XmlTextWriter("Test.rdf",Encoding.UTF8);
using (RdfWriter writer = new RdfXmlWriter(xmlWriter))
{
writer.Namespaces.AddNamespace(
"http://ex.org/", "ex");
writer.Write(store);
}
}
catch (Exception ex)
{
Trace.TraceError(ex.Message);
}
finally
{
if (xmlWriter != null)
xmlWriter.Close();
}
Proiectul LinqToRdf con釘ine i un designer grafic ce se integreaz 樽n Visual Studio
(versiunea 2008 sau urmtoare). Folosind acest designer este foarte simplu pentru a
crea ontologii i clasele C# ce sunt mapate la aceste ontologii. LinqToRdfDesigner
creaz ontologiile 樽n format N3 i autorul proiectului precizeaz 樽n documenta釘ie c
acest designer este suficient pentru ontologii simple, dar pentru a crea ontologii
complexe sau 樽n alte formate dec但t N3 am putea considera Protg.
5 Interogri SPARQL
n SemWeb exist 3 tipuri de interogri ce pot fi executate: GraphMatch, SPARQL
local i SPARQL la distan釘. Pentru a executa interogri trebuie s avem un obiect de
tip Query. Clasa Query are metoda Run ce primete un parametru de tip
SelectableSource (subclas a clasei StatementSource) i un parametru de tip
QueryResultSink. GraphMatch i SparqlEngine motenesc clasa Query.
Exemplu:
MemoryStore store = new MemoryStore(new
RdfXmlReader("genealogy.rdf"));
StringBuilder queryBuilder = new StringBuilder();
queryBuilder.AppendLine(@"PREFIX
rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>");
queryBuilder.AppendLine(
6. @"PREFIX g: <http://ex.org/genealogy/>");
queryBuilder.AppendLine(
"SELECT * WHERE { ?women rdf:type g:Woman)");
queryBuilder.AppendLine("?women g:hasSon 'John'}");
SparqlEngine query = new
SparqlEngine(sparqlQuery.toString());
query.Run(store, new SparqlXmlQuerySink(Console.Out));
LinqToRdf transform toate interogrile 樽n SPARQL ce pot fi executate interogri
local sau la distan釘.
6 Documenta釘ie
Pentru un programator ce a mai utilizat LINQ (la SQL sau la colec釘ii), LinqToRdf
este mai uor de utilizat, iar interogrile sunt tranformate 樽n SPARQL de ctre
providerul LinqToRdf fr a fi necesar ca progamatorul s cunosc SPARQL.
Cu toate acestea, consider c documenta釘ia proiectul SemWeb este mai bine
structurat i este 樽mpr釘it 樽n documenta釘ie de baz i documenta釘ie API. Un minus
care l-am sesizat la documenta釘ia LinqToRdf este faptul c unele exemple folosesc o
clas care nu mai exist (clasa Rdf), astfel unele exemple sunt incorecte. Aceast
clas a aprut 樽n versiuni anterioare ale proiectului, iar apoi a fost 樽nlocuit cu clasa
RdfContext.
7 Referin釘e
1. Pagina proiectului SemWeb, http://razor.occams.info/code/semweb/
2. LinqToRdf, http://code.google.com/p/linqtordf/
3. LINQ For Dummies, John Paul Mueller, Wiley Publishing, Inc.