SlideShare a Scribd company logo
XML  - Uppbyggnad och  modellering med DTD
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.
Exempel - XHTML <!DOCTYPE html  PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;> <html> <head> <title>En webbsida</title> </head> <body> <h1>En rubrik><h1> </body> </html>
Exempel - SMIL <smil> <head> <layout>  <root-layout height=&quot;350&quot; width=&quot;600&quot;  title=”exempel&quot;/> <region id=&quot;w&quot; left=&quot;174&quot;  top=&quot;100&quot; height=&quot;47&quot; width=&quot;63&quot; /> </layout> </head> <body> <video src=&quot;Help.mov&quot;  begin=&quot;0.00s&quot; end=&quot;11.00s&quot; /> </body> </smil>
Exempel - Dataformat <imf> <head> <version>3.0</version> <source supplier=&quot;Company-1&quot; application=&quot;Application-1&quot;/> <time>1997-10-06T00:11:00.00+2</time> </head> <body> <object action=&quot;modify&quot;> <PrintingJob/> <object_uid> <source supplier=&quot;Company-1&quot; application=&quot;Application-1&quot;/> <local_id>17</local_id> </object_uid> <attributes> <ActualCopies>14322</ActualCopies> </attributes> </object> </body> </imf>
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
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 />
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”.
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>
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
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
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 < &lt; (less than) > &gt; (greater than> & &amp;(ampersand) ” &quot;(quotation) ’ &apos;(apostrophe) Å &#197; Ä &#196; Ö &#214; å  &#229; ä  &#228; ö  &#246;
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>
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>
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
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 -->
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.
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.
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&quot;
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.
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)>
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
DTD - Element Element definieras enligt <!ELEMENT elementnamn (barnelement) > Sekvenser separeras med kommatecken Teckendata skrivs #PCDATA Exempel <!ELEMENT html (head,body)> <!ELEMENT title (#PCDATA)>
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>
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?)*)+>
DTD - Val För att ange valmöjlighet mellan en mängd element kan operatorn | användas. Exempel <!ELEMENT boolean (true|false)>
DTD - Tomma element Tomma element, alltså element utan innehåll deklareras med EMPTY Exempel <!ELEMENT br EMPTY>
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>
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.
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
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
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)
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.
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;)>
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>
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>
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.
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”)
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.
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
Och nu? Nu kan ni göra DTD-laborationen. Tack för idag!

More Related Content

PPT
XML Schemas
bjornh
 
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 1
Vivian Motti
 
PPT
2 dtd - validating xml documents
gauravashq
 
PPT
Namespaces
bjornh
 
PDF
Xml tilltro
tilltro
 
PDF
Föreläsning 1: Grundläggande HTML
Johannes Karlsson
 
PDF
HT18 - DA156A - Introduktion till HTML
Anton Tibblin
 
XML Schemas
bjornh
 
Aplicando Transformação em XML usando XSLT e XSL-FO - 1
Vivian Motti
 
2 dtd - validating xml documents
gauravashq
 
Namespaces
bjornh
 
Xml tilltro
tilltro
 
Föreläsning 1: Grundläggande HTML
Johannes Karlsson
 
HT18 - DA156A - Introduktion till HTML
Anton Tibblin
 

Similar to XML och DTD (20)

PPT
Spbl Fö6 Designprinciper Och Xml
bildljuddsv
 
PDF
HT19 - DA156A - Introduktion till HTML
Anton Tibblin
 
PDF
HT17 - DA156A - Introduktion till HTML
Anton Tibblin
 
PDF
Introduktion till HTML
Anton Tibblin
 
PDF
HT24 - Introduktion till webbutveckling - Introduktion till HTML
Anton Tibblin
 
PPT
CSS
bjornh
 
PPT
Koda strikt
medieteknik
 
PDF
Föreläsning om HTML
Johannes Karlsson
 
PDF
VT2019 - DA355A - Intro HTML & CSS
Anton Tibblin
 
PDF
HT16 - DA156A - Introduktion till HTML
Anton Tibblin
 
PDF
VT18 - DA355A/DA344A - Introduktion till HTML
Anton Tibblin
 
PDF
HT17 - DA156A - Sammanfattning av kursen
Anton Tibblin
 
PDF
HT18 - DA156A - Extra
Anton Tibblin
 
PDF
VT17 - DA355A - Introduktion HTML
Anton Tibblin
 
ODP
Snabbkurs webbsida
Victoria Eriksson
 
PDF
Introduktion till CSS
Anton Tibblin
 
PDF
HT24 - Introduktion till webbutveckling - Introduktion till CSS
Anton Tibblin
 
PDF
HT17 - DA156A - Introduktion till CSS
Anton Tibblin
 
PDF
VT18 - DA355A - Introduktion till CSS
Anton Tibblin
 
PDF
HT16 - DA156A - Introduktion till CSS
Anton Tibblin
 
