projekte:modul-katalog-generator:start

Modul-Katalog-Generator

Jedes Semester muss im Studierenden-Sekretariat eine Gesamtkatalog aller Modulbeschreibungen archiviert werden. Zudem werden regelmäßig individuelle Kataloge zur Studiengangsverwaltung und -Akkreditierung benötigt. Ziel dieses Projektes ist die Erstellung einer interaktiven Webseite die es ermöglicht, Katalogstrukturen zu konfigurieren und entsprechende Kataloge in einem druckbaren Format zu exportieren. Die Konfiguration umfasst das Filtern, hierarchische Gruppieren und Sortieren der Modulbeschreibungen nach benutzerdefinierten, relativ komplexen Kriterien.

Mehr über den Arbeitsstand kann eventuell unter https://studiy.tu-cottbus.de/pro/modena/trac/ erfahren werden.

Weitere Informationen

Als Basis existiert bereits ein XML-Export der Modulbeschreibungen aus der Moveron-Datenbank, eine Sammlung praxisrelevanter Katalogdefinitionen und ein XSLT-basierter Generator+Konverter nach ODF (OpenOffice). Der XML-Export wird als Datenquelle dienen. Die Katalogdefinitionen zeigen, welche Konfigurationen benötigt werden. Teile des Konverters könnten wiederverwendet werden.

Erfahrungen mit dem bestehenden Generator zeigen, dass die Datenhaltung erweiterbar gestaltet werden muss, da häufig zusätzliche, spezielle Kriterien (z.B. Modulkomplexe, Wahl/Pflicht-Status, Informationen aus den Modul-Bemerkungen) für die Kataloge benötigt werden. Zudem muss die Konfiguration von Katalogen intuitiver werden, so dass auch Benutzer ohne Spezialwissen ihre Kataloge bearbeiten können. Daher soll das neue System die Modulbeschreibungen als RDF-Tripel (Subjekt-Prädikat-Objekt) speichern. Diese lassen sich leicht um neue Prädikate erweitern. Zur Datenabfrage existieren verschiedene RDF-Query-Sprachen und Inferenz-Systeme. Allerdings wird es notwendig sein, intuitivere Katalogdefinitionen in solche Abfragen zu übersetzen.

Teilthemen

Nachfolgend die zu bearbeitenden Themen. In Fett hervorgehoben sind die wohl anspruchsvollsten Teile.

  1. kurze Recherche zu RDF-Frameworks: Query-Sprachen, Inferenz-Systeme? Siehe Übersicht des W3C; RAP - RDF API for PHP könnte ausreichend sein. ARQ unterstützt so ziemlich alles was man sich wünschen könnte - nur das wären dann java-Bibliotheken. Wie arbeitet man mit denen auf Webservern, ohne dass die installation zu aufwändig wird?
  2. Interviews mit Anwendern: Wofür werden die Kataloge benutzt? Welche Arbeitsschritte fallen bei der Erstellung bisher an? Welche Informationen werden zur Erstellung gesammelt? Wünsche? Erfahrungen?
  3. Abbildung der bestehenden Modulbeschreibungen auf RDF-Strukturen. Vorhanden ist ein RelaxNG-Schema der XML-Modulbeschreibungen. Diese sind nahezu in Prädikat-Objekt Form, aber enthalten noch etwas komplexere Strukturen für Studiengangs-Zuordnungen und Lernformen (Beispiel weiter unten). Ausgehend davon muss dokumentiert werden welche Prädikate existieren und verbal, wofür sie benutzt werden. Ontologien sind hier mit Sicherheit zu viel.
  4. Analyse der existierenden Kataloge: welche Queries werden für Gruppierung, Sortieren und Filtern verwendet? Wie kann dies einfacher ausgedrückt werden und dann in RDF-Queries übersetzt werden? Daran muss eventuell noch einmal das RDF-Schema vom vorhergehenden Schritt angepasst werden.
  5. Abfrage-Modul: Die eigene Abfrage-Sprache (Filtern, Gruppieren, Sortieren) in RDF-Queries übersetzen, ausführen und Ergebnisse zu einer gruppierten Auflistung von Modulnummern zusammenführen.
  6. Import-Modul: Die XML-Daten von Moveron abfragen und damit die RDF-Datenbank aktualisieren. Dabei müssen die Daten auch etwas bereinigt werden. Z.B. haben beantragte Änderungen eine eigene Modulbeschreibung, aber ohne
  7. Ausgabe-Modul: Eingabe ist eine gruppierte Auflistung von Modulnummern. Daraus wird eine XML-Datei erzeugt. Gruppierungen erhalten eine Art Überschrift. Für jede aufgeführte Modulnummer wird die Modulbeschreibung als RDF-Tripel-Folge eingesetzt. Dannach wird eine XSLT-Transformation (teilweise schon existent) auf dieses XML-Dokument angewendet. Die Transformation erzeugt dann zum Beispiel HTML oder ODF…
  8. Weboberfläche: Die Oberfläche soll erlauben, Katalogdefinitionen zu bearbeiten (anlegen, verändern) und die generierten Kataloge abzufragen (z.B. also ODF-Dateien)

