石葉XML棋譜の構造

 XML棋譜は、明解な構造化データです。

 XML棋譜は、料理に例えるとSGFのような本手順と変化手順を一緒に記録した寄せ鍋料理ではなく本手順と変化手順を別々に記録した会席料理しかもお毒味サービス付きです。
 すなわち、本手順だけを記録した後、変化手順を記録しています。
 また、ファイルに文法エラーがある場合は、下例のようにエラー箇所を指摘してくれます。

XML ページを表示できません
XSL スタイル シートを使用した XML 入力は表示できません。
エラーを訂正してください。 [更新] ボタンをクリックするか、
または後でやり直してください。


終了タグ 'main' が開始タグ 'move' と一致していません。
リソース 'http://hogehoge/MyLeaf/kifu/test.xml' の実行エラーです。
ライン 12、位置 3

--^

 石葉の優れた機能はXML棋譜データに出力することによりフルに発揮されます。
 棋譜データをXMLファイルとして保存すれば棋譜間でのリンクができます。
 また、自動リンクが可能なので多数の変化図がある棋譜を複数のファイルに分割して保存してファイルサイズの肥満化を防ぐことができます。

 上の碁盤の棋譜データをサンプルにXML棋譜データの構造を下表に示します。
 なお、上の碁盤の目盛りはXML棋譜で使用する座標と同じ目盛りにしました。

<?xml version="1.0" encoding="Shift_JIS" ?> XML開始宣言
<?xml-stylesheet type="text/xsl" href="../dblayout.xsl" ?> XSLTスタイルシートの設定
 棋譜を実行(ダブルクリックなど)したとき碁盤を表示させたいときに必要です。
 碁盤を表示させない場合はこの行を省略できます。
 その場合、棋譜を開くと棋譜データが表示されます。
 href=にスタイルシートのURLを記入します。
 URLは絶対パスと相対パスのどちらでもいいですが、相対パスで指定するときは棋譜が保存されているフォルダを基準にします。
 左例は相対パスの設定例で棋譜の一つ上のフォルダのdblayout.xslを読み込み、碁盤を表示します。
 XSLTスタイルシートは棋譜自身の付属ファイルで、アプレットのcodebaseとは無関係ですから、codebaseで指定したフォルダからの相対パスではありません。
<igo> 囲碁データ開始宣言
<kifu size="19" next="black" name="サンプル1"> 棋譜データ開始宣言
 size=:碁盤の路数(左例は19路盤)(省略時は19路盤)
 next=:初手の手番(黒番:black、白番:white)(省略時は黒番)
 name=:棋譜名(省略可)
<info
BR="5段"
WR="4段"
PB="猛虎"
PW="恐竜"
DT="2003/7/21"
HA="先"
KM="0"
/>
棋譜情報
 情報がない場合は<info>から</>までを省略できます。
 BR:黒番の段級位、WR:白番の段級位
 PB:黒番の対局者名、PW:白番の対局者名
 HA:手合割り、KM:コミ(逆コミの場合は負号を付ける)
 DT:日付、PC:対局場所、GN:対局名
<main> 本手順開始宣言
 本手順がなければこの行から</main>までの行を省略できます。
<move pos="pd" id="1" />
<move pos="dd" id="2" />
<move pos="pq" id="3" />
<move pos="pn" id="4" mark="あdp,いqk,ろpk" text="白(あ)と右下隅を打つと黒(い)または黒(ろ)と中国流に構えられるのを嫌いました。" />
<move pos="cp" id="5" />
<move pos="fp" id="6" />
<move pos="dn" id="7" />
<move pos="qq" id="8" />
<move pos="qr" id="9" />
<move pos="qp" id="49" />
<move pos="or" id="50" />
<move pos="qj" id="51" />
<move pos="ip" id="52" />
本手順の着手データ属性
 本手順を順番に1手1行ずつ記入します。
 pos=:着手座標(左上角aa、右下角ss)
 id=:着手識別番号
 mark=:記号
 link=:リンク先
 text=:コメント
 time=:消費時間(秒)
 rest=:残り時間(秒)
</main> 本手順終了宣言
<setting show_id="15" /> 各種設定の記録
 show_id=:初期表示局面の着手IDを記入します。
 start_number=:着手開始番号を記入します。
 advance_moves= : 初期表示局面の本手順着手数を記入します。
 設定が何もない場合は<settingから/>まで省略できます。

 棋譜の初期表示は石葉アプレットのadvancemovesパラメータで決定されますが、その値が"@@"の場合, show_idで指定した局面が表示されます。
 そのパラメータが設定されていない場合はadvance_movesの指定した局面が表示されます。

 start_number=を省略すると着手開始番号は1になります。

<tree> 着手ツリー開始宣言
 変化図がないときはこの行から</tree>の行まで省略できます。
<node> 着手ノード開始宣言
 着手ノードとは、本手順、各変化図手順のように関連のある一連の着手手順をいいます。
 各手順の初期局面(0手目)のデータを中のdata属性に記録する事ができます。
