У вас, кажется, ложное противоречие в вашем вопросе. Рассмотрим эту цитату, которую вы цитируете:
Практически любая проверка XML требует доступа к документу в полном объеме.
Вы говорите:
Я нахожу, что трудно поверить ...
Мое чтение: вы сомневаетесь, что вам нужно, чтобы получить доступ к документу в полном объеме -> вы считаете, что это возможно для проверки без полного документа в памяти.
И тогда вы спросите:
Есть ли способ, чтобы проверить против XSD в Java без использования SAX парсер?
Либо это две несвязанные вещи, либо я не вижу противоречия. Как проверить ... без использования синтаксического анализатора SAX, связанного с проверить без полного документа в памяти? Анализаторы SAX часто используются для синтаксического анализа XML низкого уровня, после чего создается полный документ DOM на основе событий SAX. Я не вижу смысла избегать анализатора SAX, зачем вам?
Я думаю, что вы действительно просят есть, если то, что статья Википедии говорит, правда, если вы действительно нужен весь документ в памяти.
Здесь есть два аспекта: теоретические и практические.
Теоретически я бы сказал, что в большинстве случаев на самом деле не требуется весь документ в памяти. Большинство вещей можно проверить с помощью государственных машин (или что-то подобное) и проверки литералов.
Я думаю (но не уверен на 100%), что могут быть случаи, когда вам нужно сохранить весь (или почти весь документ) в памяти.Например, с XSD 1.1. альтернативы Я могу представить себе случай, когда действительность первого элемента N-1 зависит от последнего N-го подэлемента. Возможно, вам нужно сохранить все N в памяти.
Или этот случай с ID
/IDREF
. Я согласен с Майклом Кей, на самом деле достаточно только сохранить идентификаторы, но эти идентификаторы могут составлять (почти) весь документ в маргинальном случае.
Практически я полагаю, что гораздо проще работать с документом в памяти, чем проверять поток событий SAX или StAX.
Ложное противоречие проистекает из беспорядка статьи из Википедии: статья посвящена SAX, и эта фраза взята из раздела под названием «Недостатки». Как я вижу это, статья подразумевает, что для всей проверки требуется документ полностью, но SAX не обрабатывает документ полностью, поэтому SAX является неэффективным инструментом для проверки. Однако это противоречит широко распространенному использованию для проверки XSD - это противоречие, которое я пытаюсь решить. –
@RichardJPLeGuen Широкое использование SAX для проверки XSD? В самом деле? Любой источник для этого? SAX обычно используется только для синтаксического анализа XML с низким уровнем среднего уровня. Затем создается и проверяется некоторая модель документа. Я никогда не слышал о проверке SAX-only XSD. – lexicore
Прошло два года, но в то время я работал с некоторыми материалами XSD и продолжал искать себя в SAX. И из вопроса - «например, [javax.xml.validation.Validator] (https: // docs .oracle.com/javase/7/docs/api/javax/xml/validation/Validator.html) исключает исключения SAX по всему месту. " –