MOD 250 Avansert programvareteknologi Extensible Markup Language, XML

Størrelse: px
Begynne med side:

Download "MOD 250 Avansert programvareteknologi Extensible Markup Language, XML"

Transkript

1 MOD 250 Avansert programvareteknologi Extensible Markup Language, XML Yngve Lamo Oktober 2004, revidert Oktober 2005 Contents 1 Introduksjon til XML 3 2 Læringsmål 5 3 Syntaksen til XML 6 4 HTML, XHTML og XML 10 5 XML dokumneter XML eksempel, dinosaur liste Vellformede og gyldige XML dokumenter 13 7 Bruk av DTD for å spesifisere strukturen til XML dokumenter: Form til DTD-er Regulære uttrykk: DTD som beskriver dinosaurus eksemplet

2 8 XML-skjema 17 9 JAXP, Parsing av XML dokumenter i Java ved bruk av SAX og DOM Parsing ved hjelp av SAX Kjøring av SAX eksemplet Parsing ved hjelp av DOM Parsing av dinosaurus.xml dokumentet ved bruk av DOM Sammenligning av SAX og DOM Bruk av DOM til generering og editering av XMLdokumenter Oversetting mellom forskjellige XML formater ved bruk av TrAX APIen Oversetting av XML-dokumenter til andre dokument formater Litt om XPath XSLT eksempel for dinosaurus.xml Eksempel på bruk av TrAX APIen til oversettingen mellom XML og HTML XML og databaser Bevaring av XML struktur i relasjonsdatabaser Lagring av XML data som CLOB eller BLOB Tabell representasjon av XML-dokumenter i relasjonsmodellen

3 1 Introduksjon til XML XML er et markup language, dvs. et språk som brukes til å strukturere og presentere data. En XML presentasjon har vanligvis følgende komponenter: 1. Selve XML dokumentet som inneholder dataene som skal lagres (.xml fil) 2. Struktureringsdel, strukturen til innholdet i dokumentet beskrives uten tanke på hvordan innholdet skal presenteres (XML skjema, DTD) 3. Presentasjonsdel som viser hvordan dokumentet skal (XSLT) presenteres XML dokumenter lagres som tekst filer, noe som gjør XML dokumenter plattform uavhengige og lette å bruke både for mennesker og maskiner XML kan også brukes som et meta språk, altså et språk som kan brukes til å definere andre språk XML er bygget på SGML (Standard Generalized Markup Language), (standardisert i 1996) og HTML 3

4 XML ble designet ut fra behovet for spesifisere semantikken (meningen og strukturen) til HTML-dokumenter (websider). HTML sier ingenting om hva informasjonen er, kun hvordan informasjonen skal presenteres XML kan sees på som en bru mellom HTML-dokumenter, som sier hvordan informasjon skal presenteres, og konseptuelle språk som brukes til å modelere strukturen til informasjon (eksempel på konseptuelle språk: UML, ER diagrammer, database skjema) XML bruker merkelapper (tags) for å beskrive de forskjellige komponentene i dokumentet I motsetning til HTML kan brukere lage sine egne merkelapper i XML. XML kan derfor brukes til å modelere all slags informasjon I Java verden brukes XML til følgende: Lage WEB presentasjoner Sende meldinger (informasjon) mellom distribuerte systemer/komponenter Persistent lagring av data Beskrive egenskaper til aplikasjoner, e.g. WEB.xml fil som beskriver egenskaper til servlets 4

5 2 Læringsmål Hva bruker en XML til? Hvordan lager en egne XML filer? Hva er Java API-en for XML prosesering, JAXP og hvordan bruker en denne? Hva er simple API for XML, (SAX) og hvordan brukes den til å parse XML filer? Parsing av XML filer ved hjelp av Document Object Model (DOM) API-en og sammenligne dette med hvordan dette gjøres i SAX Validering av XML filer v.h.a. Document Type Definition, DTD og XML-skjema Hvordan bruke Extensible Stylesheet Language Transformation (XSLT) og XPath utrykk for å oversette mellom XML-filer og andre filer f.eks. HTML Hva er sammenhengen mellom databaser og XML 5

6 3 Syntaksen til XML Dokument: Et XML dokument består av 2 deler: Header, gir andre aplikasjoner den informasjonen som de trenger for å håndtere dokumentet. Dette kan være informasjon om hvilken versjon av XML en bruker, hvilken tekstkoding som gjelder for dokumentet, hvor en finner hvilke regler som brukes for å definere dokumentet (DTD/XMLskjema) og hvordan dokumentet skal presenteres (XSLT) Inhold, dvs. selve XML-dataene som er lagret i dokumentet Tager: Alle XML tager begynner med < tegnet og slutter med > tegnet Et XML element består av en åpningstag og en sluttag med data imellom i.e.: <tag-navn> tekst som beskriver elementet </tag-navn> Rotelementet er det ytterste elementet i et XML-dokument og beskrivelsen av rotelementet må begynne med den første starttag og slutte med den siste slutttag i dokumentet. Rotelementet virker som et referansepunkt til XML-dokumentet utenfra. 6

7 XML elementer kan nestes innenfor hverandre, følgende er lovlig: <ytre> tekst som beskriver ytre element <indre> tekst som beskriver indre element</indre> </ytre> Følgende er ikke lovlig: <ytre> tekst som beskriver ytre element <indre> tekst som beskriver indre element </ytre> </indre>, siden ytre tag slutter før indre tag Elementer som inneholder andre elementer kalles foreldre. Elementer som er inneholdt i andre elementer kalles barn (av foreldre) Atributter: Istedenfor å bruke nestede elementer kan en bruke atributter. Atributter defineres innenfor start tagen til et element, på følgende vis: <element atributt1="verdi1" atributt2="verdi2" tekst som beskriver element </element> 7

8 Samme informasjonen kan presenteres ved bruk av elementer på følgende måte: <element> <atributt1> verdi1 </atributt1> <atributt2> verdi2 </atributt2> tekst som beskriver element </element> Namespaces For å ungå konflikter med like navn definerer XML namespaces, dette gjør at en kan bruke samme navn for tager dersom tagene tilhører forskjellige namespaces(kontekst) En definerer namespace ved å skrive xmlns:prefix="uri" Eksempel på bruk av samme tagnavn fra forskjellige namespaces: <tagroot> xmlns = " xmlns:xyz=" <xyz:tag1> tekst som beskriver elementet </xyz:tag1> <tag1> tekst som beskriver elementet </tag1> </tagroot> Kommentarer: En kommentar har følgende form <!-- kommentar --> 8

9 Spesielle tegn: Følgende tegn har spesiell koding i XML: Tegn Koding & & &apos; > > < < " 9

10 4 HTML, XHTML og XML Ikke alle HTML dokumenter er vellformede XML dokumenter, siden ikke alle HTML elementer har en slutt tag. For eksempel trenger ikke paragraf element som begynner med tagen <p> ha en sluttag i HTML, for at dette skal være syntaktisk rett i XML må paragrafen ha en sluttag </p> I XML skiller en mellom store og små bokstaver, dette gjøres ikke i HTML I XML må alle attributt verdier være innenfor hermetegn, dette er ikke er nødvendig i HTML XHTML virker som en bru mellom HTML og XML, siden alle vellformede XHTML dokumenter er vellformede XML dokumenter XHTML kan sees på som et språk som er definert i XML 10

11 5 XML dokumneter 5.1 XML eksempel, dinosaur liste Fra filen dinosaur.xml <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="dinosaurs.xsl"?> <!DOCTYPE DinoList SYSTEM "dinosaurs.dtd"> <DinoList> <Dinosaur period="late Cretaceous"> <Name>Tyrannosaurus Rex</Name> <Group>Carnosaur</Group> <Range> <Region>Europe</Region> <Region>North America</Region> </Range> <PhysicalAttr> <Length unit="feet">39</length> <Weight unit="tons">6</weight> </PhysicalAttr> </Dinosaur> <Dinosaur period="early Jurassic"> <Name>Dilophosaurus</Name> <Group>Coelurosaur</Group> <Range> <Region>Asia</Region> <Region>North America</Region> </Range> <PhysicalAttr> <Height unit="metres">3</height> <Length unit="metres">6</length> 11

12 <Weight unit="tons">2</weight> </PhysicalAttr> </Dinosaur> <Dinosaur period="late Jurassic"> <Name>Stegosaurus</Name> <Group>Stegosaur</Group> <Range> <Region>Europe</Region> <Region>Asia</Region> <Region>North America</Region> </Range> <PhysicalAttr> <Length unit="metres">9</length> <Weight unit="kgs">3100</weight> </PhysicalAttr> </Dinosaur> </DinoList> Merk at første linje inneholder følgende XML deklarasjon <?xml version="1.0" encoding="utf-8"?> Deklarasjoenen sier hvilken versjon av XML dokumentet er kodet i og hvilken koding som er brukt for tegnene N.B. det skal ikke forekomme noen tegn før XML deklarasjonen <DinoList> taggen er rootelementet til dokumentet; rootelementet inneholder alle andre elementer i dokumentet 12

13 6 Vellformede og gyldige XML dokumenter Et hvert XML dokument som er syntaktisk riktig er vellformet Alle vellformede dokument er ikke nødvendigvis gyldige, for at et dokument skal være gyldig må det være vellformet og i tillegg må dokumentet ha rett struktur Det er to måter å spesifisere hvilken struktur et XMLdokument må oppfylle for å være gyldig: Document Type Definition, DTD, dette er den opprinnelige måten å spesifisere krav til XML dokumenter. Selv om DTD ikke er så uttrykksfullt som XML-skjema brukes DTD fortsatt mest i praksis XML schema er en nyere og kraftigere måte å spesifisere strukturen til XML dokumenter på. Det forventes at dette vil bli den dominerende måten etterhvert Et problem med DTD-er er at de ikke er gyldige XML dokumenter, dvs at XML parsere må håndtere DTD-er på en spesiell måte 13

