Figur 13.1. Et eksempel på et XML-dokument <?xml version="1.0" encoding ="ISO-8859-1"?> XML jfr. Systemutvikling fra kjernen og ut, fra skallet og inn kapittel 13 <book> <description> <genre>systemutvikling</genre> <title>fra kjernen og ut, fra skallet og inn</title> <author> <first-name>gerhard</first-name> <last-name>skagestein</last-name> </author> </description> <body>. (se neste lysark) </body> </book> Vi snakker gjerne om et XMLdokument, selv om det kanskje ikke er meningen å skrive det ut på papir. Terminologien understreker imidlertid at XML er et tekstbasert format. INF102-XML--1 INF102-XML--2 Fig 13.1. Et eksempel på et XML-dokument (forts) <body> <chapter title = "Innledning"> <p>i dette kapitlet ser vi på hvordan den samfunnsmessige og teknologiske utviklingen påvirker systemutviklingsfaget, og hvilke konsekvenser dette har for de metoder og teknikker som brukes under utvikling av datamaskinbaserte systemer. </p> <subheading>en ny tid</subheading> <p>javel, så vi vil forsøke å forbedre verden ved hjelp av et nytt eller forbedret datamaskinbasert system? Ja, for ellers ville vi vel ikke bruke tid og penger på å utvikle det?</p> <p>ved hjelp av informasjonsteknologien har vi kunnet skape et informasjonssamfunn som vi ikke en gang kunne ane konturene av for mindre enn 50 år siden. Det moderne samfunn ville være utenkelig uten datamaskinbaserte informasjonssystemer. Mye av den velstand og de livskvaliteter vi har i dag kan tilskrives en fornuftig innsats av informasjons- og kommunikasjonsteknologi (IKT). </p>... </chapter> <chapter title = "Systemutviklingsprosessen"> <p>...</p> <image name="figur2.1.jpg"/> </chapter>... </body> Figur 13.2. Et annet eksempel på et XML-dokument <?xml version="1.0" encoding="iso-8859-1"?> <KOMMUNELISTE TYPE = "TABLE"> <KOMMUNENR TYPE="CHAR">0101</KOMMUNENR> <KOMMUNENAVN TYPE="VARCHAR2">Halden</KOMMUNENAVN> <AVFALLSMENGDE TYPE="NUMBER">10228</AVFALLSMENGDE> <INNBYGGERTALL TYPE="NUMBER">26417</INNBYGGERTALL> <AVFALLPERINNBYGGER TYPE="NUMBER">387,2</AVFALLPERINNBYGGER> <KOMMUNENR TYPE="CHAR">0104</KOMMUNENR> <KOMMUNENAVN TYPE="VARCHAR2">Moss</KOMMUNENAVN> <AVFALLSMENGDE TYPE="NUMBER">10423</AVFALLSMENGDE> <INNBYGGERTALL TYPE="NUMBER">25860</INNBYGGERTALL> <AVFALLPERINNBYGGER TYPE="NUMBER">403,1</AVFALLPERINNBYGGER> </KOMMUNELISTE> INF102-XML--3 INF102-XML--4
Hva er XML? XML Extensible Markup Language Et standardisert format for data + beskrivelse av data Bygger (i likhet med HTML) på SGML Standard Generalized Markup Language o Standardisert ISO 8879:1985 o Brukt i en årrekke i trykkeribransjen Forskjeller mellom XML og HTML XML sier bare noe om hva dataene er, ikke hvordan de skal vises fram I XML kan du definere dine egne koder ( tagger ) XML har mye strengere krav til syntaks o Må ha både startkode og sluttkode <kode> </kode>, evt en kombinert start- og sluttkode <kode/> o startkode innhold sluttkode utgjør et element o Elementer må være perfekt nøstet startkode sluttkode Et element: attributt med attributtverdi INF102-XML--5 INF102-XML--6 Velstrukturerte og gyldige XML-dokumenter Et XML-dokument er velstrukturert dersom det tilfredsstiller enkle syntaktiske krav: o Et XML- dokument må ha ett eneste rotelement o Alle andre elementer må være perfekt nøstet dvs. danne en hierarkisk struktur Strengere regler kan pålegges ved hjelp av en Dokumenttypedefinisjon Document Type Definition (DTD) eller et XML-Schema Et XML-dokument kan da være gyldig i henholdt til en gitt DTD eller et gitt XML Schema Er XML-dokumentet velstrukturert? <?xml version="1.0" encoding="iso-8859-1"?> Error: Mismatched end tag: expected, got </KOMMUNELISTE> in unnamed entity at line 20 char 15 of.. <KOMMUNELISTE TYPE = "TABLE"> <KOMMUNENR TYPE="CHAR">0101</KOMMUNENR> <KOMMUNENAVN TYPE="VARCHAR2">Halden</KOMMUNENAVN> <AVFALLSMENGDE TYPE="NUMBER">10228</AVFALLSMENGDE> <INNBYGGERTALL TYPE="NUMBER">26417</INNBYGGERTALL> <AVFALLPERINNBYGGER TYPE="NUMBER">387,2</AVFALLPERINNBYGGER> <KOMMUNE/> <KOMMUNENR TYPE="CHAR">0104</KOMMUNENR> <KOMMUNENAVN TYPE="VARCHAR2">Moss</KOMMUNENAVN> <AVFALLSMENGDE TYPE="NUMBER">10423</AVFALLSMENGDE> <INNBYGGERTALL TYPE="NUMBER">25860</INNBYGGERTALL> <AVFALLPERINNBYGGER TYPE="NUMBER">403,1</AVFALLPERINNBYGGER> <KOMMUNE/> </KOMMUNELISTE> INF102-XML--7 INF102-XML--8
Figur 13.5. XML-dokument med dokumenttypedeklarasjon <?xml version="1.0" encoding="iso-8859-1"?> Dokumenttypedeklarasjon <!DOCTYPE KOMMUNELISTE SYSTEM kommuneliste.dtd > <KOMMUNELISTE TYPE = "TABLE"> <KOMMUNENR TYPE="CHAR">0101</KOMMUNENR> <KOMMUNENAVN TYPE="VARCHAR2">Halden</KOMMUNENAVN> <AVFALLSMENGDE TYPE="NUMBER">10228</AVFALLSMENGDE> <INNBYGGERTALL TYPE="NUMBER">26417</INNBYGGERTALL> <AVFALLPERINNBYGGER TYPE="NUMBER">387,2</AVFALLPERINNBYGGER> <KOMMUNENR TYPE="CHAR">0104</KOMMUNENR> <KOMMUNENAVN TYPE="VARCHAR2">Moss</KOMMUNENAVN> <AVFALLSMENGDE TYPE="NUMBER">10423</AVFALLSMENGDE> <INNBYGGERTALL TYPE="NUMBER">25860</INNBYGGERTALL> <AVFALLPERINNBYGGER TYPE="NUMBER">403,1</AVFALLPERINNBYGGER> </KOMMUNELISTE> Er XML-dokumentet gyldig med hensyn på dokumenttypedefinisjonen på kommuneliste.dtd? Figur 13.3. En Dokumenttypedefinisjon - DTD På filen kommuneliste.dtd: <!ELEMENT KOMMUNELISTE (KOMMUNE)*> <!ATTLIST KOMMUNELISTE TYPE CDATA #REQUIRED> <!ELEMENT KOMMUNE (FYLKENR, KOMMUNENR, KOMMUNENAVN, AVFALLSMENGDE, INNBYGGERTALL, AVFALLPERINNBYGGER)*> <!ATTLIST KOMMUNE TYPE CDATA #REQUIRED> <!ELEMENT FYLKENR (#PCDATA)> <!ELEMENT KOMMUNENR (#PCDATA)> <!ELEMENT KOMMUNENAVN (#PCDATA)> <!ELEMENT AVFALLSMENGDE (#PCDATA)> <!ELEMENT INNBYGGERTALL (#PCDATA)> <!ELEMENT AVFALLPERINNBYGGER (#PCDATA)> <!ATTLIST FYLKENR TYPE CDATA #REQUIRED> <!ATTLIST KOMMUNENR TYPE CDATA #REQUIRED> <!ATTLIST KOMMUNENAVN TYPE CDATA #REQUIRED> #PCDATA = Parced Character Data, dvs. tekst <!ATTLIST AVFALLSMENGDE TYPE CDATA #REQUIRED> <!ATTLIST INNBYGGERTALL TYPE CDATA #REQUIRED> <!ATTLIST AVFALLPERINNBYGGER TYPE CDATA #REQUIRED> INF102-XML--9 INF102-XML--10 To innvendinger mot DTD: DTD er en døende hest Språket er ikke omfattende nok Det avviker fra XML hvilket er unødvendig (hvorfor være tvunget til å lære to språk når det holder med ett?) Derfor vil DTD bli avløst av XML-Schema INF102-XML--11 Figur 13.4. Et XML-skjema <?xml version="1.0" encoding="iso ="ISO-8859 8859-1"?> xsd:schema schema xmlns:xsd xsd="http:// ="http://www www.w3.org/2001/.w3.org/2001/xmlschema XMLSchema"> name= KOMMUNELISTE KOMMUNELISTE > ref = "KOMMUNE" maxoccurs = "500" /> > name = "KOMMUNE"> name = "FYLKENR" type="xsd xsd:string string"/> name = "KOMMUNENR" type="xsd xsd:string string"/> name = "KOMMUNENAVN" type="xsd xsd:string string"/> name = "AVFALLSMENGDE" type="xsd xsd:integer integer"/> name = "INNBYGGERTALL" type="xsd xsd:integer integer"/> name = "AVFALLPERINNBYGGER" type="xsd xsd:decimal decimal"/> > xsd:schema schema> INF102-XML--12
Figur 13.6. Element eller attributt? <description> <genre>systemutvikling</genre> <title>fra kjernen og ut, fra skallet og inn</title> <author> <first-name>gerhard</first-name> <last-name>skagestein</last-name> </author> </description> eller <description> <genre>systemutvikling</genre> <title>fra kjernen og ut, fra skallet og inn</title> <author first-name= Gerhard last-name = Skagestein > </author> </description>? Analogt med diskusjonen om noe skal oppfattes som et attributt til noe eller som et selvstendig objekt OBS: Liten trykkfeil i læreboka! To anvendelser av XML Som et lingua franca mellom systemer o Endelig en standard! o Emneorienterte koder må defineres (begge systemer må ha samme oppfatning av <KOMMUNE>) o Er tekstiig format alltid hensiktsmessig? o Stor datamessig overhead Men: Store muligheter for komprimering: XML-fil for alle kommuner: 142 KB. Zip et: 10 KB (7 %) Lagring av XML-dokumenter i en database o Native XML-database o Trenger vi enda en type database? Enda et DDL, DML og et spørrespråk INF102-XML--13 INF102-XML--14 Figur 13.7. XML i databasen og på datanettet Er en XML database en database? Vi har Lagring av data (XML-dokumenter) XML! Skjemaer (DTD, XML Schema) Spørrespråk (Xquery, Xpath, XQL, XML-QL, QUILT, ) XML? XML? Programmeringsgrensesnitt (APIer) (SAX, DOM, JDOM, ) Vi har ikke Kan også være: Mobiltelefoner Måleinstrumenter Skrivere Tekst-TV. Dataintegritet Transaksjoner Flerbrukertilgang Sikkerhetsmekanismer Spørringer på tvers av dokumenter INF102-XML--15 INF102-XML--16
Dokumentsentert XML Kommuneeksemplet er datasentrert Datasentrert XML Utformet (vanligvis) for menneskelig bruk XML blir brukt for datatransport Vanligvis håndkodet (enten direkte eller med verktøy) Utformet for å bli lest av maskiner Irregulær struktur XML-formatet er bare temporært og egentlig ikke viktig! Store elementer Blandet innhold Rekkefølgen på barneelementer er vanligvis signifikant Eksempler: Bøker, e-post, annonser, håndkodede web-sider Eksempler: Salgsordrer, flytidtabeller, aksjekurser, vitenskapelige målinger, avfallsdatabase Regulær struktur Små elementer Ikke blandet innhold Kommuneeksemplet (lysark XML-4) er datasentrert! Bokeksemplet (lysark XML-2 og XML-3) er dokumentsentrert! Rekkefølgen på barneelementer er vanligvis uviktig Data kan komme fra en database og vi eksporterer XML eller utenfra, og vi vil lagre i en (ikke XML) database INF102-XML--17 INF102-XML--18 Fremvisning av XML-dokumenter i en nettleser XML-dokumenter er ikke ment for direkte fremvisning To løsninger: Spesifisere hvordan de enkelte elementer skal vises fram ved hjelp av et stilark Cascading Style Sheet (CSS) knyttet til kodene (utgående løsning) <?xml-stylesheet type="text/css"href="kommuner.css"?> Oversette XML-dokumentet til HTML ved hjelp av XSLT (Extensible Style Language Translator) (fremtiden) <?xml-stylesheet type="text/xsl" href="kommuneliste.xsl"?> Figur 13.8. Et stilark ( Cascading Style Sheet ) CSS KOMMUNE background-color: #ffffff; width: 100%; FYLKENR display: block; margin-left: 0; KOMMUNENR, KOMMUNENAVN color: #FF0000; font-size: 14pt; AVFALLSMENGDE, INNBYGGERTALL, AVFALLPERINNBYGGER display: block; color: #000000; margin-left: 20pt; INF102-XML--19 INF102-XML--20
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <table border="2" bgcolor="yellow"> <tr> <th>fylkenr</th> <th>kommunenr</th> <th>kommunenavn</th> </tr> <xsl:for-each select="kommuneliste/kommune"> <tr> <td><xsl:value-of select="fylkenr"/></td> <td><xsl:value-of select="kommunenr"/></td> <td><xsl:value-of select="kommunenavn"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> Figur 13.9. XSLT - Eksempel XSLT-prosess UI Fylke (fylkenr) XML med begreper og representasjoner eksempel fylkenr fylkenr Kommune (lokalt_knr) kommunenr fylkenavn NOT NULL kommunenavn XMLdokument HTMLdokument XSLTdokument Kommunenavn (kommunenavn) Fylkenavn (fylkenavn) Mengde (# tonn) avfallsmengde En gruppert ORM-modell! Antall (#) NOT NULL innbyggertall INF102-XML--21 INF102-XML--22 Figur 13.10. XML med begreper og representasjoner <?xml version='1.0'?> <!DOCTYPE skole SYSTEM avfall.dtd"> <Avfall> <Fylke> <fylkenr begrep= Fylke repr= fylkenr >01</fylkenr> <fylkenavn begrep = Fylkenavn repr= fylkenavn > Østfold</fylkenavn> </Fylke> <Fylke>... </Fylke> <Kommune> <fylkenr begrep= Fylke repr= fylkenr >01</fylkenr> <kommunenr repr= lokalt_knr >01</kommunenr> <kommunenavn begrep= Kommunenavn repr= kommunenavn >Halden</ kommunenavn>. </Kommune>.. </Avfall> INF102-XML--23 XML med begreper og representasjoner DTD Document Type Definition på fil avfall.dtd <!-- Avfall elements --> <!ELEMENT avfall (Fylke Kommune)*> <!-- ========= Fylke ========== --> <!ELEMENT Fylke (fylkenr, fylkenavn)> <!ELEMENT fylkenr (#PCDATA)> <!ATTLIST fylkenr <!ELEMENT fylkenavn (#PCDATA)> <!ATTLIST fylkenavn... <!-- ===== Kommune ========== --> <!ELEMENT Kommune (fylkenr, kommunenr, kommunenavn, avfallsmengde, innbyggertall)> <!ELEMENT fylkenr (#PCDATA)> <!ATTLIST fylkenr <!ELEMENT kommunenr (#PCDATA)> <!ATTLIST kommunenr <!ELEMENT kommunenavn (#PCDATA)> <!ATTLIST kommunenavn... INF102-XML--24