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.
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.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