Сравнение узлов

Добавлено Дата: 2 January, 2011 категория: XSLT

Задача

Требуется идентифицировать узлы или сравнить их на основе позиции в до­кументе.

Решение

XPath 1.0

В следующих примерах предполагается, что $x и $y содержат по одному узлу из одного и того же документа. Напомним также, что порядок документа – это тот

Читать »

Таблицы стилей XSL

Добавлено Дата: 1 January, 2011 категория: Java, Web, XML

В документах HTML часто применяются таблицы стилей CSS, задающие общие правила оформления документов HTML: цвет, шрифт, заголовки. Выполнение этих правил придает документам единый стиль оформления.

Для документов XML, в которых вообще не определяются правила визуализации, идея применить таблицы стилей оказалась весьма плодотворной. Таблицы стилей для документов XML записываются на специально сделанной реализации языка XML, названной XSL (XML Stylesheet Language). Все теги документов XSL относятся к пространству имен http://www.w3.org/1999/XSL/Transform. Обычно они записываются с префиксом xsi. Если принят этот префикс, то корневой элемент таблицы стилей XSL будет называться <xsl: stylesheet».

Читать »

Динамическое управление сериализацией

Добавлено Дата: 1 January, 2011 категория: C#, Компоненты

Атрибуты DesignerSerializationVisibility И DefaultValue определяют необходимость сериализации статически, т. е. в конструкторы этих методов передаются константы. Если же необходимо управлять сериализацией программно, то нужно использовать другой способ: вместо статических атрибутов нужно сделать метод, имя которого состоит из строки shouldserialize и имени свойства. Например, для управления сериализацией свойства BackColor будет использоваться метод shouidSeriaiizeBackCoior. В случае свойства strings метод управления должен называться shouidseriaiizestrings (листинг 10.7). Использовать одновременно и метод управления, и атрибуты нельзя.

Читать »

Свойства и события

Добавлено Дата: 1 January, 2011 категория: C#, Компоненты

Любой компонент взаимодействует с внешним миром с помощью свойств и событий. Свойства (properties) позволяют настраивать и получать параметры компонента, а события (events)— реагировать на происходящие внутри компонента события, программировать реакцию компонента на внешние события и т. д.

Читать »

Экспорт XML в файл с разделителями полей

Добавлено Дата: 1 January, 2011 категория: XSLT

Задача

Требуется преобразовать XML-документ в файл, пригодный для импорта в другую программу, например, электронную таблицу.

Решение

Многие приложения умеют импортировать данные с разделителями полей. Самый распространенный формат такого рода называется CSV (Comma Separated Values – значения, разделенные запятыми). Большинство электронных таблиц и баз данных могут обрабатывать этот формат и подобные ему. Отобразить XML на файл с разделителями полей может быть и очень просто, и довольно сложно; все зависит от структуры исходного документа. В этом разделе мы начнем с про­стых случаев и постепенно перейдем к более сложным.

Читать »

Разработка компонентов работы с данными

Добавлено Дата: 1 January, 2011 категория: C#, Компоненты

В качестве примера я покажу компонент BoundListview, который является наследником обычного Listview, но с возможностью привязки данных. Для начала мне потребуются свойства Datasource и DataMember. Их описание достаточно стандартно, и его можно использовать независимо от типа компонента. Описание DataSource выглядит так:

Читать »

Principal Variation Search

Добавлено Дата: 1 January, 2011 категория: Алгоритмы, Игры

Поиск с основным вариантом имеет название (PVS). Мы делаем предположение, что нам известны лучшие ходы в неко­торых узлах. Тогда, если мы нашли такой ход, мы его рассматриваем с пол­ным alpha-beta окном, как при стандартном alpha-beta алгоритме. Ожидает­ся, что ход потенциально хороший и может повысить значение alpha в узле.

Читать »

Форсированные варианты

Добавлено Дата: 1 January, 2011 категория: Игры, Теория

По окончании полного перебора поиск может быть продолжен в форсиро­ванном варианте, который, в сущности, является конечной стадией выбо­рочного поиска. Основное его назначение — дать примерную оценку пози­ции горизонта. Какие ходы являются форсированными? В самом простей­шем случае это взятия. Взятия в шахматах дают самый большой прирост оценки (существенно больше, чем стратегическая оценка), и поэтому рас­смотрение взятий в глубине поиска сглаживает до некоторой степени эф­фект горизонта. Взятия являются также ходами, требующими немедленной реакции. В шахматах бывают очень длинные размены, которые программа должна рассматривать до конца. Если программа считает на 8 полуходов и рассматривает все размены в конце, уровень ее игры будет значительно вы­ше. Кроме взятий, и другие ходы могут являться форсированными. Напри­мер, шахи. Шах является, в сущности, видом атаки. Атака может быть на пешку, на ферзя, а в случае шаха — на короля. Шах является особым ходом в шахматах. Игра при шахе как бы замирает, и сама ситуация требует более глубокого просчета. Шахи в очень сильной степени влияют на эффект гори­зонта. Если форсированные варианты не рассматривают шахи, их оценка является уж очень приблизительной. В некоторых случаях и этого бывает достаточно. Если программа считает глубоко и имеет развитую систему вы­борочных продлений полного перебора, то на некоторой глубине ей может оказаться достаточно самой приблизительной оценки горизонта. Существу­ют два основных подхода к этой проблеме:

Читать »

Новые возможности старых конструкций XSLT 1.0

Добавлено Дата: 31 December, 2010 категория: XSLT

Задача

В XSLT 2.0 появилось немало мелких усовершенствований, и отыскать их все сразу довольно трудно.

Решение

Многие средства XSLT 2.0 стали развитием уже имевшихся в XSLT 1.0 ко­манд и функций. И уловить различия не так просто, как в случае совсем новых средств. В этом разделе мы перечислим все такие нюансы.

