SAX Simple API for XML.

Størrelse: px
Starte visningen fra side:

Download "SAX Simple API for XML."

Transkript

1 SAX Simple API for XML....1 Funktioner:...2 Skrive XML dokumenter med SAX writer:...4 SAX metoder i Visual Basic:...5 error handler:...6 En content handler:...7 At validere et XML dokument med SAX:...13 Sammenligne DOM og SAX:...15 Skrive test XML dokumenter med SAX og Visual Basic:...16 Søge og finde i vare eksemplet:...17 CSharp: Reader:...18 C#: Et eksempel på en SAX writer:...21 Encoding:...22 Skrive et JPG billede ind i et XML dokument:...26 Kodning af tekster:...28 SAX Simple API for XML. En API (Application Programming Interface) et et sæt af funktioner eller metoder. SAX er et sådant bibliotek af faste metoder som f. eks. startdocument() eller startelement(). SAX API er ikke noget program men en standard som så er blevet implementeret af mange forskellige SAX parsere f. eks. Microsofts MSXML eller Xerces. SAX blev oprindeligt skrevet for sproget Java men er implementeret i næsten alle de anerkendte programmerings sprog. SAX er en push model: d.v.s. at når SAX parseren læser XML dokumentet læser den hele filen tegn for tegn og sender det hele videre. Man kan altså ikke i SAX vælge kun at læse dele af XML dokumentet. Det hele bliver pushet videre til den applikation som bruger SAX parseren. Dette er i modsætning til en såkaldt reader som normalt kan vælge at læse f. eks. kun de første 10 tegn i en fil! SAX er en event baseret model på den måde at hver gang SAX parseren støder på et bestemt objekt affyrer den en event som så sendes videre til det program som bruger SAX parseren som et redskab. En event kan f. eks. være startelement som SAX affyrer når den f.eks. støder på disse tegn i filen (NB det som SAX parseren læser er jo simpelt hen karakter koder som #97 ( a ) eller #0A (linjeskift): <parcel_hus>... DOM modellen som mere er en pull model - det modsatte af SAX modellen. I DOM læses hele filen, der opbygges et DOM træ i RAM (i hukommelsen). I SAX læses filen simpelthen: 1. SAX kan ikke springe rundt i dokumentet, kan ikke gå tilbage 2. SAX kan ikke huske hvad der tidligere er læst 3. SAX opbygger intet træ eller ingen RAM struktur

