Есть ли какая-либо разница между "действительным xml" и "хорошо сформированным xml"?

StackOverflow https://stackoverflow.com/questions/134494

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Да, разница есть.

XML, который соответствует Стандарт XML считается хорошо сформированным, в то время как xml, который придерживается DTD считается действительным.

Другие советы

Допустимый XML - это XML, который успешно проходит проверку на соответствие DTD.

Хорошо сформированный XML - это XML, в котором все теги закрыты в правильном порядке, и, если в нем есть объявление, оно появляется первым делом в файле с соответствующими атрибутами.

Другими словами, валидность относится к семантике, корректность - к синтаксису.

Таким образом, у вас может быть недопустимый хорошо сформированный XML.

Хорошо сформированный vs Допустимый XML

Хорошо сформированный означает, что текстовый объект соответствует Требования W3C для будучи XML.

Действительный означает, что правильно сформированный XML соответствует дополнительным требованиям, предъявляемым указанной схемой.


Официальные определения

В соответствии с Рекомендация W3C для XML:

[Определение:Объект данных - это XML-документ, если он хорошо сформированный, как определено в данной спецификации.Кроме того, документ XML является действительный если это соответствует определенным дополнительным ограничениям.]


Наблюдения:

  • Неправильно сформированный документ - это не XML.(Хорошо сформированный XML-файл широко используется, но технически избыточен.)
  • Быть действительным подразумевает быть хорошо сформированным.
  • Быть хорошо сформированным не означает быть действительным.
  • Несмотря на то, что Рекомендация W3C для XML определяет действительность в отличие от DTD, традиционное использование позволяет применять этот термин для определения соответствия XML-схемам, указанным через XSD, РАССЛАБЬСЯ ., Схематрон, или другими методами.

Примеры того, что приводит к созданию документа...

Не очень хорошо сформированная:

  • У элемента отсутствует закрывающий тег (и он не является самозакрывающимся).
  • Элементы накладываются друг на друга без надлежащей вложенности: <a><b></a></b>
  • В значении атрибута отсутствует закрывающая кавычка, которая соответствует открывающей кавычке .
  • < или & используются в содержании, а не &lt или &amp;.
  • Существует несколько корневых элементов.
  • Существует несколько XML-объявлений, или XML-объявление отображается не в верхней части документа, а в другом месте.

Недействительный:

  • Элемент или атрибут отсутствует, но требуется XML-схемой.
  • Элемент или атрибут используется, но не определен XML-схемой.
  • Содержимое элемента не соответствует содержимому, указанному в XML-схеме.
  • Значение атрибута не соответствует типу, указанному в XML-схеме.

Пространство имен -Хорошо сформированное

Технически, символы двоеточия разрешены в именах компонентов в XML.Однако двоеточия следует может использоваться в именах только для целей пространства имен:

Примечание:

Пространства имен в Рекомендации XML [XML- имена] присваивает значение именам, содержащим символы двоеточия.Следовательно, авторам не следует использовать двоеточие в именах XML, за исключением целей пространства имен, но процессоры XML должны принимать двоеточие в качестве символа имени.

Следовательно, другой термин, пространство имен -хорошо сформированное, определяется в Пространства имен в XML 1.0 Рекомендация W3C это подразумевает все правила XML для корректности plus те, которые управляют пространствами имен и префиксами пространств имен.

В разговорной речи термин хорошо сформированный часто используется там, где пространство имен -хорошо сформированное было бы более точно.Однако это второстепенный технический прием, имеющий менее практические последствия, чем различие между хорошо сформированный vs допустимый 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 не обязательно является допустимым.

В дополнение к вышеупомянутым DTD, существует 2 других способа описания и проверки XML-документов: XMLSchema ( XMLSchema ) и Расслабление, оба из которых могут быть проще в использовании и поддерживать больше функций, чем DTD.

Если XML подтверждает соответствие правилам DTD, то это допустимый XML.Если XML-документ соответствует правилам XML (все теги started закрыты, есть корневой элемент и т.д.), То это хорошо сформированный 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

Основанный на теории: "Хорошо сложенный" противДействительный

DTD - это сокращение от Определения типа документа.Это описание содержимого семейства XML-файлов.Это часть спецификации XML 1.0 и позволяет описать и проверить, соответствует ли данный экземпляр документа набору правил, детализирующих его структуру и содержимое.

Валидация - это процесс проверки документа на соответствие DTD (в более общем плане на соответствие набору правил построения).

Процесс проверки и создание DTD - это две наиболее сложные части жизненного цикла XML.вкратце, DTD определяет все возможные элементы, которые можно найти в вашем документе, какова формальная форма вашего дерева документов (путем определения разрешенного содержимого элемента;либо текст, регулярное выражение для разрешенного списка дочерних элементов, либо смешанный контент, т.е.как текст, так и дочерние элементы).DTD также определяет допустимые атрибуты для всех элементов и типы этих атрибутов.

Ну, XML, который не очень хорошо сформирован, вроде как по определению, не является XML.Люди обычно ссылаются на допустимый XML как на XML, который соответствует определенной схеме (XSD или DTD).

Видишь XML DTD в школах W3:

XML-документ с правильным синтаксисом называется "Хорошо сформированным".

XML-документ, проверенный на соответствие DTD, является одновременно "Хорошо сформированным" и "Действительным".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top