14 7 Bruk av DTD for å spesifisere strukturen til XML dokumenter: En DTD spesifiserer strukturen til et XML dokument dvs. hvilke elementer som kan finnes i dokumentet, deres inbyrdes ordning og hvilket antall de enkelte elementene kan forekomme DTD-en til et XML dokument lagres ofte i en egen fil (kan også legges først i fila som bruker DTD-en), dinosaur lista bruker følgende DTD: <!DOCTYPE DinoList SYSTEM "dinosaurs.dtd"> dvs at parseren som skal lese innholds XML dokumentet vil lete etter DTD-en i samme katalog som dokumentet er lagret 7.1 Form til DTD-er En spesifiserer DTD-er på følgende måte:, hvor: <! DOCTYPE navn [DTD spesifikasjon]> navn er navnet til rootelementet (rottagen) til XML fila spesifikasjon er reglene som XML fila må oppfylle 14

15 De enkelte element i XML dokumentet er definert ved: <! ELEMENT Element_Navn [inholds spesifikasjon]>, hvor innholds spesifikasjon har følgende form: Andre elementer Symbolet #PCDATA Symbolet EMPTY Symbolet ANY Regulære utrykk bestående av de forrige 4 typene Attributter er definert ved: <! ATTLIST [element_navn [attributtnavn atributt_type default]*]> Hvor: atributt-type kan være f.eks. CDATA som betegner character data (string), dette er tekst som ikke skal parses atributt-type kan være f.eks. #PCDATA som betegner parsed character data eller en kan ramse opp mulige verdier på følgende måte: (verdi_1 verdi_2... verdi_n) En atributt verdi er obligatorisk (default) dersom det står #IMPLIED 15

16 7.1.1 Regulære uttrykk: Regulære utrykk brukes til å beskrive formen på tekst og er definert rekurisvt som følger: utr1, utr2, utr3; en liste av uttrykk utr*; null eller flere forekomster av et uttrykk utr+; en eller flere forekomster av et uttrykk utr?; null eller en forekomster av et uttrykk utr1 utr2; utr1 eller eller utr2 må forekomme 7.2 DTD som beskriver dinosaurus eksemplet Følgende er fra filen dinosaurus.dtd: <?xml version= 1.0 encoding="utf-8"?> <!ELEMENT DinoList (Dinosaur+)> <!ELEMENT Dinosaur(Name,Group,Range,PhysicalAttr)> <!ATTLIST Dinosaur period CDATA #IMPLIED> <!ELEMENT Group (#PCDATA)> <!ELEMENT Height (#PCDATA)> <!ATTLIST Height unit CDATA #IMPLIED> <!ELEMENT Length (#PCDATA)> <!ATTLIST Length unit CDATA #IMPLIED> <!ELEMENT Name (#PCDATA)> <!ELEMENT PhysicalAttr(Height?,Length?,Weight?)> <!ELEMENT Range (Region+)> <!ELEMENT Region (#PCDATA)> <!ELEMENT Weight (#PCDATA)> <!ATTLIST Weight unit CDATA #IMPLIED> 16

17 8 XML-skjema XML-skjema tilbyr en mer uttrykksfull (og komplisert) måte å spesifisere XML-dokumenter på: Et XML skjema er et gyldig XML dokument som spesifiserer strukturen til XML dokumenter, noe som ikke er tilfellet for DTD En XML-skjema definisjon (XSD) kan sees på som en gramatikk som beskriver lovlige XML dokumenter Ved å bruke XSD kan en spesifisere data krav (constraints), relasjoner mellom dataelementer og navnerom mer nøyaktig en ved bruk av DTD XSD tilbyr gjenbruk av definisjoiner og det finnes en rekke tilgjengelige skema definisjoener som en kan benytte seg av Taggene som brukes i et XML-skjema er forhåndsdefinert i XML-namespacet, selve skjema definisjonen er et eget XML-dokument som bruker dette namespacet XML-skjema dokument defineres i en XML-skjema definisjons (.xsd) fil og må inneholde link til namespace for XML-skjema, dvs. følgende linje må være med i XML-skjema dokumentet: <xsd:schema xmlns:xsd= " 17

18 Hvis en ønsker at et XML-dokument skal bruke et XMLskjema når en parser XML-dokumentet, må selve XMLdokumentet være et XML-skjema instanse dokument (xsi). xsi dokumentet må vite hvor det kan finne.xsd filen, dvs. en trenger å inkludere følgende namespace: <dokumentnavn xmlns:xsi= " xsi:nonamepaceschemalocation = "sti_til_skjema.xsd"> Vi skal nå ta med hovedpunktene om hvordan en bruker XML-skjema, for fyldigere informasjon se: XML skjema har en rekke av innebygde datatyper, her er noen av de mest brukte: Integer String Date Time Float Byte ID IDREF En spesifiserer antall forekomster av de enkelte elementene i et XML-skjema ved å sette atributtene minoccurs og maxoccurs 18

19 Det er to typer elementer Enkle (simple) elementer er elementer som ikke kan inneholde andre elementer eller atributter(de kan ikke ha barn) Sammensatte (complex) elementer kan inneholde andre elementer og atributter Her kommer noen biter fra XML-skjema, dinosaurus.xsd som brukes til å beskrive dinosaurus.xml dokumenetet. Først kommer header som sier hvilken type XML og koding som brukes, så spesifiserer vi at det skal brukes XMLskjema: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd= " Elementet DinoList er en sammensatt type som inneholder en sekvens av Dinosaurer med minimum en Dinosaur: <xsd:element name="dinolist"> <xsd:complextype> <xsd:sequence> <xsd:element maxoccurs="unbounded" minoccurs="1" ref="dinosaur"/> </xsd:sequence> </xsd:complextype> </xsd:element>... </xsd:schema> 19

20 9 JAXP, Parsing av XML dokumenter i Java ved bruk av SAX og DOM For å kunne bruke et XML dokument må vi først sjekke at programmet er vellformet og gyldig, eventuelt returnere feilmeldinger. For å gjøre dette bruker vi et program som kalles XML parser. Java API-en for XML prosesering, jaxp.xml kan sees på som en abstraksjon for leverandør uavhengig parsing av XML-dokumenter i JAVA (ala JDBC for databaser). jaxp har innebygd funksjonalitet for å håndtere XML-parsere og leveres med en standard parser (Crimsone, som ikke er en del av jaxp) det finnes en mengde av andre XML parsere som en kan laste ned, se: Ved å bruke jaxp kan vi håntere XML dokumenter i java uten å ta hensyn til hvilken parser vi bruker, vi kan bytte parser (f.eks. til Xerces) uten å endre jaxp koden. Merk også at nyere versjoner av nettlesere har innebygd XML-parsere. Parseren brukes også til å sende informasjon om det parsede XML-dokumentet til programmer som skal prosesere XML dokument. Det er to standard måter å parse XML dokumenter: Simple API for XML; SAX er en W3C standard for prosesering av XML-dokumenter. En SAX parser er hendelses (event) basert og utfører handlinger når den leser infomasjon fra dokumentet f.eks. tagger, tekst, kommentarer..., dvs. at en manipulerer XML dokumentet samtidig som det parses Document Object Model; DOM er en annen W3C standard for prosesering av XML-dokumenter. En DOM parser bygger en trestruktur som inneholder hele XML 20

21 dokumentet i maskinens minne, iform av et Document objekt. Etter dokumentet er parset og en har bygget DOM strukturen får en tilgang til dokumentet via en peker til DOM strukturen. En kan manipulere XML dokumentet ved å bevege seg i DOM strukturen Java API-en for XML prosesering, jaxp.xml ble tatt opp som en del av Java fra og med Java 1.4 Standard Edition (før det var JAXP en del av J2EE). JAXP støtter både SAX og DOM SAX parsere er raske og egner seg for store dokumenter som ikke kan lagres i minnet på maskinen DOM parsere er lettere å bruke og har innebygget funksjonalitet for å bevege seg i XML dokumentet, noe som er vanskelig i SAX Uavhengig om en bruker SAX eller DOM for parsing av XML-dokumenter følger en konseptuelt samme fremgangsmåte, men syntaksen er noe forskjellig: Først skaffer en seg et Factory objekt som brukes til å lage det aktuelle parser objektet en skal bruke: "Type"Factory factory = "Type"Factory.newInstance() Hvis parseren skal sjekke om XML-dokumentet oppfyller DTD-en som som er spesifisert i XML-dokumentet setter en: factory.setvalidating( true ) Så lager en selve parser objektet parser: "Type"Parser parser = factory.new"type"parser(); 21

22 Hvis en ønsker at parseren skal være utstyrt med en spesiell feilhåndtering kan en sette parser objektets sin ErrorHandler, ved: parser.seterrorhandler(new ParserErrorHandler()); Tilslutt parser en selve XML-dokumentet: parser.parse( new InputSource("kilde.xml" )); 22

