<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Nur Text Zchn";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:9.0pt;
        font-family:"Verdana","sans-serif";}
span.NurTextZchn
        {mso-style-name:"Nur Text Zchn";
        mso-style-priority:99;
        mso-style-link:"Nur Text";
        font-family:"Verdana","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoPlainText">Liebe Metamorph-Nutzer,<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Metamorph wird mittlerweile in einigen Anwendungen eingesetzt, um RDF zu generieren. Der dabei eingesetzte RDF-Writer wurde allerdings ursprünglich nur als Proof-of-Concept entwickelt und hat noch einige Unzulänglichkeiten, wenn die
 Anforderungen an die RDF-Ausgabe anspruchsvoller werden.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Ich würde daher gerne eine kleine Diskussion darüber anstoßen, welche zusätzlichen Ausdrucksmöglichkeiten von RDF mit dem RDF-Writer erzeugbar sein sollen. Um den Aufwand gering zu halten, schlage ich vor, die Diskussion zunächst per
 E-Mail zu führen.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Im Folgenden ist kurz beschrieben, nach welchen Regeln die Umsetzung der Metamorph-Ausgabe in RDF momentan stattfindet. Daran anschließend habe ich eine Übersicht der erweiterten Ausdrucksmöglichkeiten von RDF erstellt, die momentan
 nicht vom RDF-Writer unterstützt werden. Diese Liste soll als Ausgangspunkt der Diskussion dienen.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText"><b>Derzeitige Umsetzung der RDF-Konvertierung mit Metamorph<o:p></o:p></b></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Metamorph wurde als allgemeines Metadaten-Konversionswerkzeug entwickelt. Daher korrespondiert das Datenmodell nicht direkt mit dem von RDF verwendeten. Metamorph verarbeitet einzelne Datensätze, die Literale und Entities (d.h. Gruppen
 von Literalen und weiteren Entities) enthalten. Eine typische Datenstruktur sieht in etwa so aus:<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText"><span lang="EN-US">RECORD (id=23):<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; LITERAL: ex:Name = Gustav Stresemann<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; ENTITY: ex:Address<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;LITERAL: ex:Street = Gartenstraße<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;LITERAL: ex:Housenumber = 13<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ENTITY: ex:City<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LITERAL: ex:PostCode = 12345<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LITERAL: ex:CityName = http://de.wikipedia.org/wiki/Frankfurt_am_Main<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoPlainText">Metamorph-Skripte verarbeiten solcherart strukturierte Daten und produzieren eine ebenso strukturierte Ausgabe. Der RDF-Writer verwendet dann diese Ausgabe, um RDF-Statements zu erzeugen. Dazu folgt der RDF-Writer folgenden Regeln:<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Literal- und Entity-Namen werden als URIs in Namespace-Schreibweise aufgefasst. Zur Auflösung der
