Есть ли разница между «действительным xml» и «правильно сформированным xml»? - PullRequest
75 голосов
/ 25 сентября 2008

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

Ответы [ 14 ]

78 голосов
/ 25 сентября 2008

Есть разница, да.

XML, соответствующий стандарту XML , считается правильным, а XML, соответствующий DTD , считается действительным.

27 голосов
/ 25 сентября 2008

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

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

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

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

25 голосов
/ 14 сентября 2014

Правильно сформированный и допустимый XML

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

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


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

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

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


Замечания:

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

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

Не правильно сформирован :

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

Invalid

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

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

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

Примечание:

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

Следовательно, еще один термин, правильно сформированное пространство имен , определен в пространствах имен в XML 1.0 Рекомендации W3C , что подразумевает все правила XML для правильности плюс , которые управляют пространствами имен и префиксами пространств имен.

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

16 голосов
/ 25 сентября 2008

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

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

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

6 голосов
/ 25 сентября 2008

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

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

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

4 голосов
/ 25 сентября 2008

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

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

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

3 голосов
/ 13 августа 2011

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

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

Все действительные XML-документы правильно сформированы, но обратное не всегда верно. Правильно оформленные XML-документы не обязательно должны быть действительными.

1 голос
/ 12 декабря 2013

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

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

1 голос
/ 07 июня 2010

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

1 голос
/ 25 сентября 2008

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

...