Есть ли разница между "действительным xml" и "правильно сформированным xml"?
Я не знал о разнице, но коллега говорит, что есть, хотя он не может подтвердить это. Какая разница, если таковые имеются?
14 ответов
Есть разница, да.
XML, который придерживается стандарта XML, считается правильно сформированным, в то время как XML, который придерживается DTD, считается действительным.
Хорошо сформированный и валидный XML
Правильно сформированный означает, что текстовый объект соответствует требованиям W3C для того, чтобы быть XML.
Действительный означает, что правильно сформированный XML соответствует дополнительным требованиям, заданным указанной схемой.
Официальные определения
Согласно Рекомендации W3C для XML:
[Определение: объект данных - это документ XML, если он правильно сформирован, как определено в данной спецификации. Кроме того, документ XML действителен, если он удовлетворяет определенным дополнительным ограничениям.]
Замечания:
- Документ, который плохо сформирован, не является XML. (Хорошо сформированный XML обычно используется, но технически избыточен.)
- Быть действительным означает быть хорошо сформированным.
- Быть правильно сформированным не означает быть действительным.
- Хотя Рекомендация W3C для XML определяет валидность относительно DTD, традиционное использование позволяет применять этот термин для соответствия схемам XML, заданным с помощью XSD, RELAX NG, Schematron или другими методами.
Примеры того, что заставляет документ быть...
Не правильно сформирован:
- Элемент не имеет закрывающего тега (и не является самозакрывающимся).
- Элементы перекрываются без правильного вложения:
<a><b></a></b>
- В значении атрибута отсутствует закрывающая кавычка, соответствующая открывающей кавычке.
<
или же&
используются в содержании, а не<
или же&
,- Существует несколько корневых элементов.
- Существуют несколько объявлений XML, или объявление XML появляется не в верхней части документа.
Неверно:
- Элемент или атрибут отсутствует, но требуется схемой XML.
- Элемент или атрибут используется, но не определен схемой XML.
- Содержимое элемента не соответствует содержимому, указанному схемой XML.
- Значение атрибута не соответствует типу, указанному в схеме XML.
Пространство имен-Хорошо Сформированный
Технически символы двоеточия разрешены в именах компонентов в XML. Однако двоеточия должны использоваться только в именах для целей пространства имен:
Замечания:
Пространства имен в Рекомендации XML [ Имена XML ] присваивают значения именам, содержащим символы двоеточия. Поэтому авторам не следует использовать двоеточие в именах XML, за исключением целей пространства имен, но процессоры XML должны принимать двоеточие в качестве символа имени.
Поэтому в терминах пространств имен в Рекомендации XML 1.0 W3C определен еще один термин, хорошо сформированный в пространстве имен, который подразумевает все правила XML для корректности, а также те, которые управляют пространствами имен и префиксами пространств имен.
В разговорной речи термин хорошо сформированный часто используется, когда пространство имен правильно сформировано будет более точным. Однако это незначительный технический способ, имеющий менее практические последствия, чем различие между правильно сформированным и корректным XML, описанным в этом ответе.
Допустимый XML - это XML, который успешно проходит проверку на соответствие DTD.
Правильно сформированный XML - это XML, в котором все теги закрыты в правильном порядке, и, если он имеет объявление, он первым делом помещает его в файл с надлежащими атрибутами.
Другими словами, валидность относится к семантике, правильность - к синтаксису.
Таким образом, вы можете иметь неверный правильно сформированный XML.
Как уже говорили другие, правильно сформированный XML соответствует спецификации XML, а действительный XML соответствует заданной схеме.
Другой способ выразить это в том, что правильно сформированный XML является лексически правильным (его можно проанализировать), в то время как действительный XML является грамматически правильным (его можно сопоставить с известным словарем и грамматикой).
Документ XML не может быть действительным, пока он не будет правильно сформирован. Все XML-документы соответствуют одному и тому же стандарту для правильной формы (RFC, выпущенный W3). Один XML-документ может быть действительным для некоторых схем и недействительным для других. Существует несколько языков схем, многие из которых сами основаны на XML.
Правильно сформированный XML - это XML, который соответствует синтаксическим требованиям языка. Не пропускайте закрывающие теги, используя все ваши одноэлементные теги <whatever />
вместо просто <whatever>
и ваши закрывающие теги в правильном порядке.
Действительный XML - это XML, который использует DTD и соответствует всем его требованиям. Поэтому, если вы используете атрибут неправильно, вы нарушаете DTD и не действительны.
Весь действительный XML является правильно сформированным, но не весь правильно сформированный XML является допустимым.
XML является правильно сформированным, если он соответствует требованиям для всех документов XML, установленным стандартами - таким образом, например, наличие одного корневого узла, правильная вложенность узлов, все узлы с закрывающим тегом (или использование сокращенного знака пустого узла перед косой чертой перед закрывающая угловая скобка), атрибуты в кавычках и т. д. Правильное построение означает лишь то, что оно соответствует правилам XML и поэтому может быть проанализировано надлежащим образом.
XML действителен, если он будет проверен на соответствие DTD или схеме. Это очевидно отличается от случая к случаю - XML, который действителен для одной схемы, не будет действителен для другой схемы, даже если он все еще хорошо сформирован.
Если XML не правильно сформирован, он не может быть проанализирован должным образом - анализаторы просто сгенерируют исключение или сообщат об ошибке. Это общее и не имеет значения, что содержит ваш XML. Только после анализа он может быть проверен на достоверность. Этот домен или контекст зависит и требует проверки DTD или схемы. Для простых документов XML у вас может не быть DTD или схемы, и в этом случае вы не можете знать, является ли XML действительным - концепция или валидность просто не применимы в этом случае. Конечно, это не значит, что вы не можете его использовать, это просто означает, что вы не можете сказать, действительно ли это правильно.
W3C в спецификации XML определил определенные правила, которые необходимо соблюдать при создании документов XML. Примеры таких правил включают в себя наличие только одного корневого элемента, конечного тега для каждого начального тега, использование одинарных / двойных кавычек для значений атрибутов и т. Д. Если документ XML следует всем этим правилам, он считается правильно сформированным документом, и анализаторы XML могут использоваться для анализа и обработки таких документов.
Определения типов документов (DTD) или схемы XML могут использоваться для определения структуры и содержимого определенного класса документов XML. Это включает в себя сведения об отношениях родитель-потомок, списки атрибутов, информацию о типе данных, ограничения значений и т. Д. В дополнение к правилам правильной формы, если документ XML также следует правилам, указанным в связанной DTD/ схеме, он называется быть действительным документом XML.
Все действительные XML-документы правильно сформированы, но обратное не всегда верно. Правильно оформленные XML-документы не обязательно должны быть действительными.
Я добавлю, что действительный XML также подразумевает, что он правильно сформирован, но правильно сформированный XML не обязательно является допустимым.
Взято из расширяемого языка разметки (XML) 1.0 (пятое издание) - Рекомендация W3C 26 ноября 2008 г.:
[Определение: объект данных - это документ XML, если он правильно сформирован, как определено в данной спецификации. Кроме того, документ XML действителен, если он удовлетворяет определенным дополнительным ограничениям.]
Для тех, кто предпочитает псевдо-код абзацам после абзацев текста...:)
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
Основано на теории: "Хорошо сформированный" против Действительного
Если XML подтверждает правила DTD, то это действительный XML. Если документ XML соответствует правилам XML (все запущенные теги закрыты, есть корневой элемент и т. Д.), То это правильно сформированный XML.
Ну, XML, который не очень хорошо сформирован, вроде как по определению, не является XML. Poeple обычно ссылается на действительный XML как XML, который придерживается определенной схемы (XSD или DTD).
См. XML DTD в школах W3:
XML-документ с правильным синтаксисом называется "Well Formed".
Документ XML, проверенный на соответствие DTD, является "Хорошо сформированным" и "Действительным".
DTD - это аббревиатура для определения типа документа. Это описание содержимого семейства файлов XML. Это является частью спецификации XML 1.0 и позволяет описать и проверить, соответствует ли данный экземпляр документа набору правил, детализирующих его структуру и содержание.
Валидация - это процесс проверки документа по DTD (в более общем случае по набору правил построения).
Процесс валидации и создание DTD являются двумя наиболее сложными частями жизненного цикла XML. Вкратце, DTD определяет все возможные элементы, которые можно найти в вашем документе, какова формальная форма дерева документа (путем определения допустимого содержимого элемента; либо текста, регулярного выражения для разрешенного списка дочерних элементов, либо смешанного содержимого т.е. и текст и дети). DTD также определяет допустимые атрибуты для всех элементов и типы этих атрибутов.