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 = "http://www.defaultags.com./tags" xmlns:xyz="http://www.xyztags.com./tags" <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= "http://www.w3.org/2001/xmlschema"> 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= "http://www.w3.org/2001/xmlschema-instance" 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= "http://www.w3.org/2001/xmlschema"> 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 = "http://www.w3.org/1999/xsl/transform" 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 </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 </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 ="http://www.w3.org/1999/xsl/transform" 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 </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 </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

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

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

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

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

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

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

Markeringsspråk og XML

Markeringsspråk og XML Markeringsspråk og XML

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

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

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

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

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

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

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

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Ordliste. Obligatorisk oppgave 1 - Inf 1020 Ordliste. Obligatorisk oppgave 1 - Inf 1020 I denne oppgaven skal vi tenke oss at vi vil holde et register over alle norske ord (med alle bøyninger), og at vi skal lage operasjoner som kan brukes til f.

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

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

Databaser & objektorientering.

Databaser & objektorientering. Databaser & objektorientering. Noen grunnbegreper innen objektorientering. Klasser og forekomster klasser beskriver strukturen for noe. Beskrivelsen inneholder: et navn attributter /egenskaper / tilstander

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

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

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

Database security. Kapittel 14 Building Secure Software. Inf329, Høst 2005 Isabel Maldonado st10900@student.uib.no

Database security. Kapittel 14 Building Secure Software. Inf329, Høst 2005 Isabel Maldonado st10900@student.uib.no Database security Kapittel 14 Building Secure Software Inf329, Høst 2005 Isabel Maldonado st10900@student.uib.no Kort introduksjon Database er en organisert samling av data. SQL(Structured Query Language)

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

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

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

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

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

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

NKKN typeforslag versjon 2.0.1. Definisjon av grunntypene

NKKN typeforslag versjon 2.0.1. Definisjon av grunntypene NKKN typeforslag versjon 2.0.1 For å lette innsamling av typedata er det laget en importrutine i NKKN som muliggjør automatisering. Foreløpig kan en kun sende forslag via email, en webservice er planlagt

Detaljer

1. Relasjonsmodellen. 1.1. Kommentarer til læreboka

1. Relasjonsmodellen. 1.1. Kommentarer til læreboka Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Relasjonsmodellen Tore Mallaug 2.9.2013 Lærestoffet er utviklet for faget Databaser 1. Relasjonsmodellen Resymé: Denne leksjonen gir en kort

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

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

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

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

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

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

OBLIG 1 - WEBUTVIKLING

OBLIG 1 - WEBUTVIKLING OBLIG 1 WEBUTVIKLING 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 funksjonalitet / bruk Uoversiktlig side For

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

(X)HTML, CSS og JavaScript HTML. Det første dokumentet 26.11.2007. Grunnleggende programmering i Java Monica Strand 26.

(X)HTML, CSS og JavaScript HTML. Det første dokumentet 26.11.2007. Grunnleggende programmering i Java Monica Strand 26. (X)HTML, CSS og JavaScript Grunnleggende programmering i Java Monica Strand 26. november 2007 Gr. leggende Java 26. november 2007 1 HTML HTML = Hyper Text Markup Language Strukturerer tekstinnhold HTML

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

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

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

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

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder: Lese fra fil Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo INF1000 : Forelesning 5 Vi må først importere pakken easyio Vi åpner

Detaljer

Pass og stell av barn

Pass og stell av barn Pass og stell av barn Beskrivelse av filformatet for innsending av opplysninger til Skatteetaten Gjelder fra inntektsåret 2013 Versjon 2.0.2 15. oktober 2014 1 Innhold 1 Introduksjon... 4 2 Krav til filvedlegg...

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Fredag 4. desember 2015 Tid for eksamen: 14.30 (4 timer)

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 Delkapittel 9.1 Generelt om balanserte trær Side 1 av 13 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 9.1 Generelt om balanserte trær 9.1.1 Hva er et balansert tre? Begrepene balansert og

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

Løse reelle problemer

Løse reelle problemer Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel:

Detaljer

Metaspråket for å beskrive grammatikk

Metaspråket for å beskrive grammatikk 1 SQL-syntaks Korrekt språkbruk bygger på et sett av regler. Eksempler: En SQL utvalgsspørring inneholder alltid ordene SELECT og FROM, mens WHERE og tilhørende betingelse er valgfri. Etter SELECT kan

Detaljer

Tilkobling og Triggere

Tilkobling og Triggere Tilkobling og Triggere Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 1 / 25 Tilkobling med PHP PHP bruker databasespesifike moduler til å koble

