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 документ, который можно использовать далее в программе считывая из него данные и записывая их
Валидация подразумевает, что на вход парсера вместе с документом подается спецификация и проверяется уже не только структура документа, но и соответствие спецификации, на выходе может быть либо валидный 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»