23 10 Parsing ved hjelp av SAX javax.xml.parser API-en har innebygd standard SAX parser som en kan bruke. Hver gang parseren leser en tag kalles en av metodene i interfacet org.xml.sax.contenthandler avhengig av hvilken type tag parseren leser. Disse metodene er implementert i klassen org.xml.sax.defaulthandler, men de gjør ingenting, så for å gjøre noe med XML dokumentet må vi utvide denne klassen med en klasse som overstyrer disse metodene. Siden SAX i utgangspunktet kun parser XML dokumentet uten å lagre innholdet er vi nødt til å lage egne Java klasser som lagrer informasjonen i XML-dokumentet. Vi må altså lage java klasser som representerer hver type av elementer som finnes i XML-dokumentet. Disse klassene inneholder get og set metoder som brukes til å manipulere verdier og atributter som skal lagres i klassen som representerer XML-elementet. Klassen BaseElement brukes som felles super klasse for klasser som representerer XML-elementer public abstract class BaseElement { private StringBuffer text = new StringBuffer(); public void setattributevalue( String name, String value) { throw new Error( "No attributes defined for element" + getclass() ); } 23

24 } public void addtext( String s ) { text.append( s ); } public String gettext() { return text.tostring(); } public String tostring() { return text.tostring(); } Under følger JAVA klassen Dinosaur som brukes til å representere Dinosaur XML-elementer. En må lage tilsvarende JAVA klasser for å representere alle XML elementer en ønsker bruke informasjon fra: public class Dinosaur extends BaseElement { private String period; private Name name; private Group group; private PhysicalAttr physicalattr; private Range range; public PhysicalAttr getphysicalattr() { return physicalattr; } public Range getrange() { return range; } public Group getgroup() { return group; 24

25 } public Name getname() { return name; } public String getperiod() { return period; } public void setphysicalattr( PhysicalAttr pa ) { this.physicalattr = pa; } public void setrange(range range) { this.range = range; } public void setperiod(string period) { this.period = period; } public void setgroup(group group) { this.group = group; } public void setname(name name) { this.name = name; } public void setattributevalue ( String name, String value ) { if ( name.equals( "period" ) ) { setperiod( value ); } } public String tostring() { return "(Name:" + name + ", Group:" + group 25

26 } } + ", Period:" + period + ", Range:" + range + ", Physical attributes:" + physicalattr + ")"; For at SAX parseren skal kunne gjøre noe med XML dokumentet lager vi klassen SAXModelBuilder, dette er altså en klasse som utvider DefaultHandler. DefaultHandler klassen er en hendelses basert klasse som er laget for å håndtere XML elementer, klassen er utstyrt med (dummy) metoder, som kalles når en: leser start taggen til et element, startelement leser sluttagen til et element, endelement leser data som er i et element, characters Litt om disse metodene: startelement 1. startelement metoden har følgende inn parametre String uri - Namespace URI som dokumentet bruker, eller tom streng hvis dokumentet ikke bruker namespace String localname - det lokale navnet (uten prefix) til elementet String qname - det kvalifiserte navnet (med prefix) til elementet Attributes attributes - attributtene til elementet 2. startelement metoden er implementert på følgende måte: 26

