Формат PGN (Portable Game Notation) используется для описания шахматных партий. PGN организован таким образом, чтобы с одной стороны его с лёгкостью мог прочитать или записать человек, а с другой стороны его легко мог распознать и сгенерировать компьютер. На сегодняшний день с этим форматом умеет работать большинство шахматных программ.
Формат PGN бывает двух видов: импортируемый и экспортируемый, в зависимости от того, кто его составляет.
Импортируемый PGN допускает довольно много вольностей при описании партии. Он предназначен для записи партии от руки, его можно сравнить с форматом исходных кодов для языка программирования высокого уровня.
Экспортируемый PGN довольно жёстко регламентирован. Он предназначен для генерации с помощью компьютерных программ.
Для одной и той же партии данные в экспортируемом формате PGN должны полностью совпадать с точностью до байта.
Этот формат также должен использоваться для архивного хранения партий. То есть для создания таких архивов, которые в будущем могут использоваться на совершенно разных компьютерных системах. Единственным дополнительным требованием для таких архивов - символ перевода строки должен записываться с помощью ASCII символа LF (0x0A) вне зависимости от того, как они представляются в заданной системе.
Сокращённый экспортируемый PGN - это экспортируемый формат PGN, удовлетворяющий следующим дополнительным условиям:
он не имеет комментариев;
общая информация о партии представлена только семью тегами;
в описании партии отсутствуют ответвления;
ходы не снабжены числовыми метками.
В реальности получается так, что очень много шахматных программ и сайтов не придерживаются даже импортируемого формата. Поэтому если вы хотите распознавать как можно больше PGN файлов, старайтесь трактовать формат как можно более вольно. В свою очередь, в данном тексте я постараюсь отметить те требования, которые чаще всего не выполняются. Мои комментарии будут отображаться курсивным шрифтом.
Отдельные части экспортируемого формата PGN задают выравнивание строк и отдельных полей, которое в импортируемом формате никак не регулируется. Это делается для того, чтобы сделать возможным написание простых программ, которые могут легко читать PGN, даже не имея шахматного движка или каких-то других сложных средств. То есть цель в данном случае --- стимулировать авторов шахматных программ реализовывать хотя бы частичное распознавание PGN. Даже если для этой цели имеется полноценный шахматный движок, обычно он будет работать на два порядка медленнее, чем простой текстовый сканер.
Используемые символы
Данные PGN записываются с использованием подмножества из кодировки ISO 8859/1 (Latin 1). Она включает в себя стандартную семибитную кодировку ASCII.
Из управляющих ASCII символов разрешается использовать только четыре. Это символы горизонтальной и вертикальной табуляции (0x09, 0x0B, см ограничения), а также символы перевода строки (0x0A, 0x0D).
В PGN могут использоваться символы 95 печатных ASCII символов с кодами от 32 до 126.
Символы с кодами от 127 до 159 в PGN использоваться не должны. Символы с кодами 160 - 191 могут использоваться, хотя это и не рекомендуется. Оставшиеся символы с кодами 192 - 255 разрешено использовать в PGN (они обычно содержат кириллические, греческие или какие-то другие символы, которые могут пригодиться). Мало какая программа за этим правилом следит. Так что при распознавании PGN я бы рекомендовал его игнорировать.
Все символы с кодами от 128 и выше разрешено использовать только в строковых данных и комментариях.
Символы табуляции, как горизонтальной, так и вертикальной, в экспортируемом PGN не допускаются. Это связано с тем, что на разных системах они могут обрабатываться по-разному. Символы табуляции также не могут появляться внутри строковых данных.
Длины строк
Данные PGN организованы в виде обычных текстовых строк без каких-либо специальных маркеров, задающих структуру. Строки в импортируемом PGN должны быть ограничены 255-ю символами, включая перевод строки. Настоятельно не рекомендуется оставлять строки из более чем 80 символов.
Я бы не стал полагаться на это ограничение. Оно имело смысл, когда многие текстовые редакторы не умели обрабатывать длинные строки. Сейчас эта проблема далеко в прошлом и при сохранении PGN многие не обращают на это правило внимания.
Комментарии
Данные в PGN формате могут содержать комментарии, которые бывают двух типов. Первый тип - это комментарии до конца строки. Они начинаются с символа точки с запятой (";") и продолжаются до конца строки. Второй тип начинается с открывающей фигурной скобки ("{") и заканчивается правой фигурной скобкой ("}"). Комментарий не может располагаться внутри лексемы.
Фигурные скобки не могут быть вложены друг в друга. Открывающая фигурная скобка внутри комментария, как и точка с запятой рассматриваются как обычный текст. Фигурные скобки, расположенные внутри комментария, начинающегося с точки с запятой, также рассматриваются как обычный текст.
Поддержка расширений
В PGN предусмотрен специальный механизм, поддерживающий расширения. Этот механизм запускается при помощи символа процента ("%"), который должен быть первым символом в строке. В этом случае все данные в этой строке должны игнорироваться программами, сканирующими данные формата PGN. Данный механизм предназначен для использования исследователями и разработчиками для добавления новых команд в данные PGN.
Если символ процента появляется не в начале строки, то он не запускает описанный механизм.
Лексемы
Все данные в формате PGN организованы в виде лексем. Лексема --- это набор последовательных символов, рассматриваемых как единое целое. Лексемы могут отделяться друг от друга символами-разделителями (пробел, символ табуляции, перевод строки). Некоторые из них являются саморазграничивающимися и не требуют разделителей. Лексемы бывают:
Строковые. Они представляют из себя последовательность символов (возможно, пустую), заключённую в кавычки (ASCII код 0x22). Помните, что одинарные кавычки не подойдут. Кавычки внутри строки записываются с помощью обратной косой черты (""), за которой сразу следует символ кавычек. Обратная косая черта внутри строки представляется с помощью двух последовательных обратных косых черт. Строки в основном используются для записи значений для пар тегов. Непечатные символы, такие как перевод строки и табуляция, внутри строковой лексемы не допускаются. Строковая лексема завершается вместе с завершающими кавычками. Длина строки ограничивается 255-ю символами (лучше на это не рассчитывать).
Числовые. Это специальный вид более общей, словарной лексемы. Они представляют из себя последовательность из одной или более цифр и предназначены для представления номеров ходов. Числовая лексема завершается непосредственно перед первым несловарным символом, следующим за цифрами.
Точка (".") является лексемой сама по себе. Она используется для обозначения номера хода. Она завершается сама по себе.
Звёздочка ("*") является лексемой сама по себе. Используется как один из возможных маркеров окончания игры. Она означает что партия не завершена, либо что результат партии неизвестен или недоступен.
Символы квадратных скобок ("[" и "]"). Они используются для разграничения пар тегов.
Символы круглых скобок ("(" и ")"). Они используются для разграничения ответвлений.
Символы угловых скобок ("<" и ">"). Они зарезервированы для будущих расширений.
Числовые метки (NAG). Они состоят из знака доллара ("$"), за которым сразу же следует одна или несколько цифр. Он завершается сразу перед первым символом не цифрой.
Словарные. Они начинаются со знака латинского алфавита или цифры, за которой следует набор из словарных символов. Словарными являются символы английского алфавита ("A-Za-z"), цифры ("0-9"), а также символы из следующего набора: "_", "+", "#", "=", ":", "-". Словарные лексемы используются в разных случаях. Все символы в слове важны. Словарная лексема завершается сразу перед первым несловарным символом. Длина слова не должна превышать 255 символов.
Описание партий
В базе данных PGN последовательно хранятся ноль или более PGN партий. То есть, пустой PGN файл - это вполне корректная, хотя и неинформативная база данных PGN.
Каждая PGN партия делится на две части. Первая часть описывает пары тегов, а вторая - непосредственно запись партии. Пары тегов хранят некоторую информацию о партии в целом. Обычно их можно использовать для идентификации партии. Запись партии представляет из себя последовательность из обычно пронумерованных и возможно прокомментированных ходов в игре вместе с завершающим маркером, описывающим результат партии.
Пары тегов
Первая часть партии состоит из нуля или более пар тегов, записанных подряд.
Каждая пара тегов состоит из четырёх последовательных лексем: левая квадратная скобка, словарная лексема, строковая лексема и правая квадратная скобка. Словарная лексема задаёт название тега, а строковая --- его значение. Несколько одинаковых названий тегов, относящихся к одной и той же партии, не допускается.
Названия тегов могут состоять только из латинских букв, цифр и знака подчёркивания. (Это сделано для того, чтобы названия тегов можно было добавлять в качестве ключей в СУБД). (Мне встречались PGN файлы, где названия тегов были записаны кириллицей и даже содержали пробелы.)
В импортируемом формате может располагаться любое число разделителей между двумя последовательными лексемами в паре тегов.
В экспортируемом формате не должно быть разделителей между левой квадратной скобкой и названием тега, а также между значением тега и правой квадратной скобкой. Между названием и значением тега должен быть ровно один пробел.
Названия тегов, ровно как и все словарные лексемы зависят от регистра. Все имена тегов, предназначенные для архивного хранения, должны начинаться с заглавной буквы.
В импортируемом PGN формате несколько пар тегов могут находится в одной строке, а также одна пара тегов может занимать несколько строк. В экспортируемом формате каждая пара тегов должна занимать ровно одну строку и быть выровнена по левому краю. за последней парой тегов должна следовать пустая строка.
Некоторые значения тегов могут состоять из нескольких составных частей. Например, в партиях может быть более одного игрока с каждой стороны. В таком случае между составными частями тега должно вставляться двоеточие (":"). Вследствие этого, двоеточие не должно появляться внутри строки ни в каком другом качестве.
Семь обязательных пар тегов (STR)
В каждой партии должны присутствовать семь тегов --- STR (Seven Tag Roster). Они используются для архивного хранения PGN данных. Их значения чётко определены, ровно как и порядок, в котором эти теги должны следовать. Хотя добавление и использование дополнительных тегов разрешается и даже приветствуется, STR - это тот общий фундамент, который должны понимать все программы для обмена PGN данными.
Для импортируемого формата порядок следования пар тегов не важен. В экспортируемом формате STR должны следовать перед всеми остальными парами тегов. (Для STR также важен порядок, в котором следуют теги. Этот порядок приведён в списке ниже). Все дополнительные пары тегов в экспортируемом формате должны следовать в алфавитном порядке по названию тега.
В очень многих PGN файлах, особенно полученных с шахматных сайтов, эти требования не выполняются. Некоторые из семи тегов могут отсутствовать или следовать в другом порядке. Их названия также могут быть записаны только прописными или только заглавными буквами.
Названия семи обязательных тегов (по порядку):
Event (Название турнира или матча)
Site (Место проведения партии)
Date (Дата начала партии)
Round (Номер раунда в турнире)
White (Имя игрока белыми фигурами)
Black (Имя игрока чёрными фигурами)
Result (Результат партии)
Список из дополнительных имён тегов приведен ниже.
В экспортируемом формате после последней пары тегов идёт пустая строка, завершающая секцию пар тегов. Это помогает распознающим программам быстро обнаружить окончание секции пар тегов и начало записи партии.
Event
Тег Event должен быть достаточно полным. Желательно избегать аббревиатур, если это возможно. Чтобы помочь сканирующим программам, названия событий должны оформляться единообразно. Если событие неизвестно, в качестве значения тега должен указываться знак вопроса.
Примеры:
[Event "FIDE World Championship"]
[Event "Moscow City Championship"]
[Event "ACM North American Computer Championship"]
[Event "?"]
Site
Тег Site должен содержать название города, региона и стандартное название страны, в которой проводится партия. Страну рекомендуется называть с помощью трёхбуквенного кода, используемого в МОК (Международном олимпийском комитете), если такой код доступен. Если место проведения партии неизвестно, в качестве значения тега должен указываться знак вопроса. Для отделения города от региона можно использовать запятую. Для разделения города или региона от кода страны запятая не требуется.
Примеры:
[Site "New York City, NY USA"]
[Site "St. Petersburg RUS"]
[Site "Riga LAT"]
[Site "?"]
Date
Тег Date указывает на дату начала партии (она не обязана совпадать с датой начала турнира, чемпионата или другого события). Использоваться должно местное время того региона, который указан в теге Site. Значение тега Date должно записываться в следующем формате из десяти символов: "ГГГГ.ММ.ДД". Первые четыре символа дают год, далее следует точка, следующие два символа дают месяц, далее идёт точка и последние два символа дают день. Если какое-то из трёх данных неизвестно, вместо соответствующих цифр должны записываться знаки вопроса.
Примеры:
[Date "1992.08.31"]
[Date "1993.??.??"]
[Date "2001.01.01"]
Round
Тег Round указывает на раунд соревнования, в котором проводится партия. В матчах это обычно номер сыгранной партии. Если к данной партии понятие раунда неприменимо, то поле должно содержать прочерк ("-"). Если раунд неизвестен, то в поле должен записываться знак вопроса. В некоторых соревнованиях используется нестандартная нумерация раундов, имеются составные раунды и даже раунды, зависящие от условий. В этом случае составной раунд может записываться с помощью последовательности целочисленных номеров раундов, разделённых точками. Левое число представляет собой наиболее существенный раунд и следующие числа представляют подраунды в убывающем порядке.
Примеры:
[Round "1"]
[Round "3.1"]
[Round "4.1.2"]
White
Значение тега White - имя игрока, играющего белыми фигурами. Первой должна записываться фамилия. Если записывается имя или инициалы, они должны быть отделены от фамилии запятой и пробелом. Инициалов может быть несколько. После каждой запятой должен следовать пробел, после каждого инициала должна следовать точка. Если имя неизвестно, то в качестве значения тега записывается знак вопроса.
Если за белых играют несколько игроков, то имена перечисляются в алфавитном порядке и разделены между собой двоеточиями. Для компьютерной программы после имени программы должна указываться информация о соответствующей версии.
Для имён игроков можно использовать формат, принятый в рейтинг листе ФИДЕ.
Примеры:
[White "Tal, Mikhail N."]
[White "van der Wiel, Johan"]
[White "Rybka v.2.3.2"]
[White "?"]
Black
Значение тега Black - имя игрока, играющего чёрными фигурами. Оно должно подчиняться тем же правилам, что и тег White.
Result
Тег Result указывает на результат партии. Он должен всегда совпадать с завершающим партию маркером. (в некоторых файлах этот тег может отсутствовать, либо может отсутствовать завершающий маркер. Так что на это правило полагаться не стоит) Он должен принимать одно из следующих значений:
"1-0": Выиграли белые;
"0-1": Выиграли чёрные;
"1/2-1/2": Ничья;
"*": Игра продолжается, прервана или результат неизвестен.
В первых двух случаях используется цифра ноль (код 0x30), а не буква "O" (код 0x4F).
Цель такого строгого задания значений тегов --- сделать возможной сортировку и поиск по ним в независимости от региональных традиций. Однако всё равно, каждая организация, компания или человек использует свои названия для турниров, и свою запись для имён игроков. В результате возникает большая проблема при компоновке баз партий из нескольких различных источников. Один и тот же игрок или турнир может в них называться по-разному.
Запись партии
Запись партии состоит из шахматных ходов, их номеров, возможных альтернативных ответвлений и подводящего итог завершающего маркера.
Поскольку неправильные ходы не являются действительно шахматными ходами, они недопустимы в записи партии. Однако в комментариях они вполне могут появиться.
Выравнивание строк в записи партии
В импортируемом PGN формате лексемы в записи партии не требуют какого-либо выравнивания.
В экспортируемом формате лексемы должны выравниваться по левому краю в последовательных строках. Каждая строка должна содержать не более 80 печатаемых символов. В каждой строке помещается максимальное возможное число лексем. Любые две подряд идущие в одной строке словарные лексемы должны разделяться ровно одним пробелом. Как и в случае с парами тегов, после записи партии должна следовать ровно одна пустая строка.
Ни первый, ни последний символ в строке в экспортируемом PGN формате не должен быть пробелом.
Номера ходов
Номер хода представляет собой числовую лексему, за которой следует несколько точек (возможно, ни одной). Число задаёт номер для следующего непосредственно за ним хода белых (если он присутствует), а также для последующего хода чёрных (если он присутствует). Импортируемый формат не требует, чтобы номера ходов обязательно присутствовали. Он также не запрещает присутствие лишних номеров ходов, если они заданы корректно.
В импортируемом формате после номера хода может следовать несколько точек. Между точками и номером хода могут присутствовать несколько пробелов. В экспортируемом формате непосредственно перед ходом белых ставится ровно одна точка, а непосредственно перед ходом чёрных --- ровно три. При этом между номером хода и точками пробелов быть не должно.
В экспортируемом формате перед каждым белым ходом обязательно должен присутствовать номер. Перед ходом чёрных номер должен писаться только в одном из двух случаев: во-первых, если между ходом белых и чёрных присутствует комментарий или ответвление. Во-вторых, если если перед ходом чёрных ход белых отсутствует, то есть когда партия начинается с позиции, где начинают чёрные. Во всех остальных случаях в экспортируемом формате перед ходом чёрных номер не ставится.
Запись хода
Для записи ходов в PGN используется сокращённая нотация (SAN). Сама по себе она может использовать названия фигур на разных языках. Хотя спецификация и допускает использование других языков, это может привести к путанице в названиях фигур. Поэтому всегда используются английские названия фигур.
Каждая клетка шахматной доски в SAN кодируется двумя символами. Первый символ записывает столбец доски (от a до h). Второй символ записывает строку (от 1 до 8). Например, изначальная позиция белой ладьи со стороны ферзя --- a1, чёрного короля --- e8. Фигуры кодируются следующим образом:
пешка - P;
конь - N;
слон - B;
ладья - R;
ферзь - Q;
король - K.
В экспортируемом формате символ P для пешки опускается. Однако рекомендуется всё-таки распознавать этот символ. Ни разу не встречал записи P в партиях.
Самый простой ход в формате SAN записывается в виде символа фигуры (для пешки оно не пишется), за которым сразу следуют координаты клетки, куда фигура перемещается. Если при этом происходит взятие, то перед координатами клетки назначения пишется символ "x". При взятии пешкой непосредственно перед символом "x" указывается столбец, с которого это взятие произошло.
Королевская рокировка кодируется как O-O. Ферзевая рокировка кодируется как O-O-O. Обратите внимание, что здесь используется заглавная латинская буква "O", а не цифра ноль (мне встречался PGN, где был как раз ноль).
Взятие на проходе не имеет специального обозначения. Оно записывается также, как если бы взятая пешка стояла в клетке назначения походившей пешки. Продвижения пешки записываются с помощью символа "=", который записывается сразу же после клетки назначения, и символа фигуры, в которую превратилась пешка, следующего сразу за знаком равенства.
Если приведенной информации недостаточно, чтобы однозначно определить ход (несколько одинаковых фигур могут походить в заданную клетку), то выбирается первый из следующих трёх шагов, который определит ход однозначно:
Если перемещающаяся фигура однозначно определяется по названию столбца изначальной клетки, то это название добавляется сразу после символа фигуры.
Если перемещающаяся фигура однозначно определяется по номеру строки изначальной клетки, то этот номер добавляется сразу после символа фигуры.
Если два предыдущих шага не работают, то сразу после символа фигуры записываются две координаты (название столбца и номер строки) изначальной клетки перемещающейся фигуры.
Отметим, что при устранении противоречий учитываются только допустимые ходы. Например, рассмотрим позицию с двумя белыми конями, один на c3, а другой на g1, с пустой клеткой e2. Ходят белые. Оба коня атакуют клетку e2 и если они оба могут на неё пойти, то соответствующие (нешахующие) ходы будут "Nce2" и "Nge2". Однако если на e1 стоит белый король, а на b4 --- чёрный слон, то теперь только один конь может пойти на e2. В этом случае ход запишется как "Ne2".
Если в результате хода ставится шах, то в конце хода добавляется символ "+". Если же ставится мат, то в конце хода добавляется символ "#".
Наличие или отсутствие индикатора мата или шаха никогда не используется для устранения неоднозначности хода. То есть, если две (или более) одинаковые фигуры могут переместиться на одну и ту же клетку, то различие в шахующем статусе ходов не является причиной, чтобы не производить устранение неоднозначности.
Никаких специальных символов не используется для обозначения двойного шаха или вскрытого шаха. Также нет специальных символов для обозначения ничейных ходов.
Таким образом в нотации SAN длина записи хода варьируется от двух символов (например, "d4") до семи (например, "Qa6xb7#" или "fxg1=Q+"). В среднем же длина хода немногим превосходит три.
Экспортируемый формат всегда должен использовать описанную выше запись хода. В импортируемом формате возможны отклонения от канонической записи. Однако для разных просмотрщиков PGN они могут отличаться. И только стандартная запись хода будет гарантированно читаться во всех программах, работающих с PGN.
Пример: начальная позиция, ходят белые.
1. e4 {Белая пешка пошла с e2 на e4} 1... c5 {Чёрная пешка пошла с e7 на e5} 2.
Nf3 {Белый конь пошёл с g1 на f3} 2... Nc6 3. d4 cxd4 {Чёрная пешка с c5 забрала
белую пешку на d4} 4. Nxd4 g6 5. Nc3 Bg7 {Чёрный слон пошёл с f8 на g7} 6. Be3
Nf6 7. Bc4 Qa5 8. O-O {Белые произвели короткую рокировку} 8... O-O 9. Bb3 d6
10. h3 Bd7 11. Re1 Rac8 {На c8 претендуют сразу две чёрные ладьи, поэтому
запускается механизм устранения противоречий. В итоге пошла ладья с a8 на c8}
12. Nd5 Rfe8 13. Nxe7+ {Конь с d5 забрал пешку на e7 с шахом} 13... Nxe7
Числовая метка хода (NAG)
NAG используется для задания некоторой простой характеристики хода или позиции в виде, независящем от языка. В записи партии она задаётся с помощью лексемы числовая метка. Целое число в этой лексеме должно быть от 0 до 255. Список возможных значений числовых меток см далее.
Ответвления
Ответвление записывается в виде последовательности из одного или более ходов, которые заключаются в круглые скобки. Эта последовательность должна легально играться из позиции, которая получается до хода, находящегося непосредственно перед записью ответвления.
Допускаются вложенные ответвления. Уровень вложенности ответвлений не ограничен. Кроме того, у позиции может быть несколько ответвлений. Тогда они пишутся друг за другом.
Пример: начальная позиция, ходят белые.
1. e4 ({Популярно ещё такое начало} 1. d4) ({и такое} 1. Nf3) 1... Nf6 2. e5
Nd5 3. d4 (3. c4 Nb6 4. Nc3 d6 5. Nf3 (5. exd6 cxd6)) 3... d6 4. c4 Nb6 5. f4
dxe5 6. fxe5 Nc6
Завершающий маркер
Запись каждой партии должна заканчиваться ровно одним завершающим маркером. Маркер всегда является самым последним элементом записи партии. Он описывает результат партии. Маркер может принимать одно из следующих четырёх значений:
1-0 --- белые выиграли;
0-1 --- чёрные выиграли;
1/2-1/2 --- ничья;
* --- игра продолжается, результат неизвестен либо игра заброшена.
Отметим, что здесь используется цифра ноль, а не заглавная буква O. Завершающий маркер в партии обязан совпадать с тегом result.
Во многих PGN завершающий маркер отсутствует. В этом случае его значение можно взять из тега result либо, если тег тоже отсутствует, положить равным "*".
Дополнительные теги
Здесь мы приведём набор тегов и их синтаксис, которые рекомендуется использовать для сохранения информации, не входящей в семь обязательных тегов. Пользоваться этими рекомендациями не обязательно, но желательно.
Информация об игроке
Отметим, что если в одном из полей White или Black записано более одного игрока, то и в каждом из следующих тегов должна присутствовать информация о каждом из них, разделённая двоеточиями. Порядок следования информации об игроках должен быть таким же, как и порядок следования игроков. Например, если значение поля White равно "Jones:Smith:Zacharias", то тег WhiteTitle будет иметь значение "IM:-:GM", если Джонс был международным мастером, Смит не имел титула, а Захариас был гроссмейстером.
WhiteTitle, BlackTitle. Используется для обозначения титула игрока, выданного ФИДЕ. Возможные значения: "FM" (мастер), "IM" (международный мастер), "GM" (гроссмейстер) и "-" (без титула).
WhiteElo, BlackElo. Принимает целочисленное значение --- Elo рейтинг игрока по версии ФИДЕ. Значение "-" означает, что у игрока рейтинг отсутствует.
WhiteUSCF, BlackUSCF. Принимает целочисленное значение --- рейтинг игрока по версии USCF (United States Chess Federation).
Аналогичные теги можно задать и для других рейтинговых организаций.
WhiteNA, BlackNA. Принимает строковое значение --- e-mail или интернет адрес игрока. Значение "-" используется для игрока без электронного адреса.
WhiteType, BlackType. Принимает строковое значение --- тип игрока. Для игрока-человека должно использоваться значение "human", а для компьютерной программы --- значение "program".
Информация о мероприятии
EventDate. Формат этой записи совпадает с форматом тега Date. Указывает дату начала мероприятия (турнира, чемпионата и т.д.).
EventSponsor. Принимает строковое значение --- название или имя спонсора мероприятия.
Section. Принимает строковое значение --- название игровой секции турнира (например, "OpenReserve").
Stage. Принимает строковое значение --- этап мероприятия, если оно многоэтапное (например, "Preliminary" или "Semifinal"). Английские названия предпочтительнее, если PGN предполагается для международного использования. В противном случае можно использовать названия и на других языках.
Board. Принимает целочисленное значение --- номер доски для командных игр или при сеансе одновременной игры.
Информация о дебюте
Многие названия дебютов различаются от страны к стране или даже от одной шахматной школы к другой.
Opening. Принимает строковое значение --- название сыгранного дебюта.
Variation. Принимает строковое значение --- вариацию сыгранного дебюта.
SubVariation. принимает строковое значение --- подвариацию сыгранного дебюта.
Например, в качестве значений этих трёх тегов может быть:
[Opening "Сицилианская защита"]
[Variation "Найдорф"]
[SubVariation "Атака Созина"]
ECO. Формат этой записи имеет вид "XDD" или "XDD/DD", где "X" может быть любым символом от A до E, а "D" может быть любой из цифр. Этот код используется для определения дебюта из специальной пятитомной энциклопедии дебютов (Encyclopedia of Chess Openings, ECO).
NIC. Принимает строковое значение --- название дебюта из базы данных New in Chess.
Информация о времени и дате
Теги в этом разделе конкретизируют информацию о времени и дате, связанную с партией.
Time. Определяет точное время начала партии. Имеет формат "HH:MM:SS", где "HH" означают часы, MM --- минуты, а SS --- секунды. Время берётся локальным относительно места, заданного в теге Site.
UTCTime. Формат тега такой же, как и у Time, только здесь указывается всемирное координированное время (UTC).
UTCDate. Формат тега такой же, как и у Date, только здесь указывается дата в соответствии с UTC.
Контроль времени
Для описания контроля времени, используемого в партии, используется следующий тег:
TimeControl
Он представляет собой список из одного или более полей контроля времени. Каждое поле содержит дескриптор для одного периода временного контроля партии. Если в теге присутствует более одного дескриптора, то они разделяются двоеточиями (":"). Дескрипторы записываются в том же порядке, в каком они использовались в партии. Предполагается, что последнее поле будет повторяться для всех оставшихся периодов, если таковые имеются.
Всего имеется шесть различных видов полей TimeControl:
Простой знак вопроса ("?"). Это означает, что контроль времени неизвестен. Обычно этот дескриптор является единственным в теге.
Простой знак дефиса ("-"). Означает, что контроля времени не использовалось. Обычно этот дескриптор является единственным в теге.
Формируется из двух целых чисел, разделённых между собой символом косой черты ("/"). Первое число означает число ходов в периоде, второе --- число секунд, отведённое на период. Так, например, если в партии на 40 ходов отводится два с половиной часа, то поле будет записано как "40/9000".
Состоит из одного целого числа. Оно определяет число секунд, отведённых на всю оставшуюся партию. Это поле всегда должно быть последним в списке. Например, для блица (партии на 5 минут) тег TimeControl записывается как "300".
Следующий вид поля используется для контроля с добавлением времени. Это поле всегда должно быть последним в списке. Формат состоит из двух целых чисел, разделённых между собой знаком плюс ("+"). Первое число указывает на минимальное количество секунд, выделенных на период, а второе --- количество секунд, которые будут добавляться после каждого сделанного хода. Например, если контроль времени составляет 90 минут плюс минуту на каждый сделанный ход, то поле будет записано как "4500+60".
Формируется из знака звёздочки ("*"), за которой следует целое число. Используется для контроля времени типа "песочные часы". Это поле всегда должно быть последним в списке и обычно оно является единственным. Число задаёт общее число секунд, на которое рассчитаны песочные часы. Контроль времени будет происходить следующим образом: в начале каждому игроку выделяется времени поровну (половина от заданного в поле числа). Затем время, затрачиваемое одним игроком на обдумывание, автоматически прибавляется его сопернику (эмуляция переворачивания песочных часов).
При необходимости могут быть добавлены и другие виды полей TimeControl.
Информация об альтернативной стартовой позиции
SetUp. Принимает одно из значений "0" или "1". Первый вариант будет означать, что партия начинается со стандартной стартовой позиции, а второй --- что стартовая позиция будет нестандартной. Если значение SetUp равно "1", то в PGN должен присутствовать также и тег FEN.
FEN. Он использует строковый формат, в который записывается стартовая позиция в формате FEN. Этот тег обязательно должен присутствовать в PGN, если значение тега SetUp равно "1".
Остальные теги
В PGN могут быть использованы ещё следующие теги:
Termination. Принимает строковое значение, описывающее, как закончилась партия. То есть, этот тег предоставляет более полную информацию к тегу Result. Возможные значения:
"abandoned" - игра заброшена.
"adjudication" - результат игры был присвоен судьёй.
"death" - проигравший игрок куда-то исчез (прекратил игру).
"emergency" - игра завершилась из-за непредвиденных обстоятельств.
"normal" - игра закончилась в обычном режиме.
"rules infraction" - игроку присуждено поражение вследствие нарушения либо шахматных правил, либо правил турнира.
"time forfeit" - игрок уронил флаг (проиграл, не уложившись в контроль времени).
"unterminated" - игра не закончена.
Annotator. Его формат совпадает с форматом White. Содержит имя (или несколько имён) комментатора партии.
Mode. принимает стоковое значение, указывающее, каким образом игралась партия. Некоторые возможные варианты:
"OTB" - за шахматной доской;
"PM" - по бумажной переписке;
"EM" - по электронной переписке;
"ICS" - на шахматном сервере в интернете.
PlyCount. Принимает целочисленное значение. Равно количеству сделанных в партии полуходов.
Значения числовых меток
В PGN можно использовать значения числовых меток от 0 до 139. Остальные значения зарезервированы и, возможно, когда-нибудь будут задействованы.
Метка 0 --- пустая и не несёт в себе какой-либо информации. Она присутствует скорее для удобства разработчиков. В экспортируемом формате такие метки встречаться не должны.
Метки с 1 по 9 характеризуют сделанный ход.
Метки с 10 по 135 характеризуют текущую позицию.
Метки с 136 по 139 характеризуют контроль времени.
Полный список меток
0 --- Пустая метка;
1 --- Сильный ход (традиционное "!");
2 --- Слабый ход (традиционное "?");
3 --- Отличный ход (традиционное "!!");
4 --- Грубая ошибка (традиционное "??");
5 --- Интересный ход (традиционное "!?");
6 --- Сомнительный ход (традиционное "?!");
7 --- Форсированный ход (все остальные быстро приводят к поражению);
8 --- Единственный ход (нет разумных альтернатив);
9 --- Наихудший ход;
10 --- Ничейная позиция;
11 --- Равные шансы, спокойная позиция;
12 --- Равные шансы, активная позиция;
13 --- Позиция неясная;
14 --- У белых небольшое преимущество;
15 --- У чёрных небольшое преимущество;
16 --- У белых умеренное преимущество;
17 --- У чёрных умеренное преимущество;
18 --- У белых решающее преимущество;
19 --- У чёрных решающее преимущество;
20 --- У белых абсолютное преимущество (чёрным следует сдаться);
21 --- У чёрных абсолютное преимущество (белым следует сдаться);
22 --- Белые в цугцванге;
23 --- Чёрные в цугцванге;
24 --- У белых небольшое преимущество в пространстве;
25 --- У чёрных небольшое преимущество в пространстве;
26 --- У белых умеренное преимущество в пространстве;
27 --- У чёрных умеренное преимущество в пространстве;
28 --- У белых решающее преимущество в пространстве;
29 --- У чёрных решающее преимущество в пространстве;
30 --- У белых небольшое преимущество во времени;
31 --- У чёрных небольшое преимущество во времени;
32 --- У белых умеренное преимущество во времени;
33 --- У чёрных умеренное преимущество во времени;
34 --- У белых решающее преимущество во времени;
35 --- У чёрных решающее преимущество во времени;
36 --- Инициатива у белых;
37 --- Инициатива у чёрных;
38 --- У белых устойчивая инициатива;
39 --- У чёрных устойчивая инициатива;
40 --- Белые атакуют;
41 --- Чёрные атакуют;
42 --- У белых нет достаточной компенсации за недостаток материала;
43 --- У чёрных нет достаточной компенсации за недостаток материала;
44 --- У белых достаточная компенсация за недостаток материала;
45 --- У чёрных достаточная компенсация за недостаток материала;
46 --- У белых более чем достаточная компенсация за недостаток материала;
47 --- У чёрных более чем достаточная компенсация за недостаток материала;
48 --- У белых небольшое преимущество в контроле центра;
49 --- У чёрных небольшое преимущество в контроле центра;
50 --- У белых умеренное преимущество в контроле центра;
51 --- У чёрных умеренное преимущество в контроле центра;
52 --- У белых решающее преимущество в контроле центра;
53 --- У чёрных решающее преимущество в контроле центра;
54 --- У белых небольшое преимущество на королевском фланге;
55 --- У чёрных небольшое преимущество на королевском фланге;
56 --- У белых умеренное преимущество на королевском фланге;
57 --- У чёрных умеренное преимущество на королевском фланге;
58 --- У белых решающее преимущество на королевском фланге;
59 --- У чёрных решающее преимущество на королевском фланге;
60 --- У белых небольшое преимущество на ферзевом фланге;
61 --- У чёрных небольшое преимущество на ферзевом фланге;
62 --- У белых умеренное преимущество на ферзевом фланге;
63 --- У чёрных умеренное преимущество на ферзевом фланге;
64 --- У белых решающее преимущество на ферзевом фланге;
65 --- У чёрных решающее преимущество на ферзевом фланге;
66 --- У белых уязвимая первая горизонталь;
67 --- У чёрных уязвимая первая горизонталь;
68 --- У белых первая горизонталь надёжно защищена;
69 --- У чёрных первая горизонталь надёжно защищена;
70 --- Король белых слабо защищён;
71 --- Король чёрных слабо защищён;
72 --- Король белых хорошо защищён;
73 --- Король чёрных хорошо защищён;
74 --- Король белых неудачно расположен;
75 --- Король чёрных неудачно расположен;
76 --- Король белых хорошо расположен;
77 --- Король чёрных хорошо расположен;
78 --- У белых очень слабая пешечная структура;
79 --- У чёрных очень слабая пешечная структура;
80 --- У белых умеренно слабая пешечная структура;
81 --- У чёрных умеренно слабая пешечная структура;
82 --- У белых умеренно сильная пешечная структура;
83 --- У чёрных умеренно сильная пешечная структура;
84 --- У белых очень сильная пешечная структура;
85 --- У чёрных очень сильная пешечная структура;
86 --- У белых неудачное расположение коня;
87 --- У чёрных неудачное расположение коня;
88 --- У белых удачное расположение коня;
89 --- У чёрных удачное расположение коня;
90 --- У белых неудачное расположение слона;
91 --- У чёрных неудачное расположение слона;
92 --- У белых удачное расположение слона;
93 --- У чёрных удачное расположение слона;
94 --- У белых неудачное расположение ладьи;
95 --- У чёрных неудачное расположение ладьи;
96 --- У белых удачное расположение ладьи;
97 --- У чёрных удачное расположение ладьи;
98 --- У белых неудачное расположение ферзя;
99 --- У чёрных неудачное расположение ферзя;
100 --- У белых удачное расположение ферзя;
101 --- У чёрных удачное расположение ферзя;
102 --- У белых слабая координация фигур;
103 --- У чёрных слабая координация фигур;
104 --- У белых хорошая координация фигур;
105 --- У чёрных хорошая координация фигур;
106 --- Белые сыграли в дебюте очень слабо;
107 --- Чёрные сыграли в дебюте очень слабо;
108 --- Белые слабо сыграли в дебюте;
109 --- Чёрные слабо сыграли в дебюте;
110 --- Белые хорошо сыграли в дебюте;
111 --- Чёрные хорошо сыграли в дебюте;
112 --- Белые сыграли в дебюте очень хорошо;
113 --- Чёрные сыграли в дебюте очень хорошо;
114 --- Белые сыграли в миттельшпиле очень слабо;
115 --- Белые сыграли в миттельшпиле очень слабо;
116 --- Белые слабо сыграли в миттельшпиле;
117 --- Чёрные слабо сыграли в миттельшпиле;
118 --- Белые хорошо сыграли в миттельшпиле;
119 --- Чёрные хорошо сыграли в миттельшпиле;
120 --- Белые сыграли в миттельшпиле очень хорошо;
121 --- Чёрные сыграли в миттельшпиле очень хорошо;
122 --- Белые сыграли в эндшпиле очень слабо;
123 --- Чёрные сыграли в эндшпиле очень слабо;
124 --- Белые слабо сыграли в эндшпиле;
125 --- Чёрные слабо сыграли в эндшпиле;
126 --- Белые хорошо сыграли в эндшпиле;
127 --- Чёрные хорошо сыграли в эндшпиле;
128 --- Белые сыграли в эндшпиле очень хорошо;
129 --- Чёрные сыграли в эндшпиле очень хорошо;
130 --- У белых небольшая контригра;
131 --- У чёрных небольшая контригра;
132 --- У белых умеренная контригра;
133 --- У чёрных умеренная контригра;
134 --- У белых решающая контригра;
135 --- У чёрных решающая контригра;
136 --- Белых умеренно поджимает время
137 --- Чёрных умеренно поджимает время;
138 --- Белых сильно поджимает время ;
139 --- Чёрных сильно поджимает время;
Модельная партия
Напоследок приведём пример партии, записанной по всем правилам PGN:
[Event "F/S Return Match"]
[Site "Belgrade, Serbia JUG"]
[Date "1992.11.04"]
[Round "29"]
[White "Fischer, Robert J."]
[Black "Spassky, Boris V."]
[Result "1/2-1/2"]
1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3
O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15.
Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21.
Nc4 Nxc4 22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7
27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33.
f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5
40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2 |