Forskergruppe for språkteknologi

Hva er XML?

All tekst innholder eksprisit eller implisit informasjon om teksten i tillegg til selve teksten. I en trykt tekst kan typografien være bærer av denne meta-informasjonen. Hvis man ønsker å gjøre denne informasjonen eksplist trenger man et språk for å uttrykke denne informasjonen. Så et det slik at det ikke nødvendigvis er det samme språket man ønsker å bruke for å uttrykke informasjon om alle tekster. Et språk (eller syntaks) for å beskrive informasjon om en tekst kalles et tekstmerkingsspråk (markup language). XML - Extensible Markup Languae er et metaspråk for å lage tekstmerkingsspråk, altså et verktøy man kan bruke for å lage et språk for å beskrive tekst.

Hva er så en tekst i dette sammenhengen? En tekst er en serie med tegn som er skrevet f.eks. i et naturlig språk, men det kan også være en banktransaksjon, ett matematisk uttrykk, data til et program eller noter til et musikk-stykke. Teksten må deretter være i elekronisk form (den kan for såvdt være på papir også, med all sine koder, men det er jo upraktisk i vår sammenheng.) Teksten kan være ny eller den kan være gammel, f.eks. en transkipsjon av en latisk innskrift fra antikken. Hvis man av en eller annen grunn ønsker man at informasjonen om denne teksten skal være eksplisitt må teksten kodes, og hvis man i tillegg ønsker at formatet på den kodede tekst skal være åpent, programvare uavhengig og lett å utveksle med andre, så er XML laget for formålet.

Tekstkoding består i sette merkelapper på tekstdeler som man putter inn i bokser. Boksene kan være inn hverandre. I XML og SGML kan ikke boksene overlappe hverandre, slik at boksmetaforen gir et riktig bilde av situasjonen.

XML, SGML, HTML og xHTML

XML ligner på HTML - Hypertext Markup Language, men XML er altså et metaspråk: Et språk til å lage tekstmerkingsspråk, mens HTML er et tekstmerkingsspråk.

XML, er en W3C - World Wide Web Consortium - anbefaling fra februar 1998. XML er utviklet fra et tidligere metaspråk som heter SGML Standard Generalized Markup Language og er et subset av SGML.

Forholdet mellom SGML, XML og HTML og xHTML kan illustreres slik:



HTML er et tekstmerkingsspråk som kan beskrives i SGML. HTML kan IKKE beskrives i XML, men xHTML en redefinering av HTML i XML.

Målsetningen med XML

  • XML shall be straightforwardly usable over the Internet.
  • XML shall support a wide variety of applications.
  • XML shall be compatible with SGML.
  • It shall be easy to write programs which process XML documents.
  • The number of optional features in XML is to be kept to the absolute minimum, ideally zero.
  • XML documents should be human-legible and reasonably clear.
  • The XML design should be prepared quickly.
  • The design of XML shall be formal and concise.
  • XML documents shall be easy to create.
  • Terseness in XML markup is of minimal importance.
Fra Extensible Markup Language (XML) 1.0 (Third Edition), W3C Recommendation 04 February 2004.

Eksempel på XML dokument

XML-dokumeneter starter med en dokument-prolog. Deretter følger dokument-elementet (eller rot-elementet) til XML-dokumentet. Et helt enkelt XML-dokument ser slik ut (1_1_MinSide.XML):

<?xml version="1.0" encoding="ISO-8859-1"?>
<side>
<tittel>Min side</tittel>
<tekst>
<overskrift>Det finnes flere tekstmerkningsspråk</overskrift>
<textline>HTML (HyperText Markup Language)</textline>
<textline>XML (eXtensible Markup Language)</textline>
<textline>SGML (Standard Generalized Markup Language)</textline>
</tekst>
</side>



Prologen

Dokument-prologen starter med en XML-deklarasjonen, som må være første linje i dokumentet. (I XML 1.0 er ikke XML-deklarasjon obligatorisk, i XML 1.1. er den det). Den starter med <?xml, og kan ha følgende parametre:
  • version: angir XML-versjonen. Kan være 1.0 eller 1.1. Denne parameteren må angir hvis de følgende er angitt, og bør absolutt brukes ellers også.
  • encoding: angir tegnsettkodingen i dokumentet. Hvis denne ikke er angitt er UTF-8 standard. I eksempelet over er ISO-8859-1 brukt, som tilsvarer første raden i UNICODE (U+0000 til U+00FF). Det er typisk det man trenger for de fleste vest-Europeiske språk.
  • standalone: angir om dokumentet bruker deklarasjoner som ikke er inkludert i dokumentet selv. Hvis denne paramateren ikke er angitt, er valget satt til "no"
