Projektuppgift PIM 2001

Nytt: Några exempel

I denna projektuppgift ska du göra en xmlbaserad internettjänst för flerkanalspublicering av någon typ av data. Exempel på vad internettjänsten kan avhandla är ett kalendarium, ett skivregister och ett redaktionellt system, men ni är fria att komma på egna tjänster. Tjänsten ska kunna utnyttjas genom en webbrowser och genom en waptelefon. Användare ska kunna mata in data för publicering genom ett web- eller javagränssnitt.

Exakt vilken intenettjänst som ska implementeras är valfritt (i samråd med mig givetvis), så länge som uppgiften ligger inom ramarna. Några förslag ges nedan. Egna utvidgningar är möjliga och rekommenderade. Exakt hur många poäng som ska ges för egna utdvidgningar beror på uppgiftens svårighet.

Projektet ska utföras under period 2 2000.


Basuppgift (17 poäng + 4 poäng "i-tid-bonus")

Input via html-formulär via cgi-script eller servlets

I grunduppgiften ingår att användare via webben ska kunna mata in data till systemet via ett webbformulär. Datat ska skickas till ett cgi-script eller motsvarande som bearbetar datat.

Ändring av inlagt data

Det ska även vara möjligt att enkelt modifiera inlagt data. Det enklaste sättet att göra detta är förmodligen att skriva ett cgi-script/motsvarande som läser in data från systemet och genererar inputformuläret enligt ovan, men med data från systemet förifyllt. Därefter skickas data igen, systemet ser att posten ifråga redan finns och väljer då att göra en update av det tidigare inmatade datat.

Lagring i databas

Datat ska lagras i en MySQL-databas. Detta kräver att ni först gör en modell över den databasstruktur ni ska använda, skapar lämpliga tabeller och slutligen implementerar databaskopplingar för att lagra och hämta ut data. Exempel på hur detta kan göras kan ni hitta i Pythonlabben. I java används JDBC och i Perl används DBI/DBD.

Export till XML

Datat i databasen ska på något sätt exporteras till XML för att möjliggöra vidare behandling med stylesheets. Ni måste göra en DTD som beskriver den datastruktur ni ska använda. Om XML sedan genereras "on the fly" när någon frågar efter materialet, eller om det görs så fort databasen har ändrats beror på hur applikationen ser ut, dvs det får ni i hög grad avgöra själva.

Stylesheets för generering av html

XSL stylesheets ska göras som översätter informationen i XML-dokumenten till html och wml (och eventuellt andra format)


Tillvägagångssätt

Uppgiften utföres individuellt eller i grupper om två personer. 
Om uppgiften genomförs individuellt erhålles ytterligare 5 bonuspoäng (inte inräknade i 17+4 ovan)

1. Definiera uppgiften och gör en tidsplan

Skriv på ett/ett par A4-papper en beskrivning av systemet du tänker göra. Det ska klart framgå vad syftet med systemet är och vad som ska kunna utföras med systemet (någon form av funktionsbeskrivning).Gör grova skisser på hur gränssnitten kan tänkas se ut. Skriv med eventuella utvidgningar utöver basuppgiften du planerar att göra för att få en bedöming på hur många extrapoäng de kan tänkas ge. Gör slutligen en tidsplan vars mål bör vara att redovisa den 5:e december. Detta moment bör godkännas av mig innan ni går vidare. Observera att funktionaliteten som beskrivs här inte är helig, det går att modifiera planen efter hand. Om detta moment är inlämnat och är tillräckligt bra senast torsdagen den 8/11 erhålles en (1) bonuspoäng.

2. DTD och databasstruktur

Gör en databasstruktur (dvs de tabeller som ska ingå, vilka kolumner och nycklar de ska ha samt relationerna mellan tabellerna). Gör dessutom en DTD för den XML-struktur som ska genereras utifrån innehåll från databasen. En utvidgning är att dessutom göra ett XML Schema som beskriver motsvarande struktur. Detta moment ska godkännas innan ni går vidare. Om denna är inlämnad och är tillräckligt bra senast torsdagen den 15/11 erhålles en (1) bonuspoäng. XML Schemat kan dock göras i efterhand.

3. Implementera

Implementera systemet.

4. Rapport och redovisning