Читать »

Управление сериализацией

Добавлено Дата: 30 December, 2010 категория: C#, Компоненты

В предыдущем разделе я рассказывал, как среда осуществляет процесс сериализации. В частности о том, что при сериализации просматриваются все публичные свойства. Каждое из них анализируется на необходимость сериализации.

Указать необходимость сериализации можно с помощью атрибута

Читать »

Эффект горизонта

Добавлено Дата: 30 December, 2010 категория: Игры, Теория

Шахматы — сложная игра. Перебор на некоторую фиксированную глубину для спокойных, тихих перемещений, может быть, и достаточен. В напря­женных же строках игры программа может получить неверный результат и повести себя непредсказуемо, например, начать выбрасывать фигуры. Это явление получило название эффекта горизонта. Простейшее его прояв­ление — программа не может до конца рассмотреть длинный размен, ей кажется, что она выигрывает, а на самом деле она теряет. Существует еще множество проявлений эффекта горизонта. Например, если программа пе­ребирает на 8 полуходов, то в некоторой строке игры вполне может оказать­ся несколько взятий и шахов, и программа в конце перебора получит неиз­вестно что. Вариантов тактики на доске может быть сколько угодно, и даже в серьезной, профессиональной программе может обнаружиться эффект го­ризонта. Например, наш ферзь в ловушке. Человек посмотрит на такую по­зицию, и ему ясно практически сразу, что ферзь пропал. Программа же смотрит не так. Она находит длинную тактическую строку, в которой, на­пример, есть размен фигур, шах, несколько угроз или просто атак, и она уже не видит потерю ферзя, данный ход вытеснен за горизонт видимости программы. Существует великое множество всяких тактических последова­тельностей, которые приводят к эффекту горизонта. Как же бороться с этим эффектом? Лучше всего перебрать ходов на 16 или на 20, но это невозмож­но, и приходится прибегать ко всяческим хитростям. В конце основного поиска (полного перебора) вставляют упрощенный поиск, который рас­сматривает только форсированные ходы. В самом простейшем случае это взятия. Считается правилом хорошего тона рассматривать взятия до конца. Таким образом, программа как бы считает до конца, но не все. В более сложных вариантах форсированного поиска до некоторой глубины могут просматриваться шахи и даже некоторые другие ходы (например, атаки). Более подробно об организации форсированных вариантов будет сказано позже. Далее, в основном дереве перебора глубину в напряженных строках можно сделать более гибкой, т. е. чтобы программа просматривала такие строки глубже, чем остальные. Это называется выборочными продлениями. Типичные случаи продлений — при шахе, при размене, при авансе пешек (пешка пошла на предпоследнюю горизонталь). Продления могут быть, если оценка данного хода существенно отличается от остальных (это, как прави­ло, взятия). Если программа рассматривает взятия до конца и имеет неко­торые выборочные продления, то эффект горизонта в значительной степени уже сглажен. Но все не так просто. Тактических последовательностей может быть много. Если мы начнем продлевать все такие варианты, это приведет к взрыву дерева поиска и программной аварии. Я уже упомянул о варианте, где ферзь попадал в ловушку. Полный переборщик, чтобы увидеть это, дол­жен считать на 12 полуходов, что нереально. Если расширять строки, то нужно расширять и атаки, что приведет к резкому замедлению поиска, и программе для нормальной игры не будет хватать простых перемещений в полном дереве перебора. Это напоминает ситуацию "нос вытащишь — хвост увязнет, хвост вытащишь — нос увяз". Программа не видит других важных стрфк, которые не попадают под упрощенные критерии сильных перемещений.

Читать »

Работа с XSLT в программах на языке Perl

Добавлено Дата: 30 December, 2010 категория: XSLT

Задача

Имеется задача, для решения которой больше подходит Perl, но какие-то части проще реализовать с использованием XSLT.

Решение

Существует несколько способов воспользоваться XSLT из Perl. Модули XML::LibXSLT и XML::LibXML предоставляют интерфейс к библиотекам GNOME, реализующим процессоры SAX и XSLT. В следующем примере, заимствованном из книги Erik T. Ray и Jason McIntosh Perl and XML (O’Reilly, 2002), приведена Perl- программа для пакетной обработки нескольких XML-файлов одним и тем же XSLT-сценарием, который компилируется только один раз:

Читать »

Сеанс связи с Axis

Добавлено Дата: 30 December, 2010 категория: Java, Web, XML

Еще одна интересная особенность Axis — он может установить сеанс связи с клиентом. Сеанс связи описан интерфейсом session, реализованным двумя классами — классом simplesession, работающим через заголовок SOAP- послания, и классом AxisHttpSession, создающим сеанс связи через серв- лет при помощи cookie [10].

Читать »

Обработка неструктурированного текста с помощью регулярных выражений

Добавлено Дата: 30 December, 2010 категория: XSLT

Задача

Требуется преобразовать XML-документ, содержащий фрагменты неструкту­рированного текста, которые должны быть надлежащим образом размечены.

Решение

Для работы с регулярными выражениями в XSLT 2.0 есть три функции: match(), replace() и tokenize(). Мы рассматривали их в главе 1. Появилась также новая команда xsl:analyze-string(), которая позволяет обрабатывать текст еще более интересными способами.

Читать »

Функции расширения в Saxon

Добавлено Дата: 30 December, 2010 категория: XSLT

XSLT 1.0 (Saxon версия 6.5.4)

Saxon позволяет обращаться к функциям расширения, написанным на Java, следуя интерфейсу, который был определен в проекте стандарта XSLT 1.1.

В настоящее время Saxon в качестве языка расширения поддерживает только Java, поэтому функции расширения объявляются, как в следующем примере:

Читать »