27 Først instansieres et BaseElement objekt element som brukes til å representerer det aktive XML-elementet ved bruk av: BaseElement element = null; Class c = Class.forName("examples.xml."+qname ); element = (BaseElement)c.newInstance(); Så brukes attrs parameteren til å sette attributt verdiene til element (Java objektet som tilsvarer det aktive XML elementet) som følger: for (int i=0; i<attrs.getlength(); i++){ element.setattributevalue( attrs.getqname(i), attrs.getvalue(i) ); Tilslutt legges element objektet på en stack: stack.push( element ); endelement 1. endelement metoden har følgende inn parametre String uri - Namespace URI som dokumentet bruker String localname - det lokale navnet til dokumentet String qname - det kvalifiserte navnet til elementet 2. endelement metoden kalles når sluttagen til et elementet leses og tar java objektet element fra stacken og bruker dette som input til foreldre elementets setelement (eller addelement) metode. Dette gjøres ved å bruke 27

28 hjelpe metoden setproperty. For eksempel sendes et group objekt til dinosaurus objektets setgroup metode, siden dinosaurus er foreldren til group characters 1. characters metoden har følgende inn parametre char[] ch, tegnene som håndteres int start, start posisjon i ch arrayen int length antall tegn som skal brukes fra ch arrayen 2. characters metoden kalles når parseren leser tekst data i et element og er implementert på følgende måte: Først legges char arrayen ch i en streng text: String text = new String( ch, start, len ); Så legges text strengen til teksten som er lagret i element objektet, husk at det aktive XML-elementet er det øverste elementet som er lagret på stacken, ved: ((BaseElement)(stack.peek())).addText(text); 28

29 10.1 Kjøring av SAX eksemplet 1. Ved å endre klassen SAXParserFactory, kan vi endre hvilken XML-parsers som skal brukes. Klassen brukes altså til å lage et factory objekt som igjen brukes til å lage en instanse av wrapperklassen SAXParser. Wrapperklassen saxparser brukes så til å lage et konkrete parser objekt som tilhører klassen XMLReader: SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxparser = factory.newsaxparser(); XMLReader parser = saxparser.getxmlreader(); 2. En instansiere så et objekt mb av klassen SAXModelBuilder og bruker dette til å ta hånd om hendelsene som oppstår når parseren leser XML-dokumentet SAXModelBuilder mb = new SAXModelBuilder(); parser.setcontenthandler( mb ); 3. Tilslutt parses input fila og en skriver ut innholdet i objektet som representerer rotelementet: parser.parse( new InputSource("dinosaurs.xml")); DinoList dinolist = (DinoList)mb.getModel(); System.out.println( "Dinosaurs = " + dinolist ); 29

30 11 Parsing ved hjelp av DOM Vi skal nå se hvordan vi kan parse XML dokumenter ved hjelp av DOM, som tidligere sagt er det enklere å bruke DOM, men parsingen går senere Som nevnt tidligere bygger DOM-parseren et tre som representerer XML-dokumentet og lagrer treet i minnet i form av et Document objekt. Document objektet er rotnoden til treet som representerer XML-dokumentet, under rotnoden til treet er det noder som blant annet representerer: Element Text Attr node interfacet er den viktigste datatypen i DOM. node er utstyrt med subklasser som kan representere informasjon som er lagret i et XML-dokument og metoder som kan hente ut data fra treet som representerer XML-dokumentet. node interfacet inneholder altså mye av funksjonaliteten som en må hardkode i SAX, noe som gjør at en ikke trenger å lage egne Javaklasser som representerer elementene i XMLdokumentet når en bruker DOM. node har blant annet følgende subtyper: Element som brukes for å representere XML-elementer Attr som representerer XML-attributter Comment som representerer XML-kommentarer Text som representerer XML-tekst 30

31 node inneholder blant annet følgende metoder: NamedNodeMap getattributes() Returnerer en samling som inneholder attributtene til node. NamedNodeMap er en samling av noder som kan akseseres ved navn NodeList getchildnodes() Returnererer en NodeList som inneholder alle barn til noden. NodeList er en samling av noder som har kun to metoder en for å finne lengden til NodeList og en for å hente ut i te element fra NodeList Node getparentnode() Returnerer foreldren til noden Node getprevioussibling() Returnerer søsken noden som er rett før en node String gettextcontent() Returnerer teksten som er inneholdt i en node og teksten i alle nodens etterfølgere Nodelist har to metoder int getlength Antall noder som er lagret i lista Node item(int index) Returnerer noden som er lagret i posisjonen index fra nodelisten 31

32 11.1 Parsing av dinosaurus.xml dokumentet ved bruk av DOM 1. (a) Klassen DocumentBuilderFactory brukes til å lage et factory objekt (b) factory objektet brukes til å lage det konkrete parser objektet som tilhører klassen DocumentBuilder (c) parser objektet brukes så til å lage Document objektet som inneholder informasjon om XML-dokumentet. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newdocumentbuilder(); Document document = parser.parse(new InputSource("dinosaurs.xml")); 2. Vi er nå klar til å manipulere informasjonen som er lagret i document objektet, først bruker vi Document metoden getdocumentelement() til å få tak i Element objektet dinolist som representerer rotelementet til XML-dokumentet. Ved å bruke node metoden getelementsbytagname("dinosaur") på dinolist objektet får vi returnert en NodeListe som inneholder alle etterfølgende elementer som er merket med Dinosaur tagen. Element dinolist = document.getdocumentelement(); NodeList dinosaurs = dinolist.getelementsbytagname("dinosaur"); 32

33 3. Vi forsetter å bruke NodeList metoder for å hente ut de elementene vi er interessert i fra dinosaurus nodelisten: Først går vi igjennom hele dinosaurus listen ved å bruke getlength() metoden som grense for en for løkke. Siden dinosaur listen inneholder dinosaur Element kan vi midlertidig lagre hvert dinosaur Element i currelement elementet. Elementene hentes ut ved bruk av NodeList metoden item(i) som returnerer i te node i NodeList det gjøres på følgende måte: for( int i=0; i<dinosaurs.getlength(); i++ ) currelement = (Element)dinosaurs.item(i); 4. Vi henter nå ut navnet til currelement ved å bruke DOMParser klasse metoden getsimpleelementtext og sjekker om navnet til currelement er Dilophossaurus. Hvis dette er tilfellet henter vi ut gruppe navnet til Dilophossaurus og skriver ut denne informasjonen. String namevalue = getsimpleelementtext(currelement,"name"); if ( namevalue.equals("dilophosaurus") ) { groupname = getsimpleelementtext( currelement,"group" ); } System.out.println( "Dilophosaurus group: "+ groupname ); 33

34 12 Sammenligning av SAX og DOM Situasjoner hvor det er best å bruke SAX: En SAX-parser er hendelses orientert og bruker derfor lite minne resurser og er overlegen DOM Hvis en skal prosesere svært store XML-dokumenter kan det være at maskinen går tom for minne når den skal lage DOM-tre I tilfellet du skal søke etter spesiell informasjon i et XML-dokument vil SAX være raskere fordi du slipper å prosesere informasjon som ikke er relevant for søket SAX gir en muligheten til å avslutte parsingen under prosesering av dokumentet, i DOM må hele dokumentet parses før en kan gå videre Situasjoner det er best å bruke DOM I tilfelle XML-dokumentet inneholder kryssreferanser er det en fordel å bruke DOM siden en kan navigere fritt i DOM-treet, mens SAX-parseren leser dokumentet topdown Siden DOM lagrer hele XML dokumentet i minnet kan en endre XML-dokumenter mens det proseseres DOM gir en mulighet til å lage nye XML-dokumenter 34

35 13 Bruk av DOM til generering og editering av XML-dokumenter En kan bruke DOM til å generere et XML-tre i minnet og skrive dokumentet til en output stream på følgende måte: 1. Først lager en et DOMImplementation objekt domimpl som skal brukes til å lage DOM-treet. Objektet blir opprettet ved å bruke DocumentBuilder metoden getdomimplementation(): DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newdocumentbuilder(); DOMImplementation domimpl = builder.getdomimplementation(); 2. Så lages et Dokument objekt ved bruk av DOMImplementation metoden createdocument: createdocument(string namespaceuri, String qualifiedname, DocumentType doctype), hvor: namespaceuri er namespace URI til dokumentet som lages qualifiedname qualified name til dokumentet som lages doctype typen til dokument som lages, når doctype ikke er null er den Node: 35

36 Document document = domimpl.createdocument(null,"tagroot",null); 3. En får tilgang til rotnoden til dokumentet ved å bruke Document metoden getdocumentelement(), en lager nye atributter til elementer ved Element metoden setattribute("atributtnavn", "atributtverdi"): Element root = document.getdocumentelement(); root.setattribute( "testattr", "testvalue" ); 4. En lager nye Element ved å bruke Dokument metoden createelement("nyttelementnavn"), tilsvarende lager en nye tekst noder som inneholder tekst ved å bruke createtextnode( "tekst"), nodene legges så til treet ved å bruke appendchild("nodenavn"): Element tag1element = document.createelement( "tag1" ); Text tag1text = document.createtextnode("sample text"); tag1element.appendchild( tag1text ); root.appendchild( tag1element ); 36

37 5. Elementer kan legges inn hvor som helst i dokumentet og de behøver ikke ha noe innhold Element tag2element = document.createelement( "tag2" ); Text tag2text = document.createtextnode( "more text" ); tag2element.appendchild( tag2text ); tag1element.appendchild( tag2element ); Element tag3element = document.createelement( "tag3" ); root.appendchild( tag3element ); 37

38 14 Oversetting mellom forskjellige XML formater ved bruk av TrAX APIen TrAX APIen tilbyr oversettelse frem og tilbake mellom XML-dokumenter representert som DOM-trær, SAX eller strømmer. Bruk av Transformer klassen skjer på tilsvarende måte som parsing: 1. Først oppretter en et TransformerFactory objekt og setter eventuelt egenskaper som skal gjelde for oversettelsen på TransformerFactory objektet 2. Så bruker en TransformerFactory objektet til å opprette et Transformer objekt 3. Tilslutt bruker en Transformer objektet til å foreta oversettelse av dokumentet til formatet en ønsker For å foreta selve oversettelsen bruker en Transformer metoden transform(input, output), hvor input er input dokumentet av et gitt format som oversettes til et output dokument i et (annet) format. Følgende formater støttes: DOM dokumenter SAX dokumenter Forskjellige typer strømmer (Stream) 38

39 Nedenfor følger et eksempel på hvordan en kan oversette fra et DOMdokument, document og skrive ut resultatet i fila tags.xml :... Document document... TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newtransformer(); Source source = new DOMSource( document ); FileOutputStream fos = new FileOutputStream( "tags.xml" ); Result output = new StreamResult( fos ); transformer.transform( source, output ); 39

40 15 Oversetting av XML-dokumenter til andre dokument formater Extensible Stylesheet Transformation (XSLT) er et XML basert språk som brukes til å oversette XML-dokumenter til en rekke andre tekst baserte formater, f.eks. HTML, WML,PDF, osv. JAXP har støtte for XSLT Det er to ting som må gjøres når en skal bruke XSLT til å formatere XML-dokumenter 1. En lager en XSL fil som sier hvordan XML-dokumentet skal presenteres 2. En må også ha et program (nettleser), med innebygget XML parser. Programmet anvender XSL fila til å generere en presentasjon (ofte HTML) samtidig som det parser XML dokumentet. For å kunne bruke XSLT til oversetting av XML dokumenter trenger vi en.xsl fil som beskriver hvordan innholdet skal presenteres..xsl fila er et XML dokument, som må ha XSL stylesheet som rot element. XSL stylesheet er et namespace (mønster) som beskriver hvordan innholdet i XML dokumenter kan presenteres. XSL stylesheet namespace er definert på siden: 40

41 En XSL fil som beskriver en oversettelse av et XML-dokument til HTML har følgende form: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl = " version="1.0"> <xsl:output method="html"/> <!-- Beskrivelse av hvordan dokumentet skal presenteres --> <xsl:stylesheet xmlns:xsl> XSL stylesheet har et template element som brukes for å beskrive hvordan de enkelte XML elementene skal presenteres. match atributten til template elementet bestemmer hvilke XML elementer template skal anvendes på. Følgende template matcher dinosaur taggen i XML dokumentet og beskriver hvordan den skal presenteres: <xsl:template match="dinosaur"> <!-- Beskrivelse av hvordan dinosurus elementer skal presenteres --> </xsl:template> For å navigere i XML dokumentet bruker vi select"sti", hvor sti vanligvis er en relativ som beskriver hvordan vi skal navigerer videre ned i XML-treet ut fra hvor vi befinner oss. Sti kan også være en absolutt sti som gir en absolutt adresse til en node i treet. 41

42 Til å hente ut data fra et XML-dokument bruker vi xsl:value-of select"pattern", hvor pattern er en subtype av det aktive elementet. Følgende template skriver ut verdien til Name elementet og verdien til period atributten til det aktive Dinosaur elementet, begge som nivå 2 overskrifter: <xsl:template match="dinosaur"> <h2><xsl:value-of select="name"/></h2> <h2><xsl:value-of select="@period"/></h2> </xsl:template> Et template kan overfører kontroll til andre template ved å bruke xsl:apply-templates istruksjonen. Denne instruksjonen finner også alle noder som matcher templatet og prosesserer disse. Følgende template matcher rotnoden (dinosauruslisten) og skriver ut Dinosaurus før den overfører kontrollen til Dinosaur template som håndterer de enkelte Dinosaur elementene: <xsl:template match="/"> <html> <head><title>dinosaurs!</title></head> <body><h1>dinosaurs!</h1> <xsl:apply-templates select="dinolist/dinosaur"/> </body> </html> </xsl:template> 42

43 Hvis en ønsker å samle alle typer (elementer) som matcher et gitt select vilkår kan en bruke xsl:for-each taggen. Under blir alle Region elementer som finnes i Range elementet håntert: <xsl:template match="range"> <xsl:for-each select="region"> <!-- regler for hva en skal gj{\o}re med Region kommer her--> </xsl:for-each> </xsl:template> I tilfelle DTD-en som beskriver XML dokumenteten vi skal presentere inneholder valgfrie elementer hånteres disse ved bruk av xsl:if taggen. I eksemplet under blir det valgfrie Height elementet til PhysicalAttr håndtert kun hvis det aktuelle PhysicalAttr elementet inneholder et konkret Height element: <xsl:template match="physicalattr"> <xsl:if test="height"> <tr> <th>height</th> <td><xsl:value-of select="height"/> <xsl:text disable-output-escaping="yes"> &nbsp; </xsl:text> <xsl:value-of select="height/@unit"/> </td> </tr> </xsl:if> </xsl:template> 43

44 15.1 Litt om XPath Vi vil nå gi et lite inblikk i XPath, XML Path language, et språk som er utviklet for å hente ut informasjon som er lagret i XML-dokumenter. XPath henter ut informasjon ved å spesifisere hvor informasjonen er lagret, ved å gi (den absolutte eller relative) stien til informasjonen. Xpath inneholder også metoder for å oversette DOM objekter til boolean, double, eller string verdier XPath språket er en del av pakken javax.xml.xpath. Detaljert informasjon om XPath vil dere fine i lærebøker som går fyldig inn i XML og på siden: Et XPath utrykk består av en sti (og muligens et eller flere predikater), under følger noen grunnleggende XPath uttrykk: Operasjonen /, velger barnet til en node (element). Utrykket /DinoList/Dinosaur velger ut alle <Dinosaur> elementer som befinner seg innenfor <Dinolist> elementet Operasjonen //, velger etterfølger til en node, dvs. noder uavhengig av hvilken dybde de befinner seg i dokumentet. Utrykket //Dinosaur velger alle <Dinosaur> elementer som finnes i dokumentet, uavhengig av hvor de befinner seg i dokumentet. Operasjonen *, velger alle noder til et element, f.eks vil /Dinosaur/* velge alle barn til <Dinosaur> elementet. brukes til å velge atributter fra et XML 44

45 element. Utrykket velger unit atributten fra <Height> elementet. Predikater brukes for å velge ut noder som tilfredstiller visse kriterier. Følgende uttrykk velger ut gruppen til alle Dinosaurer som har befunnet seg i Europa: //Dinosaur[Range/Region="Europe"]/Group 45

46 15.2 XSLT eksempel for dinosaurus.xml.xsl fil for dinosaurus.xml: 1. Headeren er som vanlig i XML dokumenter. Rotelementet xsl:stylesheet begynner med å definere XML namespacet XSL og hvilken versjon av XSL en skal bruke <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl =" version="1.0"> <xsl:output method="html"/> 2. Først finner en noden i XML dokumentet som matcher /, dvs. rotnoden til XML dokumentet. Så åpnes et HTML dokument, som gis tittelen Dinosaurus før en åpner <body> til HTML dokumentet og skriver ut overskriften Dinosaurus, så sendes kontrollen videre til template som matcher DinoList/Dinosaur. Når rotnoden igjen får tilbake kontrollen lukkes body og html taggene før en lukker selve xsl:template som matcher rotnoden <xsl:template match="/"> <html> <head><title>dinosaurs!</title></head> <body><h1>dinosaurs!</h1> <xsl:apply-templates select="dinolist/dinosaur"/> </body></html></xsl:template> 46

47 3. Dinosaur template skriver ut en overskrift med navnet til den aktive dinosauren og skriver ut en tabell hvor radene innholder de forskjellige dinosaur elementene : <xsl:template match="dinosaur"> <h2><xsl:value-of select="name"/></h2> <table border="1" width="400" cellpadding="5"> <tr> <th>period</th> <td><xsl:value-of select="@period"/></td> </tr> <tr> <th>group</th> <td><xsl:value-of select="group"/></td> </tr> <xsl:apply-templates select="range"/> <xsl:apply-templates select="physicalattr"/> </table> </xsl:template> 47

48 4. Siden hvert Range element kan inneholde flere Region elementer inneholder Range en xsl:for-each klausul som skriver ut alle Region elementene i en liste. <xsl:template match="range"> <tr> <th>range</th> <td> <ul> <xsl:for-each select="region"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ul> </td> </tr> </xsl:template> 5. PhysicalAttr template sjekker om PhysicalAttr elementet inneholder Length eller Weight elementer, hvis dette er tilfelle skrives de ut som rader i tabellen: <xsl:template match="physicalattr"> <xsl:if test="height"> <tr> <th>height</th> <td> <xsl:value-of select="height"/> <xsl:text disable-output-escaping="yes"> &nbsp; </xsl:text> <xsl:value-of select="height/@unit"/> </td> 48

49 </tr> </xsl:if> <xsl:if test="length"> <tr> <th>length</th> <td> <xsl:value-of select="length"/> <xsl:text disable-output-escaping="yes"> &nbsp; </xsl:text> <xsl:value-of </td> </tr> </xsl:if> <xsl:if test="weight"> <tr> <th>weight</th> <td> <xsl:value-of select="weight"/> <xsl:text disable-output-escaping="yes"> &nbsp; </xsl:text> <xsl:value-of </td> </tr> </xsl:if> </xsl:template> </xsl:stylesheet> Hvis en åpner fila dinosaurus.xml med en nyere nettleser brukes.xsl fila til å generere en.html side av.xml fila 49

50 15.3 Eksempel på bruk av TrAX APIen til oversettingen mellom XML og HTML En kan også bruke TrAX APIen til oversettingen mellom XML og andre formater, vi skal nå se på hvordan en kan oversette til HTML. Forskjellen er nå at vi oversetter dokumentet fra.xml til.html og brukerne åpner et ferdig formatert.html dokument. Dette kan være nyttig hvis en skal støtte eldre versjoner av nettlesere som ikke har egne xml parsere Vi bruker følgende fremgangsmåte: Først skaffer vi oss et Transformer objekt, transformer, på samme måte som for TrAX. Merk at vi nå setter at transformer objektet skal bruke StreamSource( "dinosaurs.xsl"), noe som gjør at fila dinosaurs.xsl brukes til å formatere XML-dokumentet når selve selve oversettelsen utføres: TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newtransformer( new StreamSource( "dinosaurs.xsl" ) ); StreamSource xmlsource = new StreamSource( "dinosaurs.xml" ); Selve oversettelsen skjer på samme måte som før og vi lagrer resultatet i fila dinosaurs.html: StreamResult output = new StreamResult( new FileOutputStream( "dinosaurs.html")); 50

51 transformer.transform( xmlsource, output ); Merk at bruk av XSLT er dyrt med hensyn på minne og tids resurser. Hvis du ønsker å bruke XSLT i dine programmer er det viktig å teste ytelsen til programmmet før du setter det i drift 51

52 16 XML og databaser XML og databaser er i utgangspunktet utviklet med hensyn på forskjellige bruksområder: XML er designet for å strukturere informasjon, det er lett å endre formen til XML-dokumenter, men det er vanskeligere å hente ut og endre de enkelte dataelementene Databaser er derimot designet ut fra å lagre de enkelte dataene mest mulig effektivt, slik at en hurtig kan hente ut og endre data som er lagret. Databaser lagrer vanligvis ikke strukturen til informasjonen, en bryter ned strukturen til informasjonen for å oppnå effektiv lagring De fleste større datasystemer som anvendes i dag er basert på (relasjons)databaser som lagringsmedium, disse systemene bruker ofte XML til å sende meldinger mellom forskjellige klienter (arkitekturlag). XML har i den senere tid også begynt å gjøre seg gjeldende som lagringsmedium, særlig for mindre applikasjoner. Det jobbes stadig med å utvikle XML teknologi for datalagring og standarder som støtter datamanipulasjon av XML data 52

53 I dag har en følgende muligheter for varig lagring av XML dokumenter: Bruke rene XML databaser; det er kommet en del slike på markede (e.g. Tamino, XIndice, XStreamDB). Det utvikles stadig ny teknologi for XML databaser og det jobbes med standarder for spørrespråk (XQuery ser ut til å bli standarden), indeksering etc. Rene XML databaser virker lovende men teknologien er ennå ikke moden, så mange er skeptiske til å bruke XML databaser i produksjon Bruke relasjons databaser som støtter XML; dette er noe alle større databaseleverandører som Oracle, Sybase, DB2, osv. tilbyr, hvordan de gjør dette i praksis er uvist, det er derfor vanskelig å si noe om effektiviteten av slike løsninger Bruke rene relasjons databaser og lagre XML filene som store objekter (BLOB/CLOB); dette er en dårlig løsning hvis en ikke har metoder for å indeksere XML dokumentet slik at en lettere kan få tak i de enkelte delene Bruke rene relasjons databaser og oversette XML dokumentet til relasjons modellen; denne metoden vil i de fleste tilfeller være den beste til XML databasene blir mer modne. Oversettelse mellom XML og RDBMS har vist resultater i praksis når det gjelder ytelse og robusthet. En bør bruke relasjonsdatbaser hvis det ofte forekommer mange til mange koplinger mellom dataene en skal lagre. I tilfeller hvor en har mange transaksjoner bør også en bruke relasjons databaser siden disse har 53

54 god støtte for transaksjoner. Ulempen med bruk av RDBMS er at en må kode oversettelser mellom XML og relasjonsmodellen Lagre XML dokumenter direkte i filsystemet, dvs. en må hardkode indekser, datamanupulasjons språk og tilgangskontroll. En kommer bort i tilsvarende problemer som ved å lagre data i filsystemet istedenfor å bruke databaser, dette er som regel en dårlig løsning 54

55 Database system, DBMS, uavhengig om de er relasjonelle eller XML baserte tilbyr funksjonalitet for å: Lagre informasjonen i passende størelser slikt at en unngår dobbel lagring av informasjon En har spørrespråk som gjør at en raskt kan henteut og endre informasjon fra systemet Relasjonsdatabaser dekomponeres til ønsket normalform ved å anvende funksjonelle avhengigheter. En ser ofte at en lagrer XML dokumenter i databaser som store (BLOB eller CLOB) objekter. Dette gjør at en i utgangspunktet må parse hele dokumentet for å kunne hente ut informasjonen, noe som lite effektivt og tar lang tid. For å bøte på dette infører en indekser som peker på dataene som er lagret i CLOB objektene. Dette gjør at en kan foreta raske spørringer til store XML dokumenter Det er også vanlig å lagre XML filer i operativsystemet, foruten problemer med å spesifisere rettigheter til hvem som har lov til å se filene får en også problemer når en skal hente ut og endre informasjon. Hvis en skal søke etter spesifikk informasjon som er lagret i flere filer på filsystemet må en bruke fulle tekst søk, dette resulterer ofte i at en får ut mye unyttig informasjon, jamfør bruk av søkemotorer på internett. 55

56 Under ser vi på noen viktige datalagrings begreper og hvordan de blir representert i relasjonsdatabaser og i XML: Begrep: Database tolking: XML tolking: Integritets krav: Database skjema DTD eller XML skjema Referanse krav: Nøkkel/Fremmed nøkkel Nestede elementer (indekser) Spørrespråk SQL XPATH, XQuery, XSQL,... I praksis bruker en ofte enten XML eller databaser som lagringsmedium, men utviklingen går mot å kombinere databaser og XML på forskjellige måter. Vi skal her se på noen måter å gjøre dette på: Lagring av XML dokumenter i databaser Oversette XML dokumenter til relasjonsmodellen og lagre informasjonen i database Spørrespråk for XML databaser: De fleste rene XML databaser buker en utvidet form av XPath som spørrespråk I stedenfor at XPath uttrykket parses hvergang en skal gjøre en spørring bruker XML databaser indekser slik at de kan slå opp direkte hvor informasjonen ligger lagret. Bruk av indekser gjør XML databaser konkuransedyktige 56

57 Noen eksempler på bruk av XPATH som spørrespråk: 1. Finn all informasjon om dinosaurer som er lagret: /Dinolist/Dinosaur 2. Finn informasjon om Dilophosaurus dinosauren: /Dinolist/Dinosaur[Name="Dilophosaurus"] 3. Finn informasjon om dinosaurer som tilhører Coelurosaur gruppen eller har vært utbredt i Europa: /Dinolist/Dinosaur[(Group="Coelurosaur") OR (Range = "Europe")] 57

58 16.1 Bevaring av XML struktur i relasjonsdatabaser Som nevnt tidligere tilbyr alle større databaseleverandører støtte til lagring rene XML-dokumenter, MySQL har desverre ikke ennå implementert støtte for XML. Andre større databasesystemer har ofter innebygget støtte for å: Oversette XML dokumenter til relasjons modellen Oversette data fra relasjonsmodellen til XML-dokumenter Vi har tidligere sett at XML-dokumenter kan sees på som trær Fila dinosaur.dtd: <?xml version= 1.0 encoding="utf-8"?> <!ELEMENT DinoList Dinosaur+)> <!ELEMENT Dinosaur (Name,Group,Range,PhysicalAttr)> <!ATTLIST Dinosaur period CDATA #IMPLIED> <!ELEMENT Group #PCDATA)> <!ELEMENT Height (#PCDATA)> <!ATTLIST Height unit CDATA #IMPLIED> <!ELEMENT Length (#PCDATA)> <!ATTLIST Length unit CDATA #IMPLIED> <!ELEMENT Name (#PCDATA)> <!ELEMENT PhysicalAttr(Height?,Length?,Weight?)> <!ELEMENT Range (Region+)> <!ELEMENT Region (#PCDATA)> <!ELEMENT Weight (#PCDATA)> <!ATTLIST Weight unit CDATA #IMPLIED> 58

