!

Dette materialet blir ikke lenger vedlikeholdt. Du vil finne oppdatert materiale på siden: http://borres.hiof.no/wep/

Olympiade
Validering
Børre Stenseth
XSL > XSLT >Olympiade

Olympiade

Hva
Forklaring av olympiadeeksempelet, med rådata

Dette eksempelet henter rådata fra sommerolympiadene de siste årene. For å få en overblikkbar datamengde til dette eksempelet er det bare sprintdistansene i friidrett som er tatt med. Datasettet er presentert på modulen Noen datasett

Fila med råmaterialet er slik: all_results_xml

Validering

En verifisering av en xml-fil er en sjekk på at dokumentet er velformet. Det vil i hovedsak si at tag'ene har riktig form, at de avsluttes riktig, at de ikke overlapper. En slik sjekk har ingenting å gjøre med hvilke elementer vi bruker, hvilke attributter som inngår, hvilke rekkefølge de opptrer i, hvilke verdier de har osv.

Dersom vi ønsker å legge på en sterkere kontroll så kan vi definere detaljert hvordan dokumenter skal bygges opp. Vi lager en dtd (Document Type Definition) eller et Schema. Et xml-dokument kan valideres mot en slik dtd eller schema.

DTD

En dtd for våre olympiske resultater kan se slik ut (fila: olymp.dtd):

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT IOC (OlympicGame+)>
<!ELEMENT OlympicGame (event+)>
<!ATTLIST OlympicGame
    place CDATA #REQUIRED
    year CDATA #REQUIRED
>
<!ELEMENT athlet (name, nation, result)>
<!ELEMENT event (athlet+)>
<!ATTLIST event
    dist (100m | 200m | 400m) #REQUIRED
>
<!ELEMENT name (#PCDATA)>
<!ELEMENT nation (#PCDATA)>
<!ELEMENT result (#PCDATA)>

Fila koples til xml-fila med følgende linje:

  <?xml version="1.0" encoding="utf-8"?>
  <!DOCTYPE IOC SYSTEM "olymp.dtd">
  <IOC>
  ...

Schema

Et alternativ til en DTD er Schema. Et slikt skjema kan se slik ut:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="IOC">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="OlympicGame" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="OlympicGame">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="event" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="place" use="required">
                <xs:simpleType>
                    <xs:restriction base="xs:NMTOKEN">
                        <xs:enumeration value="Athens"/>
                        <xs:enumeration value="Atlanta"/>
                        <xs:enumeration value="Barcelona"/>
                        <xs:enumeration value="Sidney"/>
                        <xs:enumeration value="Beijing"/>
                        <xs:enumeration value="London"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="year" use="required">
                <xs:simpleType>
                    <xs:restriction base="xs:NMTOKEN">
                        <xs:enumeration value="1992"/>
                        <xs:enumeration value="1996"/>
                        <xs:enumeration value="2000"/>
                        <xs:enumeration value="2004"/>
                        <xs:enumeration value="2008"/>
                        <xs:enumeration value="2012"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="athlet">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="name"/>
                <xs:element ref="nation"/>
                <xs:element ref="result"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="event">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="athlet" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="dist" use="required">
                <xs:simpleType>
                    <xs:restriction base="xs:NMTOKEN">
                        <xs:enumeration value="100m"/>
                        <xs:enumeration value="200m"/>
                        <xs:enumeration value="400m"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="nation" type="xs:string"/>
    <xs:element name="result" type="xs:string"/>
</xs:schema>

Skjema gir oss mulighet til å være mye mer nøyaktig når det gjelder å angi hvordan data skal beskrives. Vi går ikke nærmere inn på dette her. Et skjema koples til XML-fila på følgende måte:

<?xml version="1.0" encoding="utf-8"?>
<IOC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="olymp.xsd">

Det vi har gjort er å definere et språk for å beskrive sprintresultater i olympiske leker. XML er i seg selv ikke noe språk, det mangler ord, men et sett med basis gramatikkregler. Vi følger den mest grunnleggende gramatikken når vi lager verifiserbare dokumenter. Vi skriver korrekt språk, med lovlig ordforråd og korrekt gramatikk, når vi lager validerbare dokumenter. For eksempel XHTML er et språk som i prinsipp er helt parallellt med vårt "sprintresultater i OL"-språk. XHTML er bare mer omfattende, og dtd-fila er større(!).

Framvisning

I dette forsøket vil vi kople et stilsett (stylesheet) direkte til xml-fila. Dette bidrar ikke til annet enn å få et annet utseende på xml-fila. Stilsettet er slik:

IOC{
   background: white;
   font-family: "Geneva", "Verdana", "Arial", sans-serif;
   text-align: left;
   display:block;
}
OlympicGame{font-size:15;}
event,athlet{font-size:12;}
name{color:red;display:block}
nation{color:blue;display:block}
result{color:green;display:block}

Vi setter inn linja som kopler inn stilsettet (style2.css) slik:

  <?xml version="1.0" encoding="utf-8"?>
  <!DOCTYPE IOC SYSTEM "olymp.dtd">
  <?xml-stylesheet code="text/css"  href="style2.css"?>
  <IOC>
  ...
  
resultat http://www.it.hiof.no/~borres/dw/olymp/all_resultsmedstil.xml

Dette er neppe mye å glede seg over, men det vi ser er at vi kan kople stilsett direkte mot en xml-fil. Vi får altså ikke se attributtverdier, kun tekstinnhold i elementene. Dersom vi har en fil der vi bruker enkle elementer til å strukturere tekstmengder, kan vi lage en akseptabel framstilling av XML ved hjelp av stilsett.

Vi skal i de følgende modulene utsette datamaterialet for en rekke transformasjoner, både med tanke på formattering og struktur.

Referanser

Alle aktuelle filer er sitert i modulen

Vedlikehold
Børre Stenseth, revidert des 2004
( Velkommen ) XSL > XSLT >Olympiade ( XML2XML )