!

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

DTD
Validering
Børre Stenseth
XML > Validering >DTD

DTD

Hva
DTD som formell beskrivelse av et XML-språk for å kunne validere et dokument, Document Type Definition

En DTD-fil beskriver et ML-språk. Det vil i korthet si hvilke elementer og attributter som inngår, hvilke elementer som kan være inkludert i andre elementer og hvilke elementer/attributter som er nødvendige og/eller mulige. Vi trenger en slik beskrivelse for å kunne validere et XML-dokument.

Skjema er et alternativ til DTD.

DTD-filer kan fort bli ganske kompliserte. Det er til stor hjelp å ha et verktøy som gjør det mulig å validere forløpende og det er til enda større hjelp å ha et verktøy som generer DTD filer for XML-eksempler. XMLSpy kan gjøre begge deler.

Selv om vi bruker et slikt verktøy eller ikke, så har vi bruk for å gjøre håndarbeid på DTD-fila. Nedenfor finner du litt enkel førstehjelp

Elementer

Et element defineres som en gruppe av subelementer eller subgrupper:

  <!ELEMENT A (B,C)>
  
  <!ELEMENT A (#PCDATA)>
  <!ELEMENT A EMPTY>
  <!ELEMENT A ANY>
  

EMPTY betyr at det ikke skal være noen barn til noden. ANY betyr at noden kan inneholde ingen eller flere noder av en hvilken som helst type som er dfinert i dokumentet. PCDATA står for Parsed Character DATA og er en terminologi hentet fra SGML. I praksis betyr dette tekst, i en eller annen form.

Grupper kan være sekvenser eller de kan være valgfrie

   <!ELEMENT A (B)>
   <!ELEMENT A (B,C)>
   <!ELEMENT A (B | C)>
   <!ELEMENT A (B, (C | D), E>
   <!ELEMENT A (B | C | (D,E))>
   
   # B
   B før C
   B eller C
   B før C eller D
   B eller C eller sekvensen D E
   

Grupper kan merkes som valgfrie (?), en-eller-flere (+), ingen-eller-noen (*).

  <!ELEMENT A (B?, C)>
  <!ELEMENT A (B, (C | D)+, E>
  <!ELEMENT A (B,C)*>
  

Character data kan sidestilles med subgrupper:

  <!ELEMENT A (#PCDATA | B | C)*>
  

Atributter

Elementer kan ha ingen eller flere atributter

  <!ATTLIST A a CDATA #IMPLIED>
  

Flere atributt angivelser kan skrives i samme angivelse eller hver for seg:

  <!ATTLIST A a CDATA #IMPLIED b CDATA #IMPLIED>
  ..
  <!ATTLIST A a CDATA #IMPLIED>
  <!ATTLIST A b CDATA #IMPLIED>
  

Atributter kan være obligatoriske (REQUIRED), valgfrie (IMPLIED)eller et valg mellom spesifiserte verdier (FIXED). Valgfrie atributter kan ha en default verdi, spesifiserte må ha en default verdi.

  <!ATTLIST A a CDATA #IMPLIED>
  <!ATTLIST A a CDATA "aaa">
  <!ATTLIST A a CDATA #REQUIRED>
  <!ATTLIST A a CDATA #FIXED "aaa">
  

Entities

Entities kan vi betrakte som enheter som kan defineres og plasseres inn i en XML-fil når den parses. F.eks. kan vi lage følgende XML-fil:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE bok SYSTEM "dok1.dtd">
<bok>
<tittel>
En bok
</tittel>
<forfatter>
&amp;meg_selv;
</forfatter>
</bok>

Med følgende DTD:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT tittel (#PCDATA)>
<!ELEMENT bok (tittel,forfatter)>
<!ELEMENT forfatter (#PCDATA)>
<!ENTITY meg_selv  "Børre Stenseth, Høgskolen i Østfold">

Dette går bra i MSIE:

Se den i nettleseren http://www.it.hiof.no/~borres/dw/dtd/dok1.xml

Dersom vi skal he det til å fungere i Mozilla, må vi plassere entiteten eksplisitt i selve XML-fila:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE bok SYSTEM "dok1.dtd"[<!ENTITY meg_selv "Børre Stenseth">]>
<bok>
<tittel>
En bok
</tittel>
<forfatter>
&meg_selv;
</forfatter>
</bok>

Dersom vi gjør begge deler, virker det i både MSIE og Mozilla:

Se den i nettleseren http://www.it.hiof.no/~borres/dw/dtd/dok2.xml

Det fungerer altså som en replace, og kan typisk sammenlignes med en konstantdefinisjon i et programmeringsspåk som C. Vi kan definere eksterne entities og importere hele filer ved denne teknikken.

Standard entities

I XML er det definert følgende standard, eller predefinerte, entities:

  • &lt; for mindre enn, eller åpningsparentesen i elementer: <
  • &gt; for større enn, eller avslutningsparentesen i elementer: >
  • &amp; for &
  • &quot; for doble anførselstegn: "
  • &apos; for enkel apostrof: '
Referanser
  1. Declaring Elements and Attributes in an XML DTD Ronald Bourret www.rpbourret.com/xml/xmldtd.htm 14-03-2010
  1. DTD for HTML4 W3C www.w3.org/TR/REC-html40/sgml/dtd.html 14-03-2010
  1. DTD for XML.News XMLNews.org www.xmlnews.org/docs/xmlnews-story.html 14-03-2010
Vedlikehold
Børre Stenseth, juli 2002
( Velkommen ) XML > Validering >DTD ( Schema )