Kapitel 10. Dokumentrepresentation. 10.1 Uppmärkt text. 10.2 HTML kommer från SGML



Relevanta dokument
Avslutning. Kapitel Komprimering av filer

Program. Kapitel make Program Interpreterande och kompilerande program

Kapitel 10. Dokumentrepresentation Uppmärkt text HTML är SGML

Kapitel 12. Mer om program Att rapportera buggar och problem make

Kort om World Wide Web (webben)

Filbindningar. Mike McBride Översättare: Stefan Asserhäll

Hantera informationspaket i system för bevarande

En snabb titt på XML LEKTION 6

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Laboration 10: LaTeX. Redovisning. Omgivningen document. Början. Instruktionerna nedan. Repetitionsuppgifter

Textbearbetning i skalet och man-sidor

Arbetsmaterial HTML pass 1 - Grunder

WEBBUTVECKLING Kursplanering

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Kapitel 10. Dokumentrepresentation HTML kommer från SGML Uppmärkt text

REDIGERA PLYMEDIA-TEXTER med Subtitle Workshop 2.5.1

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

Introducerande övningar i HTML

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker

Scan2Text Svensk Doc 2.0. Scan2Text Användarguide

Laboration med Internet och HTML

Heldag om FGS FGS:er och deras tekniska regelverk. Karin Bredenberg, FGS funktionen. Standarder. FGS:er och deras tekniska regelverk 1

(reviderad , , ) Riksarkivet IT-avdelningen. Anvisningar för ifyllning av Excelark för webbleveranser

Dagens agenda. Lagring & berarbetning av data. Filer och filformat Metadata Komprimering Kryptering Olika typer av data Filsystem Databaser

Allmänt om programvaror och filer i Windows.

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS Konsolfönstret

Labora&on 1 Introduk&on &ll utvecklingsmiljön övningar/uppgi<er

Anvisningar för ifyllning av Excelark för databaser (xml-filer)

Konstruktion av datorspråk

Introduktion till datateknik för språkvetare

Tanka program KAPITEL 7. Shareware och freeware. Shareware. Freeware

Övningsuppgifter med E-postklienten MS live Inloggning

Frontpage 2002/XP (2)

Webbens grundbegrepp. Introduktion till programmering. Ytterligare exempel. Exempel på webbsida. Föreläsning 5

KUNDREGISTER Sid 2(7) Teknisk specifikation

Övning (X)HTML 2. Sidan 1 av

Användarmanual för Hemsida

Lathund för BankID säkerhetsprogram

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

Dokumentrepresentation

Introduktion till datateknik för språkvetare

Labora&on 8 Formulär övningar/uppgi6er

INTERNET Adress: fc.enkoping.se (obs! ej www i början) Då kommer du till denna sida. Logga in. Fyll i ditt Användarnamn och Lösenord.

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Grunder. Grafiktyper. Vektorgrafik

Om e-post. Introduktion till Emacs. Att skicka e-post. ÅÄÖåäö i pine. Varför Emacs? Vad är Emacs? Emacs en editor/textbehandlare

Välj bort om du vill. 96 Internet och e-post. 2. Mail-programmet finns i datorn. 1. Skriv mail i sökrutan. Windows Live Mail i Aktivitetsfältet.

extensible Markup Language

Migrera till Word 2010

Kapitel 4 Arkivmenyn Innehåll

Användarhandledning Version 1.2

1. Starta programmet 2. Välja projekt antingen redan skapat eller nytt

ATT GÖRA WEBBSIDOR. Frivillig labb

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

3. Hämta och infoga bilder

Användarhandledning för RALF

Projektanvisning. Webbsideprojekt. Författare: Johan Leitet Version: 2 Datum:

Ersätta text, specialtecken och formatering

Lab 7, 48 steg till ett bättre liv i Unix-labbet

ITK:P2 F1. Hemsidor med HTML HTML. FTP, HTTP, HTML, XML och XHTML

Word Online Version 1.0 Skolkontoret

Manual för din hemsida

Sidan kommer inte läggas upp någonstans utan du redovisar den för mig på något handledningstillfälle.