2 Af disse grunde er det oftest meget hurtigere og mere effektivt at læse et XML dokument med SAX end med DOM. Især hvis XML dokumentet er stort som på 25 MegaBytes! fungerer SAX meget hurtigere end DOM. Hvis man skal finde nogle få data i en meget stor XML fil er SAX meget hurtigere end DOM. I SAX kan man begynde at bruge data som ER afsendt fra SAX parseren også selv om den endnu ikke har læst hele dokumentet! SAX modsat DOM er ikke en W3C standard men et privat initiativ som siden er blevet bredt anerkendt. Men SAX har som nævnt sine begrænsninger. SAX affyrer sine evnts i real time mens DOM arbejder med en opbygget træ struktur som kan anvendes igen og igen når den først er opbygget. Funktioner: Alle SAX parsere skal implementere (definere) disse funktioner eller metoder: 1. characters() som resturnerer nodens tekst 2. startdocument() og enddocument() 3. startelement() og endelement() 4. ignorablewhitespace() som definerer hvad der skal ske med mellemrum, tabulator og linjeskift 5. processinginstruction() 6. startprefixmapping() og endprefixmapping() som drejer sig om namespaces f. eks. i et element 7. skippedentity() En konkret SAX parser kan så definere mange flere supplerende metoder. Selve SAX definitionen (standarden) kan downloades fra Der findes både en SAX1 og en SAX2, men kun den sidste med namespaces bruges nu. Vi kan i nogen grad anvende SAX parsing i scripts. Her er et eksempel på et script som anvender SAX og læser et meget stort dokument og viser det på siden: <body> <div id="resultat" name="resultat" style="background-color:#dedede"></div> <script> function f(){ var reader = new ActiveXObject("MSXML2.SAXXMLReader.4.0"); var writer = new ActiveXObject("MSXML2.MXXMLWriter.4.0"); reader.contenthandler=writer; try { //fra harddisken: //reader.parseurl ("c:/xmlkursus/sax/meget_lang1.xml");

3 //SAX kan hente en URL: reader.parseurl ("http://localhost/xml/meget_lang1.xml"); //alert("sax OK"); //alert(writer.output); document.all("resultat").innertext=writer.output; catch(e) { alert("parsing med SAX Ikke OK: " + e.description); f(); </script> </body> Vi anvender instantierer her en SAX reader og en SAX writer (nemlig de to klasser fra Microsofts MSXML2, altså Microsofts SAX parser). En SAX reader skal have en såkaldt content handler som er en event handler. En event handler er en klasse som definerer de ovennævnte obligatoriske metoder! Hvis der skal ske noget når vi parser et XML dokument med SAX er det altså nødvendigt at SAX parseren (reader) har en event handler, en content handler! Ellers sker der ingen ting ingen events bliver (reelt) affyret i al fald er der ingen som lytter til disse events! - under læsningen. Ovennævnte eksempel bruger det trick at writer en sættes til at være content handler til reader en! D.v.s. at de events som reader en affyrer modtages og bearbejdes af writer en dvs. reelt udskrives! Bagefter kan vi så bruge writer ens output som er produceret af writer en ud fra de inputs den får fra reader en! Denne metode er den hurtigste måde man kan læse et evt. meget stort XML dokument på! Meget hurtigere end at anvende DOM metoder. På denne måde kontrolleres også om dokumentet er vel formet! SAX parseren er en ægte parser lige som en DOM parser: Den kontrollerer om XML dokumentet er velformet ellers stopper alting! Hvis det ikke er vel formet kommer en fejl meddelelse: Dette kan lade sig gøre ved at anvende en try... catch konstruktion i scriptet. Parseren stopper så første gang den støder på et element som ikke er velformet! Den kaster en Exception!

4 Skrive XML dokumenter med SAX writer: Vi kan producere evt. store test XML filer på denne måde: <script language="javascript"> function f(){ var writer = new ActiveXObject("MSXML2.MXXMLWriter.4.0"); var attr= new ActiveXObject("MSXML2.SAXAttributes.4.0"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var fil=fso.createtextfile("c:/xmlkursus/sax/sax_produceret.xml"); writer.indent=true; writer.standalone=true; //writer.startdocument(); - giver problemer med encoding! writer.startelement ("","","data_root",attr); for(i=0;i<100;i++) { var rnd1=parseint(math.random()*100); writer.startelement ("","","person",attr); writer.startelement ("","","fulde_navn",attr); writer.characters("jens Ole Jensen ID: "+i+" Kode: "+rnd1); writer.endelement ("","","fulde_navn"); writer.endelement ("","","person"); writer.endelement ("","","data_root"); //writer.enddocument(); fil.write(writer.output); fil.close(); f(); </script> Vi skal senere se på andre eksempler på hvordan man kan generere XML dokumenter med SAX. Her ses det at SAX metoden characters() blot tager en streng som parameter, mens startelement() tager disse parametre: 1. namespace URI 2. local name 3. qualified name 4. et attribut objekt Denne tilfældigt genererede XML fil gemmes her på harddisken. Den kan vises således i en browser:

5 SAX metoder i Visual Basic: For at kunne udnytte mulighederne i SAX i højere grad er det nødvendigt at skrive kode i et programmeringssprog som Java, C, C++ eller Visual Basic. Vi vil i det følgende illustrere dette ved at skrive nogle enkle eksempler i Visual Basic (VBA) som evt. kan køre i VBA i Microsoft Office. Man kan starte MS Excel eller Access eller et andet Office program og vælge Funktioner -> Makro -> Visual Basic editor. Her kan man så oprette nye klasser og moduler (så kaldte subs) som kan udnytte SAX. Det er vigtigt at sætte en reference til MSXML ved at vælge Tools (funktioner) -> References og vælge Microsoft XML version 4. Vi kan skrive et nyt meget enkelt modul, en ny sub rutine således: Option Explicit Public Sub parse_sax() Dim reader Set reader = New SAXXMLReader40 Set reader.errorhandler = New error_handler reader.parseurl "bog.xml" On Error Resume Next MsgBox "XML Dokumentet er parset OK af SAX!"

6 De centrale linjer i denne kode er: Set reader.errorhandler = New error_handler reader.parseurl "bog.xml" error handler: I Visual Basic skal vi instantiere en SAX parser (reader) en SAXXMLReader - på denne måde. Hvis vi ønsker at parseren skal gøre noget hvis den støder på en ugyldig XML fil skal vi skrive en error_handler, en event handler som aktiveres hvis der findes fejl! En SAX reader har en property errorhandler som sættes lig med en ny instantiering af vores egen klasse error_handler! Vores egen error_handler skal indeholde 3 metoder fordi den skal implementere et bestemt interface. Alle error handlers skal altså have disse tre metoder! Vores klasse skrives i et klasse modul ved navn error_handler : Option Explicit Implements IVBSAXErrorHandler Private Sub IVBSAXErrorHandler_fatalError(ByVal locator As IVBSAXLocator, _ msg As String, ByVal errcode As Long) MsgBox "Error: Fejl: Linje: " & locator.linenumber & " Kolonne: " & _ locator.columnnumber & " " & msg & " publicid: " & locator.publicid _ & " systemid: " & locator.systemid Private Sub IVBSAXErrorHandler_error(ByVal locator As IVBSAXLocator, msg As _ String, ByVal errcode As Long) MsgBox "Error: Fejl: Linje: " & locator.linenumber & " Kolonne: " & _ locator.columnnumber & " " & msg & " publicid: " & locator.publicid _ & " systemid: " & locator.systemid Private Sub IVBSAXErrorHandler_ignorableWarning(ByVal olocator As _ MSXML2.IVBSAXLocator, strerrormessage As String, _ ByVal nerrorcode As Long) Hele dette system kan virke besværligt men i SAX er der stort set kun brug for en content handler og en error handler. Og disse eksempler kan man så blive ved med at genbruge så arbejdet er ikke så stort!

7 En SAX Locator er et objekt som hele tiden registrerer i hvilken linje og kolonne reader en befinder sig! systemid er den fil (adresse) som XML dokumentet stammer fra. Vi kan se at vores error_handler implementerer de 3 metoder. Hvis der opstår fejl i XML dokumentet skal der vises en message box med alle oplysninger om fejlen! I dette tilfælde har vi lavet en bevidst fejl: <T> <id>1</idd> <fornavn>jens</fornavn> <efternavn>jensen</efternavn> <titel>sommer i vejle</titel> <anmeldelse>en rigtig god bog - forfatteren har et stort potentiale og vil sikkert komme mere og mere frem i de kommende år - hvem ved hvad det skal blive til - det bliver i al fald spændende at følge hans udvikling - der vil komme mange gode bøger fra den mand </anmeldelse> </T> En content handler: På samme måde som en SAX parser eller reader har en errorhandler egenskab har den en contenthandler egenskab (property). Det egentlige arbejde er at definere en content handler til reader en! Her definerer vi hvad vi vil med vores SAX program. En content handler er en event handler som skal rumme de efterfølgende metoder eller events: Option Explicit Implements IVBSAXContentHandler Public s As String Private Sub IVBSAXContentHandler_characters(strChars As String)

8 'den eneste event som implementeres her: s = s & strchars Private Sub IVBSAXContentHandler_endDocument() MsgBox "Tekster:" & vbnewline & s Private Sub IVBSAXContentHandler_startElement(strNamespaceURI As _ String, strlocalname As String, strqname As String, _ ByVal oattributes As MSXML2.IVBSAXAttributes) Private Sub IVBSAXContentHandler_endElement(strNamespaceURI As String, _ strlocalname As String, strqname As String) Private Property Set IVBSAXContentHandler_documentLocator(ByVal RHS _ As MSXML2.IVBSAXLocator) End Property Private Sub IVBSAXContentHandler_endPrefixMapping(strPrefix As String) Private Sub IVBSAXContentHandler_ignorableWhitespace(strChars As String)

9 Private Sub IVBSAXContentHandler_processingInstruction(strTarget As _ String, strdata As String) Private Sub IVBSAXContentHandler_skippedEntity(strName As String) Private Sub IVBSAXContentHandler_startDocument() Private Sub IVBSAXContentHandler_startPrefixMapping(strPrefix As String, _ struri As String) Vi kan her se alle de metoder som skal indgå i SAX! Den eneste metode vi har defineret er characters(). Vi kan nu sætte en content handler på vores reader. Klassen ovenfor kalder vi for c1 f.eks. Vi kan så skrive denne sub: Option Explicit Public Sub parse_sax() Dim reader Set reader = New SAXXMLReader40 Set reader.errorhandler = New error_handler Set reader.contenthandler = New c1 reader.parseurl "personliste.xml" On Error Resume Next MsgBox "XML Dokumentet er parset OK af SAX!" Vi har nu fået vores reader til at lave noget fornuftigt nemlig udskrive de tekst noder som findes i dokumentet. Vores XML eksempel ser således ud: <?xml version='1.0'?> <personliste> <person> <fornavn>ole</fornavn>

10 <efternavn>jensen</efternavn> <telefon> </telefon> </person> <person> <fornavn>lise</fornavn> <efternavn>jensen</efternavn> <telefon> </telefon> </person> </personliste> Hvis vi afvikler vores sub rutine får vi følgende: Vi kan også søge og finde data med SAX og det er netop her SAX har sine fordele frem for DOM. Hvis vi ønsker at finde alle fornavne kan vi omskrive vores c1 content handler således: Option Explicit Implements IVBSAXContentHandler Public s As String Dim fornavn As Boolean Private Sub IVBSAXContentHandler_characters(strChars As String) 'den eneste event som implementeres her: If fornavn = True Then s = s & strchars End If Private Sub IVBSAXContentHandler_endDocument()

11 MsgBox "Resultat:" & vbnewline & vbnewline & s Private Sub IVBSAXContentHandler_startElement(strNamespaceURI As _ String, strlocalname As String, strqname As String, _ ByVal oattributes As MSXML2.IVBSAXAttributes) fornavn = False If strlocalname = "fornavn" Then fornavn = True End If Private Sub IVBSAXContentHandler_endElement(strNamespaceURI As String, _ strlocalname As String, strqname As String) Private Property Set IVBSAXContentHandler_documentLocator(ByVal RHS _ As MSXML2.IVBSAXLocator) End Property Private Sub IVBSAXContentHandler_endPrefixMapping(strPrefix As String) Private Sub IVBSAXContentHandler_ignorableWhitespace(strChars As String)

12 Private Sub IVBSAXContentHandler_processingInstruction(strTarget As _ String, strdata As String) Private Sub IVBSAXContentHandler_skippedEntity(strName As String) Private Sub IVBSAXContentHandler_startDocument() Private Sub IVBSAXContentHandler_startPrefixMapping(strPrefix As String, _ struri As String) Vi opretter en variabel en boolean fornavn som sættes til true hvis elementets navn er fornavn dette sker i den event som hedder startelement! Herefter kan vi opsamle tekst noderne lige så længe fornavn er true! Vi kan også tælle antallet af elementer i dokumentet meget enkelt således idet vi kun skriver en startelement definition: Private Sub IVBSAXContentHandler_startElement(strNamespaceURI As _ String, strlocalname As String, strqname As String, _ ByVal oattributes As MSXML2.IVBSAXAttributes) antal = antal + 1 Private Sub IVBSAXContentHandler_endDocument() MsgBox "XML dokumentet indeholder " & antal & " elementer."

13 At validere et XML dokument med SAX: Vi kan validere XML dokumenter i forhold til et skema på denne måde: Option Explicit Dim reader, skema_cache Public Sub valider_dokument() Set reader = New SAXXMLReader40 Set skema_cache = New MSXML2.XMLSchemaCache40 skema_cache.add "", "bog.xsd" reader.putfeature "schema-validation", True reader.putproperty "schemas", skema_cache reader.putfeature "exhaustive-errors", True On Error Resume Next reader.errorhandler = New error_handler reader.parseurl "bog.xml" Vi opretter en skema samling (cache) og reader en får så denne samling tilknyttet. En cache kan loades med en lang række af skemaer som så ligger klar! Den første parameter til Add er det namespace som skemaet tilhører her er der intet targetnamespace i skemaet! En reader har en property schemas som kan sættes til en skema samling. For at få reader en til at validere er det også nødvendigt at vi sætter en feature schema-validation til true! exhaustiveerrors betyder at parseren fortsætter også efter den første fejl i forhold til skemaet! Ellers ville en SAX parser normalt stoppe og kaste en exception. Vi bruger her den samme error_handler som tidligere. Som det ses har vi slet ikke brug for en content handler! Hvis vi bruger dette XML dokument (med en skema fejl: id mangler): <?xml version="1.0" standalone="yes"?>

14 <NewDataSet xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="bog.xsd" > <bog_objekt> <id>1</id> <fornavn>jens</fornavn> <efternavn>jensen</efternavn> <titel>sommer i vejle</titel> <anmeldelse>en rigtig god bog </anmeldelse> </bog_objekt> <bog_objekt> <!-- <id>2</id> --> <fornavn>hanne</fornavn> <efternavn>olsen</efternavn> <titel>vinter i jylland</titel> <anmeldelse>en svag bog </anmeldelse> </bog_objekt> <bog_objekt> <id>3</id> <fornavn>marie-louise</fornavn> <efternavn>nielsen</efternavn> <titel>hvornr bliver jeg voksen?</titel> <anmeldelse>en udviklingsroman </anmeldelse> </bog_objekt> </NewDataSet> Kan vi validere med vores SAX parser: Man kan på denne måde validere mange dokumenter på en gang i en Visual Basic rutine!

15 Sammenligne DOM og SAX: Vi kan sammenligne den tid det tager at indlæse et XML dokument med SAX og med DOM: Denne sub rutine måler SAX s effektivitet (performance): Public Sub load_sax_time() Set reader = New SAXXMLReader40 starttime = Timer reader.parseurl "meget_lang.xml" MsgBox "Tid: " & Timer - starttime & "sekunder." On Error Resume Next Denne procedure måler performance i DOM som jo opbygger et træ og en RAM struktur som kan fylde meget mere end selve dokumentet: Public Sub load_dom() Dim doc As New MSXML2.DOMDocument40 starttime = Timer doc.load "meget_lang.xml" MsgBox "Tid: " & Timer - starttime & "sekunder." On Error Resume Next Forskellen er altså 0,17 sekunder over for 0,05 sekunder for SAX parseren tre gange så hurtig! En SAX parser har også den fordel at den kan søge et bestemt stykke data og stoppe læsningen når den har fundet hvad den søgte! Dette kan slet ikke lade sig gøre med DOM modellen. Eksempel dokumentet her meget_lang.xml er på 1,86 MegaBytes.

16 Skrive test XML dokumenter med SAX og Visual Basic: Vi har allerede set et eksempel på hvordan man kan skrive evt. store filer med SAX. Her er et eksempel på hvordan det kan gøres i Visual Basic: Option Explicit Public Sub skriv_xml() Dim writer As New MXXMLWriter40 Dim attr As New SAXAttributes40 Dim doc As New DOMDocument40 Dim i As Long writer.indent = True writer.standalone = True writer.output = doc Dim cont As IVBSAXContentHandler Set cont = writer cont.startdocument cont.startelement "", "", "data", attr Dim b As Boolean Dim streng As String For i = 1 To b = False streng = "dagligvare" If i Mod 3 = 0 Then streng = "kontorvare" If i Mod 2 = 0 Then b = True attr.addattribute "", "id", "id", "integer", i attr.addattribute "", "dansk", "dansk", "boolean", b attr.addattribute "", "kategori", "kategori", "", streng attr.addattribute "", "pris", "pris", "", Int(1000 * Rnd()) cont.startelement "", "", "vare", attr attr.clear cont.endelement "", "", "vare" Next i cont.endelement "", "", "data" cont.enddocument doc.save "c:/sax/sax_varer.xml" Denne rutine producerer en XML fil på ca 14 MegaByte med denne struktur:

17 Visual Basic funktionen vælger nogle tilfældige værdier for hver vare. Resultatet af skrivningen gemmes i et DOM dokument som så kan gemmes på harddiske f. eks. XML dokumenter af en vis størrelse her er der f. eks forskellige vare-poster er velegnede hvis visse procedurer skal testes. F. eks. kan teste hvor lang tid det tager at finde visse data! Søge og finde i vare eksemplet: At søge og finde er lidt mere besværligt i SAX end i DOM modellen men hastigheden er som regel meget højere! Hvis vi f. eks. ønsker at finde alle daglig varer som koster mindre end 10 kr kan vi gøre følgende: Private Sub IVBSAXContentHandler_startElement(strNamespaceURI As _ String, strlocalname As String, strqname As String, _ ByVal oattributes As MSXML2.IVBSAXAttributes) If strlocalname = "vare" Then prisdata = CInt(oAttributes.getValueFromQName("pris")) If prisdata < 10 Then If oattributes.getvaluefromqname("kategori") = "dagligvare" Then

18 End If End If End If pris = " pris: " & oattributes.getvaluefromqname("pris") & " " kategori = " kategori: " & oattributes.getvaluefromqname("kategori") & " " id = "id: " & oattributes.getvaluefromqname("id") MsgBox id & pris & kategori Det skal understreges hvis XML dokumentet er på 14 megabytes vil der komme rigtigt mange message bokse efter denne metode. I stedet kunne værdierne selvfølgeligt opsamles i en streng som så kan vises eller gemmes. Det kan ses at søgeprocessen i SAX er fundamentalt anderledes end i DOM. I DOM modellen kan vi søge med et XPATH udtryk. I SAX kan vi kun læse et tegn ad gangen og må derfor søge på en helt anden måde. Hvis vi prøver at måle tiden for indlæsningen på vores store vare fil giver SAX dette resultat: og DOM dette resultat: Forskellen er altså mærkbar SAX er 5 gange hurtigere! CSharp: Reader: I Microsoft.NET er SAX ikke direkte implementeret men klassen XMLTextReader er reelt en SAX reader. Den cacher ikke (husker ikke) hvad den har læst, den kan kun gå fremad og den er kun readonly, kan altså ikke ændre XML dokumentet! Her er nogle simple eksempler på en sådan reader:

19 using System; using System.Xml; class MainClass { public static void Main(string[] args) { XmlTextReader reader=new XmlTextReader(args[0]); try{ reader.movetocontent(); Console.WriteLine(reader.ReadOuterXml()); catch (XmlException e) { Console.WriteLine(args[0]+ " blev ikke loadet! \n\n{0",e.message); Programmet er en simpel SAX reader som viser selve XML dokumentet som gives som kommando linje parameter:

20 C# programmer kontrollerer om dokumentet er velformet men ikke om det overholder et skema. Vi kan selvfølgeligt også læse tegn for tegn og analysere (men ikke modificere!) dokumentet. Dette eksempel viser hvordan vi kan læse hvert objekt i dokumentet og udskrive dets navn og type: using System; using System.Xml; class MainClass { public static void Main(string[] args) { XmlTextReader reader=new XmlTextReader(args[0]); int antal_noder=1; try{ while(reader.read()){ Console.WriteLine("{0 [{1]\n",reader.Name, reader.nodetype); catch (XmlException e) { Console.WriteLine(args[0]+ " blev ikke loadet! \n\n{0",e.message); Dette program resulterer så i følgende output:

21 Vi kan her se alle noderne i dokumentet! Og vi kan se alle tekst noderne som ikke har noget navn som er anonyme børn af deres parent et element eller en attribut. Vi kan også se alle de mellemrum/linjeskift/tabulator såkaldt whitespace som parseren støder på! (Og som parseren grundlæggende ignorerer hvis whitespace optræder mellem elementerne). C#: Et eksempel på en SAX writer: Hvis vi bruger et ægte programmerings sprog som C# kan vi også skrive XML dokumenter mere effektivt og med større kontrol over resultatet. Hvis vi ønsker at skrive meget store test XMl filer er C# også en oplagt mulighed! En SAX writer er en writer som hele tiden bevæger sig fremad, aldrig springer i dokumentet. I C# kan vi skrive specialiserede writere som skriver f. eks. til en database eller til et specielt format som SVG eller XHTML. Fordelen ved at en bruge writer er at den producerer gyldige velformede XML dokumenter. En writer som XmlTextWriter kan dog ikke kontrollere ugyldige tegn som f. eks. et Æ eller at der erklæres to attributter med samme navn i et element! Den kan ikke som sådan kontrollere teksten mod et skema. Men den kan selv skrive et internt DTD skema subset! I C# er klassen XmlTextWriter en slags SAX writer. Denne klasse har omkring 100 forskellige metoder, properties og events! Vi kan altså kontrollere vores output ret præcist med en XmlTextWriter! Et basalt eksempel på en sådan writer kunne være dette: using System; using System.Xml; using System.Text; class MainClass { static XmlTextWriter writer; public static void Main(string[] args) { writer=new XmlTextWriter("produceret.xml",Encoding.UTF8); writer.formatting=formatting.indented; writer.writestartdocument(); writer.writestartelement("personer"); for(int i=0;i<10;i++) { writer.writestartelement("person"); writer.writeattributestring("id",""+i); writer.writeelementstring("fulde_navn","fulde_navn nr "+i); writer.writeendelement(); writer.writeendelement(); writer.writeenddocument(); writer.close();

22 Klassen har metoder som WriteElementString som skriver HELE elementet inkl. slut mærke. Tilsvarende med Write AttributeString. Og klassen har metoder som WriteStartElement som skal bruges til complextype elementer som indeholder attributter og/eller under elementer. Encoding: XmlTextWriter kan arbejde med forskellige slags Encoding svarende til attributten i xml erklæringen. Her produceres dette dokument: XmlTextWriter producerer altså velformede dokumenter! Som Encoding har vi valgt standard encoding nemlig UTF-8 som gemmer tegnene i XML dokumentet i fra 8 bits til 32 bits afhængigt af hvilket tegn vi anvender. Et kinesisk skrifttegn kræver flere bits end et amerikansk a (som altid gemmes i een byte med værdien: 97)! Hvis vi analyserer den producerede fil binært kan vi se følgende:

23 Vi har ikke anvendt specielle tegn her og hvert tegn fylder derfor kun en byte xml er f. eks. 3 bytes: 120, 109 og 108! Filen indledes derimod med 3 tegn vi IKKE har skrevet: 239, 187 og 191 forud for det første < i XML dokumentet! De hexadecimale tilsvarende værdier er: EF (239), BB (187) og BF (191). Disse tegn markerer den kodning som dokumentet anvender og anvendes af parseren når den starter på at læse dokumentet og ikke helt er klar over hvordan dokumentet er kodet! Hvis vi anvender en anden encoding således: writer=new XmlTextWriter("produceret.xml",Encoding.Unicode); bliver dokumentet gemt i UTF-16 således at hvert tegn altid fylder 16 bits eller to bytes! Unicode bruges oftest om UTF-16 således også hvis man gemmer et XML dokument i MS Word eller Wordpad! Det er altså OFTE sådan at hvis vi gemmer et XML dokument i UTF-8 eller Unicode kommer det til at fylde dobbelt så meget som hvis vi koder det i UTF-8! Vi kan se dette i funktioner hvis vi læser det sidste dokument binært: Vi kan se at filen er fyldt op med tomme bytes (0) fordi hvert tegn skal fylde to bytes eller 16 bits. Tegnet m kommer nu til at bestå af først en byte: 0 og så en efterfølgende byte: 109! Vi kan også se at dette dokument indledes med: FF (255) og FE (254) som viser Unicode kodningen.

24 Hvis vi anvender Encoding.Default sættes ingen kodnings tegn ind foran i filen!: Hvis vi ønsker selve kideteksten vist får vi dette lidt kedelige resultat når vi bruger UTF-16: Hvis i stedet bruger Encoding.Default får vi denne tekst fil:

25 Hvis koder med Encoding.UTF8 og ser på den producerede tekst fil får vi dette: Hvis vi bruger Encoding.ASCII kan XML dokumentet slet IKKE vises i Internet Explorer! Dokumentet indledes ikke af kodnings bytes. (NB browserens tegnsæt kan sættes konkret til et bestemt tegn sæt fx ISO europæisk). Men selve dokumentet er selvfølgeligt helt ok: <?xml version="1.0" encoding="us-ascii"?> <personer> <person id="0"> <fulde_navn>fulde_navn nr 0</fulde_navn> </person> <person id="1"> <fulde_navn>fulde_navn nr 1</fulde_navn> </person> <person id="2"> <fulde_navn>fulde_navn nr 2</fulde_navn> </person>

26 Konklusionen er at hvis man vil skrive tekster der f. eks. indeholder danske bogstaver som Æ, Ø eller Å så skal der vælges Encoding.Default! Også Encoding.UTF8 viser de f. eks. danske bogstaver korrekt men den producerede tekst fil er ikke så anvendelig! Skrive et JPG billede ind i et XML dokument: XML dokumenter kan gemme binære data som f. eks. et JPG billede. En server kan på den måde sende et billede sammen med andre data til en klient i et XML dokument! Alle JPG billede f. eks. kan gemmes på harddisken som XML filer! (Men de kommer til at fylde noget mere i dette format!). I følgende kode eksempel oversættes et JPG billede til en række af bytes som så lægges ind i et XML dokument: using System; using System.Xml; using System.Text; using System.IO; class MainClass { static XmlTextWriter writer; public static void Main(string[] args) { writer=new XmlTextWriter("jpg_produceret.xml",Encoding.Default); writer.formatting=formatting.indented; writer.writestartdocument(); writer.writestartelement("jpg_billede"); //hent data fra filen på harddisken: FileInfo fil=new FileInfo("img.jpg"); int size=(int)fil.length; //byte tabellen skal have lige saa mange bytes som filen: byte[] bytes=new byte[size]; FileStream stream=new FileStream("img.jpg",FileMode.Open); BinaryReader reader=new BinaryReader(stream); //byte tabellen fyldes op: bytes=reader.readbytes(size); stream.close(); //'SAX' metoden skriver en tabel fra plads 0 og hele tabellen: writer.writebinhex(bytes,0,size); writer.writeendelement(); writer.writeenddocument(); writer.close();

27 Denne kode producerer en meget lang XML fil: Hver byte bliver kodet hexadecimalt med et tegn fra 0 til F! I dette tilfælde fyldte jpg filen 41,8 KB mens XML dokumentet kom til at fylde 83,7 KiloBytes! At gemme billedet på denne måde har dog flere fordele som nævnt. En anden metode er at gemme data i formatet Base64, som koder bytes i et begrænset antal tegn som a til z og A til Z. Vi ændrer blot den ene linje: //writer.writebinhex(bytes,0,size); writer.writebase64(bytes,0,size); Den nye tekst ud fra Base64 kodningen fylder i alt 55,8 KiloBytes - altså væsentligt mindre end BinHex kodningen!

28 Kodning af tekster: Alt kan kodes på denne måde. I XSD findes også en speciel type som markerer at indholdet er kodet. Vi kan som et eksempel kode en tekst på denne måde: using System; using System.Xml; using System.Text; using System.IO; class MainClass { static XmlTextWriter writer; public static void Main(string[] args) { writer=new XmlTextWriter("bin_hex_produceret.xml",Encoding.Default); writer.formatting=formatting.indented; writer.writestartdocument(); writer.writestartelement("bin_hex_kodet"); string s="dette er en tekst."; writer.writebinhex(encoding.default.getbytes(s),0,s.length); writer.writeendelement(); writer.writeenddocument(); writer.close(); Vi får så disse kodede data i XML dokumentet: Vi kan se teksten er kodet sådan: D (hexadecimalt: 44), e (hexadecimalt: 65), t (hexadecimalt: 74) osv. En Base64 kodning af den lille tekst ville omvendt give et helt andet resultat:

29 Eksempel: En SAX writer som også skriver en DOCTYPE: En SAXWriter som XmlTextWriter kan selvfølgeligt skrive et internt skema således at der kan anvendes entiteter eller så at dokumentet kan valideres. Følgende er et eksempel herpå: using System; using System.Xml; using System.Text; using System.IO; class MainClass { static XmlTextWriter writer; public static void Main(string[] args) { string[] fornavn={"jens Erik","Lone","Christoffer","Erik","Rosalina","Cecilie","Kai","Marie-Louise"; string[] efternavn={"knudsen","stadil Jensen","Hoysted","Hansen","Christensen","Nyborg","Jensen","Petersen"; writer=new XmlTextWriter("navne_produceret1.xml",Encoding.Default); writer.formatting=formatting.indented; writer.writestartdocument(); writer.writedoctype( "personer",null,null, "<!ELEMENT personer (person)*><!element person EMPTY ><!ATTLIST person fornavn CDATA #REQUIRED efternavn CDATA #REQUIRED telefon CDATA #REQUIRED id CDATA #REQUIRED>" ); writer.writestartelement("personer"); Random r=new Random(); string forn=""; for(int i=0;i<1000;i++){ writer.writestartelement("person"); writer.writeattributestring("id",""+i); int f=r.next(8); writer.writeattributestring("fornavn",fornavn[f]); int f1=r.next(8); writer.writeattributestring("efternavn",efternavn[f1]); int f2=r.next( ); writer.writeattributestring("telefon",""+(f ));

30 writer.writeendelement(); writer.writeendelement(); writer.writeenddocument(); writer.close(); Vi producerer her et test dokument med en række forskellige personer med tilfældige for og efternavne og telefonnumre! Vi kan også skrive et internt DTD subset som vist. Herefter kan filen valideres når den er produceret og evt. modificeret.

31

32

SAX Simple API for XML.

SAX Simple API for XML. SAX Simple API for XML. En API (Application Programming Interface) et bibliotek eller et sæt af funktioner eller metoder. SAX er et sådant bibliotek af abstrakte metoder som f. eks. startdocument() eller

Læs mere

Encoding:...1 Et tegn sæt (character set):...1 UTF-8 og UTF-16 (Unicode):...2

Encoding:...1 Et tegn sæt (character set):...1 UTF-8 og UTF-16 (Unicode):...2 Encoding:...1 Et tegn sæt (character set):...1 UTF-8 og UTF-16 (Unicode):...2 Encoding: Vi har tidligere set på spørgsmålet om et XML dokuments encoding. Det er generelt altid en god ide at gemme et dokument

Læs mere

Namespaces. Vi kan kvalificere elementer på denne måde:

Namespaces. Vi kan kvalificere elementer på denne måde: <?xml version=1.0 encoding=iso-8859-1?> Namespaces...1 Default namespace:...6 Præfiks:...7 To slags navne i XML:...11 Standard namespaces:...14 RDF Resource Description Framework:...18 Attributter:...19 DTD skemaer og namespaces:...21 Namespaces.

Læs mere

Servere har ikke kun noget at gøre med et lokalnet eller med Internettet. Ethvert program som fungerer som en lytter er en server!

Servere har ikke kun noget at gøre med et lokalnet eller med Internettet. Ethvert program som fungerer som en lytter er en server! XML og server klient programmer:...1 Hvad er en server?...1 Fordelene ved en XML server:...2 Eksempel: En telefon XML server:...2 XML server der trækker på en database:...7 Direkte adgang til databasens

Læs mere

java -classpath.;xercesimpl.jar;xercessamples.jar;c:\java\java\lib\classes.zip sax.counter -v -s -f -t telefonliste.xml

java -classpath.;xercesimpl.jar;xercessamples.jar;c:\java\java\lib\classes.zip sax.counter -v -s -f -t telefonliste.xml Xerces parseren....1 sax.counter:...1 sax.documenttracer:...2 sax.writer:...3 dom.getelementsbytagname:...4 dom.writer:...4 dom.asbuilder:...5 XMLGrammarBuilder:...6 PSVIParser:...7 Xerces parseren. Vi

Læs mere

Træ struktur: Alle XML dokumenter er grafer og gyldige træ strukturer. Et konkret eksempel herpå kunne være: data.

Træ struktur: Alle XML dokumenter er grafer og gyldige træ strukturer. Et konkret eksempel herpå kunne være: <data>data.</data> XML generelt:...1 XML:...1 Træ struktur:...2 Kinesiske æsker eller russiske dukker:...4 Besøgs eller Visiting algoritmer:...5 XML og HTML:...8 Hvad er en parser?...9 Velformet:...11 Et script program der

Læs mere

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13 1 Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Hvad er en makro... 10 Hvad kan du bruge en makro til... 10 Hvad en makro er (Visual Basic for Applications)... 11 Det hele sker

Læs mere

DTD Document Type Definition:

DTD Document Type Definition: DTD Document Type Definition:...1 Sekvens:...2 Validering:...3 Attributter i DTD:...8 In-line DTD skemaer:...10 Entiteter:...11 Entiteter som værdier i attributter:...13 DTD skemaer kun med entiteter:...14

Læs mere

Webserverprogrammering

Webserverprogrammering Webserverprogrammering WSP fortsat - dag 11 Behandling af XML (StAX) Syndikering og RSS med XML JAXB - XML Java-objekter Projekthjælp Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

DOM Document Object Model:

DOM Document Object Model: DOM Document Object Model:...1 Typer af noder i træet:...3 Reading:...4 document:...6 element:...7 attributter:...12 parser fejl:...13 XPATH:...13 Stier i XPATH:...13 Prædikater:...14 Operatorer:...15

Læs mere

XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM.

XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM. Denne guide er oprindeligt udgivet på Eksperten.dk XML parsning i Java Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM. Den forudsætter kendskab til Java og XML.

Læs mere

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl: Fejlhåndtering Selv de bedste programmører laver af og til fejl! Dette kommer sikkert som en overraskelse for de fleste, bortset fra de, der har arbejdet med et hvilket som helst større program. Fejl kan

Læs mere

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

Udvikling af DOTNET applikationer til MicroStation i C#

Udvikling af DOTNET applikationer til MicroStation i C# Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

MS Visual Studio Basic 2010. En kort vejledning

MS Visual Studio Basic 2010. En kort vejledning Du kan hente programmet gratis her: MS Visual Studio Basic 2010 Express http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express Tryk på Install Now og følg vejledningen. Indholdsfortegnelse

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer Denne guide er oprindeligt udgivet på Eksperten.dk TreeView i Access II Jeg vil i denne anden udgave af treeview føljetonen begynde på et mere brugbart eksempel med et TreeView. Vi laver en ny database

Læs mere

Programmering I Java/C#

Programmering I Java/C# Programmering I Java/C# Dit første projekt Datatekniker Intro to C# C# (C Sharp) Et enkelt, moderne, generelt anvendeligt, objektorienteret programmeringssprog Udviklet af Microsoft, ledet af danskeren

Læs mere

Spring Schema Extension eller Spring Domain Specific Languages

Spring Schema Extension eller Spring Domain Specific Languages Spring Schema Extension eller Spring Domain Specific Languages Forfatter: Jeppe Cramon Cramon Consulting (http://www.cramon.dk) Dato: 23/7-2005 Efter at have arbejdet med Spring i lang tid, har jeg lagt

Læs mere

Eksempel på transformation: XML -> RTF dokument:

Eksempel på transformation: XML -> RTF dokument: Eksempel på transformation: XML -> RTF dokument: RTF dokumenter er Rich Text dokumenter der kan formateres med farver og forskellige skrifttyper. I nogle tilfælde kan det være interessant at transformere

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere Integrationsmanual Anvendelse af webservice til kursusoversigt i Campus Brugervejledning til udviklere Moderniseringsstyrelsen Webservice manual til udviklere 2016 1 1. Indholdsfortegnelse Nyt kapitel

Læs mere

Installation og Drift. Aplanner for Windows Systemer Version 8.15

Installation og Drift. Aplanner for Windows Systemer Version 8.15 Installation og Drift Aplanner for Windows Systemer Version 8.15 Aplanner for Windows løsninger Tekniske forudsætninger Krav vedr. SQL Server SQL Server: SQL Server 2008 Express, SQL Server 2008 R2 eller

Læs mere

Tredjepart webservices

Tredjepart webservices Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output

Læs mere

Static Analysis for SAX programs

Static Analysis for SAX programs Static Analysis for SAX programs Anders Jacobsen 20041570 u041570@daimi.au.dk Emne beskrivelse...2 Indledning...2 Sax præsentation...2 Kodeeksempel...2 Analyse SAX event afsendere...4 Eksempel på sax program

Læs mere

Dokumentation af optagelse.dk

Dokumentation af optagelse.dk ApplicationService Indhold Versionsstyring Introduktion Navn URL Formål Sikkerhed Operationer echo() findftuapplicationids(...) findftuapplicationbyid(...) findftuapplicationpdfbyid(...) findftuapplicationenclosurezipurlbyid(...)

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

" #" $ " "!% &'% ' ( ) * " & #

 # $  !% &'% ' ( ) *  & # ! # $!% &'% '! #$ #$ ( * & #!! #$%& + &,Dim! - Sub Test( Dim Svar As String Svar = InputBox( Indtast dit Navn MsgBox Dit navn er & Svar Svar & * Sub Test2( MsgBox Goddaw & Svar #Test2( Svar& Test(Test2(Svar

Læs mere

Dokumentering af umbraco artikeleksport:

Dokumentering af umbraco artikeleksport: Dokumentering af umbraco artikeleksport: Lav en artikel side 2-3. Installationsguide side 3-5. Opsættelse af databasen og web.config side 5-8. Umbraco: templates side 8. Umbraco: borger.dk tab side 8.

Læs mere

Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere

Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere Dokument version: 2.0 ADS version: 1.0 Henvendelse vedrørende affald: Miljøstyrelsen Roskilde, Affaldssekretariatet

Læs mere

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007 JSP, Tomcat Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 10.october 2007 Hvad er JSP(Java Server Pages): Det er en teknik som er bygget ovenover Servlets teknikken, men fidusen er at det skal

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

PID2000 Archive Service

PID2000 Archive Service PROLON CONTROL SYSTEMS Herstedvesterstræde 56 DK-2620 Albertslund Danmark Tlf.: (+45) 43620625 Fax: (+45) 43623125 PID2000 Archive Service Bruger vejledning Juni 2002 Denne manual beskriver brugen af softwaren

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

Læs mere

Afsnittet er temmelig teoretisk. Er du mere til det praktiske, går du blot til det næste afsnit.

Afsnittet er temmelig teoretisk. Er du mere til det praktiske, går du blot til det næste afsnit. Afsnittet er temmelig teoretisk. Er du mere til det praktiske, går du blot til det næste afsnit. XML (eng. extensible Markup Language) XML er en måde at strukturere data på i tekstform. På samme måde som

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

JavaScript. nedarvning.

JavaScript. nedarvning. JavaScript er et sprog, der kan give en hjemmeside mere funktionalitet og gøre den interaktiv, så den reagerer på læsernes handlinger. CGI (Common Gateway Interface) har hidtil været de protokoller, man

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

Læs mere

Geografisk lokalisering i ASP.NET

Geografisk lokalisering i ASP.NET Denne guide er oprindeligt udgivet på Eksperten.dk Geografisk lokalisering i ASP.NET Denne artikel forklarer lidt om hvorfor og hvordan man laver geografisk lokalisering og viser noget kode. Der er andre

Læs mere

Installation og Drift. Aplanner for Windows Systemer Version 8.15.12

Installation og Drift. Aplanner for Windows Systemer Version 8.15.12 Installation og Drift Aplanner for Windows Systemer Version 8.15.12 Aplanner for Windows løsninger Anbefalet driftsopsætning Cloud løsning med database hos PlanAHead Alle brugere, der administrer vagtplaner

Læs mere

Advanced Word Template Brugermanual

Advanced Word Template Brugermanual Advanced Word Template Brugermanual Forord: Advanced Word Template er et værktøj, der anvendes sammen med Microsoft Word til at opbygge ensartet beskrivelser på en mere intelligent måde end Copy and Paste

Læs mere

Vejledning til Retsinformation web services test stubs

Vejledning til Retsinformation web services test stubs Civilstyrelsen Vejledning til Retsinformation Version:2 2010.02.08 Indholdsfortegnelse 1. Introduktion... 3 2. Installation... 3 3. Web Service beskrivelse og testdata... 3 2010.02.08 2 Side 2 af 5 1.

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer BRP 13.9.2006 Tal. Om computer-repræsentation og -manipulation. Logaritmer 1. Opgaverne til i dag dækker det meste af stoffet 2. Resten af stoffet logaritmer binære træer 3. Øvelse ny programmeringsopgave

Læs mere

Vejledning i skabelse og test af metadata

Vejledning i skabelse og test af metadata Side 1 af 5 Tilbage til statslige vejledninger Tilbage til vejledninger for kommunale myndigheder Vejledning i skabelse og test af metadata Indhold på denne side: 1. Om metadata 1.1 Opmærkning 2. Skabelse

Læs mere

Indhold. Senest opdateret:03. september 2013. Side 1 af 8

Indhold. Senest opdateret:03. september 2013. Side 1 af 8 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 API Modeller... 2 Webshop2 API Model v1... 3

Læs mere

Extension udvikling i Mozilla Firefox. Henrik Gemal

Extension udvikling i Mozilla Firefox. Henrik Gemal Extension udvikling i Mozilla Firefox Henrik Gemal Side 1 Hvem er jeg? Web udvikler hos TDC Laver TDC.dk og TDCOnline.dk Laver HTML, CSS, PHP Med i Mozilla projektet i mange år Udviklet et par extensions

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Dokumentation af optagelse.dk

Dokumentation af optagelse.dk ApplicationService Indhold Versionsstyring Introduktion Navn URL Formål Sikkerhed Operationer echo() findftuapplicationids(...) findftuapplicationbyid(...) findftuapplicationpdfbyid(...) findftuapplicationenclosurezipurlbyid(...)

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

GIS. Guide til indlæsning af data i ArcGIS herunder KMS-data fra internettet

GIS. Guide til indlæsning af data i ArcGIS herunder KMS-data fra internettet GIS Af Anders Bartholdy Guide til indlæsning af data i ArcGIS herunder KMS-data fra internettet Baggrundskort fra KMS er en rigtig god resurse der er tilgængelig via ArcGIS. Derfor starter vi med at gennemgå

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

% &$ # '$ ## () %! #! & # &, # / # 0&. ) 123 45 / & #& #

% &$ # '$ ## () %! #! & # &, # / # 0&. ) 123 45 / & #& # !"$!!"$ % &$ '$ () %! %"!" & * function &+! & &, --.& / 0&. ) 123 45 / & & & 6 Sub CalcVecProduct() * &3.5 & 2 &6 / 7$ & & & "%&$&"! 2 " $ " 8 $ & $/ $ $" 9&6 Sub test() streng_y = "det her går " streng_y

Læs mere

Projekt i Programmering C Menu til hjemmeside.

Projekt i Programmering C Menu til hjemmeside. Projekt i Programmering C Menu til hjemmeside. 10-12-2004 Holstebro HTX Bent Arnoldsen Synopsis. Projektet her er en menu til hjemmesider, som er lavet så den er let at tilrette, når man tilføjer eller

Læs mere

$ %' ) * %' +,! - Myarray %' /0 /0 122 +3 /0 /0

$ %' ) * %' +,! - Myarray %' /0 /0 122 +3 /0 /0 !"#!"# "# %&') * #" % && %' Dim MyArray2) As Integer ) * %' +,! - Myarray MyArray0). %' /0 /0 122 + /0 /0 +4 / 0) Dim MyArray1 to 2) As Integer 5MyarrayMyArray1)" +6 Option Base 1 Option Explicit %' 76

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Nye Java XML API'er

Nye Java XML API'er Denne guide er oprindeligt udgivet på Eksperten.dk Nye Java XML API'er Denne artikel beskriver nye XML features i Java 1.6 - StAX og JAXB, samt XStreams. Den forudsætter kendskab til Java og brug

Læs mere

Database for udviklere. Jan Lund Madsen PBS10107

Database for udviklere. Jan Lund Madsen PBS10107 Database for udviklere Jan Lund Madsen PBS10107 Indhold LINQ... 3 LINQ to SQL og Arkitektur... 3 O/R designere... 5 LINQ Den store introduktion med.net 3.5 er uden tvivl LINQ(udtales link): Language-INtegrated

Læs mere

2.15 21/05/2013 Tilføjet dokumentation af bvn input for GetEngagementDetailed

2.15 21/05/2013 Tilføjet dokumentation af bvn input for GetEngagementDetailed APOS2 REST API Forord Dette dokument er en del af APOS version 2 manualerne. APOS version 2 (APOS2 herefter) er et organisation, klassifikation og personale system baseret på Sag & Dokument standarderne.

Læs mere

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 Webshop2 API Model... 3 Brugen af API et... 4

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Typografidefinition: Typografi1: Skrifttype: 10 pkt, (intet) DKAL Snitflader REST Afhentningssystem

Typografidefinition: Typografi1: Skrifttype: 10 pkt, (intet) DKAL Snitflader REST Afhentningssystem Typografidefinition: Typografi1: Skrifttype: 10 pkt, (intet) DKAL Snitflader REST Afhentningssystem 1 Indholdsfortegnelse A3.1 INTRODUKTION 3 A3.1.1 HENVISNINGER 3 A3.1.2 LÆSEVEJLEDNING 4 A3.1.2.1 SÅDAN

Læs mere

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS.

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS. Denne guide er oprindeligt udgivet på Eksperten.dk XML i ASP Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS. Den forudsætter

Læs mere

Specifikationsdokument for PDF Validator API

Specifikationsdokument for PDF Validator API Nets DanID A/S Lautrupbjerg 10 DK 2750 Ballerup T +45 87 42 45 00 F +45 70 20 66 29 info@danid.dk www.nets-danid.dk CVR-nr. 30808460 Specifikationsdokument for PDF Validator API DanID A/S 17. august 2012

Læs mere

Send fra Access.

Send  fra Access. Denne guide er oprindeligt udgivet på Eksperten.dk Send e-mail fra Access. Denne artikel et rettet mod begyndere i Access. Artiklen viser hvordan du sender elektronisk post fra Access, både ved hjælp af

Læs mere

Studieplan. Stamoplysninger til brug ved prøver til gymnasiale uddannelser. Oversigt over gennemførte undervisningsforløb. Termin Aug jun 2011

Studieplan. Stamoplysninger til brug ved prøver til gymnasiale uddannelser. Oversigt over gennemførte undervisningsforløb. Termin Aug jun 2011 Studieplan Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Aug 2010 - jun 2011 Institution Uddannelse Fag og niveau Lærer(e) Hold Grenaa Tekniske Gymnasium htx Programmering C Klavs

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Merging og Hashing (del I)

Merging og Hashing (del I) Merging og Hashing (del I) Tilgang til data To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. API for sekventiel tilgang

Læs mere

Studieplan. Stamoplysninger til brug ved prøver til gymnasiale uddannelser. Oversigt over gennemførte undervisningsforløb. Termin Aug jun 2011

Studieplan. Stamoplysninger til brug ved prøver til gymnasiale uddannelser. Oversigt over gennemførte undervisningsforløb. Termin Aug jun 2011 Studieplan Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Aug 2010 - jun 2011 Institution Uddannelse Fag og niveau Lærer(e) Hold Grenaa Tekniske Gymnasium htx Programmering C Klavs

Læs mere

14.1 Internationale programmer

14.1 Internationale programmer 14.1 Internationale programmer Når et program skal anvendes af flere kulturer og sprog opstår behov for at programtekster, beløb og datoangivelser afhænger af landet og sproget, og man må i gang med at

Læs mere

poedit og oversættelse af sprogfiler

poedit og oversættelse af sprogfiler poedit og oversættelse af sprogfiler af Georg S. Adamsen WordPress.Blogos.dk 2009 http://kortlink.dk/wordpressblogosdk/6g38 1 af 11 14-04-2009 14:55 Jeg får af og til spørgsmål om, hvordan man bruger poedit,

Læs mere

Digital post Snitflader Bilag A2 - REST Register Version 6.3

Digital post Snitflader Bilag A2 - REST Register Version 6.3 Digital post Snitflader Bilag A2 - REST Register Version 6.3 1 Indholdsfortegnelse A2.1 INTRODUKTION 4 A2.1.1 HENVISNINGER 4 A2.2 OVERSIGT OVER FUNKTIONSOMRÅDE 5 A2.2.1 OPRET / HENT OPLYSNINGER OM SLUTBRUGER

Læs mere

GIS indlæsning af kreditorer og betalingsform. Brugervejledning 1.0

GIS indlæsning af kreditorer og betalingsform. Brugervejledning 1.0 GIS indlæsning af kreditorer og betalingsform Brugervejledning 1.0 Indhold 1 Indledning... 5 2 Opsætning af GIS grænseflade til kreditor indlæsning... 5 2.1 Oprettelse af en datastrøm... 7 2.2 Filsystem...

Læs mere

"# $%$ " # $ % $ $ " & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1.

# $%$  # $ % $ $  & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1. "# $$ " # $ && & ' $ $ " & ) *+, Sum_Cost >= 5000SirName = Beltov Continue = True) Continue *, + If Antal

Læs mere

Sproget Rascal (v. 2)

Sproget Rascal (v. 2) Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik

Læs mere

DataHub Forbrugeradgangsløsning Spørgsmål og svar

DataHub Forbrugeradgangsløsning Spørgsmål og svar 9. Januar 2013 MEH/MHC DataHub Forbrugeradgangsløsning Spørgsmål og svar Dok 75938-12_v2, Sag 10/3365 1/7 1. Generelt 1.1 I hvilket omfang yder Energinet.dk support til elleverandørerne? Forretningskonceptet

Læs mere

FMK-online's brug af SmartFraming

FMK-online's brug af SmartFraming Side 1 af 9 FMK-online's brug af SmartFraming Version 1.1 2011-11-01 Side 2 af 9 Indholdsfortegnelse Indledning...3 Initialisering og login...3 Kontekst Properties...4 user.id.authorizationid...4 userorganization.id.number...4

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Specifikationsdokument for PDF Validator API

Specifikationsdokument for PDF Validator API Nets DanID A/S Lautrupbjerg 10 DK 2750 Ballerup T +45 87 42 45 00 F +45 70 20 66 29 www.nets.dk CVR-nr. 30808460 Specifikationsdokument for PDF Validator API DanID A/S december 2016 Side 1-8 Indholdsfortegnelse

Læs mere

Modern Concurrency Abstractions for C#

Modern Concurrency Abstractions for C# Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

Mænd, Mus og Metadata

Mænd, Mus og Metadata Mænd, Mus og Metadata Henrik Dorf SAS Institute A/S Intet er jo hvad det gir sig ud for Mus er en computermus Mænd er personer af begge køn der tager backup og ikke vil have en musearm Metadata er data

Læs mere

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) 1: KLASSE METODE KONSTRUKTØR EKS. PÅ TYPE (VARIABLE) PUBLIC/PRIVATE OBJECT UD FRA KLASSE KALD METODE TILFØR PARAMETER TIL METODE RETURNERE VARIBEL.

Læs mere

Reeksamen, DSDS, forår 2008

Reeksamen, DSDS, forår 2008 Reeksamen, DSDS, forår 2008 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech IT Universitetet i København 22. august 2008 Alle hjælpemidler er tilladte, dog ikke computer og kommunikationsmidler.

Læs mere

DKAL Snitflader REST Register

DKAL Snitflader REST Register DKAL Snitflader REST Register 1 Indholdsfortegnelse A2.1 INTRODUKTION 3 A2.1.1 HENVISNINGER 3 A2.1.2 LÆSEVEJLEDNING 4 A2.1.2.1 SÅDAN LÆSES EN REST GRAF 4 A2.1.2.2 SÅDAN LÆSES EN RESSOURCE OG EN TYPE 4

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

[MARKONLINE I CITRIX]

[MARKONLINE I CITRIX] 2012 [Type text] Udarbejdet af Udarbejdet for Optimering af MarkOnline I Citrix miljøer Indholdsfortegnelse Baggrundsinfo... 2 Symptomerne... 3 MarkOnline starter ikke... 3 MarkOnline startes, men download

Læs mere

Uniq.Survey-Xact.DK. Vejledning. Rambøll Management Olof Palmes Allé 20 DK-8200 Århus N Denmark. Tlf: 8944 7800 www.ramboll-management.

Uniq.Survey-Xact.DK. Vejledning. Rambøll Management Olof Palmes Allé 20 DK-8200 Århus N Denmark. Tlf: 8944 7800 www.ramboll-management. Uniq.Survey-Xact.DK Vejledning Rambøll Management Olof Palmes Allé 20 DK-8200 Århus N Denmark Tlf: 8944 7800 www.ramboll-management.dk TU1.UT TUIndledningUT TU2.UT TUKlargøring TU3.UT TUOprettelse TU4.UT

Læs mere

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på

Læs mere