Чи існує якась різниця між "дійсним xml" і "добре сформованим xml"?


80

Я не знав різниці, але співробітник каже, що він є, хоча він не може це зробити. Яка різниця, якщо така є?

Відповіді:


82

Є різниця, так.

XML, який відповідає стандарту XML , вважається сформованим, тоді як xml, який відповідає стандарту DTD , вважається дійсним.


11
Або XML-схема, або RelaxNG, або Schematron.
Торстен Марек

24
Можливо, варто вказати на те, що сформованість є необхідною умовою обгрунтованості.
Квентін,

1
@Quentin: це важливий момент, і той, з яким визнані експерти XML погоджуються ( lists.w3.org/Archives/Public/www-xml-linking-comments/… "У специфікації прямо сказано ..."); але це не зовсім очевидно із специфікації XML. У вас є посилання на це? Ви базуєте це на w3.org/TR/REC-xml/#dt-valid ?
LarsH

@LarsH За визначенням, якщо документ XML не сформований належним чином, його не можна перевірити на DTD або схему.

@LegoStormtroopr: Я згоден з вами, але моє запитання було, де в специфікації так сказано? Де це визначення, на яке ви посилаєтесь? w3.org/TR/REC-xml/#dt-valid повідомляє, чого достатньо - але не того, що потрібно - для того, щоб документ був "дійсним". Наприклад, документ XML, який перевіряється за схемою XML, може бути дійсним без DTD. Як таке, це визначення не виключає можливості інших способів дії документа.
LarsH

29

Добре сформований проти дійсного 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 з'являється не вгорі документа.

Недійсне :

  • Елемент або атрибут відсутній, але вимагається схемою XML.
  • Елемент або атрибут використовується, але невизначений схемою XML.
  • Вміст елемента не відповідає вмісту, визначеному схемою XML.
  • Значення атрибута не відповідає типу, визначеному схемою XML.

Простір імен - добре сформований

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

Примітка:

Простори імен у рекомендації XML [ Імена XML ] надають значення іменам, що містять символи двокрапки. Тому автори не повинні використовувати двокрапку в іменах XML, за винятком цілей простору імен, але процесори XML повинні приймати двокрапку як символ імені.

Отже, інший термін, добре сформований простір імен , визначений у просторах імен у Рекомендації XML 1.0 W3C, що передбачає усі правила XML для чіткої форми, а також ті, що регулюють простори імен та префікси простору імен.

У розмовній формі термін добре сформований часто використовується там, де чітко сформований простір імен буде точнішим. Однак це незначний технічний спосіб із менш практичним наслідком, ніж різниця між добре сформованим та дійсним XML, описаним у цій відповіді.


1
Це вже чудова відповідь, але, можливо, це допомогло б додати примітку про простори імен, тобто про властивість бути добре сформованим простором імен ? Як ви знаєте, простори імен є загальною помилкою для початківців, і багато людей описують документ із проблемами простору імен як "недостатньо сформований".
Матіас Мюллер

Дякую, @ MathiasMüller. За вашим запитом я додав пояснення щодо простору імен .
kjhughes

28

Дійсний XML - це XML, який успішно перевіряє DTD.

Добре сформований XML - це XML, у якому всі теги закриті у належному порядку, і якщо він має декларацію, він першим у файлі має відповідні атрибути.

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

Отже, ви можете мати недійсний добре сформований XML.


9
Я б не погодився з третім абзацом. Жоден термін нічого не говорить про семантику (значення чогось). DTDs немає способу вказати , який конкретний елемент або атрибут кошти . Це було б метою таких зусиль, як Web Ontology Language. Швидше, добре сформована мова стосується низького рівня синтаксису (можливо, це краще називати лексичною коректністю), тоді як валідність - більш високого рівня синтаксису (якщо хочете, назвіть його "структурним").
LarsH

16

Як сказали інші, добре сформований XML відповідає специфікації XML, а дійсний XML відповідає даній схемі.

Інший спосіб сказати, що добре сформований XML є лексично правильним (його можна проаналізувати), тоді як дійсний XML є граматично правильним (його можна підібрати до відомої лексики та граматики).

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


6

Добре сформований XML - це XML, який відповідає синтаксичним вимогам мови. Не пропускаючи жодних закриваючих тегів, використовуючи всі ваші теги-одиночки <whatever />замість просто <whatever>, а також закриваючи теги у правильному порядку.

Дійсний XML - це XML, який використовує DTD і відповідає усім його вимогам. Отже, якщо ви неправильно використовуєте атрибут, ви порушуєте DTD і не є дійсним.

Усі дійсні XML правильно сформовані, але не всі сформовані XML є дійсними.


4

XML добре сформований, якщо відповідає вимогам до всіх XML-документів, встановленим стандартами, - тому такі речі, як наявність одного кореневого вузла, правильне вкладання вузлів, усі вузли мають закриває тег (або використання порожнього скороченого вузла косої риски перед кут закриття), атрибути, які цитуються і т. д. Якщо правильно сформувати, це просто означає, що він дотримується правил XML і тому може бути проаналізований належним чином.

XML є дійсним, якщо перевірятиметься відповідно до DTD або схеми. Це, очевидно, відрізняється від випадку до випадку - XML, який є дійсним для однієї схеми, не буде дійсним для іншої схеми, хоча він все ще добре сформований.

Якщо XML не правильно сформований, його неможливо правильно проаналізувати - аналізатори просто видадуть виняток або повідомить про помилку. Це загальне, і не має значення, що містить ваш XML. Тільки після його аналізу його можна перевірити на дійсність. Цей домен або контекст залежить і вимагає DTD або схеми для перевірки. Для простих XML-документів у вас може не бути DTD або схеми, і в цьому випадку ви не можете знати, чи справжній XML - поняття чи дійсність просто не застосовуються в цьому випадку. Звичайно, це не означає, що ви не можете ним користуватися, це просто означає, що ви не можете сказати, чи це дійсно.


3

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

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

Усі діючі документи XML добре сформовані, але зворотне не завжди справедливо. Добре сформовані документи XML не обов'язково повинні бути дійсними.


1

Додам, що дійсний XML також означає, що він сформований, але добре сформований XML не обов'язково дійсний.


1

На додаток до вищезазначених DTD, існує ще 2 способи опису та перевірки XML-документів - XMLSchema та RelaxNG , обидва з яких можуть бути простішими у використанні та підтримувати більше функцій, ніж DTD.


1

Якщо XML підтверджує правила DTD, то це дійсний XML. Якщо документ XML відповідає правилам XML (усі запущені теги закриті, є кореневий елемент і т.д.), це добре сформований XML.


1

Взято з розширюваної мови розмітки (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

На основі теорії: "Добре сформований" проти дійсний


0

DTD - абревіатура від Визначення типу документа. Це опис вмісту для сімейства файлів XML. Це частина специфікації XML 1.0 і дозволяє описати та переконатись, що даний екземпляр документа відповідає набору правил, що деталізують його структуру та зміст.

Перевірка - це процес перевірки документа на відповідність DTD (більш загально набору правил побудови).

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


Привіт @Rachna. Це досить добре пояснює частину перевірки, але не пояснює, коли ми можемо назвати XML-файл "добре сформованим" ...
Кент Павар,

0

Ну, а XML, який погано сформований, за визначенням, не є XML. Попл зазвичай називає дійсний XML як XML, який відповідає певній схемі (XSD або DTD).


0

Див. XML DTD для шкіл W3 :

XML-документ із правильним синтаксисом називається "Добре сформований".

Документ XML, перевірений на відповідність DTD, є "Добре сформований" та "Дійсний".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.