User:Kisaragi marine/record: Difference between revisions

From Resonite Wiki
mNo edit summary
m convert markdown syntaxes into mediawiki markups
Tag: 2017 source edit
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
もしかして: [https://modular-avatar.nadena.dev/dev/ja/docs/experimental-features/resonite-support Modular Avatar for Resonite]
== 用語 ==
== 用語 ==


# プラットフォームを管理しているものを「システム」と呼ぶ。システム全体で一意となる識別子が付番される<ref group="注">実装依存: `M-`から始まることが多い</ref>。本ドキュメントではこれを「MID」と呼ぶ。
# プラットフォームを管理しているものを「システム」と呼ぶ。システム全体で一意となる識別子が付番される<ref group="注">実装依存: <code>M-</code>から始まることが多い</ref>。本ドキュメントではこれを「MID」と呼ぶ。
# MIDが付与されているエンティティを「MA」と呼ぶ。
# MIDが付与されているエンティティを「MA」と呼ぶ。
# ユーザー、グループ、あるいはMAを総称して「所有権表明エンティティ」と呼ぶ。
# ユーザー、グループ、あるいはMAを総称して「所有権表明エンティティ」と呼ぶ。
Line 7: Line 9:
# インベントリの最上のディレクトリであり、親ディレクトリがないディレクトリを「(その)インベントリのルート」と呼ぶ。
# インベントリの最上のディレクトリであり、親ディレクトリがないディレクトリを「(その)インベントリのルート」と呼ぶ。
# インベントリにあるオブジェクトを「レコード」と呼ぶ。
# インベントリにあるオブジェクトを「レコード」と呼ぶ。
# レコードに付与される識別子を「レコードID」と呼ぶ。システム全体で一意となる識別子が付番される<ref group="注">これは `R-`から始まり、その直後にUUIDv4として解釈できる文字列が続くことが***多い***が常時ではないのであてにするべきではない</ref>。
# レコードに付与される識別子を「レコードID」と呼ぶ。システム全体で一意となる識別子が付番される<ref group="注">これは <code>R-</code>から始まり、その直後にUUIDv4として解釈できる文字列が続くことが***多い***が常時ではないのであてにするべきではない</ref>。
# ユーザーがシステムにログインしたときに生成される推測不可能な文字列を「ローカルマシントークン」と呼ぶ。コンピューターごとによって異なる[未検証]識別子が付番される。
# ユーザーがシステムにログインしたときに生成される推測不可能な文字列を「ローカルマシントークン」と呼ぶ。コンピューターごとによって異なる[未検証]識別子が付番される。
# ユーザーが作成されたときに付与される識別子を、「ユーザーID」と呼ぶ。システム全体で一意となる識別子が付番される。<ref group="注">実装依存: `U-`から始まることが多い。前プラットフォームからマイグレーションされたユーザーはその後にユーザー名の空白を`-`で置換した文字列が続くことが多いが、ユーザーネームに日本語が使われている場合など反例があるため仮定するのは危険。Resonite内で作成されたユーザーはプレフィクスのあとにUUIDv4として解釈できる文字列が続くことがほとんど。 [https://www.notion.so/Resonite-ID-8e610c06fd214fba94bb9573000acbd8?pvs=21 Resoniteで新しく作ったユーザーのIDはランダムになるっぽい]も参照せよ</ref>
# ユーザーが作成されたときに付与される識別子を、「ユーザーID」と呼ぶ。システム全体で一意となる識別子が付番される。<ref group="注">実装依存: <code>U-</code>から始まることが多い。前プラットフォームからマイグレーションされたユーザーはその後にユーザー名の空白を<code>-</code>で置換した文字列が続くことが多いが、ユーザーネームに日本語が使われている場合など反例があるため仮定するのは危険。Resonite内で作成されたユーザーはプレフィクスのあとにUUIDv4として解釈できる文字列が続くことがほとんど。 [https://www.notion.so/Resonite-ID-8e610c06fd214fba94bb9573000acbd8?pvs=21 Resoniteで新しく作ったユーザーのIDはランダムになるっぽい]も参照せよ</ref>
# グループが作成されたときに付与される識別子を「グループID」と呼ぶ。システム全体で一意となる識別子が付番される<ref group="注">実装依存: `G-`から始まることが多い</ref>。
# グループが作成されたときに付与される識別子を「グループID」と呼ぶ。システム全体で一意となる識別子が付番される<ref group="注">実装依存: <code>G-</code>から始まることが多い</ref>。
# レコードに内部的につけられ、相対パスのコンポーネントとして使用される文字列を「RecordName」と呼ぶ。実際に表示されるレコードの名前とは異なる場合がある。特に、[[Things_to_Avoid#Inventory|インベントリUI上で表示されるラベル]]にRTFを使用している場合は一致しない[未検証]。
# レコードに内部的につけられ、相対パスのコンポーネントとして使用される文字列を「RecordName」と呼ぶ。実際に表示されるレコードの名前とは異なる場合がある。特に、[[Things_to_Avoid#Inventory|インベントリUI上で表示されるラベル]]にRTFを使用している場合は一致しない[未検証]。
# インベントリのルートを意味する `Inventory`から始まり0個以上のRecordNameの列とともに別途定められる区切り文字で連結して得られる文字列を「相対パス」と呼ぶ。
# インベントリのルートを意味する <code>Inventory</code>から始まり0個以上のRecordNameの列とともに別途定められる区切り文字で連結して得られる文字列を「相対パス」と呼ぶ。


== インベントリの銀河 ==
== インベントリの銀河 ==
Line 53: Line 55:
レコードは次の構造で示される。各プロパティの詳しい説明は省略。
レコードは次の構造で示される。各プロパティの詳しい説明は省略。


`Record.name` はRecordNameであり、相対パスの構築に使用される。
<code>Record.name</code> はRecordNameであり、相対パスの構築に使用される。


<syntaxhighlight lang="typescript">
<syntaxhighlight lang="typescript">
type UserId = `U-{string}`;
type UserId = <code>U-{string}</code>;
type GroupId = `G-{string}`;
type GroupId = <code>G-{string}</code>;
type MID = `M-{string}`;
type MID = <code>M-{string}</code>;
type RecordOwnerId = UserId | GroupId | MID;
type RecordOwnerId = UserId | GroupId | MID;
type RecordId = ((string & {}) | "R-Home" | "R-Settings");
type RecordId = ((string & {}) | "R-Home" | "R-Settings");
Line 105: Line 107:
resrec スキームを用いる記法は次の2通り。
resrec スキームを用いる記法は次の2通り。


1. 固定参照方式
# 固定参照方式
    1. `resrec:///`
## <code>resrec:///</code>
    2. レコード所有者のID
## レコード所有者のID
    3. `/`
## <code>/</code>
    4. レコードID
## レコードID
2. 相対参照方式
# 相対参照方式
    1.  `resrec:///`
## <code>resrec:///</code>
    2. レコード所有者のID
## レコード所有者のID
    3. `/`
## <code>/</code>
    4. `/`で連結した相対パス
## <code>/</code>で連結した相対パス


相対参照方式は相対パスに依存しているため相対的に使用されることが少ない。
相対参照方式は相対パスに依存しているため相対的に使用されることが少ない。


固定参照方式は <code>GET https://api.resonite.com/users/{所有者}/records/{レコードID}</code> で、相対参照方式は <code>GET https://api.resonite.com/users/{所有者}/records/root/{相対パス})?path={\u005Cで連結した相対パス}</code> で取得できる。所有者がグループの場合、 `/users/` `/groups/` に読み替えること。
固定参照方式は <code>GET https://api.resonite.com/users/{所有者}/records/{レコードID}</code> で、相対参照方式は <code>GET https://api.resonite.com/users/{所有者}/records/root/{相対パス})?path={\u005Cで連結した相対パス}</code> で取得できる。所有者がグループの場合、 <code>/users/</code> <code>/groups/</code> に読み替えること。


特殊な例として <code>resrec:///M-zkxutoiq5fkqemdd5c9y56sjrrwbmcgpnadmsqq91kd7wm78s9mo/R-Home</code> があるが、これはResoniteのデフォルトホームを指している。また、各ユーザーの `R-Settings` は設定同期用のbrsonである。これらのレコードIDはハイフンの後ろがUUIDとして解釈できず、今後もこういった特別な形式が増える可能性がある。
特殊な例として <code>resrec:///M-zkxutoiq5fkqemdd5c9y56sjrrwbmcgpnadmsqq91kd7wm78s9mo/R-Home</code> があるが、これはResoniteのデフォルトホームを指している。また、各ユーザーの <code>R-Settings</code> は設定同期用のbrsonである。これらのレコードIDはハイフンの後ろがUUIDとして解釈できず、今後もこういった特別な形式が増える可能性がある。


=== resdb URI ===
=== resdb URI ===
Line 126: Line 128:
以下の書式に沿うURIはレコードへの生固定リンクである。
以下の書式に沿うURIはレコードへの生固定リンクである。


1. `resdb:///`
# <code>resdb:///</code>
2. レコード強化ID: 正規表現で `[0-9a-f]+`
# レコード強化ID: 正規表現で <code>[0-9a-f]+</code>
3. 拡張子: 正規表現で `\.(brson|7zbson)$`
# 拡張子: 正規表現で <code>\.(brson|7zbson)$</code>


拡張子が異なる場合、画像など他の内容を指している。例えば `resdb:///4e88416c9446102d1cd3701136fca8aa502de17874222e174ffe2a23d442d82a.png` はPNG形式の画像を返す。
拡張子が異なる場合、画像など他の内容を指している。例えば <code>resdb:///4e88416c9446102d1cd3701136fca8aa502de17874222e174ffe2a23d442d82a.png</code> はPNG形式の画像を返す。


<code>GET https://assets.resonite.com/{レコード強化ID}</code> でレコードの内容を返す。レコードのデコード方法については[[User:Kisaragi marine/brson]] を参照。
<code>GET https://assets.resonite.com/{レコード強化ID}</code> でレコードの内容を返す。レコードのデコード方法については[[User:Kisaragi marine/brson]] を参照。
Line 138: Line 140:
以下の書式に沿うURIは手元にしか存在しないレコードへの固定リンクである。
以下の書式に沿うURIは手元にしか存在しないレコードへの固定リンクである。


1. `local://`
# <code>local://</code>
2. マシンID
# マシンID
3. `/`
# <code>/</code>
4. 名前: ランダム文字列
# 名前: ランダム文字列
5. `.lz4bson`
# <code>.lz4bson</code>
 
レコードは <code>lz4bson</code> 形式で <code>%UserProfile%\Appdata\LocalLow\Yellow Dog Man Studios\Resonite\Assets\名前.lz4bson</code> に格納されている。


レコードは `lz4bson` 形式で `%UserProfile%\Appdata\LocalLow\Yellow Dog Man Studios\Resonite\Assets\名前.lz4bson` に格納されている。
== 注釈 ==
<references group="注" />

Latest revision as of 15:22, 1 June 2025

もしかして: Modular Avatar for Resonite

用語

  1. プラットフォームを管理しているものを「システム」と呼ぶ。システム全体で一意となる識別子が付番される[注 1]。本ドキュメントではこれを「MID」と呼ぶ。
  2. MIDが付与されているエンティティを「MA」と呼ぶ。
  3. ユーザー、グループ、あるいはMAを総称して「所有権表明エンティティ」と呼ぶ。
  4. システムによって管理されている有向グラフで、各項目の所有者が何らかの所有権表明エンティティとなっているオブジェクトストレージを「インベントリ」と呼ぶ。
  5. インベントリの最上のディレクトリであり、親ディレクトリがないディレクトリを「(その)インベントリのルート」と呼ぶ。
  6. インベントリにあるオブジェクトを「レコード」と呼ぶ。
  7. レコードに付与される識別子を「レコードID」と呼ぶ。システム全体で一意となる識別子が付番される[注 2]
  8. ユーザーがシステムにログインしたときに生成される推測不可能な文字列を「ローカルマシントークン」と呼ぶ。コンピューターごとによって異なる[未検証]識別子が付番される。
  9. ユーザーが作成されたときに付与される識別子を、「ユーザーID」と呼ぶ。システム全体で一意となる識別子が付番される。[注 3]
  10. グループが作成されたときに付与される識別子を「グループID」と呼ぶ。システム全体で一意となる識別子が付番される[注 4]
  11. レコードに内部的につけられ、相対パスのコンポーネントとして使用される文字列を「RecordName」と呼ぶ。実際に表示されるレコードの名前とは異なる場合がある。特に、インベントリUI上で表示されるラベルにRTFを使用している場合は一致しない[未検証]。
  12. インベントリのルートを意味する Inventoryから始まり0個以上のRecordNameの列とともに別途定められる区切り文字で連結して得られる文字列を「相対パス」と呼ぶ。

インベントリの銀河

インベントリは以下のような構造になっている。

  • 個人インベントリのルート
  • グループ[0]のインベントリのルート
  • グループ[1]のインベントリのルート

どのグループにも所属していない場合は、個人インベントリのルートだけが見える。

クォータ

各ルート下にあるレコードの容量は、そのルートの所有者のクォータに計上される。ただし、シンボリックリンク及びそのシンボリックリンクを参照して得られるアイテムは計上されない。クォータを超過すると、超過が解消されるまで新規にアップロードすることができなくなる。

個人インベントリのクォータはPatreonで支援することなどで一時的に引き上げることができる。

読みこみ

各レコードはアップロードした時点では非公開である。紐付いたルートにアクセスできるアカウントしか存在を知ることができない。APIでも同様であり、認証付きのアクセスを行わなければアクセスに失敗する。

明示的にレコードを公開状態にすることで、認証なしでもアクセスすることができるようになる。

公開・非公開は任意のタイミングで切り替えることができる。

書き込み

(未検証) レコードはそのIDを保ちながら中身をすげ替えることができない。

自分が所有しているアイテムはいつでも書き込める。

自分が所属しているグループが所有しているアイテムはいつでも書き込める。

それ以外の場合は書き込めない。特に、他のアカウントが所有しているアイテムは書き込めない。

レコードの内部的な構造

レコードは次の構造で示される。各プロパティの詳しい説明は省略。

Record.name はRecordNameであり、相対パスの構築に使用される。

type UserId = <code>U-{string}</code>;
type GroupId = <code>G-{string}</code>;
type MID = <code>M-{string}</code>;
type RecordOwnerId = UserId | GroupId | MID;
type RecordId = ((string & {}) | "R-Home" | "R-Settings");
export type Record = {
    recordType: string,
    id: RecordId,
    ownerId: RecordOwnerId,
    assetUri: Url,
    version: number,
    name: string,
    description: string,
    ownerName: string,
    tags: string[] | null,
    thumbnailUri: Url | null,
    lastModificationTime: string,
    creationTime,
    firstPublishTime,
    isDeleted: boolean,
    isPublic: boolean,
    isForPatrons: boolean,
    isListed: boolean,
    visits: number,
    rating: number,
    randomOrder: number,
    submissions: unknown[],
    manifest: string[],
    assetManifest: unknown[],
    migrationMetadata?: unknown,
} & ({
    recordType: "directory",
    path: string
} | {
    recordType: "world"
} | {
    recordType: "object"
} | {
    recordType: "link"
});

略記法

前システムからの慣例として、レコードはURIで指し示すことができる。 これらのURIはペーストすると擬似的にCloud Spawnできる。

resrec スキーム

resrec スキームを用いる記法は次の2通り。

  1. 固定参照方式
    1. resrec:///
    2. レコード所有者のID
    3. /
    4. レコードID
  2. 相対参照方式
    1. resrec:///
    2. レコード所有者のID
    3. /
    4. /で連結した相対パス

相対参照方式は相対パスに依存しているため相対的に使用されることが少ない。

固定参照方式は GET https://api.resonite.com/users/{所有者}/records/{レコードID} で、相対参照方式は GET https://api.resonite.com/users/{所有者}/records/root/{相対パス})?path={\u005Cで連結した相対パス} で取得できる。所有者がグループの場合、 /users//groups/ に読み替えること。

特殊な例として resrec:///M-zkxutoiq5fkqemdd5c9y56sjrrwbmcgpnadmsqq91kd7wm78s9mo/R-Home があるが、これはResoniteのデフォルトホームを指している。また、各ユーザーの R-Settings は設定同期用のbrsonである。これらのレコードIDはハイフンの後ろがUUIDとして解釈できず、今後もこういった特別な形式が増える可能性がある。

resdb URI

以下の書式に沿うURIはレコードへの生固定リンクである。

  1. resdb:///
  2. レコード強化ID: 正規表現で [0-9a-f]+
  3. 拡張子: 正規表現で \.(brson|7zbson)$

拡張子が異なる場合、画像など他の内容を指している。例えば resdb:///4e88416c9446102d1cd3701136fca8aa502de17874222e174ffe2a23d442d82a.png はPNG形式の画像を返す。

GET https://assets.resonite.com/{レコード強化ID} でレコードの内容を返す。レコードのデコード方法についてはUser:Kisaragi marine/brson を参照。

local URI

以下の書式に沿うURIは手元にしか存在しないレコードへの固定リンクである。

  1. local://
  2. マシンID
  3. /
  4. 名前: ランダム文字列
  5. .lz4bson

レコードは lz4bson 形式で %UserProfile%\Appdata\LocalLow\Yellow Dog Man Studios\Resonite\Assets\名前.lz4bson に格納されている。

注釈

  1. 実装依存: M-から始まることが多い
  2. これは R-から始まり、その直後にUUIDv4として解釈できる文字列が続くことが***多い***が常時ではないのであてにするべきではない
  3. 実装依存: U-から始まることが多い。前プラットフォームからマイグレーションされたユーザーはその後にユーザー名の空白を-で置換した文字列が続くことが多いが、ユーザーネームに日本語が使われている場合など反例があるため仮定するのは危険。Resonite内で作成されたユーザーはプレフィクスのあとにUUIDv4として解釈できる文字列が続くことがほとんど。 Resoniteで新しく作ったユーザーのIDはランダムになるっぽいも参照せよ
  4. 実装依存: G-から始まることが多い