Wollis Homepage
Studienarbeiten

Tipps und Tricks
IoT
Studienarbeiten
  Diplomarbeiten
  Seminararbeiten
    RDFtoXML
    HTML
Privates
Suche
Startseite > Studienarbeiten > Seminararbeiten > RDFtoXML

Projektseminar - Applikationen zur Behandlung von RDF - Modellen
Universität GH Essen

Lehrstuhl für Wirtschaftsinformatik und Softwaretechnik
(Prof. Dr. G. Neumann)


Projektseminar

zum Thema

Applikationen zur Behandlung von RDF-Modellen

im Sommersemester 1999

bearbeitet von

Wolfgang Büning
Am Großen Kamp 8
46342 Velen
Matr.-Nr. 206545

Betreuer: Diplom-Wirtschaftsinformatiker Reinhold Klapsing





Inhaltsverzeichnis

1. Anforderungsanalyse

2. Design

    2.1 Klassen
    2.2 Funktionen

3. Implementierung

4. Bedienung

5. Beispiele

    5.1 Beispiele für die Erstellung von XML-Dateien in der Basic Serialization Syntax
    5.2 Beispiele für die Erstellung von XML-Dateien in der Basic Abbreviated Syntax
    5.3 Sonstige Beispiele
 

Source-Code


1. Anforderungsanalyse

