
Немного об XML
XML преобразования и проверка XML данных
XML
XML (Extensible Markup Language — расширяемый язык разметки) — рекомендованный Консорциумом WWW язык разметки общего назначения, предназначенный для создания специализированных языков разметки. Является упрощённым подмножеством языка SGML, может описывать множество разнообразных видов данных. Целью создания XML было стремление способствовать совместному использованию структурированных данных в различных системах обработки информации, особенно в системах связанных через Интернет. Языки основанные на XML (например, RDF, RSS, MathML, XHTML, SVG) сами по себе формально описаны, что позволяет программно изменять и проверять документы на этих языках не зная их семантики, т. е. смыслового значения элементов языка.
Обработка XML файлов
Для обработки XML данных широко используются такие API как SAX (Simple API for XML) и DOM (Document Object Model).
Преобразование (трансформация) является одной из самых важных и полезных техник работы с XML. Трансформация XML
означает преобразование структуры, разметки и, возможно, содержания в другую форму.
Существует семейство XSL (Extensible Stylesheet Language), с помощью которого преобразуются XML файлы для представления и печати, в него входят:
-
XSL-FO декларативный язык постраничной верстки. XSL-FO процессор преобразует XSL-FO документ в не-XML формат, например в PDF;
-
XQuery язык запросов для структурирования и трансформации XML данных;
-
XSLT декларативный язык преобразования XML документов;
-
XPath язык для выбора данных в XML файле, является частью XQuery и XSLT.
XSLT
Кликабельное демо:
В спецификации «Преобразования расширяемого языка стилей» (Extensible Stylesheet Language Transformations (XSLT) 1.0) [Рекомендация W3C] определяется язык, используемый для описания преобразований входного XML-документа в выходное дерево. Выходное дерево может, например, принять форму HTML-документа или другого XML-формата и, таким образом, XSLT может считаться языком, предназначенным для преобразования XML в форму представления традиционного браузера или для обработки XML-файлов с помощью скриптов.
Это преобразование представляет собой XML-документ, определенный в отдельном словаре, а для обращения к исходному документу и выполнения общих операций обработки используются выражения спецификации XPath. Специальные инструкции устанавливают правила обработки (XSLT является декларативным языком) и управляют процессом создания выходного дерева.
XSL-документ (XSL stylesheet) представляет собой разновидность XML-документа, который используется для представления правил, по которым будет происходить преобразование. Правила основаны на совпадении шаблонов, т.е., например,
"если встретился элемент A, то вставить указанный кусочек HTML-кода и продолжить поиск совпадений шаблонов дальше"
. Все очень похоже на функциональный или логический язык программирования: есть рекурсивная и процедурная семантика; например, кроме рекурсивных применений шаблонов существует возможность органзации циклов (
"для всех элементов A вставить такой HTML-код"
).
Инструменты преобразования
Работает все это достаточно просто: для того, что бы преобразовать XML-документ по XSL-таблице нужно взять XSL-процессор, дать ему на вход два файла и на выходе получится результат.
-
Это первый вариант визуализации данных - как только потребовалось просмотреть XML-документ, преобразовать его с помощью XSLT процессора в HTML и просмотреть браузером.
-
Второй вариант заключается в том, что сам браузер при открытии документа пытался бы выполнить соответствующее преобразование. Сейчас это более-менее полно поддерживает только MS Internet Explorer версии не ниже 5.5 (с установленным MSXML) и Mozilla (в том числе Mozilla Firefox).
Что необходимо для того, чтобы XML документ при открытии в браузере отображался в виде результата преобразования этого XML с помощью некоторой XSLT,
рассмотрим вариант Internet Explorer:
-
в заголовоке XML документа необходимо указать путь к той XSLT, по правилам которой мы хотим показать наш XML, для этого под заголовком XML (<?xml ... ?>) добавляем следующую строку:<?xml-stylesheet type="text/xsl" href="my_xsl.xslt"?>
где в аттрибуте href определяется относительный или полный путь до шаблона XSLT; -
в системе необходимо присутствие MSXML 4.0 (MSXML поддерживает XSLT 1.0 начиная с версии 3.0,
данная библиотека входит входит в дистрибутив Windows XP) -
В XSLT используется стандартное пространство имен (namespace): <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
т.е заголовок нашего XSL-документа должен выглядеть примерно следующим образом:<?xml version="1.0" encoding=""?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> -
и наконец, XSLT документ должен соответствовать рекомендации XSLT 1.0.
XSLT процессоры
Для выполнения XSLT преобразований существуют как бесплатные, так и коммерчиские библиотеки написанные на С или Java, называемые XSLT-процессорами. Часто XSLT-процессор является лишь частью большой XML библиотеки, которая может включать в себя XML-парсер, XML-валидатор и т.д. Такие библиотеки могут быть использованы другими приложениями на различных языках C, C++, Java, Perl, PHP и т.д., которым необходима работа с XML.
Проверка XML файлов
"Правильность"
XML документа определяют следующие два компонента:
-
Синтаксическая корректность (well-formed): то есть соблюдение всех синтаксических правил XML;
-
Валидность: т.е. данные соотвествуют некоторому набору правил, определенных пользователем; правила определяют структуру и формат данных в XML.
Синтаксически корректный XML
XML документ - это текст, последовательность символов. По спецификации требуется поддержка юникод, кодировки UTF-8.
- Правильный XML-документ - это документ, который удовлетворяет синтаксическим правилам XML:
-
Он должен начинаться с XML-декларации
-
Он должен иметь один-единственный уникальный корневой элемент
-
Каждому начальному тегу должен соответствовать конечный тег
-
Теги XML зависят от регистра
-
Все элементы должны быть закрыты
-
Все элементы должны бытьправильно вложены друг в друга
-
Все значения атрибутов должны быть заключены в кавычки
-
Вместо специальных символов должны применяться сущности XML
Даже если XML-документ не содержит синтаксических ошибок, он может содержать ошибки и эти ошибки могут привести к серьезным последствиям. Представьте себе ситуацию: вы сделали заказ на пять дюжин лазерных принтеров, а не на просто пять лазерных принтеров. При использовании XML-схем большая часть подобных ошибок может быть отслежена вашим валидационным программным обеспечением.
Валидный XML. Что такое XML-схема?
Схематичное представление XML схемы в редакторе Altova XMLspy
- XML-схема
-
Определяет элементы, которые могут появляеться в документе
-
Определяет аттрибуты, которые могут появляеться в документе
-
Определяет, какие элменты являются дочерними
-
Определяет последовательность, в которой появляются элементы
-
Определяет число дочерних элментов
-
Определяет пустой ли элемент или он может включать в себя текст
-
Определяет типы данных элментов и аттибутов
-
Определяет значения аттрибутов по умолчанию
XML-схемы теперь являются рекомендацией W3C
Вначале XML-схемы были предложены компанией Microsoft, но 2 мая 2001 года консорциум
W3C выдвинул XML-схемы в качестве своей официальной рекомендации.
Спецификация была пересмотрена членами W3C и теперь закреплена.
XML-схемы поддерживают типизацию данных
Одно из самых серьезных преимуществ XML-схем состоит в том, что оно поддерживают
типизацию данных.
- Благодаря этому:
-
Легче описывать разрешенное содержание документа
-
Легче проверять правильность данных
-
Легче работать с данными из баз данных
-
Легче задавать ограничения на данные
-
Легче задавать паттерны данных (форматы данных)
-
Легче преобразовывать данные различных типов
XML-схемы используют синтаксис XML
Еще один существенный плюс XML-схем состоит в том, что они пишутся на XML.
- Благодаря этому:
-
Вам не нужно изучать какой-то еще язык
-
Для редактирования схем можно использовать XML-редактор
-
Для анализирования схем можно использовать XML-napcep
-
Можно работать с XML-схемами посредством XML DOM
-
Можно преобразовывать схемы посредством XSLT
XML-схемы увеличивают достоверность обмена данными
При отправке данных от отправителя получателю, очень важно, чтобы оба имели одинаковые "ожидания" относительно содержания.
С помощью XML-схем отправитель может описать то, каким образом получатель должен эти данные понимать.
Например, дата 1999-03-11 в некоторых странах может быть интерпретирована как 3 ноября, а в других - как 11 марта. XML-элемент, содержащий описание типа данных, например:
<date type="date">1999-03-ll</date>
обеспечит верную трактовку содержания, поскольку тип данных date требует использования формата CCYY-MM-DD.
XML-схемы расширяемы
XML-схемы расширяемы, также, как и XML, поскольку они пишутся на XML.
- Благодаря расширяемости каждой конкретной схемы:
-
Встраивать одни схемы в другие
-
Создавать свои собственные типы данных, производя их из стандартных типов
-
Ссылаться из документа на несколько схем
Ссылки
-
W3C
eng - The World Wide Web Consortium занимается разработкой web технологий, в том числе на сайте можно найти спецификации CSS, DOM, (X)HTML, MathML, XLink, XML, XPath, XPointer, XSL, и других интернет технологий; -
XML.com
eng - один из наиболее полных и постоянно обновляющихся ресурсов, содержит информацию и носвости XML технологий; -
XML.org
eng - XML новости и ресурсы, XML каталог - путеводитель по XML продуктам и ресурсам; -
XMLhack
eng - новости о последних разработках в области спецификаций и инструментов XML;
Отличная статья. А можно подключать сразу несколько XSLT таблиц стилей к xml документу. Это было бы очень удобно для сборки html-шаблонов из xml: чтобы комбинируя различные таблицы, отвечающие каждая за определенный xml тег, быстро и бесболезненно изменять отображение страницы, меняя лишь один файл.
Можно подключить и несколько стилей к XML документу
с помощью нескольких инструкций xml-stylesheet,
но лучше подключать один XSLT, а в нем подключать дополнительные шаблоны с помощью элементов
include и(или) import.
Механизм включения (include) позволяет объединять стили без изменения семантики комбинированных стилей, а
механизм импорта (import) позволяет стилям переписывать друг друга.
Отправить новый комментарий