Lagring och sökning av webbdokument Ett 10p examensarbete på C-nivå utfört på WM-data genom Institutionen för Datateknik , IDt, Mälardalens högskola Handledare: Filip Sebek IDt Christina Pettersson, WM-data Bertil Brandt, WM-data Eskilstuna 2000-09-20 Anette Gustavsson Sammanfattning Det här examensarbetet på C-nivå handlar om ett interaktivt dokument som ligger länkad till en befintlig webbsida. För varje gång en användare fyller i dokumentet sparas det på en UNIX-server som en unik fil. Dokumentet är uppbyggt med HTML-formulär som innehåller ett antal tabeller med namngivna fält i. Innan dokumentet sparas på servern kontrolleras att dokumentet har vissa fält ifyllda med hjälp av JavaScript. När dokumentet sparas skickas innehållet i fälten som en URL-kodad sträng till ett Perl-skript som läser in strängen och placerar värdena i variabler. Dessa variabler sätts som standardvärden i ett nytt HTML-formulär och sparas till ett unikt filnamn. På valda fält i dokumentet kan man sedan söka och få fram de sparade dokument som överensstämmer med det sökta fältet. Sökmotorn är skriven i språket Perl och grunden har lånats från Excite med anpassningar gjorda för att passa detta specifika syfte. Det här har testats åtskilliga gånger på en testserver. Rapporten innehåller mycket grundbegrepp som är kortfattat förklarade. Abstract This C-level thesis is about an interactive document which is linked to an existing website. Every time someone has written in the document it is saved on a UNIX server as a unique file. The document is built with an HTML-form that contains several tables with named fields. Before the documents are saved on the server a JavaScript makes sure that certain fields are filled in. When the document is saved its content in the fields is sent as a URL-coded string to a Perl-script that reads the string and sets the value to variables. These variables are set as standard values in a new HTML-form that is saved to a unique filename. On chosen strings a search is possible so that every matching document is found and shown. This search function is written in the language Perl and its base is made by Excite and brought into line of this specific purpose. It has been tested many times at a test server. This report contains many shortly explained terms. 2 Innehållsförteckning Sammanfattning ......................................................................................................................... 1 Abstract ...................................................................................................................................... 2 Innehållsförteckning ................................................................................................................... 3 Bakgrund .................................................................................................................................... 4 Outsourcing ............................................................................................................................ 4 Lawson ................................................................................................................................... 4 Syfte ........................................................................................................................................... 5 Avgränsningar ............................................................................................................................ 5 Relevant teori ............................................................................................................................. 6 Webbserver............................................................................................................................. 6 UNIX ...................................................................................................................................... 6 HTTP ...................................................................................................................................... 6 WWW..................................................................................................................................... 7 URL / URI .............................................................................................................................. 7 CGI ......................................................................................................................................... 8 HTML..................................................................................................................................... 8 SKRIPT .................................................................................................................................. 9 Programmeringsspråk ............................................................................................................. 9 JAVASCRIPT .................................................................................................................. 10 Perl ................................................................................................................................... 10 Problembeskrivning ................................................................................................................. 11 Problemanalys .......................................................................................................................... 11 Modell/Metod ........................................................................................................................... 12 Dokumentet .......................................................................................................................... 12 Kontroll av dokument........................................................................................................... 12 Lagring av dokument ........................................................................................................... 12 Sökning av dokument ........................................................................................................... 13 Lösning ..................................................................................................................................... 14 Driftsättningsdokumentet ..................................................................................................... 14 Formulär ........................................................................................................................... 14 Tabeller............................................................................................................................. 14 Inmatningsfält................................................................................................................... 15 Kontroll av dokument........................................................................................................... 15 Lagring av dokument ........................................................................................................... 15 Sökning av dokument ........................................................................................................... 16 Testning .................................................................................................................................... 16 Resultat ..................................................................................................................................... 16 Analys av arbetet ...................................................................................................................... 17 Referenser................................................................................................................................. 18 Internet ................................................................................................................................. 18 Litteratur ............................................................................................................................... 18 Personliga referenser ............................................................................................................ 18 Bilagor ...................................................................................................................................... 18 3 Bakgrund Outsourcing I samband med övergången från en i huvudsak stordatorbaserad drift till en distribuerad och decentraliserad drift uppstod i slutet av 80-talet och början av 90-talet en ny marknad för s.k. outsourcing, som innebär att man lägger ut delar av verksamheten på entreprenad. När företaget NCC beslutade att införa en nätverksbaserad standardiserad IT-plattform som grund för en ny generation av IT-stöd i hela sin nordiska verksamhet las detta ut på WM-data på entreprenad. Det här samarbetet innebar för WM-data inte bara en utmaning avseende på den tekniska utvecklingen utan också krav på en helt annan form av användarstöd än vad som tidigare varit vanligt. I NCC’s starkt decentraliserade och delvis mobila organisation finns tusentals användare vars dagliga arbete blir successivt allt mer beroende av WM-datas förmåga att upprätthålla tillgänglighet och service. Lawson En del i NCC’s outsourcing av IT-verksamheten är deras system Lawson. Det är ett system som är installerad på en UNIX-plattform med operativsystemet HP-UX 11.0. Lawson Insight Environment är Lawsons miljö för system- och databasadministration. Det består bl.a. av ett dictionary och ett antal samordnande UNIX-processer som hanterar de olika meddelanden som applikationen skickar och tar emot på uppdrag av tillämpningens användare. Lawson har följande processer: LADB (Lawson Database Process) handhar kommunikationen mellan Lawsons applikationer och databasservern. LAJS (Lawson Jobqueue Server) exekverar alla batchprogram. LATM (Lawson Transaction Manager) gör att användare som kör samma program I Lawson använder samma process. De flesta program är idag interaktiva, d v s det finns möjlighet att ”föra dialog” med programmet och på så vis påverka vad programmet gör. Motsatsen till interaktiv databehandling är satsvis bearbetning eller batch, där programmet behandlar förpreparerade data och körs från början till slut utan att någon människa ingriper under tiden. Det finns ytterligare en form av databehandling, nämligen sådan som görs med realtidsbearbetning, där det som utförs av programmet styrs av händelser i omgivningen men där inte nödvändigtvis någon människa ingriper. Lawson använder sig av satsvis bearbetning och varje natt så körs det cirka 130 batchar som kan vara rapportuttag eller utskick av filer till andra system. Dessa kan gå fel av en eller flera orsaker, men oftast beror det på förändringar i något program eller i en applikation. Dessa förändringar är godkända av NCC och arkiveras där. För WM-data innebär det att felsökningen ibland blir onödigt lång bara p g a bristfällig information och det skapar förvirring vid sammanställningar. Numera har även WM-data en kopia av förändringarna men önskemål har framkommit om åtgärder som underlättar både NCC’s hantering av dessa s k driftsättningar av förändringar och felsökning för driftansvarig personal på WM-data. 4 Syfte Det här examensarbetet har som syfte att förenkla WM-datas drift av NCC’s system Lawson. Alla förändringar som sker i applikationen Lawson skall dokumenteras på ett ställe där både WM-data och NCC kommer åt att läsa materialet, fylla i nya driftsättningar och även göra sökningar bland tidigare gjorda förändringar. Uppbyggnaden av dokumentet ska vara sådan att det ska kunna förfinas och ändras efter behov och fler funktioner kan enkelt läggas till för att utöka funktionaliteten och säkerheten. Det skall också arkiveras ett antal månader på servern för att därefter brännas på CD-skiva. Felsökningen för fel som uppstår p g a ändringar i applikationen ska väsentligt förenklas och NCC ska få smidigare hantering och arkivering av driftsättningsdokumenten. Avgränsningar Detta examensarbete avser att göra en tillämpning så att dokumentationen av driftsättningar på systemet Lawson förenklas och blir tillgängligt och lättbearbetat för berörd personal. CDhantering sker med hjälp av företaget Capella och berörs inte här. Inte heller finns beskrivningar på arbetet med att lägga upp alla filer, behörighet på filerna och placeringar av skript och HTML-kod på servern. 5 Relevant teori Webbserver En webbserver är en tillämpning som körs i bakgrunden på en dator, som lyssnar efter anrop från webbläsare. När ett anrop kommer skickas antingen det begärda dokumentet eller ett felmeddelande. De flesta webbservrar tillhandahåller dessutom olika tekniker så att webbservern kan kopplas ihop med andra tillämpningar för ökad interaktivitet och informationshämtning. Exempel på sådana tekniker är CGI (Common Gateway Interface), ASP (Active Server Pages), Netscape LiveWire och PHP/FI. De tre stora webbservrarna är UNIX, Windows NT och Macintosh. UNIX UNIX föddes 1969 vid Bell Laboratories, forskningsavdelningen vid American Telephone and Telegraph Company. Det hela började med en enda man, Ken Thompson, som försökte skapa en billigare och mer lättillgänglig programmeringsmiljö. UNIX, liksom de flesta operativsystem, skrevs från början på assembler-språk som är en primitiv uppsättning interna instruktioner som styr datorns interna arbete. För att göra UNIX flyttbart mellan datorer skrevs operativsystemet om i ett språk på högre nivå kallat B som senare blev modifierat till språket C. Det här gör att UNIX är lätt att modifiera och utveckla, det är en av de kraftfullaste miljöerna, oerhört flexibelt och ger oslagbar prestanda. För att utnyttja systemet till fullo måste man dock lära sig tänka i UNIX-termer. HTTP HTTP (Hypertext Transfer Protocol) är ett protokoll – en uppsättning regler för datorer som kommunicerar via ett nätverk. HTTP-protokollet är utformat för att HTTP-klienter (t.ex webbläsare) ska kunna begära information eller tjänster från HTTP-servrar (webbservrar). HTTP är ett anslutningslöst protokoll vilket innebär att inte webbläsare och webbservrar upprättar en anslutning till varandra utan istället skickar meddelanden fram och tillbaka. Alla meddelanden som skickas mellan klient och server kräver viss information för att meddelandet ska komma fram ordentligt. Det finns alltså inget inbyggt sätt att avgöra vilken information som klienten och servern tidigare utväxlat. Alla HTTP-anslutningar är utformade som ett antal anrop och svar. HTTP använder innehållstyper, d v s tillsammans med alla objekt som skickas finns en innehållstyp som talar om vilken objekttyp det är – ett HTML-dokument, en GIF-bild, en ljudfil eller en annan tillämpning. Innan HTTP-protokollet kan användas måste man ansluta datorn med webbläsaren till en webbserver över nätverket. Anslutningen upprättas via ett TCP-protokoll som tillsammans med Internet Protocol (IP) utgör grundstenarna i Internet. Man säger därför att Internet är ett TCP/IP-nätverk. HTTP är ett tillämpningsnivå-protokoll och det är högsta nivån inom TCP/IP-modellen. 6 WWW För att förstå hur ett dokument blir synligt på WWW (World Wide Web) måste man känna till hur WWW "fungerar". När någon klickar på en länk för att se ett dokument på WWW händer följande: 1. Webbläsaren på klientdatorn kontaktar den dator som har dokumentet (servern) som länken pekar på och begär att få dokumentet sänt till sig. I anropet skickas en adress med (en s.k. URL; se nedan). 2. Servern letar upp dokumentet, som ligger i en fil på en hårddisk någonstans, och skickar tillbaka det till klienten. Adressen används för att hitta den filkatalog där det elektroniska dokumentet finns lagrat. 3. Webbläsare på klienten tolkar och visar dokumentet. URL / URI För att göra det enkelt att hitta dokument på webben, utformade World Wide Web Consortium ett allmänt adressystem för var dokumentet finns. Adresserna kallas Uniform Resource Locators (URL) eller Uniform Resource Identifiers (URI). De två termerna har samma innebörd men URL är den vanligast förekommande. En URL kan bestå av upp till fyra skilda delar, schema, dator, fil och ankare, och de olika delarnas betydelse är viktig då man skapar en webbplats. Den första delen av en URL kallas schema. Schemat refererar till protokollet som används för att ansluta till resursen som specifieras i URL:en. Det vanligaste schemat är HTTP. Bland andra scheman märks ftp, mailto och news. Efter schema kommer namnet, eller IP-numret (Internet Protocol), på den server där resursen finns. Ofta används serverns namn. När man använder ett namn tas IP-numret, som är kopplat till namnet, fram via protokollet DNS (Domain Name Server). Webbläsare ansluter till servern med hjälp av IP-numret som är unikt. http://www.dator Efter namnet på servern kommer namnet på den fil som anropas. Ofta betyder det namnet på den faktiska filen. De flesta webbservrar tillåter ett standarddokument, ett dokument som läses in automatiskt om inget filnamn anges i adressen. Filnamn kan anges i klartext. http://www.dator.com/filnamn Med hjälp av märket ”A NAME” kan man sätta in ankare i sina dokument. Dessa fungerar som anropspunkter inom sidan. Om en stor sida skapats med fyra avsnitt kan ett ankare markera början på varje avsnitt. Genom att ange ett ankare i URL:en så visas det begärda avsnittet direkt. http:// www.dator.com/filnamn.html#ankare 7 CGI CGI (Common Gateway Interface) ansluter webbservrar till externa program. CGI kan göra två saker. Det ena är att skicka information från en webbläsare till en webbserver och göra informationen tillgänglig för en extern tillämpning. Det andra är att skicka utmatningen till den webbläsare som frågade efter utmatningen. Alltså tar den emot information, bearbetar den och visar resultatet (t ex en söktjänst). CGI har ett enkelt gränssnitt som gör det väldigt flexibelt för såväl enkla som väldigt komplicerade uppgifter. CGI utvecklades ursprungligen för UNIX-baserade webbservrar. Gränssnittet är inte speciellt komplicerat så det är relativt enkelt att skriva tillämpningar som hanterar CGI-inmatning och skapar utmatning som utförs via HTTP. För att göra uppgiften enklare finns det bibliotek (moduler) till nästan alla språk. Dessa bibliotek kan t ex hantera insamling av data från webbläsaren och spara det i ett format som är enkelt att läsa. En av de stora fördelarna med att skriva webbtillämpningar i CGI är att det stöds av nästan alla programmeringsspråk. Om språket kan läsa från standardinmatning och skriva till standardutmatning kan det användas för att skriva CGI-tillämpningar. Kan man ett programmeringsspråk är det oftast ingen fördel att lära sig ett nytt bara för CGI – utan man kan programmera i det språk man kan bäst. Ett annat alternativ är att ta i beaktande hur många CGI-biblioteksfunktioner som finns för de olika språken. För att webbservrar och klientdatorer överhuvudtaget ska kunna kommunicera krävs att CGI finns ovanför protokollet HTTP. Kommunikationen med HTTP fungerar med hjälp av en process som heter demon (daemon), som körs på webbservern. En demon väntar på att en klientdator ska försöka upprätta kontakt med webbservern. GGI är också plattformsoberoende och finns inbyggt i de flesta webbserverpaket oavsett vilken plattform som avses, UNIX, Windows NT eller Macintosh. CGI-tillämpning och CGI-skript används ofta synonymt. Orsaken till det är att CGItillämpningar ofta är skrivna i skriptspråk. CGI är ju ”bara” en samling regler och man kan använda många olika programmeringsspråk, allt ifrån Perl till Java, C++ och Visual Basic. HTML HTML (HyperText Markup Language) är en teckenbaserad metod att beskriva och visa webbsidor. Texten omsluts av olika koder som en HTML-tolk tittar på för att avgöra hur sidan ska se ut. Möjligheten att visa bilder och text tillsammans och länka samman dokument för att skapa sammansatta hypertextdokument är två viktiga funktioner som gör webben visuellt tilltalande och enkel att navigera. HTML-koder (även kallad taggar, av tag på engelska) är speciella kodnamn som omges av hakparanteser FEL! störreän och mindreäntecken hakparanteser är [] (<>) och oftast förekommer parvis, en start-tagg och en slut-tagg. HTML-koden tolkas av webbläsaren och visas sedan som en läsbar sida som vi lätt kan läsa och titta på men HTML är inte begränsat till det utan kan även spela upp ljud, visa filmer samt tillbehörsprogram. Där slutar dock finesserna. HTML har inga funktioner för att hämta information från en databas, eller utföra något beroende på vad besökaren har gjort tidigare. 8 SKRIPT För att få någon form av intelligens interaktivitet? bakom webbsidor krävs något mer och i dag är det skript som gäller i första hand. Ett skript är som en att-göra-lista för webbservern. Om besökaren vill se dagens aktiekurser, så utför skriptet en rad saker för att till slut presentera dem i HTML-format i besökarens webbläsare. Skript används även till enklare saker som gästböcker, sidräknare och diskussionsforum. Det finns på två olika typer av skript – de som körs på webbservern och de som kan förstås av besökarens webbläsare. Enkelt förklarat har skripten som körs på webbläsaren inga funktioner för att hämta information från en databas, men kan användas till att styra hur till exempel webbläsarfönstret ska uppföra sig och framför allt som en viktig del för att kunna göra element rörliga på hemsidan (i dhtml). Skript som körs på en webbserver har en oslagbar fördel – de kan spara information i till exempel en loggfil, en fil som innehåller postade meddelanden, eller i en databas.Dessa skript är nödvändiga om man vill kunna återanvända information som bygger på någon inmatning i ett formulär, eller utnyttja information om vilka sidor besökarna har tittat in på. Det finns olika typer av webbservrar på Internet men det finns inte någon riktig standard för vilken typ av skript som ska användas på webbservrarna. Rena motsatsen till HTML, alltså. Ett tydligt exempel är språket Vbscript som fungerar utmärkt på webbservern Internet Information Server som är baserad på Windows NT, men inte fungerar alls under webbservern Apache som är vanligast på Unixdatorer. Därför är det väldigt viktigt att veta vilken typ av server som används innan man väljer ett skriptspråk. Skript kan läggas som separata filer, men vissa skriptspråk kan dessutom läggas i samma fil som HTML - koden ligger i. Vilket som är bäst är helt en smaksak, men många upplever det enklare om skriptet ligger direkt i HTML-filen. JavaScript, Php och Vbscript är exempel på sådana språk. Programmeringsspråk Det finns två typer av programmeringsspråk: kompilerade och interpreterande språk. Kompilerade språk inkluderar C, C++, Java, Perl och Visual Basic. Interpreterande språk är TCL, JavaScript och Bourne Shell-skript. Skillnaden mellan ett kompilerat och ett interpreterande språk är att kompilerade språk utför kompilering och exekvering separat, medan interpreterande språk kompilerar och tolkar koden på en gång. Kompilerade tillämpningar är oftare lågnivåspråk än interpreterande språk vilket betyder att de ofta ligger närmare det maskinspråk till vilken de kompileras. Interpreterande språk brukar ofta kombinera flera uppgifter i en funktion eller i ett kommando vilket ger kraftfulla funktioner och enklare kommandon. Skillnaden består främst i prestanda, flyttbarhet och enkel programkontroll med avseende på t.ex. syntax. Olika språk skiljer olika mycket och det finns för- och nackdelar med båda typerna av språk. Det vanligaste språket för UNIX är Perl men även C/C++ och JavaScript är möjliga. Perl och C/C++ var språk som kunde användas för att skapa CGI-tillämpningar men vad är skillnaden mellan JavaScript och CGI? JavaScript - kod sparas i webbsidan och utförs av en webbläsare. När man besöker en sida som använder JavaScript kan man studera sidans källkod och även JavaScript-tillämpningen. 9 CGI utförs av servern och bara tillämpningens utmatning skickas till webbläsaren. JavaScript fungerar bara i webbläsare som stöder språket medan CGI fungerar i alla webbläsare som har stöd för HTTP - protokollet. JAVASCRIPT JavaScript utvecklades ursprungligen av Netscape Communication baserat på amerikanska Suns programmeringsspråk Java, för att låta webbmastern lägga till en del interaktiva funktioner. Skriptspråket kallades då för Livescript. JavaScript är det mest använda programmeringsspråket för webbsidor idag och det är nästan det enda skript som körs i besökarens webbläsare. JavaScript fungerar med alla webbläsare. Med JavaScript kan man till exempel: Hantera information från till exempel ett formulär, utan att blanda in servern. Lägga till interaktivitet till bilder. Ändra egenskaper för element på en webbsida, beroende på vad besökaren gör. I dag används JavaScript mest för att beskriva länkar, öppna dialogrutor i besökarens webbläsare, men JavaScript är dessutom suveränt för att kontrollera information i formulär. JavaScript kan kolla att all nödvändig information finns inmatad redan innan webbläsaren skickar den vidare till det serverbaserade skriptet. Allt går snabbare och webbservern blir mindre belastad. Sedan JavaScript kom, har det kompletterats och blivit ett näst intill fullfjädrat språk. Det kan dessutom användas som ett serverbaserat skript och det är relativt enkelt att lära sig. Inte minst är JavaScript ensamt i sin nisch, att kunna köras på besökarens webbläsare. JavaScript är ett språk som fungerar på alla typer av datorer. Alla program som finns bygger på något som kallas för källkod, vilket är den kod som ligger till grund för det färdiga programmet. Källkod går att titta på och förstå, medan programmets binärkod som källkoden resulterar i är helt omöjlig att begripa. JavaScript läggs in i webbsidor som källkod. I varje modern webbläsare ingår en JavaScripttolk, vilket gör att nästan alla besökare kan köra skript gjorda i JavaScript. All JavaScript-kod ligger tillsammans med HTML-märkena. Perl Perl (Practical Extraction and Report Language) innehåller flexibla och kraftfulla texthanteringsverktyg och det är också stabilt nog att stödja stora tillämpningar. Variabelhanteringen är en av Perl-språkets kraftfullaste funktioner. En fördel med Perl är att det finns få hinder för erfarna programmerare att snubbla på. Även om Perl stöder stora, strukturerade tillämpningar så är det också lämpat för att skriva korta, enkla men ändå kraftfulla skript. En annan aspekt på Perl är att det lånar syntax från så många programmeringsspråk så att två programmerare kan skriva ett skript som gör samma sak men där det ena ser ut som ett Bourne Shell-skript och det andra ser ut som ett C-program. Det går snabbt att utveckla ett skript i Perl, programkoden blir förhållandevis liten och det finns många färdiga funktioner för den databearbetning som ofta görs av CGI-skript. Vidare är det enkelt att ta emot och läsa av information från användaren via formulär och det är enkelt att läsa från och skriva till filer. Perl-skript skrivs som en vanlig textfil vilket betyder att man kan använda vilken texteditor som helst för att skriva ett skript. Om skriptet är skrivet i Windows-miljö och webservern körs i UNIX-miljö kan en del Perl-tolkar vara känsliga för 10 hur Windowsprogrammet skriver radbrytningar. Uppstår problem med skriptet kan det vara ide att ha en editor där det går att spara filen i UNIX-format. Alla Perl-skript måste börja med att tala om var Perl-tolken finns på datorn (sökvägen på servern) : #!/usr/bin/perl. Problembeskrivning Examensarbetet består av uppgiften att lägga upp en länkad webbsida till en befintlig webbsida på NCC’s interna webbserver, där NCC’s personal fyller i ett driftsättningsformulär varje gång en förändring görs på systemet Lawson. Informationen på varje driftsättningsformulär ska lagras på ett sådant sätt att både NCC och WM-data enkelt ska kunna söka bland de sparade formulären med olika sökfokus – man ska alltså kunna söka på alla ifyllda fält om man vill det. Tillsvidare har NCC valt ut sju olika fält i formuläret de vill kunna söka på men det kan enkelt ändras. Alla fält i formuläret behöver inte fyllas i, men vissa fält ska vara sammankopplade så att fyller man i ett av dem så måste man också fylla i det andra. För att spara formuläret måste också vissa fält vara ifyllda. Problemanalys Systemet Lawson körs på en UNIX-plattform med operativsystemet HP-UX 11.0. NCC’s internwebb ligger på samma server och på dess startsida läggs en länk till en driftsida för att fylla i driftsättningsformuläret och för att söka bland de sparade formulären. Användarna på NCC har operativsystemen Windows 98 / NT och kan använda både Netscape Navigator och Microsoft Internet Explorer som webbläsare på sina klientdatorer. WM-datas driftstöd i Örebro har med hjälp av programvaran Exceed möjlighet att koppla upp sig mot NCC’s server via telnet. För att komma åt NCC’s internwebb går de dock via Internet som vanliga NCC-anställda. De använder också PC med operativsystemen Windows 98 / NT och ska ges rättigheter att använda driftsidan på NCC’s internwebb. På servern idag finns det stöd för C-program och en inbyggd C-kompilator, men även Perl och Sybase finns installerade. Vilka hjälpmedel är mest lämpliga att använda till uppgiften? Problemen är som följer: En HTML-sida ska kodas. Koda för hand eller använda ett hjälpprogram? Den ska innefatta ett formulär där vissa fält måste fyllas i och andra inte. Ska kontrollen ske innan sändning till server eller på servern? Alltså ska JavaScript eller något annat språk användas? Eftersom lagring och sökning ska genomföras – hur sparar man informationen och hur får varje dokument ett unikt filnamn? Hu ska formuläret lagras så det underlättar sökning och kan visas på lämpligt sätt för användaren? Vilket programmeringsspråk är mest lämpligt för sökfunktionen? Ska den kodas för hand eller ska kod lånas? 11 Modell/Metod Dokumentet Vill man göra hemsidor finns det många hjälpmedel att välja på. Första tanken var att skapa webbsidan med programmet FrontPage eftersom den befintliga internwebben är uppbyggd med det. En bok inköptes och HTML - kod studerades. I en vecka pågick försöken att efterlikna det dokument som NCC använder idag för att fylla i sina driftsättningar innan konstaterandet var ett faktum: Front Page var inget bra alternativ för detta ändamålet. Front Page påminner om språket Visual Basic i den betydelsen att man får visuell hjälp att placera ut knappar, textrutor och rullistor mm. Har man inget krav på förståelse av koden som Front Page skapar åt en när man väljer designen av sitt webbdokument, så kan det vara ett bra alternativ. Däremot om, som i detta fallet, informationen ska användas och det faktiskt krävs att man vet exakt hur och varför allting fungerar är inte Front Page ett bra alternativ. Dessutom lägger Front Page ut koden på ett högst användarovänligt sätt så att den blir väldigt svårläst. För att få förståelse om HTML-kod och dess problem och förtjänster togs beslutet att skriva koden för hand med hjälp av programmet Home Site. Home Site hjälper till att hålla reda på start och sluttaggarna i dokumentet och visar hur sidan skulle se ut på webben, men all kodning utförs av programmeraren. Kontroll av dokument Ska dokumentet kontrolleras innan eller efter sändning till server? Eftersom detta arbetet bygger på inmatning av information i ett formulär där det ska gå att söka på vad användaren matat in är det speciellt viktigt att kontrollera inmatningarna. För att spara tid åt användaren och minska arbetsbelastningen för server och nätverk valdes JavaScript. Dokumentet utformades så som NCC’ befintliga dokument ser ut idag, men utseendet är enkelt att ändra på. Idag är det ett fåtal personer som har rättighet att fylla i dokumentet. Om de anser att det bör finnas fler kontroller eller om antalet personer ökar drastiskt som ska fylla i dokumentet så att man önskar ytterligare kontroller kan dessa enkelt läggas till. Dessutom kan kontroller i Perl också läggas till för att öka säkerheten och minimera risken för fel ifyllda formulär. Ett annat sätt att minimera fel i inmatningarna är att ha så många förvalda fält som möjligt, där alla alternativ går att välja från en rullista. Lagring av dokument Lagring av dokumenten måste ske med unika namn eftersom flera av fälten kommer att ha samma innehåll och man hela tiden ska kunna garantera att alla dokument med något gemensamt fält, t ex när någon söker efter alla driftdokument som är gjorda ett visst datum, ska kunna hittas. Det unika namnet måste tilldelas efter att dokumentet har blivit godkänt och ska skickas till servern. Alternativen är att antingen låta JavaScript döpa filen till ett unikt namn eller låta ett skript göra det. För att användaren ska få upp ett dokument som ser ut som det sparade måste datasträngen på något sätt återföras till HTML-koden innan det lagras. 12 Sökning av dokument För sökfunktionen fanns många alternativa lösningar. Med vilket språk skulle CGIprogrammeringen kodas? Det självklara valet från början var att använda Visual Basic för dess utmärkta visuella egenskaper och också för dess koppling med enkel och lättförståelig databashantering. Efter lite efterforskningar på operativsystemet UNIX stod det dock klart att Visual Basic inte var kompatibelt med UNIX. Alternativ nummer två var att koda i klassisk C där erfarenheterna var störst och det dessutom fanns stöd för på servern. Halvvägs in i det arbetet så kom det in önskemål om att det kanske var bäst att använda språket Perl. Tvivel uppstod – vad var bäst egentligen? Som tidigare är nämnt finns det många fördelar att skriva i ett språk som man kan relativt bra. Eftersom en lösning var påbörjad i C kändes det bäst att fortsätta med det – annars hade man ju kastat bort en massa tid. Å andra sidan fanns viljan att göra det som var ”bäst” vilket efter en rundfrågning visade sig vara många olika lösningar – beroende på vem man frågade. Perl är det populäraste språket för att skriva CGI-skript och var ursprungligen avsett som ett allmänt skriptspråk till UNIX. Perl har dessutom många ”färdiga” lösningar att låna. Lösningen på vägvalet var att denna gång låna en bok och försöka ta fram fakta. Författaren av boken ”Lär dig CGI-programmering på 1 vecka”, Rafe Colburn, propagerade för Perl när det gällde programmering på en UNIX-server. Boken var mycket lättläst och behandlade många områden som berörde examensarbetet, så mycket av tidigare frågeställningar fick helt plötsligt svar. Därför kändes det tryggt att följa boken vidare då den tog upp många problemlösningar med tillhörande kodexempel som passade uppgiften för examensarbetet. Nackdelen var att den egna erfarenheten av Perl var obefintlig och inte heller ville någon på avdelningen tillskriva sig några sådana kunskaper. Efter mycket svår beslutsvånda togs beslutet att använda Perl mycket på grund av att det fanns många färdiga sökmotorer på webben. Valet mellan att koda en sökmotor själv eller anpassa en ”lånad” sökmotor togs med hänsyn till kunskaperna i Perl. Alternativet att anpassa en färdig sökmotor, i det här fallet Excite, valdes och för att underlätta anpassningen sparades dokumenten i HTML-form så att formatet är rätt direkt vid träff. 13 Lösning Uppbyggnaden av uppgiften blev att koda dokumentet med HTML-kod och kontrollera det med JavaScript innan sändning sker till server. På servern placerades ett CGI-skript skrivet i Perl som namnger det kontrollerade dokumentet och sparar det som en HTML-fil. Med hjälp av en ”färdig” CGI-tillämpning kan sökning av tidigare lagrade dokument göras och efterfrågat dokument visas för användaren som ett webbdokument . En HTML-sida får utgöra basen för både ifyllnad av nya dokument och sökning av lagrade dokument. Programvaran HomeSite 4.0 laddades ner och HTML-sidorna skrevs för hand med hjälp av Annica Tigers ”HTML-guide” på hennes hemsida och boken ”Lär dig CGI -programmering på 1 vecka” skriven av Rafe Colburn, plus diverse andra tips-sidor på webben. Menysidan är uppbyggd med hjälp av frames och länkar användaren rätt för respektive önskan. Dokumentet för driftsättningen är uppbyggt med ett formulär som innehåller fyra tabeller som formaterar 24 fält. Driftsättningsdokumentet Formulär För att göra det möjligt att manipulera inmatningarna skapades ett formulärobjekt. Ett formulärobjekt kan vara enkla inmatningsfält eller fält som tar flera rader av kommentarer, kryssrutor, knappar mm. Man kan ha flera formulärobjekt i samma dokument. Formulär har attributen ”action”, ”method” och ”enctype”. ”Action” definierar antingen en mailadress dit informationen ska skickas eller en adress till en hanterare för formuläret på en server. ”Method” bestämmer med vilken HTTP-metod (”post” eller ”get”) innehållet från formuläret ska skickas till servern. ”Enctype” bestämmer med vilken metod som innehållet i formuläret ska avkodas, d v s hur innehållet kommer att se ut vid utskrift. I denna lösning används ett formulär som har namnet ”form1” och använder sig av metoden ”post” för att skicka innehållet i fälten till en bestämd adress, adressen till CGI-skriptet SAVE.CGI som sparar strängen i en fil. Attributet ”enctype” är inte satt så defaultvärde gäller, utskriften är inte formaterad utan läggs i en enda lång sträng. Tabeller Tabeller används för att just hantera tabellinformation eller för att strukturera upp fält och ge dem en snygg inramning. Tabeller har en mängd attribut som alla är valfria. Väljer man inga attribut så anpassas tabellen efter innehållet och ingen inramning sker. Även cellerna i tabellen kan ha en mängd attribut. Några attribut som används i detta fallet är ”width”, ”border”, ”cellspacing”, ”rowspan” och ”colspan”. ”Width” anges om man inte vill att tabellen ska anpassa storleken efter innehållet, d v s om man vill ha en tabell som är lika stor oavsett innehåll. ”Border” anges om man vill ha en yttre ram runt hela tabellen. ”Cellspacing” används när man t ex vill ha tre kolumner på en viss rad istället för de ordinarie sex, man låter alltså en kolumn breda ut sig på en speciell rad. ”Rowspan” gör motsvarande som ”cellspacing” men i vertikal riktning, en rad tillåts i en viss kolumn motsvara flera rader. Detta dokumentet använder sju tabeller för att formatera fälten så att dokumentet blir så som NCC vill ha det och så att man får en symmetrisk och logisk stil på det. 14 Inmatningsfält Fält används för att låta användarna mata in information som sedan tas om hand av programmet, här föds nu interaktiviteten. Dessa fält är endast tillåtna inom ett formulärobjekt. Fältet namnges via attributet name så att det går att para ihop fält med inskrivet och skickat data. Alternativen som finns av inmatningsfält är ”input”, ”select” och ”textarea”. ”Input” finns i många former såsom enkel inmatningsruta, lösenordsruta, checkrutor, knappalternativ, ”submit”- och ”reset”-knappar. ”Select” används vid valalternativ, antingen får bara ett alternativ väljas eller också kan man välja flera alternativ. ”Textarea” definierar flerradiga textfält. De 24 fält som används i dokumentet är alla någon av ovanstående sort. Det är mest enkla inmatningsrutor samt några radioknappar, d v s runda knappar som bara tillåter att ett alternativ väljs. Kontroll av dokument JavaScript är alltså utomordentligt lämpligt att kontrollera fälten med innan de skickas till servern. Koden läggs i dokumenthuvudet (inom head-taggarna) och anropas sedan inne i dokumentet, utom i vissa fall direkt inom body just där man vill att det ska utföra något, t ex visa dagens datum och tid. Skriptet läggs som en dold kommentar, via <!-- och //--> för att förhindra att browsers som ej stödjer JavaScript ska visa hela programmerings-koden. Innan dokumentet sparas skickas det till en funktion som kontrollerar att vissa fält är ifyllda. Detta är fält som är nödvändiga för att lagringen ska vara meningsfull. Det är också planerat i framtiden om ytterligare kontroller med hjälp av JavaScript, bl. a. att datum verkligen är ett datum mm. Idag är endast sju fält kontrollerade, och då endast på att de har något innehåll och inte på om innehållet är något lämpligt eller ej. Ökar antalet användare så kan fler och mer avancerade kontroller lätt läggas till. Lagring av dokument CGI - programmeringen används för att fånga upp den URL-kodade datasträngen som skickas från formuläret. URL - kodad data är i princip en sträng som består av namn och värden på formulärets fält på formulärets element. URL - kodning är konstruerad så att alla data kan läggas till efter den URL-adress som anropats från servern. Data skickas till servern i form av fältnamn och värdepar. Varje par åtskiljs av ett &-tecken och mellanslag ersätts av + så att den kodade informationen inte delas av mellanslag. Programmeringen sker med hjälp av språket Perl. Adressen till programmet som ska ta hand om datasträngen anges i HTML-kodens attribut ”action”. När man söker på ett fält så vill man ha upp alla dokument som överensstämmer med det sökta fältet. Sparar man bara den URL-kodade strängen så får man vid träff naturligtvis upp den strängen. För att man istället ska få upp dokumentet precis som det såg ut när det sparades måste datasträngen separeras och placeras i variabler. Sedan ska HTML-koden skapas igen med redan ifyllda fält genom att i placera variablerna där som valda värden. Sedan skapas ett filnamn med hjälp av att anropa en funktion som returnerar dagens datum och exakt tidpunkt. Dessa värden sätts samman med ändelsen ”.html” och bildar filnamnet som sparas under en bestämd katalog på servern. 15 Sökning av dokument Sökning av lagrade dokument sker alltså med hjälp av sökmotorn Excite. En enkel hemsida skapades där användarna får information om hur sökningen ska gå till. I den HTML-koden anropas sökmotorn som måste vara installerad på servern och sökning kan påbörjas. I inställningarna för sökmotorn talar man om vilken katalog den ska indexera och man kan också välja vilka sorts filer man vill att den ska indexera, i det här fallet valdes HTML-filer. När användaren får träff på en sökning kommer alla träffar upp som länkar till dokumenten som matchar sökningen. Detta är då ett dokument som inte kan ändras på. Sökmotorn Excite har många anpassningsmöjligheter, här valdes alltså att koda söksidan separat, vilket inte är nödvändigt, och endast placera själva inmatningsrutan i den koden. Det hade lika gärna gått att använda Excite precis som det är och bara ange under vilken katalog sökningen ska ske. Man måste dock installera Excite på servern för att den ska kunna användas. Testning Första regeln för felsökning är att skapa och felsöka skripten på en utvecklingsserver. Innan skripten fungerar på ett korrekt sätt undviks länkar. Alla förändringar av webbplatsen utförs på testservern och först när man är säker på att allt fungerar som det ska flyttas innehållet över till produktionsmiljön. Innan skriptet anropas via en webbserver bör felsökning ske från kommandoraden. Det betyder att man startar skriptet från en kommandoprompt och ser vilket resultat man får. Det är ett bra sätt att hitta syntaxfel men även andra kodfel. Utmatningen som i normala fall skickas tillbaka till webbservern skickas kan man omdirigera till en fil så att man kan kontrollera att HTML - koden som returneras är korrekt. Från kommandoraden kan man även simulera inmatning i formulär som sedan skickas till CGI-skriptet. CGI-bibliotek gör det enkelt att skicka indata CGI-gränssnitt från kommandoraden. När skriptet är testat från kommandoraden testas det via webbservern vilket då, om man testat tidigare punkter ordentligt, bör gå smärtfritt.. Resultat Resultatet av arbetet har blivit en webbsida som har funktioner som kontrollerar inmatningen av användaren till en viss grad, som lätt kan utökas, där de godkända dokumenten sparas med hjälp av ett CGI-skript i Perl till ett unikt filnamn baserat på datum och klockslag. Från NCC’s befintliga webbserver skapas en länk till HTML-sidan main.html som är uppbyggd med frames och slussar användaren vidare till driftsättningsdokumentet om de önskar och talar om vilka sökmöjligheter som finns. Sökfunktionen är ordnad med hjälp av applikationen Excite. 16 Analys av arbetet Ett personligt syfte med detta arbetet var att få så stor inblick och förståelse för Internets möjligheter som möjligt. Att konstruera en interaktiv webbsida som använder flera tillämpningar för att lagra och ta fram lagrad information är för en van IT-konsult kanske ett lätt arbete men som alla vet är informationsflödet och begreppen oändliga när det gäller verktyg och metoder. Undertecknads erfarenheter på den här formen av arbete innan examensarbetets början var begränsade till måttlig användning av Internet i form av informationskälla samt en enkel egenhändigt gjord hemsida tre år tidigare. Inte ens ”chattat” alltså! Detta medförde att arbetet kändes som en alldeles tillräckligt tuff utmaning. Åtskilliga timmar har ägnats åt att reda ut begreppen och på grund av detta faktum har dokumentet mycket enkelt förklarande terminologi som ligger på en grundnivå. Som tidigare nämnt var det de till synes oändliga valmöjligheterna och en djungel av begrepp som gjorde att uppgiften ett kritiskt stadium kändes oövervinnelig. Detta trots det faktum att det uppenbarligen redan existerade ett otal smarta lösningar som fanns att ”låna” på Internet. Först påbörjades kodning för sökfunktioner, i språket C, och formuläret skapades med HTML-kod. Sedan var det stopp. För hur skulle man knyta ihop alltihopa? Hur fick man det ena materialet till det andra och hur fungerar egentligen alla verktyg och vilka passar ihop med vilka? Vilket stöd behöver varje verktyg ha? Vad är kompatibelt med olika servrar? Den förlösande faktorn blev att börja med dokumentationen, d v s att skriva ner och bena ut begreppen på papper. Efter en tids efterforskning togs beslutet att kontrollera dokumentet innan det sparades med Javaskript och att lagring och sökfunkrioner skulle skrivas i Perl. Därmed tog kodningen fart på allvar, dvs sökning av färdiga sökmotorer som kunde anpassas och kodningen av ett skript som hämtade upp de skickade datafälten, delade upp dem till variabler, läste in dem i ett liknande HTML-formulär och lagrade till lämpliga namn. Sedan tog det lite tid att knyta ihop all HTML-kod och Perl-kod genom att skapa en sida på en testserver med tillhörande kataloger. Slutledningen av allt arbete blir att det här är väldigt intressant och roligt att fördjupa sig i. Ämnet är så komplext att det finns en risk att man spenderar ett par dagar bara på detaljer, med andra ord känns det som man ”aldrig blir riktigt färdig”. Den största nackdelen har varit att arbeta ensam, saknaden efter ett ”bollplank” har periodvis varit mycket stor vilket många anställda på WM-data fått anledning att känna av. I slutskedet blev också saknaden av en Perl-specialist kännbar, för det behövdes en sådan för att hitta alla små syntaxfel i tillämpningen som skulle lagra filerna. Givande har det varit och mersmak har det gett, detta är inget arbete jag lämnar och aldrig vill göra igen, snarare vill jag lära mig ännu mer så att ett sådant här arbete en dag känns som ”ett lätt arbete”, d v s den där vane IT-konsulten har blivit jag. 17 Referenser Internet http://www.atiger.pp.se/sida.html http://lightsphere.com/dev/cgi.html http://www.idg.se/iworld/webbskolan/ http://developer.earthweb.com/ http://www.excite.com/ http://www.nada.kth.se/dataterm Annica Tigers HTML-nybörjarguide Kira,s Web Tool Webbskolan Earthweb Excite Svenska Datatermgruppen Litteratur Waite Mitchell, Prata Stephen, Martin Donald, ”UNIX Handboken” Ek Jesper, Wetterström Anna, ”FrontPage 2000” Colburn Rafe, ”Lär dig CGI-programmering på 1 vecka” Vander Veer Emily, ”JavaScript för dummies” Kernighan Brian W., Ritchie Dennis M., ”The C Programming Language” Personliga referenser Filip Sebek, handledare och studierektor på Datainstitutionen, Mälardalens Högskola Personal på WM-data AB i Eskilstuna, Örebro och Stockholm. Bilagor HTML - kod se bilaga 1 och 2 Perl-kod se bilaga 3, 4 och 5 18