Linked Data: stap voor stap, deel 3bis Table of Contents Linked Data: stap voor stap, deel 3bis..................................................................................................1 Inleiding...........................................................................................................................................2 Van triples naar concrete syntax......................................................................................................2 N-Triples.....................................................................................................................................2 Turtle...........................................................................................................................................3 RDF/XML...................................................................................................................................5 Van syntax naar graph......................................................................................................................8 Conversie van bron naar target........................................................................................................9 Conversie vanaf een relationele database...................................................................................9 Conversie vanaf XML.................................................................................................................9 De bron.................................................................................................................................10 Het XSLT stylesheet.............................................................................................................11 Het resultaat van de conversie..............................................................................................11 Conversie vanaf CSV of XLS files...........................................................................................12 Benodigde tools....................................................................................................................12 Inladen van de data...............................................................................................................12 Opzetten van de mapping omgeving....................................................................................13 De mapping zelf...................................................................................................................14 Het resultaat van de mapping...............................................................................................17 Status..............................................................................................................................................17 Referentiemateriaal........................................................................................................................18 Contact...........................................................................................................................................18
Inleiding In vorige delen hebben we de bouwstenen voor onze linked data publishing besproken: •
hoe een naam/identifier te geven aan onze entiteiten
•
hoe onze entiteiten aan één of meerdere klassen toe te voegen
•
hoe met properties en de bijhorende values onze entiteiten te beschrijven.
In deze stap bekijken we hoe de conversie te doen vanuit onze legacy data (tabel uit een relationele database, csv, xls, xml) naar het triple formaat beschreven in vorige stap.
Van triples naar concrete syntax In vorige stap hebben we conceptueel de door ons gewenste triples beschreven. Nu wordt het tijd om dit te vertalen naar concrete syntax. En hier hebben we keuze. Er zijn immers verschillende syntaxen/serialisaties van RDF mogelijk: •
RDF/XML
•
Turtle
•
NTriples
•
...
RDF/XML is de normatieve syntax in de RDF specificatie maar leest niet zo gemakkelijk. Op dat vlak is Turtle veel beter. De syntax die dan weer het dichtst aansluit bij het triple formaat is NTriples. We moeten daar niet echt van wakker liggen, want tools zorgen voor de vertaling van het ene formaat naar het andere.
N-Triples Best is om de tabellen uit stap 3, meer bepaald die onder titel 'Vastleggen van de Object waarden' bij de hand te nemen. Hierin staan de door ons gewenste triples conceptueel beschreven. Een vertaling naar N-Triples gaat dan als volgt. Elke lijn bestaat uit drie delen (subject, predicate, value) en wordt afgesloten met een punt. Subject
Predicate
Object
Een URI startend met '<' en afgesloten met '>'
Een URI startend met '<' en afgesloten met '>'
Een atomaire value ("LB 2115/1") optioneel met taal- of datatype aanduiding "Adam en Eva"@nl of "1652"^^xsd:gYear
Of een blanke node met syntax '_:'name b.v. _:A1
Een URI startend met '<' en afgesloten met '>' Een blanke node _:autos1
"LB 2115/1" . "Adam en Eva"@nl . "siglo
de Rubens en el Museo del Prado : catalogo razonado de pintura flamenca del siglo 17; D\u00EDaz Padr\u00F3n, Mat\u00EDas; p. 992-995; nr. 1692" . . . _:autos1 . _:autos1 . _:autos1 "237 * 184 cm" . . "Adam" . "Eva" . "religieuze kunst" . "schilderij" . "1692" . "Adam en Eva (naar Titiaan)" .
.
Op de subject positie hebben we overal de identifier van de schilderij die we beschrijven behalve de twee statements die we moeten maken m.b.t. de anonieme node op de object positie in _:autos1 . N-Triples is een ASCII formaat, dus vreemde karakters moeten ge-escaped worden (zie D\u00EDaz Padr\u00F3n, Mat\u00EDas). Daar zorgen bepaalde RDF editors, zoals rdfEditor een Notepad vervanger voor het editeren RDF, te downloaden op http://www.dotnetrdf.org/content.asp? pageID=Tools, wel voor.
Hierboven ziet men onze N-Triples geopend in rdfEditor. Onderaan zie je ook dat de editor aangeeft dat onze file http://www.rubenianum.be/artefact/10005298.nt valide RDF is en 16 triples bevat.
Turtle Met behulp van diezelfde tool kan u converteren (Save With ...) naar de andere RDF syntaxen. Dit is de turtle serialisatie in file http://www.rubenianum.be/artefact/10005298.ttl. @prefix rdf: . @prefix rdfs: .
@prefix xsd: . @prefix dc: . @prefix dcterms: . @prefix vocab: .
dc:type "schilderij"; dcterms:bibliographicCitation "siglo de Rubens en el Museo del Prado : catalogo razonado de pintura flamenca del siglo 17; Díaz Padrón, Matías; p. 992995; nr. 1692"; dcterms:creator ; dcterms:description "Adam en Eva"@nl; dcterms:extent [a dcterms:SizeOrDuration ; rdf:value "237 * 184 cm"]; dcterms:identifier "1692"; dcterms:relation
; ;
dcterms:rightsHolder dcterms:subject "Adam", "Eva", "religieuze kunst"; dcterms:title "Adam en Eva (naar Titiaan)"; vocab:crlb-number "LB 2115/1"; a vocab:workOfRubens.
Om de leesbaarheid te verhogen laat turtle toe om prefixen te definiëren die in de plaats gebruikt kunnen worden van het URI-deel voor de slash of hash. Zo kunnen we 'dcterms:' gebruiken i.p.v. en kunnen we dus dcterms:title gebruiken i.p.v. . Verder zijn er nog een aantal verkortingsmechanismes mogelijk. Het subject wordt herhaald door een lijn af te sluiten met ';'. dcterms:identifier "1692"; dcterms:relation .
Is equivalent aan: dcterms:identifier "1692". dcterms:relation .
Het subject en het predicate worden herhaald door een lijn af te sluiten met ','. dcterms:subject "Adam", "Eva", "religieuze kunst".
Is equivalent aan: dcterms:subject "Adam". dcterms:subject "Eva". dcterms:subject "religieuze kunst".
En heeft als shortcut Deze file in rdfEditor.
a.
Opnieuw valide RDF met 16 triples.
RDF/XML De derde variant RDF/XML in file http://www.rubenianum.be/artefact/10005298.rdf. LB 2115/1 schilderij siglo de Rubens en el Museo del Prado : catalogo razonado de pintura flamenca del siglo 17; Díaz Padrón, Matías; p. 992-995; nr. 1692 Adam en Eva Adam Eva religieuze kunst Adam en Eva (naar Titiaan) 1692
Dit is een XML formaat. Er wordt net zoals bij Turtle gebruik gemaakt van prefixen. In rdfEditor geeft dit:
Er zijn ook nog andere tools die u helpen in het editeren van RDF en die van de ene naar het andere syntax converteren. Hier ziet u de beschrijving in Topbraid Composer, waarvan de free versie kan gedownload worden op http://www.topquadrant.com/products/TB_download.html.
Bij dcterms:extent zie je een vreemde code. Dit is de aan de tool eigen manier om een identifier aan een anonieme node toe te kennen. Vraagt u dan de 'Source Code' op dan krijgt men de volgende serialisatie mogelijkheden:
Van syntax naar graph Om nog eens duidelijk te maken dat de gekozen serialisatie er niet toe doet, verwijs ik even naar de Sindice Web Data Inspector op http://inspector.sindice.com/. Kies voor de tab direct input, plak uw turtle, rdf/xml of n-triples in het 'By direct input' veld en klik 'Inspect + Validate'.
Men krijgt dan volgend resultaat met 16 triples:
Die triples vormen dan volgende graph (klik op tab 'Graph').
Die graph is hetzelfde welke serialisatie men ook gebruikt. We weten nu dat onze RDF, in welke serialisatie dan ook, valide is en dat we dus als doelformaat van onze conversie die syntax kunnen nemen die ons het beste uitkomt.
Conversie van bron naar target Veel hangt hier af van het bronsysteem waarin de data zitten of beschikbaar zijn. Ik som hier een aantal mogelijkheden op: •
in (een) tabel(len) van een relationele database
•
in een XML file
•
in een CSV of XSL file
Conversie vanaf een relationele database Een aantal tools laten u toe relationele data als RDF te publiceren: •
D2R (http://www4.wiwiss.fu-berlin.de/bizer/d2rq/)
•
Triplify (http://triplify.org/Overview)
•
Spyder (http://www.revelytix.com/content/spyder)
•
Ultrawrap (http://ribs.csres.utexas.edu/ultrawrap/index.html)
De laatste twee volgen daarbij de W3C RDB2RDF Direct Mapping standaard.
Conversie vanaf XML De meeste databases en museumsystemen zoals Adlib laten toe om hun inhoud als XML te
exporteren. De meest voor de hand liggende manier om dan vanuit deze XML naar RDF te geraken is een XSLT transformatie te schrijven die de bron XML omzet naar de gewenste RDF/XML syntax. De bron
Dit even uitwerkend voor ons voorbeeld: de xml output komend van AdLib.
Het XSLT stylesheet
Het resultaat van de conversie
Onze gewenste RDF/XML
Het resultaat van de conversie laten we ook even valideren m.b.v. de Sindice Web Data Inspector.
17 triples, waar zit het verschil? Een alternatief voor mensen die geen XSLT willen/kunnen gebruiken is Tripliser (http://daverog.github.com/tripliser/index.html), een Java library en command-line tool voor het creëren van triples, die gebruik maakt van een mapping file in XML.
Conversie vanaf CSV of XLS files Benodigde tools
Hiervoor gebruik ik Google Refine met RDF extensie geïnstalleerd. Google Refine is een desktop tool voor het opkuisen van data en kan gedownload worden op http://code.google.com/p/google-refine/ De RDF extensie vindt u op http://lab.linkeddata.deri.ie/2010/grefine-rdf-extension/ Inladen van de data
Open Google Refine en creëer een nieuw project door uw csv datafile up te loaden.
In het volgend scherm krijgt u een tabelview op de data.
Opzetten van de mapping omgeving
Open vervolgens de RDF extensie optie 'Edit RDF template'. Hiermee bepaal je de mapping van de cellen op de gewenste RDF structuur. Vooraleer je begint te mappen zorg je dat: •
de base URI correct gezet wordt; in ons geval 'http://www.rubenianum.be/artefact/'
•
De nodige namespaces worden ingelezen; wij voegen toe dc, dcterms en onze eigen vocab
De mapping zelf
Voor ons subject (linker kant van onze triples) genereren we een URI bestaand uit onze base URI en de waarde van het element priref.
Met volgende preview ter checking:
Verder voegen we het type van onze entiteit toe, zoals besproken in stap 2.
Op de predicate plaats (midden positie van onze triples) vullen we al onze properties in:
En op de object plaats (rechter kant van onze triples) duiden we: •
voor de gevallen waar we gewoon de value van een cell nodig hebben, duiden we de cel aan met het gewenste datatype, tekst in het voorbeeld.
•
voor de gevallen waar we willen pointen naar een andere entiteit, construeren we de identifier; b.v. voor 'dcterms:rightsHolder' gebruiken we de value van het element current_owner als URI geplakt achter 'http://www.rubenianum.be/agent/'
Er is één tricky geval waar we om conform te zijn aan de dcterms spec minstens een anonieme node moeten construeren.
Op de object plaats steken we dus een blank node. Deze node is van type 'dcterms:SizeOrDuration' en is op zichzelf weer het subject van een tweede triple, met als predicate 'rdf:value' met object, de waarde van de cel 'physical_description'. Het resultaat van de mapping
Klik op RDF Preview 'et voilà' de RDF triples.
Even testen in Sindice Web Data Inspector en dan exporteren:
Status We hebben nu de RDF statements. Alleen zijn we nog zeer egocentrisch met onze eigen data bezig
en linken we enkel tussen eigen entiteiten. Binnen het linked data verhaal is het van belang zo veel mogelijk linken te leggen met al gepubliceerde datasets. Dat is het onderwerp van volgende stap.
Referentiemateriaal •
RDF/XML Syntax (http://www.w3.org/TR/rdf-syntax-grammar/)
•
Turtle syntax (http://www.w3.org/TeamSubmission/turtle/)
•
N-Triples (http://www.w3.org/2001/sw/RDFCore/ntriples/)
•
RDB2RDF (http://www.w3.org/2001/sw/rdb2rdf/)
Contact Voor vragen en meer info: [email protected] of 070-3140343 Auteur: Paul Hermans, [email protected]