DTD

A Wikipédiából, a szabad enciklopédiából

A dokumentumtípus-definíció (DTD, angolul Document Type Definition) olyan jelölési előírások halmaza, amely egy SGML-típusú jelölőnyelvhez (SGML, XML, HTML) határoz meg dokumentumtípust.

A DTD tömör formális szintaxist alkalmaz, amely pontosan megmutatja, mely elemek hol fordulhatnak elő az adott típusú dokumentumban, és hogy az elemeknek milyen tartalmuk és tulajdonságaik lehetnek. A DTD-ben egyedeket is deklarálhatunk, amelyek felhasználhatók a dokumentum példányaiban.

Az XML az SGML DTD egy részhalmazát használja.

A DTD-t nagyban túlhaladják az újabb, XML névtereket támogató nyelvek, például a W3C XML Schema vagy az ISO RELAX NG. A DTD-t azonban továbbra is használják, ha olyan speciális karakterekre van szükség, mint az XML és HTML karakter-entitások, amelyek az ISO SGML szabvány által meghatározott nagyobb halmazokból származnak.

DTD társítása dokumentumokhoz[szerkesztés | forrásszöveg szerkesztése]

DTD deklarálására két mód áll rendelkezésre: belső vagy külső. A belső deklaráció ugyanabban a fájlban van, amelyben maga a dokumentum. A külső DTD külön fájlban tárolódik.

A külső DTD társítása XML vagy SGML dokumentumhoz dokumentumtípus-deklaráció útján történik. A dokumentumtípus-deklaráció a doctypedecl kódrészletben szerepel az XML dokumentum elején.[1] A deklarációból derül ki, hogy a dokumentum a hivatkozott DTD által definiált típus egy példánya. A külső hivatkozáshoz a PUBLIC vagy a SYSTEM kulcsszó társul. A külső hivatkozást a dokumentumokat feldolgozó programoknak nem mindig kell feldolgozniuk.

Ha ellenőrző funkciójú feldolgozóprogramot használunk, lehet, hogy az elemzőprogramra nincs is szükség, hogy a dokumentumot a DTD-vel összevesse. Ha a dokumentum önmagában állhat, akkor ezt a deklarációjának is tükröznie kell. A deklarációban a standalone paraméter szolgál arra, hogy megmutassa, "egyedülálló", külön dokumentumról van-e szó.

Példák[szerkesztés | forrásszöveg szerkesztése]

Az alábbi példában a dokumentumtípus-deklaráció public és system azonosítót is tartalmaz.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Minden HTML 4.1-esdokumentum megfelel három SGML DTD egyikének, melyek publikus azonosítói állandók:

E DTD-k system azonosítói - ha szerepelnek a dokumentumtípus-deklarációban - URI-hivatkozás formájában jelennek meg. A system azonosító általában egy bizonyos, feloldható helyen lévő deklarációhalmazra mutat. Az SGML lehetővé teszi a publikus és a system azonosítók egymáshoz rendelését. E katalógusokat felhasználhatják a dokumentum-feldolgozó szoftverek az URI hivatkozások feloldására.

Az XML szintaxisnak megfelelő dokumentumokban a dokumentumtípus-deklaráció az opcionális XML-deklaráció után, a dokumentum törzse előtt jelenhet meg.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- az XHTML dokumentumtörzs itt kezdődik -->
<html>
 ...
</html>

A külső definíció után következhet belső DTD-deklaráció is.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
  <!-- ide lehet beszúrni a belső DTD-t -->
]>
<!-- az XHTML dokumentumtörzs itt kezdődik -->
<html>
 ...
</html>

Használhatunk kizárólag belső DTD-t is.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html [
  <!-- ide lehet beszúrni a belső DTD-t -->
]>
<!-- az XHTML dokumentumtörzs itt kezdődik -->
<html>
 ...
</html>

Előfordulhat, hogy a dokumentum egyáltalán nem tartalmaz definíciót. Ebben az esetben csak azt határozzuk meg, hogy a dokumentumnak van egyetlen legfelső szintű eleme, és megadjuk e gyökérelem típusnevét. A gyökérelem léte az érvényes XML és HTML dokumentumokkal szemben implicit követelmény, a dokumentumtöredékekkel, és az összes SGML dokumentummal szemben - amelyeknél a legfelső szintű elem különbözhet az implikált gyökérelemtől - azonban nem.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<!-- az XHTML dokumentumtörzs itt kezdődik -->
<html>
 ...
</html>

A DTD-k szerkezete[szerkesztés | forrásszöveg szerkesztése]

