V1.0 - 27/02/2005 - original
V1.1 - 28/02/2005 - lidt opstramning (bl.a. eksempel på DTD og schema)
V1.2 - 26/12/2008 - små ændringer + tilføje links
V1.3 - 29/12/2008 - tilføj link til PHP og ASP artikler
V1.4 - 14/02/2010 - smårettelser
Hvad er XML ?
XML står for "eXtensible Markup Language".
Det er ikke et specifikt markup language men en familie
af markup languages med fælles karakteristika.
XML er en delmængde af SGML (Standard Generalized Markup Language).
XML er en W3C standard.
Eksempel på XML dokument:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<item nr="1">a</item>
<item nr="2">bb</item>
<item nr="3">ccc</item>
</list>
list og item kaldes elementer
nr kaldes en attribut
den første linie kaldes en processing instruction
Såkaldt wellformed XML er karakteriseret ved:
* alle elementer afsluttes - enten som <elm>...</elm> eller som <elm/>
* elementer kan være inden i elementer men ikke krydse hinanden
<aa><bb>...</bb></aa> er ok men <aa><bb>...</aa></bb> er ikke ok
* der er præcist et element yderst (kaldet rod element)
* attribut værdier er quoted enten med "" eller ''
Derudover taler man om valid XML hvis:
* den er wellformed
* den overholder en given DTD eller schema
DTD og schema er begge to en beskrivelse af strukturen af et XML
dokument. Groft sagt en beskrivelse af hvilke elementer der kan
være inden i hvilke elementer og hvilke attributter et element kan
have.
DTD er den ældste måde at lave beskrivelser på og er rimelig simpel.
Schema er en nyere måde at lave beskrivelse på og betydeligt mere
avanceret. Bl.a. er der support for namespaces og restriktioner
på værdier.
Eksempel på DTD for XML dokumentet ovenfor:
<!ELEMENT list (item)*>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item nr CDATA #REQUIRED>
Eksempel på schema for XML dokument ovenfor:
<?xml version="1.0"?>
<xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/ (...)
<xsd:element name="list">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="nr" type="xsd:integer"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Idag bruger man altid schema - aldrig DTD.
Læs mere om XML her:
<a href="http://www.w3schools.com/ (...)
<a href="http://www.w3.org/ (...)
Eksempler på XML
XML er som sagt en familie af opmarkerings sprog. Hvert af de sprog har sin
egen definition (DTD eller schema).
Nogle af de mest kendte er:
XHTML (Extensible HyperText Markup Language) : en version af HTML som er XML (en W3C standard)
WML (Wireless Markup Language) : brugt til mobil applikationer (en OASIS standard)
SOAP (Simple Object Access Protocol) : brugt til web service kald (en W3C standard)
WSDL (Web Services Description Language) : brugt til web service beskrivelser (en W3C standard)
SVG (Scalable Vector Graphics) : brugt til grafik (en W3C standard)
ebXML (Electronic Business XML initiative) : brugt til B2B (en OASIS standard)
ODF (OpenDocument Format) : OpenOffice dokument format (en OASIS standard)
OOXML (Office Open XML) : MS Office dokument format (en ECMA standard)
Yderligere XML begreber
Her er nogle begreber som man også bør kende hvis man arbejder med XML:
DOM (Document Object Model) : et XML dokument som træ struktur
XML parser : kode som kan læse XML dokument
XSLT (eXtensible Stylesheet Language Transformation) : XML som kan transformere et XML dokument til et andet
XML dokument eller HTML eller noget helt tredie
XPath (XML Path language) : syntax for at udvælge dele af et XML dokument
XSL-FO (eXtensible Stylesheet Language - Formatting Objects) : tranformering af XML til formater som f.eks. PDF
Hvorfor er XML smart ?
1) det er en standard med bred support fra IBM, Microsoft, Apache Group etc.
2) der findes en masse gode biblioteker til at læse og skrive XML dokumenter med
3) mange nye standarder bygger oven på XML
4) det er et godt velstruktureret platforms uafhængigt format
Men bemærk, at XML kun er et format.
Mange roser XML til skyerne og siger at det vil revolutionere alt.
XML er godt, men lad være med at tro, at det er svaret på alt.
XML har nogle stærke sider (se ovenfor), men XML er absolut ikke
velegnet til alt.
Man skal ikke bruge XML bare for at bruge XML. Man skal bruge XML, hvis
XML løser nogle konkrete problem stillinger i ens projekt.
Hvad kan man bruge XML til ?
XML kan bruges til meget:
* web sider
* web services
* data import/eksport filer
* konfigurations filer
og meget mere
Med hensyn til web sider så vær opmærksom på de mange muligheder:
- statiske XHTML sider
- server side scripts som dynamisk genererer XHTML
- statiske XML side som konverteres til HTML/XHTML client side
- server side scripts som dynamisk genererer XML som konverteres til HTML/XHTML client side
- business logic layer som outputter XML til presentation layer som konverterer til HTML/XHTML server side
Og selvom de alle bruger XML på en eller anden måde, så er de vidt forskellige
teknisk set. Så hvis du snakker om XML i web løsninger så vær præcis med
hvad du snakker om.
Hvornår er det smart at bruge XML ?
Det er smart at bruge XML når:
- 2 programmer skal snakke sammen
- de 2 programmer er eller skal være meget uafhængige af hinanden
- time forbruget er vigtigere end hardware omkostningerne
Det lyder måske som en sjælden kombination, men det er det faktisk ikke.
I dagens integrerede IT systemer snakker de fleste programmer sammen. Det er
næsten altid et mål at programmerne skal være så uafhængige af hinanden som
muligt. Man kan købe en forfærdelig masse PC'ere for det som 500 konsulent
timer af 800 kr. koster.
Hvornår er det ikke smart at bruge XML ?
Det er ikke smart at bruge XML hvis:
- det skal læses af mennesker (mit eksempel i starten er nemt at læse
men avanceret XML med namespaces er ulæseligt)
- hvis de 2 programmer i forvejen er tæt koblet (hvis det er 2 dele
af samme program så vil en konvertering objekter->XML og XML->objekter
typisk bare være spild af CPU power)
- performance er meget vigtig (det koster i performance at arbejde med XML fremfor
med binære proprietære formater/protokoller)
Videre med XML
Jeg har skrevet nogle artikler om brug af XML i forskellige sprog.
Java:
http://www.eksperten.dk/ (...) "XML parsning i Java"
http://www.eksperten.dk/ (...) "Mere XML i Java"
http://www.eksperten.dk/ (...) "Nye XML API'er i Java"
.NET/C#:
http://www.eksperten.dk/ (...) "Brug af XML i C#"
http://www.eksperten.dk/ (...) "XML i C# - nyt i .NET 2.0 og 3.5"
.NET/VB.NET:
http://www.eksperten.dk/ (...) "Brug af XML i VB.NET"
http://www.eksperten.dk/ (...) "XML i VB.NET - nyt i .NET 2.0 og 3.5"
PHP:
http://www.eksperten.dk/ (...) "XML i PHP"
ASP:
http://www.eksperten.dk/ (...) "XML i ASP"
Jeg har skrevet nogle artikler om brug af web services.
Java:
http://www.eksperten.dk/ (...) "Web Services i Java med Axis"
.NET <-> Java:
http://www.eksperten.dk/ (...) ".NET og Java interoperabilitet II"
Men derudover kan du jo også bruge XML i:
* JavaScript
* C/C++
* Python
og mange flere


