Introduktion till XML

Läs först dessa förklaringar till vissa begrepp innan du börjar läsa texten för att lättare förstå innehållet.

Element: Ett element är i ett SGML-dokument området från starttaggen till den tillhörande sluttaggen.

DTD: Är i både XML och SGML en definition av ett markeringsspråk. HTML är således definierat med en DTD som beskriver hur HTML-dokumentet skall "taggas".

Vad är det som är fel med HTML ?

Från början var det meningen att när man skrev HTML-kod skulle man använda elementen till att markera informationen efter dess betydelse, inte efter hur man önskade att sidorna skulle se ut i en eller annan webläsare. Med andra ord skulle man placera titel, huvudöverskrift, text som skulle framhävas och kontaktinformation till sidans författare i respektive element t.ex. TITLE, H1, STRONG, ADDRESS. Att istället använda FONT och I eller liknande, tar bort möjligheten att använda informationen till att både visa den i en webläsare och till maskinell behandling. (Ref 2)

När man följde den ursprungliga avsikten kunde browsern själv anpassa hur den skulle vissa de olika delarna av sidan efter läsarens egenskaper och inställningar. Detta är bra eftersom vissa webläsare är inställda att köra icke-grafiskt och en annan kanske har ställt in sin läsare att visa överskrifter på ett visst sätt osv. Allt detta gör att en designer som inte följer reglerna kan skapa svårigheter för de som har webläsare som inte följer standarder.

Dessvärre har webläsarleveratörerna inte förstått detta problem, eller så har de avsiktligt valt att ignorera det, för de har ignorerat standarder som försöker att lägga layoutinformationen utanför själva HTML-dokumentet, som för exempel CSS. (Se vidare i uppsatsen) I stället har de lagt till sina egna element och attribut som har till avsikt att ange layout, som FONT, CENTER, BGCOLOR osv. De har också byggt HTML-redigeringsverktyg (t.ex. Netscape Gold) som producerar HTML där taggningen sker med tanke på layout istället för innehåll. (T.ex. så använder sig Netscape Gold UL till att göra en indentering (indragning) och inte bara för att för att göra listor.)

Resultatet blir att väldigt många sidor på webben innehåller taggning som är avsedd för en bestämd version av en bestämd webläsare (med standardinställningar) i en bestämd skärmupplösning, och som oftast är mer eller mindre oläslig för de som använder något annat. HTML har gradvis blivit omvandlat till ett layoutspråk för Netscape och Microsoft Internet Explorer av leverantörerna och dess användare.

Detta är emellertid inte det enda problemet. Eftersom man skall märka informationen efter betydelse säger det sig själv att de element man behöver varierar med vad man skall skriva om. T.ex. kommer keramiker att behöva andra element än vad ett flygbolag gör. Om man funderar lite över detta märker man fort att om HTML skall täcka allas behov så behövs det ett vanvettigt antal element, och detta är förstås ingen bra lösning, varken tekniskt eller mänskligt. (Tungt att lära sig och att bygga programvara för.)

HTML har också en väldigt liten intern struktur, detta ger att det är enkelt att skriva "laglig" HTML. T.ex. är det helt fritt hur man placerar elementen gentemot varandra. Detta gör att man behöver inte tvunget placera H1 först, sedan H2 under osv. (Tänk dig att H1 är som en boktitel och H2 är som en kapitelöverskrift osv) Det logiska hade ju varit att det fanns en sådan struktur, men HTML kräver alltså inte detta. (Ref 2 och 3 )

W3C, som lägger standarden för webben, har för länge sedan insett detta problem och tillsatte för ett tag sedan en arbetsgrupp som jobbar med detta problem. Denna arbetsgrupp håller på att utarbeta en standard som de kallar för XML. (Skriv här att standarden har blivit godkänd). Arbetsgruppen (kallar sig för SWG, for SGML Working Group) har delat in arbetet i tre faser:

Fas 1. Att utarbeta en standard för hur man kan definiera upp sina egna markeringsspråk för speciella behov.

Fas 2. Att utarbeta en standard för hur länkning skall göras i dessa markeringsspråk.