Detaljer

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster 3 emner i dag! INF1000 Uke 5 Litt om objekter, pekere og null Filer og easyio Litt mer om tekster Litt om objekter, filer med easyio, tekst 1 2 Objekter og pekere Vi lager pekere og objekter når vi bruker

Detaljer

PG4200 Algoritmer og datastrukturer Forelesning 7

PG4200 Algoritmer og datastrukturer Forelesning 7 PG4200 Algoritmer og datastrukturer Forelesning 7 Lars Sydnes, NITH 19. mars 2014 I. TERMINOLOGI FOR TRÆR TRÆR Lister: Lineære Trær: Hierarkiske Modell / Språk: Bestanddeler: Noder, forbindelser. Forbindelse

Detaljer

IDA 350, oppgave 4. André Børge Kjetil (gruppe2) 3. november 2005

IDA 350, oppgave 4. André Børge Kjetil (gruppe2) 3. november 2005 IDA 350, oppgave 4 André Børge Kjetil (gruppe2) 3. november 2005 1 Innhold 1 Innledning 3 2 XML 3 3 Kort om URI 4 4 RDF 5 5 Ofte spurte spørsmål om RDF 10 6 RDF vs XML 13 7 Program som gjør det lettere

Detaljer

Pen- tes'ng av webservices. Asbjørn Reglund Thorsen Gruppe- og utviklingsleder UIO/FSAT TwiDer: @fuzzerman

Pen- tes'ng av webservices. Asbjørn Reglund Thorsen Gruppe- og utviklingsleder UIO/FSAT TwiDer: @fuzzerman Pen- tes'ng av webservices Asbjørn Reglund Thorsen Gruppe- og utviklingsleder UIO/FSAT TwiDer: @fuzzerman Om meg Gruppe- og utviklingsleder på FSAT Felles studieadministra'vt tjenestesenter Sikkerhetsekspert

Detaljer

Object interaction. Innhold. Abstraksjon 03.09.2007. Grunnleggende programmering i Java Monica Strand 3. september 2007.

Object interaction. Innhold. Abstraksjon 03.09.2007. Grunnleggende programmering i Java Monica Strand 3. september 2007. Object interaction Grunnleggende programmering i Java Monica Strand 3. september 2007 1 Innhold Til nå: Hva objekter er og hvordan de implementeres I klassedefinisjonene: klassevariable (fields), konstruktører

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

S y s t e m d o k u m e n t a s j o n

S y s t e m d o k u m e n t a s j o n S y s t e m d o k u m e n t a s j o n Monitorering av produksjonsløyper ved Nasjonalbiblioteket - Project BAKE Utarbeidet av: Einar Wågan Kristian Akerhei Studium: Informasjonssystemer Innlevert: 26.5.2015

Detaljer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 Delkapittel 3.1 Grensesnittet Liste Side 1 av 11 Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 3.1 En beholder 3.1.1 En beholder En pappeske er en beholder En beholder er noe vi kan legge ting

Detaljer

extensible Markup Language XML

extensible Markup Language XML Projekter indenfor datanet extensible Markup Language XML DIKU.PEH.787 Hvad er XML? Et meta sprog til beskrivelse af data dvs. det beskriver kun data, hverken præsentation, behandling eller noget andet

Detaljer

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL. 09.00 13.00

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL. 09.00 13.00 Side 1 av 6 NTNU Norges teknisk-naturvitenskapelige universitet BOKMÅL Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap EKSAMEN I FAG

Detaljer

9. ASP med databasekopling, del II

9. ASP med databasekopling, del II Else Lervik 23.03.2004 Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LV192D Web-programmering med ASP 9. Resymé: I forrige leksjon så vi hvordan ASP kunne brukes til å vise

Detaljer

Denne rapporten er beregnet for dataansvarlig på Grefsenhjemmet, den som skal installere, vedlikeholde og modifisere systemet.

Denne rapporten er beregnet for dataansvarlig på Grefsenhjemmet, den som skal installere, vedlikeholde og modifisere systemet. Produktrapport Forord Denne rapporten er beregnet for dataansvarlig på Grefsenhjemmet, den som skal installere, vedlikeholde og modifisere systemet. Dataansvarlig eller supporter trenger informasjon om

Detaljer

Skatteetaten Boligsameie Beskrivelse av filformatet for innsending av opplysninger til Skatteetaten Gjelder fra og med innrapportering i januar 2016

