# DIDってなんだ! #3 - DIDの文法

By [Kouki Minamoto](https://paragraph.com/@kouki-minamoto) · 2022-04-14

---

前回はこちらから↓

[https://mirror.xyz/0xb69CB3EFbaDB1b30f6d88020e1FA1FC84B8804d4/tw4ljjQpBkHG8XbG1-vdVzvy\_trbgV3X8K\_oO3s2gKM](https://mirror.xyz/0xb69CB3EFbaDB1b30f6d88020e1FA1FC84B8804d4/tw4ljjQpBkHG8XbG1-vdVzvy_trbgV3X8K_oO3s2gKM)

どうもこんにちは、僕はC-Voxelというプロダクトを開発しております、みなもとと申します。 C-Voxelはトランザクションに「こんな仕事をした報酬だよ～」みたいなコンテキストを紐づけることによって、オンチェーン上の職務経歴書を作ろうぜっていうプロジェクトです。↓

[https://testnet.cvoxel.xyz/](https://testnet.cvoxel.xyz/)

* * *

さて、今日のお題は、\*\*「DIDの文法」**です！前回やった通り、DIDってのは、**`did:example:123456` みたいな奇妙な文字列で表されます。今回はこの文字列の文法（書き方）\*\*についてです！

DIDは以下のような三つのパートに分かれていることは前回説明した通りです。

![](https://storage.googleapis.com/papyrus_images/d70095f80e2be4123ee9ec208c0e67ab2adaf9861009742982cfe9cc19975261.png)

この文字列を使って結局何ができるの？って話なんですけど、これはDIDの仕組みを提供しているシステムにたいして、「こいつのこの情報くれーー！！！」っていう命令みたいなものなのです。その命令を用いて以下のような情報をゲットできたりします。

*   DID subject(DIDを持ってる人）
    
*   DIDの検証方法
    
*   DID document(DIDに紐づいた個人情報)の一部
    
*   その他もろもろ、、、、
    

DID URL の文法
-----------

さて、では上記のような情報をゲットするための要求である **DID URL** の書き方を実際に見ていきましょう。（感覚的には一般的な `https://hogehoge/~` と同じような感じです）

> DID URLとは、ある特定の情報にアクセスするためのネットワーク上での場所を示すものである。

DID自体の文法はざっくりと、

*   DIDは `did:[method-name]:[method-specific-id]` の形で表される
    
*   Method-name は 1文字以上の文字列で、**小文字英数字**のみ
    
*   method-specific-id は1文字以上の文字列で英数字に加え、`.` `-` `_` が使える。
    

### Path - ほしい情報の場所を示す

特定のDIDにに紐づいた、特定の情報を引き出すためには Path を指定します。PathはDIDの後に `/` をつけることによって表現できます。また、pathの解釈は DID Method によって異なります。

    例) did:example:123456/path
    

### Query - DIDに特定の要求を出す

DIDに対して特定の要求を出したいときには `?` をもちいてQueryを表現します。（Queryは要求っていう意味です）。例えば、以下の例では、`example` っていう DID Method 上の `123456` のIDに `VersionIdが 1` のDID ducumentにアクセスしてねっていう意味になります。

    例) did:example:123456?versionId=1
    

### Fragment - 特定の DID document の一部分を表現する

DID Fragment は DID document や外部リソースへの DID method に依存しない参照として使われます。(path は DID method に依存してます) DID Fragment と同じ文字列を DID document 側で定義しておくことによって、その部分にアクセスできるようになります。

例1) DID document 内の特定の検証方法を表現

    did:example:123#public-key-0
    

例2) DID document 内の特定のサービスを表現

    did:example:123#agent
    

DID parameters
--------------

先ほどやった Query (`?` つけるやつ) を使って、特定の DID method に依存せず、すべてのDID methodで共通して使える DID parameters がいくつかあります。実装は任意なので、DID methodによってはサポートしていない場合もありますが、サポートしている場合は全てのDID methodにおいて、同様の機能を果たします。

*   `service` : サービスIDによって、DID documentからサービスを指定します。
    
*   `relativeRef` : サービスのエンドポイントを特定する相対URLです。サービスエンドポイントとは、service パラメータを用いて選択される DID documentを指します。
    
*   `versionId` : 解決される DID document のバージョンを指定します。
    
*   `versionTime` : 解決される DID document の特定のバージョンのタイムスタンプを指定します。つまり、その DID document はそのタイムスタンプの時間に承認されたということになります。
    
*   `hl` : 信頼性を守るための DID document のリソースのハッシュです。
    

相対 DID URL
----------

相対 DID URL とは、DID document の中で、`did:<method-name>:<method-specific-id>` で始まらない URL です。ベースとなる URI は、 DID subject に紐づいた DID です。

相対 DID URL は検証方法やサービスをDID document の中で参照するときに用いられます。

以下の例では、 `#key-1` が相対 DID URL に当たります。

![](https://storage.googleapis.com/papyrus_images/4a7b5453466c349f2fbcfe3dc32463d1bfd9149a44ab75d43a241933ca5b2bc9.png)

* * *

今回も読んでいただきありがとうございました！よろしければ僕らのプロダクト C-Voxel の discordやTwitterのフォローよろしくお願いします！

Discord:

[http://discord.gg/X7juANn39d](http://discord.gg/X7juANn39d)

Twitter:

[https://twitter.com/C\_Voxel?s=20&t=R0R\_Zz6mHis1L7bbATNioQ](https://twitter.com/C_Voxel?s=20&t=R0R_Zz6mHis1L7bbATNioQ)

---

*Originally published on [Kouki Minamoto](https://paragraph.com/@kouki-minamoto/did-3-did)*
