Nachdem ich in Teil I die Notwendigkeit von Mikroformaten für bibliographische Daten erläutert habe, in Teil II möchte ich nun b die Grundlagen von RDFa skizziert habe und in Teil III die Struktur der Bibliographic Ontology erklärt habe, möchte ich nun beispielhaft bibliographische Daten mit RDFa annotieren.
Als Ausgangsbasis soll ein Zeitschriftenartikel herhalten, der im
Zitationsstil APA dargestellt wird:
Dubeck, L., Doe, John (1990). Science fiction aids science teaching. Physics Teacher, 28, 316-318.
Der Artikel ist nicht fiktiv, aber der Didaktik wegen habe ich noch einen fiktiven Autor (John Doe) dazugenommen.
Ziel ist es den Artikel in der Art mit RDFa zu annotieren, so dass durch die Interpretation eines RDFa-Parsers ähnliche Tripel entstehen,
wie es die Bibliographic Ontology vorschlägt und wie ich es in Teil III beschrieben habe.blog/artikel/archive/2008/october/30/bibliographische_daten_und_rfda_teil_iii_bibliographic_ontology/
An dieser Stelle stoßen wir schon auf das größte Problem: Was wollen wir eigentlich beschreiben?
Im Semantic Web geht man von zweierlei Ressourcen aus: von information resources und non-information resources.
All the resources we find on the traditional document Web, such as documents, images, and other media files, are information resources. But many of the things we want to share data about are not: People, physical products, places, proteins, scientific concepts, and so on. As a rule of thumb, all “real-world objects” that exist outside of the Web are non-information resources.
aus Bizer, Cyganiak, Heath:
How to Publish Linked Data on the Web
Ich denke, es ist somit klar, dass wir hier über eine non-information resource bzw. ein real-world-object sprechen, da es zwar eine digitale Version oder eher Respräsentation gibt, wir diese (aus gutem Grund) nicht direkt zitieren.
Da jede Ressource im Semantic Web mit einem URI identifiziert werden muss, brauche ich also ein URI für meinen Artikel, den ich zitiere. Ich brauche aber nicht irgendein URI, sondern dieser URI muss die Eigenschaft haben, bei einer HTTP-GET-Anfrage eine Umleitung zu einer information resource bereit zu stellen, die mein real-world-object beschreibt.
Aber woher nehme ich diesen URI, wenn niemand ein solches content negotiation für meinen Artikel anbietet? Die Antwort lautet: entweder ich bestimme einen URI, der unter meiner Kontrolle liegt, zum URI des Artikels und biete selber content negotiation an, oder ich hoffe, dass irgendjemand bald etwas ähnliches anbietet und nutze solange eine "Krücke", nämlich eine URN (in diesem Fall
info:doi:10.1119/1.2343039).
<p about="info:doi:10.1119/1.2343039">Dubeck, L., Doe, John (1990). Science fiction aids science teaching. Physics Teacher, 28, 316-318.</p>
Damit hätten wir schon mal das Subjekt der Aussage.
Prädikate und Objekte der AussageDer Rest dürfte sicher einfacher sein. Zuerst einmal brauchen wir das Vokabular, mit dem wir arbeiten wollen (siehe dazu Teil II).
Das erste, was wir machen müssen, ist die Publikationsform zu bestimmen:
<p about="info:doi:10.1119/1.2343039" typeof="bibo:Article">Dubeck, L., Doe, John (1990). Science fiction aids science teaching. Physics Teacher, 28, 316-318.</p>
Damit ist das erste Triple schon mal fertig:
<info:doi:10.1119/1.2343039> a bibo:Article
Jetzt können wir uns daran machen die Properties zu beschreiben. Wichtig: Ich gebe allen Objekten der Aussage eine ID, damit ich hinterher keine Blank Nodes in meinem RDF habe.
<p about="info:doi:10.1119/1.2343039" typeof="bibo:Article">
<span rel="bibo:authorList" resource="#authors_1" id="authors_1">
<span rel="bibo:contributer" resource="#authors_1_1">
<span resource="#authors_1_1" typeof="foaf:Person" id="authors_1_1">
<span property="foaf:family_name">Dubeck</span>,
<span property="foaf:givenname">L.</span>,
</span>
</span>
<span rel="bibo:contributer" resource="#authors_1_2">
<span resource="#authors_1_2" typeof="foaf:Person" id="authors_1_2">
<span property="foaf:family_name">Doe</span>,
<span property="foaf:givenname">John</span>
</span>
</span>
</span>
(<span property="dcterms:date" datatype="xsd:year">1990</span>).
<span property="dcterms:title">Science fiction aids science teaching</span>.
<span rel="dcterms:isPartOf" resource="#journal_1">
<span resource="#journal_1" typeof="bibo:Journal" id="journal_1">
<span property="dcterms:title">Physics Teacher</span>,
</span>
</span>
<span property="bibo:issue">28</span>,
<span property="bibo:pageStart" datatype="xsd:interger">316</span>-
<span property="bibo:pageEnd" datatype="xsd:interger">318</span>.
</p>
Uups! Das muss ich wohl noch etwas erläutern.
AutorenlisteDas erste, was wir bestimmen, ist, dass das Subjekt eine Autorenliste hat. Da die Autorenliste selbst eine Ressource und kein Literal ist, nutzen wir das Attribut @rel, um die Beziehung zwischen beiden Ressourcen zu beschreiben (rel="bibo:authorList").
<span rel="bibo:authorList" resource="#authors_1" id="authors_1">
Die Partnerressource wird durch das Attribut @resource bestimmt. Der Wert des resource-Attributs ist die ID der Ressource in diesem Dokument. So wäre es auch möglich auf eine Ressource eines anderen Dokuments zu verweisen. Ohne IDs würden in dem obigen Beispiel Blank Nodes entstehen und es wäre nicht möglich auf eine Ressource eines anderen Dokuments zu verweisen. Die Ressource, auf die in diesem Fall verwiesen wird ist das SPAN-Tag selbst. Das hat den Grund, dass es weniger Code erfordert, als eine weitere Tag-Verschachtelung, die natürlich auch möglich wäre.
Ganz ohne Verschachtelung kommen wir aber nicht aus. Wenn wir der Autorenliste die beteiligten Personen bibo:contributer hinzufügen möchten, brauchen wir zwei neue Ressourcen, die durch ihre IDs refrenziert werden und deren Werte jeweils eine Ressource von Typ foaf:Person ist. Die Ressource von Typ foaf:Person macht dann wieder eine Aussage über sich selbst:
<span rel="bibo:contributer" resource="#authors_1_1">
<span resource="#authors_1_1" typeof="foaf:Person" id="authors_1_1">
<span property="foaf:family_name">Dubeck</span>,
<span property="foaf:givenname">L.</span>,
</span>
</span>
<span rel="bibo:contributer" resource="#authors_1_2">
<span resource="#authors_1_2" typeof="foaf:Person" id="authors_1_2">
<span property="foaf:family_name">Doe</span>,
<span property="foaf:givenname">John</span>
</span>
</span>
Für die Autorenliste ergeben sich dann folgende Tripel:
<info:doi:10.1119/1.2343039>
bibo:authorList <http://www.collidoscope.de/markup/APA.html#authors_1> .
<http://www.collidoscope.de/markup/APA.html#authors_1>
bibo:contributer <http://www.collidoscope.de/markup/APA.html#authors_1_1>,
<http://www.collidoscope.de/markup/APA.html#authors_1_2> .
<http://www.collidoscope.de/markup/APA.html#authors_1_1> a foaf:Person ;
foaf:family_name "Dubeck"@en ;
foaf:givenname "L."@en .
<http://www.collidoscope.de/markup/APA.html#authors_1_2> a foaf:Person ;
foaf:family_name "Doe"@en ;
foaf:givenname "John"@en .
auf die gleiche Weise funktioniert dies auch mit der Zeitschrift, nur dass hier eine Ebene weniger involviert ist:
<span rel="dcterms:isPartOf" resource="#journal_1">
<span resource="#journal_1" typeof="bibo:Journal" id="journal_1">
<span property="dcterms:title">Physics Teacher</span>,
</span>
</span>
ergibt die Tripel
<info:doi:10.1119/1.2343039>
dcterms:isPartOf <http://www.collidoscope.de/markup/rdfa.html#journal_1> .
<http://www.collidoscope.de/markup/rdfa.html#journal_1> a bibo:Journal ;
dcterms:title "Physics Teacher"@en .
Der Rest ist Formsache. Alle Literale bekommen ihre Eigenschaften durch das Attribut @property und ggf. ein Datentyp durch das Attribut @datatype zugewiesen. Die vollständigen Tripel sehen dann folgendermaßen aus:
<info:doi:10.1119/1.2343039> a bibo:Article ;
dcterms:date "1990"^^xsd:year ;
dcterms:isPartOf <http://www.collidoscope.de/markup/rdfa.html#journal_1> ;
dcterms:title "Science fiction aids science teaching"@en ;
bibo:authorList <http://www.collidoscope.de/markup/rdfa.html#authors_1> ;
bibo:issue "28"@en ;
bibo:pageEnd "318"^^xsd:interger ;
bibo:pageStart "316"^^xsd:interger .
<http://www.collidoscope.de/markup/rdfa.html#authors_1>
bibo:contributer <http://www.collidoscope.de/markup/rdfa.html#authors_1_1>,
<http://www.collidoscope.de/markup/rdfa.html#authors_1_2> .
<http://www.collidoscope.de/markup/rdfa.html#authors_1_1> a foaf:Person ;
foaf:family_name "Dubeck"@en ;
foaf:givenname "L."@en .
<http://www.collidoscope.de/markup/rdfa.html#authors_1_2> a foaf:Person ;
foaf:family_name "Doe"@en ;
foaf:givenname "John"@en .
<http://www.collidoscope.de/markup/rdfa.html#journal_1> a bibo:Journal ;
dcterms:title "Physics Teacher"@en .

