Definirea tipului de document

O definiție tip de document ( limba engleză Document Type Definition ), prescurtat DTD , este un set de reguli, este utilizat pentru a declara documentele de un anumit tip. Un tip de document este o clasă de documente similare, cum ar fi agende telefonice sau înregistrări de date de inventar. Definiția tipului de document constă din tipuri de elemente, atribute ale elementelor, entități și notații. În termeni concreți, aceasta înseamnă că ordinea, cuibărirea elementelor și tipul de conținut al atributelor sunt specificate într-un DTD, adică structura documentului.

O DTD specifică sintaxa unei aplicații SGML sau XML, cum ar fi limbile HTML sau XHTML derivate din acestea . Această sintaxă este de obicei păstrată într-o formă mai puțin generală decât sintaxa SGML sau XML.

funcţie

Sintaxa și semantica unui DTD fac parte din SGML și XML caietul de sarcini. DTD-ul este verificat la citirea documentului. În SGML, fiecărui document trebuie să i se atribuie o DTD. Această mapare este opțională în XML. Un document bazat pe DTD ( <?xml version="1.0"?><!DOCTYPE ...>) garantează corectitudinea DTD aplicat, adică sintaxa și semantica intenționate. Accentul se pune aici pe corectitudinea datelor. Un document fără un DTD cu referință externă sau un DTD inclus este verificat pentru a fi bine format doar atunci când este citit. Accentul se pune aici pe lizibilitatea rapidă. Conținutul poate diferi de sintaxa și semantica dorite. În ambele cazuri, calitatea datelor poate fi verificată retrospectiv folosind procese suplimentare.

Notă : În cele ce urmează, exemplele sunt date în sintaxă XML.

Declarație de tip document (DOCTYPE)

O declarație de tip document stabilește conexiunea dintre un document și DTD. Declarația de tip document este dată la începutul unui document înainte de elementul rădăcină. DTD poate fi menționat ca un fișier extern (DTD extern) sau integrat direct în document (DTD intern).

Sintaxa pentru o declarație de tip document în SGML și XML este:

<!DOCTYPE Wurzelelement SYSTEM "datei.dtd">
<!DOCTYPE Wurzelelement SYSTEM "datei.dtd" [ … ]>
<!DOCTYPE Wurzelelement PUBLIC "Public Identifier" "datei.dtd">
<!DOCTYPE Wurzelelement PUBLIC "Public Identifier" "datei.dtd" [ … ]>
<!DOCTYPE Wurzelelement [ … ]>

În SGML, următoarele variante sunt permise și fără un identificator de sistem:

<!DOCTYPE Wurzelelement PUBLIC "Public Identifier">
<!DOCTYPE Wurzelelement PUBLIC "Public Identifier" [ … ]>

Deși nu mai există un DTD în HTML5 , declarația de tip document încă există într-o formă scurtată:

<!DOCTYPE html>

Identificatorul de sistem (SYSTEM), în exemplul de intrare datei.dtd, conține numele fișierului DTD extern. Numele fișierului poate fi specificat ca orice URI .

Identificatorul public (PUBLIC) conține un identificator cunoscut public pentru DTD. De exemplu, identificatorul este "-//W3C//DTD XHTML 1.0 Strict//EN"utilizat pentru a declara în mod unic DTD pentru XHTML . Dacă identificatorul este cunoscut de sistem, sistemul utilizează DTD-ul asociat și nu încarcă DTD-ul specificat direct din identificatorul de sistem. Acest lucru evită încărcarea repetată a DTD în browserele web .

Intrarea [ ... ]identifică o DTD internă sau adăugiri la o DTD.

Declarații de marcare

În cadrul unei DTD, structura documentului poate fi definită cu declarații de tipuri de elemente , liste de atribute , entități și notații și blocuri de text. Se pot utiliza entități de parametri speciali care conțin părți DTD și sunt permise numai în cadrul DTD.

Blocurile de text sunt fie CDATA, fie PCDATA .

Elementele structurale (blocuri de construcție) sunt definite folosind atribuiri de atribute:

CDATA

CDATA ( English Character Data ) identifică un bloc de text neparsat. Sintaxa pentru o zonă CDATA este:

<![CDATA[Zeichendaten]]>

