Что означает standalone
директива в документе XML?
standalone
Декларация представляет собой способ сказать парсер игнорировать любые объявления разметки в DTD . После этого DTD используется только для проверки.
В качестве примера рассмотрим скромный <img>
тег. Если вы посмотрите на DTD XHTML 1.0 , вы увидите объявление разметки, сообщающее парсеру, что <img>
теги должны быть ПУСТОЙ, обладать src
и иметь alt
атрибуты. Когда браузер просматривает документ XHTML 1.0 и находит <img>
тег, он должен заметить, что DTD требует src
и alt
атрибуты, и добавить их, если их нет. Он также сам закроет <img>
тег, поскольку он должен быть ПУСТОЙ. Это то, что спецификация XML подразумевает под «объявлениями разметки, которые могут повлиять на содержимое документа». Затем вы можете использовать standalone
объявление, чтобы сказать парсеру игнорировать эти правила.
Действительно ли это делает ваш парсер, это другой вопрос, но должен соответствовать стандартизированный валидатор (например, браузер).
Обратите внимание, что если вы не укажете DTD, то автономное объявление «не имеет смысла», поэтому нет смысла использовать его, если вы также не укажете DTD.
standalone=yes
объявления разметки не игнорируются, вместо этого они приводят к тому, что документ является недействительным XML. Вы не против, если я отредактирую это в ответе?yes
иno
, гдеno
это значение по умолчанию.standalone="yes"
означает, что процессор XML должен использовать DTD только для проверки. В этом случае он не будет использоваться для:standalone="yes"
могут добавить ограничения действительности, если документ использует внешний DTD. Когда документ содержит вещи, которые требуют модификации XML, такие как значения по умолчанию для атрибутов, иstandalone="yes"
используется, тогда документ недействителен .standalone="yes"
может помочь оптимизировать производительность обработки документов.Источник: автономный псевдоатрибут релевантен, только если используется DTD
источник
standalone
описывает, зависит ли текущий документ XML от внешнего объявления разметки.W3C описывает свое назначение в «Расширяемом языке разметки (XML) 1.0 (пятое издание)»:
источник
http://www.w3.org/TR/xml/#sec-rmd
источник
Цель
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 для предоставления значений атрибутов по умолчанию и нормализации токенизированных атрибутов, поскольку это не зависит от проверки.
источник