Как проверить XML с помощью SAX?

Как API-интерфейсы SAX проверяют XML на соответствие схеме/DTD?

Насколько я понимаю, API-интерфейсы SAX читают 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#Недостатки - person Pascal Thivent; 10.10.2009
comment
@Pascal, ссылка выше говорит, что для проверки отношения ID/IDREF потребуется хранить в памяти только полный список идентификаторов и IDREF, но не весь документ. - person Andrey Adamovich; 11.10.2009