Merk at det er forskjell to store og små bokstaver (det gjelder generelt for XML), og at rekkefølgen på parametrene i XML-deklarasjonen er fast.

Videre kan man i prologen ha en Document Type Declaration, dvs. en angivelse av hvilket skjema det følgende dokument-elementet skal følge. Denne kan enten referere til et eksternt skjema, eller skjemaet kan være inkludert i XML-dokumentet, eller en kombinasjon av disse, f.eks. slik (1_2_Mikkel.XML):

        
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="dikt.xsl"?>
<!DOCTYPE poem SYSTEM "dikt.dtd"
[
<!ENTITY aelig "&#xE6;">
<!ENTITY oslash "&#xF8;">
<!ENTITY aring "&#xE5;">
<!ENTITY AElig "&#xC6;">
<!ENTITY Oslash "&#xD8;">
<!ENTITY Aring "&#xC5;">

<!ENTITY navn "Mikkel">
]>


Der system identifikatoren kan også være en URL. Da vil deklarasjoen virker også for den som ikke har skjemaet liggende på sammen plass som XML-dokumentet.

Man kan referere DTDen som Formal Public Identifier, hvis det finnes for den aktuelle DTDen. Vær oppmerksom på at mange validatorer ikke forstår Formal Public Identifier, slik at det er vanligvis best å også oppgi URLen til DTD også, f.eks. slik (1_3_Mikkel_teixlite.XML):

<!DOCTYPE TEI.2 PUBLIC "-//TEI//DTD TEI Lite XML ver. 1.3//EN" 
    "http://www.tei-c.org/Lite/DTD/teixlite.dtd">


I prologen kan man også ha Processing Instructions, som f.eks. referanse til stilark. Et eksempel kan være:

<?xml-stylesheet type="text/css" href="dikt.css"?>
    
her er det referert til en CSS-stilark.

Endeling kan man ha kommetarer i prologen så vel som ellers i XML-dokumenter, disse skrives slik:

<!-- Dette er en kommentar. -->
    


Dokument-elementet

Selve teksten og beskrivelsen av denne følger i dokument-elementet. Alle XML-elementer har et rot-element som innholder alle de følgende tekstene og elementene (1_2_Mikkel.XML):

    <dikt>
    <tittel>Mikkel Rev</tittel>
    <forfatter>Ukjent, i barnetradisjon.</forfatter>
    <vers nummer="1">
    <navn type="dyr">Mikkel Rev</navn> satt og skrev<linjeskift/>
    p&aring; ei lita tavle<linjeskift/>
    Tavla sprakk, Mikkel skvatt<linjeskift/>
    Oppi <navn type="person">Pappas</navn> flotthatt<linjeskift/>
    </vers>
    
...    
</dikt>


Elementer

XML-dokumenter er bygget opp av elementer som kan innehold tekst og elementer, eller de kan være tomme. Alle elementer har et navn og de kan ha et eller flere attributter. Elementet begynner med en start-tagg som angies med tegnet <, deretter følger navnet på elementer og eventuelle attributter, så tegnet >. Detetter følger innholdet i elementet. Elementet avsluttet med slutt-taggen som betgynner med tegnene </ etterfulgt av elementets navn og tilslutt tegnet >

Tomme elementer har ikke slutt-tagg, og start-taggen avsluttes med />

Attributter

