359 lines
14 KiB
Plaintext
359 lines
14 KiB
Plaintext
|
Standard: Portable Game Notation Specification and Implementation Guide
|
||
|
(Supplement)
|
||
|
Revised: 8 September 2001
|
||
|
Status: Final draft
|
||
|
Authors: Alan Cowderoy (Palamede), Ben Bulsink (DGT Projects), Andrew Templeton
|
||
|
(Palamede/Palview), Eric Bentzen (Enpassant.dk, Palamede), Mathias Feist
|
||
|
(Chessbase), Victor Zakharov (Chess Assistant).
|
||
|
Contact: alan@cowderoy.com
|
||
|
|
||
|
1. Introduction
|
||
|
|
||
|
PGNs combination of a formal specification for computer use with easy
|
||
|
readability and manipulation by humans has firmly established it as the data
|
||
|
format of choice for representing chess games. This is a major success and a
|
||
|
tribute to the quality of the work done by the original authors.
|
||
|
|
||
|
Steven Edwards, the author, appears unfortunately to be no longer involved with
|
||
|
PGN and there is now no defined means of arbitrating and implementing proposed
|
||
|
changes. There is also a huge body of software which implements the current
|
||
|
standard and would break in various ways if it were changed.
|
||
|
|
||
|
At the same time the increased use of DGT boards in major tournaments for the
|
||
|
retransmission of live games has rendered one of the features that was planned
|
||
|
for PGN but never implemented increasingly important, namely the possibility of
|
||
|
encoding time information relating to each move.
|
||
|
|
||
|
Without the possibility of encoding time information in PGN its usefulness in
|
||
|
the retransmission of live games is significantly weakened forcing developpers
|
||
|
either to resort to proprietary formats or to break the standard.
|
||
|
|
||
|
Computer chess program authors are also now finding that they have no accepted
|
||
|
way to encode such simple and recognised concepts as numeric position
|
||
|
evaluations or search depth.
|
||
|
|
||
|
Given this situation some have understandably set about defining wholly new XML
|
||
|
based definitions for encoding chess games. While this work is interesting, as
|
||
|
of today there is no widely accepted and supported XML schema.
|
||
|
|
||
|
It thus seems important to us to attempt an incremental improvement to PGN
|
||
|
intended to eliminate the functional weaknesses described above.
|
||
|
|
||
|
This document proposes an extension to PGN designed to offer an immediate 'work
|
||
|
around' solution to the problems outlined above.
|
||
|
|
||
|
2. Design aims
|
||
|
2.1 The enhancements must not break the existing standard.
|
||
|
|
||
|
This rules out new syntactical elements. Steve Edwards himself proposed a format
|
||
|
(BIF) that would have resolved these problems but it was never implemented and
|
||
|
doing so now would break large quantities of software.
|
||
|
|
||
|
2.2 The enhancements should maintain the ease of use and legibility so
|
||
|
characteristic of PGN.
|
||
|
|
||
|
This rules out very precise but possibly more computer readable formats in
|
||
|
favour of clearer human readable ones.
|
||
|
|
||
|
2.3 If new command structures are to be introduced they should be specified in
|
||
|
such a way that they are usable for other extensions if needed.
|
||
|
|
||
|
The intention here is to provide a generalised syntax that will enable other
|
||
|
extensions rather than only solving one particular problem (time handling in our
|
||
|
case).
|
||
|
|
||
|
3. Proposals
|
||
|
3.1 Introduction
|
||
|
|
||
|
The only way to extend the syntax without breaking the standard is to embed the
|
||
|
new command syntax into PGN comments. This is a kludge and such an obvious one
|
||
|
that it was already suggested when Steve Edwards proposed the BIF format in
|
||
|
1996. It is still the only option available.
|
||
|
|
||
|
Apart from a general command syntax we propose several specific commands
|
||
|
designed for the handling of time information.
|
||
|
|
||
|
We also propose the addition of a tag to the header to handle the state of the
|
||
|
"running clock" where the game is being transmitted live and two other optional
|
||
|
tags designed to handle special cases where the clock start times are needed.
|
||
|
|
||
|
These additions are not problematic as the standard concedes the possibility of
|
||
|
adding new tags to the header (outside the mandatory seven tag roster)
|
||
|
|
||
|
Interpreting time information for a game is either difficult or impossible if
|
||
|
the time controls in force are not known. PGN has a TimeControl tag for this and
|
||
|
it should be regarded as mandatory when time information is to be embedded into
|
||
|
the pgn.
|
||
|
|
||
|
3.2 A generalised format for embedding commands in comments.
|
||
|
3.2.1 Position
|
||
|
An embedded command may occur at any position in a standard PGN comment, ie
|
||
|
between { } .
|
||
|
For example:
|
||
|
{Optional leading comments [%clk 1:05:23] optional trailing comments} where
|
||
|
[%clk 1:05:23] is the embedded command string.
|
||
|
|
||
|
3.2.2 Structure
|
||
|
The command string is structured as follows.
|
||
|
|
||
|
A leading tag of [%
|
||
|
A command name consisting of one or more alphanumeric characters.
|
||
|
A space character.
|
||
|
Either a single parameter or a comma delimited list of parameter values.
|
||
|
A closing tag of ]
|
||
|
|
||
|
For example:
|
||
|
[%clk 1:05:23]
|
||
|
|
||
|
3.2.3 Opening delimiter
|
||
|
The characters [% are redefined to indicate the start of a command sequence when
|
||
|
found in between pgn comment tags.
|
||
|
|
||
|
As all ASCII characters are legal in a comment string it is not possible to rely
|
||
|
on any single character as an unambiguous opening delimiter. We have chosen to
|
||
|
use [%. While this also could technicaly occur in some other context it seems
|
||
|
highly unlikely.
|
||
|
|
||
|
3.2.3 Commands
|
||
|
|
||
|
Command names start immediately after the [%.
|
||
|
They consist of one or more alphanumeric characters
|
||
|
They are terminated by the first space character encountered.
|
||
|
|
||
|
We are *not* proposing any fixed canonical list of commands. The idea is to
|
||
|
describe a generalised command syntax, not to impose a particular set of
|
||
|
commands.
|
||
|
|
||
|
We *are* proposing a set of commands to deal with time handling. "clk" in the
|
||
|
example above is the proposed command name for recording move times. See section
|
||
|
4 for the detailed specification of this and other time related commands.
|
||
|
|
||
|
In general software encountering an embedded command it does not understand
|
||
|
should take no special action and pass the string through unchanged as part of
|
||
|
the comment.
|
||
|
|
||
|
For display purposes only presentation software, such as pgn readers, should by
|
||
|
default strip out all commands before display in order to improve legibility.
|
||
|
|
||
|
3.2.4 Parameters
|
||
|
|
||
|
This parameter syntax is based on the epd opcode syntax described at 16.2.4 of
|
||
|
the pgn spec.
|
||
|
|
||
|
A command is followed by a single space and then either by a single operand or
|
||
|
by a comma separated list of operands.
|
||
|
|
||
|
An operand is either:
|
||
|
i) a set containing any ascii characters except the comma and right hand square
|
||
|
bracket
|
||
|
or
|
||
|
ii) a double quoted string containing a set of any ascii characters except the
|
||
|
double quote.
|
||
|
|
||
|
For instance:
|
||
|
[%command 1:45:12,Nf6,"very interesting, but wrong"]
|
||
|
|
||
|
This command has four operands, a time value, a san move value and a double
|
||
|
quote delimitted string. Note that the quote delimitted string may contain
|
||
|
commas.
|
||
|
|
||
|
Commas are illegal in non quote delimitted strings because the comma serves as
|
||
|
the operand list separator.
|
||
|
|
||
|
Right hand square brackets are illegal in non quote delimitted strings because
|
||
|
they terminate both the last operand and the command.
|
||
|
|
||
|
We have thus departed from the epd opcode specification in two ways:
|
||
|
i) The operand list is separated using a comma rather than a space.
|
||
|
ii) Space characters are allowed in non quote delimited operands
|
||
|
|
||
|
So it is possible to pass a full FEN string as an unquoted operand as in the
|
||
|
example below.
|
||
|
|
||
|
[%command "very tense start to the
|
||
|
game",4r1k1/pp1b2r1/2n1pq1p/3p2pP/2pP2B1/P1P1Q3/2P2PPB/R4RK1 w - - 0 1,e4,d4]
|
||
|
|
||
|
This command has four operands, the first is a double quote delimitted string,
|
||
|
the second is a FEN, the third is e4 and the fourth is d4.
|
||
|
|
||
|
3.2.5 Terminator
|
||
|
The command is terminated by a single ] character.
|
||
|
|
||
|
3.2.6 Multiple commands.
|
||
|
A single comment tag may contain multiple embedded commands.
|
||
|
For instance:
|
||
|
{[%clk 0:00:07][%eval -6.05] White is toast}
|
||
|
|
||
|
4. Time handling commands.
|
||
|
4.1 Introduction.
|
||
|
We propose the following commands for time handling The first is the command
|
||
|
that DGT boards will be using to transmit times via pgn.
|
||
|
|
||
|
The other commands are optional and cover times that can be derived from the
|
||
|
clock time. They are technicaly redundant but may be usefull for highlighting
|
||
|
aspects of the game and the players use of time.
|
||
|
|
||
|
All these commands take one and only one parameter which is a time value in the
|
||
|
format h:mm:ss (except for the mct command which requires hh:mm:ss)
|
||
|
|
||
|
The comments containing the embedded commands are to be taken as referring to
|
||
|
the move immediately preceding them.
|
||
|
|
||
|
4.2 The clk command.
|
||
|
|
||
|
{[%clk 1:55:21]}
|
||
|
|
||
|
This is the time displayed on the players clock. It represents the time
|
||
|
remaining to the next time control. It is proposed that future versions of
|
||
|
software producing pgn from games played on DGT boards include this command
|
||
|
after every move.
|
||
|
|
||
|
The clk command is intended for the *automatic* recording of time values by
|
||
|
digital clock/board combinations. It is not normaly intended for use with
|
||
|
mechanical clocks which show a clock time rather than the time remaining to the
|
||
|
next control.
|
||
|
|
||
|
4.3 Elapsed Game Time : the egt command
|
||
|
|
||
|
{[%egt 1:25:42]}
|
||
|
|
||
|
The elapsed time that a player has used for all moves in the game up to that
|
||
|
point.
|
||
|
Takes one parameter in the format h:mm:ss
|
||
|
|
||
|
4.4 Elapsed Move Time : the emt command
|
||
|
|
||
|
{[%emt 0:05:42]}
|
||
|
|
||
|
The elapsed time that a player used for the commented move.
|
||
|
Takes one parameter in the format h:mm:ss
|
||
|
|
||
|
4.5 Mechanical Clock Time : the mct command
|
||
|
|
||
|
{[%mct 17:10:42]}
|
||
|
The time actualy displayed on a mechanical clock. Notice that here the time
|
||
|
format is hh:mm:ss.
|
||
|
|
||
|
5. The "Running Clock"
|
||
|
The syntax described above allows us to encode a move time for a *completed
|
||
|
move*. This is all well and good but during transmission of a live game it can
|
||
|
also be interesting to know the state of the clock of the player whose turn it
|
||
|
is to move *but who has not yet done so*.
|
||
|
|
||
|
5.1 The Clock tag
|
||
|
We propose that this information should be encoded in a new header tag.
|
||
|
|
||
|
[Clock "B/0:45:56"]
|
||
|
|
||
|
As only one clock is running at a time only one tag is necessary.
|
||
|
|
||
|
In the example above Blacks clock is running and is currently showing the time
|
||
|
indicated by the string following the /.
|
||
|
|
||
|
Clock is the name of the tag.
|
||
|
It is followed by a string constructed as follows:
|
||
|
The first character is either "W" (whites clock is running), "B" (blacks clock
|
||
|
is running) or "N" (the clocks are stopped).
|
||
|
This information is technicaly redundant as it could be calculated by looking at
|
||
|
which side last moved. Encoding it here avoids this calculation and also covers
|
||
|
the situation where a player forgets to switch the clocks. It also allows us to
|
||
|
cover the admittedly rare case where the clocks are stopped.
|
||
|
|
||
|
The second character is a "/" seperator.
|
||
|
The rest of the string is a time in the format h:mm:ss which indicates the
|
||
|
currently displayed clock time of the running clock. As for the clk command this
|
||
|
represents the remaining time to the next time control.
|
||
|
|
||
|
6. Clock Start Time.
|
||
|
6.1 Introduction.
|
||
|
Two optional tags are proposed to record the clock setting at the start of the
|
||
|
play.
|
||
|
While it may be helpfull to record normal clock start values here (as is done in
|
||
|
the example below) they are mainly intended to cover the case where a game is
|
||
|
adjourned and the displayed clock times at start of play are thus non standard.
|
||
|
|
||
|
eg.
|
||
|
[WhiteClock "1:07:00"]
|
||
|
[BlackClock "0:56:00"]
|
||
|
|
||
|
7. As explained above the existing pgn tag [TimeControl] (cf 9.6 and following
|
||
|
of the standard) should be regarded as mandatory when move times are supplied.
|
||
|
Clearly when manipulating time information about a game details of the time
|
||
|
controls in use are vital.
|
||
|
|
||
|
8. Example game.
|
||
|
|
||
|
[Event "?"]
|
||
|
[Site "Madrid"]
|
||
|
[Date "1995.??.??"]
|
||
|
[White "Beliavsky, A "]
|
||
|
[Black "Timman, J "]
|
||
|
[Result "1-0"]
|
||
|
[ECO "E35"]
|
||
|
[Round "2"]
|
||
|
[TimeControl "40/7200:3600"]
|
||
|
[WhiteClock "2:00:00"]
|
||
|
[BlackClock "2:00:00"]
|
||
|
[Clock "W/1:34:56"]
|
||
|
|
||
|
1. d4 {[%clk 1:59:01]} Nf6 {[%clk 1:59:32] Timman hesitates slightly} 2. c4
|
||
|
{[%clk 1:58:00]} e6 {[%clk 1:57:01]} 3. Nc3 {[%clk 1:37:00] Beliavsky clearly
|
||
|
suprised here takes a full [%emt 0:20:00] on this move} Bb4 {[%clk 1:54:25]}
|
||
|
|
||
|
Game notes:
|
||
|
|
||
|
8.1. The time control is specified as 40 moves in two hours and then one hour to
|
||
|
finish. This tag must be specified in order to permit calculation of such
|
||
|
information as elapsed time since start of game. It is also particularly
|
||
|
important that it be specified when fischer or bronstein time controls are used.
|
||
|
|
||
|
8.2. In the example we have given the White and BlackClock tags but in this case
|
||
|
this was redundant as the clocks were set as normal to show that two hours
|
||
|
remained to the first time control. If the White and BlackClock tags are absent
|
||
|
start times should be derived from the TimeControl tag and/or the Time tag,
|
||
|
where they are specified they take precedence.
|
||
|
|
||
|
8.3. The Clock tag, which is only relevant during live transmission of a game,
|
||
|
here shows that it is whites turn to move and that he/she has 1 hour 34 minutes
|
||
|
and 56 seconds remaining on their clock.
|
||
|
|
||
|
8.4. PGN generated directly from DGT boards will have a clk command like the one
|
||
|
following the first move after *all* subsequent moves.
|
||
|
|
||
|
8.5. In this example we imagine that the pgn has been further edited to include
|
||
|
additional text comments and commands (cf the %emt command after whites third
|
||
|
move.)
|
||
|
|
||
|
8.6. Notice that commands can appear at any point inside comments and that there
|
||
|
may be multiple commands in a single comment.
|
||
|
|
||
|
8.7. The Beliavsky/Timman game is real, all the rest is pure invention.
|
||
|
|
||
|
9 Authors websites:
|
||
|
DGT Projects: http://www.dgtprojects.com/
|
||
|
Chess Base: http://www.chessbase.com/
|
||
|
Chess Assistant: http://www.chessassistant.com/
|
||
|
Palview: http://www.enpassant.dk/chess/palview/
|
||
|
|
||
|
10. Thanks
|
||
|
Many thanks to Axel Fritz and Robert Ericsson
|
||
|
|
||
|
*additional notes:
|
||
|
|
||
|
1. Cf Steve Edwards discussion of the planned implementation of BIF format here:
|
||
|
http://groups.google.com/groups?hl=en&safe=off&ic=1&th=1fe06718d5ec89a5,20&seekm
|
||
|
=4psfnl%24i5m%40darkstar.UCSC.EDU
|
||
|
We ruled out the use of < > as delimiters specified in the BIF format because if
|
||
|
this syntax is pasted into an html document then parsers will ignore the
|
||
|
contents as an unrecognised tag. This is not the effect we want.
|
||
|
|
||
|
2. While the seven tag roster is very precisely specified the PGN specification
|
||
|
does envisage the specification of new optional tags. We have taken advantage of
|
||
|
this to specify several new tags.
|
||
|
|
||
|
Note also that there is already a [Time] tag - this denotes the time of the game
|
||
|
start (and not anything else).
|
||
|
|
||
|
3. For reference the current pgn standard is here
|
||
|
http://www.clark.net/pub/pribut/standard.txt
|