[Metamorph] RDF-Ausgabe mit Metamorph

Böhme, Christoph C.Boehme at dnb.de
Wed May 23 13:36:50 CEST 2012


Liebe Metamorph-Nutzer,



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.



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.



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.





Derzeitige Umsetzung der RDF-Konvertierung mit Metamorph



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:



RECORD (id=23):

    LITERAL: ex:Name = Gustav Stresemann

    ENTITY: ex:Address

        LITERAL: ex:Street = Gartenstraße

        LITERAL: ex:Housenumber = 13

        ENTITY: ex:City

            LITERAL: ex:PostCode = 12345

            LITERAL: ex:CityName = http://de.wikipedia.org/wiki/Frankfurt_am_Main



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:



            - Literal- und Entity-Namen werden als URIs in Namespace-Schreibweise aufgefasst. Zur Auflösung der

  Namespace-Namen zu URIs wird eine gesonderte - im RDF-Writer konfigurierte -- Tabelle verwendet.



            - Für jeden Record wird eine rdf:Description erzeugt; der Wert des rdf:about-Atrributs setzt sich

              dabei zusammen aus einem im RDF-Writer konfigurierbaren URI-Präfix an den die Record-ID

              angehängt wird.



            - Literals deren Wert mit "http://" beginnt, werden nicht als RDF-Literale betrachtet sondern als

              Verweise auf eine andere RDF-Ressource. Der Literal-Name wird als URI der Property verwendet.



            - Alle anderen Literale werden als normale RDF-Literale behandelt. Der Literal-Name ist dabei der

              URI der Property.



            - Entities werden über BNodes realisiert, wobei der Name der Entity als Property-URI

              verwendet wird.



Aus dem obigen Datensatz wird damit etwa folgende RDF-Ausgabe erzeugt:



<rdf:Description rdf:about="http://example.org/23">

    <ex:name>Gustav Stresemann</ex:Name>

    <ex:Address rdf:parseType="Resource">

        <ex:Street>Gartenstraße</ex:Street>

        <ex:Housenumber>13</ex:Housenumber>

        <ex:City rdf:parseType="Resource">

            <ex:PostCode>12345</ex:PostCode>

            <ex:CityName rdf:resource="http://de.wikipedia.org/wiki/Frankfurt_am_Main" />

        </ex:City>

    </ex:Address>

</rdf:Description>





Mögliche zusätzliche RDF-Ausdrucksmöglichkeiten



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:



            - Datentypangaben bei Literalen (über das rdf:datatype-Attribut)



            - Angaben zur verwendeten Sprache bei Literalen (über das xml:lang-Attribut)



            - Unterstützung für Literale mit XML-Inhalt (durch die Angabe rdf:parseType="Literal")



            - Unterstützung für RDF-Collections/RDF-Listen (durch die Angabe rdf:parseType="Collection")



            - Unterstüzung für die RDF-Container-Typen rdf:Seq, rdf:Bag und rdf:Alt



            - Unterstützung für die Erzeugung von reified Statements



            - Verwendung beliebiger URIs im rdf:about-Attribut (d.h. Aufhebung der Beschränkung auf die Record-ID)



            - Erweiterung des Handlings von Entities um die Möglichkeit,

                        - IDs für die aus den Entities erzeugten BNodes vorgeben zu können (rdf:nodeID) und/oder

                        - statt BNodes benannte Ressourcen über Entities definieren zu können



            - Unterstützung für Verweise auf BNodes (über rdf:nodeID)



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.



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.



Viele Grüße,

Christoph





--



***Lesen. Hören. Wissen. 100 Jahre Deutsche Nationalbibliothek***



http://www.dnb.de/100jahre



Christoph Böhme

Deutsche Nationalbibliothek

Informationstechnik

Adickesallee 1

D-60322 Frankfurt am Main

Telefon: +49-69-1525-1721

Telefax: +49-69-1525-1799

mailto:c.boehme at dnb.de

http://www.dnb.de




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.dnb.de/pipermail/metafacture/attachments/20120523/5fa234dc/attachment.html


More information about the Metafacture mailing list