XML
Fra Wikipedia, den frie encyklopedi
XML (eXtensible Markup Language) er en W3C-anbefaling for å strukturere data eller beskrivelser av data (metadata) i elementer ved å bruke tekstkoding eller markeringskoder kalt tagger. Det er en enkel, men svært fleksibel og utbredt standard.
Opprinnelig var det tenkt brukt for ulike former for elektronisk publisering. Etter at det ble introdusert i 1998, har det fått enorm interesse, og det er også blitt et viktig format for utveksling av data på Internett og andre steder.
XML er utvidbart, hvilket betyr at det ikke finnes ett sett med elementer som alle må bruke. Man kan, hvis man ønsker det, definere sine egne elementer. Dette i motsetning til HTML og XHTML, som er «ferdige» markeringsspråk laget for et spesifikt formål, nemlig publisering av tekst m.m. på verdensveven.
XML er en forenkling av SGML, som er velegnet for å beskrive hva det skal være av datastrukturer. Et viktig formål er å forbedre utveksling av informasjon over Internett. Dokumenter basert på XML (for eksempel med formatene RDF, RSS, MathML, XSIL, XMPP og SVG) er alle beskrevet på en formell måte som gjør det mulig å validere at strukturen er korrekt og at innholdet har gitte formater.
Innhold |
[rediger] Styrker og svakheter
Det som gjør XML spesielt velegnet for datautveksling er:
- Formatet er både menneskelig lesbart og maskinlesbart.
- Det bruker tegnsettet Unicode, som representerer alle nåværende og kjente historiske tegnsystemer.
- Det er egnet til å representere generelle datastrukturer som databasetabeller, lister og trestrukturer.
- Formatet er selvdokumenterende ved at det beskriver strukturen og datanavnene i tillegg til selve dataverdiene.
- Det har en streng syntaks som gjør dataene enkle å tolke for et program.
XML brukes også utstrakt for dokumentlagring og prosessering, både over nett og lokalt. Følgende fordeler kan nevnes:
- Robust, logisk verifiserbart format basert på internasjonale, åpne standarder.
- Hierarkisk struktur velegnet for de fleste (men ikke alle) typer dokumenter.
- XML-dokumenter er ren tekst, som ikke kan beskyttes av lisenser eller andre restriksjoner.
- Plattformuavhengig, og derfor ganske immun mot teknologiendringer.
- Markeringsspråk har vært i bruk siden 1980-tallet (SGML), og er svært populært i seg selv, og er derfor støttet av en stor mengde programvare.
For visse anvendelser har formatet også noen svakheter:
- XML-syntaks er nokså plasskrevende og delvis overflødig (start- og sluttagg med samme metainformasjon).
- Det setter større krav til overføringskapasitet og øker lagringskostnader. Det er altså et problem ved begrenset båndbredde, selv om filkompresjon har stor effekt.
- XML-syntaks har noen spesielle egenskaper fra dens SGML-kompatibilitet.
- XML krever ofte spesiell parsing for å hente ut individuelle verdier.
- Modellering av overlappende (ikke-hierarkiske) datastrukturer krever ekstra innsats.
- Mapping av XML til objektorienterte eller relasjons-paradigmer kan være komplisert.
[rediger] Syntaksregler for XML
Et XML-dokument er vanligvis en tekstfil med en Unicode-basert tegnkoding som UTF-8 eller UTF-16, selv om en annen tegnkoding (f.eks. ISO-8859-1) alternativt kan brukes.
Til forskjell fra f.eks. HTML er XML helt avhengig av struktur, innhold og korrekthet for å kunne håndteres effektivt. For at et dokument skal regnes for å være «velformet» (W3C Recommendation XML 1.0 (Third Edition)), må det som minimum oppfylle følgende:
- Det må ha ett og bare ett rotelement.
- Ikke-tomme elementer må begrenses av en starttagg og en sluttagg. Tomme elementer (dvs. uten subelementer) kan merkes med en såkalt lukket tagg.
- Alle attributtverdier må settes i anførselstegn (enten et enkelt rett anførselstegn (
'
) eller et dobbelt rett anførselstegn ("
)). En attributtverdi må begynnes og avsluttes med samme type anførselstegn. Den typen anførselstegn som ikke brukes til å omslutte attributtverdien, kan brukes som en del av attributtverdien. - Elementer kan inneholde andre elementer, men ikke overlappe hverandre. Det betyr at alle ikke-rotelementer må være fullstendig inneholdt i et annet element.
- Det er forskjell på store og små bokstaver i elementnavn. F.eks. er
<Eksempel>
og</Eksempel>
et velformet par, mens<Eksempel>
og</eksempel>
ikke er det.
Gode valg av elementnavn gjør at en kan bygge inn semantikk (mening) i dataene som en del av strukturen. Dette gjør at XML-dokumenter enklere kan forstås av mennesker, samtidig som de er prosesserbare av dataprogrammer.
Her er et eksempel på et XML-dokument, en oppskrift på brødbaking:
<?xml version="1.0" encoding="UTF-8"?> <oppskrift navn="brød" forberedelsestid="5 minutter" totaltid="3 timer"> <tittel>Vanlig brød</tittel> <ingrediens mengde="3" enhet="kopp">Hvetemel</ingrediens> <ingrediens mengde="7" enhet="ml">Gjær</ingrediens> <ingrediens mengde="1.5" enhet="kopp">Varmtvann</ingrediens> <ingrediens mengde="1" enhet="teskje">Salt</ingrediens> <fremgangsmåte> <trinn>Bland alle ingredienser og kna grundig.</trinn> <trinn>Dekk over med et klede og sett til heving i et varmt rom.</trinn> <trinn>Kna på nytt, legg i en form og stek ved 200 grader Celsius i 1 time.</trinn> </fremgangsmåte> </oppskrift>
Elementnavnene kan brukes for alle mulige matoppskrifter, mens det aktuelle innholdet (instansen) uttrykker en brødoppskrift.
Ved å gi logiske navn til elementer og attributter blir det lettere for andre å forstå XML-dokumentet uten å ha lest en formatbeskrivelse først.
Et XML-dokument som er velformet og i tillegg oppfyller kravene i et tilknyttet XML Schema-dokument eller en DTD, kalles gyldig (engelsk: valid). Slike valideringsdokumenter for XML kalles på norsk XML-skjemaer (eng. XML schema).(liten s).
[rediger] Skjemaspråk
Før de generelle databeskrivelsesspråkene som SGML og XML kom, måtte programvareutviklere definere spesielle filformater eller minispråk for å utveksle data mellom programmer. Dette krevde videre utvikling av spesiell lese- og skrivekode samt detaljerte formatbeskrivelser.
XMLs regelmessige struktur og strenge syntaksregler gjør at programvareutviklere kan bruke standard kode for lesing og skriving. Og ettersom XML har sitt datamodellorienterte rammeverk for utvikling av anvendelsestilpassede språk, kan utviklere begrense seg til å utvikle høyt abstraherte beskrivelser veltilpasset for sine data.
Et XML-skjema er en beskrivelse av en gitt type XML-dokument som uttrykker innhold og begrensninger som går videre i forhold til det som er definert av XML som sådan. Et antall standard og spesialtilpassede skjemaspråk er blitt utviklet for å formaldefinere slike beskrivelser. Noen av disse er XML-baserte selv.
Det finnes mange godt utprøvde verktøy for å validere XML-dokumenter mot et XML-skjema, slik at innholdet følger de begrensninger som ligger i skjemaet. De blir også brukt i XML-behandlingsprogrammer til å gi løpende tilbakemeldinger på lovlig innhold.
Det eldste skjemaformatet er Document Type Definition (DTD), som er arvet uendret fra SGML. Mens DTD alltid støttes av diverse verktøy ettersom det var med i XML 1.0, er det begrenset i anvendelsen av følgende årsaker:
- Det har ikke støtte for nye XML-egenskaper, herunder navnerom som den viktigste.
- Det har manglende uttrykksevne. Visse formelle sider ved et XML-dokument kan ikke uttrykkes i en DTD.
- DTD har ikke XML-syntaks.
Et nyere skjemaspråk, beskrevet av W3C som etterfølgeren til DTD-er, kalles rett og slett XML Schema, og refereres gjerne som XML Schema Definition (XSD). XSD har langt sterkere uttrykksevne enn DTD til å beskrive XML-språk. Dessuten bruker XSD et XML-basert format som gjør det mulig å anvende XML-verktøy til å prosessere XSD-dokumenter. Det er også mulig å lage et XML Schema-dokument for språket selv (hvilket også er gjort).
Her er et XML Schema-dokument som kan brukes for å validere oppskrift-eksemplet over:
<?xml version="1.0" encoding="UTF-16"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xsd:element name="oppskrift" type="Oppskrift"/> <xsd:complexType name="Oppskrift"> <xsd:sequence> <xsd:element name="tittel" type="xsd:string"/> <xsd:element name="ingrediens" type="Ingrediens" maxOccurs="unbounded"/> <xsd:element name="fremgangsmåte" type="Fremgangsmåte"/> </xsd:sequence> <xsd:attribute name="navn" type="xsd:string"/> <xsd:attribute name="forberedelsestid" type="xsd:string"/> <xsd:attribute name="totaltid" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="Ingrediens"> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="mengde" type="xsd:decimal"/> <xsd:attribute name="enhet" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <xsd:complexType name="Fremgangsmåte"> <xsd:sequence> <xsd:element name="trinn" type="xsd:string" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
Noen negative aspekter med XSD:
- Standarden er svært stor, noe som gjør den vanskelig å forstå og implementere.
- Den XML-baserte syntaksen gjør skjemaet omfangsrikt og krevende å lese og skrive.
Et annet populært skjemaspråk er RELAX NG. Det ble opprinnelig standardisert av OASIS og er nå også en ISO-standard som del av DSDL). RELAX NG har to hovedretninger for syntaksen, en som er XML-basert og en kompakt variant som ikke bruker XML. Den kompakte syntaksen sikter mot å øke lesbarhet og skrivbarhet, mens siden det finnes en veldefinert måte å oversette kompakt syntaks til XML-syntaks og tilbake igjen, har en ikke mistet fordelen med å kunne bruke standard XML-verktøy. RELAX NG har en mer kompakt definisjon, noe som gjør den lettere å implementere enn XSD.
Noen skjemaspråk beskriver ikke bare strukturen til et gitt XML-format, men tilbyr også noen enkle muligheter for å prosessere individuelle XML-filer som følger formatet. Både DTD og XSD har denne evnen. De kan for eksemple forsyne XML-dokumenter med default-verdier. I RELAX NG har en bevisst unnlatt å tilby slike egenskaper.
[rediger] Visning av XML på Internett
Extensible stylesheet language (XSL) er et tillegg til XML som gjør det mulig å beskrive visuelle egenskaper og transformasjoner av XML-data uten å legge instruksjonene inn i dataene selv. Det resulterende dokumentet kan så fremstilles i en nettleser akkurat som et HTML-dokument som bruker CSS for fremvisning. En måte å oppnå dette på er å inkludere følgende i XML-dokumentet:
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
som deklarerer at det navngitte XSLT-stilarket skal brukes for å transformere XML-dokumentet til HTML. Denne prosessen kan både foregå på webtjeneren og i nettleseren.
Et XML-dokument kan også fremvises direkte i noen nettlesere slik som Internet Explorer 5 eller Mozilla med presentasjonsspråket CSS. Denne prosessen er pr. mars 2004 fortsatt ikke stabil i de nevnte nettleserne. I andre nettlesere, som Opera, fungerer dette greit.
For at CSS-formatering skal tillates, må XML-dokumentet inkludere en spesiell referanse til et stilark:
<?xml-stylesheet type="text/css" href="myStyleSheet.css"?>
Vær oppmerksom på at dette avviker vesentlig fra HTML sin måte å referere til et stilark på, som bruker link
-elementet.
Mens nettleserbasert XML-visning stadig forbedres, er alternativet konvertering til HTML eller PDF eller andre formater på tjeneren. Programmer som Cocoon prosesserer en XML-fil mot et stilark (pluss annen prosessering) og sender resultatet tilbake til brukerens nettleser uten av brukeren trenger å vite hva som foregår i bakgrunnen.
Spesielle anvendelser av XML finnes i det grafiske filformat SVG og et IM-system kalt Jabber.
[rediger] XML-utvidelser
- XPath Det er mulig å referere til enkelte elementer i et XML-dokument ved å bruke XPath. Dette gjør det mulig å dynamisk å velge ut elementer fra et dokument i et stilark (f.eks. XSL og XSLT) og sette disse sammen i vilkårlig rekkefølge til det ønskede resultatet.
- XQuery er for XML det SQL er for relasjonsdatabaser.
- XML-navnerom gjør det mulig for det samme dokumentet å inneholde XML-elementer og attributter hentet fra ulike vokabularer uten at navnekollisjoner oppstår.
- XML Signature definerer syntaks og prosesseringsregler for å lage digitale signaturer i et XML-dokument.
- XML Encryption definerer syntaks og prosesseringsregler for kryptering av et XML-dokument.
[rediger] Prosessering av XML-filer
API-ene (Application Program Interface) mest brukt for prosessering av XML-data via et programmeringsspråk er SAX og DOM. SAX brukes for sekvensiell prosessering, mens DOM brukes for uthenting av enkeltverdier. En annen type XML-prosesserende API er databinding, hvor XML-data gjøres tilgjengelig som en strengt typet datastruktur for et programmeringsspråk, i motsetning til DOM. Eksempel på et slikt databindingssystem er Java Architecture for XML Binding (JAXB) [1] og Strathclyde Novel Architecture for Querying XML (SNAQue) [2].
En XSL-prosessor kan brukes for å vise en XML-fil på skjerm eller utskrift. XSL er egentlig beregnet på å lage PDF-filer. XSLT er for å transformere til andre formater, inklusive HTML, andre varianter av XML, eller et vanlig tekstformat. XQuery [3] er et W3C-språk for spørring, samt oppbygging og transformering av XML-data. XPath [4] er et språk for å velge ut data fra en XML-fil. XPath er et subspråk av både XQuery og XSLT.
Den innebygde filformatet for OpenOffice.org og AbiWord er XML. Deler av Microsoft Office 11 vil også være i stand til å redigere XML-filer ved hjelp av et brukergitt schema (ikke DTD). Det finnes et titall andre XML-editorer.
[rediger] XML-versjoner
Den siste XML-versjonen er 1.1 (4. februar 2004). Spesifikasjonen til den første versjonen, XML 1.0, er nå revidert for tredje gang.
XML 1.0 og XML 1.1 er ulike i forhold til krav til tegn som kan brukes i elementnavn, attributtnavn o.l.: XML 1.0 tillater bare tegn som er lovlige Unicode 2.0. Dette inkluderer de fleste «world scripts», men utelukker «scripts» som kan brukes i senere versjoner av Unicode, som mongolsk, kambodsjansk, amharisk, burmesisk, etc. XML 1.1 har bare begrensninger i forhold til visse styretegn, hvilket innebærer at alle andre tegn kan brukes, selv om Unicode-standarden vokser eksponentielt.
Det bør nevnes at begrensningen som er til stede i XML 1.0 bare gjelder element- og attributtnavn. Både XML 1.0 og XML 1.1 tillater alle Unicode-tegn i selve innholdet. XML 1.1 er derfor bare nødvendig dersom du ønsker å bruke Unicode i elementnavn.
Andre mindre endringer mellom XML 1.0 og XML 1.1 er at styretegn nå tillates bare om de inngår i en escape-sekvens. To spesielle formfeed-tegn, som må behandles som «whitespace», er inkludert.
Alle XML 1.0-dokumenter er lovlige XML 1.1-dokumenter, med ett unntak: XML-dokumenter som erklærer seg selv som ISO-8859-1-kodet, som betyr CP1252-kodet, kan nå være ulovlig. Dette er fordi CP1252 bruker styretegnblokker av ISO-8859-1 for spesielle tegn, som €, Œ, og ™. XML 1.0-dokumenter som deklarerer CP1252-koding vil likevel være gyldige.
Det snakkes også om XML 2.0, selv om det gjenstår å se om det noensinne dukker opp. XML-SW (SW for skunk works), skrevet av en av de opprinnelige utviklerene av XML, inneholder noen forslag til en XML 2.0-versjon, f.eks. at DTD ikke lenger skal være tillatt, samt integrasjon av navnerom, XML Base og XML Information Set inn i hovedstandarden.
[rediger] Se også
- Abstract syntax tree (AST)
- CSS, XSL
- DocBook
- Document Type Definition, XML Schema, DSDL, Relax NG
- Document Object Model, SAX
- Enamel (NML)
- RSS, Atom, OPML, OML
- S-expression, XML query language
- SGML, HTML, XHTML
- SVG, MathML, CML, SMIL, FpML, XBRL
- The Z Format
- UIML, XUL, XBL, XAML
- Web Service, SOAP, ebXML, UDDI, WSDL, WSFL
- XRI, XDI
- XMPP, Jabber
[rediger] Eksterne lenker
- XML-spesifikasjon
- Beslektede standarder
- Progamvare
- Utviklerressurser
- The XML FAQ
- xml.com
- Cafe con Leche - XML-nyheter og ressurser
- XML Cover Pages
- XML On Target - populær XML-weblog
- IBMs developerworks XML nettsted
- XMLHack - et nytt nettsted for XML-utviklere
- XML-L Epost-liste
- XMLPatterns.com - Utvikle effektive DTD-er og XML Schema-dokumenter for din XML ved å bruke strukturelle designmønster.
- Xml Sucks - erfarte problemer med XML
- XML: A Language To Manage the World Wide Web
- XML: Principe et utilisation (fr)
- Markup of XML contents - et XSLT-verktøy som bruker eksterne ordlister for å lage semantisk markering
- XML-DEV Mailing List