例: <node data="C[変化図1]">
<leaf />
<leaf />
<leaf />
<leaf />
<leaf />
<leaf />
<leaf />
<leaf />
    <node>
    <leaf data="[qp]ID[10]" />
    <leaf data="[pp]ID[11]" />
      <node>
      <leaf data="[po]ID[53]" />
      <leaf data="[op]ID[54]" />
      <leaf data="[qo]ID[55]" />
      <leaf data="[oo]ID[56]" />
      <leaf data="[qr]ID[57]" />
      <leaf data="[rq]ID[58]" />
      <leaf data="[rr]ID[59]" />
        <node>
        <leaf data="[oq]ID[71]" />
        <leaf data="[pr]ID[72]" />
        <leaf data="[qn]ID[73]" />
        <leaf data="[rp]ID[74]" />
        <leaf data="[ro]ID[75]" />
        <leaf data="[sq]ID[76]" />
        <leaf data="[nm]ID[77]" />
        </node>
      <leaf data="[pr]ID[60]" />
      <leaf data="[oq]ID[61]" />
      <leaf data="[nq]ID[62]" />
      <leaf data="[or]ID[63]" />
      <leaf data="[nr]ID[64]" />
      <leaf data="[ps]ID[65]" />
      <leaf data="[qn]ID[66]" />
      <leaf data="[rp]ID[67]" />
      <leaf data="[ro]ID[68]" />
      <leaf data="[sq]ID[69]" />
      <leaf data="[on]ID[70]" />
      </node>
    <leaf data="[rp]ID[12]" />
    <leaf data="[rq]ID[13]" />
    <leaf data="[rr]ID[14]" />
    <leaf data="[qr]ID[15]HL[{text:ハネコミ}{text:オサエ}@23,@39]C[Aならハネコミ___Bならオサエ]" />
      <node>
      <leaf data="[pr]ID[24]" />
      <leaf data="[rs]ID[25]" />
      <leaf data="[sr]ID[26]" />
      <leaf data="[sq]ID[28]" />
      <leaf data="[ps]ID[29]" />
      <leaf data="[op]ID[30]" />
      <leaf data="[rn]ID[31]" />
      <leaf data="[oq]ID[32]" />
      <leaf data="[qs]ID[33]" />
      <leaf data="[ss]ID[34]" />
      <leaf data="[rr]ID[35]" />
      <leaf data="[or]ID[38]" />
      <leaf data="[sr]ID[39]" />
      </node>
    <leaf data="[po]ID[16]" />
    <leaf data="[op]ID[17]" />
    <leaf data="[oo]ID[18]" />
      <node>
      <leaf data="[qo]ID[40]" />
      <leaf data="[ro]ID[41]" />
      <leaf data="[qn]ID[42]" />
      <leaf data="[pr]ID[43]" />
      <leaf data="[no]ID[44]" />
      <leaf data="[sq]ID[45]" />
      <leaf data="[on]ID[46]" />
      <leaf data="[nq]ID[47]" />
      <leaf data="[nc]ID[48]" />
      </node>
    <leaf data="[no]ID[19]" />
    <leaf data="[qo]ID[20]" />
    <leaf data="[oq]ID[21]" />
    <leaf data="[on]ID[22]" />
    <leaf data="[mp]ID[23]" />
    </node>
<leaf />
<leaf />
<leaf />
<leaf />
<leaf />
各着手のデータ属性
 <leaf>は、着手ノードを構成する着手タグです。
 本手順の着手データは上の<main>タグで既に記録済みなので<leaf />とタグの中にデータ属性記入を省略します。
 石葉は本手順対応の着手タグの内容を読まない仕様になっていますから、ここにデータ属性を記入しても無意味ですがエラーにはなりません。
 本手順n手目の変化手順はn回目の<leaf />の次の行に<node>を記入し、次の行から変化手順を
<leaf data="[座標]ID[番号]HL[リンク先]MK[マーク]C[コメント]" />
の書式で順番に1手1行ずつ記入します。
 棋譜データ解析のために <leaf /> が本手順のどの着手か一目で知りたい場合は石葉のパラメータに
    <param name="outoption" value="xmlid">
を記入すると着手タグに対応する本手順の着手IDが出力されます。
    <leaf data="ID[xx]" />
    注:xxはその着手タグに対応する本手順の着手ID
 ただし、その分だけデータサイズが肥満化しますから、エディタで棋譜データを編集する必要があるとき以外はこのパラメータを使わない方がいいでしょう。
 変化手順が終了したら次の行に</node>を記入して締めます。
 変化手順の中に変化手順があるときは<node>を追加して変化手順を記入します。
 なお、石葉は変化手順の階層が見やすいように<node>を追加するごとにインデント(段落とし)しています。

[座標]:左上角aa、右上角ss
ID[番号]:着手識別番号
HL[リンク先]:リンクしないときは省略できます。
ML[マーク]:マークを付けないときは省略できます。
C[コメント]:コメントを入力しないときは省略できます。

</node> 着手ノード終了宣言
</tree> 着手ツリー終了宣言
</kifu> 棋譜データ終了宣言
</igo> 囲碁データ終了宣言
inserted by FC2 system