Skatteetaten Boligsameie Beskrivelse av filformatet for innsending av opplysninger til Skatteetaten Gjelder fra og med innrapportering i januar 2016 Boligsameie Beskrivelse av filformatet for innsending av opplysninger til Skatteetaten Gjelder fra og med innrapportering i januar 2016 Versjon 2.1 1. september 2015 1 Innhold 1 Introduksjon... 4 1.1 Endringer

Detaljer

Web fundamentals. Web design. Frontend vs. Backend 17.01.2008. Webdesign 17. januar 2008 3. Monica Strand

Web fundamentals. Web design. Frontend vs. Backend 17.01.2008. Webdesign 17. januar 2008 3. Monica Strand Web fundamentals Webdesign 17. januar 2008 Monica Strand Webdesign 17. januar 2008 1 Web design Fagområdet Web design inneholder flere disipliner Grafisk design Informasjonsdesign Brukergrensesnittdesign

Detaljer

Forelesningsquiz. Forelesning inf1000 - Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Forelesningsquiz. Forelesning inf1000 - Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min. Forelesning inf1000 - Java 5 Forelesningsquiz Tema: En liten quiz (se utdelt ark) Filbehandling Tekster Ole Christian Lingjærde, 19. september 2012 Sett dere to (eller tre) sammen og besvar de fire spørsmålene

Detaljer

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen.. Løsningsforslag Eksamen V2007 Oppgave 1 NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen.. Oppgave 1.1 Klasse som pakke rinne n primitiv datatype, slik at vi kan

Detaljer

Eksamen i Internetteknologi Fagkode: IVA1379

Eksamen i Internetteknologi Fagkode: IVA1379 Høgskolen i Narvik Side 1 av 5 Eksamen i Internetteknologi Fagkode: IVA1379 Tid: Mandag, 07.06.04, 9:00-12:00 Tillatte hjelpemidler: Alle trykte og skrevne hjelpemidler tillatt. Eksamen består av 4 oppgaver

Detaljer

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster Oversikt INF1000 Uke 6 Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster Litt om objekter, filer med easyio, tekst Arne Maus 1 2 Objekter, pekere og null Vi lager pekere og objekter

Detaljer

Forskjeller mellom masselager og hovedminne. Permanent? Allokasjonstabell. Filer. Sekvensielle filer. Operativsystemets rolle

Forskjeller mellom masselager og hovedminne. Permanent? Allokasjonstabell. Filer. Sekvensielle filer. Operativsystemets rolle IT1101 Informatikk basisfag, dobbeltime 17/11 Sist uke: datastrukturer Tabell Lenket liste Stakk Kø inært tre Sammenhengende blokk vs pekermetoden I dag: Filstrukturer Forskjell hovedminne og masselager

Detaljer

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS Løkker og if-tester Gløer Olav Langslet Sandvika VGS 29.08.2011 Informasjonsteknologi 2 Funksjoner, løkker og iftester Læreplansmål Eleven skal kunne programmere med enkle og indekserte variabler eller

Detaljer

En bedre verden med AJAX

En bedre verden med AJAX En bedre verden med AJAX Frode Eika Sandnes Hva er AJAX Har ikke noe med rengjøringsmidler å gjøre AJAX er et (morsomt) akronym Asynchronous Javascript And XML Henskikt: lage interaktive webapplikasjoner

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 3. november 2, kl. 9. - 14. Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Detaljer

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Institutt for datateknikk og informasjonsvitenskap Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Eksamensdato: 23. mai 2013 Eksamenstid (fra-til): 09:00-13:00 Hjelpemiddelkode/Tillatte

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet

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

J2EE. CMP Entity Beans, Transaksjoner, JSP

J2EE. CMP Entity Beans, Transaksjoner, JSP J2EE CMP Entity Beans, Transaksjoner, JSP CMP Entity Beans Container Managed Persistence Container sin oppgave å lagre innholdet i EJB til varig lager (typisk DB). Implementasjonsklassen lages abstrakt.

Detaljer

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Dagens tema Dagens tema C-programmering Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Adresser og pekere Parametre Vektorer (array-er) Tekster (string-er) Hvordan ser minnet

Detaljer

Leveringsguiden. tjeneste for henting av informasjon om Postens transportprodukter. Versjonshistorikk: nummer 30.mars 2006 1.0 à jour.

Leveringsguiden. tjeneste for henting av informasjon om Postens transportprodukter. Versjonshistorikk: nummer 30.mars 2006 1.0 à jour. Leveringsguiden tjeneste for henting av informasjon om Postens transportprodukter Versjonshistorikk: Dato Versjons Status nummer 30.mars 2006 1.0 à jour Endring Side 1 av 12 Innholdsfortegnelse Innholdsfortegnelse...