În zona de date a caracterelor, toate caracterele sunt permise, cu excepția modelului de recunoaștere pentru sfârșitul ]]>zonei CDATA. Exemplu:

<![CDATA[<Diese><Daten>werden<nicht><geparst>.]]>

În cadrul unei definiții a entității în XML, sintaxa este:

<!ENTITY amp "Zeichendaten">

În SGML, cuvântul cheie CDATA trebuie specificat în mod explicit:

<!ENTITY amp CDATA "Zeichendaten">

În zona datelor caracterelor, toate caracterele sunt permise, cu excepția șirului de identificare final "în "..."-Zeichenketten sau 'la '...'-Zeichenketten. Exemplu:

<!ENTITY amp CDATA "&#38;">

Datele despre caracter &#38;nu sunt analizate de analizor.

PCDATA

Cuvântul cheie #PCDATA este utilizat pentru PCDATA ( English Parsed Character Data ) . Aceasta marchează un bloc de text care poate conține, de asemenea, instrucțiuni suplimentare pentru analizor. Conținutul acestui bloc de text este analizat sintactic de către analizor. Spre deosebire de CDATA, pot fi incluse numai caracterele care nu introduc etichete, declarații sau instrucțiuni de procesare. Aici, de exemplu, sunt interzise (de exemplu, caracterele inițiale ale unei zile, de exemplu ). <<Beispiel>

Declarații de element (ELEMENT)

O declarație de tip element este utilizată pentru a defini un element și conținutul său posibil. Numai elementele definite în DTD pot apărea într-un document valid.

Conținutul unui element poate fi specificat prin specificarea altor nume de elemente și a unor cuvinte cheie și caractere.

  • #PCDATApentru conținutul caracterelor (vezi PCDATA )
  • EMPTY fără conținut
  • ANY pentru orice conținut
  • , pentru comenzi
  • | pentru alternative (în sensul „fie ... fie”)
  • () pentru grupare
  • * pentru câte ori doriți (unul după altul)
  • + măcar o dată
  • ? pentru nici una sau exact o dată
  • Dacă nu este dat un asterisc, semnul plus sau semnul întrebării, elementul trebuie să apară exact o dată
<!ELEMENT html (head, body)>
<!ELEMENT hr EMPTY>
<!ELEMENT div (#PCDATA | p | ul | ol | dl | table | pre | hr |
          h1|h2|h3|h4|h5|h6 | blockquote | address | fieldset)*>
<!ELEMENT dl (dt|dd)+>

Declarații de atribute (ATTLIST)

Atributele sunt <!ATTLIST Elementname Attributliste>definite într-o listă de atribute . Lista de atribute conține numele atributului , tipul și specificațiile atributelor individuale, separate prin spații sau întreruperi de linie .

Exemple de elemente:

  • ID
  • IDREF și IDREFS
  • NMTOKEN și NMTOKENS
  • NOTAȚIE și NOTAȚII
  • Liste și liste de NOTAȚII