Elementer kan ha et eller flere attributter, disse angies i start-taggen etter minst et blankt tegn etter navnet. Først angies navnet på attributtet, deretter følger tegnet = og deretter verdien som skrives i anførselstegn (" eller '). Hvis det er flere attributter angis disse med blanke tegn mellom seg. Rekkefølgen på attributtene er likegyldig, men samme attributt kan bare angis en gang.

Entiteter

Hvis man i et XML-element bruken en frase flere gangen kan denne deklareres som en entitet i dokumentets prolog (1_2_Mikkel.XML):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="dikt.xsl"?>
<!DOCTYPE poem SYSTEM "dikt.dtd"
[
<!ENTITY navn "Mikkel">
]>
<poem>


Entiteter referes f.eks. slik &navn;, som blir vist som "Mikkel" i en XML-applikasjon. Vanligvis blir entiteter deklarert i DTDen eller i egen ekstern fil.

Forhåndsdeklarerte entiteter

Som man ser blir enkelte tegn reservert i XML, det gjelder særlig tegnene & < > som IKKE kan forekomme i noe tekst-innhold i et XML-dokument (men de kan brukes i f.eks. kommentarer), hvis de gjør det må man kode dem ved hjelp av de forhåndsdeklarterte entitetene &amp;, &lt; og &gt;. Dette gjelder også for tegnene " og ' i attributt-verdier, der må disse tegnene kodes som &quot; og &apos;. Disse fem tegnene er de eneste som er forhånddeklarerte i XML.

Velformet

Et dokument er et XML-dokument hvis det er velformet (well formed):
  • [Definition: There is exactly one element, called the root, or document element, no part of which appears in the content of any other element.] For all other elements, if the start-tag is in the content of another element, the end-tag is in the content of the same element. More simply stated, the elements, delimited by start- and end-tags, nest properly within each other. [Extensible Markup Language (XML) 1.0, Second Edition]
Det følger av definisjonen av et XML dokument at det alltid er hierarkisk. Dette er en viktig begrensning, og alvorlig innvending mot både XML (og også SGML). Ikke alle tekster er hierarkisk, slike tekster kan ikke uttømmende beskrives i XML.

Ikke-hierarkisk tekst

En ikke-hierarkisk tekst kan f.eks. se slik ut:

"Vi har ikke gitt opp. Vi må få den regjeringen som har produsert dette makkverket til å ta til vettet, sa rektor Kirsti Koch Christensen til full jubel fra forsamlingen. "

La oss anta at vi av en eller annen grunn vil kode denne teksten akkurat slik den ser ut på enklest mulig måte:


<tekst>
<italic>Vi har ikke gitt opp. <bold>Vi må få den regjeringen 
som har produsert dette makkverket til å ta til vettet</italic>, sa rektor 
Kirsti Koch Christensen</bold> til full jubel fra forsamlingen.</tekst>


Vi ser her at elementet <bold> begynner inne i element <italic>, mens det avsluttes utenfor <italic>. Dette er ikke velformet xml, og er derfor ikke xml i det hele tatt. Dette kan naturligvis lett løses, men det blir en lite elegant løsning der <bold>-elementet deles i to:


<tekst>
<italic>Vi har ikke gitt opp. <bold>Vi må få den regjeringen 
som har produsert dette makkverket til å ta til vettet</bold></italic><bold>, sa rektor 
Kirsti Koch Christensen</bold> til full jubel fra forsamlingen.</tekst>


Se forøvring Claus Huitfeltdt artikkel om dette i Tekstkoding og tekststrukturer i Espen Aarseth og andre.: Datahåndbok for humanister, Ad Notam, 1999, s. 123-46.

Gyldig XML

Et XML-dokument er gyldig (valid) hvis det i tillegg til å være velformet også følger reglene i en gitt dokument model, f.eks. i form av den DTD - Document Type Definision. Et gyldig XML-dokument er alltid velformet, men et velformet XML-dokument er ikke nødvendigvis et gyldig XML-dokument.

Håndtering av blanke tegn

En XML-prosessor (dvs. program som kan lese XML-dokumenter, og gi tilgang til innhold og struktur) skal levere blanke tegn i teksten videre til applikasjonen. Men applikasjonen kan ha ulike stategier for å håndtere blanke tegn. En nettleser vil typisk normalisere blanke tegn, dvs. blanke tegn i elementer der kun elementer er tillatt blir fjernet, blanke tegn først og sist i elementer av typen mixed-content blir fjernet, og sekvenser av blanke tegn blir redusert til et blankt tegn.

Man kan ved å sette attributtet xml:space til "preserve" til et element angi overfor XML-applikasjonen at man ikke ønsker at blanke tegn skal normaliseres.

Navneområder (Namespaces)

Navneområder i XML bruker hvis man ønsker å bruke ulike tagg-sett i et og samme XML-dokument. F.eks. kan det tenkes at man inne i en tekst som bruker f.eks. DocBook DTD ønsker å bruke taggsettet til MathML for en kodingen av en matematisk ligning.

Mer om tegnsett

UTF-8 er standard tegnsettet til XML, dette er UNICODE kompatibelt. Alle XML-applikasjoner skal håndtere UTF-8 og UTF-16. Hvorvidt en XML-applikasjon viser tegnene riktig er avhenging av at de har riktige fonter installert, at operativsystemet man bruker håndterer UNICODE og at selve applikasjonen også håndterer UNICODE.

Hvis man bruker tegn som ikke er definert i UNICODE eller man er usikker på om programvare og operativsystemer som skal håndtere tegnen er UNICODE kompatible, kan man bruke tegn-entiteter for koding av tegnene, f.eks. deklarere de norske tegnene slik i prologen på sine XML-dokumenter:
        
<!ENTITY aelig "&#xE6;">
<!ENTITY oslash "&#xF8;">
<!ENTITY aring "&#xE5;">
<!ENTITY AElig "&#xC6;">
<!ENTITY Oslash "&#xD8;">
<!ENTITY Aring "&#xC5;">

        
Og refere til dem i teksten som &aring; osv.

Hvorfor er XML viktig?

  • Muliggjør dynamiske koding av alle typer dokumenter.
  • Frihet: Dokumenter skal tilhøre den som har skrevet det, ikke selskapet som har laget programvaren.
  • Enkelt: formatet er så enkelt at det kan lese både av folk og maskiner med et minimum av programvare.
  • Enkelt å konvertere til andre formater.
  • Den samme teksten kan vises på mange ulike måter.
  • Søking og gjenfinning av tekstelementer.
  • Langtidslagring.
  • Veldokumentert.


Exercises

1. Encode in XML a poem of more than one stanza, using your own markup language.

2. Check of your XML document is well-formed.

3. Add information about the author and some background information (who did the encoding, then was it done, when was the poem first published, metrical information etc.). Check well-formedness.

Verktøy

Se først og fremst http://www.w3.org/XML/#software som gir en oversikt over hva som finnes, og ikke minst lenker til oversiktssider.

Brown University, Scolarly Technology Group: XML Validation Form Man kan også installere validatorer på sin lokale maskin, eller på servere.

Internet Explorer 6.0: Innbygget XML-støtte og XSLT-parser. Det siste er ikke innebygget i Opera eller Netscape.

Gratis XML-editor for Windows "CookTop", se http://www.xmlcooktop.com/

emacs er mye brukt som editor og den er gratis. Det finnes også andre, f.eks. Oxygen, XMetal og XMLSpy, men disse koster penger.

Om XML relaterte emner

I tilknytting til XML er laget en rekke W3C anbefalinger. Her følger en kort omtale av noen av dem:

XSL

Stilark for transformering av XMl-dokumenter.

XLink

Lenker i XML dokumenter som både kan være enkle lenker slik vi har i HTML, men også komplekse lenker:
  • Lenker mellom flere enn to resurser
  • Lenker med metadata
  • Lenkene kan være skilt fra de lenkede resursene


XPointer

XML Pointer Language definerer hvordan man kan lage referanser til XML resurser og fragmenter av XML resurser. Det betyr at man f.eks. kan lage en referanse til et bestemt element i et XML dokument, uten å ha anchors i XML dokumenten man referer til.

XPath

XPath er et språk for å referere deler av et XML dokument, til bruk i bl.a. XSLT og XPointer.

Referanser

XSL Transformations (XSLT) Version 1.0, W3C Recommendation 16 November 1999, http://www.w3.org/TR/1999/REC-xslt-19991116

Extensible Markup Language (XML) 1.0 (Third Edition), W3C Recommendation 04 February 2004, http://www.w3.org/TR/2004/REC-xml-20040204/

XML Linking Language (XLink) Version 1.0, W3C Candidate Recommendation 3 July 2000, http://www.w3.org/TR/2000/CR-xlink-20000703/

XML Pointer Language (XPointer) Version 1.0, W3C Candidate Recommendation 7 June 2000, http://www.w3.org/TR/2000/CR-xptr-20000607

XML Path Language (XPath) Version 1.0, W3C Recommendation 16 November 1999, http://www.w3.org/TR/1999/REC-xpath-19991116

Associating Style Sheets with XML documents Version 1.0, W3C Recommendation 29 June 1999, http://www.w3.org/1999/06/REC-xml-stylesheet-19990629

The XML FAQ, by Peter Flynn et. al. Version 1.6 (21 June 2000), http://www.ucc.ie/xml/

Claus Huitfeltdt [Tekstkoding og tekststrukturer]: Espen Aarseth og andre.: Datahåndbok for humanister, Ad Notam, 1999, s. 123-46.

TEI P3 A Gentle Introduction to SGML , edited by C. M. Sperberg-McQueen and Lou Burnard, Chicago, Oxford 1994, s. 13, også tilgjengelig på verdensveven fra TEI Guidelines for Electronic Text Encoding and Interchange: A Gentle Introduction to SGML, http://www.tei-c.org/Guidelines/

Standard Generalized Markup Language [SGML] (ISO 8879), 1987.

Litteratur

Erik T. Ray: Learning XML, O´Reilly 2003, (kapittel 1 - 4, og kapittel 9).

Sist oppdatert: 2004.08.18 av TMB