Gör en skriftlig rapport där ni beskriver användningsområdet för ert system. Rapporten ska även innehålla skärmdumpar samt köranvisningar. Rapporten bör vara ca 5-10 sidor som en tumregel. Systemet ska sedan redovisas inför klassen (kort demo). Om detta moment är redovisat  tisdagen den 11/12 erhålles två (2) bonuspoäng (prel datum)..



 

Generella utvidgningar

Behörighetskontroll för att skapa/ändra. Individ/gruppnivå (5 p)

Skapa ett system för behörighetskontroll med användare och inloggning. Endast registrerade användare med rätt lösenord ska kunna lägga in data i systemet, men vem som helst(?) ska kunna titta på informationen i systemet via html/wml-gränssnitten. Dessutom ska endast behöriga personer kunna ändra på redan inlagt material. Personen som lagt in material ska kunna ändra samma material. Dessutom ska en superanvändare finnas som har rätt att ändra i allt material. Detta kan förslagsvis implementeras som att användare kan tilldelas "egenskapen" superanvändare. Uppgiften kräver att ni inte gör lösningen baserad på Javascript-labben.
 

Funktionalitet för att administrera användare (3 p, kräver föregående utvidgning)

Gör ett system för att administrera användare av systemet, med behörighet och lösenord.

Användarränssnitt  i Java (3 - 6 poäng)

Något/några/alla gränssnitt mot användarna/administratörerna kan göras i Java istället för HTML. Dock måste html ingå i den slutliga mängden av publiceringsformer.

Servles/JSP istället för cgi-script (4 poäng)

Använd en servlet eller JSP-sidor för input istället för ett cgi-script

Egenutvecklad server i Java (5 poäng)

Istället för att använda en webserver med cgi/servlets kan en helt egen server byggas i Java.
 

Sökfuntioner (3 poäng)

Inför möjligheter att söka i tjänsten. Exempelvis söka efter all Massive Attack-skivor i en skivdatabas, efter alla M-fester i ett kalendarium eller söka efter alla sportartiklar i maj månad i ett redaktionellt system.

Input via mail (3 poäng)

Input till systemet kan också ske via mail. Detta sker genom att någon (läs:jag) skapar ett mailalias som skickar vidare ett email till ett program som ni skriver. Programmet kommer att få emailet på standard_in och får sedan behandla innehållet på lämpligt sätt för att föra in informationen i systemet.

Export till pdf med hjälp av FO (3 poäng)

Tillför möjlighet att välja att få materialet på PDF-format som genereras med hjälp av FO.

In/utcheckning av objekt (4 poäng)

Gör kontrollmekanismer så att två användare inte samtidigt kan vara inne och modifiera i ett objekt. Detta kan ske genom att checka in ett objekt när man ska editera det, och sedan checka ut det när man har ändrat klart i objektet. Så länge objektet är incheckat är det "read only" för övriga.



 

Exempel: Redaktionellt system

Formattering av artiklar (ingår i basfunktionaliteten)
 
 

Ett möjligt sätt för att lagra metainformation om själva innehållet i texten är att låta journalisterna/redigerarna använda enkla fomatterings-tags. Förslagsvis kan dessa vara på något XML-format definierat av er, t.ex. <rubrik>Huvudrubrik</rubrik><ingress>en ingress</ingress> och så vidare. Exempel på taggar som bör ingå är

Klassificera inkommet material (ingår i basfunktionaliteten)

Materialet kan märkas upp med olika typer av meta-information om en artikel, t.ex. sport, lokalt, ekonomi etc, publicerinsdag osv.

Generera IFRAtrackmeddelanden vid olika events (7 poäng)

Följande "workflows" kan förslagsvis följas

Writing

Dvs när journalisten skriver in texten. Följande statusmeddelanden skickas:

Editing

Dvs när redigeraren tar över och börjar pilla i artikeln för att den ska passa publiceringkanalen/publiceringkanalerna (papper/web/wap t.ex.). Notera att web/wap kanske egentligen ska vara separata flöden

Ett exempel på hur sådana IFRAtrackmeddelanden kan se ut:
 
<?xml version="1.0"?>

