Summary of Introduction to XML: Syntax and Validation

Introduction to XML: Syntax and Validation for Students

Úvod

DTD (Document Type Definition) je standardní způsob, jak popsat strukturu a pravidla pro XML dokumenty. Tento materiál vysvětlí umístění DTD, základní konstrukce pro deklaraci elementů, atributů a entit, kvantifikátory výskytu a běžné chyby při navrhování DTD. Cílem je poskytnout přehledné a praktické informace vhodné pro univerzitní studium.

Definice: DTD je sada pravidel popisujících povolené elementy, jejich pořadí, atributy a další omezení v XML dokumentu. Používá se k validaci a zajištění konzistence XML dat.

Kde umístit DTD

Možnosti umístění

  • Na začátku dokumentu: DTD napsané přímo v XML souboru, za XML deklarací.
  • Externí soubor: DTD odkazované přes SYSTEM nebo PUBLIC referenci.
  • Kombinace: Vnější DTD s vnořenými lokálními doplňky v dokumentu.

Příklad: DTD v hlavičce dokumentu

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
  <!ELEMENT person (name, profession*)>
  <!ELEMENT name (firstname, surname)>
  <!ELEMENT firstname (#PCDATA)>
  ...
]>
<person>
  ...
</person>

Příklad: externí DTD

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "path/to/file.dtd">
<person>
  ...
</person>
  • Použití SYSTEM pro neveřejné standardy.
  • PUBLIC pro veřejné (sdílené) DTD, např. u formátů jako RSS nebo SVG.

Příklad: kombinace (externí + lokální rozšíření)

<!DOCTYPE person SYSTEM "link.dtd" [
  <!-- lokální doplňky a přepis deklarací -->
  <!-- <!ELEMENT person (name, profession*)> -->
  ...
]>
<person>
  ...
</person>

Deklarace elementů

