Varför XML?
Tänk er följande situation:
Vi sänder ett e-mail till ett företag. Mailet innehåller följande:
Med anlednig av er offert den 2.2.2001 vill vi köpa 30 stycken av
produkten XXX. Vi föväntar oss leverans inom tre veckor.
mvh
Ben Boss
Firma AB |
Detta mail är inget problem att tolka, men hur gör vi ett program
som kan tolka detta åt oss? Kommunikation sker nuförtiden ofta mellan
datorer, och datorer är som bekant korkade...
För att kunna sända information som skall kunna tolkas maskinellt,
så måste informationen vara strukturerad efter ett visst bestämt
schema. En möjlighet att få en bestämd struktur på datat
är XML.
Men finns det inte redan system för detta?
Jo, datorer har länge kommunicerat och EDI system har väl funnints
i åtskilliga år men de flesta system har problem. En möjlighet
som finns är ASCII filer, uppställda efter ett visst system. En annan
möjlighet är databaser. Bägge dessa har dock vissa bakomliggande
brister.
ASCII
Man kan sända relativt avancerat data med en komma eller tab separerad
ASCII fil. Nedan visas ett exempel på detta:
| Produkt |
Pris |
Antal |
| ABC |
122 |
4 |
| ZYX |
133 |
1 |
| QWE |
500 |
40 |
| MM |
21 |
1 |
Problemet är att denna fil inte innehåller någon som helst
information om vad kolumnerna innehåller, t.ex. vilken valuta är
priserna i. Man brukar ibland kalla detta för metadata - d.v.s. data om
datat. Visserligen kan man tänka sig att man lägger in en kolumn till
som innehåller information om valuta men denna har inte en naturlig koppling
till priskolumnen. Det skulle vara bättre att få in metadatat - attributen
- direkt i kolumnen, men det går inte.
Ett annat problem som en ASCII fil har är att den är "fyrkantig".
Alla som någon gång arbetat med databaser har stött på
begreppet "en till många" (one to many), vilket betyder att
en post kan vara relaterad till många andra. Vi kan t.ex. tänka oss
information om en musik-CD. Den har en titel, en artist och ett antal låtar.
Det finns således ett en till många relation mellan skiva och låtar.
Hur skriver vi en ASCII fil som innefattar denna relation? En möjlighet
är förvisso att sätta in 30 stycken extra kolumner för eventuella
låttitlar, men hur intelligent är detta egentligen?
Vi måste således skippa ASCII filer om datat inte är "fyrkantigt"
utan innehåller relationer. Ett annat problem är informationsinnehållet
i kolumnrubrikerna som kan vara relativt bristfälligt.
Databaser
Databaser har oftarst inga problem med att hantera en till många relationer,
men...
... hur sänder vi datat från en databas? Visserligen kan vi sända
en Access mdb fil till en annan person, men detta förutsätter ju att
mottagaren har tillgång till Access. Vi kan även sända en SQL
script som skapar eller modifierar en befintlig databas i en SQL server, men
hur villig skulle du vara att låta datorn automatiskt köra SQL script
på din databas? Enda sättet är då att exportera datat
till en ASCII fil och sända denna, men som vi redan konstaterat så
har ASCII filerna sina begränsningar.
Problemet är således en-till-många relationer som inte är
så lätta att uttrycka med traditionella metoder.
Lösningen heter XML
Lösningen heter XML - Extensible Markup Language
- och denna sektion av dessa sidor kommer att göra ett försök
att klargöra begreppen. En viss baskunskap i HTML kan vara användbar
även om XML inte nödvändigtvis har någonting med Internet
att göra.