<o:p></o:p></p>
<p class="MsoPlainText" style="text-indent:35.4pt">&nbsp;&nbsp;Namespace-Namen zu URIs wird eine gesonderte &#8211; im RDF-Writer konfigurierte -- Tabelle verwendet.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Für jeden Record wird eine rdf:Description erzeugt; der Wert des rdf:about-Atrributs setzt sich
<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;dabei zusammen aus einem im RDF-Writer konfigurierbaren URI-Präfix an den die Record-ID
<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;angehängt wird.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Literals deren Wert mit &quot;http://&quot; beginnt, werden nicht als RDF-Literale betrachtet sondern als
<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Verweise auf eine andere RDF-Ressource. Der Literal-Name wird als URI der Property verwendet.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Alle anderen Literale werden als normale RDF-Literale behandelt. Der Literal-Name ist dabei der
<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;URI der Property.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Entities werden über BNodes realisiert, wobei der Name der Entity als Property-URI
<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;verwendet wird.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Aus dem obigen Datensatz wird damit etwa folgende RDF-Ausgabe erzeugt:<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText"><span lang="EN-US">&lt;rdf:Description rdf:about=&quot;http://example.org/23&quot;&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &lt;ex:name&gt;Gustav Stresemann&lt;/ex:Name&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &lt;ex:Address rdf:parseType=&quot;Resource&quot;&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;ex:Street&gt;Gartenstraße&lt;/ex:Street&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;ex:Housenumber&gt;13&lt;/ex:Housenumber&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;ex:City rdf:parseType=&quot;Resource&quot;&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ex:PostCode&gt;12345&lt;/ex:PostCode&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ex:CityName rdf:resource=&quot;http://de.wikipedia.org/wiki/Frankfurt_am_Main&quot; /&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/ex:City&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&nbsp;&nbsp;&nbsp; &lt;/ex:Address&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">&lt;/rdf:Description&gt;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoPlainText"><b>Mögliche zusätzliche RDF-Ausdrucksmöglichkeiten<o:p></o:p></b></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Mit diesen Regeln können offensichtlich nicht alle Möglichkeiten von RDF genutzt werden. Daher ist zu klären, welche zusätzlichen Fähigkeiten von RDF unterstützt werden sollen. Als mögliche Kandidaten sehe ich folgende Features:<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Datentypangaben bei Literalen (über das rdf:datatype-Attribut)<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Angaben zur verwendeten Sprache bei Literalen (über das xml:lang-Attribut)<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Unterstützung für Literale mit XML-Inhalt (durch die Angabe rdf:parseType=&quot;Literal&quot;)<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Unterstützung für RDF-Collections/RDF-Listen (durch die Angabe rdf:parseType=&quot;Collection&quot;)<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Unterstüzung für die RDF-Container-Typen rdf:Seq, rdf:Bag und rdf:Alt<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Unterstützung für die Erzeugung von reified Statements<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Verwendung beliebiger URIs im rdf:about-Attribut (d.h. Aufhebung der Beschränkung auf die Record-ID)<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Erweiterung des Handlings von Entities um die Möglichkeit,
<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - IDs für die aus den Entities erzeugten BNodes vorgeben zu können (rdf:nodeID) und/oder<o:p></o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - statt BNodes benannte Ressourcen über Entities definieren zu können<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Unterstützung für Verweise auf BNodes (über rdf:nodeID)<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Bei den einzelnen Punkten muss außerdem entschieden werden, ob die verarbeiteten Datenwerte einen Einfluss auf die generierte RDF-Ausgabe nehmen können. Bspw. könnte die Sprache der Literal-Werte entweder fest für alle Vorkommen des
 Literals vorgegeben werden oder aber abhängig von den vorliegenden Daten gewählt werden.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Wird eine erweiterte Unterstützung für rdf:nodeID umgesetzt, ist dabei zu beachten, dass der Gültigkeitsbereich der IDs schwierig abzugrenzen ist, da im Normalfall viele Records in einem RDF-Dokument zusammengefasst werden.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Viele Grüße,<o:p></o:p></p>
<p class="MsoPlainText">Christoph<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">--<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">***Lesen. Hören. Wissen. 100 Jahre Deutsche Nationalbibliothek***<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText"><a href="http://www.dnb.de/100jahre">http://www.dnb.de/100jahre</a><o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Christoph Böhme<o:p></o:p></p>
<p class="MsoPlainText">Deutsche Nationalbibliothek<o:p></o:p></p>
<p class="MsoPlainText">Informationstechnik<o:p></o:p></p>
<p class="MsoPlainText">Adickesallee 1<o:p></o:p></p>
<p class="MsoPlainText">D-60322 Frankfurt am Main<o:p></o:p></p>
<p class="MsoPlainText">Telefon: &#43;49-69-1525-1721<o:p></o:p></p>
<p class="MsoPlainText">Telefax: &#43;49-69-1525-1799<o:p></o:p></p>
<p class="MsoPlainText"><a href="mailto:c.boehme@dnb.de">mailto:c.boehme@dnb.de</a><o:p></o:p></p>
<p class="MsoPlainText"><a href="http://www.dnb.de">http://www.dnb.de</a><o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>