Strukturering med XML och DTD

Introduktion till programmering

Så här funkar Föreningsliv

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Webbutveckling Laboration 1: HTML5 och CSS3.

Att arbeta med. Müfit Kiper

1284_omslag.qxd :13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003

Manus för instruktionsfilm: Skapa ett filarkiv

Internets historia Tillämpningar

Instruktion för konvertering av e-post i Lotus Notes med Swing PDF Converter

1

Windows 10 Utforskaren

LADDA UPP EN PDF-FIL OCH LÄNKA TILL DEN I DIN ARTIKELTEXT

Snabbguide för E-lomake

Labora&on 2 HTML och validering övningar/uppgi:er

Handbok kundwebb för kunder Innehållsförteckning

Kort-kort om utdelade användarkonton och datormiljön på NADA

1 Vad är Versionshantering? 2 Git. 2.1 GitHub

Laboration 2: Xhtml och CSS.

SNABBGUIDE för Windows Media Encoder (media kodaren) - Sänd live med din webbkamera

F02 En första sida. Dagens agenda

Så här fungerar Version 21 okt

TextIT Hjälp. Om du vill ha all text uppläst trycker du på knappen spela

Installation/start av LOGGER

Säkerhetsinställningar, websolen. Innehåll

APA för nybörjare. Innan du börjar. Översikt

12 Webb och kurshemsidor

Introduktion till datormiljön och Python

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Dokumentrepresentation

Guide. Webbsidor i Studentportalen. Innehåll. Uppdaterad:

LVDB i GEOSECMA. Innehåll. Inledning. Produkt: GEOSECMA Modul: LVDB Skapad för Version: Uppdaterad:

Bilduppladdning i Järnvägshistoriskt forum (gäller MS Windows för PC)

Workshop PIM 2 - PowerPoint

Transkript:

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 det är ett fall 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. I kapitel 7 fick ni skriva HTML-sidor med en del element som t. ex. p, ul och li. Till HTMLstandarderna hör information om t. ex. att ett ul-element kan innehålla li-element men inte 105

10. DOKUMENTREPRESENTATION 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 > 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> 106

10.4. MIME 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.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 >Så här f å r man i n t e göra! </ 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.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 XMLdokument, men alltid finns i alla fall & (&) < (<) > (>) &apos; (') " (") 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.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 107

10. DOKUMENTREPRESENTATION 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 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 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. 108

10.6. Filarkiv $ 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 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 bildoch 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 arkivfilen (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 (som i avsnitt 5.2). 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. 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! 109

Laboration 10: Dokumentrepresentation Redovisning Denna gång ska du skicka svar på frågorna i mail till Per igen, senast tisdagen den 9/11. 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. 97 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. 110

schedule.rnc 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. 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. I och med att Emacs vet precis vilken syntax som gäller för denna fil så kan man få mycket hjälp när man lägger till nya saker i filen också, bland annat genom att man kan få komplettering av symboler så att man inte behöver skriva hela»program«osv. Uppgift 10.5 Hur ska man trycka för att få komplettering av symboler? (Det beskrivs i hjälptexten till detta Emacsläge.) Skriv till ett program i slutet av tablån. Börja med bara <p och använd sedan komplettering. När det då står <program så använd kommandot C-c C-b som lägger in ett helt block. Uppgift 10.6 Härnäst är det dags för en tagg med starts. Hur lite måste du skriva härnäst innan du kan få fram den med komplettering? 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). Lägg in en rad <?xml-stylesheet type="text/css" href="tv.css"?> som andra rad i kopian och kopiera tv.css till samma katalog. I den filen ges 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 7. Ä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.) 111

LABORATION 10: DOKUMENTREPRESENTATION Lite ljud som omväxling Uppgift 10.7 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.8 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.9 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.10 göra det? Vad gav du för kommando för att Uppgift 10.11 Hur beskriver kommandot file de båda ogg-filerna du har nu? (Använd joker.) Uppgift 10.12 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.) Repetition Uppgift 10.13 I sagobok.tex från förra veckan 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.14 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 och ord.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.15 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! 112