Ink Model URIスキーム
Ink Model仕様は、RFC 3986.
URI Scheme
のガイドラインに準拠したスキームを指定することにより、Uniform Resource Identifiers (URI)を使用してInkModel'sのプライマリインクツリーのノードやビューを参照する方法を定義しています。
仕様では、@@@で定義されている次の用語が使用されています。RFC 3986:
- scheme
- authority
- path
- segment
- unreserved characters
- pchar
- pct-encoded characters
- fragment
Ink Model仕様は、次の構文を使用してInkModelのノードや他の要素を特定するための固有のURIスキームを定めています。
-
URI = "uim:" [ //authority ] [path] [#fragment]
-
authority = skipped
-
path = 1 * ( "/" segment )
-
segment = 1 * ( pchar )
-
fragment = optional
メモ:
URI's authorityの部分は省略されます。 下の表内のすべてのパス定義は 、@@@に従って path-rootless とみなされます。RFC 3986.
パスの部分は、@@@を一意に識別するパーセントエンコードされたURI_(RFC 3986、Section 2.1:https://tools.ietf.org/html/rfc3986#section-2.1_ に定義)を含むセグメントから開始する場合があります。Ink Model. InkModel'sの識別セグメントが省略される場合は、URIがInk Modelレベルでのローカルノード参照に使用され、URIはローカル@@@として扱われます。URI.
重要: 実装では、シリアル化されたモデルに属するエンティティのURIsをローカル形式のみで(ローカルURIsを使用して)エンコードする必要があります。
Ink Model
Path: >
<pct-encoded InkModel URI/>node/<node-id>Fragment: n/a
Description: URI@@@に含まれるノードの@@@。Ink Model. >
<pct-encoded InkModel URI>セグメントには、@@@のパーセントエンコードされたURI of an InkModel.が含まれます。このセグメントはオプションです。<node-id>セグメントには、GUID 文字列値としてエンコードされる > > InkNode 識別子が含まれます。例: > _GUID 5454710e-608d-4eee-9552-680f3349ab3e_の InkNode があり、メインインクツリーまたは@@@のInkModelビューに含まれていると仮定します。_URI
https://example.com/inkmodel/9b67babb-a2a3-491b-96ce-71c820ce0c64_, (プロバイダーによって提供されますhttps://example.com/).URI InkModel'sの範囲の InkNode の@@@(local ID): uim:node/5454710e-608d-4eee-9552-680f3349ab3e
URIInkNode の@@@ (グローバルに一意): uim:https%3A%2F%2Fexample.com%2Finkmodel%2F9b67babb-a2a3-491b-96ce-71c820ce0c64/node/5454710e-608d-4eee-9552-680f3349ab3e
Named entities
Path: >
<pct-encoded InkModel URI/>ne/<ne-id>Fragment: n/a
Description: URI固有表現定義の@@@で、通常は特定の InkModel ノードに関する情報のグループ化に使用されます。
<pct-encoded InkModel URI>セグメントには、@@@のパーセントエンコードされたURI of an InkModel.が含まれます。このセグメントはオプションです。<ne-id>セグメントには、固有表現定義の識別子が含まれます。
MD5-hashベースのユニーク ID 生成アルゴリズム
このアルゴリズムでは、(文字列値としてエンコードされる)タグや一連の要素に基づいて一意の識別子を生成することができます。
サポートする要素タイプは次のとおりです。
- 整数
- 浮動小数点数
- 文字列
- キーと値のペアとして定義された属性のリスト。ペアのキーと値は文字列タイプとみなされます。
アルゴリズムは下の擬似コードで表現されます。 記載されているメソッドは引数としてタグ値と要素のリストを取得し、一意の MD5 ハッシュを 8 バイトの配列として生成します。
METHOD generateMD5Hash(tag, components): RETURNS byte[8]
SET buffer = new StringBuffer()
buffer.write(tag)
buffer.write("\n")
FOREACH component OF components
IF (component is defined)
buffer.write(component.convertToString())
buffer.write("\n")
RETURN MD5_HASH(buffer.toString())
convertToString()メソッド 上の擬似コードスニペットで使用されている@@@は、要素タイプごとに次のように実装する必要があります。
-
Integer number -
convertToString()は、整数の文字列表現を返します。 -
Floating-point number -
convertToString()は、浮動小数点数の文字列表現を返します。小数点以下の桁数は、10進法で4桁に固定されています。 -
String -
convertToString()は文字列値を返します。 -
List of properties -
convertToString()の疑似コード実装:
METHOD convertToString(properties): RETURNS string
SET buffer = new StringBuffer()
properties = SORT(properties) // sort the properties list by ascending alphabetical name order
FOREACH pair OF properties
buffer.write(pair.name)
buffer.write("\n")
buffer.write(pair.value)
buffer.write("\n")
RETURN buffer.toString()
語彙
センサーチャネルの種類
以下の表は、異なるセンサー特性を区別するために使用される、URIとして定義された一般的なセンサーチャネルの種類のリストを説明しています。
| URI | 説明 |
|---|---|
| will://input/3.0/channel/X | サーフェス上または3D空間内のX座標を格納するセンサーチャネル。 |
| will://input/3.0/channel/Y | サーフェス上または3D空間内のY座標を格納するセンサーチャネル。 |
| will://input/3.0/channel/Z | 3D空間内のY座標を格納するセンサーチャネル。 |
| will://input/3.0/channel/Timestamp | 直前のサンプルからの時間差を格納するセンサーチャネル。 |
| will://input/3.0/channel/Pressure | ペン先に加えられた圧力を格納するセンサーチャネル。 |
| will://input/3.0/channel/RadiusX | タッチイベントのX半径を格納するセンサーチャネル。 |
| will://input/3.0/channel/RadiusY | タッチイベントのY半径を格納するセンサーチャネル。 |
| will://input/3.0/channel/Azimuth | ペンデバイスの方位角を格納するセンサーチャネル。 |
| will://input/3.0/channel/Altitude | ペンデバイスの高度角を格納するセンサーチャネル。 |
| will://input/3.0/channel/Rotation | ペンデバイスのバレル回転を格納するセンサーチャネル。 |