いいかげんやっておかないと。
コンセプト
パースが面倒でアクセス性が悪いxmlでユーザーデータベースを管理している理由は
- テキスト形式であるためクラッシュに強く、壊れたレコード(=ノード)だけを容易に削除・修正できる
- 試行データーの作成が容易である
- Charleston非実行時にテキストエディターで内容を容易に編集・加工出来る
という3点からです。
欠点は
- ユーザーのレコードの下に各生主の時の振る舞いが列挙されている点が不自然に感じる人も多いはず
- ユーザーのレコードの属性に、自分がリスナーの時の振る舞いが記述されている点も不自然に感じる(以下略)
基本形
引用符の例
- [] 必要がある時のみ記述される属性と属性値(値が逆の場合は属性は記述しない)
- {} 属性値が必要で可変なもの
userslist.xml
<?xml version="1.0" encoding="UTF-8"?>
<root formatversion="4.0">
<!-- 実名IDのユーザーの例 -->
<user id="[ユーザーID]" type="id" [comment="sign"] [speech="no"]>
<handle personality="{生主ID}" [lock="yes"] [known="yes"] [color="#{16進htmlcolor値}"]>{ハンドル名}</handle>
<note>[{このユーザーについての何か}]</note>
</user>
<!-- 匿名(184)ユーザーの例 -->
<user id="{184ID}" type="184" expire="{yyyy/mm/dd}">
<handle personality="{生主ID}" [lock="yes"] [known="yes"] [color="#{16進htmlcolor値}"]>{184IDの先頭8文字またはハンドル名}</handle>
<note>[{このユーザーについての何か}]</note>
</user>
</root>
各ノードの属性と子ノードの説明
root
ノード
root
ノードは子に複数のuser
ノードを持つ。
属性(attributes)
-
formatversion
属性- userslist XML構造体のバージョン。現在4.0
子ノード
-
user
ノード- 1ユーザー1ノード必要(正確には実名ノードと匿名ノードの2ノード以上の可能性はある)
user
ノード
user
ノードは一人のニコ生IDに対し1ノード(匿名の場合は184ID毎に1ノード)生成され、どの生主の時に会ったかの情報が(handle
ノードで)追加されていきます。
属性(attributes)
-
id
属性- 値はコメントサーバーから返されるUserIDです。
- nicknameがキャッシュされないのは、ユーザーが任意のタイミングで変更可能なので放送へ接続時に毎回ニコ生に接続して取得するためです
-
type
属性- 値は実名アカウントの時が
id
、匿名アカウントの時が184
になり、この属性で実名ユーザーか匿名ユーザーかを区別するために使います
- 値は実名アカウントの時が
ユーザーが生主の時にのみ記述される属性
-
comment
属性(ユーザーが生主の時かつ実名でコメントした時のみ付与される属性です)- 値が
yes
の時、このユーザーの放送に実名でコメントします
- 値が
-
speech
属性(ユーザーが生主の時かつ読み上げが必要な時のみ付与される属性です)- 値が
yes
の時、このユーザーの放送を読み上げます
- 値が
ユーザーが匿名の時にのみ記述される属性
-
expire
(type
=184の時のみ)- ニコ生は毎週木曜朝のメンテナンスで184IDがリセットされるため、このノードの有効期限を記述し、当該日時8:00を過ぎた場合当該ノードを削除するための目印
子ノード
-
handle
ノード- このユーザーのコメントを放送で取得すると参照され、無ければ記述されます
- 一つの
user
ノードの下に複数のhandle
ノードが記述されていきます
-
note
ノード- このユーザーについて、CharlestonのUser Inspectorでメモを記述するためのノードです
- 内容をコメントビュアーに表示するだけでこの値を元に振るまいが変わることはありません
handle
ノード
handle
ノードはそのユーザーが一人の放送主に対してコメントした際に記述され、ハンドル名、背景色などが記録されていきます。
属性(attributes)
-
personality
- 値にこのユーザーがコメントをした生主のIDが記述される
- 別な生主のところでコメントした際は
handle
ノードが別途記述・追加されていく
-
lock
- ハンドル、背景色をコメント末尾の@や#コマンドで変更されたくない場合記述する
-
known
- Charlestonは初見でもユーザーIDからニックネームを取得するので、うっかり名前を呼ばないようにグレーで名前を表示するためのフラグ
- ハンドル名を貰ったり、UserInspectorやコンテキストから設定すると名前が100%ブラックに変わる
-
color
- 該当ユーザーのコメントに背景色を付けるためのデーター
- 内容は16進2桁×3(R/G/B)の6ケタのいわゆるhtml color
- Charleston 0.5からはコメント末尾の#コマンドで背景色を指定可能にする予定
コンテンツ
コンテンツにはまずユーザー名(nickname)が記述され、UserInspectorでの書き替えやコメント末尾の「@ハンドル名」コマンドによってハンドル名に書き替えられる。ハンドル名に書き替えが行われた際にknown
="yes"アトリビュートが記述される。
note
ノード
note
ノードはCharlestonユーザーに対し、注記を記述し、コメントの際に表示できる様にしたノードである
コンテンツ
コンテンツにはUserInspectorのメモ欄に記述された内容が表示される
note
ノードはコンテンツが記述された時だけ出現しても不具合は無いかも知れない