Является ли объявление XML node обязательным?

У меня была дискуссия с моим коллегой по поводу объявления XML node (я говорю об этом = > <?xml version="1.0" encoding="UTF-8"?>).

Я считаю, что для того, чтобы называться "действительным XML", для этого требуется объявление XML node.

Мой коллега заявляет, что объявление XML node является опциональным, поскольку по умолчанию кодировка UTF-8 и версия всегда 1.0. Это имеет смысл, но что говорит стандарт?

Короче, учитывая следующий файл:

<books>
  <book id="1"><title>Title</title></book>
</book>

Можно ли сказать, что:

  • Действительно ли XML?
  • Это допустимый XML node?
  • Это допустимый XML-документ?

Большое спасибо.

Ответы

Ответ 1

Это:

<?xml version="1.0" encoding="UTF-8"?>

не является обработкой - это объявление XML. Его цель - правильно настроить парсер XML, прежде чем он начнет читать остальную часть документа.

Он похож на инструкцию по обработке, но в отличие от реальной инструкции обработки он не будет частью DOM, создаваемой парсером.

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

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

Для документа не требуется декларация XML, так как существуют значения по умолчанию для version и encoding (1.0 и UTF-8/UTF-16 соответственно). Если в файле присутствует спецификация Юникода (знак порядка байтов), она определяет кодировку. Если нет спецификации и объявления XML, предполагается UTF-8.

Вот канонический поток о том, как декларация и обнаружение кодировки работает в файлах XML. Как по умолчанию используется кодировка по умолчанию (UTF-8) в декларации XML?


На ваши вопросы:

  • Действительно ли XML?
    На это нельзя ответить без DTD или схемы. Он хорошо сформирован, однако.
  • Это допустимый XML node?
    A node - это понятие, связанное с представлением документа в памяти (DOM). Этот фрагмент можно разобрать в node, так как он хорошо сформирован.
  • Это допустимый XML-документ?
    См. № 1.

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

  • Все начинается с структурированных данных, состоящих из имен, значений и атрибутов, которые организованы как дерево.
  • XML означает, в основном, синтаксис для представления этих структурированных данных в текстовой форме (это "язык разметки" ). Это то, что вы получаете, когда вы сериализуете дерево в строку символов, и его можно использовать для де-сериализации строки символов в дерево снова.
  • Документ обычно относится к строке символов, представляющих сериализованное дерево. Он может храниться в файле, передаваться по сети или создаваться в памяти.
  • Правила сериализации и де-сериализации очень строго определены. Документ ( "строка символов" ), который можно успешно де-сериализовать в дерево, называется хорошо сформированным.
  • Семантика такого дерева (допустимые элементы, счетчик элементов и порядок, пространства имен, любое количество сложных правил, действительно) могут быть определены в так называемом DTD или схеме. Если дерево подчиняется определенному набору четко определенной семантики, оно называется valid.
  • Термин Document Object Model (DOM) относится к стандартизированному представлению структурированных данных в памяти. Это имя четко определенного API для доступа к этому дереву со стандартизованными методами.
  • A node - это базовая структура данных объектной модели документа.

Ответ 2

В соответствии с расширяемым языком разметки (XML) 1.0 (пятое издание) W3C Рекомендация 26 ноября 2008 г., раздел: http://www.w3.org/TR/2008/REC-xml-20081126/#sec-prolog-dtd
без объявления xml, он недопустим (хотя он хорошо сформирован, завершен).

Ответ 3

в спецификации указано:

Определение: документы XML ДОЛЖНЫ начинаться с объявления XML, которое указывает версию используемого XML.

А также для того, чтобы документ был действительным, он должен иметь объявление типа документа, связанное с ним. Этот фрагмент, который вы показываете здесь, представляет собой хорошо сформированный node, но ни в коем случае не действительный документ.

Ответ 4

Обратите внимание, что действительность зависит от DTD или схемы, связанной с документом. В вашем случае

<books>
  <book id="1"><title>Title</title></book>
</book>

минимальный DTD должен иметь ELEMENT "книги", "книга" и "название", а "книга" имеет ATTLIST с "id", определяет тип "id" и является ли он обязательным или необязательный. Он также заявил бы, что "книга" может/должна содержать "заголовок" и "название", может (или должна) содержать содержимое PCDATA (строка).

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