<imf  xmlns:pim="http://elvira.gt.kth.se/imf/1.0/pim.xsd"
      xmlns="http://elvira.gt.kth.se/imf/1.0/imf.xsd">
      

  <head>
    <version>3.0</version>
    <source supplier="PIM" application="Pim Tool"/>
    <time>2000-10-06T00:14:32+1</time>
  </head>
  <body>
    <object action="modify">
      <Element/> 
      <object_uid>
        <local_id>20001007-03141</local_id>
      </object_uid>
      <activities>
        <activity>
          <pim:Writing>on_hold</pim:Writing>
          <resource>
            <pim:Producer/>
            <object_uid>
              <local_id>Pelle Svensson</local_id>
            </object_uid>
          </resource>
        </activity>
      </activities>
    </object>
  </body>
</imf>


Som synes är det mesta i innehållet relativt statiskt. Det mesta går att göra som en mall och sedan fyller man bara i den relevanta informationen som ändras. I ett sådant system som detta skulle omfatta är det följande som är "variabelt":

Publishing (ska troligen inte vara med)
 
 

Dessutom kan ett antal attribut sättas såsom:

Ett exempel på hur ett sådant meddelande kan se ut:
 
<?xml version="1.0"?>
<imf  xmlns:pim="http://elvira.gt.kth.se/imf/1.0/pim.xsd"
      xmlns="http://elvira.gt.kth.se/imf/1.0/imf.xsd">
      
  <head>
    <version>3.0</version>
    <source supplier="PIM" application="Pim Tool"/>
    <time>2000-10-06T00:14:32+1</time>
  </head>
  <body>
    <object action="modify">
      <Element/> 
      <object_uid>
        <local_id>20001007-03141</local_id>
      </object_uid>
      <attributes>
        <NumberOfCharacters>4711</NumberOfCharacters>
      </attributes>
    </object>
  </body>
</imf>
 

 
 
 
 
 

Meddelandena skickas sedan via en socket till ett globalt övervakningssystem. Protokollet är enkelt, här följer ett exempel (fetstil är sådant som ert system skriver, icke-fetstil är sådant som kommer tillbaka från servern):
 

BH-elvira>telnet elvira.gt.kth.se 7407
Trying 130.237.21.114...
Connected to elvira.gt.kth.se.
Escape character is '^]'.
HI
LOGIN 4
OK
PUTIMF
somestringthatwillnotappearinthemessage
<?xml version="1.0"?>
<imf  xmlns:pim="http://elvira.gt.kth.se/imf/1.0/pim.xsd"
      xmlns="http://elvira.gt.kth.se/imf/1.0/imf.xsd">
      
  <head>
    <version>3.0</version>
    <source supplier="PIM" application="Pim Tool"/>
    <time>2000-10-06T00:14:32+1</time>
  </head>
  <body>
    <object action="modify">
      <Element/> 
      <object_uid>
        <local_id>20001007-03141</local_id>
      </object_uid>
      <attributes>
        <NumberOfCharacters>4711</NumberOfCharacters>
      </attributes>
    </object>
  </body>
</imf>
somestringthatwillnotappearinthemessage
OK
BYE
BYE
På elvira finns en server som tar emot meddelandena, så ni kan testa.

Basera datat på NewsML (1-2 poäng beroende på komplexitet)
Använd NewsML.

Bilddatabas (7 poäng)

Gör funktionalitet för att lägga in, hämta ut och söka efter bilder i en bilddatabas. Följande bör ingå:

Planeringsverktyg (4 poäng)

Gör ett verktyg för planering av vilka artiklar som ska skrivas. När någon bestämmer att en artikel bör skrivas kan denne någon föra in detta i systemet med hjälp av detta verktyg. Om IFRAtrackdelen implementerats ska ett ifratrackmeddelande skickas. Om


Exempel: Kalendarium

Gör ett kalendarium där man kan boka aktiviteter. Följande parametrar ska kunna matas in: (ingår i basuppgiften)

Krock-hantering (4 poäng)

Gör kontroll så att ingen kan lägga in events som krockar med varandra i både rummet och tiden.

Periodiska mailutskick (4 poäng)

Gör ett program som skickar ut information via email (utbyggnad: sms?) om vad som händer den närmaste veckan. Ett sådant program kan sedan scheduleras att köras varje vecka med hjälp av unix-kommandot cron.

Prenumeration på aktiviteter (4 poäng)

En (vettig) utbyggnad av detta är att låta användare "prenumerera" på vissa typer av aktiviteter, exempelvis "jag vill prenumerera på alla PRU-aktiviteter och M-aktiviteter. Dessa ska sedan fås genom ett mailutskick (se ovan).



 

Exempel på övriga uppgifter