2. Mål för denna episod Efter denna episod ska ni Känna till den grundläggande strukturen i XML-dokument. Kunna modellera XML-vokabulärer med hjälp av DTD:er. Ha tillräckligt underlag för att kunna göra laboration 1.
3. Exempel - XHTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>En webbsida</title> </head> <body> <h1>En rubrik><h1> </body> </html>
6. 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
7. Simple-, Complex- eller Empty content Simple content - En tag innehåller endast text (<title> till höger). Complext content - En tag innehåller en eller flera andra tags och eventuellt text (<head> till höger). Empty content - En tag innehåller inget (<br/> till höger). Exempel <head> <title> XML Lecture </title> </head> <br></br> <br />
8. Attribut Attribut innehåller extra information om ett element T.ex. width på bilder, href på länkar Skrivs på formen <elementnamn attr1=”värde1” attr2=”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”.
9. 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. Två exempel <video duration=”2s” href=”b.mpg” /> <video> <duration>2s</duration> <source>b.mpg</source> </video>
10. Trädstruktur XML-strukturer bildar alltid en trädstruktur Alla XML-strukturer har ett ”root-element” Exempel HTML <html> <head> <title> XML Lecture </title> </head> <body> </body> </html> html head body title XML Lecture root Tecken-data
11. 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
12. 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) Å Å Ä Ä Ö Ö å å ä ä ö ö
13. CDATA och PCDATA PCDATA = Parsed Character Data. Parsern ersätter entitetsreferenser med deras värde. CDATA = Character Data. Entitetsreferenser tolkas ej. Exempel ” Konstiga” tecken kan 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>
14. 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>
15. 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. Fullständig lista i boken
16. 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 -->
17. 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. Processinstruktioner inleds med <? Och avslutas med ?> Exempel <?xml-stylesheet type=”text/xml” href=”x.xsl”?> Denna processinstruktion kan sedan plockas upp exempelvis av en webserver som kan använda informationen till att styra sitt beteende.
18. 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.
19. 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"
20. Tag-set Tags och deras attribut för ett visst område kallas t.ex. tag-set xml application 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.
21. 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)>
22. 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
23. DTD - Element Element definieras enligt <!ELEMENT elementnamn (barnelement) > Sekvenser separeras med kommatecken Teckendata skrivs #PCDATA Exempel <!ELEMENT html (head,body)> <!ELEMENT title (#PCDATA)>
24. DTD - Repeterande element Default är att ett element förekommer exakt en gång. Vill man ange något annat finns *, + och ? Exempel * betyder 0, 1 eller flera gånger + betyder 1 eller flera gånger ? betyder 0 eller 1 gång Definition <!ELEMENT a (b?)> <!ELEMENT b (c+)> <!ELEMENT c (d*)> <!ELEMENT d (#PCDATA)> Instans-dokument <a> <b> <c> <d>hej</d> </c> <c> </c> </b> </a>
25. 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?)*)+>
26. DTD - Val För att ange valmöjlighet mellan en mängd element kan operatorn | användas. Exempel <!ELEMENT boolean (true|false)>
27. DTD - Tomma element Tomma element, alltså element utan innehåll deklareras med EMPTY Exempel <!ELEMENT br EMPTY>
28. 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>
29. 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.
30. 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)> 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)> Modellera Din kalender Din adressbok
31. 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 heigth CDATA #IMPLIED> img är elementet attributen ska associeras med. src, width, heigth är attributnamn CDATA är attributens datatyp #REQUIRED betyder att attributet måste finnas med, #IMPLIED att det kan finnas med
32. Attribut - Datatyper Mycket begränsade ”datatyper” finns. De viktigaste är: CDATA NMTOKEN NMTOKENS ENUMERATIONS ID IDREF IDREFS 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 (Notera speciellt ID och IDREFS inför laboration 1)
33. Entitetsdeklarationer 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. 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.
34. Parameterentiteter Entitetsdeklarationer skrivs i en DTD och används i instansdokument. Parameterentitets-deklarationer både skrivs och används i DTDer. Måste definieras före de används i en fil 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;)>
35. Interna/Externa DTDer Vanligtvis ligger DTD-deklarationerna i en extern fil. Exempel extern DTD Filen student.dtd <!ELEMENT student (fname, lname)> <!ELEMENT fname (#PCDATA)> <!ELEMENT lname (#PCDATA)> Filen student.xml (instansdokumentet) <!DOCTYPE student SYSTEM ”student.dtd”> <student> <fname>Bjorn</fname> <lname>Hedin</lname> </student>
36. Interna/Externa DTDer Det går dock även att inkludera deklarationerna i själva instansdokumentet Fundera på: För- och nackdelar med interna/externa DTDer Exempel intern DTD <?XML version=”1.0”?> <!DOCTYPE student [ <!ELEMENT student (fname, lname)> <!ELEMENT fname (#PCDATA)> <!ELEMENT lname (#PCDATA)> ]> <student> <fname>Bjorn</fname> <lname>Hedin</lname> </student>
37. 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 senare i kursen.
38. Hur man gör en egen vokabulär (ex: online-bokkatalog) Identifiera centrala begrepp (katalog, bok, författare, isbn, genre…) Inordna begreppen i en hierarki (katalog är root-element, och innehåller en-till-många böcker osv) Om ett begrepp är kopplat till ett annat och kan förekomma högst en gång är det förmodligen lämpligt att koda som ett attribut (t.ex. bok-isbn). Om det kan förekomma obekant antal gånger är ska det kodas som element (t.ex. ”bok” kan ha obekant antal ”författare”)
39. Ex: online-bokkatalog DTD <!ELEMENT katalog (bok+)> <!ELEMENT bok (författare+, genre*)> <!ATTLIST bok isbn CDATA #IMPLIED titel CDATA #REQUIRED> <!ELEMENT författare (förnamn+, efternamn)> <!ELEMENT genre (#PCDATA)> <!ELEMENT förnamn (#PCDATA)> <!ELEMENT efternamn (#PCDATA)> Observera att det finns många olika sätt att göra detta. Här är t.ex. inte genre en enumerering, och efternamn är inte ett attribut.
40. XML jämfört med relationsdatabaser XML-strukturer är hierarkiska Redundans förekommer ofta T.ex. hur skulle man modellera IMDB som XML-struktur respektive relationsdatabas Vanligt att lagra mer komplexa strukturer som relationsdatabas, och sedan skapa XML “on demand” Det kommer ni göra i projekten
41. Och nu? Nu kan ni göra DTD-laborationen. Tack för idag!