Im Rahmen des Projektseminars soll ein Programm entwickelt werden, das RDF-Modelle, die als Triple in einer Datei gespeichert sind, in XML-Dateien transformiert. Dabei soll die Möglichkeit bestehen, die XML-Dateien in der Basic Serialization Syntax oder alternativ in der Basic Abbreviated Syntax abzuspeichern. Diese Aufgabe soll mit der Programmiersprache XOTcl realisiert werden. XOTcl ist eine Erweiterung von OTcl, die wiederum eine Erweiterung von TCL ist.
Aus der Aufgabenstellung ergeben sich folgende Funktionen, die in das Programm implementiert werden müssen:
  • Einleseroutine für die RDF-Triple
  • Interne Repräsentation der RDF-Triple
  • Transformation der RDF-Triple in XML
  • Speicherroutine für die XML-Dateien

  • 2. Design

    2.1 Klassen

    Um die Projektanforderung zu erfüllen, werden folgende Klassen erstellt:

    • Klasse zur internen Speicherung der Triple: Statement
    • Klasse zum Organisieren der Triple: Statementorg
    • Klasse zum Erstellen der XML-Repräsentation in der Basic Serialization Syntax: CreateXMLBSS
    • Klasse zum Erstellen der XML-Repräsentation in der Basic Abbreviated Syntax: CreateXMLBAS
    • Klasse zum Lesen und Parsen einer Triple-Datei: TripleFileRead
    • Klasse zum Speichern einer XML-Datei: XMLFileWrite

    •  
    Zusätzlich zu den sich aus der Anforderungsanalyse ergebenden Klassen werden folgende Klassen für die Behandlung von Namespaces benötigt:
    • Klasse zur internen Speicherung der Namespaces: Namespace
    • Klasse zum Organisieren der Namespaces: Namespaceorg

    •  
    Zwischen den Klassen bestehen folgende Beziehungen:
    • Objekte der Klasse Statement werden über die Klasse Statementorg angelegt und verwaltet
    • Objekte der Klasse Namespace werden über die Klasse Namespaceorg angelegt und verwaltet
     
    Im einzelnen gibt es folgende Nutzungsbeziehungen zwischen den Klassen:
    • Statementorg benutzt Objekte der Klasse Statement
    • Namespaceorg benutzt Objekte der Klasse Namespace
    • TripleFileRead benutzt ein Objekt der Klasse Statementorg
    • CreateXMLBSS und CreateXMLBAS benutzen Objekte der Klassen Statementorg und XMLFileWrite


    2.2 Funktionen

    Im folgenden werden die zentralen Funktionen der einzelnen Klassen genauer beschrieben.

    Funktionen der Klasse Statement

    • init {predicate subject object} : Konstruktor der Klasse Statement mit den Übergabeparametern Prädikat, Subjekt und Objekt zum Anlegen des Triples
    • getPredicate {}, getSubject {}, getObject {} : Funktionen zum Abfragen des Prädikats, Subjekts oder Objekts aus dem aktuellen Objekt
    • setPredicate {predicate}, setSubject {subject}, setObject {object} : Funktionen zum Ändern des Prädikats, Subjekts oder Objekts im aktuellen Objekt

    •  
    Funktionen der Klasse Statementorg
    • addStatement {predicate subject object} : Funktion zum Anlegen eines neuen Statement-Objekts mit den angegebenen Triple-Informationen
    • returnAllPredicates {} , returnAllSubjects {} , returnAllObjects {} : Funktionen, die eine Liste aller Prädikate, Subjekte bzw. Objekte zurückliefern
    • resetStatementCounter {} : setzt den Cursor für das aktuelle Statement-Objekt auf null
    • incrStatementCounter {} : erhöht den Cursor für das aktuelle Statement-Objekt um eins
    • getStatementCounter {} : liefert die aktuelle Cursor-Position zurück
    • setStatementCounter {sC} : setzt den Cursor für das aktuelle Statement-Objekt auf sC
    • getActPredicate {} , getActSubject {} , getActObject {} : liefern das Prädikat, Subjekt bzw. Objekt vom Statement-Objekt, auf das der Cursor gerade zeigt
    • createStatementSort {} : legt im Statement-Objekt eine Postionsnummer ab, die für die Umwandlung in XML erforderlich ist
    • setStatementCounterSortNr {SortNr} : setzt den Cursor auf das Objekt mit der Positionsnummer SortNr
    • setStatementCounterSortNrUsedXML {SortNr} : markiert das Objekt mit der Positionsnummer SortNr zur Kennzeichnung, daß es in XML umgewandelt ist

    •  
    Funktionen der Klasse Namespace
    • init {namespaceShort namespaceURL} : Konstruktor der Klasse Namespace mit den Übergabeparametern Namespaceabkürzung und der Namespace-URL zum Anlegen eines Namespace-Objekts
    • getNamespaceShort {} : liefert die Namespaceabkürzung des aktuellen Namespace-Objekts zurück
    • getNamespaceURL {} : liefert die Namespace-URL des aktuellen Namespace-Objekts zurück


    Funktionen der Klasse Namespaceorg

    • addNamespace {namespaceString} : ein neues Namespace-Objekt wird aus der XML-Namespacedefinition namespaceString erzeugt
    • replaceNamespace {testString} : testString wird auf eine Namespace-URL geprüft - wird eine gefunden, wird diese durch die Namespaceabkürzung ersetzt

    •  
    Funktionen der Klasse TripleFileRead
    • init args : Konstruktor, der eine Datei mit dem übergebenen Dateinamen öffnet, parst und die entsprechenden Statement- und Namespace-Objekte anlegt
     
    Funktionen der Klasse XMLFileWrite
    • init args : Konstruktor, der eine Datei mit dem übgebenen Dateinamen zum Schreiben öffnet
    • writeLine {writeString} : schreibt eine Zeile mit dem Inhalt writeString in die geöffnete Datei
    • close {} : schließt die mit dem Konstruktor geöffnete Datei
     
    Die Funktionen der Klasse CreateXMLBSS und CreateXMLBAS werden hier nicht im einzelnen beschrieben, da die Funktionen nur innerhalb der jeweiligen Klasse verwendet werden. Die beiden Klassen enthalten Funktionen mit Namen, die den Namen in der EBNF Beschreibung der jeweiligen Syntax der »Resource Description Framework (RDF) Model and Syntax Specification« vom World Wide Web Consortium entsprechen. Mit Hilfe dieses Dokuments können die Funktionen somit zugeordnet werden.
     

    3. Implementierung

    Die Implementierung erfolgt in XOTcl in der Version vom 1. Dezember 1998.

    Die Klassen zur XML-Erstellung CreateXMLBSS und CreateXMLBAS werden aufbauend auf den EBNF-Beschreibungen aus der »RDF Model and Syntax Specification« erstellt. In den verwendeten Funktionen werden die Aufrufe der anderen Funktionen entsprechend der EBNF-Beschreibung realisiert. Diese Vorgehensweise hat den Vorteil, daß man eventuelle Änderungen an der Spezifikation ohne große Probleme in die CreateXML - Klassen implementieren kann.

    In den Objekten der Klassen »Statement« und »Namespace« werden Informationen gespeichert. Um mehrere Objekte dieser Klassen verarbeiten zu können, sind die Klassen »Statementorg« und »Namespaceorg« implementiert. Statement und Namespace Klassen sollten über die Funktionen der entsprechenden Verwaltungsklassen angelegt werden und der Zugriff sollte über die Verwaltungsklassen erfolgen.

    Um die Umsetzung der in den Statement-Objekten gespeicherten Triple in XML zu erleichtern, hat jedes Statement-Objekt die Variablen SortInfo und XMLUsed. Die Variable SortInfo dient dazu, in den Statements die Reihenfolge, in der die Triple in XML umzuwandeln sind, zu speichern. Die Variable XMLUsed wird benötigt, um in XML umgewandelte Triple zu kennzeichnen.

    Die Klasse TripleFileRead liest wie in der Aufgabenstellung gefordert RDF-Triple aus einer Datei ein. Da diese Klasse als einzige Aufgabe das Parsen der Eingabe und das Anlegen der Statements hat, kann sie durch andere Klassen ersetzt werden, z. B. durch eine Klasse, die RDF-Triple aus dem Internet verarbeitet.

    XMLFileWrite ist die Klasse, die eine Ausgabedatei öffnet und Daten hineinschreibt. Die Klasse ist zeilenorientiert angelegt. Wenn eine Zeile XML-Code generiert ist, wird die Funktion »writeLine {writeString}« aufgerufen. Bei dieser Klasse ist es möglich, durch geringe Modifikationen die Daten auch als HTML-Seiten an einen Browser zu liefern.
     

    4. Bedienung

    Zur Ausführung des Programms sind die folgenden Eingaben erforderlich bzw. möglich.

    • Das Programm benötigt eine Eingabedatei, in der die Triple eines RDF-Models zeilenweise abgelegt sind. Es ist erforderlich, die Triple, wie in dem Dokument »RDF Model and Syntax Specification«, anzugeben. Hiernach besteht ein Triple aus einem Prädikat, einem Subjekt und einem Objekt. In der Spezifikation wird festgelegt, daß ein Triple in geschweifte Klammern eingeschlossen werden muß. Die drei Bestandteile des Triples sind in den geschweiften Klammern durch Kommata getrennt anzugeben. Wenn ein Subjekt oder Objekt ein Uniform Resource Identifiers (URI) ist, ist diese Angabe in eckige Klammern zu setzen. Alle anderen Angaben sind mit Anführungszeichen zu umschließen.

    • Eine Triple-Zeile der Eingabedatei kann beispielsweise folgende Gestalt haben:

      {"http://purl.org/dc/elements/1.0/Creator",[http://swt.wi-inf.uni-essen.de/~wbuening],"Wolfgang Buening"}

    • Da beim Ablegen der Triple eines RDF-Models die Kurzbezeichnungen der Namespaces verloren gehen, diese aber für die Erzeugung eines übersichtlichen XML-Codes benötigt werden, kann man dem Programm die Namespaces mitteilen. Hierfür werden den Zeilen mit den Triplen die XML-Namespace-Definitionen vorangestellt. In der Eingabedatei sehen die Definitionen beispielsweise folgendermaßen aus:

    • xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:s="http://description.org/schema/"


    Wenn die Eingaben erfolgt sind, wird das Programm über die Kommandozeile mit dem Befehl »rdftoxml« gestartet. Diesem Befehl müssen folgende Parameter übergeben werden:

    1. Parameter: Datei, in der die Triple abgelegt sind
    2. Parameter: Datei, in der der XML-Code gespeichert wird
    3. Parameter (optional): BSS (standard) für die Ausgabe in der Basic Serialization Syntax oder BAS für die Ausgabe in der Basic Abbreviated Syntax
     
    Wird der Befehl »rdftoxml«ohne Parameter aufgerufen, erscheint eine Kurzbeschreibung zur Bedienung des Programms.
    5. Beispiele
    5. 1 Beispiele für die Erstellung von XML-Dateien in der Basic Serialization Syntax

    Beispiel A:
    Triple-Datei:

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:DC="http://purl.org/dc/elements/1.0/"
    {"http://purl.org/dc/elements/1.0/Creator",[http://swt.wi-inf.uni-essen.de/~wbuening],"Wolfgang Buening"}
    XML-Datei nach der Basic Serialization Syntax:
    <?xml version="1.0"?>
    <RDF xmlns:DC="http://purl.org/dc/elements/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description about="http://swt.wi-inf.uni-essen.de/~wbuening">
    <DC:Creator>Wolfgang Buening</DC:Creator>
    </rdf:Description>
    </RDF>
    Beispiel B:

    Triple-Datei:

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:s="http://description.org/schema/"
    {"http://description.org/schema/Publisher",[http://www.wi-inf.uni-essen.de/~buening],"Wolfgang Buening"}
    {"http://description.org/schema/Title",[http://www.wi-inf.uni-essen.de/~buening],"Wollis Homepage"}
    {"http://description.org/schema/Date",[http://www.wi-inf.uni-essen.de/~buening],"1999-06-22T00:00"}
    XML-Datei nach der Basic Serialization Syntax:
    <?xml version="1.0"?>
     <RDF xmlns:s="http://description.org/schema/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
     <rdf:Description about="http://www.wi-inf.uni-essen.de/~buening">
     <s:Publisher>Wolfgang Buening</s:Publisher>
     <s:Title>Wollis Homepage</s:Title>
     <s:Date>1999-06-22T00:00</s:Date>
     </rdf:Description>
     </RDF>
    Beispiel C:

    Triple-Datei:

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:s="http://description.org/schema/"
    {"http://www.w3.org/1999/02/22-rdf-syntax-ns#type",[http://www.wi-inf.uni-essen.de/~buening],[http://description.org/schema/Person]}
    {"Name",[http://www.wi-inf.uni-essen.de/~buening],"Wolfgang Buening"}
    {"Email",[http://www.wi-inf.uni-essen.de/~buening],"wolfgang.buening@uni-essen.de"}
    {"Age",[http://www.wi-inf.uni-essen.de/~buening],"27"}
    {"http://description.org/schema/Creator",[http://swt.wi-inf.uni-essen.de/~wbuening],[http://www.wi-inf.uni-essen.de/~buening]}
    XML-Datei nach der Basic Serialization Syntax:
    <?xml version="1.0"?>
    <RDF xmlns:s="http://description.org/schema/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description about="http://swt.wi-inf.uni-essen.de/~wbuening">
    <s:Creator>
    <rdf:Description about="http://www.wi-inf.uni-essen.de/~buening">
    <rdf:type resource="http://description.org/schema/Person"/>
    <Name>Wolfgang Buening</Name>
    <Email>wolfgang.buening@uni-essen.de</Email>
    <Age>27</Age>
    </rdf:Description>
    </s:Creator>
    </rdf:Description>
    </RDF>
     
    5.2 Beispiele für die Erstellung von XML-Dateien in der Basic Abbreviated Syntax

    Beispiel D:

    Triple-Datei:

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:s="http://description.org/schema/"
    {"http://description.org/schema/Publisher",[http://www.wi-inf.uni-essen.de/~buening],"Wolfgang Buening"}
    {"http://description.org/schema/Title",[http://www.wi-inf.uni-essen.de/~buening],"Wollis Homepage"}
    {"http://description.org/schema/Date",[http://www.wi-inf.uni-essen.de/~buening],"1999-06-22T00:00"}
    XML-Datei nach der Basic Abbreviated Syntax:
    <?xml version="1.0"?>
    <RDF xmlns:s="http://description.org/schema/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description about="http://www.wi-inf.uni-essen.de/~buening" s:Publisher="Wolfgang Buening" s:Title="Wollis Homepage" s:Date="1999-06-22T00:00" />
    </RDF>
    Beispiel E:

    Triple-Datei:

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:s="http://description.org/schema/"
    {"Name",[http://www.wi-inf.uni-essen.de/~buening],"Wolfgang Buening"}
    {"Email",[http://www.wi-inf.uni-essen.de/~buening],"wolfgang.buening@uni-essen.de"}
    {"Age",[http://www.wi-inf.uni-essen.de/~buening],"27"}
    {"http://description.org/schema/Creator",[http://swt.wi-inf.uni-essen.de/~wbuening],[http://www.wi-inf.uni-essen.de/~buening]}
    XML-Datei nach der Basic Abbreviated Syntax:
    <?xml version="1.0"?>
    <RDF xmlns:s="http://description.org/schema/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description about="http://swt.wi-inf.uni-essen.de/~wbuening">
    <s:Creator resource="http://www.wi-inf.uni-essen.de/~buening" Name="Wolfgang Buening" Email="wolfgang.buening@uni-essen.de" Age="27" />
    </rdf:Description>
    </RDF>
    Beispiel F:

    Triple-Datei:

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:s="http://description.org/schema/"
    {"http://www.w3.org/1999/02/22-rdf-syntax-ns#type",[http://www.wi-inf.uni-essen.de/~buening],[http://description.org/schema/Person]}
    {"Name",[http://www.wi-inf.uni-essen.de/~buening],"Wolfgang Buening"}
    {"Email",[http://www.wi-inf.uni-essen.de/~buening],"wolfgang.buening@uni-essen.de"}
    {"Age",[http://www.wi-inf.uni-essen.de/~buening],"27"}
    {"http://description.org/schema/Creator",[http://swt.wi-inf.uni-essen.de/~wbuening],[http://www.wi-inf.uni-essen.de/~buening]}
    XML-Datei nach der Basic Abbreviated Syntax:
    <?xml version="1.0"?>
    <RDF xmlns:s="http://description.org/schema/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description about="http://swt.wi-inf.uni-essen.de/~wbuening">
    <s:Creator>
    <s:Person about="http://www.wi-inf.uni-essen.de/~buening">
    <Name>Wolfgang Buening</Name>
    <Email>wolfgang.buening@uni-essen.de</Email>
    <Age>27</Age>
    </s:Person>
    </s:Creator>
    </rdf:Description>
    </RDF>
     
    5.3 Sonstige Beispiele

    Beispiel G:

    Triple-Datei:

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:dc="http://purl.org/metadata/dublin_core#"
    {"http://purl.org/metadata/dublin_core#Title",[http://www.dlib.org/],"D-Lib Program - Research in Digital Libraries"}
    {"http://purl.org/metadata/dublin_core#Description",[http://www.dlib.org/],"The D-Lib program supports the community of people with research interests in digital libraries and electronic publishing."}
    {"http://purl.org/metadata/dublin_core#Publisher",[http://www.dlib.org/],"Corporation For National Research Initiatives"}
    {"http://purl.org/metadata/dublin_core#Date",[http://www.dlib.org/],"1995-01-07"}
    {"http://www.w3.org/1999/02/22-rdf-syntax-ns#type","genid2",[http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag]}
    {"http://www.w3.org/1999/02/22-rdf-syntax-ns#_1","genid2","Research; statistical methods"}
    {"http://www.w3.org/1999/02/22-rdf-syntax-ns#_2","genid2","Education, research, related topics"}
    {"http://www.w3.org/1999/02/22-rdf-syntax-ns#_3","genid2","Library use Studies"}
    {"http://purl.org/metadata/dublin_core#Subject",[http://www.dlib.org/],"genid2"}
    {"http://purl.org/metadata/dublin_core#Type",[http://www.dlib.org/],"World Wide Web Home Page"}
    {"http://purl.org/metadata/dublin_core#Format",[http://www.dlib.org/],"text/html"}
    {"http://purl.org/metadata/dublin_core#Language",[http://www.dlib.org/],"en"}
    XML-Datei nach der Basic Serialization Syntax:
    <?xml version="1.0"?>
    <RDF xmlns:dc="http://purl.org/metadata/dublin_core#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description about="http://www.dlib.org/">
    <dc:Title>D-Lib Program - Research in Digital Libraries</dc:Title>
    <dc:Type>World Wide Web Home Page</dc:Type>
    <dc:Format>text/html</dc:Format>
    <dc:Language>en</dc:Language>
    <dc:Description>The D-Lib program supports the community of people with research interests in digital libraries and electronic publishing.</dc:Description>
    <dc:Publisher>Corporation For National Research Initiatives</dc:Publisher>
    <dc:Date>1995-01-07</dc:Date>
    <dc:Subject>
    <rdf:Description ID="genid2">
    <rdf:type resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/>
    <rdf:_1>Research; statistical methods</rdf:_1>
    <rdf:_2>Education, research, related topics</rdf:_2>
    <rdf:_3>Library use Studies</rdf:_3>
    </rdf:Description>
    </dc:Subject>
    </rdf:Description>
    </RDF>
    XML-Datei nach der Basic Abbreviated Syntax:
    <?xml version="1.0"?>
    <RDF xmlns:dc="http://purl.org/metadata/dublin_core#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description about="http://www.dlib.org/" dc:Title="D-Lib Program - Research in Digital Libraries" dc:Type="World Wide Web Home Page" dc:Format="text/html" dc:Language="en" dc:Description="The D-Lib program supports the community of people with research interests in digital libraries and electronic publishing." dc:Publisher="Corporation For National Research Initiatives" dc:Date="1995-01-07" dc:Subject="genid2" />
    <rdf:Description ID="genid2">
    <rdf:type>http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag</rdf:type>
    <rdf:_1>Research; statistical methods</rdf:_1>
    <rdf:_2>Education, research, related topics</rdf:_2>
    <rdf:_3>Library use Studies</rdf:_3>
    </rdf:Description>
    </RDF>
     
    Druckversion
    (C)1996-2024 Wolfgang Büning  >> Impressum