Jena GRDDL Reader

Wśród wielu ciekawych rzeczy, które zdarzyły się w czasie, kiedy byłem nieobecny duchem, znalazło się również wydanie 0.2 parsera GRDDL dla pakietu JenaJena GRDDL Reader. Dla niewtajemniczonych (a życie nauczyło mnie, że zawsze są jacyś „niewtajemniczeni”) przedstawię krótki opis GRDDL; reszta (a życie nauczyło mnie, że nie zawsze jest jakakolwiek reszta) może spokojnie przeskoczyć dalej.

teoria

W skrócie: mechanizm GRDDL (Gleaning Resource Descriptions from Dialects of Languages) jest prostym sposobem wskazania transformacji XSLT jaką należy zastosować do strony XHTML w celu wydobycia z niej osadzonego RDF-a. Zastosowana technika tego „osadzenia” nie ma znaczenia — może to być eRDF, RDFa czy nawet microformats. Ważne jedynie aby dało się wydobyć wyrażenia RDF przez potraktowanie strony wskazanym arkuszem XSLT. Wskazanie to odbywa się z wykorzystaniem odpowiedniego profilu metadanych — albo bezpośrednio umieszczając na stronie coś takiego:

<head profile="http://www.w3.org/2003/g/data-view">
<link rel="transformation" href="transformacja.xsl" />

albo pośrednio przez wskazanie profilu, który sam wykorzystuje profil GRDDL i wskazuje na odpowiednią transformację, np.:

<head profile="http://purl.org/NET/erdf/profile">

gdzie dokument pod wskazanym adresem zawiera między innymi

<head profile="http://www.w3.org/2003/g/data-view">
<link rel="transformation"
href="http://www.w3.org/2003/g/glean-profile" />
. . .
<a rel="profileTransformation"
href="http://purl.org/NET/erdf/extract-rdf">GRDDL transform</a>
. . .

Klient rozumiejący GRDDL albo odczytuje arkusz transformacji wskazany bezpośrednio na stronie (rel="transformation" href="..."), albo odczytuje wskazany profil i jego odpytuje gdzie znajduje się ten arkusz (rel="profileTransformation" href="..."). I tyle — proste, że szkoda gadać. Dodatkowo kilka ładnych obrazków można znaleźć np. w GRDDL Primer — polecam.

praktyka

Jak wspomniałem na wstępie, dotarło do mnie niedawno, że Jena posiada parser GRDDL. Co prawda w wersji jeszcze bardzo roboczej i obwarowanej straszliwymi ostrzeżeniami i licencjami, ale jest. ;-) Ponieważ Jena jako taka, jest mocno interesująca i jeśli bym kiedykolwiek pisał jakiegoś agenta Sieci Semantycznej, to raczej na pewno w oparciu o ten framework, zatem wszystko, co takiemu agentowi ułatwi zadanie, wydaje mi się również interesujące. Zobaczmy więc czy to działa...

Użycie GRDDL readera dla Jeny sprowadza się praktycznie do określenia "GRDDL" jako sposobu serializacji przy ładowaniu modelu za pomocą FileManagera. Trochę to na wyrost, bo GRDDL nie jest formatem serializacji; chyba po prostu tak się nazywa parametr wykorzystywanej metody i tak zostało, no niech im będzie... Warto jeszcze dodać opisany w dokumentacji trick z udawaniem zaakceptowania licencji[1] no i to jest już rzeczywiście wszystko. Nawet moje znikome zdolności programowania w javie pozwalają na stworzenie programiku odczytującego dowolny RDF zawarty w dowolnej stronie zgodnej z GRDDL — w najbanalniejszej wersji mogłoby to wyglądać np. jakoś tak:

import com.hp.hpl.jena.grddl.license.License;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.util.FileUtils;

public class JenaGRDDL {

public static void main(String[] args) {
if (args.length < 1) return;

// let's pretend the license is already accepted
System.setProperty("jena.grddl.license", "The end-user understands the risks associated with running GRDDL software. The end-user agrees to the BSD license for the Jena GRDDL Reader.");

// just load the model
Model m = FileManager.get().loadModel(args[0], "GRDDL");

// and do some output; N3 is just for fun
m.write(System.out, FileUtils.langN3);
}
}

I już. Jak widać załadowanie modelu RDF ukrytego na stronie zgodnej z GRDDL (o ile w ogóle coś takiego na niej jest) to jedna linijka kodu. Jedno proste wywołanie FileManager.get().loadModel(uri,"GRDDL") uruchamia teraz cały mechanizm GRDDL i wydobywa RDF-a z dowolnej strony. No dobra, wiem, że taki kod musi mieć spore uprawnienia[2] i generalnie odpalanie XSLT z nieznanego źródła może się niemiło skończyć, ale nie w tym rzecz w tej chwili...

Uruchomienie teraz tego programiku z parametrem np. równym http://dezinformacja.org/tarpit/ ujawni dokładnie (no, z dokładnością do wybranej metody serializacji) to, co widać pod ikonką [eRDF] w stopce tej strony, ewentualnie różne inne ciekawostki ukryte tu i ówdzie za ikonkami RDF. Działa aż miło... :-) Polecam też potratowanie powyższym innych stron — np. http://ffreak.net/ daje bardzo ładny efekt.[3]

[1] Analogiczny program np. w swingu pokazuje okienko, gdzie tę licencję można sobie przeczytać i zaakceptować, ale w tym momencie mi to przeszkadza. Natomiast nie zaakceptowanie licencji w ogóle przerywa dalsze wykonanie całości programu...

[2] Zaznaczam od razu, że nie testowałem jakie i zadowoliłem się skrótowym

grant codeBase "file:lib/*" {
permission java.security.AllPermission;
};

ale co tam... ;-)

[3] Nawiasem mówiąc strona Kamila jest chyba najlepszym przykładem wykorzystania techniki eRDF w polskiej sieci — wizytówka odczytywana równocześnie w sieci WWW oraz w Sieci Semantycznej i równie szczegółowa w obu. Chłopcy i dziewczęta — patrzcie i uczcie się. :-)

Komentarze

Brak komentarzy do tego wpisu.

 

Uwaga: Ze względu na bardzo intensywną działalność spambotów komentowanie zostało wyłączone po 60 dniach od opublikowania wpisu. Jeżeli faktycznie chcesz jeszcze skomentować skorzystaj ze strony kontaktowej.