Spbl Fö6 Designprinciper Och Xml
bildljuddsv
 
HT19 - DA156A - Introduktion till HTML
Anton Tibblin
 
HT17 - DA156A - Introduktion till HTML
Anton Tibblin
 
Introduktion till HTML
Anton Tibblin
 
HT24 - Introduktion till webbutveckling - Introduktion till HTML
Anton Tibblin
 
CSS
bjornh
 
Koda strikt
medieteknik
 
Föreläsning om HTML
Johannes Karlsson
 
VT2019 - DA355A - Intro HTML & CSS
Anton Tibblin
 
HT16 - DA156A - Introduktion till HTML
Anton Tibblin
 
VT18 - DA355A/DA344A - Introduktion till HTML
Anton Tibblin
 
HT17 - DA156A - Sammanfattning av kursen
Anton Tibblin
 
HT18 - DA156A - Extra
Anton Tibblin
 
VT17 - DA355A - Introduktion HTML
Anton Tibblin
 
Snabbkurs webbsida
Victoria Eriksson
 
Introduktion till CSS
Anton Tibblin
 
HT24 - Introduktion till webbutveckling - Introduktion till CSS
Anton Tibblin
 
HT17 - DA156A - Introduktion till CSS
Anton Tibblin
 
VT18 - DA355A - Introduktion till CSS
Anton Tibblin
 
HT16 - DA156A - Introduktion till CSS
Anton Tibblin
 
Ad

More from bjornh (18)

PPT
Info kexjobb-2013-11-11
bjornh
 
PPT
Info om masterval och kexjobb, medieteknik KTH VT2013
bjornh
 
PPTX
Teaching procrastination - A way of helping students to improve their study h...
bjornh
 
PPT
Info masterval medieteknik på KTH 2012-05-03
bjornh
 
PPT
Info masterval och kexjobb i medieteknik KTH HT 2011
bjornh
 
PPT
LIKT seminar on mobile learning
bjornh
 
PPT
Location-based mLearning reminders
bjornh
 
PPT
K-Seminar on mobile learning
bjornh
 
PPT
Podcastseminarium
bjornh
 
PPT
Web 2.0
bjornh
 
PPT
Web publishing and XHTML
bjornh
 
PPT
CSS
bjornh
 
PPT
XSL-FO
bjornh
 
PPT
RDF och RSS
bjornh
 
PPT
Device Independence
bjornh
 
PPT
XSLT
bjornh
 
PPT
PHP och MySQL
bjornh
 
PPT
Web 2.0
bjornh
 
Info kexjobb-2013-11-11
bjornh
 
Info om masterval och kexjobb, medieteknik KTH VT2013
bjornh
 
Teaching procrastination - A way of helping students to improve their study h...
bjornh
 
Info masterval medieteknik på KTH 2012-05-03
bjornh
 
Info masterval och kexjobb i medieteknik KTH HT 2011
bjornh
 
LIKT seminar on mobile learning
bjornh
 
Location-based mLearning reminders
bjornh
 
K-Seminar on mobile learning
bjornh
 
Podcastseminarium
bjornh
 
Web 2.0
bjornh
 
Web publishing and XHTML
bjornh
 
CSS
bjornh
 
XSL-FO
bjornh
 
RDF och RSS
bjornh
 
Device Independence
bjornh
 
XSLT
bjornh
 
PHP och MySQL
bjornh
 
Web 2.0
bjornh
 
Ad

XML och DTD

  • 1. XML - Uppbyggnad och modellering med DTD
  • 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 &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;> <html> <head> <title>En webbsida</title> </head> <body> <h1>En rubrik><h1> </body> </html>
  • 4. Exempel - SMIL <smil> <head> <layout> <root-layout height=&quot;350&quot; width=&quot;600&quot; title=”exempel&quot;/> <region id=&quot;w&quot; left=&quot;174&quot; top=&quot;100&quot; height=&quot;47&quot; width=&quot;63&quot; /> </layout> </head> <body> <video src=&quot;Help.mov&quot; begin=&quot;0.00s&quot; end=&quot;11.00s&quot; /> </body> </smil>
  • 5. Exempel - Dataformat <imf> <head> <version>3.0</version> <source supplier=&quot;Company-1&quot; application=&quot;Application-1&quot;/> <time>1997-10-06T00:11:00.00+2</time> </head> <body> <object action=&quot;modify&quot;> <PrintingJob/> <object_uid> <source supplier=&quot;Company-1&quot; application=&quot;Application-1&quot;/> <local_id>17</local_id> </object_uid> <attributes> <ActualCopies>14322</ActualCopies> </attributes> </object> </body> </imf>
  • 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 < &lt; (less than) > &gt; (greater than> & &amp;(ampersand) ” &quot;(quotation) ’ &apos;(apostrophe) Å &#197; Ä &#196; Ö &#214; å &#229; ä &#228; ö &#246;
  • 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&quot;
  • 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!