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

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

Ответ 1

Есть разница, да. Xml, который придерживается стандарта xml, считается хорошо сформированным, а xml, который придерживается DTD, считается действительным.

Ответ 2

Действительный XML - это XML, который успешно выполняет валидацию против DTD.

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

Иными словами, справедливость относится к семантике, корректность - это синтаксис.

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

Ответ 3

Хорошо сформированный vs Valid XML

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

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


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

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

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


Замечания:

  • Документ, который не является корректным, не является XML. (Хорошо сформированный XML обычно используется, но технически избыточен.)
  • Действительность подразумевает корректность.
  • Быть хорошо сформированным не означает, что он действителен.
  • Хотя Рекомендация W3C для XML определяет validity для быть против DTD, обычное использование позволяет применять термин для соответствия XML-схемам, указанным через XSD, RELAX NG, Schematron или другие методы.

Примеры того, что заставляет документ быть...

Неформован:

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

Invalid:

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

Пространство имен-Well-Сформированный

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

Примечание:

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

Поэтому другой термин namespace-well-form определен в Пространства имен в XML 1.0 W3C Рекомендация, которая подразумевает все XML-правила для корректности, а также те, которые управляют пространствами имен и префиксами пространства имен.

Вкратце, термин "хорошо сформированный" часто используется там, где наилучшее формирование пространства имен будет более точным. Однако это незначительная техническая манера менее практических последствий, чем различие между хорошо сформированным и действительным XML, описанным в этом ответе.

Ответ 4

Как говорили другие, хорошо сформированный XML соответствует спецификации XML, а действительный XML соответствует данной схеме.

Другой способ сказать, что правильно сформированный XML лексически корректен (его можно разобрать), а действительный XML грамматически корректен (его можно сопоставить с известной лексикой и грамматикой).

Документ XML не может быть действительным до тех пор, пока он не будет правильно сформирован. Все XML-документы хранятся в одном и том же стандарте для корректности (RFC, выпущенный W3). Один XML-документ может быть действительным в отношении некоторых схем и недействителен для других. Существует несколько языков схем, многие из которых сами основаны на XML.

Ответ 5

Хорошо сформированный XML - это XML, который соответствует синтаксическим требованиям языка. Отсутствие каких-либо закрывающих тегов, если все ваши теги singleton используют <whatever /> вместо всего лишь <whatever> и имеют ваши закрывающие теги в правильном порядке.

Valid XML - это XML, который использует DTD и соответствует всем его требованиям. Поэтому, если вы неправильно используете атрибут, вы нарушите DTD и не допустимы.

Весь правильный XML корректно сформирован, но не все правильно сформированные XML действительны.

Ответ 6

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

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

Если XML не является корректным, он не может быть правильно проанализирован - парсеры просто выдают исключение или сообщают об ошибке. Это общее, и не имеет значения, что содержит ваш XML. Только после его анализа он может быть проверен на достоверность. Этот домен или контекст зависит и требует, чтобы DTD или схема проверялись. Для простых XML-документов у вас может не быть DTD или схемы, и в этом случае вы не можете знать, является ли XML действительным - понятие или справедливость просто не применяются в этом случае. Конечно, это не значит, что вы не можете его использовать, это просто означает, что вы не можете сказать, действительно ли это.

Ответ 7

W3C, в спецификации XML, определил определенные правила, которые необходимо соблюдать при создании документов XML. Примеры таких правил включают в себя только один корневой элемент, имеющий конечный тег для каждого стартового тега, используя одиночные/двойные кавычки для значений атрибутов и т.д. Если XML-документ следует всем этим правилам, он считается хорошо сформированным документом, и синтаксические анализаторы XML могут использоваться для анализа и обработки таких документов.

Определения типа документа (DTD) или XML-схемы могут использоваться для определения структуры и содержимого определенного класса XML-документов. Сюда входят данные о взаимоотношениях между родителями и дочерними элементами, списки атрибутов, информация о типе данных, ограничениях по значению и т.д. В дополнение к правилам корректности, если XML-документ также следует правилам, указанным в соответствующем DTD/Schema, говорится быть допустимым XML-документом.

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ответ 11

Взято из Расширяемый язык разметки (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

Основываясь на теории: "Хорошо сформированный" против действительного

Ответ 12

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

Ответ 13

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

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

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