Как да валидирам XML с помощта на SAX?

Как SAX API-ите валидират XML спрямо схема/DTD?

Разбирам, че SAX API-ите четат XML документ част по част и не съхраняват прочетените преди това части в паметта. Така че не ми е ясно как API може да потвърди документа, без да го пази в паметта. ??


person Marcus Leon    schedule 10.10.2009    source източник


Отговори (1)


Не е необходимо да съхранявате цялото XML дърво в паметта, за да го валидирате. Само онези части, които са валидирани в момента, трябва да бъдат в паметта. Например, ако трябва да потвърдите структура като този root/child*/property*, тогава всъщност са необходими само връзките дете-родител, за да бъдат проверени и следователно трябва да съхраним само предишния елемент, за да проверим това. Разбира се, ако структурата е по-сложна, повече памет ще се използва за проверка на сложни ограничения.

person Andrey Adamovich    schedule 10.10.2009
comment
Някои видове XML валидиране изискват пълен достъп до документа, както е обяснено в страницата Недостатъци на SAX в Уикипедия: en.wikipedia.org/wiki/Simple_API_for_XML#Drawbacks - person Pascal Thivent; 10.10.2009
comment
@Pascal, връзката по-горе казва, че валидирането на връзката ID/IDREF ще изисква само пълният списък с идентификатори и IDREF да се съхранява в паметта, но не и пълният документ. - person Andrey Adamovich; 11.10.2009