Základní syntax

  • Obecný tvar: <!ELEMENT element_name (content)>.
  • Obsah může být text (#PCDATA), jiné elementy, nebo kombinace.

Definice: #PCDATA označuje parsovaný text, který může obsahovat entity a bude zpracován XML parserem.

Příklady:

  • Element pouze s textem: <!ELEMENT phone (#PCDATA)> pro <phone>123</phone>
  • Element se dvěma podřízenými elementy: <!ELEMENT name (firstname, surname)>
  • Prázdný element: <!ELEMENT image EMPTY>
  • Libovolný obsah: <!ELEMENT page ANY>

Typy obsahu elementu

  • #PCDATA: parsovaný text bez vnořených elementů.
  • CDATA: neupravená znaková data (neparsované) — vhodné pro vložení kódu (HTML, JavaScript) — v DTD se CDATA většinou objevuje u atributů, nikoliv jako typ elementu.

Kvalifikátory výskytu elementů

  • * — nula nebo více výskytů
  • + — jeden nebo více výskytů
  • ? — žádný nebo právě jeden výskyt
  • bez kvalifikátoru — přesně jednou

Příklad: <!ELEMENT university (building+, address, student*, brewery?)>

  • building+ znamená alespoň jeden element <building>
  • address přesně jeden
  • student* libovolně mnoho nebo žádný
  • brewery? volitelný jeden

Ukázky chybného pořadí / počtu

  • Chybí požadovaný element address: nevalidní.
  • Více adres než povoleno: pokud DTD vyžaduje přesně jeden address, dvě adresy způsobí chybu.
  • Nesprávné pořadí: pořadí prvků je v DTD významné, tzn. <building>, potom <address>, atd.
💡 Věděli jste?Zajímavost: V DTD je pořadí elementů významné a parser považuje jinak uspořádané dokumenty za nevalidní i když logicky dávají smysl.

Atributy: deklarace a typy

Základní tvar

  • Syntaxe: <!ATTLIST element_name attr_name type default_decl>
  • Více atributů elementu lze deklarovat v jedné sekci <!ATTLIST>.

Příklad:

<!ATTLIST img src CDATA #REQUIRED width CDATA #REQUIRED height CDATA #REQUIRED>

Dostupné typy atributů

  • CDATA — obecný text
  • Enumeration — výčet povolených hodnot, např. (january | february | ...)
  • ID — unikátní identifikátor v dokumentu
  • IDREF — odkaz na existující ID
  • IDREFS — více odkazů (oddělené mezerami)
  • NMTOKEN — platné XML jméno bez mezer
  • NMTOKENS — více NMTOKEN hodnot oddělených mezerami
  • ENTITY, NOTATION — speciální typy pro externí entity a notace

Definice: ID je atribut, jehož hodnota musí být unikátní v rámci celého dokumentu a slouží jako primární klíč.

Příklad enumerace

<!ATTLIST date month (january | february | march) "january"> — umožní jen vypsané hodnoty.

Zaregistruj se pro celé shrnutí
FlashcardsKnowledge testSummaryPodcastMindmap
Start for free

Already have an account? Sign in

DTD a deklarace XML

Klíčové pojmy: DTD definuje strukturu XML dokumentu, DTD může být inline, externí nebo kombinovaný, <!ELEMENT> definuje elementy a jejich obsah, #PCDATA znamená parsovaný text, Kvalifikátory: *, +, ? určují počet výskytů, <!ATTLIST> definuje atributy a jejich typy, ID je unikátní hodnota, IDREF odkazuje na ID, Entity umožňují opakované řetězce nebo externí zdroje, Enumerace omezuje atribut na předdefinovaný seznam, NMTOKEN/NMTOKENS pro pojmenované tokeny bez mezer, Externí DTD zvyšuje riziko XXE útoků, Validace nástrojí pomáhá odhalit chyby

## Úvod DTD (Document Type Definition) je standardní způsob, jak popsat strukturu a pravidla pro XML dokumenty. Tento materiál vysvětlí umístění DTD, základní konstrukce pro deklaraci elementů, atributů a entit, kvantifikátory výskytu a běžné chyby při navrhování DTD. Cílem je poskytnout přehledné a praktické informace vhodné pro univerzitní studium. > Definice: DTD je sada pravidel popisujících povolené elementy, jejich pořadí, atributy a další omezení v XML dokumentu. Používá se k validaci a zajištění konzistence XML dat. ## Kde umístit DTD ### Možnosti umístění - **Na začátku dokumentu**: DTD napsané přímo v XML souboru, za XML deklarací. - **Externí soubor**: DTD odkazované přes SYSTEM nebo PUBLIC referenci. - **Kombinace**: Vnější DTD s vnořenými lokálními doplňky v dokumentu. ### Příklad: DTD v hlavičce dokumentu ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE person [ <!ELEMENT person (name, profession*)> <!ELEMENT name (firstname, surname)> <!ELEMENT firstname (#PCDATA)> ... ]> <person> ... </person> ``` ### Příklad: externí DTD ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE person SYSTEM "path/to/file.dtd"> <person> ... </person> ``` - Použití SYSTEM pro neveřejné standardy. - PUBLIC pro veřejné (sdílené) DTD, např. u formátů jako RSS nebo SVG. ### Příklad: kombinace (externí + lokální rozšíření) ```xml <!DOCTYPE person SYSTEM "link.dtd" [ <!-- lokální doplňky a přepis deklarací --> <!-- <!ELEMENT person (name, profession*)> --> ... ]> <person> ... </person> ``` ## Deklarace elementů ### Základní syntax - Obecný tvar: <!ELEMENT element_name (content)>. - Obsah může být text (#PCDATA), jiné elementy, nebo kombinace. > Definice: #PCDATA označuje parsovaný text, který může obsahovat entity a bude zpracován XML parserem. Příklady: - Element pouze s textem: <!ELEMENT phone (#PCDATA)> pro <phone>123</phone> - Element se dvěma podřízenými elementy: <!ELEMENT name (firstname, surname)> - Prázdný element: <!ELEMENT image EMPTY> - Libovolný obsah: <!ELEMENT page ANY> ### Typy obsahu elementu - **#PCDATA**: parsovaný text bez vnořených elementů. - **CDATA**: neupravená znaková data (neparsované) — vhodné pro vložení kódu (HTML, JavaScript) — v DTD se CDATA většinou objevuje u atributů, nikoliv jako typ elementu. ## Kvalifikátory výskytu elementů - `*` — nula nebo více výskytů - `+` — jeden nebo více výskytů - `?` — žádný nebo právě jeden výskyt - bez kvalifikátoru — přesně jednou Příklad: <!ELEMENT university (building+, address, student*, brewery?)> - building+ znamená alespoň jeden element <building> - address přesně jeden - student* libovolně mnoho nebo žádný - brewery? volitelný jeden ### Ukázky chybného pořadí / počtu - Chybí požadovaný element address: nevalidní. - Více adres než povoleno: pokud DTD vyžaduje přesně jeden address, dvě adresy způsobí chybu. - Nesprávné pořadí: pořadí prvků je v DTD významné, tzn. <building>, potom <address>, atd. Zajímavost: V DTD je pořadí elementů významné a parser považuje jinak uspořádané dokumenty za nevalidní i když logicky dávají smysl. ## Atributy: deklarace a typy ### Základní tvar - Syntaxe: <!ATTLIST element_name attr_name type default_decl> - Více atributů elementu lze deklarovat v jedné sekci <!ATTLIST>. Příklad: <!ATTLIST img src CDATA #REQUIRED width CDATA #REQUIRED height CDATA #REQUIRED> ### Dostupné typy atributů - CDATA — obecný text - Enumeration — výčet povolených hodnot, např. (january | february | ...) - ID — unikátní identifikátor v dokumentu - IDREF — odkaz na existující ID - IDREFS — více odkazů (oddělené mezerami) - NMTOKEN — platné XML jméno bez mezer - NMTOKENS — více NMTOKEN hodnot oddělených mezerami - ENTITY, NOTATION — speciální typy pro externí entity a notace > Definice: ID je atribut, jehož hodnota musí být unikátní v rámci celého dokumentu a slouží jako primární klíč. ### Příklad enumerace <!ATTLIST date month (january | february | march) "january"> — umožní jen vypsané hodnoty. ###