MITTUNIVERSITETET Institutionen för informationsteknologi och medier (ITM) Examinator: Karl Pettersson, karl.pettersson@miun.se Handledare: Åke Olsson, Studiefrämjandet, åkeolsson47@hotmail.com Författarens e-postadress: ulphen@hotmail.com Utbildningsprogram: Mediaingenjör, 140p Omfattning: 7503 ord Datum: 2006-02-21 Examensarbete inom Datateknik B, 10 poäng Helsingespråket Utveckling av Ulf Kollin
Sammanfattning Sammanfattning Många dialekter av det svenska språket håller på att försvinna. Språket blandas ut i större utsträckning idag än förr i tiden vilket medför att mindre dialekter hotas. Studiefrämjandet i Ljusdal jobbar för att dokumentera regionens dialekter för att försäkra att dessa inte skall bli förlorade för framtida generationer. Deras idé var att samla in hälsingedialekter och dokumentera dessa i en databas. För att öka tillgängligheten till databasen för allmänheten var det sedan tänkt att koppla den mot en hemsida. På hemsidan skulle det sedan finnas möjlighet för besökarna att hämta information i både text och ljud ur databasen. Informationen i databasen skulle bestå av ordlistor över dialekterna med översättningar till rikssvenska samt ljudupptagningar länkade till orden av personer som fortfarande pratar gammal hälsingedialekt. Uppdraget att realisera denna idé blev mitt examensarbete. I uppdraget ingick att skapa databasen, planera och skapa hemsidan och dess kopplingar mot databasen. Dessutom ingick det att skapa ett administrationsverktyg till databasen för att underlätta arbetet för studiefrämjandet. Databasen skapades sedan efter de riktlinjer som jobbats fram av Studiefrämjandet och lades in i en MySql databas tillsammans med hemsidan på Webbstugans webbhotell i Ljusdal. i
Abstract Abstract Many dialects of the Swedish language is disappearing. The language gets more mixed nowadays then it was in the past which threatens smaller dialects. Studieframjandet in Ljusdal works to document its regions dialects to ensure that they don t get lost for future generations. Their idea was to gather dialects from Halsingland and document them in a database. To increase the availability of the database to the public they intended to connect it to a homepage on the Internet. At the homepage it would then be possible for visitors to get information both in text and sound from the database. The information in the database was intended so consist of wordlists over the dialects with their Standard Swedish translations. Their will also be recorded speech linked to the words from people who still speaks old dialects from Halsingland. I was put to realize this idea as my examination. In the assignment it was included to create the database, plan and create the homepage and the connection between the homepage and the database. It also included the work to create an administration tool for the database to make the work for Studieframjandet easier. The database was created following the guidelines i got from Studieframjandet and was powered by an MySql database at Webbstugan in Ljusdal. ii
Innehållsförteckning Innehållsförteckning Sammanfattning... i Abstract... ii Terminologi...v 1 Inledning...1 1.1 Bakgrund och problemmotivering...1 1.2 Övergripande syfte...1 1.3 Avgränsningar...1 1.4 Konkreta och verifierbara mål... 2 2 Teori...3 2.1 HyperText Markup Language (HTML)...3 2.2 Extensible HyperText Markup Language (XHTML)...3 2.3 Cascading Style Sheets (CSS)...4 2.4 PHP: Hypertext Preprocessor (PHP)...4 2.5 Databaser...5 2.6 ER diagram...5 2.7 SQL...6 3 Metod...8 3.1 Databasen...8 3.2 Ordlistan...9 3.3 Inloggning / Administrering...10 3.4 Sökmotorn...11 4 Konstruktion...12 4.1 Databasen...12 4.2 Ordlistan...14 4.3 Inloggning / Administrering...17 4.4 Sökmotorn...19 5 Resultat...21 5.1 Design...21 5.2 Ordlistan...22 5.3 Inloggning / Administrering...24 5.4 Sökmotorn...28 6 Slutsatser...30 iii
Innehållsförteckning 7...31 iv
Terminologi Terminologi Förkortningar HTML HyperText Markup Language. Ett standardiserat språk för att strukturera uppbyggnaden av en hemsida. XHTML PHP CSS SQL Extensible HyperText Markup Language. En vidareutveckling av HTML. PHP: Hypertext Preprocessor. Ett scriptspråk mycket likt högnivåspråk som C++ till syntaxen som bäddas in i HTML koden. PHP används för mer avancerade operationer. Cascading Style Sheets. Används för att styra en hemsidas utseende. Structured Query Language. Språk för att manipulera databaser v
1 Inledning 1.1 Bakgrund och problemmotivering Användandet av dialekter är utdöende på många håll i landet. Orsakerna till detta kan ses som naturliga. Avstånden mellan oss suddas ut med hjälp av bättre infrastruktur. Folk reser och flyttar mer i allmänhet än vad de gjorde förr i tiden. Tekniska innovationer som till exempel Internet och TV bidrar även de till att vi kommer närmare varandra. Språket beblandas på ett annat sätt och skillnaderna mellan dialekterna blir allt mindre. Det är bakgrunden till att Studiefrämjandet i norra Hälsingland vill främja och bevara, samt dokumentera Hälsinglands olika dialekter för kommande generationer. Studiefrämjandet är en organisation som verkar över hela landet. De bedriver olika sorters utbildningar i form av studiecirklar, vuxenutbildningar och kulturarrangemang. 1.2 Övergripande syfte Projektets övergripande syfte är att ge förslag till en systemlösning för hur man på ett bra sätt skall kunna bevara de olika dialekterna. Detta är tänkt att ske genom skapandet av en databas där text och ljud skall kunna lagras och enkelt administreras. Syftet med databasen är att den skall vara tillgänglig för allmänheten. Detta stod till grund för att anpassa databasen för att kopplas mot en hemsida. I projektet ingick det även att framföra och tillverka en prototyp baserad på ovan ställda krav. Via hemsidan skall besökarna ha möjlighet att leta upp den dialekt de är intresserad över och där kunna se översättningar från dialekt till rikssvenska. Besökare skall dessutom ha möjlighet att få lyssna till ordet uppläst på korrekt dialekt. 1.3 Avgränsningar Jag har avgränsat mitt arbete genom att endast fokusera mig på den tekniska lösningen för lagring, administrering och visualisering av databasen. Det tidskrävande arbetet med insamling och bearbetning av informationen till databasen sköts av Studiefrämjandet. 1
1.4 Konkreta och verifierbara mål Huvudmålet med projektet är att skapa en fungerande lösning där en databas kopplas mot en hemsida som fungerar som användargränssnitt. Innan jag satte igång med arbetet att skapa databasen som kan ses som grunden i hela projektet drog jag upp riktlinjer tillsammans med uppdragsgivaren från Studiefrämjandet Åke Olsson och andra inblandade. Det första delmålet i projektet var att bestämma mig för vilken databashanterare jag skulle använda mig av och hur databasen skulle designas. Därefter på vilket sätt databasen skulle kopplas till hemsidan. Jag har under hela projektet haft som mål för ordlistan att den skall vara så enkel som möjligt att använda sig av för att så många som möjligt oberoende av datorvana ska kunna ta del av den. Detta eftersom många av de som kan tänkas besöka hemsidan är äldre och mindre datorvana. Detta mål genomsyrar hela projektet eftersom även de som skall administrera ordlistan inte heller besitter några större IT kunskaper. Funktioner som jag skall implementera i projektet är en väl strukturerad och lättnavigerad ordlista. En sökfunktion för att underlätta sökningen av specifika samt ett administreringsverktyg. 2
2 Teori 2.1 HyperText Markup Language (HTML) Den här rapporten har inte för avsikt att gå in speciellt djupt på hur HTML fungerar eftersom det kan ses som för grundläggande. Kortfattat är HTML ett språk för att strukturera bland annat text och bilder på en hemsida. HTML byggs upp med så kallade taggar. En paragraf till exempel skall börjas med sin starttagg <p> och avslutas med sin stopptagg </p>. Mellan dessa taggar skriver man sedan texten som skall visas på hemsidan. HTML kod kan skrivas i det enklaste textredigeringsprogrammet men för att tolka koden kör man den genom en webbläsare. 2.2 Extensible HyperText Markup Language (XHTML) XHTML är vidareutvecklingen av HTML. Ett stort problem med HTML är att det kan skrivas och tolkas på olika sätt. Det kan finnas betydande skillnader hur en hemsida visas i två olika webbläsare. Skillnader finns inte bra mellan olika utvecklares webbläsare utan också mellan olika versioner av samma webbläsare. Vad som är korrekt kod kan skilja sig mellan webbläsarna. Där vissa webbläsare visar sig vara känsligare än andra. I XHTML har man därför satt upp regler för hur man skall skriva koden för att den skall tolkas lika av alla. Dessa regler innefattar till exempel storleken på bokstäverna i koden och hur man placerar taggarna i förhållande till varandra. Jag har valt att försöka följa dessa regler så gott jag kunnat för att minska risken att sidan tolkas fel i existerande och framtida webbläsare. Det finns ytterligare saker som skiljer XHTML från HTML men eftersom jag inte använder mig av dessa i projektet så tar jag inte heller upp dem här. 3
2.3 Cascading Style Sheets (CSS) CSS används för att på ett enkelt och strukturerat sätt styra utseendet på webbsidor. Med CSS kan man till exempel ändra typsnitt och bakgrundsfärger. Detta genom att man med CSS kan bestämma attribut till elementen i HTML. Innan man började använda sig av CSS satte man elementens attribut direkt i HTML taggen. Nu sparar man oftast sina inställningar i ett CSSdokument där man delar in dem i olika klasser. Detta medför att det är betydligt enklare att återanvända dem. Ett exempel när CSS används är när man skall bestämma hur ett textstycke på hemsidan skall formateras. Dessa inställningar kan sparas som en klass i CSS filen. Klassen kan man sedan implementera på textstycken som skall ha den formateringen. CSS kan på detta sätt spara mycket tid när man förändrar eller skapar hemsidor. 2.4 Hypertext Preprocessor (PHP) PHP är ett scriptspråk som är mycket likt högnivåspråk som C++ och Java till syntaxen. PHP koden bäddas in i HTML dokumentet och tillåter programmeraren att skapa dynamiska hemsidor som kan genereras beroende på situation. De båda språken samkörs samtidigt och kan kommunicera med varandra. Till skillnad från andra språk för webben exekveras all kod på server istället för hos användarens webbläsare. Detta gör att man har möjlighet att dölja all kod på hemsidan. Till exempel så kan HTML kod skicka information till PHP kod. Det är PHP som i mitt projekt är länken mellan hemsidan och databasen eftersom HTML själv inte klarar av sådana operationer. Ett exempel på det är när man söker efter ord i ordlistan med hjälp av sökverktyget. Då matar man in sin söksträng i ett formulär som är uppbyggt av HTMLkod. När man sedan trycker på knappen för att starta sin sökning skickas data man matat in till ett PHP script som söker i databasen och tar fram resultatet. PHP scriptet kan sedan generera HTML kod där resultatet skrivs ut. PHP script kan även förändra en sidas utseende på andra sätt. Eftersom PHP inte skiljer sig mycket åt från högnivåspråken så innehåller det kommandon som till exempel slingor och villkor som kan vara användbara. Med en if sats kan man ställa villkor, vilket kan vara till använd 4
ning om man vill att en hemsida till exempel skall kunna ha olika utseende beroende på vem som är inloggad. 2.5 Databaser När man talar om databaser så menar man antingen en mängd data som är strukturellt lagrade för att man lätt skall kunna hitta det man söker. Eller så talar man om den programvara som man använder för att strukturera data med, vilket benämns databashanterare. De databaser som används mest i dag är relationsdatabaser, det är även en sådan som används i examensarbetet. Relationsdatabaser är uppbyggda av indexerade tabeller innehållande kolumner och rader. Informationen sparas i tabellernas datafält och det går väldigt smidigt att söka efter och kombinera information. Det finns idag en mängd olika relationsdatabaser att välja mellan. De mest kända är DB2 från IBM, Oracle från Oracle, SQL Server från Microsoft samt open source alternativet MySql. Dessa databaser skiljer sig i både prestanda och inte minst i pris. Valet av databas skall grundas efter vad man skall använda databasen till och hur mycket data som skall lagras. 2.6 ER-diagram Innan man börjar med att konstruera en relationsdatabas så är det en fördel att sätta upp ett så kallat ER diagram för att lättare se relationer mellan de olika entiteter som databasen skall skapas utifrån. En entitet kan förenklat beskrivas som substantiv. T ex ort och ord som används i mitt projekt. Relationerna kan istället ses som verb. För att öka förståelsen så visar vi på hur det skulle se ut i ett ER diagram om man skulle beskriva att en ort kan ha ord kopplade till sig. Bild 2.6.1 : Exempel på ER diagram Till dessa entiteter kan man sedan fästa attribut. Attribut kan ses som data som vi har samlat om entiteten. Till exempel så kan ju ett ord ha 5
attribut som svenskbetydelse och engelskbetydelse om man skall skapa en svensk engelsk ordlista. 2.7 SQL Bild 2.6.2 : Exempel på ER diagram med attribut Utifrån entiteterna och dess attribut skapar man sedan tabellerna till sin databas. Om vi utgår från exemplet ovan så skulle tabellen ord innehålla tre stycken kolumner. En för svenskbetydelse och en för engelsk betydelse. För att relationen mellan ord och ort skall fungera riktigt behövs även en kolumn för ort som kan kopplas ihop med tabellen för entiteten ort. Gemensamt med de flesta relationsdatabaser är att man använder språket Structured Query Language (SQL) för att söka i dem eller förändra dem på något sätt. Nedan följer några exempel för att öka förståelsen hur SQL kod används. Vi säger att vi har en databas som vi döpt till ord. I ord lagrar vi ord på dialekt, dess formella betydelse samt varifrån de kommer. Vi behöver då tre tabeller som vi döper till ort, dialektalbetydelse och formell betydelse. Låt oss nu ställa en SQL fråga som lägger till ordet Pära som betyder Potatis på dialekt i byn Gnarp. INSERT INTO ORD (ort, dialektalbetydelse, formellbetydelse) VALUES (`Gnarp, `Pära, `Potatis ); Om man studerar SQL koden så märker man att allt är rätt logiskt. Vi ska lägga in någonting i ord och dess tabeller. Sedan skriver man i värdena på samma sätt som ovan. Det är viktigt att man inte byter plats på värdena för då kan data hamna på fel ställe. Genom att ändra den första termen INSERT INTO kan man ställa andra sorters frågor till databasen. Några SQL frågor som används i projektet 6
är SELECT, DELETE och UPDATE. Med dessa kan man i ordning ta fram, ta bort samt uppdatera information i databasen. För att ytterligare specificera sina sökningar tillåter SQL att man använder sig av villkor som man kan använda sig för att urskilja data i en och samma tabell. 7
3 Metod 3.1 Databasen Under ett möte med Åke Olsson började riktlinjerna för databasstrukturen att ritas upp. Önskemål fanns att man på första sidan skulle mötas av till exempel en klickbar karta över Hälsingland. Kartan skulle vara uppdelad i landskapets kommuner. I det slutgiltiga projektet används en vanlig meny i stället för en karta. Men det är inga problem att ersätta den med en karta om man hittar någon passande som man kan få rättigheter till att använda i framtiden. Under varje kommun ville man att ha ytterligare en nivå för att skilja dialekterna ytterligare. Den nivån skulle bestå av kommunens orter. Något som visade sig vara nödvändigt eftersom det fanns material att tillgå från olika orter i samma kommun. Under varje ort ville man sedan att orterna skulle ha sin egen ordlista. Ordlistorna skulle innehålla översättningar från dialekt till rikssvenska. Men Åke framhävde också vikten av att man skulle kunna höra ordet uttalas av någon på riktig dialekt. Därför behövdes även en ljudfil kopplas till alla ord i ordlistan. I den sen senare delen av projektet kom önskemål på att utöka tabellen innehållande orden med kolumner för att koppla bild, kommentar och särskild kategori till de enskilda orden. Valet av databas styrdes av vad som fanns tillgängligt på webbhotellet som Studiefrämjandet hade valt som värddator för Helsingespråket. Med tanke på databasens relativt enkla komplexitet och att kostnaden inte fick bli allt för hög, så passade open source lösningen MySql som webbhotellet använder sig av bra. Vi diskuterade en lösning med Microsoft Access som vad den andra databashanteraren som webbhotellet stödde till en början. Access är en användarvänligare men inte lika kraftfull databas som MySql. Valet mellan databaserna blev helt upp till mig. Där föredrog jag MySql eftersom jag har haft goda erfarenheter när jag arbetat med det tillsammans med PHP tidigare. Programmeringsspråket PHP fungerar som min koppling mellan databasen och hemsidan. 8
3.2 Ordlistan Hur ordlistans struktur kommer att se ut beskrivs i kapitel 3.1. Här beskrivs den funktionalitet som önskas och hur jag tänkt för att lösa den. Det är tänkt att man skall kunna klicka sig först in på de olika kommunerna för att där kunna välja från separata ordlistor tillhörande kommunens orter. Vi diskuterade under ett senare möte med Åke Olsson och Ljusdals museum hur ordlistan skulle se ut. En sak de frågade på hur möjligheterna var att man lätt skulle kunna hoppa mellan olika ordlistor och till exempel titta om det fanns andra betydelser på ett ord i någon annan dialekt. Ordlistorna kommer att vara separata för varje ort. Vi skissade fram en layout på ordlistan som jag senare i projektet blev tvungen att ändra allt eftersom nya önskemål från uppdragsgivarna kom. Den dialektala betydelsen till vänster och bredvid dess formella betydelse, det vill säga vad ordet betyder på rikssvenska. Till detta skall sedan en ljudfil kopplas. Möjlighet ska sedan finnas att kunna klicka på orden för att få upp en ny ordlista över det valda ordet där man kan se om det finns andra betydelser av ordet på andra dialekter. Till en början var det tänkt att varje enskilt ord gavs en rad var på hemsidan där all information angående ordet skulle presenteras. Men allt eftersom mer information lades till varje enskilt ord så blev jag tvungen att ge varje ord större utrymme på hemsidan. För att man inte ska behöva rulla fönstret allt för mycket när en ordlista börjar innehålla många ord så behöver man något sätt att stycka upp den med. För att lösa det problemet har jag några alternativ. Att dela upp ordlistan i bokstavsordning och bara visa ord under en den valda bokstaven är ett sätt. Ett annat är att inte visa mer än en viss mängd ord per sida. Det vill säga att man löser det som de flesta sökmotorerna och delar upp resultaten över flera sidor. För att försäkra sig att komma runt problemet skulle det nog krävas att implementera båda alternativen. Designen kommer även den att ha betydelse till hur jag väljer att visa min ordlista. Eftersom jag funderar på att min sida inte skall kunna skrollas nedåt i all oändlighet så är det en stor fördel om jag styckar upp ordlistan. Detta trots att jag kan ha ett rullande fönster inbäddat i hemsidan. 9
3.3 Inloggning / Administrering Det kanske största problemet i projektet var hur administreringen av databasen skulle skötas. Mitt mål var från början att de som skulle få som uppgift att fylla databasen med information inte skulle behöva någon speciellt hög datakompetens. Med det menar jag att de inte skulle behöva förstå sig på hur man sköter, som i det här fallet en MySqldatabas. Att administreringen skulle skötas via webbsidan var inte helt självklart. Men det har sina fördelar eftersom administratörerna då kan sköta hemsidan utan att behöva ha något separat administreringsverktyg. Tanken var ge administratörerna en större flexibilitet genom att låta dem uppdatera databasen med endast kravet att ha tillgång till en dator med Internetuppkoppling. En nackdel är att säkerheten kan bli lidande. För att vem som helst inte ska kunna få kontroll över sidan och kunna administrera databasen så krävdes ett inloggningssystem som inte skall gå att komma runt. Där administratörerna då kan logga in med sina användarnamn och lösenord för att få tillgång till sidans administrativa delar. För att säkerheten ska bibehållas så kommer det att bli viktigt att det byggs upp en policy över hanteringen av dessa lösenord och hur säkerhetskopieringen sköts så att inte någon illasinnad utomstående kan få tillgång till att till exempel radera databasen. Hur skapar man ett användarvänligt gränssnitt för administration var nästa fråga. Till en början så hade jag tänkt mig att ha det på en separat sida där man skulle mata in information och välja vart den skulle hamna med hjälp av till exempel en rullgardinsmeny. Problemet jag insåg var att överblicken skulle bli lidande. Att radera saker ur databasen skulle också lätt kunna bli förvirrande eftersom man inte direkt kan se att rätt ord tagits bort. Jag insåg därför att administration borde skötas på ett annat sätt. Istället för att ha administreringen på en enskild sida kom jag fram till att jag skulle sprida ut den över sidan och låta den falla in naturligt i informationen. Verktygen för att lägga till nya orter och ord skulle hamna på sina tillhörande sidor på sajten. Idén för att radera information i databasen fick jag från nätets webbaserade e post klienter där man ofta har en ta bort knapp intill varje meddelande. Det vore praktiskt och man fick en större översikt över vad man höll på med. På det sättet tänkte jag att risken för misstag vid radering av poster i databasen skulle minimeras. 10
3.4 Sökmotorn Trots upplägget av ordlistan med indelning av orden i bokstavsordning så fanns behovet av ett system för att enkelt och snabbt ta fram det ord som användaren letar efter. För att åstadkomma detta började jag titta på hur jag skulle kunna lägga till en sökfunktion till databasen och hur avancerad den skulle vara. På grund av att de dialektala orden ofta kan vara svåra att stava så har jag valt att de inte skall vara krav att i sökmotorn skriva hela ordet. Mitt mål är att sökmotorn skall hitta alla ord som instämmer med söksträngen, samt de ord som instämmer med söksträngen men har ett obestämt antal bokstäver mer i högerled. Till exempel så kommer man att hitta ordet potatis både när man matar in potatis och när man matar in pot. För att minska antalet orelevanta svar så funderar jag på att dela upp sökningen i två olika sökmotorer. En sökmotor som söker efter den dialektala betydelsen av orden samt en annan för den formella betydelsen. I frågan hur sökmotorn skall se ut så hade jag till en början skissat på två olika sökfält för sökning efter dialektal respektive formell betydelse. Efter att provat lite gick jag istället över till att bara ha ett sökfält, med en enkel meny där man får klicka i vad man söker efter. En av anledningarna var att om man har två stycken formulär på samma sida så blir det problem om man vill skicka sin söktext genom att trycka på enterknappen istället för att använda sig av musen. Sen tycker jag även att det blir överskådligare med bara en sökmotor, och vill man i framtiden utveckla den så behöver man bara modifiera en i stället för två. Det kommer att uppstå vissa problem som jag behöver se över. Vad skall till exempel hända om man skriver in en tom söksträng. Med den lösning jag beskrev tidigare att man inte skall behöva skriva in ordet helt så finns risken att hela ordlistan kommer att skrivas ut. Hur skall menyn fungera, skall det vara möjligt att söka på båda samtidigt eller bara en i taget. Mitt mål är att man skall kunna söka på båda samtidigt. 11
4 Konstruktion 4.1 Databasen Utifrån de önskemål beskrivna i kapitel 3.1 som Åke Olsson gav mig kunde jag börja skapandet av ER diagrammet vilket skulle stå som grund till databasen. Av den information jag fick tolkade jag att det behövdes en geografisk entitet som i mitt fall fick bli ort. Till ort valde jag att koppla två stycken attribut. Ett för ortens namn och ett för vilken kommun orten tillhör. Detta gör att det blir enkelt att sedan på hemsidan visa rätt orter under respektive kommun. Jag hade också kunnat skapa en entitet kommun där man hade kunnat lagra de kommuner som har orter med ordlistor under sig. Fördelen med det hade varit att jag senare på hemsidan kan lista endast de kommuner som haft information kopplat till sig. Nu har jag valt att ha en meny över kommunerna som alltid listar samtliga kommuner för att förenkla för en framtida implementering av en klickbarkarta över Hälsingland. Därför väljer jag att inte ha någon egen entitet för kommun. Som nyckelattribut satte jag ortens namn. Med nyckelattribut menas att det inte får förekomma två eller flera identiska i det här fallet orter. Eftersom ordlistan är begränsad till Hälsingland så ser jag inte det som något problem. Bild 4.1.1 : Er diagram 1. av databasen. Enligt önskemålen skall varje ort ha en ordlista kopplad till sig. I ERdiagrammet kan man se det på det viset att en ort har ord. Det vill säga att varje ord är kopplad till en ort. På det sättet kan man sedan ta fram rätt ord till rätt ort. Nästa steg blir därför att koppla till en ny entitet ort med relationen har till entiteten ort. Till ord behövs ett antal attribut kopplas. Enligt beskrivningen av databasen skall varje ord ha en dialektalbetydelse, en formellbetydelse samt en ljudfil kopplad till sig. Dessa tre kan ses som självklara eftersom det är dessa tre som kommer att visas i ordlistan. Vi behöver dock två stycken attribut som inte kommer 12
att synas för sidans besökare. Eftersom inget av de redan nämnda attributen passar till att vara nyckelattribut lägger vi till ett attribut id. Detta id kommer att vara olika för varje ord som läggs till databasen. För att förenkla det har jag valt att sätta attributet id till auto_increasement, vilket medför att kolumnen kommer att fungera som en räknare. För varje rad som läggs till kommer värdet i kolumnen id att öka med ett. Bild 4.1.2 : Er diagram 2. av databasen. Eftersom sidan använder sig av inloggning med användarnamn och lösenord krävs det att vi lägger till stöd för det i databasen. Jag skapade därför en ny entitet i diagrammet med namnet användare. Varje användare skall ha ett unikt användarnamn samt ett lösenord. Dessa egenskaper sätts till entiteten användares attribut. Det slutliga ER diagrammet ser ut enligt nedan. Sent i projektet kom nya önskemål om att kunna lägga till ytterligare information till varje ord från uppdragsgivaren. Följden av detta blev att jag lade till attribut för kommentar och bildfil till entiteten ord. Jag blev dessutom tvungen att lägga till ytterligare en entitet kategori kopplad till ord för att underlätta administreringen av kategorierna. Bild 4.1.3 : Er diagram 3. av databasen. 13
Utifrån det slutgiltiga ER diagrammet skapade jag sedan tabellerna till databasen. ORT Namn Kommun Tabell 4.1.4 : Tabellen ort i den slutliga databasen. ORD id ort dialektalbetydelse formellbetydelse ljud Tabell 4.1.5 : Tabellen ord i den slutliga databasen. ORD forts. bild kategori kommentar Tabell 4.1.6 : Fortsättning på tabellen ord i den slutliga databasen. KATEGORI Kategori Tabell 4.1.7 : Tabellen kategori i den slutliga databasen. ANVÄNDARE User lösenord Tabell 4.1.8 : Tabellen användare i den slutliga databasen. 4.2 Ordlistan Ordlistorna i det slutgiltiga projektet delas upp på ortnivå precis som sagts tidigare. Under varje kommun listas de orter som lagts in i databasen. Detta har lösts genom att man vid valet av kommun skickar med en variabel innehållande kommunens namn. Variabel tas om hand av ett php script som sedan använder sig av den för att ställa en SQL fråga mot databasen. På så sätt tas de orter som är kopplade till kommunen i tabellen ort fram 14
På samma sätt går det sedan till när man väljer ort. Skillnaden är då att variabeln som innehåller ortens namn jämförs mot tabellen ord istället, för att se vilka ord som är kopplade till den valda orten. Ett problem jag hade med min version av PHP var att variabler som avslutades med å,ä eller ö skickades utan den sista bokstaven. Till exempel lagrades Bergsjö som Bergsj vilket medförde att inga ord hittades. Detta kunde lösas genom att jag använde mig av en funktion i SQL som tillät mig att använda mig av så kallade jokertecken i sökningen. Dessa kunde jag implementera efter sista bokstaven av orten i söksträngen. På så sätt kunde Bergsj kopplas till Bergsjö genom att söksträngen automatiskt omvandlas till Bergsj*. Detta är inte helt optimalt eftersom om det skulle finnas en ort Bergsjön så skulle även dess ord tas med i svaret. Förhoppningsvis kommer buggen att försvinna i framtida versioner av PHP. Orden listas sedan i bokstavsordning tillsammans med dess betydelse, en kort kommentar, kategori samt länkar till ljud och bildfil om sådana finns. Dessutom sparas ordets id i en osynlig variabel, detta för att kunna användas senare i administreringen. Ordlistans formatering har styrts av mängden attribut som kopplats till varje ord. För att få plats med alla så har jag valt att varje ord med tillhörande synliga attribut skrivs ut över flera rader för att få plats hemsidan. Samtidigt minskade jag antalet ord som visas på varje sida på grund av att jag inte ville att det skulle bli onödigt mycket rullande på hemsidan. Samtidigt tog jag bort möjligheten för att välja om ordlistan skulle sorteras efter den dialektala eller den formella betydelsen. Istället sorteras alltid ordlistan efter den dialektala betydelsen. Andledningen är att den funktionen känns mindre nödvändig nu när mindre ord skrivs ut per sida. För att enkelt kunna se om ett ord dialektalt eller rikssvenskt har andra betydelser på andra dialekter så finns det möjlighet att klicka på orden. Då skickas en variabel innehållande ordet till en ny sida som använder variabeln i en SQL fråga mot databasen för att se om ordet finns i någon annan orts ordlista. Från den sidan kan man sedan klicka sig vidare i databasen enligt samma princip. För att inte få en enda lång lista med ord så har jag valt att stycka upp de enskilda ordlistorna i bokstavsordning. Dessutom har jag satt en gräns på hur många ord som skall visas per sida i ordlistan. Finns det fler ord under en bokstav än vad jag tillåter så skapas automatiskt en till sida under bokstaven. Funktionen som styr vilken bokstav som skall väljas och vilka ord som skall visas är relativt enkel. När man väljer en 15
bokstav från länkarna som jag lagt in på sidan för ordboken så skickas en variabel innehållande den valda bokstaven med. Kommer besökaren från valet av ort sätts automatiskt variabeln till a. När sedan SQL frågan tar fram orden under den valda orten sätts ett argument att begynnelsebokstaven skall vara den medskickade variabeln för vald bokstav. På detta sätt visas endast de ord som har den satta begynnelsebokstaven. Skulle inga ord finnas med den valda bokstaven visas ett meddelande som förklarar att ordlistan saknar ord under den bokstaven. För att stycka upp ordlistan ytterligare har jag valt att använda mig av ett liknande system som det sökmotorerna använder sig av. Det vill säga att jag bestämmer hur många ord som skall listas per sida. Därefter delas sidan upp i så många sidor som behövs för att visa samtliga ord. Detta har jag löst genom att först räkna antalet ord under vald ort och bokstav. Summan sparas i en variabel. I en annan variabel sparar jag värdet för hur många ord som skall visas per sida. Ändrig av hur många ord som skall listas per sida ändras genom att ändra värdet för variabeln i källkoden. Genom att dividera dessa två värden tar jag sedan fram hur många sidor som behövs och skriver ut länkar till dessa. Dessa fungerar sedan ungefär på samma sätt som bokstavslänkarna. För att alla ord skall listas i fallande ordning genom alla sidorna använder jag mig av kommandot limit i SQL frågan. Med limit kan man begränsa antalet resultat. En ny variabel benämnd offset skapas. Dess är lika med variabeln för vald sida minus ett multiplicerat med antal rader jag valt att ha per sida. Genom att sätta in denna variabel i SQL frågan tillsammans med antalet rader per sida tas rätt ord fram på rätt sida. 4.3 Inloggning / Administrering För att få tillgång till de administrativa verktyg som finns på sidan krävs det att man loggar in på sidan. Detta gör man via ett inloggningsformulär där man får skriva in användarnamn och lösenord. En sql fråga ställs mot databasen som kontrollerar mot tabellen användare om någon sådan användare med sådant lösenord existerar. Är inloggningen korrekt får man administrativa rättigheter annars visas ett meddelande att man skrivit in fel användarnamn eller lösenord. Nya användarnamn och lösenord kan bara läggas in av databasens administratör manuellt. Orsaken till detta är för att öka säkerheten. 16
Det som händer när man loggar in är att en global variabel, en så kallad session sätts till det booleska värdet sant. Skillnaden mellan globala variabler och vanliga är att de förstnämnda kan nås på alla sidor som använder sig av sessioner medan vanliga variabler endast existerar på den sida de skapats. På varje sida som kan administreras kontrollerar ett php sript sedan om den globala variabeln är satt till sant eller falskt. Är den satt till sant visas administrationsverktygen annars inte. För att öka säkerheten testas all kod som skriver eller tar bort information från databasen om man har administrativa rättigheter eller inte. När man loggat in på sidan som administratör får man tillgång till administrationsverktygen. Administrationsverktygen är inbäddade i hemsidan och visas bara för inloggade användare. Klickar man in sig på ordlistan och väljer valfri kommun kommer man till den första administrerbara delen. Här kan man lägga till och ta bort orter under kommunen. När man väljer att lägga till en ort fyller man i ortens namn i fältet och klickar på lägg till. Informationen man fyllt i skickas till ett php script där två stycken sql frågor ställs mot databasen. Först kontrolleras att inte orten redan finns inlagd i tabellen ort. Om inte så läggs den nya ortens namn in i tabellen ort tillsammans med information om den kommun orten tillhör. Kommunens namn läggs till automatiskt med hjälp av en variabel som sätts till den kommun man valt. I listan över kommunens orter finns en knapp för varje ort där man kan välja att ta bort orten. Borttagningen av orter fungerar ungefär på samma sätt som att lägga till orter. Ortens namn skickas med när man klickar för att ta bort en ort till ett php script. Där ställs två stycken sql frågor mot databasen. Först kontrolleras tabellen ort att det inte finns några ord kopplade till den valda orten. Om det inte är fallet tas orten bort direkt. Jag har valt att inte ha någon kontroll här eftersom det går så snabbt att lägga till orten igen. Finns det ord kopplade till orten, det vill säga om orten har en ordlista så ställs en fråga till användaren om man verkligen vill ta bort orten och dess ordlista. Väljer man nu att ta bort orten så tas inte bara orten bort ur tabellen ort. Dessutom kommer alla ord i tabellen ord som är kopplade till databasen att tas bort. 17
Väljer vi sedan en ort så kommer vi till sidan för dess ordlista. Administreringen har samma upplägg som för orterna med några tillägg. Precis som med orterna kan man ta bort ord ur ordlistan. Klickar man på ta bort knappen tas ordet direkt bort från tabellen ord i databasen. Skillnaden här är att vi använder oss av ordets id för att särskilja det från andra likadana ord från andra dialekter i databasen. Jag har också lagt till en knapp för att ändra ord. Detta var något som kom in sent i processen. Eftersom arbetet med att skriva in orden startade tidigare än uppsamlandet av ljud behövdes en sådan funktion så att ljuden kunde kopplas till orden vid ett senare tillfälle. Ändra funktionen fungerar så att id tillhörande ordet skickas vidare till en annan sida innehållande ett formulär. Med ordets id tas där all befintlig informationen fram med en sql fråga mot databasen. Informationen sätts till variabler som jag sedan använder för att fylla i formulärets fält så man kan se vad dom innehåller sen tidigare. När man gjort sina ändringar skickar man vidare formulärets information till ytterligare ett php script. Där används den nya informationen för att uppdatera ordet via funktionen update i SQL. Under hela förloppet följer variabeln id med för att rätt ord skall ändras. Det går därför inte att ändra id. Att lägga till ord skiljer sig lite från att lägga till orter. På sidans nedre del visas administreringsverktyget för att lägga till ord om man har rättigheter till det. Väljer man att lägga till ett ord så fyller man i fälten och klickar på submit knappen. Det är inget krav på att fylla i alla fält eftersom sidan formaterar sig automatiskt på rätt sätt om man till exempel hoppar över att fylla i kommentarfältet. Fältet för kategori är lite speciellt. I det fältet får man välja kategori från en meny. Denna meny hämtas från tabellen kategori som lades till i databasen sent. För att administrera menyn klickar man på den närliggande länken. Man kommer då till en sida där alla menyalternativ listas. Här kan man lägga till, ändra och ta bort kategorier som listas i menyn. Detta fungerar på samma sätt som liknade delar på hemsidan. Noterbart är att om man ändrar en kategori så kommer alla ord under den kategorin att få den nya kategorin genom att dess kategoriattribut ändras. Man kan heller inte ta bort kategorier som är kopplade till ord. Skall man ta bort en kategori får man först ta bort samtliga ord den är kopplad till. 18
Slutligen när man valt kategori och fyllt i all information om ordet och klickar på submit knappen så läggs ordet till i databasen under rätt ort. 4.4 Sökfunktionen Sökfunktionen är uppbyggd av två stycken filer, sök.php och sökd.php. När man trycker på sök i menyn öppnas den förstnämnda filen. Sök.php innehåller sökformuläret som används för sökning i databasen. I formuläret ingår ett sökfält där ordet man söker skall matas in. Användaren får även möjlighet att välja om han vill söka på dialektal eller formellbetydelse. Sist får användaren även välja inom vilken kategori som sökningen skall göras för att minska antalet träffar. I sökd.php tas sedan informationen som man matat in upp och bearbetas. Där kontrolleras också att man fyllt i formuläret korrekt. Enkla villkor kontrollerar att inte söksträngen är tom eller att man inte valt något sökområde. Har man glömt något av dessa så skickas man tillbaka till sök.php där ett felmeddelande genereras. Är däremot sökformuläret korrekt inmatat kommer sökresultatet att visas. Beroende på om man valt att söka på dialektalbetydelse, formellbetydelse eller båda så skicka man till en sökmotor. Det finns alltså tre sökmotorer i sökd.php, en för varje av ovan nämnda val. Sökmotorn består av en sql fråga som arbetar mot tabellen ord i databasen. Utifrån val av sökområde letar den efter den inmatade söksträngen i kolumnerna dialektalbetydelse, formellbetydelse eller i båda. Sökmotorerna begränsar sig med att endast visa de ord som tillhör den kategori användaren valt. För att lättare hitta ord som är svåra att stava till har jag valt att sökmotorerna inte skall vara så känsliga. De kommer att hitta ord som både är exakta och som har bokstäver efter den söksträng som matats in. Till exempel så kommer söksträngen sko förutom att visa ordet sko, även visa ordet skola. Hittar inte sökmotorn några ord på söksträngen skrivs ett meddelande ut att inga ord kunde hittas. 19
5 Resultat 5.1 Design Bild 5.1.1 : Hemsidans slutliga utseende. Hemsidan är design kan ses på bilden ovan. Under hemsidans övresta bild finner vi menyn som används förr att navigera sig fram mellan sidans olika delar. Under menyn i den stora vita ytan visas den information man valt att se i meny. Denna yta kan vara större än vad som visas. Om så är fallet skapas automatiskt en rull list för att man skall kunna ta del av den information som inte får plats. Den mörka ytan till höger på 20
sidan är till för att man i framtiden skall ha möjlighet att placera eventuella sponsorer på. 5.2 Ordlistan Väljer man ordlista i huvudmenyn kommer man till en ny meny där man får välja på från vilken kommun orten man är intresserad av ligger i. Samtliga Hälsinglands kommuner listas här. Bild 5.2.1 : Dialog vid val av ort. Efter valet av kommun skickas man till en ny meny där orter under kommunen listas. Det är endast de orter som har en egen ordlista som listas. Bild 5.2.2 : Dialog vid val av kommun. Nu kan man välja vilken orts ordlista man vill ta del av genom att klicka på något av alternativen som listas. När man gjort sitt val skickas man direkt till den valda ortens ordlista. 21
Bild 5.2.3 : en enskilda ortens ordlista. Ordlistan formateras enligt bild ovan. Anmärkningsvärt är att inga ljud eller bilder finns kopplade till orden. Hade så varit fallet hade automatiskt länkar skapats och visats på hemsidan. Alfabetet i ovankant av bilden används för att välja under vilken bokstav man söker. I nederkant listas antalet sidor med ord under vald bokstav som man kan klicka sig fram mellan. De dialektala och formella orden är klickbara. Klickar man på ett ord kommer en ny ordlista fram som listar eventuella översättningar av ordet på andra dialekter i databasen. 22
Bild 5.2.4 : Ordlista över valt ord. 5.3 Inloggning / Administrering För att logga in sig på sidan väljer man logga in i huvudmenyn. Man skickas då till ett inloggningsformulär där man skall skriva in sitt användarnamn och lösenord. Bild 5.3.1 : Formulär för inloggning på hemsidan. Loggar man in med korrekt användarnamn och lösenord ändras logotypen på hemsidan och man kan i rött läsa att man har administreringsrättigheter på den. Dessutom får man tillgång till de administreringsverk 23
tyg som finns. Väljer man nu ordlista i huvudmenyn och sedan en kommun kommer man till det första verktyget. Bild 5.3.2 : Administrering av orter i databasen. 24
Med administreringsrättigheter kan man nu ta bort och lägga till nya orter. Ett administreringsverktyg har dessutom lagts till orternas ordlistor. Bild 5.3.3 : Administrering av ord i databasen. Det finns nu möjlighet att lägga till, ändra och ta bort ord. För att lägga till ett ord fyller man i de fält man har information till. Man behöver till exempel inte ha en kommentar kopplad till ordet. Kategorier väljs från en förutbestämd lista. Vill man lägga till, ändra eller ta bort en kategori klickar man på administrera. 25
Bild 5.3.4 : Administrering av kategorier i databasen. De kategorier som är inlagda i databasen listas då på skärmen tillsammans med verktyg för att administrera dem. Noterbart är att om man väljer att ändra en kategori så ändras kategorin för alla ord som är kopplade till den. Man kan heller inte ta bort kategorier som är kopplade till ord. 26
Väljer man att ändra ett ord i ordlistan kommer man till verktyget för att ändra ord. Bild 5.3.5 : Ändring av ett ord i databasen. Administreringsverktyget för att ändra ord fungerar på samma sätt som det för att lägga till ord förutom att fälten redan är förskrivna med den information som redan finns om det specifika ordet. 5.4 Sökmotorn Sökmotorn hittar man under menyvalet sök i huvudmenyn. Man kommer där till ett sökformulär där man matar in det ord man vill söka på. Bild 5.4.1 : Formulär för databasens sökmotor. 27
I sökmotorn finns dessutom val för att söka ord på dialekt, rikssvenska eller båda. Dessutom måste man välja att söka efter ord inom en viss kategori. Bild 5.4.2 : Sökresultat från sökmotorn. Resultatet av sökningen listas sedan på hemsidan. Blir det för många sökresultat styckas resultaten upp för att bara visas ett bestämt antal per sida. 28
6 Slutsatser Syftet med projekt var att skapa en lättillgänglig och lättadministrerad databas för att dokumentera dialekter i Hälsingland. Om man ser till databasen så anser jag att jag lyckats rätt bra. Valet av att koppla databasen till en hemsida ökar tillgängligheten för allmänheten. Jag har dessutom försökt att göra sidan så lättförstålig som möjligt för användarna genom att försöka göra den så enkel som möjligt att navigera. Jag har även tänkt på att många av dem som kommer att intressera sig av sidan är äldre och har sämre syn. Därför har jag gjort så att all text på sidan är förstorbar utan att för den delen förstöra designen. Däremot kan jag tycka att jag borde ha arbetat lite mera på hur ljud spelas upp och hur bilder visas. Istället för att låta webbläsaren välja hur detta sker skulle jag ha kunnat göra detta lite smidigare genom att implementera uppspelningen/bildvisningen på ett bättre sätt i hemsidan. Den andra delen av projektet att skapa ett lätt hanterligt administrationsverktyg är jag ganska nöjd med. Även här har jag försökt att göra det så enkelt som möjligt eftersom de som har till uppgift att administera databasen inte har några större IT kunskaper. Eftersom inmatningen av ord till databasen redan är igång och flyter på bra så anser jag att jag har lyckats relativt bra. Det jag inte är nöjd med är effektiviteten. Det kan tyckas att jag borde ha arbetat fram ett snabbare sätt att lägga till ord. Till exempel att man på något sätt kunnat lägga till fler ord i taget, så kallad batchning. Till sist anser jag dock att jag lyckats med projektets mål som var att konstruera en databas över Hälsinglands dialekter med möjlighet att koppla ljud till. 29
7 (Eng. References) [1] World Wide Web Consortium (W3C), HyperText Markup Language (HTML) Home Page. Se www.w3.org/markup/. Hämtad 2005 09 15. [2] World Wide Web Consortium (W3C), Cascading Style Sheets HomePage, Se www.w3.org/style/css. Hämtad 2005 09 15. [3] PHP: Hypertext Preprocessor, PHP Manual, Se se2.php.net/manual/sv/introduction.php. Hämtad 2005 09 16 [4] Oracle, Glossary of Terms, Se http://www.orafaq.com/glossary/faqglosd.htm#database. Hämtad 2005 09 16. [5] Oracle, Glossary of Terms, Se http://www.orafaq.com/glossary/faqglosr.htm#relational_databa se. Hämtad 2005 09 16. [6] University of Missouri St. Louis, Entity Relationship Diagrams (ERD), Se http://www.umsl.edu/~sauter/analysis/er/er_intro.html. Hämtad 2005 09 17. [7] W3 Schools, Introduction to SQL), Se http://www.w3schools.com/sql/sql_intro.asp. Hämtad 2005 09 17. 30
Terminologi 31