Отображение иерархии

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

Задача

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

Решение

Самый очевидный способ представить иерархию – сформировать с помощью пробелов отступы различной ширины. В примерах 7.29 и 7.30 приведена обобщенная таблица стилей, в которой приняты разумные допущения о преобразовании инфор­мации, хранящейся во входном документе, в иерархически организованный текст.

Читать »

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

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

Задача

Требуется найти объединение, пересечение, разность или симметрическую разность двух наборов узлов. Однако теперь равенство определено не как иден­тичность наборов узлов, а как функция от значений узлов.

Решение XSLT 1.0

Потребность в этом решении может возникнуть при работе с несколькими документами. Рассмотрим два документа с одной и той же DTD-схемой, в ко­торых не может быть элементов с одинаковыми значениями. С точки зрения XSLT, элементы, взятые из разных документов, различаются, даже если у них одинаковые пространства имен, атрибуты и текстовые значения. См. примеры 9.1 – 9.4.

Читать »

Применение типов в целях безопасности и точности выражения намерений

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

Задача

Ограниченные средства контроля типов в XSLT 1.0 не дают написать по-на­стоящему устойчивый к ошибкам шаблон.

Решение

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

Читать »

Единственный ответ

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

Я ни в коем случае не могу претендовать на полное изложение предмета, хотя сам и использую данный прием в своих программах. Если в позиции есть только одно легальное перемещение, то глубину просчета нужно увели­чить. Все вроде бы просто. Только что считать легальным перемещением? Если существует некоторая позиция, где все ходы не несут материального выигрыша, а один выигрывает пешку, то можно сказать, что ход, выигры­вающий пешку, является легальным, или правильным. Самое простое тол­кование легальности перемещения — это когда короля не бьют следующим ходом. Если есть только один ход, где король не под боем, то глубину нуж­но увеличить. В стандартных выборочных продлениях при шахе глубина остается неизменной, а если легальное перемещение единственное, то ее можно даже увеличить.

Читать »

Провайдеры

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

Для начала сделаем простое приложение, состоящее из одной формы, и разместим на ней компонент Button (рис. 10.1). Посмотрите на код, появившийся в файле Form 1 .Designer.cs:

this.buttonl = new System.Windows.Forms.Button();

this.buttonl.Location = new System.Drawing.Point(72, 35);

Читать »

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

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

В разд. 6.6 я показывал, как скрыть элементы из редактора свойств, а в разд. 5.4 рассказывал об атрибуте Browsabie. Но это было скрытие "насовсем", т. е. свойство просто не видно в режиме разработки. Сейчас я хочу показать, как сделать динамическое управление свойствами, когда некоторые свойства будут видны или скрыты в зависимости от значений других свойств. Добавим в наш компонент градиентной заливки свойство Gradient Active. Если оно имеет значение true, компонент показывает градиентную заливку, а если false, то работает как обычный компонент Label. Конечно, практического смысла это свойство не имеет, но в качестве примера вполне подходит. Соответствующий код показан в листинге 8.13.

Читать »

Преобразование XML в SVG – Введение

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

Scalable Vector Graphics (SVG) – это формат векторной графики, записывае­мый в синтаксисе XML. У него есть все возможности революционно изменить способ доставки графического контента через Интернет. Одна из самых убеди­тельных причин кодировать графику в виде XML заключается в том, что ренде­ринг данных оказывается частным случаем преобразования. Поэтому язык XSLT, в который не включены никакие графические возможности, способен генериро­вать сложные образы, так как большая часть работы делегируется интерпретато­ру SVG, работающему внутри браузера.

Читать »

Создание полиморфного XSLT-кода

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

Задача

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

Решение

В XSLT есть два вида полиморфного поведения. Первый напоминает пере­грузку, второй – переопределение.

В некоторых современных языках, особенно в C++, можно создавать перегру­женные функции, то есть функции с одинаковым именем, но с разным числом или типами аргументов. Компилятор определяет, какой вариант функции вызвать, анализируя переданные ей в момент вызова параметры. В XSLT прямого аналога этого механизма нет, но давайте рассмотрим следующую таблицу стилей:

Читать »

BitBoard

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

— это изощренная битовая техника генерации перемещений и оценки позиции. Она использует следующее понятие: массив игры в шахма­тах представлен 64 клетками. Взяв 64-битовое число без знака, можно полу­чить некоторое битовое представление позиции, если биты, соответствую­щие фигурам позиции, установить в 1. Например, все белые пешки в бито­вой нотации можно представить одним числом:

Читать »

Модульность и режимы

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

Задача

Имеющиеся в XSLT 1.0 ограничения на использование режимов (атрибута mode) часто приводят к дублированию кода или лишней работе.

Решение

Пользуйтесь новыми, появившимися в XSLT 2.0 возможностями атрибута mode для устранения дублирования кода. Рассмотрим простую таблицу стилей, в которой один и тот же документ обрабатывается в два прохода с разными режи­мами. На каждом проходе по умолчанию текстовые узлы должны игнорировать­ся. В XSLT 1.0 пришлось бы написать что-то вроде:

Читать »

Упрощение сложной логики с помощью кванторов

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

Задача

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

Решение

XPath 1.0

Если условие сводится к проверке на равенство, то достаточно семантики опе­раторов = и != в XPath 1.0 и 2.0.

Читать »

Повторы позиций

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

Определение повторов позиций — не такая тривиальная тема. Она затрону­та многими корифеями шахматного программирования. Я не буду пытаться объять необъятное, а покажу, как простейшим способом научить программу распознавать повторы позиций.

Допустим, наше перемещение представлено в виде

Читать »

Преобразование из одной системы счисления в другую

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

Задача

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

Решение

В следующем примере приведено общее решение для преобразования из сис­темы с любым основанием от 2 до 36 в систему с другим основанием из того же диапазона. Здесь используются две глобальные переменные для кодирования всех символов в системе с основанием 36 в виде смещений от начала строки, одной для кодирования заглавных букв и другой – для прописных.

Читать »

Вывод нескольких документов

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

Задача

Необходима переносимая таблица стилей для вывода нескольких документов.

Решение

Хотя в большинстве реализаций XSLT 1.0 имеются расширения, помогающие обрабатывать несколько документов, все они немного различаются между собой. А в XSLT 2.0 есть команда xsl:result-document.

Читать »

История развития шахматных программ

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

Когда же в первый раз машина заиграла в шахматы? На этот вопрос трудно ответить, наверное, в 1769 году. Венгерский инженер барон Вольфганг фон Компелен создал машину, способную играть в шахматы (рис. 1.1). Она была предназначена для развлечения королевы Марии-Терезии. Машина, дейст­вительно, неплохо играла — внутри ее сидел сильный шахматист, который и делал ходы. История примечательная и, в некоторой степени, актуальна и в наши дни. Что программист вложит в машину, то она и играет. Гарри Кас­паров, например, понимает этот тезис буквально. Он утверждает, что в его втором, решающем матче с DeepBlue (первый он выиграл), начиная со вто­рой партии, в игру машины вмешивался человек и компенсировал неспо­собность машины понимать позиционную игру. Оставим этот вопрос на совести корпорации IBM и Гарри Каспарова. Я лично нисколько не сомне­ваюсь, что Каспаров может выиграть еще один матч с DeepBlue (если этот матч возможен), если, конечно, ему повезет.

Читать »