Specificațiile atributului pot fi utilizate pentru a specifica dacă un atribut trebuie să apară ( #REQUIRED) sau nu ( #IMPLIED) sau dacă acesta conține o valoare fixă ​​( #FIXED) și care valoare este utilizată ca valoare implicită dacă atributul nu este specificat pentru o etichetă.

Valori implicite pentru atribute
#REQUIRED Atributul trebuie specificat
#IMPLIED Atributul este opțional
"..." Valoare implicită dacă atributul este omis
#FIXED "..." Atributul are întotdeauna o valoare fixă

Exemplu de declarație de atribut:

<!ATTLIST img
   id     ID       #IMPLIED
   src    CDATA    #REQUIRED
   alt    CDATA    #REQUIRED
   ismap  IDREF    #IMPLIED
>

Declarații de entitate (ENTITY)

O entitate este o abreviere denumită pentru un șir de caractere sau un document extern care poate fi utilizat în cadrul DTD sau al documentului. O entitate a formularului &Name;este înlocuită de conținutul declarat al entității . (Pentru utilizare generală, consultați Entitate (limbaj de marcare) .)

Entitățile sunt alcătuite din șiruri. Acestea pot conține ele însele entități și marcaje bine formate:

<!ENTITY name "Benedikt">
<!ENTITY papst "&name;, der XVI.">
<!ENTITY wplink "<a href='http://de.wikipedia.org'>Wikipedia</a>">

Entitățile pot fi definite și pentru conținutul unui fișier. Pentru aceasta se folosește un identificator public sau de sistem .

<!ENTITY kapitel1 SYSTEM "kapitel1.xml">
<!ENTITY wichtig PUBLIC "-//privat//WICHTIG//" "wichtig.xml">

În cazul entităților externe , se poate specifica, de asemenea, că este o entitate neparsată (date NDATA, non-XML / SGML). În acest caz trebuie notată (aici "gif").

<!ENTITY bild SYSTEM "../grafiken/bild.gif" NDATA gif>

Declarații de notare (NOTARE)

Notările sunt note privind interpretarea datelor externe care nu sunt prelucrate direct de către analizor. De exemplu, notațiile se pot referi la un format de fișier pentru imagini.

<!NOTATION Datentyp SYSTEM "URL">
<!NOTATION Datentyp PUBLIC "Identifikator">

NMTOKEN

NMTOKEN ( nume token ) este legat de un identificator, dar este mai permisiv cu regulile de denumire. De exemplu, pentru un NMTOKEN sunt permise identificatorii cu o cifră sau o perioadă de început, în timp ce pentru un identificator sunt permise numai litere, ideograme și sublinieri . Astfel, fiecare identificator este, de asemenea, un NMTOKEN, dar nu invers.
Exemple pentru NMTOKEN:

12alpha
.crc

Exemplu de declarație:

<!ATTLIST birthdate
    year NMTOKEN #REQUIRED
>

Entitate parametru

Entitățile parametrilor conțin un șir de caractere numit care poate fi utilizat %Name;în aproape toate locurile dintr-un DTD. În acest fel, de exemplu, fișierele externe pot fi integrate într-o DTD și componentele care apar în mod repetat pot fi abreviate. Entitățile parametrilor sunt declarate ca entități normale , cu un singur semn procentual în fața numelui elementului . Exemplu:

<!ENTITY % datei SYSTEM "andere-datei.ent">
%datei;

<!ENTITY % foo.inhalt "(bar|doz)*">
<!ELEMENT foo %foo.inhalt;>

Secțiuni condiționate

O secțiune condițională este o construcție utilizată pentru activarea sau dezactivarea declarațiilor. Exemplu:

<![INCLUDE[
  <!ENTITY hallo "welt">
]]>

Activează declarația de hallo. Următoarele se aplică în consecință:

<![IGNORE[
  <!ENTITY hallo "welt">
]]>

a halloopri.

Cu toate acestea, la fel ca mai sus, secțiunile condiționale nu sunt utilizate singure, ci mai ales împreună cu entitățile parametrilor:

<!ENTITY % weiche "INCLUDE">
<![%weiche;[
  <!ENTITY hallo "welt">
]]>

Entitatea parametru %weiche;este ocupată de unul dintre posibilele cuvinte cheie INCLUDEsau IGNORE. În funcție de cesiune, entitatea este hallodeclarată sau nu.

Cu acest tip de notație, o secțiune condițională poate fi adaptată prin suprascrierea entităților parametrilor.

Exemplu de scurt document cu referire la un DTD extern:

<?xml version="1.0"?>
<!DOCTYPE hallo SYSTEM "hallo.dtd">
<hallo>Hallo Welt!</hallo>

În exemplu, pseudo- standalone="no"atributul poate fi specificat și în declarația XML (adică este necesară o DTD externă):

<?xml version="1.0" standalone="no"?>
<!DOCTYPE hallo SYSTEM "hallo.dtd">
<hallo>Hallo Welt!</hallo>

Conținutul hallo.dtd:

<!ELEMENT hallo (#PCDATA)>

Document scurt cu DTD intern:

<?xml version="1.0"?>
<!DOCTYPE hallo [<!ELEMENT hallo (#PCDATA)>]>
<hallo>Hallo Welt!</hallo>

În exemplu, pseudo- standalone="yes"atributul poate fi specificat și în declarația XML (adică nu este necesară o DTD externă):

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE hallo [<!ELEMENT hallo (#PCDATA)>]>
<hallo>Hallo Welt!</hallo>

Vezi si

Link-uri web