NSID
NameSpaced IDs (NSIDs)
NameSpaced IDs (NSIDs) は、メソッド、レコード タイプ、およびその他のセマンティック情報を識別するために ATP 全体で使用されます。
NSID は逆ドメイン名記法を使用し、最終セグメントの前のセグメントが有効なドメイン名にマップされなければならないという制約が追加されます。 たとえば、example.com の所有者は com.example.foo の ID を使用できますが、foo.example.com も管理しない限り、com.example.foo.bar は使用できません。 これらのルールは、スキーマがグローバルに一意であること、(登録済みドメインへの)明確な権限マッピングがあること、およびリクエストによって解決できる可能性があることを保証するためのものです。
NSIDの例:
code:code
com.example.status
io.social.getFeed
net.users.bob.ping
文法
code:ABNF
alpha = "a" / "b" / "c" / "d" / "e" / "f" / "g" / "h" / "i" / "j" / "k" / "l" / "m" / "n" / "o" / "p" / "q" / "r" / "s" / "t" / "u" / "v" / "w" / "x" / "y" / "z" / "A" / "B" / "C" / "D" / "E" / "F" / "G" / "H" / "I" / "J" / "K" / "L" / "M" / "N" / "O" / "P" / "Q" / "R" / "S" / "T" / "U" / "V" / "W" / "X" / "Y" / "Z"
number = "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / "0"
delim = "."
segment = alpha *( alpha / number / "-" )
authority = segment *( delim segment )
name = segment
nsid = authority delim name
nsid-ns = authority delim "*"
nsid-ns (a "namespace") を特定の状況で使用して、com.example.* などの名前空間(namespace)の下にあるすべてのnameを指定できます。
Authorityモデル
すべての NSID は、最終セグメントの前のセグメントとして識別される単一のauthority(権限)を主張し、その後反転されます。
code:example
com.example.thing
^^^^^^^^^^^--------> example.com
authorityは、その中のすべての名前の名前空間を制御しますが、authority間には階層や関係はありません。 つまり、ドメイン example.com は sub.example.com に対して何の権限も持たないため、com.example.* は com.example.sub.* から完全に独立していると見なされます。
構文解析 Parsing
NSIDは"authority"と"name"で構成されます。NSIDをauthorityとnameに分解した例:
table:NSID
NSID Authority Name
com.example.status example.com status
io.social.getFeed social.io getFeed
net.users.bob.ping bob.users.net ping
ドメインは、以下のアルゴリズムで抽出することができます:
code:getNSIDAuthority.js
function getNSIDAuthority (nsid) {
// nsid を segment に分割する
const parts = nsid.split('.')
// 最後の segment を削除する
parts.pop()
// segments を逆順に並べ替える
parts.reverse()
// segments を再結合する
return parts.join('.')
}
名前は、以下のアルゴリズムで抽出することができます:
code:getNSIDName.js
function getNSIDName (nsid) {
// nsid を segment に分割する
const parts = nsid.split('.')
// 最後の segment を返す
return parts.pop()
}