Kapitel 10 Dokumentrepresentation Vi har tidigare sett hur rena textfiler (plain text) representeras för datorn. En teckenkodning ger varje tecken ett visst numeriskt värde, inklusive sådana kontrolltecken som nyrad. Vid teckenkodningar med högst 256 olika värden lagras dessa en i varje byte (som var och en kan ha 256 olika värden). För Unicode som har många fler värden lagras tecknen på något sätt där en del eller alla tecken tar upp flera bytes. När mer komplicerad information, som ordbehandlingstext, ljud, bild, film, databaser, program m. m. ska lagras kan det också ske i form av text på något sätt eller som binärfiler där de olika koderna inte har tecken som motsvarigheter. När texter lagras i filer eller sänds i kommunikation mellan datorer gäller det att avsändare och mottagare är överens om vilken kodning som används så att informationen tolkas som det var tänkt. 10.1 Uppmärkt text I många sammanhang är det vanligt att textfiler är uppmärkta med taggar som anger att en viss del av texten ska tolkas eller behandlas på ett visst sätt. Ett exempel vi har sett på det är HTML där uppmärkningen sker med starttaggar som <h1> och sluttaggar som </h1>. Ett helt uttryck som <h1>hej</h1> kallas för ett element, där elementets innehåll är»hej«. I andra sammanhang skulle man kunna tänka sig att andra egenskaper hos texten märktes upp, med helt andra taggar. I en del fall har man kanske anledning att märka upp varje ord med ordklass. I ett annat fall kanske man vill märka upp bara kapitel och stycken. I ett tredje fall kanske man vill visa exakt hur en viss utgåva av en tryckt skrift såg ut och märka upp sidor och rader. En uppmärkning av Röda rummet skulle kunna börja <rubrik>stockholm i fågelperspektiv</rubrik> <mening>det var en afton i början av maj.</mening> <mening>den lilla trädgården på... och blommor.</mening> Här är kapitelrubriken uppmärkt och dessutom meningar. Det finns taggar som visar var de uppmärkta delarna börjar och var de slutar. En uppmärkning som anger ordklass för alla ord skulle kunna innehålla t. ex. något som <pron>det</pron> <verb>var</verb> <art>en</art> <subst>afton</subst> <prep>i</prep> <subst>början</subst> <prep>av</prep> <subst>maj</subst><punkt>.</punkt> 10.2 HTML kommer från SGML Den här syntaxen med taggar med <> och / var inget nytt påhitt för HTML, utan använde sig av SGML (Standard Generalized Markup Language). Till SGML hör bland annat syntaxen med </> samt sätt att definiera olika märkspråk genom att tala om vilka element som kan förekomma och i vilka kombinationer. Till HTML-standarderna hör information om t. ex. att ett ul-element kan innehålla li-element men inte tvärtom, osv., och valideraren klagade om ni bröt mot några sådana regler. I praktiken är webbläsare förlåtande och gör det bästa den kan även när sidor inte är korrekt HTML, och många sådana fel ger det utseende man väntade sig i alla fall. Det går bra att låta bli att skriva ut sluttaggarna i en del fall. Istället för <ul > < l i >snipp </ l i > < l i >snapp </ l i > < l i >snut </ l i > </ ul > kan man skriva bara <ul > < l i >snipp < l i >snapp < l i >snut </ ul > 91
10. DOKUMENTREPRESENTATION Det är eftersom ett li-element inte får finnas inom ett annat li-element som sluttaggarna kan utelämnas. 10.3 SGML och XML SGML är en gammal standard med rötter från 1960-talet, och 1998 kom en variant, XML (Extensible Markup Language) inspirerad av den. XML är gjord för att vara enklare att tolka för program. T. ex. måste alla element alltid avslutas explicit. XML har blivit mycket populärt i en mängd sammanhang där man har strukturerad text. När nya märkspråk ska konstrueras så väljer man i allmänhet att använda XML. Då får man enhetlighet och kan använda sig av en mängd verktyg som analyserar och konverterar XML-filer på olika sätt. Sedan år 2000 har det gjorts varianter av HTML som gjorts som XML istället för SGML: XHTML. Den kommande HTML 5 liknar SGML, men är inte riktigt SGML, utan står på egna ben, som ett SGML-liknande märkspråk. (Vid sidan av den kommer det att finnas en XHTML5 som är XMLversionen av samma sak.) 10.3.1 Element, taggar och innehåll Ett elements innehåll kan i sin tur innehålla nya element. Ett litet exempel på texten»melker Melkersson«uppmärkt är <name><firstname>melker</firstname> <lastname>melkersson</lastname></name> I exemplet finns det ett name-element som i sig innehåller ett firstname-element och ett lastname-element. Element måste ligga helt inom andra element. Det går inte att låta dem korsa varandras gränser i stil med <kursiv>herr <name>melker</kursiv> Melkersson</name>. Här är det fel vid </kursiv> eftersom name-taggen inte har avslutats än. I XML är det skillnad på versaler och gemener i taggar. I XHTML ska taggarna skrivas med gemener. 10.3.2 Element med tomt innehåll I»traditionell«HTML finns det några element som man aldrig skriver sluttaggar för, eftersom innehållet alltid är tomt. Man använder t. ex. <br> för ett radbrott och <img...> för en bild, men avslutar aldrig dessa med </br> eller </img>. Det ingår i definitionen av HTML vilka element det är som alltid tar slut direkt så att man inte behöver skriva deras sluttagg. I XML måste alla element avslutas uttryckligen, så i XHTML måste även dessa element ha en sluttagg, men istället för <br></br> använder man då kortformen <br/>. 10.3.3 Attribut Ett element kan även innehålla attribut med värden. Exempel: <name type="person">melker Melkersson</name> Här har elementet ett attribut type med värdet person. Man använder dubbla eller enkla citattecken runt värdena. (I XML måste citattecken alltid vara med. I SGML behöver de bara vara med ifall det är några»konstiga«tecken i värdena. Det är ännu ett fall där XML har gjorts så att det ska vara extra lätt för program att tolka.) Ett annat sätt än det tidigare att märka upp en mening med ordklasser skulle kunna vara <w wc="pron">det</w> <w wc="verb">var</w> <w wc="art">en</w> <w wc="subst">afton</w> <w wc="prep">i</w> <w wc="subst">början</w> <w wc="prep">av</w> <w wc="subst">maj</w><punct>.</punct> Här användes en tagg w för ord (word) med ett attribut wc (= word category = ordklass). 10.3.4 Toppnivå Ett XML-dokument har bara ett element på toppnivån. Alla övriga element måste finnas i detta elements innehåll. (För XHTML är detta ett htmlelement.) Förutom element kan XML-dokument även innehålla en del annat som talar om hur dokumentet ska behandlas i vissa fall. Sådant står också inom <> men börjar med frågetecken eller utropstecken. I synnerhet ska en deklaration i stil med <?xml version="1.0" encoding="utf-8"?> komma allra först i dokumentet, före elementet på toppnivån. Detta visar vilken version av XML som används och vilken teckenkodning detta dokument använder. (Om inget sägs om detta så är det UTF- 8.) 10.3.5 Teckenreferenser och entiteter Man kan lägga in vilka tecken som helst genom att skriva deras Unicode-kod mellan &# och ;. Ett promilletecken ( ) kan man t. ex. vid behov beteckna med. Ofta använder man hexadecimala beteckningar istället som börjar med x. Då blir t. ex. promille istället. Du förväntas inte kunna räkna med sådana. Det räcker med att känna igen att referenserna kan se ut på den formen också. Entiteter använder också &; men däremellan skriver man istället ett namn, t. ex. för. Vilka entitetsnamn som finns är olika för olika slags XML-dokument, men alltid finns i alla fall & (&) < (<) 92
MIME > (>) ' (') " (") eftersom dessa tecken ingår i XML-syntaxen och därför kan vara besvärliga att få in annars i vissa fall. Observera att de numeriska teckenreferenserna alltid sker till Unicode-koder oavsett vilken teckenkodning som XML-filen använder. Även om man har t. ex. en Latin1-fil med <?xml version="1.0" encoding="iso-8859-1"?> så går det ändå att på detta sätt referera till vilka tecken som helst. 10.3.6 Olika XML-språk XML är liksom SGML inte ett märkspråk, utan ett sätt att definiera en mängd olika märkspråk som använder samma grundsyntax men helt olika uppmärkning. En definition av ett sådant språk anger inte bara vilka element som ska finnas, utan även hur de förhåller sig till varandra, t. ex. att en li kan finnas inne i en ul men inte tvärtom för att ta ett exempel från XHTML. Ett exempel som < l i > <ul >Funkar i n t e! </ ul > </ l i > är ogiltig XHTML. Men det är fortfarande välformad XML. Med välformad (well-formed) menas bara att man följer de allmänna syntaxreglerna för XML, som t. ex. att alla sluttaggar är avslutade. Med giltig (valid) menas att man följer de specifika reglerna för ett visst märkspråk. (Så för att vara giltig måste den till att börja med vara välformad.) 10.4 MIME Program som kommunicerar med varann behöver vara överens om hur data som de skickar mellan varann ska tolkas. När data skickas så följer det därför ofta med en etikett på vilken det står vad det är för slags data så att mottagaren ska få veta det. På sådana etiketter använder man ofta ett standardiserat format MIME för att beskriva olika format. Denna standard utvecklades först för datorpost, och förkortningen står för Multipurpose Internet Mail Extensions, men den används i andra sammanhang också. MIME-etiketterna har två delar med snedstreck emellan, t. ex. image/jpeg för en bild i JPEGformat, image/png för en bild i PNG-format osv. Den första delen anger vad det är för typ av format (som image för bilder) och den andra vilket specifikt format det är. Andra möjliga förled är bl. a. audio för ljud, video för video och application för diverse information som måste behandlas av något särskilt program, t. ex. application/pdf eller application/msword. Det är IANA som håller rätt på vilka beteckningar som är de officiella så att alla använder samma. Textfiler använder förleden text och i synnerhet kallas vanlig text text/plain. För text-typer kan man lägga till en specifikation av vilken teckenkodning som används på detta sätt: text/html; charset=iso-8859-1. Detta används till exempel i datorpost då det i brevhuvudet kan finnas en rad i stil med Content-Type: text/plain; charset=utf-8 som talar om att brevet innehåller ren text kodad med UTF-8. (Denna rad ser man vanligen inte, för program för att läsa datorpost brukar dölja sådana tekniska detaljer, men ha ett särskilt kommando som»visa hela huvudet«eller»visa original«som visar även detta.) Brev med bilagor har ett särskilt format där varje bilaga får en egen etikett om vad den har för format. (Mailprogrammet väljer ofta vad den skriver där utifrån filnamnet, så om filen heter foo.txt så får den en etikett text/plain, osv. MIME-typerna används även på webben. För»traditionell«HTML är MIME-typen text/html och för XHTML är det application/xhtml+xml. (Format som bygger på XML har +xml i slutet av sina etiketter.) Varje gång en webbserver skickar ut ett dokument till en webbläsare så skickar den först ut en innehållsdeklaration med en rad i stil med Content-Type: text/html; charset=utf-8 som talar om vad det är för slags data som den skickar ut. Med vår webbserver kan man styra om vad som sänds där i filen.htaccess. 10.4.1 Utan MIME då? Det finns ingen information i sig i filsystemet om vad de olika filerna är för slags dokument, så om man öppnar en fil från t. ex. filhanteraren så får den göra en mer eller mindre lyckad gissning om vad det är för slags dokument. Dels kan sådana program gå efter filnamnsändelsen och t. ex. utgå från att en fil foo.png är en bild i bildformatet PNG. Men den kan också titta inne i filen, i synnerhet på hur den börjar. Många format har filer som alltid börjar på samma sätt vilket gör dem lätta att känna igen. Ett skalprogram som känner igen filer på ett sådant sätt och beskriver innehållet är file. $ file rummet.txt japansk.txt ids1.pdf rummet.txt: UTF-8 Unicode text japansk.txt: ISO-8859 text ids1.pdf: PDF document, version 1.4 93
10. DOKUMENTREPRESENTATION Här kan man notera att för den ena textfilen här gissade file fel på vad det var för teckenkodning. 10.5 Komprimering av filer Om innehållet i en fil är repetitivt eller på andra sätt delvis redundant så går det att lagra samma information på mindre plats. I en vanlig textfil t. ex. så är en del ord och andra teckenföljder mycket vanligare än andra, och då kan man på olika smarta sätt se till att dessa vanliga teckenföljder lagras på mindre plats än en byte per tecken. Detta kallas att komprimera en fil. I GNU finns programmet gzip (GNU zip) för att komprimera. Filer som är komprimerade med gzip brukar ha filnamnsändelsen.gz och det normala sättet att köra gzip är med ett eller flera filnamn som argument varpå dessa filer ersätts med komprimerade versioner av samma filer. Med gunzip går man åt andra hållet, dvs.»dekomprimerar«eller packar upp den komprimerade filen. $ ls bar foo $ gzip foo $ ls bar foo.gz $ gunzip foo.gz $ ls bar foo Eftersom filnamn kan ha flera punkter är det bara att hänga på.gz på filnamnet även om det redan finns en punkt. Så den komprimerade versionen av ett Javaprogram space.java blir space.java.gz osv. I en komprimerad fil används alla möjliga värden 0 255 och innehållet är en binärfil som inte kan läsas direkt av något program som inte känner till just compress och gzip: gzip är ett fall där GNU inte helt efterliknar Unix. Det normala komprimeringsprogrammet i Unix var nämligen ett program compress som komprimerar med en annan metod. För GNU kunde man dock inte lagligen skriva en ersättning av det programmet eftersom den komprimeringsalgoritm som användes var skyddad av ett patent sedan 1985. Istället fick man lov att använda en annan metod. År 2003 gick det patentet ut, så nu finns fria program som implementerar den gamla algoritmen, men gzip fortsätter att vara det vanligaste sättet att komprimera filer i GNU. detta komprimeringsformat. När man ska använda sig av innehållet i den komprimerade filen är det dock inte nödvändigt att återskapa originalfilen på disken igen, utan man kan ta fram innehållet med zcat. Kommandot zcat foo.gz tar fram det ursprungliga innehållet i filen foo och skickar vidare det till standard output. Textfiler innehåller mycket redundans och blir oftast ungefär hälften så stora av att komprimeras. Många format på binärfiler, som PDF och olika bild- och ljudfiler, är redan komprimerade på ett eller annat sätt, och blir därför knappast mindre av en ytterligare komprimering. En del program dekomprimerar filer vid behov, det gör t. ex. Emacs om man öppnar en komprimerad fil. Den komprimering det handlar om här är sådan som går att vända tillbaka. Ingen information går alltså förlorad; den tar bara mindre plats att lagra. Man talar också om komprimerade video-, bild- och ljudformat där information går förlorad (destruktiv komprimering, lossy compression). De tar mindre plats än originalfilerna, men på bekostnad av att ha sämre kvalitet. 10.6 Filarkiv I många fall är det praktiskt att skapa ett filarkiv, dvs. en fil som i sig innehåller en mängd andra filer. Det kan t. ex. användas för att enklare skicka en hel mängd filer till någon annan i ett svep. Man kan packa upp filarkivet och därmed få fram de ingående filerna igen. I förra avsnittet talades det också om att packa upp, men då gällde det att packa upp en komprimerad fil för att få fram originalet igen, vilket inte är samma sak. I flera format av filarkiv ingår komprimering, men det normala filarkivformatet i Unix, tar, är inte komprimerat, utan ett arkiv är ungefär lika stort som de ingående filerna tillsammans. En sådan tarfil har filnamnsändelsen.tar och ofta komprimerar man den i sin tur och får då en filnamn som slutar med.tar.gz. För att hantera sådana filarkiv använder man kommandot tar. 1 $ tar -c -f texter.tar *.txt $ rm *.txt $ tar -x -f texter.tar Första väljaren är -c för att skapa ett arkiv (Create), väljaren -f ska ha ett argument som är arkiv- 1 Om man ska dela med sig av ett filarkiv till någon i MS Windows-världen kan det vara bättre att använda zip och unzip som använder ett annat format istället. Se deras mansidor! 94
Filarkiv filen (i detta fall texter.tar) och som argument ger man vilka filer och kataloger som ska läggas i arkivet (här *.txt). De ursprungliga filerna ligger kvar. I det andra fallet är förstaväljaren -x för att packa upp ett arkiv (extract). Filerna som togs bort med rm återställs. Med en väljare -v blir tar mer pratig (verbose) och talar om namnet på varje inblandad fil. Eftersom det är så vanligt att man komprimerar tar-arkiv med gzip så kan tar med -x ta hand om det steget själv, och det räcker med $ tar -xvf foo.tar.gz för att packa upp ett komprimerat tar-arkiv. I detta exempel fördes väljarna -x, -v och -f ihop. Då får man lov att sätta -f sist så att man kan ge ett argument till den väljaren. Den vanliga kombinerade ändelsen.tar.gz ersätts ibland med bara.tgz, speciellt i andra filsystem som inte klarar flera punkter i filnamnen. 95
Laboration 10: Dokumentrepresentation Redovisning Denna gång ska du skicka svar på frågorna i mail till Per igen, senast måndagen den 5/12. Med detta mail ska du också skicka en bilaga med ett komprimerat tar-arkiv som innehåller de filer som du ändrat i enligt instruktionerna. Texten med själva svaren kan ligga i huvuddelen av mailet, eller vara en bilaga den också, men är det en bilaga så se till att den skickas med en etikett som talar om att det är en text. (Så ska det bli automatiskt om du ger filen ett namn som passar en textfil.) Packa upp filerna De filer du ska använda i denna labb ligger i filarkivet /local/kurs/ids/xml.tar.gz. Packa upp det i din kurskatalog. Alla filer i filarkivet ligger i en katalog xml så du får en ny underkatalog med detta namn med filer som du ska använda i denna labb. (Gör ingen kopia av arkivfilen först.) Uppgift 10.1 Vad gav du för kommando för att packa upp filarkivet? XML i Emacs Öppna filen svt2.xml där i Emacs. Innehållet är tydligen en tevetablå i nåt XML-format. Uppgift 10.2 Vad har elementet på toppnivån i detta dokument för starttagg? Notera härnäst att det står (nxml Invalid) i informationsraden. Det första inom parentesen är som vanligt namnet på det editeringsläge som Emacs befinner sig i. Tillägget Invalid betyder i detta fall att det är en ogiltig XML-fil. Detta Emacsläge använder sin kunskap om XML-syntax för att markera när syntaxen inte stämmer. Emacs vet inte vad det är för slags XML i denna fil, men eftersom innehållet inte ens är välformad XML så kan den ändå vara säker på att den är felaktig. Ett sätt att direkt flytta sig till felet är att klicka på detta ord Invalid. Rätta felet! Snart ändras Invalid till Valid. De olika raderna i filen börjar med indrag med olika många mellanslag för att det ska bli lättare att läsa så att man ser hur strukturen är. Ett program som förstår sig på XML och som ska göra något med denna fil kommer inte att bry sig om hur indragen är, men det är bra om filen är någorlunda läsbar för människor också! Detta kan Emacs ordna åt dig. Teveprogrammet Rapport saknar starttid. Gå till den tomma rad där det borde stå och tryck TAB så får du ett lagom indrag. TAB fungerar så i de flesta Emacslägen, att istället för att alltid gå fram lika långt så går det fram»lagom«långt för det som man just editerar. (Det kan användas både för en ny rad som här, eller för att ändra indraget på en rad som redan finns.) Skriv nu in <starts>18:55 (precis så, utan sluttagg). Nu blir det Invalid i informationsraden igen. En finess i detta emacsläge är att det hela tiden kollar av ifall du har en korrekt XML-fil eller inte. Med rött visas var det finns fel. Uppgift 10.3 där? Var visas det vara fel? Varför just Ta fram hjälpen för denna Emacs-mode. (Se tabellen på s. 61 eller Help Describe i menyerna om du har glömt hur man gör det.) I den hjälp du får upp nämns ett kommando som avslutar det aktuella elementet genom att lägga in en sluttagg. Uppgift 10.4 (Gör så!) Hur utför man det kommandot? Nu bör bufferten ha blivit Valid igen. Med detta menas än så länge bara att det är välformad XML eftersom Emacs bara vet att detta är XML men inte vet vilket särskilt XML-märkspråk det är. Detta speciella märkspråk för tevetablåer beskrivs i filen schedule.rnc i samma katalog. Tala om det med XML Set Schema File... och ange den filen. Du får en förfrågan»save schema location to... «Svara y! Nu minns Emacs vilket schema som gäller för denna fil. Där beskrivs en ganska petig syntax för hur de olika delarna av en sån här tevetablå måste se ut och denna fil stämmer inte riktigt med denna syntax. 96
XHTML Så nu hittas flera fel. Tryck på Invalid i informationsraden för att gå till det första felet. Med C-c C-n kan du gå till nästa fel. Varje gång du går till ett fel så kommer det ett litet meddelande om vad felet är i ekoarean. För att gå till det första felet utan att behöva använda musen kan du använda M-< eller <C-home> för att gå till början av bufferten innan du går till nästa fel. Rätta alla felen! Exakt hur syntaxen måste vara här bör framgå av de exempel som inte ger fel. Lägg till ett par program i slutet av tablån. (Hitta på nåt.) Använd TAB för indrag så att delarna i ditt programinslag får samma indrag som de övriga. Se till att din slutliga fil är»valid«. schedule.rnc Titta i den där filen schedule.rnc som beskrev formatet. Det finns olika sätt att beskriva syntaxen för ett viss slags XML-dokument. Detta kallas för RE- LAX NG. Detta format är inget du behöver lära dig, men många delar av det bör ändå framgå tydligt med tanke på hur filen såg ut. Se i synnerhet på det pattern som definieras där för att beskriva vad elementet starts får ha för värden. Detta är ett (utökat) reguljärt uttryck och det godkänner inte bara tider som»17:15«utan också t. ex.»12:75«och»55:15«som inte är riktiga tider. Förbättra detta reguljära uttryck så att det är mer nogräknat! När du har ändrat i schedule.rnc måste du sätta filschemat för svt2.xml på nytt för att den ska använda den nya filen ifall du vill prova att ditt reguljära uttryck fungerar som avsett. (Prova gärna med lite felaktiga tider, men glöm inte att återställa till korrekta tider efteråt, så att det du lämnar inte innehåller några fel!) CSS för XML Öppna din svt2.xml i Firefox (med File Open File där). Dokumentträdet visas utan någon särskild formattering eftersom webbläsaren inte vet något om hur dessa element ska formatteras. Den vet bara att detta är XML (på grund av filnamnet). Uppgift 10.5 Firefox skriver något just om att den inte vet vad det är för slags XML. Vad står det? Lägg in en rad Om man öppnar en bildfil i Emacs så visas den som en bild, men man kan ändra så att den visas <?xml-stylesheet type="text/css" href="tv.css"?>»som text«, tecken för tecken istället. som andra rad för att tala om att filen tv.css i samma katalog ska ge information om hur olika element ska visas. Se vilken effekt detta ger för hur Firefox visar svt2.xml. Detta är samma språk CSS som du såg i labb 8. Ändra på något sätt. Antingen nån småsak (inte så svårt) eller läs på om CSS (t. ex. på http: //w3.org/) och kom på ett sätt att använda något av den information som står som attributvärden i filen, t. ex. skriva»(på finska.)«i slutet av program som har lang="fi". (Det senare är mycket svårare. Klar överkurs.) XHTML Du ska göra en XHTML-version av en HTML-fil, nämligen http://stp.lingfil.uu.se/~ellen/ saga.html. Uppgift 10.6 Vad är fullständiga sökvägen till den filen saga.html som den urlen går till? Kopiera den till din public_html, men med namnet saga.xhtml. Kopiera även saga.css från samma katalog. Byt ut DOCTYPE-deklarationen i början till något för»xhtml 1.0 Transitional«. (Sök på nätet exakt hur det ska lyda då!) (Om du öppnar om filen i Emacs efter att ha ändrat detta, eller om du uttryckligen väljer XML Set Schema For Document Type XHTML så kommer Emacs att veta att detta ska vara XHTML.) Fixa till den så att den är korrekt XHTML i Emacs. Använd dig av samma kommandon för att hitta fel som i tv-tablån förut. Uppgift 10.7 ändra? Vad är det vanligaste du behöver Trots att Emacs har validerat filen så avsluta ändå med att validera den med samma validerare som i labb 8 också. Du ska få veta att sidan var»successfully checked as XHTML 1.0 Transitional«. Kopiera då in den föreslagna koden för att lägga en bild som visar att det är korrekt. Spelbilder I /usr/share/gnome-games/gnect/pixmaps/ ligger lite bildfiler som används av några spel här. Uppgift 10.8 dessa filer? Vilka olika bildformat används av Uppgift 10.9 Vad kan man trycka i Emacs för att slå om mellan att visa som bild och visa som text? Uppgift 10.10 Vilka av de olika bildformaten som används i den katalogen är binärfiler och vilka är textfiler? 97
LABORATION 10: DOKUMENTREPRESENTATION Uppgift 10.11 katalog? Vad säger file om filerna i denna Uppgift 10.12 Det finns en väljare till file som gör att den skriver ut en MIME-beteckning istället. Hur lyder den väljaren? Uppgift 10.13 Vilka är MIME-beteckningarna för filerna i denna katalog enligt detta? Lite ljud som omväxling Uppgift 10.14 kurskatalog? Vad säger file om ord.wav i din Detta är ett binärt format, men trots det så finns det några koder som direkt motsvarar tecken i början av filen. Öppna den i Emacs! Uppgift 10.15 wav-filen? Vilka är de fyra första tecknen i Större delen av filens innehåll motsvarar kontrolltecken sedda i textformat som visas med koder i Emacs. I synnerhet är ^@ en beteckning på kontrolltecknet NUL som har koden 0. Man kan se att rätt många bytes har värdet 0. Ett komprimerat ljudformat som fyller ungefär samma nisch som MP3 men inte är lika vanligt heter Ogg Vorbis. Det finns ett program oggenc som skapar sådana Ogg-filer som brukar ha filnamnsändelsen.ogg. Skapa en fil ord.ogg utifrån ord.wav. (Du får själv hitta lämplig dokumentation om hur detta görs.) Uppgift 10.16 Hur skrev du för att göra detta? Det finns en väljare som sägs sätta kvaliteten för kodningen av oggarna. Skapa en ny fil ord-bad. ogg som kodar ord.wav till en ogg enligt den sämsta kvaliteten man kan ställa in med den väljaren enligt dokumentationen. Uppgift 10.17 göra det? Vad gav du för kommando för att Uppgift 10.18 Hur beskriver kommandot file de båda ogg-filerna du har nu? (Använd joker.) Uppgift 10.19 Visa storlekarna för alla tre dessa ljudfiler med ett kommando. (Om du vill lyssna på de olika filerna för att se om du hör någon skillnad är ett sätt att göra det med kommandot play.) Diverse Uppgift 10.20 Vilket ord i filen /local/texts/ jabberwocky innehåller bokstaven x? (Lös uppgiften med bara ett grep-kommando med väljaren -o.) Uppgift 10.21 Hur kan man skriva repetitionen {0,1} enklare i ett utökat reguljärt uttryck? Uppgift 10.22 I sagobok.tex har Per gjort en ändring sedan det ursprungliga skapandet av filen. Hur beskrev han den ändringen i filens logg? Filen /local/kurs/ids/japansk.txt är inte kodad med UTF-8. Gör man cat japansk.txt får man därför ut en konstig ojapansk sörja i terminalen. Kommandot file gissade ovan att den filen var kodad med nån ISO 8859-kodning, men det var fel. Emacs visar den rätt, men det är bara för att filen innehåller en särskild rad i början som talar för Emacs vad det är för teckenkodning: -*- coding: euc-jp -*- Uppgift 10.23 Använd samma beteckning»eucjp«för att med iconv omvandla från denna teckenkodning. Svara med ett kommando som skriver ut texten rätt i terminalen. Svara också med den text som det blev då. Skapa komprimerat arkiv När du mailar svaren på dessa uppgifter ska du även skicka med ett komprimerat tar-arkiv med de filer som du har ändrat. Filerna som ska vara med i arkivet är svt2.xml, schedule.rnc, tv.css, ord.ogg och ord-bad. ogg. Ett sätt skulle vara att första skapa ett tar-arkiv med tar och sen komprimera det med gzip, men det finns en väljare till tar som direkt fixar komprimering också. Ta reda på den och använd den. Uppgift 10.24 Vad använde du då för kommando för att skapa det komprimerade tar-arkiv som du skickar med som bilaga? Du behöver både välja ett lämpligt filnamn för ett sådant komprimerat filarkiv, och använda en väljare som gör att det blir ett sådant som skapas! 98