Что означает "автономная" директива в XML?

Что означает директива 'standalone' в документе XML?

Ответ 1

Объявление standalone - это способ сообщить синтаксическому анализатору игнорировать любые объявления разметки в DTA . Затем DTD используется только для проверки.

В качестве примера рассмотрим смиренный тег <img>. Если вы посмотрите на XHTML 1.0 DTD, вы увидите объявление разметки, в котором говорится, что теги <img> должны быть ПУСТОЙ и иметь src и alt. Когда браузер просматривает документ XHTML 1.0 и находит тег <img>, он должен заметить, что DTD требует атрибутов src и alt и добавлять их, если они не присутствуют. Он также будет закрывать тег <img>, поскольку он должен быть ПУСТОЙ. Это то, что спецификация XML означает, что "объявления разметки могут влиять на содержимое документа" . Затем вы можете использовать объявление standalone, чтобы сказать синтаксическому анализатору игнорировать эти правила.

Независимо от того, действительно ли ваш парсер это делает, это еще один вопрос, но совместимый с требованиями к стандартам парсер (например, браузер) должен.

Обратите внимание: если вы не укажете DTD, то автономная декларация "не имеет смысла" , поэтому нет причин использовать ее, если вы также не укажете DTD.

Ответ 2

  • Автономная директива является необязательным атрибутом в декларации XML.
  • Допустимые значения: yes и no, где no является значением по умолчанию.
  • Атрибут имеет значение только при использовании DTD. (Атрибут не имеет значения при использовании схемы вместо DTD.)
  • standalone="yes" означает, что процессор XML должен использовать DTD только для проверки. В этом случае он не будет использоваться для:
    • значения по умолчанию для атрибутов
    • декларации объекта
    • нормализация
  • Обратите внимание, что standalone="yes" может добавить ограничения достоверности, если документ использует внешнее DTD. Когда документ содержит вещи, которые требуют модификации XML, такие как значения по умолчанию для атрибутов, и используется standalone="yes" , тогда документ недопустим.
  • standalone="yes" может помочь оптимизировать производительность обработки документов.

Источник: Автономный псевдоатрибут релевантен, только если используется DTD

Ответ 3

standalone описывает, зависит ли текущий документ XML от внешнего объявления разметки.

W3C описывает свою цель в "Расширяемый язык разметки (XML) 1.0 (пятое издание)":

Ответ 4

Объявления разметки могут влиять на содержание документа, прошедшего от процессора XML до выражение; примерами являются атрибуты объявления по умолчанию и сущности. отдельная декларация документа, которая может отображаться как компонент XML декларация, сигналы независимо от того, есть такие заявления, которые внешний вид объекта документа или в объектах параметров. [Определение: Внешняя декларация разметки определенная как объявление разметки возникающих во внешнем подмножестве или в объект параметра (внешний или внутренний, последний включен потому что не проверяющие процессоры не требуется их читать).]

http://www.w3.org/TR/xml/#sec-rmd

Ответ 5

Цель декларации standalone=yes состоит в том, чтобы гарантировать, что информация внутри документа может быть достоверно извлечена только на основе внутреннего DTD, то есть документ может быть "автономным" без внешних ссылок. Проверка отдельного документа гарантирует, что у не проверяющих процессоров будет вся доступная информация для правильного анализа документа.

Автономное объявление не имеет смысла, если документ не имеет внешнего DTD, а внутреннее DTD не имеет ссылок на объекты параметров, поскольку эти документы уже неявно автономны.

Ниже приведены фактические результаты использования standalone=yes.

  • Заставляет обработчики выдавать ошибку при разборе документов с внешними DTD или ссылками на сущности параметров, если документ содержит ссылки на сущности, не объявленные во внутренней DTD (за исключением текста замены сущностей параметров, поскольку не требующие проверки процессоры не обязаны разбери это); amp, lt, gt, apos и quot являются единственными исключениями

  • При разборе документа, не объявленного как автономный, не проверяющий процессор может прекратить анализ внутреннего DTD, как только он обнаружит ссылку на объект параметра. Объявление документа как автономного заставляет не проверяющие процессоры анализировать объявления разметки во внутреннем DTD даже после того, как они игнорируют одну или несколько ссылок на сущности параметра.

  • Вынуждает процессоры проверки выдавать ошибку, если в документе обнаружены какие-либо из следующих признаков, а их соответствующие объявления находятся во внешнем DTD или в тексте замены сущности параметра:

    • атрибуты со значениями по умолчанию, если их значения не указаны явно
    • ссылки на сущности (кроме amp, lt, gt, apos и quot)
    • атрибуты с токенизированными типами, если значение атрибута будет изменено путем нормализации
    • элементы с содержимым элементов, если в их содержимом есть пробелы

Не проверяющий процессор может рассмотреть извлечение внешнего DTD и расширение всех ссылок на сущности параметров для документов, которые не являются автономными, даже если он не обязан это делать, т.е. установка standalone=yes теоретически может повысить производительность для не проверяющих процессоров ( предупреждение спойлера: это, вероятно, не будет иметь никакого значения).


Другие ответы здесь либо неполные, либо неправильные, основное заблуждение состоит в том, что

Автономное объявление - это способ указать парсеру игнорировать любые объявления разметки в DTD. В дальнейшем DTD используется только для проверки.

standalone = "yes" означает, что процессор XML должен использовать DTD только для проверки.

Скорее наоборот, объявление документа в качестве отдельного фактора фактически заставит не проверяющий процессор анализировать внутренние объявления, которые он обычно должен игнорировать (т.е. после игнорированной ссылки на объект параметра). Не проверяющие процессоры должны по-прежнему использовать информацию во внутреннем DTD для предоставления значений атрибутов по умолчанию и нормализации токенизированных атрибутов, поскольку это не зависит от проверки.