piatok 17. júna 2011

Validácia subdokumentu zmenou DOCTYPE

Mylná predstava, obzvlášť medzi menej skúsenými XML vývojármi, je, že ak zadáte DOCTYPE pre súbor údajov, musíte ho vždy používať, aj keď pracujete s podmnožinu dokumentu. To často vedie k extrakcii časti dokumentu, následne pridaniu obaľovača, ktorý zodpovedá DOCTYPE. Iní si radšej napíšu nové DTD, aby spracovali časť dokumentu.

Nemusíte si takto zbytočne komplikovať život. Nezabudnite, že deklarácia DOCTYPE pomenúva koreňový element a poukazuje na súvisiace DTD. Kľúčom je, že to ukazuje na koreňový prvok dokumentu, nie na prvý prvok definovaný v DTD.

Napríklad, DTD pre časopis môže definovať model obsahu takto:

<!ELEMENT journal (front, article+, appendix) >

Takže DOCTYPE pre celý súbor údajov by vyzeral takto:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE journal SYSTEM "journal.dtd" >

Avšak zákazníkovi chcete poslať len jeden článok. Zákazník chce mať možnosť overiť si, že článok je validný oproti DTD. Vôbec nemusíte meniť DTD alebo pridať obaľovač na článok. stačí zmeniť DOCTYPE z "journal" na "article".

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article SYSTEM "journal.dtd" >

Takto je použité rovnaké DTD, ale len tie prvky, ktoré spadajú do daného DOCTYPE. Ostatné bude ignorované. To platí i v prípade, že vnoríte DOCTYPE do DTD, stále môžete špecifikovať konkrétny prvok, od ktorého sa má začať parsovanie.