Egy DTD a hozzá tartozó dokumentum szerkezetének formális szabályait írja le. Felsorolja a dokumentumban használható elemeket, attribútumokat és egyedeket, továbbá azt is megmutatja, hogy miként használhatjuk őket egymással összefüggésben.[2]

Elemek (ELEMENT)[szerkesztés | forrásszöveg szerkesztése]

Az elem típusú deklaráció egy elemet és annak lehetséges tartalmát definiálja. Az érvényes XML-dokumentumok csak a DTD-ben definiált elemeket tartalmazhatják.

<!ELEMENT konyv (szerzo, cim, alcim*, kiado, (fogy_ar|elfogyott)?, ISBN?, iranyitoszam?, leiras?, kulcsszo*)>
<!ELEMENT kulcsszo (#PCDATA)>
<!ELEMENT leiras (#PCDATA|bevezeto|torzs)*>

Az előforduló fontosabb struktúrák és kulcsszavak a következők:

  • szekvencia: zárójeleken belül elemnevek rendezetlen listája vesszőkkel elválasztva.
  • szelekció: csővonallal (|) elválasztott elemnevek között logikai kizáró vagy kapcsolat áll fenn.
  • szöveges tartalom: az előzőektől eltérően az elem nem csak újabb elemeket, hanem konkrét adatokat tartalmaz.
    • feldolgozott karakteres adatok (parsed character data): karakterekből álló adatok, melyeket a feldolgozóprogram fel is dolgoz, ezért a kitüntetett karaktereket helyettesíteni kell a nekik megfelelő karakteregyedekkel. Jelölés: (#PCDATA)
    • vegyes tartalom: az elem vagy karakteres adatokat, vagy elemet tartalmaz. A tartalmi rész első eleme a #PCDATA kulcsszó, maga a tartalom pedig kötelező választási lehetőségek listája csővonalakkal elválasztva. A lista végén lévő * karakter azt jelöli, hogy az elemből nulla vagy több példány fordulhat elő a dokumentumban.
  • ismétlődés: egy karakter, amely azt a tételt követi, amelyre vonatkozik. Meghatározza, hogy az adott tétel hányszor fordulhat elő egymás után az elem meghatározott pontján.
    • nincs szimbólum: az tétel pontosan egyszer szerepel
    • + az adat legalább egyszer szerepel
    • * az adat egyszer, többször, vagy egyszer sem fordul elő
    • ? az adat egyszer vagy egyszer sem jelenik meg
  • EMPTY: az elemnek egyáltalán nem lehet tartalma, még szöveg sem.
  • ANY: az elem bármilyen tartalmat megenged korlátozás nélkül. Bármennyi gyermek-eleme lehet, beleértve a szöveges tartalmat is.

Attribútumok[szerkesztés | forrásszöveg szerkesztése]

AZ elemekhez attribútumokat lehet társítani. Az attribútumok listájában felsoroljuk az adott elemhez tartozó összes lehetséges attribútumot. Minden attribútumnak van:

  • neve,
  • adattípusa (vagy a lehetséges értékek felsorolása),
  • és alapértelmezett értéke.[3]

Példa:

<!ATTLIST img
   src    CDATA          #REQUIRED
   id     ID             #IMPLIED
   sort   CDATA          #FIXED "true"
   print  (yes | no) "yes"
>

Attribútumok lehetséges típusai[szerkesztés | forrásszöveg szerkesztése]

CDATA
Karakteres adatot tartalmazó típus, benne bármilyen szöveges tartalom lehet. Az elemzőprogram ezt az adattípust nem dolgozza fel, változatlanul átengedi.
ID
Egyedi azonosító, amely az aktuális elemre mutató horgonyt definiál.
IDREF vagy IDREFS
Referencia egy ID-re, amelynek deklarációja a DTD-ben máshol szerepel. Attribútum állhat egyetlen ID-ből, vagy több ID szóközökkel elválasztott listájából - ezt a választást jelöljük a kulcsszó kétféle alakjával.
NMTOKEN vagy NMTOKENS
Az attribútum értéke szó vagy lexikális elem (ún. token). Lehet egyelemű, vagy szóközökkel elválasztott lista, mint az előbb.
ENTITY vagy ENTITIES
Az attribútum értéke egy entitás neve, amelyet a DTD egy más pontján deklaráltunk. A HTML-elemzők ezt a típust nem támogatják, viszont SGML-ben és XML 1.0-ban vagy 1.1-ben (így XHTML-ben, SVG-ben) érvényes.
NOTATION
Értéke egy - a DTD-n belül másutt definiált - notation típusú adat.
Felsorolás
Lehetséges értékek listája (zárójelet között, csővonal karakterrel elválasztva). A konkrét érték a a lista valamelyik eleme.

Attribútumok lehetséges alapértelmezett értékei[szerkesztés | forrásszöveg szerkesztése]

#REQUIRED
Ha egy elemnek ilyen attribútuma van, akkor annak mindenképpen rendelkeznie kell értékkel.
#IMPLIED
Az attribútumnak nem feltétlenül kell értékkel rendelkeznie.
#FIXED érték
Az attribútumnak fix értéke van. Ha az elem megadásánál ez az attribútum nem szerepel, akkor is hozzárendelődik ez az érték.
Alapértelmezett érték
Ha az elem felhasználásakor ez az attribútum nem szerepel, akkor értéke a megadott alapértelmezett érték lesz.

Egyedek (entitások)[szerkesztés | forrásszöveg szerkesztése]

Egyed deklarálásakor a dokumentum komponenseit egyedi névvel látjuk el, és egy értéket társítunk hozzájuk, amely a dokumentum egészében elérhető. Leggyakrabban arra használjuk, hogy egy billentyűzettel be nem gépelhető karakternek könnyen olvasható nevet, vagy gyakran szereplő komponenseknek könnyen használható rövidítést adjunk.[4] Az egyedeknek kétféle típusa van: belső (az egyed definíciója a dokumentumon belül található) és külső (az egyed definíciója külön fájlban van). Az egyed felhasználásakor neve elé és-jelet (&), mögé pontosvesszőt (;) írunk.

Belső egyedek[szerkesztés | forrásszöveg szerkesztése]

Megadásuk: <!ENTITY név definíció>

Esetükben a az egyednek és tartalmának definíciója egyaránt a DTD-ben szerepel. Ha a dokumentumban valahol hivatkozunk az egyedre, akkor a hivatkozás behelyettesítődik az egyed tartalmával.

<!ENTITY me "Miki Egér">

Külső egyedek[szerkesztés | forrásszöveg szerkesztése]

A külső egyedek külön fájlban találhatók. A DTD-ben az egyedeket tartalmazó fájlra mutató hivatkozást helyezünk el. A hivatkozást minősíthetjük a SYSTEM vagy a PUBLIC kulcsszóval. Előbbi azt jelenti, hogy az egyedet egy bizonyos szervezet vagy egyéni felhasználó adta meg. Az utóbbit akkor használjuk, ha az egyedet szabványkészítő testület hozta létre vagy széles körben van rá szükség; ekkor egy rendszerfüggetlen karaktersort is beszúrunk az URI elé.

Megadásuk:
<!ENTITY név SYSTEM "URI">
<!ENTITY név PUBLIC "publikus_azonosító" "URI">

<!ENTITY pl SYSTEM "./kulso.dtd">


<!ENTITY c PUBLIC "-//W3C//TEXT copyright//EN"
    "http://www.w3.org/xmlspec/copyright.xml">

Elképzelhető, hogy az egyed fel nem dolgozandó adatra mutat, ilyenkor a deklaráció kiegészül az NDATA kulcsszóval, ami az egyedet egy NOTATION-nel kapcsolja össze.

Megadásuk:
<!ENTITY név SYSTEM "URI" NDATA notation_neve>
<!ENTITY név PUBLIC "publikus_azonosító" "URI" NDATA notation_neve>

<!ENTITY logo SYSTEM "http://www.pelda.net/logo.png" NDATA png>


<!ENTITY logo PUBLIC  "-//W3C//GIF logo//EN"
    "http://www.w3.org/logo.gif" NDATA gif>

A NOTATION deklaráció[szerkesztés | forrásszöveg szerkesztése]

SGML vagy XML dokumentumokban szerepelhet. Amikor egy entitás nem feldolgozott adatot tartalmaz, akkor a feldolgozóprogramnak fel kell ismernie, hogy miként ágyazza azt be a dokumentumokba. A NOTATION deklaráció rendszerint az adatokat feldolgozó alkalmazást adja meg.

Így lehet annotálni az SVG file-okat annak érdekében, hogy a megfelelő megjelenítővel társítsuk őket:

<!NOTATION type-image-svg SYSTEM "image/svg">

Lásd még[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. doctypedecl. Extensible Markup Language (XML) 1.1. W3C
  2. Bates, Chris. XML - Elmélet és gyakorlat. Panem. ISBN 963 545 393 0 (2004) 
  3. http://www.stylusstudio.com/w3c/xml11/attdecls.htm#attdecls
  4. http://www.w3schools.com/dtd/dtd_entities.asp

További információk[szerkesztés | forrásszöveg szerkesztése]

Fordítás[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a Document Type Definition című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.