Meta-Aufgaben

Es soll ein Projekttagebuch geführt werden. Neben Recherche-, und Nachdenk-Ergebnissen gehört ein grobes Zeitprotokoll dazu. Die bezahlten 300h müssen zuallererst für die Kernaufgaben Archivierung, Generieren, und Dokumentation verwendet werden. Zusätzliche Funktionen wie dynamische Übersicht und Suche in der Modulsammlung, Konsistenz-Überprüfungen, Editor für benutzerdefinierte Prädikate und automatische Ableitung von Prädikaten aus z.B. dem Bemerkungsfeld gehören da nicht unbedingt dazu. Bei diesen sollte schlüssig begründet werden, warum sie ev. praktisch doch notwendig sind, falls sie in die Arbeitszeit fallen. Im Rahmen der Bachelorarbeit ist natürlich alles erlaubt, was der Betreuer zulässt.

Materialien

scan10001.jpg mindmap-tafel-struktur.jpg

RDF und Query-Sprachen

RDF heißt Resource Description Framework und ist von der Struktur her eine Sammlung von Tripeln (Subjekt,Prädikat,Objekt). Subjekte benennen immer eine Ressource (mit einer URL oder URI) und Prädikat-Objekt Paare treffen Aussagen über diese Ressource. Die verfügbaren Prädikate sind durch ein Vokabular vorgegeben, welches natürlich erweitert werden kann. Das Objekt kann wiederum eine andere Ressource adressieren. Auf diese Art entsteht eine Graphstruktur die Informationen verknüpft.

Warum RDF statt klassisches SQL? Die Erfahrung mit der Katalogerstellung hat gezeigt, dass sehr häufig zusätzliche Prädikate benötigt werden, die z.Z. noch nicht vorhersehbar sind. RDF soll uns diese Erweiterbarkeit bieten, vor allem das Benutzer nach Bedarf zusätzliche Informationen zu Modulen speichern und diese direkt in der Katalogdefinition verwenden können. Die RDF-Query-Sprachen benutzen Musteranpassung auf Teilgraphen und erscheinen so besser verständlich als joins in SQL.

ODF: Open Document Format

Wird u.A. von OpenOffice unterstützt und erlaubt großen Einfluß auf die Gestaltung. Im bestehenden Prototypen wird OpenOffice im Post-Processing verwendet, um die Kataloge in PDF und Word zu konvertieren. Alternativen wären DocBook oder XSL-FO. Aber da hängt man auch von der Qualität der Konverter ab.

Modulbeschreibungen im aktuellen XML-Format