Detaljer

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man Eksempel med to-dimensjonal array Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 6 Vi skal lage et program som illustrerer

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 - Kandidatnr: AITeL Eksamensdato: 2.desember 2009 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D LO191D Videregående programmering

Detaljer

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012 INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver

Detaljer

First edition. Copyright Orion Billing A/S 2005. All rights reserved

First edition. Copyright Orion Billing A/S 2005. All rights reserved BRUKERMANUAL First edition. Copyright Orion Billing A/S 2005. All rights reserved Forord: Denne brukermanualen vil gi deg en rask innføring i bruken av Orion Billing A/S TapXML-Generator. Manualen er rikt

Detaljer

Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2

Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side

Detaljer

DATAUTFORSKNING I EG, EG 7.1 OG EGENDEFINERTE FUNKSJONER SAS FANS I STAVANGER 4. MARS 2014, MARIT FISKAAEN

DATAUTFORSKNING I EG, EG 7.1 OG EGENDEFINERTE FUNKSJONER SAS FANS I STAVANGER 4. MARS 2014, MARIT FISKAAEN DATAUTFORSKNING I EG, EG 7.1 OG EGENDEFINERTE FUNKSJONER SAS FANS I STAVANGER 4. MARS 2014, MARIT FISKAAEN 2 INNLEDNING TEMA I SAS Enterprise Guide versjon 5.1 (februar 2012) kom det et nytt datautforskingsverktøy,

Detaljer

Høringsnotat ny delversjon av Referansekatalog for anbefalte og obligatoriske IT-standarder i offentlig sektor, våren 2015

Høringsnotat ny delversjon av Referansekatalog for anbefalte og obligatoriske IT-standarder i offentlig sektor, våren 2015 Høringsnotat ny delversjon av Referansekatalog for anbefalte og obligatoriske IT-standarder i offentlig sektor, våren 2015 1 Innhold 1. Bakgrunn og innledning... 3 2. Standarder for publisering av nettleserbaserte

Detaljer

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer Fra krav til objekter Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer INF1050--1 Dagens forelesning o Kort repetisjon av kravspesifikasjon med UML Hva skal systemet gjøre? UML: Bruksmønstermodeller (Use

Detaljer

Spesifikasjon av Lag emne

Spesifikasjon av Lag emne Dagens forelesning o Kort repetisjon av kravspesifikasjon med UML Fra krav til objekter Hva skal systemet gjøre? UML: Bruksmønstermodeller (Use Cases) o Objektdesign Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Detaljer

Konvertering av kommunale organisasjonsdata

Konvertering av kommunale organisasjonsdata Vestlandsforsking Boks 163, 6851 Sogndal Tlf. 57 67 61 50 Internett: www.vestforsk.no VF-notat 8/2004 Konvertering av kommunale organisasjonsdata Yngve Håkonsen og Thomas Sløk Tvedt Tittel VF Notat Konvertering

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Statiske metoder og variabler Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at

Detaljer

UNIVERSITETET. Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Hashliknende strukturer.

UNIVERSITETET. Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Hashliknende strukturer. UNIVERSITETET IOSLO Indeksering Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Treliknende strukturer Hashliknende strukturer Bitmapindekser Institutt for Informatikk INF30 22.2.2011

Detaljer

Primus Brukerveiledning for masseimport av bilder. Primus 5.6.5

Primus Brukerveiledning for masseimport av bilder. Primus 5.6.5 Primus Brukerveiledning for masseimport av bilder Primus 5.6.5 Primus Brukerveiledning for masseimport av bilder 2 Innholdsfortegnelse Innholdsfortegnelse... 2 Brukerveiledning for masseimport av bilder

Detaljer

Et forsøk på definisjon. Eksempel 1

Et forsøk på definisjon. Eksempel 1 [Kurssidene] [ ABI - fagsider bibin ] Introduksjon Michael Preminger (michael.preminger@hioa.no) 13/12-13 I denne forelesningen: Utvikling av dynamiske nettsteder med PHP og databaser, våren 2014 Motivasjon:

Detaljer

Beskrivelse av filformatet for opplysninger om "Kjøp fra primærnæring Pelsdyrskinn" til Skatteetaten

Beskrivelse av filformatet for opplysninger om Kjøp fra primærnæring Pelsdyrskinn til Skatteetaten Beskrivelse av filformatet for opplysninger om "Kjøp fra primærnæring Pelsdyrskinn" til Skatteetaten Gjelder fra inntektsåret 2013 med første innsending i 2014. Versjon 2.1 25. november 2013 1 Innhold

Detaljer