Валидация XML

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

 

Валидация XML: язык разметки и признаки, проверяемые валидатором

Процесс проверки соответствия спецификации производится валидатором, но сначала проверяется сама структура документа. На вход которого подается сам документ, валидатор проверяет его структуру и выдает заключение: либо XML является well formed, либо нет — во втором случае будет выведена ошибка.

 

 

Что проверяет валидатор:

  • присутствие только одного корневого элемента
  • парность тегов и наличие открывающего и закрывающего для каждой пары
  • уникальность атрибутов внутри каждого элемента

 

 

В случае если все требования удовлетворены на выходе будет well formed xml, который может использоваться приложением.

 

«Валидный» xml — то же самое, что well formed xml, но помимо трех приведенных выше критериев документ должен удовлетворять требованиям спецификаций, которые вместе с исходным документом подаются на вход

 

Спецификаций для XML существует 2 вида:

DTD — Document Type Descriptor

XML Schema (XSD — XML Schema Description)

 

XSD значительно шире распространен.

 

Проверка синтаксиса просто выявляет присутствие или отсутствие ошибок в XML, результатом является либо Well-formed XML документ, который можно использовать далее в программе считывая из него данные и записывая их
well formed xml

 

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

валидация xml

 

 

Плюсы и минусы использования спецификаций и валидация XML

+++ DTD/XSD:

  • программа предполагает структуру данных, требуется меньше проверок на возможные ошибки
  • CSS/XSL — правила по которым XML информация переводится в HTML также может быть проще
  • существование обширной документации

 

— DTD/XSD:

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

DTD — язык определяющий необходимость использования атрибутов, теги, их порядок и количество.
DTD определяет также специальные типы атрибутов ID и IDREF(S) — они определяют как элементы документа обращаются к другим элементам.

*IDREFS — идентификаторы, которые являются ссылками на идентификаторы других элементов XML документа

 

Отличия XSD

XSD отличается от DTD дополнительным функционалом — в частности, присутствием типов данных и ключей. Типы данных принциптально важны — если в XSD задано, что в поле может быть только тип данных integer (целое число) попытка ввести в него текст повлечет ошибку при валидации.

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

 

 

Сама валидация XML производится при помощи утилиты xmllint, которая присутствует в большинстве стандартных инсталяций Linux, а также в Windows

 

xmllint -schema xsdfile.xsd —noout xmlfile.xml

 

Схема со ссылками в XSD выглядит иначе. Здесь нет IDREFS, у тегов — например, <Authors> есть подтеги — <Auth authIdent=»THA»> или <Auth authIdent=»THE»>, которые в свою очередь ссылаются на элементы Ident=»THA» и Ident=»THE»