Fas 3. Att utarbeta en standard för hur layout skall anges utanför markeringsspråken.

XML

Var uppmärksam på att beskrivningarna som ges kan komma att ändras något när XML på "riktigt" kommer i bruk !

Själva XML

Det finns alla redan en standard som kan användas till att definiera markeringsspråk som HTML, och detta språk heter SGML. HTML är faktiskt definierat i SGML. I teorin skulle SGML kunna användas som den nya standarden, man skulle bara lägga till SGML-tolkning i webläsarna. Problemet är bara att SGML är stort och komplicerat, och innehåller många möjligheter som inte används och som aldrig har blivit implementerat. Dessutom är SGML lite för svagt för att stödja olika tegnsett (teckensnitt ?),något som kan skapa problem på webben där man ofta inte vet vilket tegnsett som ett dokument är skrivet i. Det är också svårt att tolka SGML-dokument utan att ha tillgång till definitionen av markeringsspråket. (DTD:n) Resultatet blev alltså att SWG valde att göra en förenklad utgåva av SGML, som de kallade för XML. (Som de gillar att säga så är XML mer likt SGML än HTML++.)

Huvudpoängen med XML är att man, genom att definiera sitt eget markeringsspråk, kan koda informationen i dokumentet efter betydelse på ett mycket mer precist sätt än det HTML tillåter. Detta gör att program som behandlar dokumenten kan "förstå" dem och göra saker med informationen på ett helt annat sätt än med vanlig HTML ( eller textbehandlings-dokument). Ett exempel är att om man har kodat recept enligt en DTD som är skräddarsytt för detta, där det är angivet mängden av varje ingrediens och olika alternativ till enklare ingredienser. Då skulle man på ett lätt sätt kunna bygga ett program som gjorde en översikt över vilka ingredienser som man hade i kylskåpet och gjorde en lista över de rätter som man skulle kunna laga med dem. Med en kalorilista på alla ingredienser skulle systemet också kunna föreslå de varianter på recept som hade minst antal kalorier och sortera förslagen efter kaloriinnehåll. Möjligheterna är nästan obegränsade, bara informationen är kodat på ett sätt som programmen förstår.

Att definiera sitt eget markeringsspråk i XML är faktiskt otroligt lätt. Om vi t.ex. vill göra ett markeringsspråk för FAQ-er vill vi kanske att det skall se ut ungefär så här:

<?XML VERSION="1.0" ENCODING="UTF-8" RMD="NONE"?>

<!DOCTYPE FAQ SYSTEM "FAQ.DTD">

<FAQ>

<INFO>

<SUBJECT> XML </SUBJECT>

<AUTHOR> Stina & Liz</AUTHOR>

<EMAIL> sv95onl@student.udd.htu.se </EMAIL>

<VERSION> 1.0 </VERSION>

<DATE> 5.march.98 </DATE>

</INFO>

 

<PART NO="1">

<Q NO="1">

<QTEXT>Vad är XML?</QTEXT>

<A>SGML light.</A>

</Q>

 

<Q NO="2">

<QTEXT>Vad skall jag använda det till?</QTEXT>

<A>Vad du vill.</A>

</Q>

 

</PART>

</FAQ>

 

I XML skulle markeringsspråket som ligger över (låt oss kalla det FAQML) haft denna DTD:n:

<!ELEMENT FAQ (INFO, PART+)>

 

<!ELEMENT INFO (SUBJECT, AUTHOR, EMAIL?, VERSION?, DATE?)>

<!ELEMENT SUBJECT #PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT EMAIL (#PCDATA)>