59 Representasjon av fila dinosaurus.dtd som et tre, hvor løvnodene representerer dataene som er lagret i XMLdokumentet: DinoList Dinosaur N ame Group period Range Region Heigth P hysicalattr Length W eigth unit unit unit Nodene på treet kan nummereres etter hvor de befinner seg i treet på følgende måte: N N.1 N.1.1 N.1.2 N.1.3 N.1.4 N N N.1.5 N N N N N

60 Vi bruker treet til å representere DTD-en i en tabell på følgende måte: Node Id: Element Type: Datatype Kardinalitet: N Dino List Rot Node 1 N.1 Dinosaur Struktur Element 1..n N.1.1 Name PCDATA 1 N.1.2 Group PCDATA 1 N.1.3 period Cdata 1 N.1.4 Range Struktur Element 1 N.1.5 PhysicalAttr Struktur Element 1 N Region PCDATA 1..n N Height PCDATA 0..1 N Length PCDATA 0..1 N Weight PCDATA 0..1 N unit CDATA 1 N unit CDATA 1 N unit CDATA 1 Dataene i dinosaurus.xml var som følger: <Dinosaur period="late Cretaceous"> <Name>Tyrannosaurus Rex</Name> <Group>Carnosaur</Group> <Range> <Region>Europe</Region> <Region>North America</Region> </Range> <PhysicalAttr> <Length unit="feet">39</length> 60