<?xml version="1.0" encoding="utf-8"?>
<!--Autogenerated: do not edit!-->
<btu:module xmlns:btu="http://home.landau-gym.de/~randolf/XML/btu" xmlns:moveron="http://home.landau-gym.de/~randolf/XML/moveron" xmlns:rweb="http://home.landau-gym.de/~randolf/XML/rweb" moveron:module-id="429" moveron:version="2009-04-02T13:41:58+02:00">
      <btu:module-number>11-1-01</btu:module-number>
      <btu:niveau-level>1</btu:niveau-level>
      <btu:short-title>Lineare Algebra und analytische Geometrie I</btu:short-title>
      <btu:long-title>Lineare Algebra und analytische Geometrie I / Linear algebra and analytic geometry I</btu:long-title>
      <btu:scientific-field moveron:field-id="77">Mathematik</btu:scientific-field>
      <btu:maintainer moveron:maintainer-id="9730">
        <btu:title>Prof. Dr.</btu:title>
        <btu:first-name>Bernd</btu:first-name>
        <btu:name>Martin</btu:name>
        <btu:faculty moveron:faculty-id="1">Mathematik, Naturwissenschaften und Informatik</btu:faculty>
        <btu:institute moveron:institute-id="1" moveron:institute-number="1">Institut für Mathematik</btu:institute>
      </btu:maintainer>
      <btu:language-of-teaching moveron:language-id="1">Deutsch</btu:language-of-teaching>
      <btu:regular-cycle moveron:turnus-id="3">jedes Wintersemester / each winter semester</btu:regular-cycle>
      <btu:duration moveron:duration-id="1">ein Semester / one semester</btu:duration>
      <btu:teaching-forms>
        <btu:form moveron:module-form-id="21084" moveron:form-id="22" amount="4" unit="SWS" short-name="VL" name="Vorlesung / lecture"/>
        <btu:form moveron:module-form-id="21085" moveron:form-id="29" amount="150" unit="Stunden" short-name="SS" name="Selbststudium / self organised studies"/>
        <btu:form moveron:module-form-id="21086" moveron:form-id="20" amount="2" unit="SWS" short-name="UE" name="Übung / exercise"/>
      </btu:teaching-forms>
      <btu:credit-points>8</btu:credit-points>
      <btu:courses-of-study>
        <btu:course moveron:course-id="1">Mathematik/Diplom</btu:course>
        <btu:course moveron:course-id="44">Wirtschaftsmathematik/B.Sc.</btu:course>
        <btu:course moveron:course-id="2">Wirtschaftsmathematik/Diplom</btu:course>
        <btu:course moveron:course-id="56">Physik/B.Sc.</btu:course>
        <btu:course moveron:course-id="43">Mathematik, B.Sc.</btu:course>
        <btu:course moveron:course-id="3">Physik/Diplom</btu:course>
      </btu:courses-of-study>
      <btu:learning-outcome>Die Studierenden sollen<btu:br/>- sichere Kenntnisse über grundlegende Begriffe der Aussagenlogik und der Mengentheorie erwerben<btu:br/>- die elementaren Verfahren der Matrizenrechnung sicher beherrschen<btu:br/>- lineare Gleichungssysteme lösen können, insbesondere mit dem Gauß-Algorithmus<btu:br/>- mathematische Grundfertigkeiten, wie exaktes Formulieren und formelles Aufbereiten einfacher mathematischer Sachverhalte, entwickeln<btu:br/>- Fertigkeiten in den grundlegenden Beweistechniken ausbilden<btu:br/>- grundlegende Fähigkeiten im exakten logischen Schließen entwickeln\\<btu:br/>- zur Analyse abstrakter Strukturen befähigt werden<btu:br/>- insbesondere durch eigenständiges Lösen von Übungsaufgaben zur Exaktheit in der Umsetzung des Faktenwissens aus den Lehrveranstaltungen befähigt werden<btu:br/>- dabei individuelle Lernstrategien zur selbstständigen Aneignung mathematischer Inhalte entwickeln (effektive Kombination von Vorlesung, Übung, Selbststudium)<btu:br/>- zur selbstständigen Nutzung mathematischer Fachliteratur als Ergänzung der Lehrveranstaltungen befähigt werden<btu:br/>- am Beispiel von Themen der linearen Algebra sicheres Basiswissen und Fertigkeiten für das weitere Mathematikstudium erwerben und an das selbstständige wissenschaftliche Arbeiten herangeführt werden</btu:learning-outcome>
      <btu:contents>Konstruktion ganzer und rationaler Zahlen; Vektorräume, affine Räume und Unterräume; lineare Unabhängig-<btu:br/>keit, Dimension und Basis; lineare Abbildungen, Matrizen und Koordinatentransformation; lineare Gleichungssysteme und Gauß’scher Algorithmus; Determinanten.</btu:contents>
      <btu:materials>Fischer, Gerd: Lineare Algebra, Vieweg<btu:br/>Jänich, Klaus: Lineare Algebra, Springer<btu:br/>Kowalski, H. J. / Michler, G. O.: Lineare Algebra, de Gruyter</btu:materials>
      <btu:assessment-mode>erfolgreiche Bearbeitung von Hausaufgaben (unbenotet);<btu:br/>schriftliche Prüfung (90 min.) oder mündliche Prüfung (30 min.) am Ende des Semesters</btu:assessment-mode>
      <btu:prerequisits>Schulmathematik</btu:prerequisits>
      <btu:remarks>Dieses Modul gehört zum Modulkomplex Mathematische Grundlagen.<btu:br/>Physik B. Sc.: Pflichtmodul Mathematik.</btu:remarks>
      <moveron:last-change moveron:timestamp="1231940229">2009-01-14T14:37:09+01:00</moveron:last-change>
      <moveron:state moveron:state-id="1">aktiv</moveron:state>
      <moveron:LernformMigration/>
    </btu:module>

Die fielen IDs aus der Moveron-Datenbank können meist ignoriert werden. Alle Ressourcen (Subjekte) sollten über verständliche Namen (URIs) adressiert werden. Mindestens Namensräume wären notwendig, um die Nummern nicht durcheinander zu bringen. Trotzdem haben diese internen Nummern nichts in der Benutzerschnittstelle zu suchen.

Existierende Katalogstrukturen in XML