<!ELEMENT VERSION (#PCDATA)>

<!ELEMENT DATE (#PCDATA)>

 

<!ELEMENT PART (Q+)>

<!ELEMENT Q (QTEXT, A)>

 

<!ELEMENT QTEXT (#PCDATA)>

<!ELEMENT A (#PCDATA)>

 

<!ATTLIST PART NO CDATA #IMPLIED

TITLE CDATA #IMPLIED>

<!ATTLIST Q NO CDATA #IMPLIED>

<!ELEMENT> används till att definiera element på följande sätt: <!ELEMENT ELEMNAMN ELEMINNEHÅLL>. ELEMINNEHÅLL beskriver vilka element som får lov att förekomma inne i elementet vi har definierat, och på vilket sätt. A, B betyder att A måste komma först och sen B. ? efter ett element betyder att den kan uteslutas, + betyder att den skall vara med en eller många gånger och * betyder att den kan vara med en eller många gånger. #PCDATA står för vanlig text. (Något förenklat).

En viktig skillnad mellan XML och SGML är att element i XML som inte har något innehåll (t.ex. IMG eller BR i HTML ) skall skrivas i XML : <IMG SRC="pamela.gif"/>

Observera snedstrecket före den avslutande >‘en. Detta gör att programmet som läser dokumentet utan att känna till DTD:n vet att detta element inte har något innehåll, därför behöver den inte sätta en sluttagg och den vet också att det som kommer efter taggen inte är inne i elementet.

<!ATTLIST> används till att ange vilka attribut ett element kan ha. I DTD:n ovan används de till att tala om att PART och Q har ett attribut som heter NO, som innehåller vanlig text och som kan uteslutas. Som du ser har PART två attribut, den sista som heter TITLE, innehåller text och kan uteslutas.

Länkning i XML

HyTime är en standard som ( bland annat) anger hur länkning mellan olika SGML-dokument kan göras. Den är långt mer avancerad än länkningen i HTML och innehåller mycket som man inte har användning för på nätet. SWG håller därför på att bygga en standard för XML som lånar mycket från HyTime och tillhörande standarder, men förenklar det. Denna standard kallas för XLL (Extensive Linking Language)

För att man skall kunna använda denna länkstandard i vilken DTD som helst är det inte definierat något eget element för detta. I stället är det så att länkade element använder ett eget attribut som identifierar dem som länkade. Alla element som har attributet XML-LINK kommer att bli uppfattar som länkat. Värden på XML-LINK anger vilken slags länk-typ det är.

Länkar i XML kan gå emellan två eller flera resurser där resurserna kan vara antingen filer (och inte nödvändigtvis XML eller HTML) eller element i filer. Länkar kan göras med hjälp av ACTUATE-attributet så att de antigen följs när användaren ber om det (genom att klicka, eller på annat sätt; USER) eller automatiskt (dvs i det systemet läser det länkade elementet, AUTO)

Vad som sker när man följer en i länk i XML anges med SHOW-attributet, som kan ha följande värden:

EMBED

Detta betyder att resursen som länken går till skall sättas in i dokumentet länken kommer ifrån. Detta betyder att resursen länken går till skall sättas in i dokumentet länken kommer ifrån och kan användas till att inkludera text från en annan fil (när man följer länken automatiskt) eller t.ex. för att sätta in en bild på en sida. Det kan också användas till att sätta fotnoter in i texten och med ACTUATE kan man då välja om detta skall göras automatiskt (AUTO) eller när användaren klickar på fotnot-symbolen. (USER)

REPLACE

Detta betyder att resursen som länken går till skall bytas ut mot elementen länken kommer ifrån. Har man två olika utgåvor ett avsnitt kan den ena länkas till den andra, så att man genom att följa länken kan se den andra versionen i sammanhanget istället för den ursprungliga.

NEW

På detta sättet påverkas det inte var ifrån resursen kommer när man följer länken, resursen det länkas till skall istället behandlas/visas i en ny kontext. En vanlig HTML-länk är av typen NEW eftersom det nya dokumentet visas för sig själv, och inte på något sätt inne i det ursprungliga dokumentet.

XML har också fler avancerade länkningar än dessa. Länkar kan gå till mer än en resurs, länkar kan anges utanför de dokument de länkar och vilket element i en resurs en länk går till kan anges på väldigt avancerade sätt. Elementet kan identifieras med ett ID-attribut, positionen i elementstrukturen och man kan till och med ange saker som att länken skall gå till "fjärde UKAPITEL-elementet i tredje KAPITEL-elementet i första DEL".

I FAQML skulle detta kunna användas både för att ange länkar ut från dokumentet till relevant information och till att ange interna förhållanden mellan olika svar. Fotnoter kunde också varit angivna med sådana saker.

Layout i XML

Faktiskt finns det redan en SGML-standard för detta också som heter DSSSL, och den är inte heller enkel. Till följd av detta har SWG också här bestämt att göra en förenklad utgåva. En sådan utgåva med namnet DSSSL Online, blev skissad på för ca ett år sedan, och det är antagligen något liknande som kommer att tas i bruk. Det enda som har gjort med den biten är att ett forum att blivit byggt för diskussion om vilka delar av DSSSL som man tycker skall vara med i den slutliga standarden.

DSSSL är faktiskt ett språk som är baserat på Scheme (en dialekt av LISP), och har möjligheter att göra väldigt avancerade saker med SGML-dokumentet det bearbetar. Om man vill kan man använda det som ett enkelt stylesheet som anger fonter och fontstilar för de olika elementen. Eftersom DSSSL är baserat på Scheme kan man också utvidga detta till kraftfullare saker.

DSSSL används som regel till att göra om SGML till ett mer eget presentationsformat som t.ex. PDF (även känt som Acrobat), PostScript, LaTeX, HTML eller RTF (Microsoft Rich Text Format). Vissa medlemmar i SWG har påstått att DSSSL kan ge lika avancerad layout som PostScript, men det är långt mer kraftfullare.

Meningen med XSL

XSL är ett stylesheet-språk som är designat för

Vad kan XML användas till ?(se artikel av Jon Bosak) (Ref 4)

Layoutproblemet

Det första att häpna över är att XML kan rätta till problemen med att göra webbsidor med ordentlig layout som är läslig för alla. I och med att DSSSL Online (med det menar jag XML’s version av DSSSL) kommer att vara en helt färdig standard kommer man efterhand att kunna jobba mot en fast standard som man kan skriva mot. DSSSL-O är också så avancerad att man i sina stylesheet kan skriva kod som testar om egenskaperna man använder stöds av användarnas webläsare och göra alternativa lösningar om de inte gör det.

I och med att varken Microsoft och Netscape har klarat av att implementera CSS ordentligt kan man ju undra hur det skall gå när de skall prova sig på DSSSL. Hoppas att de nu blir tvungna att göra ett ordentligt jobb och fixa till sina webbläsare, och om det inte kommer att göra det så kommer säkert någon annan att göra det och överta marknaden. Microsoft har nu inkluderat en XML "parser" i sin Microsoft’s Internet Explorer 4.0 och Netscape har också jobbat på att införa XML i sina produkter. (Ref 5, 6 och 11 )

Mer avancerad datavisning

Ett API för XML och HTML som alla XML/HTML-processorer (dvs webläsare och andra verktyg) kan/bör stödja (kallad DOM, Document Object Model) är under utförande. Det försiggår lite på sidan av SWG’s ordinarie arbete, men är i alla fall på gång. (Ref 7) Detta API kommer att göra att man kan lägga Java-applets som kan användas till att ändra hur XML-koden visas i webläsaren. (Medlemmarna i SWG tycker om att kalla detta "giving Java something to work with") Detta kan användas på otaliga sätt, men t.ex. kan man tänka sig att fotnoter som inte syns förrän du trycker på en viss knapp, är att man endast kan få upp kapitelöverskrifterna i ett stort dokument och så klicka på det kapitel man är intresserad av för att få upp underkapitelöverskrifterna och sedan gå vidare för att se innehållet.

Man kan också göra saker som att göra tabeller där man kan ändra sorteringen genom att klicka på kolumnen man vill ha sorterad. Möjligheterna är som sagt otaliga och detta är bara toppen på isberget.

Detta kan göras väsentligt mer avancerat, t.ex. kan VRML ( språk för kodning av tredimensionella värden) redefineras som ett XML-språk och VRML-läsarna kan göras som Java-applets som använder sig av DOM. Detta kommer att göra att man kan använda VRML såsom det var tänkt från början att användas, men utan att behöva någon mer programvara än din webläsare.

Jon Bosak skriver (ref 4) om en enda mer avancerad möjlighet. De största producenten av elektroniska komponenter (så kallade chips) har gått samman för att göra en DTD som kan användas till att beskriva komponenter. Tillsammans med någon Java-applet kan man använda detta till att lagra ner beskrivningar av olika kretsar och modellerna som binder dessa samman.

Sökning och agenter

Användningsområdena som beskrivs här ligger lite långt fram i tiden, men förhoppningsvis kommer det att bli verklighet efter hand.

Att information i XML-dokument är så bra beskrivet med markeringar gör att man kan söka på helt andra sätt än på det primitiva text-sökningssättet som sökmonitorerna Excite och AltaVista gör idag. (Ref 8,9)

Med standardiserade DTD’er för olika föremål vill man kunna söka information på ett långt bättre sätt än vad som är möjligt idag. T.ex. kommer en central söktjänst för kretsfabrikanterna kunna bygga på en DTD som nämndes ovan, och kunna erbjuda sökning i kretsbeskrivningarna till många olika fabrikanter. Därmed skulle man kunna göra ordentliga sökningar på kretsar efter specifikationer, precis som om det var en relationsdatabas man hade.

För att utnyttja detta på globala söktjänster som Excite och AltaVista kommer att bli svårare, därför att dessa måste ta hänsyn till alla möjliga DTD’er som finns. Med en översikt på de viktigaste och lite intelligens i sökverktygen skulle detta kunna gå att hantera, men fortfarande verkar det fjärran.

Jon Bosak talar om att utnyttja detta tillsammans med intelligenta agenter, som alltså är personliga webrobotar som åker omkring på nätet och letar information till dig efter sina inställningar. Dessa kommer kanske att ha större möjligheter att lyckas eftersom artificiell intelligensdelen kommer att vara lättare att få ordning på i framtiden tror Garhol (1997), och då kommer det vara lättare att hantera problemet med olika DTD’er.

Utbyte av information mellan olika system

På grund av att DTD anger ett standardformat för information för en bestämd användning, gör detta att det blir mycket lättare att utbyta information mellan olika parter. System som kan konvertera mellan sitt interna format och andras DTD’er kommer att kunna dela på information med varandra om de har varsitt dataformat.

Detta gör att data lätt kan flyttas från en databas till en annan, oavsett vilket system dessa databaserna använder sig av internt. På nätet kommer detta att vara mycket intressant för datautbyte mellan företag som är inom samma bransch, eller mellan forskare inom samma område.

Det är t.ex. redan utvecklat ett språk för kemister och andra personer som jobbar med kemi på något annat sätt. (Ref 10) Här är det mycket aktuellt med utbyte av data om kemiska forskningsresultat etc. Det kan också användas tillsammans med Java-applets i undervisning. Möjligheterna är oändligt stora.

 

 

 

Referenser:

Lars Marius Garshol "Introduksjon til XML" www.stud.ifi.uio.no/~larsga/download/xml/xml.html 980303

http://www.w3.org/Provider/Style/DeviceIndependent.html "W3C Style" 980306

http://www.w3.org/TR/REC-html32.html#body "HTML 3.2 Reference Specification" 970303

Jon Bosak (SWG’s förman) http://sunsite.unc.edu/pub/sun-info/standards/xml/why/xmlapps.htm "XML, Java, and the future of the Web" 980306

http://www.microsoft.com/xml/default.htm "Extensible Markup Language (XML)" 980306

http://www.netscape.com/flash5/comprod/columns/intranet/open_standards.html "NETSCAPE OPEN STANDARDS GUARANTEE" 980306

http://www.w3.org/DOM/ "Document Object Model (DOM)" 980306

http://www.lpl.univ-aix.fr/projects/SgmlQL/ "SgmlQL SGML Query Language"980306

http://www.cs.indiana.edu/hyplan/asengupt.html "Arjit Senguptas Hemsida" 980306

http://www.venus.co.uk/omf/cml/doc/index.html "An Introduction to CML" 980306

http://www.arbortext.com/xmlw3c.html "W3C endores first XML standard for global use" 980306