61 <Weight unit="tons">6</weight> </PhysicalAttr> </Dinosaur> <Dinosaur period="early Jurassic"> <Name>Dilophosaurus</Name> <Group>Coelurosaur</Group> <Range> <Region>Asia</Region> <Region>North America</Region> </Range> <PhysicalAttr> <Height unit="metres">3</height> <Length unit="metres">6</length> <Weight unit="tons">2</weight> </PhysicalAttr> </Dinosaur> <Dinosaur period="late Jurassic"> <Name>Stegosaurus</Name> <Group>Stegosaur</Group> <Range> <Region>Europe</Region> <Region>Asia</Region> <Region>North America</Region> </Range> <PhysicalAttr> <Length unit="metres">9</length> <Weight unit="kgs">3100</weight> </PhysicalAttr> </Dinosaur> 61

62 Vi har lagret XML-dataene for de 2 første dinosaurene i en tabell i databasen på følgende måte: DocNode: DTDNode: Verdi M.1.1 N.1.1 Tyrannosaurus Rex M.1.2 N.1.2 Carnosaur M.1.3 N.1.3 Late Cretaceous M N Europe M N North America M N PCDATA M N M N M N feet M N tons M.2.1 N.1.1 Dilophosaurus M.2.2 N.1.2 Coelurosaur M.2.3 N.1.3 Early Jurassic M N Asia M N North America M N M N M N M N metres M N metres M N tons 62

63 En kan nå hente ut informasjon fra tabellene ved å utføre ordinære SQL spørringer, f.eks hvis vi ønsker å liste ut hvor mange dinosaurer som tilhører gruppen Carnosaur kan det gjøres ved: SELECT COUNT (T.Doc_Node) FROM Dinosaur_XML_Tabbel T, DInosaur_DTD_Table D WHERE T.DTD_Node = D.Node_Id AND D.Element_Type = Group AND T.Verdi = Carnosaur; For å kunne foreta hurtigere søk definerer vi en fremmed nøkkel mellom DTD_Node og D.Node_Id kolonnene 16.2 Lagring av XML data som CLOB eller BLOB Hvis en ønsker å lagre tekst i databaser er bruk av Character (eller Binary) Large Object den mest vanlige måten å gjøre dette på. Siden XML-dokumenter er rene tekst dokumenter kan disse også lagres som CLOB objekter. For effektivt tilgang til data en nødt til å kunne indeksere CLOB objektet som representerer XML dokumentet, dette er noe de fleste dtørre databaseleverandører støtter. 63

Semistrukturerte data og XML

Semistrukturerte data og XML UNIVERSITETET I OSLO Semistrukturerte data og XML Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information? -- T. S. Eliot

Detaljer

1. Mer om oppbyning av XML-dokument

1. Mer om oppbyning av XML-dokument Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Mer om oppbyning av XML-dokument Lene Hoff 2.9.2013 Lærestoffet er utviklet for faget XML Teknologi 1. Mer om oppbyning av XML-dokument Resymé:

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidat nr: DELVIS LØSNINGSFORSLAG (ikke fullstendig) Eksamensdato: 12. desember 2005 Varighet: 3 timer (9:00 12:00) Fagnummer: LO515D Fagnavn:

Detaljer

1. Lage og vise et enkelt XML-dokument

1. Lage og vise et enkelt XML-dokument Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Lage og vise et enkelt XML-dokument Lene Hoff (revidert av Tore Mallaug) 1.9.2013 Lærestoffet er utviklet for faget XML Teknologi 1. Lage

Detaljer

Navngivning av XML elementer

Navngivning av XML elementer Navngivning av XML elementer Versjon 1.0 En anbefaling fra Norsk EDIPRO August 2002 Norsk EDIPRO Tel. 22 12 83 90 Postboks 2526 Soll Fax. 22 12 83 97 0202 Oslo Internet: www.edipro.no Forord Språket XML,

Detaljer

HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt:

HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt: HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt: Tagger/Noder Attributter Mest kjente XML-versjon er XHTML En mengde datakilder er tilgjengelige

Detaljer

XML og JDOM. Helge Furuseth

XML og JDOM. Helge Furuseth XML og JDOM Helge Furuseth furuseth@idi.ntnu.no XML XML = Extensible Markup Language Basert på SGML Standard Generalized Markup Language HTML = Hypertext Markup Language Også basert på SGML Mange likheter

Detaljer

1. XML Grunnlag

1. XML Grunnlag Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag XML Mildrid Ljosland 4.2.2008 Lærestoffet er utviklet for faget LO701D Interaktive Webtjenester med Java og XML 1. XML Resymé: Webtjeneste-teknologien

Detaljer

Brukerdokumentasjon. Webservices og webklient for kodeverk/ kodeverdi verifisering

Brukerdokumentasjon. Webservices og webklient for kodeverk/ kodeverdi verifisering Brukerdokumentasjon Webservices og webklient for kodeverk/ kodeverdi verifisering Innholdsfortegnelse... 3... 3... 3... 3... 4... 4... 4... 4... 8... 9... 10!... 10 "... 11 # $... 11 1. Om systemet 1.1.

Detaljer

Oblig 2: Prototype. Oblig 2: Mulig sekvens. Oblig 2: Grovstruktur. Oblig 2: The Candy-community. Begrenset prototype Teste teknologi:

Oblig 2: Prototype. Oblig 2: Mulig sekvens. Oblig 2: Grovstruktur. Oblig 2: The Candy-community. Begrenset prototype Teste teknologi: Oblig 2: Prototype Oblig 2: The Candy-community. Om XML, XSLT, Sablotron og HTML. Begrenset prototype Teste teknologi: XML, XSLT, Sablotron, HTML Velge og illustrere metadata: Interessant for deres prosjekt

Detaljer

Enkle generiske klasser i Java

Enkle generiske klasser i Java Enkle generiske klasser i Java Oslo, 7/1-13 Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Del 1: Enkle pekere Før vi tar fatt på det som er nytt i dette notatet, skal vi repetere litt

Detaljer

XML. Figur Et eksempel på et XML-dokument

XML. Figur Et eksempel på et XML-dokument Figur 13.1. Et eksempel på et XML-dokument XML jfr. Systemutvikling fra kjernen og ut, fra skallet og inn kapittel 13 systemutvikling

Detaljer

INF1040 Oppgavesett 5: XML

INF1040 Oppgavesett 5: XML INF1040 Oppgavesett 5: XML (Kapittel 3) Husk: De viktigste oppgavetypene i oppgavesettet er Tenk selv - og Prøv selv - oppgavene. Fasitoppgaver Ingen fasitoppgaver denne gang. Se flervalgsoppgavene under.

Detaljer

1. XHTML. Innhold Innledning

1. XHTML. Innhold Innledning Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag XHTML Lene Hoff 19.9.2006 Lærestoffet er utviklet for faget XML Teknologi 1. XHTML Resymé: I denne leksjonen skal vi ta for oss standarden

Detaljer

Introduksjon til fagfeltet

Introduksjon til fagfeltet LC238D http://www.aitel.hist.no/fag/_dmdb/ Introduksjon til fagfeltet Datafiler side 2 Databasesystemer side 3-5 Databasearkitektur ANSI/SPARC side 6-7 Datamodeller side 8 Flerbruker databasesystem side

Detaljer

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Programmering i C++ Løsningsforslag Eksamen høsten 2005 Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det

Detaljer

XSLT 2. David Massey MBIB

XSLT 2. David Massey MBIB XSLT 2 David Massey MBIB4140 21-9-2017 Demo html.xsl mondial.xsl albania 1214489 1618829

Detaljer

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus Introduksjon til programmering og programmeringsspråk Henrik Lieng Høgskolen i Oslo og Akershus Kategorisering av programmeringsspråk? Deklarativ vs. imperativ Lav nivå vs. høy nivå Kompilert vs. tolket

Detaljer

Læringsmål XML. Markering av tekst. SGML-familien. Forstå prinsippene bak XML og XHTML. Forstå hva XML kan brukes til og hvordan.

Læringsmål XML. Markering av tekst. SGML-familien. Forstå prinsippene bak XML og XHTML. Forstå hva XML kan brukes til og hvordan. Markeringsspråk og XML Læringsmål XML Forstå prinsippene bak XML og XHTML. Forstå hva XML kan brukes til og hvordan.

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 12. desember 2008 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 7 sider. Vedlegg: Tillatte hjelpemidler: INF2220

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

JavaScriptbibliotek. Introduksjon MVVC. Informasjonsteknologi 2. Gløer Olav Langslet Sandvika VGS

JavaScriptbibliotek. Introduksjon MVVC. Informasjonsteknologi 2. Gløer Olav Langslet Sandvika VGS MVVC JavaScriptbibliotek Gløer Olav Langslet Sandvika VGS Knockout.js Informasjonsteknologi 2 Introduksjon I dag skal vi se nærmere på et JavaScriptbibliotek som heter Knockout. Knockout og andre biblioteker,

