Het project VISNUE:
het kalendersysteem

Saskia Van de Laer en Adhemar Bultheel

10 april 2002





http://www.cs.kuleuven.be/~nalag/research/ALpubs/AL16.abs.shtml

Samenvatting:

Dit is de gebruikers- en programmeursgids voor het kalendersysteem ontwikkeld voor het OOI project VISNUE-TWEE (VISualisatie van NUmerieke Experimenten - Toets en Werkomgeving met Evaluatie).

Dit systeem voorziet een kalender waarin de taken en een studietijdsplanning voor het vak kunnen gegeven worden.

Het is een nuttig hulpmiddel voor de student om zijn studie te plannen maar ook voor de docent omdat het een middel is om tot een realistische schatting te komen voor de studiedruk van zijn vak.

Inleiding

Het kalendersysteem is ontwikkeld in het kader van het VISNUE-TWEE project. De bedoeling is dat de studenten per dag of per week opdrachten krijgen zodat dit de hele opzet rond het vak numerieke wiskunde zou ondersteunen, namelijk dat het vak zou geleerd worden tijdens het jaar door permanente oefening, eerder dan als blokvak in de blokperiode te worden verwerkt.

De docent kan gegevens (opdrachten en te besteden tijdsduur) ingeven in het systeem. Dit genereert een via het web raadpleegbare kalender. De student krijgt per week en per dag een overzicht van wat er als leerprestatie verwacht wordt. Het systeem is tegelijk voor de docent een middel om tot een realistische schatting van studiebelasting te komen voor zijn vak. Voor de student is het niet alleen een kalender van taken, maar geeft het gelijktijdig ook een beeld van wat de docent verwacht dat hij doorneemt in de veelheid van aangeboden middelen (cursustekst, lessen, demonstraties, oefeningen, zelftoetsen,...)

Technische realisatie

Voor de technische realisatie van het kalendersysteem hebben we gekozen voor een XML/XSL beschrijving die toelaat HTML bestanden te genereren.

Wat terminologie

Een overzicht van de verschillende bestanden:

De HTML bestanden worden aangemaakt met standaard java programma's xalan.jar en xerces.jar.

Het aanmaken van de nodige uitvoerbare bestanden en bestanden met gegevens

Het hele systeem is in een PL bestand gestopt: MakeAll.pl. Het vraagt als invoerparameters: Bijvoorbeeld MakeAll.pl 2001 9 7 zal de bestanden klaarmaken om de maanden september tot december 2001 en januari tot mei 2002 te genereren.

Het uitvoeren van MakeAll.pl resulteert in een aantal bestanden:

Zo een typisch xmlbestand voor bijvoorbeeld de eerste week van het jaar, week01/week01.xml, waarin niets speciaal moet gedaan worden ziet er als volgt uit:

<?xml version="1.0" encoding="UTF-8"?>
<week number="01" startmonth="01" endmonth="01">
<day number="31" month="12">
</day>
<day number="01" month="01">
</day>
<day number="02" month="01">
</day>
<day number="03" month="01">
</day>
<day number="04" month="01">
</day>
<day number="05" month="01">
</day>
<day number="06" month="01">
</day>
</week>
Het XML-document met de gegevens moet voldoen aan een welbepaalde structuur, waarin een jaar bestaat uit weken, weken uit dagen en per dag kunnen er geen, 1 of meer items op de planning staan zoals beschreven in het DTD bestand kal.dtd.

Een typische Makefile ziet eruit als volgt

XMLFILES=week01.xml
XMLKAL=../kal.xml
DTD=../kal.dtd
XSLDAG=../dag.xsl
XSLWEEK=../week.xsl
XSLJAAR=../jaar.xsl
MAKEF=Makefile
all : week.htm ../kal.htm \
      ov1231.htm ov0101.htm ov0102.htm ov0103.htm ov0104.htm ov0105.htm ov0106.htm
week.htm : $(XMLKAL) $(XSLWEEK) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../week.xsl -PARAM weeknr 01 -out week.htm
../kal.htm : $(XMLKAL) $(XSLJAAR) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../jaar.xsl -out ../kal.htm
ov1231.htm : $(XMLKAL) $(XSLDAG) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../dag.xsl -PARAM maandnr 12 -PARAM dagnr 31 -out ov1231.htm
ov0101.htm : $(XMLKAL) $(XSLDAG) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../dag.xsl -PARAM maandnr 01 -PARAM dagnr 01 -out ov0101.htm
ov0102.htm : $(XMLKAL) $(XSLDAG) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../dag.xsl -PARAM maandnr 01 -PARAM dagnr 02 -out ov0102.htm
ov0103.htm : $(XMLKAL) $(XSLDAG) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../dag.xsl -PARAM maandnr 01 -PARAM dagnr 03 -out ov0103.htm
ov0104.htm : $(XMLKAL) $(XSLDAG) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../dag.xsl -PARAM maandnr 01 -PARAM dagnr 04 -out ov0104.htm
ov0105.htm : $(XMLKAL) $(XSLDAG) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../dag.xsl -PARAM maandnr 01 -PARAM dagnr 05 -out ov0105.htm
ov0106.htm : $(XMLKAL) $(XSLDAG) $(XMLFILES) $(MAKEF)
java -classpath ../xerces.jar:../xalan.jar org.apache.xalan.xslt.Process \
      -in ../kal.xml -xsl ../dag.xsl -PARAM maandnr 01 -PARAM dagnr 06 -out ov0106.htm
