2D1522 Datorteknik och -kommunikation XML och Unix 2D1522 Datorteknik och -kommunikation http://www.nada.kth.se/kurser/kth/2D1522/ 2002-03-18 © Björn Hedin, NADA/KTH 2002
Dagens föreläsning Syfte Mål Få en introduktion till XML, vilket är det vanligaste dataformatet för att strukturera data idag. Lära er grunder och principter i Unix, vilket det händer att man stöter på “i verkligheten” Mål Lära er vad XML är, Skillnaden mellan “well formed och valid” Hur man skriver en DTD Tillräckligt mycket Unix-kunskap för att klara laborationen 2002-03-18 © Björn Hedin, NADA/KTH 2002
XML eXtensible Markup Language 2002-03-18 © Björn Hedin, NADA/KTH 2002
Vad är XML Ett meta-märkspråk med vilket man kan bygga märkspråk som xhtml, wml, smil etc. Inget exekverande programspråk, endast för att strukturera data. Rekommendation förvaltad av W3C. XML-familjen = XML + relaterade rekommendationer som xslt, xpath, xlink mm. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Exempel - XHTML <?xml version="1.0"> <?xml-stylesheet type="text/css" href="style.css" type="text/css" /> <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>Personlig webbsida för Förnamn Efternamn</title> </head> <body> <p align="center"> <img src="/kth/bilder/nada.gif" alt="Nada" width="468" height="68"/> </p> </body> </html> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Exempel - SMIL <?xml version="1.0"?> <smil> <head> <layout> <root-layout height="350" width="600" title="Universal SMIL Document"/> <region id="w" left="174" top="100" height="47" width="63" z-index="3" /> </layout> </head> <body> <video src="Help.mov" begin="0.00s" end="11.00s" /> </body> </smil> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Exempel - Dataformat 2002-03-18 © Björn Hedin, NADA/KTH 2002 <?xml version="1.0"?> <imf> <head> <version>3.0</version> <source supplier="PrintingCompany-1" application="Application-1"/> <time>1997-10-06T00:11:00.00+2</time> </head> <body> <object action="modify"> <PrintingJob/> <object_uid> <local_id>17</local_id> </object_uid> <attributes> <ActualCopies>14322</ActualCopies> </attributes> </object> </body> </imf> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Element Ett element är den grundläggande informationsenheten i en xml-applikation. Ett element har en start-tag, ett innehåll och en slut-tag. Exempel <title> XML Lecture </title> Start-tag Innehåll Slut-tag 2002-03-18 © Björn Hedin, NADA/KTH 2002
Simple-, Complex- eller Empty content Simple content - En tag innehåller endast text. Complext content - En tag innehåller en eller flera andra tags och eventuellt text. Empty content - En tag innehåller inget. Exempel <head> <title> XML Lecture </title> </head> <br></br> <br /> <head> har Complex Content <title> har Simple Content <br> har Empty Content Kortversion av <br></br> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Attribut Attribut innehåller extra information om ett element T.ex. width på bilder, href på länkar Skrivs på formen <elementnamn attributnamn1=”värde1” attributnamn2=”värde2”> Exempel <a href=”b.html”>Link</a> <img width=”14” src=’b.jpg’ /> Observera att det går att innesluta attributvärdet antingen ”värde” eller ’värde’, men inte ”värde’ eller ’värde”. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Attribut eller element? Då man själv gör ett märkspråk ställs man ofta inför valet att koda något som ett attribut eller ett element. Valet är huvudsakligen en smakfråga. Exempel <video duration=”2s” href=”b.jpg” /> Eller <video> <duration>2s</duration> <source>b.jpg</source> </video> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Trädstruktur XML-strukturer bildar alltid en trädstruktur Alla XML-strukturer har ett ”root-document” Exempel HTML <html> <head> <title> XML Lecture </title> </head> <body> </body> </html> root html head body title XML Lecture Tecken-data 2002-03-18 © Björn Hedin, NADA/KTH 2002
Föräldrar, barn, syskon Element som innehåller andra element kallas dessa elements förälder. Omvänd relation kallas barn. Element på samma nivå kallas syskon. Exempel HTML <html> <head> <title> XML Lecture </title> </head> <body> </body> </html> html head body title XML Lecture 2002-03-18 © Björn Hedin, NADA/KTH 2002
Reserverade tecken Vissa tecken är reserverade då de har speciell betydelse i XML. De kodas som ”entitetsreferenser”. Även svenska tecken kodas oftast som entitetsreferenser Exempel < < (less than) > > (greater than> & & (ampersand) ” " (quotation) ’ ' (apostrophe) Å Å Ä Ä Ö Ö å å ä ä ö ö 2002-03-18 © Björn Hedin, NADA/KTH 2002
CDATA och PCDATA PCDATA = Parsed Character Data. Parsern ersätter entitetsreferenser med deras värde. CDATA = Character Data. Entitetsreferenser tolkas ej. Exempel Om man har många ”konstiga” tecken som man av lathet eller något annat skäl vill skriva in utan entitetsreferenser kan man innesluta tecknen i en CDATA-sektion. Den inleds med strängen <![[ och avslutas med strängen ]]> <reserved_characters> <![CDATA[ <, > &, ’ och ” är alla reserverade tecken ]]> </reserved characters> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Namngivning Namn på tags och attribut måste inledas med en bokstav eller ”_” Därefter bokstäver och/eller siffror. Svenska tecken OK men bör undvikas i praktiken ”xml” reserverat som inledning Godkända exempel <html> <_my_id_19> <dåligt_namn> <tag_with_xml> Felaktiga exempel <mitt element> <7nde_elementet> <Bjorn’s_tag> <xml_tag> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Well-formed Ett xml-dokument är ”well formed” om det uppfyller ett antal kriterier. Alla xml-dokument måste vara well-formed. Exempel Varje start-tag måste ha en motsvarande slut-tag (<html></html>) Elementen måste bilda en trädstruktur (t.ex. <i><p></p></i> men EJ <i><p></i></p>) Attributvärden måste omslutas av citat-tecken eller apostrofer. Observera att många html-editorer inte uppfyller något av ovanstående krav. Fullständig lista i kapitel 18 av XML in a nutshell, något mer lättbegripligt på sid 23 i samma bok. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Kommentarer Kommentarer omsluts med <!-- kommentar --> Får EJ finnas i en tag. Får EJ innehålla strängen -- Godkänt exempel <html> <!-- min kommentar --> </html> Felaktiga exempel <html <!-- en html-tag -->> <!-- -- är ej tillåtet --> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Processinstruktioner Processinstruktioner kan användas för att skicka vidare information till applikationer. Många applikationer har tidigare använt kommentarer i samma syfte, vilket är dåligt. Exempel <?xml-stylesheet type=”text/xml” href=”my-stylesheet.xsl”?> Denna processinstruktion kan sedan plockas upp exempelvis av en webserver som kan använda informationen till att styra sitt beteende. Processinstruktioner inleds med <? Och avslutas med ?> 2002-03-18 © Björn Hedin, NADA/KTH 2002
XML-deklarationer XML-dokument bör inledas med en XML-deklaration. Den innehåller: XML-version Teckenkodning Om en extern dtd används Exempel <?xml version=”1.0” encoding=”ISO-8859_1” standalone=”yes”?> Teckenkodning (t.ex. ascii, iso-8859_1 eller unicode kan väljas med ”encoding”) standalone=”no” används om en extern DTD finns. Förklaring av DTD kommer senare. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Dokumenttypdeklaration XML-dokument kan även innehålla en Document Type Declaration som anger en eventuell DTD. Exempel <!DOCTYPE imf SYSTEM ”http://www.aa.com/imf.dtd”> imf är i ovanstående fall root-elementet SYSTEM används om det inte är en ”officiell” DTD, annars används PUBLIC URLen är urlen till DTDn Kan även innehålla en så kallad ”public ID”, t.ex. ”-//W3C//DTD XHTML 1.0 Transitional//EN" 2002-03-18 © Björn Hedin, NADA/KTH 2002
Tag-set Tags och deras attribut för ett visst område kallas ”tag-set”, ”xml application” eller ”xml vocabulary”. Exempel <br> ingår i den tag-set som finns för xhtml men inte för SVG <apply-templates> ingår i den tag-set som finns för xsl men inte för xhtml <p> ingår i både xhtml’s tag-set och wml’s tag-set. 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD I en Document Type Definition (DTD) definierar man en tag-set och de inbördes relationer som ska gälla. Samma sak kan idag göras med t.ex. XML Schemas. Exempel <html>, <head> och <body> är alla definierade i DTDn för XHTML. I den DTDn anges att ett <head>-element ska innehålla exakt et <head>-element följt av exakt ett <body>element. Detta uttrycks genom följande rad i DTDn <!ELEMENT html (head, body)> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Valid Om ett XML-dokument är well-formed och uppfyller alla de begränsningar som ges av dess DTD är det ”valid”. Processen att kontrollera detta kallas ”validering” Exempel xhtml-dokument kan valideras på http://validator.w3.org/ En generell valideringstjänst som klarar andra vokabulärer än xhtml finns på http://www.stg.brown.edu/service/xmlvalid XML Schemas kan valideras på http://www.w3.org/2001/03/webdata/xsv 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Element Element definieras enligt syntaxen <!ELEMENT elementnamn (barnelement) > Sekvenser separeras med kommatecken <!ELEMENT e1 (e3,e4) > Teckendata skrivs #PCDATA <!ELEMENT e4 (#PCDATA) > Exempel <!ELEMENT html (head,body)> <!ELEMENT title (#PCDATA)> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Repeterande element Default är att ett element förekommer exakt en gång. Vill man ange något annat finns *, + och ? OBS!! Fel på sidan 35 i boken, korrekt till höger. Exempel * betyder 0, 1 eller flera gånger + betyder 1 eller flera gånger ? betyder 0 eller 1 gång Instansdokument <a> <b> <c> <d>hej</d> </c> </b> </a> Definition <!ELEMENT a (b?)> <!ELEMENT b (c+))> <!ELEMENT c (d*))> <!ELEMENT d (#PCDATA)> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Grupperingar Parenteser kan användas för att gruppera element. Sedan kan *, + och ? appliceras på hela parentesen som en grupp. Exempel <!ELEMENT a (b,(c+,d?)*)+> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Val För att ange valmöjlighet mellan en mängd element kan operatorn | användas. Exempel <!ELEMENT boolean (true|false)> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Tomma element Tomma element, alltså element utan innehåll deklareras med EMPTY Exempel <!ELEMENT br EMPTY> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Blandat innehåll I vissa fall är det önsvärt att kunna blanda teckendata med element. Typexemplet är web. #PCDATA måste vara först i en val-lista. Exempel Deklaration <!ELEMENT mixedelement (#PCDATA| p|br|em|strong)*> Instansdokument <mixedelement> <em>hej</em> hopp <p>tjoho</p> </mixedelement> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Godtyckligt innehåll Ibland (mycket sällan) är det önskvärt att deklarera ett element som kan ha godtyckligt innehåll. Det görs med ANY. Exempel <!ELEMENT everything ANY> Elementet everything kan nu innehålla godtycklig well-formed xml och text blandat. 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Övningar Skriv ett instansdokument som kan valideras mot följande DTD (a är root-elementet): <!ELEMENT a (b,c?)> <!ELEMENT b (d+, e*)> <!ELEMENT c (#PCDATA)> <!ELEMENT d EMPTY> <!ELEMENT e (#PCDATA)> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Övningar Skriv ett instansdokument som kan valideras mot följande DTD (a är root-elementet): <!ELEMENT a (b|c)+,(c,b)+)> <!ELEMENT b (#PCDATA)> <!ELEMENT c (#PCDATA)> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Övningar Skriv en DTD som kan validera följande instansdokument. <b/> <c/> <d> </d> </a> 2002-03-18 © Björn Hedin, NADA/KTH 2002
DTD - Attribut Ett eller flera attribut kan associeras med ett element. Ett attributnamn kan förekomma i flera element, men ett element kan inte ha två attribut med samma namn Exempel <!ATTLIST img src CDATA #REQUIRED width CDATA #REQUIRED height CDATA #IMPLIED> img är elementet attributen ska associeras med. src, width, height är attributnamn CDATA är attributens datatyp #REQUIRED betyder att attributet måste finnas med, #IMPLIED att det kan finnas med 2002-03-18 © Björn Hedin, NADA/KTH 2002
Attribut - Datatyper CDATA - Minst begränsade datatypen. NMTOKEN - Alfanumeriska tecken, _, -, . och :. Inte mellanslag. NMTOKENS - En eller flera NMTOKEN separerade av mellanslag (whitespace) Enumerations - Endast ett av en enumerering värden kan antagas. Definieras exempelvis <!ATTLIST book published (true|false) #REQUIRED> ID - Unika värden inom XML-dokumentet. Som NMTOKEN men kan inte inledas med en siffra IDREF - Används för interna länkar till attribut av ID-typ. Måste alltså antaga ett värde som ett ID-attribut har. IDREFS - En eller flera IDREF Mycket begränsade ”datatyper” finns. De viktigaste är: CDATA NMTOKEN NMTOKENS ENUMERATIONS ID IDREF IDREFS 2002-03-18 © Björn Hedin, NADA/KTH 2002
Entitetsdeklartioner Exempel I en DTD <!ENTITY mtgp ”Medieteknik och Grafisk Produktion”> I ett instansdokument som använder den DTDn <p>Kursen ges av &mtgp;</p> Slutresultat <p>Kursen ges av Medieteknik och Grafisk Produktion </p> I #PCDATA-sektioner går parsern igenom texten och ersätter entiteter med dess värden. Entitetsdeklarationer kan användas för att ”skapa alias” för långa eller svåra strängar. Deklareras i en DTD, används i instansdokumenten. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Parameterentiteter Entitetsdeklarationer skrivs i en DTD och används i instansdokument. Parameterdeklarationer både skrivs och används i DTDer. Exempel <!ELEMENT person (fname, lname)> <!ELEMENT employee (fname, lname)> <!ELEMENT student (fname, lname)> Istället kan man deklarera en parameterentitet <!ENTITY % name ”fname, lname”> <!ELEMENT person (%name;)> <!ELEMENT employee (%name;)> <!ELEMENT student (%name;)> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Interna/Externa DTDer Exempel extern DTD Filen student.dtd <!ELEMENT student (fname, lname)> <!ELEMENT fname (#PCDATA)> <!ELEMENT lname (#PCDATA)> Filen student.xml (instansdokumentet) <?XML version=”1.0”?> <!DOCTYPE student SYSTEM ”student.dtd”> <person> <fname>Bjorn</fname> <lname>Hedin</lname> </person> Vanligtvis ligger DTD-deklarationerna i en extern fil. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Interna/Externa DTDer Det går dock även att inkludera deklarationerna i själva instansdokumentet. Exempel intern DTD <?XML version=”1.0”?> <!DOCTYPE student [ <!ELEMENT student (fname, lname)> <!ELEMENT fname (#PCDATA)> <!ELEMENT lname (#PCDATA)> ]> <person> <fname>Bjorn</fname> <lname>Hedin</lname> </person> 2002-03-18 © Björn Hedin, NADA/KTH 2002
Problem med DTDer Begränsade datatyper (inga int, long, date…) Begränsade repetitionsalternativ (endast ?, * och +) Endast en betydelse för ett element per DTD DTDer är själva inte XML-dokument. Inga möjligheter till ”arvsmekanismer”. Försök till lösning med XML Schemas, men mer om det nästa gång. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Unix Ett operativsystem, precis som Windows och MacOS Linux, Solaris, Mac OS X m.fl. Unixsystem finns Från början designad för att flera användare ska kunna köra program samtidigt på samma dator. Mycket stabilt. Används ofta för serverapplikationer, såsom webserver, mailserver, filserver. Första implementationen 1969 2002-03-18 © Björn Hedin, NADA/KTH 2002
GUI/Textgränssnitt Både grafiska gränssnitt och textbaserade gränssnitt finns. Jfr Windows och DOS-prompt Textbaserade gränssnitt speciellt användbara vid fjärrinloggning på system. Enkelt att skriva ”script” som utför en mängd olika kommandon. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Grundläggande begrepp Shell Ett ”shell” är en kommandotolk. För att exekvera ett program skriver du in programmets namn i tolken, vilken tolkar kommandot och därpå exekverar det. Process Ett program som exekveras är en process. Processen innehåller information om öppna filer, variabler mm. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Filosofi Unix har en liten del (”kernel”) som sköter om det viktigast, såsom minneshantering, resursallokering, filhantering och felhantering. Övriga delar, t.ex. ls, kommandot för att lista filer, är ett eget program som kan bytas ut om man så önskar Många småprogram kan kombineras ihop till att utföra komplexa uppgifter. jfr MS/DOS, Windows m.fl. där ”allt” är integrerat. Lättare att skriva ett litet program som hanterar en liten uppgift bra och effektivt än att skriva ett stort program som hanterar många uppgifter. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Shell Ett shell är som sagts tidigare en kommandotolk. Kan, förutom dess viktigaste uppgift att starta processer, även hantera variabler, if/then/else-konstruktioner, loopar etc. Det första man möts av när man loggar in via en textterminal är ett shell. Alla program man utför är ”barnprocesser” till detta shell. Om inloggningsskalet avslutas, avslutas normalt sett även dess barnprocesser. Kommandon kan utföras ”batchvis” i ett shellscript. 2002-03-18 © Björn Hedin, NADA/KTH 2002
Shell-cykeln Shell T.ex. ls Skriv ut en prompt Läs ett kommando från tangentbordet Tolka speciella tecken såsom variabler Kör kommandot och vänta tills det avslutas Börja om från början T.ex. ls exekvera programmet ls Skriv ut ev. resultat Återgå till skalet 2002-03-18 © Björn Hedin, NADA/KTH 2002
Generell kommandosyntax Den generella formen för hur ett kommando ges är: >kommandonamn -flaggor argument Obs. Det inledande >-tecknet är själva kommandoprompten, och kan variera. Exempel >cp -R mapp1 mapp2 2002-03-18 © Björn Hedin, NADA/KTH 2002
Hjälp Exempel För att få hjälp finns t.ex. två hjälpsystem (ofta). De flesta kommandon accepterar flaggan --help för kortfattad beskrivning av de flaggor och argument som kan ges. Klamrar [] anger att något ej är nödvändigt. Vertikalstreck | används för att ange val mellan två alternativ. Exempel >cp --help usage: cp [-R [-H | -L | -P]] [-f | -i] [-p] src target cp [-R [-H | -L | -P]] [-f | -i] [-p] src1 ... srcN directory > 2002-03-18 © Björn Hedin, NADA/KTH 2002
Man-blad För mer utförlig hjälp kan man ange kommandot >man kommandonamn Dessa manualblad är oftast tämligen svårtydda om man inte är van. media>man cp CP(1) System Reference Manual CP(1) NAME cp - copy files SYNOPSIS cp [-R [-H | -L | -P]] [-f | -i] [-p] source_file target_file cp [-R [-H | -L | -P]] [-f | -i] [-p] source_file ... target_directory DESCRIPTION In the first synopsis form, the cp utility copies the contents of the source_file to the target_file. In the second synopsis form, the contents of each named source_file is copied to the destination target_directory. The names of the files themselves are not changed. If cp detects an at- tempt to copy a file to itself, the copy will fail. The following options are available: -H If the -R option is specified, symbolic links on the command line 2002-03-18 © Björn Hedin, NADA/KTH 2002
Filsystemet 2002-03-18 © Björn Hedin, NADA/KTH 2002
Sökvägar Det finns åtminstone tre sätt att ange sökvägar. Antag att du står i katalogen kalle och vill komma åt programmet ls under bin-katalogen under bjornh Absolut sökväg /home/bjornh/bin/ls Relativ sökväg ../bjornh/bin/ls Relativt användaren bjornh ~bjornh/bin/ls 2002-03-18 © Björn Hedin, NADA/KTH 2002
Filrättigheter En fil har tre ägartyper Ägarnivå Gruppnivå Samtliga användare För ägartyp kan tre rättigheter ges Läsrättighet (r) Skrivrättighet (w) Exekveringsrättighet (x) 2002-03-18 © Björn Hedin, NADA/KTH 2002
Filrättigheter (2) Vilka filrättigheter en fil har kan ses med kommandot ls -l >ls -l afmstud01.xls -rw-r--r-- 1 bjornh staff 11776 Jan 9 11:12 afmstud01.xls media> De första tio tecknen anger rättigheterna. I tur och ordning: -: afmstun01.xls är en fil, inte en katalog (i så fall “d”) rw-: Ägaren (bjornh) har läs- och skrivrättigheter, men inte exekveringsrättigheter r--: Gruppen har läsrättigheter, men inte skriv- eller exekveringsrättigheter r--: “Samtliga användare” har läsrättigheter, men inte skriv- eller exekveringsrättigheter För att ändra filrättigheter används kommandot chmod (se labb) 2002-03-18 © Björn Hedin, NADA/KTH 2002
stdin, stdout och stderr Program har standardvärden för varifrån de läser input och skriver output. Program tar normalt sitt input via tangentbordet (stdin) De skriver output till skärmen (stdout) De skriver felmeddelanden tilll skärmen (stderr) Dessa kan omdirigeras till/från t.ex. en fil. >cat fil1 >fil2 Skriver innehållet som finns i fil1 till fil2 >cat filnamn >>fil2 “Appendar” fil1 till fil2 Se mer på laborationen 2002-03-18 © Björn Hedin, NADA/KTH 2002
pipes Output kan även skickas vidare och bli input till ett annat program. Det kallas för en “pipe”. >ls | grep banan | wc Listar alla filer i katalogen. Output skickas vidare till programmet grep som plockar ut alla rader som innehåller strängen banan. Output från detta (alla rader innehållande strängen banan) skickas vidare till programmet wc (word count) som räknar antalet rader. Med omdirigeringar hade samma sak kunnat uppnås (första “>”-tecknet är kommandoprompten). >ls >a >grep banan a >b >wc b 2002-03-18 © Björn Hedin, NADA/KTH 2002