Detaljer

Markeringsspråk og XML

Markeringsspråk og XML Markeringsspråk og XML

Detaljer

Web Services. Olav Lysne

Web Services. Olav Lysne Web Services Olav Lysne Til nå har dere hørt om Mellomvare for objektbasert kommunikasjon brukes vanligvis i anvendelser som er innen én organisasjon, eller innen et tett konsortium av samarbeidende organisasjoner

Detaljer

MPEG-7. Problemstilling:

MPEG-7. Problemstilling: MPEG-7 Knut Holmqvist Problemstilling: Hva tilsvarer fritekstsøk i video- og audiodatabaser? Må kunne Indeksere Spørre Søke Se gjennom Levere Multimedia Informasjon om data Metadata Dublin Core Resource

Detaljer

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy Kapittel 13 Advanced Hypertext Implementation Martin Lie Ole Kristian Heggøy 08.11.04 Forbedring av arkitektur Problem med alt i ett -løsning: Spredning av forretningslogikk. Avhengighet mellom presentasjonssider

Detaljer

XSLT 1. David Massey MBIB

XSLT 1. David Massey MBIB XSLT 1 David Massey MBIB4140 12-9-2017 Structured information toolkit "XML's new playmates include stylesheets for display and transformation, strong methods for linking resources, tools for data manipulation

Detaljer

Liste som abstrakt konsept/datatype

Liste som abstrakt konsept/datatype Lister Liste som abstrakt konsept/datatype Listen er en lineær struktur (men kan allikevel implementeres ikke-lineært bak kulissene ) Hvert element har en forgjenger, unntatt første element i listen Hvert

Detaljer

og XML Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?

og XML Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information? UNIVERSITETET IOSLO Semistrukturerte data og XML Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information? -- T. S. Eliot

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Eksamen i UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamensdag: 15. desember 2010 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 8 sider. Vedlegg: Tillatte hjelpemidler: INF2220

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java

Detaljer

Oppsummering. Thomas Lohne Aanes Thomas Amble

Oppsummering. Thomas Lohne Aanes Thomas Amble Oppsummering Thomas Lohne Aanes Thomas Amble 14.11.04 Kapittel 2: Data Modell Mål: Data som skal brukes av applikasjonen blir spesifisert på en formell og likevel intuitiv måte. Resultat: Vi får et konseptuelt

Detaljer

HTML-del. 1. <!-- ikke slett min kode, vær så snill --> er a) en HTML stil-tag b) en CSS stil-tag c) en HTML kommentar-tag d) en CSS kommentar-tag

HTML-del. 1. <!-- ikke slett min kode, vær så snill --> er a) en HTML stil-tag b) en CSS stil-tag c) en HTML kommentar-tag d) en CSS kommentar-tag HTML-del 1. er a) en HTML stil-tag b) en CSS stil-tag c) en HTML kommentar-tag d) en CSS kommentar-tag 2. Grafisk elementer på web skal være a) 72 ppi b) 144

Detaljer

INF1000 Prøveeksamen Oppgave 7 og 9

INF1000 Prøveeksamen Oppgave 7 og 9 INF1000 Prøveeksamen Oppgave 7 og 9 Høst 2015 Siri Moe Jensen 7a) Skriv en klasse Gave med to variabler som forteller hva som er i gaven, og hvor mye den har kostet. Klassen skal ha en konstruktør med

Detaljer

INF120: Oblig 3. Yngve Mardal Moe

INF120: Oblig 3. Yngve Mardal Moe Yngve Mardal Moe Mar 28, 2019 Contents 1 Hva trenger dere for denne oppgaven 3 2 Hvordan skal dere arbeide med denne oppgaven 5 3 En søkeindeks 7 4 Å slå opp i en søkeindeks 9 5 Å utvide en søkeindeks

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Ole Chr. Lingjærde 1 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen til et Java-program

Detaljer

Introduksjon til programmering og programmeringsspråk

Introduksjon til programmering og programmeringsspråk Introduksjon til programmering og programmeringsspråk Henrik Lieng Høgskolen i Oslo og Akershus https://code.org/ Veldig høy-nivå programmering med Scratch End-user programming Overtone, Tidal, etc., bygger

Detaljer

1. SQL datadefinisjon og manipulering

1. SQL datadefinisjon og manipulering Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag SQL datadefinisjon og manipulering Tore Mallaug 7.10.2008 Lærestoffet er utviklet for faget Databaser 1. SQL datadefinisjon og manipulering

Detaljer

Løsningsforslag Test 2

Løsningsforslag Test 2 Løsningsforslag Test 2 Oppgave 1.1: Interface definerer et grensesnitt som kan implementeres av flere klasser. Dette gir en standardisert måte å kommunisere med objekter av en eller flere relaterte klasser.

Detaljer

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider: Fra sist JSP - 2 Installasjon av Web-tjener Et enkelt JSP-script HTML statisk Forms Tags Ønsker dynamiske nettsider: Klientside-script/programmering Javascript, vbscript, applets Tjenerside-script/programmering

Detaljer

INF Notater. Veronika Heimsbakk 10. juni 2012

INF Notater. Veronika Heimsbakk 10. juni 2012 INF1010 - Notater Veronika Heimsbakk veronahe@student.matnat.uio.no 10. juni 2012 1 Tilgangsnivåer 2 CompareTo Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N

Detaljer

2. Beskrivelse av mulige prosjektoppgaver

2. Beskrivelse av mulige prosjektoppgaver Avanserte databaser (øving 9, 10, 11 & 12) Tore Mallaug 25.01.2008 Opphavsrett:Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO326D Avanserte Databaser INNLEVERINGSFRISTER (Obligatorisk

Detaljer

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering? Dagens tema Dagens tema Kildekode Hva er kompilering? Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Hvordan oppdage feil? Anta at vi lager dette lille

Detaljer

Prosjektoppgave: Bildedatabase. TDT4145 Datamodellering og Databasesystemer. Våren 2007

Prosjektoppgave: Bildedatabase. TDT4145 Datamodellering og Databasesystemer. Våren 2007 Prosjektoppgave: Bildedatabase TDT4145 Datamodellering og Databasesystemer Våren 2007 NB! Kun for de som ikke tar fellesprosjektet. Innledning I løpet av de siste årene har det blitt stadig mer vanlig

Detaljer

MMT105 Internettprogrammering Uke 44, høst 2007

MMT105 Internettprogrammering Uke 44, høst 2007 MMT105 Internettprogrammering Uke 44, høst 2007 Introduksjon til CSS MMT105 HiNT 2007 1 HTML-elementenes strukturerende egenskaper HTML-elementene skal markere strukturen i et webdokument, dvs. at de forskjellige

Detaljer

Oblig 1. Oppgave 1. Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak.

Oblig 1. Oppgave 1. Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak. Oblig 1 Oppgave 1 Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak. Problemer med arngren.net: 1. Nettsiden er SYKT uoversiktlig! 2. Det er

Detaljer

Intro til WWW, HTML5 og CSS

Intro til WWW, HTML5 og CSS Intro til WWW, HTML5 og CSS Håkon Tolsby 20.08.2015 Håkon Tolsby 1 World Wide Web Webserver: Programvare som distribuerer websider og/eller maskin hvor programmet kjører Webbrowser (nettleser): Program

Detaljer

Parallelle og distribuerte databaser del III

Parallelle og distribuerte databaser del III UNIVERSITETET I OSLO Parallelle og distribuerte databaser del III NoSQL og alternative datamodeller Institutt for Informatikk INF3100 20.4.2015 Ellen Munthe-Kaas 1 NoSQL NoSQL er et paraplybegrep som omfatter

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

Detaljer

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus // class Bygning Oppgave 1 System.out.println( Bolighus ); // class Bolighus Hva blir utskriften fra dette programmet? class Blokk extends Bolighus{ // class Blokk IN105subclassesII-1 Eksekveringsrekkefølgen

Detaljer

Antall oppgaver: 6. Alle trykte og skrevne hjelpemidler

Antall oppgaver: 6. Alle trykte og skrevne hjelpemidler "..{ ~ høgskolen i oslo t:mne:--dtstribuerte informasjonssystemer Emnekode:SO I 34A ~,6ruppe(r):3AA.3AB,3AC,3AD,3AE,3Af I Dato:08. I 2.2003 Faglig veileder: Frode Eika Sandnes Eksamenstid:9-14 Eksamensoppgaven

Detaljer

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og

Detaljer

Introduksjon til objektorientert programmering

Introduksjon til objektorientert programmering Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage

Detaljer

Implementering av caching ved hjelp av Spring. Christian Vestøl 27.04.06

Implementering av caching ved hjelp av Spring. Christian Vestøl 27.04.06 Implementering av caching ved hjelp av Spring Christian Vestøl 27.04.06 Agenda Kort introduksjon til Spring med Spring Praktiske eksempler Forskjellige rammeverk for caching April 2006 2 Kort om Spring

Detaljer

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved Dagens plan: Utvidbar hashing (kapittel 5.6) B-trær (kap. 4.7) Abstrakte datatyper (kap. 3.1) Stakker (kap. 3.3) Når internminnet blir for lite En lese-/skriveoperasjon på en harddisk (aksesstid 7-12 millisekunder)

Detaljer

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene Dagens tema: INF 2100 8. september 2004 Mer om strukturen i treet og hvordan bygge det Testing av at navn er deklarert og brukt riktig Arbeid i gruppene neste uke: Oppgaver relevant for dette stadiet i

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer

Detaljer

Dokumentasjon av XML strukturer for ByggSøk

Dokumentasjon av XML strukturer for ByggSøk Dokumentasjon av XML strukturer for ByggSøk 28. februar 2003 Per Thomas Jahr Innhold 1 Oversikt over skjemaer...1 2 Valg mellom import og include...2 3 Enkoding...2 4 Navnerom...2 5 Regler for navngiving

Detaljer

Oppgave 1 (Etter forelesning 31/8) Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak.

Oppgave 1 (Etter forelesning 31/8) Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak. Oblig 1 Oppdatert: 10/09 Nye oppgaver Oppgave 1 (Etter forelesning 31/8) Gå gjennom nettsiden arngren.net og list opp alle problemene du ser. Både i funksjonalitet/bruk og i koden bak. Oppgave 2 (Etter

Detaljer

XML Schema. David Massey MBIB

XML Schema. David Massey MBIB XML Schema David Massey MBIB4140 29-8-2017 Structured information toolkit "XML's new playmates include stylesheets for display and transformation, strong methods for linking resources, tools for data manipulation

Detaljer

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidat nr: Eksamensdato: 13. mai 2005 Varighet: 3 timer (9:00 12:00) Fagnummer: LO515D Fagnavn: Klasser: NETT2005V Studiepoeng: 6 Faglærer:

Detaljer

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid: EKSAMENSOPPGA VE Side l av 5 Bokmålstekst Emne: PROGRAMMERINGSSPRÅK i II Grupper: loa, ldb Emnekode LO 112 A Dato: 14.12.2005 Faglig veileder: Mark Burgess, Eva Vihovde, Frode Sandnes og Ulf uttersrud

Detaljer

Obligatorisk oppgave 4: Lege/Resept

Obligatorisk oppgave 4: Lege/Resept Obligatorisk oppgave 4: Lege/Resept INF1010 Frist: mandag 27. mars 2017 kl. 12:00 Versjon 1.0 (111c894 ) Innhold 1 Innledning 1 1.1 Begreper................................ 2 2 Pasienter 2 3 Leger og lister

Detaljer

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS Skjemaer med HTML5 Gløer Olav Langslet Sandvika VGS Leksjon 10 Informasjonsteknologi 1 og 2 Skjemaer på nettsider I denne leksjonen skal vi se litt nærmere på bruk av skjemaer på nettsider. Du har sett

Detaljer

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Repitisjonskurs. Arv, Subklasser og Grensesnitt Repitisjonskurs Arv, Subklasser og Grensesnitt Subklasser Klasser i OO-programmering representerer typer av objekter som deler et sett med egenskaper. En subklasse har egenskapene til en klasse + ett sett

Detaljer

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 10 Frist: 2014-04-11 Mål for denne øvinga:

Detaljer

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004 Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004 Oppgave 1 RMI-tjenerobjekt (databasewrapper) A Sentral tjenermaskin med database, RMi-register og RMI-tjenerprogram vis kart gjør bestilling

Detaljer

INF2220: Forelesning 3

INF2220: Forelesning 3 INF2220: Forelesning 3 Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5) ABSTRAKTE DATATYPER 2 Abstrakte datatyper En ADT består av: Et sett med objekter. Spesifikasjon

Detaljer

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5) INF2220: Forelesning 3 Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5) Map og hashing Ett minutt for deg selv: Hva vet du om maps/dictionarys og hashing fra tidligere?

