Я не заметил разницы, но коллега говорит, что есть, хотя не может подтвердить это. Какая разница, если есть?





Есть разница, да.
XML, который придерживается Стандарт XML, считается правильно сформированным, в то время как XML, который придерживается DTD, считается допустимым.
Наверное, стоит отметить, что правильная формулировка является предпосылкой для валидности.
@Quentin: это важный момент, с которым согласны признанные эксперты XML (lists.w3.org/Archives/Public/www-xml-linking-comments/… «В спецификации прямо сказано ...»); но это не совсем очевидно из спецификации XML. У вас есть цитата за это? Вы основываете его на w3.org/TR/REC-xml/#dt-valid?
@LarsH По определению, если XML-документ неправильно сформирован, его нельзя проверить по DTD или схеме.
@LegoStormtroopr: Я согласен с вами, но мой вопрос был в том, где это сказано в спецификации? Где определение, о котором вы говорите? w3.org/TR/REC-xml/#dt-valid сообщает, что достаточно - но не то, что требуется - для того, чтобы документ был «действительным». Например. XML-документ, проверенный по XML-схеме, может быть действительным без DTD. Таким образом, это определение не исключает возможности других способов сделать документ действительным.
@LarsH, ссылка на спецификацию, который вы ищете (подтверждающий правильное утверждение Квентина о том, что правильная формулировка является предпосылкой для достоверности): Определение: объект данных является XML-документ, если он правильно сформирован, как определено в этой спецификации. Кроме того, документ XML действителен, если он отвечает определенным дополнительным ограничениям.См. Мой ответ ниже, чтобы узнать больше о правильном XML и правильном формате XML. Спасибо.
@kjhughes: Спасибо за ответ. Вероятно, это лучшая ссылка на спецификацию, которую мы найдем, но она не очень ясна. «Вдобавок», по-видимому, означает, что XML-документ должен быть правильно сформирован, чтобы быть действительным, но он мог бы быть намного более явным. Более того, ссылка на «действительный» (указывающая на w3.org/TR/REC-xml/#dt-valid) проясняет, что «если» в определениях спецификации означает «если» и «Только, если». (В противном случае ни один документ не мог бы быть действительным без DTD.) Это еще больше ослабляет интерпретацию того, что документ может быть действительным Только, если он правильно сформирован.
Действительный XML - это XML, успешно прошедший проверку на соответствие DTD.
Правильно сформированный XML - это XML, в котором все теги закрыты в правильном порядке, и, если у него есть объявление, он первым делом помещается в файл с соответствующими атрибутами.
Другими словами, валидность относится к семантике, правильность - к синтаксису.
Таким образом, у вас может быть недопустимый правильно сформированный XML.
Я бы не согласился с третьим абзацем. Ни один из этих терминов ничего не говорит о семантике (значении чего-либо). В DTD нет способа указать, что такое конкретный элемент или атрибут средства. Это было бы целью таких усилий, как Web Ontology Language. Скорее, правильная форма относится к низкому уровню синтаксиса (может быть, лучше называться лексической корректностью), в то время как достоверность относится к более высокому уровню синтаксиса (назовите его «структурным», если хотите).
Что ж, XML, который плохо сформирован, вроде как по определению, не является XML. Люди обычно называют действительный XML как XML, который придерживается определенной схемы (XSD или DTD).
Я добавлю, что действительный XML также подразумевает, что он правильно сформирован, но правильно сформированный XML не обязательно действителен.
Хорошо сформированный XML - это XML, который отвечает синтаксическим требованиям языка. Не пропущены закрывающие теги, все ваши одноэлементные теги используют <whatever /> вместо <whatever>, и ваши закрывающие теги расположены в правильном порядке.
Действительный XML - это XML, который использует DTD и соответствует всем его требованиям. Поэтому, если вы используете атрибут неправильно, вы нарушаете DTD и не действительны.
Весь допустимый XML является правильно сформированным, но не весь правильно сформированный XML.
XML является правильно сформированным, если соответствует требованиям для всех XML-документов, установленных стандартами, поэтому такие вещи, как наличие одного корневого узла, правильное вложенность узлов, все узлы, имеющие закрывающий тег (или использование сокращенного обозначения пустого узла косой черты перед закрывающая угловая скобка), цитируемые атрибуты и т. д. Правильный формат означает, что он соответствует правилам XML и, следовательно, может быть правильно проанализирован.
XML действителен, если он будет проверяться на соответствие DTD или схеме. Очевидно, что это отличается от случая к случаю - XML, который действителен для одной схемы, не будет действителен для другой схемы, даже если он все еще хорошо сформирован.
Если XML неправильно сформирован, его нельзя правильно проанализировать - синтаксические анализаторы просто выдадут исключение или сообщат об ошибке. Это общий и не имеет значения, что содержит ваш XML. Только после анализа его можно проверить на достоверность. Этот домен или контекст зависит и требует DTD или схемы для проверки. Для простых XML-документов у вас может не быть DTD или схемы, и в этом случае вы не можете знать, действителен ли XML - концепция или достоверность в этом случае просто не применимы. Конечно, это не означает, что вы не можете его использовать, это просто означает, что вы не можете сказать, действительно ли это.
Как говорили другие, правильно сформированный XML соответствует спецификации XML, а действительный XML соответствует заданной схеме.
Другими словами, правильно сформированный XML является правильным лексически (его можно проанализировать), в то время как действительный XML является правильным грамматически (его можно сопоставить с известным словарем и грамматикой).
XML-документ не может быть действительным, пока он не будет правильно сформирован. Все XML-документы соответствуют одному и тому же стандарту правильного формата (RFC, выпущенный W3). Один XML-документ может быть действительным для одних схем и недействительным для других. Существует ряд языков схем, многие из которых сами основаны на XML.
Если XML подтверждает правила DTD, то это действительный XML. Если XML-документ соответствует правилам XML (все теги начаты закрыты, есть корневой элемент и т. д.), тогда это правильно сформированный XML.
DTD - это аббревиатура от Document Type Definition. Это описание содержимого семейства файлов XML. Это часть спецификации XML 1.0, которая позволяет описывать и проверять, что данный экземпляр документа соответствует набору правил, детализирующих его структуру и содержимое.
Проверка - это процесс проверки документа на соответствие DTD (в более общем смысле, на набор правил построения).
Процесс проверки и построение DTD - две наиболее сложные части жизненного цикла XML. Вкратце DTD определяет все возможные элементы, которые могут быть найдены в вашем документе, какова формальная форма вашего дерева документа (путем определения разрешенного содержимого элемента; либо текст, либо регулярное выражение для разрешенного списка дочерних элементов, либо смешанное содержимое. т.е. и текст, и дети). DTD также определяет допустимые атрибуты для всех элементов и типы этих атрибутов.
Привет @Rachna. Это довольно хорошо объясняет часть проверки, но не объясняет, когда мы можем назвать XML-файл «правильно сформированным» ...
W3C в спецификации XML определил определенные правила, которые необходимо соблюдать при создании документов XML. Примеры таких правил включают наличие ровно одного корневого элемента, наличие конечного тега для каждого начального тега, использование одинарных / двойных кавычек для значений атрибутов и так далее. Если XML-документ следует всем этим правилам, он считается правильно сформированным документом, и для синтаксического анализа и обработки таких документов можно использовать XML-анализаторы.
Определения типов документов (DTD) или схемы XML могут использоваться для определения структуры и содержимого определенного класса документов XML. Это включает в себя детали родительско-дочерних отношений, списки атрибутов, информацию о типах данных, ограничения значений и т. д. В дополнение к правилам правильного формирования, если XML-документ также следует правилам, указанным в соответствующем DTD / схеме, он считается быть действительным XML-документом.
Все допустимые XML-документы имеют правильный формат, но не всегда верно обратное. Правильно сформированные XML-документы не обязательно должны быть действительными.
Взято из Extensible Markup Language (XML) 1.0 (пятое издание) - Рекомендация W3C от 26 ноября 2008 г.:
[Definition: A data object is an XML document if it is well-formed, as defined in this specification. In addition, the XML document is valid if it meets certain further constraints.]
Для тех, кто предпочитает псевдокод абзацам за абзацами текста ... :)
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
Исходя из теории: "Хорошо сформированный" или действительный
Хорошо сформированный означает, что текстовый объект соответствует Требования W3C для будучи XML.
Действительный означает, что правильно сформированный XML соответствует дополнительным требованиям, заданным указанной схемой.
Согласно Рекомендация W3C для XML:
[Definition: A data object is an XML document if it is well-formed, as defined in this specification. In addition, the XML document is valid if it meets certain further constraints.]
Не правильно сформирован:
<a><b></a></b>< или &, а не < или &.Недействительным
Технически в именах компонентов в XML разрешены символы двоеточия. Однако двоеточия должен могут использоваться в именах только для целей пространства имен:
Note:
The Namespaces in XML Recommendation [XML Names] assigns a meaning to names containing colon characters. Therefore, authors should not use the colon in XML names except for namespace purposes, but XML processors must accept the colon as a name character.
Следовательно, другой термин, пространство имен правильно сформированное, определен в Пространства имен в XML 1.0 Рекомендация W3C, который подразумевает все правила XML для правильного формирования плюс, которые управляют пространствами имен и префиксами пространств имен.
В разговорной речи термин правильно сформированный часто используется там, где пространство имен правильно сформированное было бы более точным. Однако это второстепенный технический способ с меньшими практическими последствиями, чем различие между правильно сформированный или действительный XML, описанное в этом ответе.
Это уже замечательный ответ, но, возможно, было бы полезно добавить примечание о пространствах имен, то есть о свойстве быть пространство имен правильно сформированное? Как вы знаете, пространства имен являются распространенной ловушкой для новичков, и многие люди описывают документ с проблемами пространства имен как «неправильно сформированный».
Спасибо, @ MathiasMüller. Я добавил объяснение пространство имен правильно сформированное по вашему запросу.
См. XML DTD в школах W3:
An XML document with correct syntax is called "Well Formed".
An XML document validated against a DTD is both "Well Formed" and "Valid".
Или XML-схему, или RelaxNG, или Schematron, если на то пошло.