Het betreft een klassieke beschrijving van afhankelijkheden en instructies voor het aanmaken van de HTML bestanden voor deze week, de dagen in deze week en de ganse kalender.

Alle eventuele oude bestanden worden verwijderd tijdens de uitvoering van MakeAll.pl, behalve het takenbestand (zie de betreffende paragraaf 2.4).


Het aanmaken van de html-bestanden

Alles staat nu klaar om de kalender te genereren. Dat gebeurt door de volgende stappen opeenvolgend uit te voeren.


De beschrijving invullen, aanpassen en verwijderen van taken.

Het tijdstip waarop een taak moet uitgevoerd worden kan 3 formaten hebben. Het formaat voor een taak-moment is als volgt: @ITEM beginuur einduur duur of @ITEM duur einduur. Hierin is Daarna volg één regel met de eigenlijke omschrijving van de taak. De hele taak moet op 1 regel beschreven worden zonder dat deze speciale tekens (andere dan alfanumerische tekens) (zie Appendix B) of regeleinden bevat. Uitzonderingen hierbij zijn: $<$, $>$ en ``. HTML elementen kunnen niet ingevoerd worden tenzij een HTML-link.

Taken op dezelfde datum (of zelfde weekdag en weekreeks, of zelfde periode) kunnen gegroepeerd worden onder 1 hoofding

Voorbeeld van een takenbestandje:

      01/01
      *ITEM 11.00 - 1
      testitem1 <A HREF="http://www.kuleuven.be">bepaalde dag</A>
      ITEM 10.00 12.00 2
      testitem2 <A HREF="http://www.kuleuven.be">bepaalde dag</A>Test
      01/01-04/01
      *ITEM 4 12.00
      testitem3 periode
      WO 1-3,5
      !ITEM 10.00 11.00 1
      testitem4 weekdag in weken
Er kunnen blanco lijnen voorkomen in het gegevensbestand, die worden gewoon genegeerd.


Genereren van de eigenlijke html code

Men kan dit op verschillende manieren doen.

Opnieuw aanmaken van de kalender voor een andere periode

In dit geval zal men moeten volgende stappen uitvoeren:
  1. Stop indien nodig het scriptje start.csh.
  2. Uitvoeren van MakeAll.pl en alle volgende stappen als hierboven beschreven. Alle bestanden worden opnieuw aangemaakt en overschrijven de eventueel nog bestaande bestanden.

Appendix A: Het kal.dtd bestand

<!-- Het rootelement dat tags van alle types die apart -->
<!-- kunnen voorkomen, kan bevatten. -->
<!-- Academiejaar. -->
<!ELEMENT year (week)*>
<!-- Eerste jaartal van het academiejaar. -->
<!ATTLIST year number      CDATA #REQUIRED>
<!-- Tweede jaartal van het academiejaar. -->
<!ATTLIST year endnb       CDATA #REQUIRED>

<!-- Week in het jaar. -->
<!ELEMENT week (day | item)*>
<!-- Weeknummer. -->
<!ATTLIST week number      CDATA #REQUIRED>
<!-- Maand waarin de week begint (meestal behoort de volledige week tot 1 maand). -->
<!ATTLIST week startmonth  CDATA #REQUIRED>
<!-- Maand waarin de week eindigt (meestal dezelfde als de beginmaand). -->
<!ATTLIST week endmonth    CDATA #REQUIRED>

<!-- Kalenderdag. -->
<!ELEMENT day (item)*>
<!-- Kalenderdag: nummer. -->
<!ATTLIST day  number      CDATA #REQUIRED>
<!-- Maand waartoe deze dag behoort. -->
<!ATTLIST day  month       CDATA #REQUIRED>

<!-- Taak. -->
<!ELEMENT item EMPTY>
<!-- Beschrijving van de taak. -->
<!ATTLIST item description CDATA #REQUIRED>
<!-- Beginuur; verzuimwaarde 99.999 -->
<!ATTLIST item starthour   CDATA "99.999">
<!-- Einduur; verzuimwaarde 99.999 -->
<!ATTLIST item endhour     CDATA "99.999">
<!-- Duur / geschatte belasting in uren; verzuimwaarde is 9999 -->
<!ATTLIST item duration    CDATA "9999">
<!-- Periode waarin de taak uitgevoerd dient te worden (mmdd-mmdd). -->
<!-- Optioneel: enkel voor taken die niet gebonden zijn aan 1 specifieke dag. -->
<!-- Deze taken horen te staan bij een week i.p.v. bij een dag. -->
<!ATTLIST item period      CDATA #IMPLIED>


Appendix B: speciale tekens.

Met speciale tekens worden hier bedoeld: tekens die op het toetsenbord staan maar die als HTML-entiteit moeten ingevoerd worden.
Voor een lijst met alle HTML-entiteiten, zie http://www.w3.org/TR/html401/sgml/entities.html.
Volgende tekens worden automatisch correct omgezet: Volgende tekens op het toetsenbord moeten ingegeven worden als HTML-entiteiten:

© Adhemar Bultheel
2003-02-13