Detaljer

Kapittel 7: Mer om arv

Kapittel 7: Mer om arv Kapittel 7: Mer om arv Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)! Repetisjon: Binære søketrær Dagens plan: Rød-svarte trær (kap. 12.2) B-trær (kap. 4.7) bstrakte datatyper (kap. 3.1) takker (kap. 3.3) For enhver node i et binært søketre gjelder: lle verdiene i venstre

Detaljer

Applikasjonsutvikling med databaser

Applikasjonsutvikling med databaser Applikasjonsutvikling med databaser Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 1 / 24 Applikasjonsutvikling med databaser Databaser tilbyr

Detaljer

CORBA Component Model (CCM)

CORBA Component Model (CCM) CORBA Component Model (CCM) INF5040 Høst 2005 Erlend Birkedal Jan Erik Johnsen Tore Ottersen Løkkeberg Denne presentasjonen CORBA Svakheter ved CORBA Object Model Komponenter CORBA Component Model Hva

Detaljer

Beskrivelse av filformatet for likningsoppgaven pass og stell av barn

Beskrivelse av filformatet for likningsoppgaven pass og stell av barn Beskrivelse av filformatet for likningsoppgaven pass og stell av barn Beskrivelsen gjelder likningsoppgaver fra inntektsåret 2013 med første innsending i 2014. Versjon 1.0 14. desember 2012 1 Innhold 1

Detaljer

praktiske eksempler DOM Document Object Model DOM og Høst 2013 Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

praktiske eksempler DOM Document Object Model DOM og Høst 2013 Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS DOM og praktiske eksempler Gløer Olav Langslet Sandvika VGS Høst 2013 Informasjonsteknologi 2 DOM Document Object Model Læreplansmål Eleven skal kunne programmere med enkle og indekserte variabler eller

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser INF1300 Introduksjon til databaser Data (transiente, persistente) DBMS databser informasjon interesseområdet informasjonsmodeller informasjonssystemer Transiente og persistente data Når vi programmerer,

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 4.mai 2011 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D Campus: LC191D Videregående

Detaljer

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter Sortering og søking i Java-API-et Tabeller og Arraylister Comaparable Comparator equals() LC9D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc9d.php Høgskolen i Sør-Trøndelag,

Detaljer

Skatteetaten Drosjesentraler Beskrivelse av filformatet for innsending av opplysninger til Skatteetaten Gjelder fra inntektsåret 2013 Versjon 1.0.

Skatteetaten Drosjesentraler Beskrivelse av filformatet for innsending av opplysninger til Skatteetaten Gjelder fra inntektsåret 2013 Versjon 1.0. Drosjesentraler Beskrivelse av filformatet for innsending av opplysninger til Skatteetaten Gjelder fra inntektsåret 2013 Versjon 1.0.2 15. oktober 2014 1 Innhold 1 Introduksjon... 4 2 Krav til filvedlegg...

Detaljer

Obligatorisk oppgave 1 INF1020 h2005

Obligatorisk oppgave 1 INF1020 h2005 Obligatorisk oppgave 1 INF1020 h2005 Frist: fredag 7. oktober Oppgaven skal løses individuelt, og må være godkjent for å kunne gå opp til eksamen. Før innlevering må retningslinjene Krav til innleverte

Detaljer

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning

Detaljer

Hvordan databasesystemene kan hjelpe RAM-produsentene

Hvordan databasesystemene kan hjelpe RAM-produsentene Hvordan databasesystemene kan hjelpe RAM-produsentene Kreativ bruk av RAM i DBMSer Ragnar Normann Innhold Litt databasehistorie Litt UiO datahistorie Hvorfor (manglende) minnebruk i DBMSer er blitt et

Detaljer

1 Kodegenerering fra Tau Suiten

1 Kodegenerering fra Tau Suiten Kodegenerering fra Tau Suiten For å generere Javakode eller en annen form for programmeringskode ut i fra Tau suiten, er det visse ting som må være utført.. En UML modell må eksistere og være korrekt.

Detaljer

Grunnleggende om websider og HTML-kode

Grunnleggende om websider og HTML-kode Grunnleggende om websider og HTML-kode Html er et språk / en standard som brukes for å gi instrukser til nettlesere om hvordan ulike elementer på en webside skal fortolkes og presenteres for en sluttbruker.

Detaljer

INF 329: Web-Teknologier. Dataimplementasjon. Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004

INF 329: Web-Teknologier. Dataimplementasjon. Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004 INF 329: Web-Teknologier Dataimplementasjon Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004 av: Dag Viggo Lokøen (dagvl@ii.uib.no) Kent Inge F. Simonsen (kentis@ii.uib.no)

Detaljer

Datatyper og typesjekking

Datatyper og typesjekking Datatyper og typesjekking Om typer generelt Hva er typer? Statisk og dynamisk typing Hvordan beskrive typer syntaktisk? Hvordan lagre dem i kompilatoren? Gjennomgang av noen typer Grunntyper Type-konstruktører

Detaljer

Læringsmål for forelesningen

Læringsmål for forelesningen Læringsmål for forelesningen Objektorientering Abstrakte klasser og grensesnitt, redefinering av metoder Java-programmering Arv og bruk av abstrakte klasser Eclipse Undersøke instanser i Eclipse 1 Dagens

Detaljer

Datatyper og typesjekking

Datatyper og typesjekking Datatyper og typesjekking Om typer generelt Hva er typer? Statisk og dynamisk typing Hvordan beskrive typer syntaktisk? Hvordan lagre dem i kompilatoren? Gjennomgang av noen typer Grunntyper Type-konstruktører

Detaljer

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet TGA Et større programeksempel Hvordan løse et reelt problem med en objektorientert fremgangsmåte En større problemstilling I uke 4 skrev vi et program for å sjekke om et gen (en tekstfil) inneholdt ordet "TGA"

Detaljer

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs BOKMÅL Side 1 av 7 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap KONTINUASJONSEKSAMEN

Detaljer

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006 Løsningsforslag for Obligatorisk Oppgave 3 Algoritmer og Datastrukturer ITF20006 Lars Vidar Magnusson Frist 28.03.14 Den tredje obligatoriske oppgaven tar for seg forelesning 9 til 13, som dreier seg om

Detaljer

som blanker skjermen (clear screen). Du får en oversikt over alle kommandoene ved å skrive,

som blanker skjermen (clear screen). Du får en oversikt over alle kommandoene ved å skrive, 1. Last ned og installer XAMPP. 2. Sjekk at alt fungerer. 3. MySQL. Vi begynner med databaseserveren, MySQL. Gå til DOS klarmelding eller ledetekst (finnes under tilbehør på startmenyen om du ikke som

Detaljer

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter 1 TDT4110 Informasjonsteknologi grunnkurs: Eksempler Kunnskap for en bedre verden Amanuensis Terje Rydland Kontor: ITV-021 i IT-bygget vest (Gløshaugen) Epost: terjery@idi.ntnu.no Tlf: 735 91845 TDT4105

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler

Detaljer

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser:

Detaljer