Kataloge wie diese gilt es zu Untersuchen. Daraus soll abgeleitet werden, wie die eingebetteten Abfragen benutzerfreundlich beschrieben werden können. Ziel ist, das solche Dateien erst garnicht per Hand geschrieben werden müssen.

Beispiel: Gesamtkatalog

  <btu:module-catalog>
    <btu:module-reference-fields> <!-- Was wird in der Übersichtstabelle dargestellt? -->
      <btu:cell query="string(btu:scientific-field)" <!-- hier ist eine Query! -->
                title="Fachgebiet" 
                header-style="ModuleRef_20_Heading_20_Kp"
                content-style="ModuleRef_20_Info"
                xhtml:style="width:40%;text-align:right;"/>
      <btu:cell query="string(btu:credit-points)"
                title="KP" 
                header-style="ModuleRef_20_Heading_20_Kp"
                content-style="ModuleRef_20_Kreditp"
                xhtml:style="width:5%;text-align:right;white-space:nowrap;"/>
    </btu:module-reference-fields>
 
    <btu:catalog-content> <!-- hier wird gruppiert -->
      <rweb:query group-by="rfun:fakid(.)" <!-- Gruppieren nach dem Namen der Fakultät -->
                  title="rfun:fak-name(.)" db="modules">
        <rweb:query group-by="rfun:instid(.)" <!-- darunter nach Institut -->
                    title="rfun:inst-name(.)" db="modules">
          <rweb:query group-by="rfun:maintainer-name(.)" <!-- und nun nach dem Modulverantwortlichen -->
                      title="rfun:maintainer-name(.)" db="modules">
            <rweb:query sort-by="concat(btu:niveau-level,btu:short-title)" <!-- und sortiert --> 
                        db="modules">
              <rweb:query insert="true" db="modules"/>
            </rweb:query>
          </rweb:query>
        </rweb:query>
      </rweb:query>
    </btu:catalog-content>
  </btu:module-catalog>

In der Übersichtstabelle gibt es ein paar "frei" definierbare Spalten. In diese wird der Wert eines Modul-prädikats eingesetzt oder etwas komplexere Informationen. Da gibt es aber nur wenige mögliche Varianten, die alle fest verdrahtet zur Auswahl gestellt werden könnten.

Beispiel: Informatik B.Sc.

   <btu:catalog-content>
      <rweb:query filter="btu:courses-of-study/btu:course[string()='Informatik/B.Sc. - PO 2008']
                          and rfun:module-is-active-or-changed(.)='1'
                          and btu:module-number!='11-1-02'
                          and btu:module-number!='11-1-14'
                          and btu:module-number!='11-2-09'
                          and btu:module-number!='11-2-17'
                          and btu:module-number!='11-2-02'" db="modules">
        <rweb:section><rweb:h>Grundstudium</rweb:h>
 
          <rweb:query filter="btu:niveau-level &lt; 3" db="modules">
            <rweb:query group-by="btu:niveau-level" 
                        title="concat('Niveaustufe ',btu:niveau-level)" 
                        db="modules">
              <rweb:query
                 group-by="string(btu:scientific-field)" 
                 title="btu:scientific-field" db="modules">
                <rweb:query sort-by="concat(btu:niveau-level,btu:short-title)" db="modules">
                  <rweb:query insert="true" db="modules"/>
                </rweb:query>
              </rweb:query>
            </rweb:query>
          </rweb:query>
        </rweb:section>
      </rweb:query>
            <rweb:section><rweb:h>Fachstudium</rweb:h>
        <rweb:query filter="btu:courses-of-study/btu:course[string()='Informatik/B.Sc. - PO 2008']
                            and rfun:module-is-active-or-changed(.)='1'
                            and btu:module-number!='11-3-07'
                            and btu:module-number!='11-3-12'" db="modules">
          <rweb:query filter="btu:niveau-level = 3" db="modules">
            <rweb:query group-by="btu:niveau-level" 
                        title="concat('Niveaustufe ',btu:niveau-level)" db="modules">
              <rweb:query group-by="concat(btu:scientific-field,' ',
                                           btu:scientific-sub-field)"
                          title="rfun:string-cond-merge(btu:scientific-field,': ',
                                                        btu:scientific-sub-field)"
                          db="modules">
                <rweb:query sort-by="concat(btu:niveau-level,btu:short-title)" db="modules">
                  <rweb:query insert="true" db="modules"/>
                </rweb:query>
              </rweb:query>
            </rweb:query>
          </rweb:query>
        </rweb:query>
        </rweb:section>
      </rweb:section>
    </btu:catalog-content>
projekte/modul-katalog-generator/start.txt · Zuletzt geändert: 12.05.2009 16:39 von 141.43.203.168