LoginSignup
0
0

More than 5 years have passed since last update.

Charlestonのuserslist.xmlの構造定義

Posted at

いいかげんやっておかないと。

コンセプト

パースが面倒でアクセス性が悪い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ノードはコンテンツが記述された時だけ出現しても不具合は無いかも知れない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0