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

Like dokumenter
Transkript:

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 i XMLformater

XML EKSEMPEL 1 <?xml version="1.0" encoding="utf-8"?> <kunder> </kunder> <kunde kundeid="a123"> <etternavn>nordmann</etternavn> <fornavn>ola</fornavn> </kunde> <kunde kundeid="a124"> <etternavn>nordmann</etternavn> <fornavn>kari</fornavn> </kunde>

XML STRUKTUR Tagger/ noder og attributter Må være velformet. Kan ha et metaspråk: Regler for hvordan språk/dokumenttyper skal lagres. Egendefinert velformethet. DTD : Enkelt http://www.w3schools.com/dtd/dtd_intro.asp XML Schema : Mer avansert http://www.w3schools.com/schema/schema_howto.asp

VELFORMET STRUKTUR Tagger må avsluttes. <etternavn>olsen</etternavn> <hobby /> Tagger må avsluttes i riktig rekkefølge. <kunde><fornavn></fornavn></kunde> Ikke: <kunde><fornavn></kunde></fornavn>

TILGJENGELIGE DATAKILDER I XML Værdata: http://www.yr.no/verdata/1.3316805 Flydata: http://www.avinor.no/avinor/trafikk/50_flydata Kollektivtrafikk: http://labs.trafikanten.no/aapne-data.aspx

FORDELER Menneskeleselig Maskineleselig Ferdige verktøy, takket være felles struktur DOM XPATH XQUERY Osv.. Kan editeres i alt fra Notepad til rene XML verktøy Kan modellere mer strukturert enn flatfiler(csv)

ULEMPER Kan være vanskelig å skille hva som bør være attributt og node Kan være treigere å finne frem til data i enn f.eks en csv-fil Uthenting fra store/kompliserte datamengder kan være tidskrevende.

XML OG DATABASER Flere nivåer: Relasjonsdatabaser som kan prod. XML (postgresql, SQL server etc) Relasjonsdatabaser som lagrer som XML (Storage Engine) Relasjonsdatabaser som inneholder XML XML-dokumenter som database Native XML databaser Er XML en DB? DB: JA(Definisjonsspørsmål) DBMS: Nei, men det finnes XML-DBMS'er

XQUERY Spørrespråk tilpasset XML Benytter XPath Ligner SQL, men man kan detaljere formatering på output. Inneholder samme muligheter som SQL Funksjoner, tester, formatering av output osv.. Outputen vil som oftest være en eller annen form for XML Da også XHTML osv...

XPATH Ideen er å kunne adressere seg frem til visse elementer... Adresserer oss frem, som med filstier på maskinen F.eks /demographics/region/country Kan inneholde en slags WHERE F.eks /demographics/region[name= Africa ]/country Vi kan hoppe over deler av stien F.eks /dempgraphics//name Vi kan gå til noden over oss F.eks /demographics//city[../name="norway"] Vi kan referere til gjeldende node F.eks //name[.="oslo"] Vi kan hente ut attributter F.eks /demographics/region/@id F.eks /demographics/region[@id="1"]

SAXON Ett av flere verktøy som kan kjøre XQuery spørringer mot XML Finnes i Java og.net versjon (vi bruker.net verjsonen...) Last ned fra http://saxon.sourceforge.net/ NB! Pass på å velge Saxon HE-versjonen Kan brukes mot programmeringsspårket eller som stand-alone NB! Gratisversjonen av Saxon støtter ikke delete, insert etc Kjøres slik (.NET versjonen):.\query.exe -s:demographics.xml -o:output.xml -q:query.xq Må stå i bin -mappa til saxon Eller legge til i Pathen

RÅDATA Dere kan finne en fin XML-fil å jobbe med her...(demographics.xml): http://media.wiley.com/product_ancillary/02/04717912/do WNLOAD/AppB.XML.zip

EKSEMPEL 1 HENTE UT ENKEL DATA for $i in /demographics/region/country return $i/name

EKSEMPEL 2 HENTE UT DATA MED ORDER BY for $i in /demographics/region/country order by $i/area descending return $i/name

EKSEMPEL 3 HENTE UT ATTRIBUTTVERDIER for $i in /demographics/region/country where $i/@id<15 return $i/name

EKSEMPEL 4 HENTE UT DATA MED WHERE for $i in /demographics/region/country where $i/area > 1000000 return $i/name

EKSEMPEL 5 HENTE UT FLERE VERDIER for $i in /demographics/region/country return <land>{$i/name} {$i/area}</land>

EKSEMPEL 6 BYGGE XML <landsinfo> { } for $i in /demographics/region/country return <land areal="{string($i/area)}">{string($i/name)} </land> </landsinfo>

EKSEMPEL 7 GENERERE ANDRE OUTPUT <html> <body> <h1>dette er landene vi har i databasen:</h1> { for $i in /demographics/region/country return if($i/area> 10000) then <pre>stort land: {string($i/area)} {(string($i/name))} </pre> else <pre>lite land: {string($i/area)} {(string($i/name))} </pre> } <i>generert av XQuery:-)</i> </body> </html>

EKSEMPEL 8 - SUBQUERIES <landinfo> { for $i in /demographics/region/country return <land> {$i/name} <populationdata> { for $x in $i/population/year where $x/@year>1980 return <populationyear="{string($x/@year)}"> {$x/@population}</population> } </populationdata></land> } </landinfo>

NATIVE XML- DATABASER

NATIVE XML-DATABASES Mest kjente er exist http://exist.sourceforge.net/ Alt foregår i XML og ulike XML-språk. Tabeller er erstattet med XML-dokumenter Støtter selvfølgelig insert, update etc http://exist.sourceforge.net/update_ext.html

DEMO AV EXIST Relasjonsavhengige spørringer Replace Insert Delete

RELASJONSSPØRRINGER for $i in /ansatte/ansatt, $j in /avdelinger/avdeling where $i/avd_id = $j/data(@avd_id) return <output>{$i,$j}</output>

REPLACE update replace //fornavn[.='per-olav'] with <fornavn>per</fornavn>

INSERT update insert <ansatt ans_id="ans5"> <fornavn>kurt</fornavn> <etternavn>furt</etternavn> <avd_id>a2</avd_id> </ansatt> into /ansatte

DELETE for $i in //ansatt where $i/fornavn='kurt' return update delete $i