Есть ли разница между "допустимым xml" и "хорошо сформированным xml"?
Я не знал о разнице, но коллега говорит, что есть, хотя он не может ее поддержать. Какая разница, если есть?
14 ответов:
есть разница, да.
XML, который придерживается стандарт XML считается хорошо сформированным, в то время как xml, который придерживается DTD считается действительным.
допустимый XML-это XML, который успешно проходит проверку в DTD.
хорошо сформированный XML-это XML, который имеет все теги, закрытые в правильном порядке, и, если у него есть объявление, он имеет его первым делом в файле с соответствующими атрибутами.
другими словами, валидность относится к семантике, корректность относится к синтаксису.
таким образом, вы можете иметь недопустимый хорошо сформированный XML.
хорошо сформированные против допустимого XML
Ну-образовалось означает, что текстовый объект соответствует требования W3C на будучи XML.
действительный означает, что правильно сформированный XML соответствует дополнительным требованиям, заданным указанной схемой.
Официальные Определения
[определение: объект данных-это XML-документ, если он есть ну-образовалось, как определено в данной спецификации. Кроме того, XML-документ действительный если он отвечает некоторым дополнительным ограничениям.]
замечания:
- документ, который не является хорошо сформированным, не является XML. (хорошо сформированный XML обычно используется, но технически избыточно.)
- будучи действительность подразумевает быть хорошо сформированным.
- быть хорошо сформированным не означает быть действительным.
- хотя рекомендация W3C для XML определяет действия чтобы быть против DTD, обычное использование позволяет применять термин для соответствия схемам XML, указанным через XSD,РАССЛАБЬСЯ НГ,Schematron, или другими методами.
примеры того, что вызывает документ быть...
не очень хорошо сформированы:
- элемент не имеет закрывающего тега (а не закрытия).
- элементы перекрываются без правильной вложенности:
<a><b></a></b>
- значение атрибута отсутствует заключительная цитата, которая соответствует начальная цитата.
<
или&
используются в содержании, а не<
или&
.- Существует несколько корневых элементов.
- несколько объявлений XML существует, или объявление XML появляется не в верхней части документа.
недействительным:
- элемент или атрибут отсутствует, но требуется для схемы XML.
- элемент или атрибут используется, но не определен схемой XML.
- содержимое элемента не соответствует содержимому, указанному в схеме XML.
- значение атрибута не соответствует типу, указанному в XML схема.
Пространство Имен-Хорошо Сформировано
технически, символы двоеточия разрешены в именах компонентов в XML. Однако двоеточия должны используется только в именах для целей пространства имен:
Примечание:
пространства имен в рекомендации XML [ имена XML] присваивает a значение для имен, содержащих символы двоеточия. Таким образом, авторы не следует использовать двоеточие в именах XML, кроме как для целей пространства имен, но XML-процессоры должны принимать двоеточие как символ имени.
поэтому другой термин, пространство имен-ну-образовалось, определена в пространства имен в XML 1.0 W3C рекомендации это подразумевает все правила XML для корректности плюс те, которые управляют пространствами имен и пространством имен префиксы.
в разговорной речи, термин ну-образовалось часто используется, где пространство имен-ну-образовалось было бы точнее. Однако это незначительный технический способ менее практического значения, чем различие между хорошо сформированный против действительного XML описано в этом ответе.
как говорили другие, правильно сформированный XML соответствует спецификации XML, а допустимый XML соответствует заданной схеме.
другой способ сказать, что хорошо сформированный XML-это лексически правильно (его можно разобрать), в то время как допустимый XML-это грамматически правильно (он может быть сопоставлен с известным словарем и грамматикой).
XML-документ не может быть действительным, пока он не сформирован. Все XML-документы хранятся в соответствии с одним и тем же стандартом для корректности (RFC потушить W3). Один XML-документ может быть действительным для одних схем и недействительным для других. Существует несколько языков схем, многие из которых сами основаны на XML.
правильно сформированный XML-это XML, который отвечает синтаксическим требованиям языка. Не пропуская никаких закрывающих тегов, имея все ваши одноэлементные теги использовать просто
<whatever>
и закрывающий теги в правильном порядке.допустимый XML-это XML, который использует DTD и соответствует всем его требованиям. Поэтому, если вы используете атрибут неправильно, вы нарушаете DTD и не действительны.
все допустимые XML хорошо сформированы, но не все хорошо сформированные XML действительный.
XML хорошо сформирован, если соответствует требованиям для всех XML-документов, установленных стандартами, - так что такие вещи, как наличие одного корневого узла, правильно вложенные узлы, все узлы, имеющие закрывающий тег (или используя пустой узел стенографии косой черты перед закрывающей угловой скобкой), атрибуты в кавычках и т. д. Быть хорошо сформированным просто означает, что он придерживается правил XML и поэтому может быть правильно проанализирован.
XML допустим, если он будет проверяться по DTD или схеме. Этот очевидно, отличается от случая к случаю - XML, который действителен для одной схемы, не будет действителен для другой схемы, даже если он все еще хорошо сформирован.
Если XML не правильно сформирован, он не может быть правильно проанализирован-Парсеры просто выдадут исключение или сообщат об ошибке. Это универсальный и не имеет значения, что ваш XML содержит. Только после того, как он будет проанализирован, он может быть проверен на действительность. Этот домен или контекст зависят и требуют DTD или схемы для проверки. Для простого XML документы, у вас может не быть DTD или схемы, и в этом случае вы не можете знать, действителен ли XML - концепция или действительность просто не применяются в этом случае. Конечно, это не значит, что вы не можете его использовать, это просто означает, что вы не можете сказать, действительно ли это.
W3C, в спецификации XML, определил определенные правила, которые необходимо соблюдать при создании XML-документов. Примеры таких правил включают в себя наличие ровно одного корневого элемента, наличие конечного тега для каждого начального тега, использование одинарных/двойных кавычек для значений атрибутов и т. д. Если XML-документ следует всем этим правилам, он считается хорошо сформированным документом, и XML-анализаторы могут использоваться для анализа и обработки таких документов.
определения типов документов (DTDs) или XML-схемы может использоваться для определения структуры и содержания определенного класса XML-документов. Это включает в себя сведения о родительско-дочерних отношениях, списки атрибутов, информацию о типе данных, ограничения значений и т. д. В дополнение к правилам корректности, если XML-документ также следует правилам, указанным в связанном DTD/Schema, он считается допустимым XML-документом.
все допустимые XML-документы хорошо сформированы, но обратное не всегда верно. Хорошо сформированные XML-документы не обязательно должны быть действительны.
Я добавлю, что действительный XML также подразумевает, что он хорошо сформирован, но хорошо сформированный XML не обязательно действителен.
Если XML подтверждает правила DTD, то это допустимый XML. Если XML-документ соответствует правилам XML (все теги начал закрыты,есть корневой элемент и т. д.), то это хорошо сформированный XML.
принято от расширяемый язык разметки (XML) 1.0 (пятое издание) - рекомендация W3C 26 ноября 2008:
[определение: объект данных является документом XML, если он хорошо сформирован, как определенные в этой спецификации. Кроме того, допустим XML-документ если он отвечает определенным дальнейшим ограничениям.]
для тех, кто предпочитает psuedo-код абзацам за абзацами текста... :)
IF is_well_formed(<XML_doc>) THEN # It is well-formed, and can be parsed IF is_valid(<XML_doc>) THEN # Well-formed and ALSO valid. Hurray! # **A valid XML doc, is a well-formed doc!** ELSE # Only well-formed, NOT valid END IF ELSE # Not well-formed, or valid! END IF FUNCTION is_well_formed IF <does_not_contain_syntax,_spelling,_punctuation,_grammar_errors,_etc._errors> THEN RETURN TRUE ELSE RETURN FALSE END IF END FUNCTION FUNCTION is_valid IF <markup_of_the_XML_document_matches_"some"_defined_standard> THEN # Standards used to validate XML could be a DTDs or XML Schemas, referenced within the XML document RETURN TRUE ELSE RETURN FALSE END IF END FUNCTION
на основе теории: "хорошо сформировано" против действительного
DTD-это аббревиатура для определения типа документа. Это описание содержимого для семейства XML-файлов. Это является частью спецификации XML 1.0 и позволяет описать и проверить, что данный экземпляр документа соответствует набору правил, детализирующих его структуру и содержание.
валидация-это процесс проверки документа по DTD (в более общем случае по набору правил построения).
процесс проверки и построение DTDs являются две самые сложные части жизненного цикла XML. Вкратце DTD определяет все возможные элементы, которые можно найти в вашем документе, какова формальная форма вашего дерева документов (путем определения разрешенного содержимого элемента; либо текст, регулярное выражение для разрешенного списка дочерних элементов, либо смешанное содержимое, т. е. как текст, так и дочерние элементы). DTD также определяет допустимые атрибуты для всех элементов и типы этих атрибутов.
ну, XML, который не очень хорошо сформирован, по определению, не является XML. Poeple обычно относится к допустимому XML как XML, который придерживается определенной схемы (XSD или DTD).
посмотреть XML DTD на W3 школы:
XML-документ с правильным синтаксисом называется "хорошо образован".
XML-документ, проверенный на DTD, является как "хорошо сформированным", так и "Действительный."