【この訳に特有な表記規約】
◎表記記号1. 序論
~sensor~dataは、[ 地理所在( `geolocation^en )/ ~~歩数計( `counting steps^en )/ ~~頭の~~動きの~~追跡( `head-tracking^en ) ]などの新たな利用事例を可能化するため,以前に増して~app開発に利用されている。 これはとりわけ、 新たな~sensorが定期的に追加される携帯~deviceに該当する。 ◎ Increasingly, sensor data is used in application development to enable new use cases such as geolocation, counting steps or head-tracking. This is especially true on mobile devices where new sensors are added regularly.
これまで,~sensor~dataを~Webへ公開することは、 歩みが遅く場当的でもあった。 少数の~sensorは、 すでに~Webに公開されている。 登場当時のそれらは、 アリな利用事例が限られていたこともよくあった (例えば,`高level$過ぎる抽象-化を公開した結果,十分~上手く遂行しないなど)。 また,~APIは各種~sensorごとに様変わりするので、 ~Web~app開発者の認知的負担が増え,開発を遅める。 ◎ Exposing sensor data to the Web has so far been both slow-paced and ad-hoc. Few sensors are already exposed to the Web. When they are, it is often in ways that limit their possible use cases (for example by exposing abstractions that are too high-level and which don’t perform well enough). APIs also vary greatly from one sensor to the next which increases the cognitive burden of Web application developers and slows development.
`汎用~sensor~API^cite( `Generic Sensor API^en )の目標は ⇒# 各種~sensor~APIにまたがる一貫性を促す/ 高処理能な`低level$~APIを活かした高度な利用事例を可能化する/ 仕様と実装の過程を単純~化して,新たな~sensorを~Webに公開できる歩みを速める ◎ The goal of the Generic Sensor API is to promote consistency across sensor APIs, enable advanced use cases thanks to performant low-level APIs, and increase the pace at which new sensors can be exposed to the Web by simplifying the specification and implementation processes.
[ 汎用~sensor~API, 適用-可能な利用事例, ~code例 ]に基づく,具象-~sensorの包括的な~listは、 `GENERIC-SENSOR-USECASES$r, `MOTION-SENSORS$r に説明されている。 ◎ A comprehensive list of concrete sensors that are based on Generic Sensor API, applicable use cases, and code examples can be found in [GENERIC-SENSOR-USECASES] and [MOTION-SENSORS] explainer documents.
2. 視野
◎非規範的この仕様の視野は、 現時点では,[ `~device~sensor$から~dataを公開するのを可能化する,~primitive ]を指定することに制限される。 ◎ The scope of this specification is currently limited to specifying primitives which enable exposing data from device sensors.
~remote~sensorや個人周辺~networkに見出される~sensor(例:~bluetooth)を公開することは、 視野から外れる。 これらの分野における作業が成熟するに伴い、 共通かつ,より低levelな~primitiveが見出される可能性もある — その事例では、 この仕様もそれに則って更新されることになる。 しかしながら,これによる実装に対する効果は、 ごく限られるはずである。 ◎ Exposing remote sensors or sensors found on personal area networks (e.g. Bluetooth) is out of scope. As work in these areas mature, it is possible that common, lower-level primitives be found, in which case this specification will be updated accordingly. This should have little to no effects on implementations, however.
この仕様はまた、 現時点では~sensor発見-用の~APIを公開していない。 このことは、 現時点で~UAに可用な限られた数の~sensorが ,そのような~APIを~warrant【!*】していないからである。 今の所, `§ ~hardware特能の特能~検出に対する注記@#feature-detection$ に述べられるものなど,特能~検出を利用すれば十分である。 この仕様の後続な~versionは、 そのような~APIを指定するかもしれない — 現在の~APIは、 このことを念頭に設計されている。 ◎ This specification also does not currently expose a sensor discovery API. This is because the limited number of sensors currently available to user agents does not warrant such an API. Using feature detection, such as described in § 3 A note on Feature Detection of Hardware Features, is good enough for now. A subsequent version of this specification might specify such an API, and the current API has been designed with this in mind.
3. ~hardware特能の特能~検出に対する注記
◎非規範的特能~検出は、 ~Web開発において確立された最善な実施である。 この論題についての資料は、 ~onlineにも~offlineにも,豊富にある — この節の目的は、 それについて更に論じることではなく, それを~hardwareに依存する特能を検出する文脈~内に置くことにある。 ◎ Feature detection is an established Web development best practice. Resources on the topic are plentiful on and offline and the purpose of this section is not to discuss it further, but rather to put it in the context of detecting hardware-dependent features.
次の特能~検出~例を考える: ◎ Consider the below feature detection examples:
次の単純な例は、[ 特定0の~sensor型~用に,~UAが~interfaceを公開するかどうか ]を検査する方法を示す。 堅牢な方式で~errorを取扱う`後述の例@#robust-example$も見られたし。 ◎ This simple example illustrates how to check whether the User Agent exposes an interface for a particular sensor type. To handle errors in a robust manner, please refer to this example.
if (typeof Gyroscope === "function") { // run in circles... } if ("ProximitySensor" in window) { // watch out! } if (window.AmbientLightSensor) { // go dark... } // etc.
これらすべては、 ~APIの有無, アリな特性について何かを伝えるが, 次については何も伝えない: ◎ All of these tell you something about the presence and possible characteristics of an API. They do not tell you anything, however, about\
- その~APIは、 実際に本物の~hardware~sensorに接続されているのか? そうであれば、 その~sensorは働くのか? ◎ whether that API is actually connected to a real hardware sensor, whether that sensor works, if its still connected,\
- 利用者は、 当の~sensorへの~accessを許容しようとしているのか? これは、 `許可~API^cite `PERMISSIONS$r を利用すれば検査できることに注意。 ◎ or even whether the user is going to allow you to access it. Note you can check the latter using the Permissions API [PERMISSIONS].
下層の状態sについての情報は、 ~~事前に可用になるのが~~理想である。 これに関する問題は 2 つある: ◎ In an ideal world, information about the underlying status would be available upfront. The problem with this is twofold.\
- この情報を~hardwareから取得するのは、 処理能, ~battery両面で時間~costがかかり,~critical-path内に居座ることになる。 ◎ First, getting this information out of the hardware is costly, in both performance and battery time, and would sit in the critical path.\
- 下層の~hardwareの状態sは、 時間~越しに発展し得る。 利用者が許可を~revokeすることも, ~sensorへの接続が断たれることも, ~OSが~sensor用法を一定の~battery残量以上に制限するよう裁定することもある, 等々。 ◎ Secondly, the status of the underlying hardware can evolve over time. The user can revoke permission, the connection to the sensor be severed, the operating system may decide to limit sensor usage below a certain battery threshold, etc.
したがって,効果的な策は、[ ~~目的の~sensor用の~APIが実際に存在するかどうか検査する特能~検出 ]と[ 次に挙げるような安全弁付き~programming ]を組合せることである: ◎ Therefore, an effective strategy is to combine feature detection, which checks whether an API for the sought-after sensor actually exists, and defensive programming which includes:
- `Sensor$I ~objを~instance化するときに投出される~errorを検査して、 ◎ checking for error thrown when instantiating a Sensor object,
- 発される~errorを~listenして、 ◎ listening to errors emitted by it,
- それらすべてを上品に取扱う — 利用者~体験が~sensorにアリな用法により強化され,その不在により退行しないよう。 ◎ handling all of the above graciously so that the user’s experience is enhanced by the possible usage of a sensor, not degraded by its absence.
`Accelerometer^I ~sensorを堅牢な方式で作成する方法を,次の~code片に示す。 ~Web~appは、 ~error取扱い用に異なる~optionも選べる — 例えば: 通知を示す/ 異なる~sensor型を選ぶ/ 他の~APIに~fallbackする ◎ The following snippet illustrates how an Accelerometer sensor can be created in a robust manner. Web application may choose different options for error handling, for example, show notification, choose different sensor type or fallback to other API.
let %accelerometer = null; try { %accelerometer = new Accelerometer({ frequency: 10 }); %accelerometer.addEventListener('error', %event => { // 稼働時の~errorを取扱う: if (%event.error.name === 'NotAllowedError') { console.log('~sensorへの~access許可は否認されました。'); } else if (%event.error.name === 'NotReadableError' ) { console.log('~sensorに接続できません。'); } }); %accelerometer.addEventListener('reading', () => reloadOnShake(%accelerometer)); %accelerometer.start(); } catch (%error) { // 構築~errorを取扱う: if (%error.name === 'SecurityError') { console.log('~sensor構築は許可~施策により阻止されました。'); } else if (%error.name === 'ReferenceError') { console.log('~UAは、この~sensorを~supportしていません。'); } else { throw %error; } }
4. ~securityと~privacyの考慮点
注記: 既知な`脅威を利用者に通信する方法@#main-privacy-security-threats$についての判定は、 実装者に委ねられる。 しかしながら、 `軽減策@#mitigation-strategies$の実装は義務的である。 ◎ The judgement on how to communicate to the user the known threats is up to the implementer. The implementation of the mitigations is mandatory, however.
`~sensor読取り$は,敏感な~dataであり、 悪意的な~Web~pageからの様々な攻撃の~subjectにもなり得る。 軽減~策を論じる前に,[ `~device~sensor$の~privacy/~security脅威を成す主な型 ]について手短に挙げていく。 `MOBILESENSORS$r では、 主な脅威を次に挙げるものに分類しており,この仕様にもよくあてはまる ⇒# `所在~追跡@#location-tracking$, `盗聴@#eavesdropping$, `~keystrokeの監視@#keystroke-monitoring$, `~device指紋収集@#device-fingerprinting$, `利用者~識別-法@#user-identifying$ ◎ Sensor readings are sensitive data and could become a subject of various attacks from malicious Web pages. Before discussing the mitigation strategies we briefly enumerate the main types of the sensor's privacy and security threats. The [MOBILESENSORS] categorizes main threats into location tracking, eavesdropping, keystroke monitoring, device fingerprinting, and user identification. This categorization is a good fit for this specification.
攻撃が成功する~riskは、 `~device~sensor$が他の機能性との組合nで互いに利用されたり,回を重ねて利用されるほど高まり得る — 特定的には[ ~dataの相関, 指紋収集を通した利用者~識別 ]の~riskを伴う。 これらの~JS~APIを利用している~web~app開発者は、 この情報が他の情報と どう相関され,~privacy~riskの~~要因になるか考慮するベキである。 より長期間にわたる,そのような~dataの収集がもたらし得る~riskも、 考慮するベキである。 ◎ The risk of successful attack can increase when sensors are used with each other, in combination with other functionality, or when used over time, specifically with the risk of correlation of data and user identification through fingerprinting. Web application developers using these JavaScript APIs should consider how this information might be correlated with other information and the privacy risks that might be created. The potential risks of collection of such data over a longer period of time should also be considered.
`~sensor読取り$における変動, および~event発火~rateは、 利用者を識別する指紋収集の可能性も提供する。 ~UAは、 ~web~app開発者に可用になる~event~rateを制限することで,~riskを抑制してもヨイ。 ◎ Variations in sensor readings as well as event firing rates offer the possibility of fingerprinting to identify users. User agents may reduce the risk by limiting event rates available to web application developers.
~sensorの読出しの正確度を最小限にすることは、 一般に,指紋収集の~riskを減らす。 ~UAは、 不必要に冗漫な~sensor~dataの読出しを供するベキでない。 各`~sensor型$は、 個別に査定されるベキである。 ◎ Minimizing the accuracy of a sensor’s readout generally decreases the risk of fingerprinting. User agents should not provide unnecessarily verbose readouts of sensors data. Each sensor type should be assessed individually.
この~APIを利用して, 同じ~device上の異なる~window文脈~内で同じ~JS~codeを同時的に利用できる場合、 その~codeは,[ それらの文脈にまたがって利用者【についての情報】を相関する ]こともアリになり得る結果, 思いがけない追跡の仕組みを創出することになる。 ◎ If the same JavaScript code using the API can be used simultaneously in different window contexts on the same device it may be possible for that code to correlate the user across those two contexts, creating unanticipated tracking mechanisms.
~UAは、[ `~device~sensor$が利用されたことの指示を利用者に供する / ~sensorを不能化することを利用者に許容する ]ことを考慮するベキであり、[ 過去, および現在の~sensor利用~patternを検証yすることを利用者に許容する ]ことを考慮してもヨイ。 【!要件~levelとして,考慮するベキ/考慮してもヨイとは、何を意味する?】 ◎ User agents should consider providing the user an indication of when the sensor is used and allowing the user to disable it. Additionally, user agents may consider allowing the user to verify past and current sensor use patterns.
`~device~sensor$を利用する~web~app開発者は、 自身の~appによる~privacyへの影響iを — 当の~appのすべての側面を考慮に入れて — 査定するベキである。 ◎ Web application developers that use sensors should perform a privacy impact assessment of their application taking all aspects of their application into consideration.
ある~device上で働いている~sensorの集合を全部的に検出する能は、 識別子を形成し得るため,指紋収集~用に利用することもできる。 ◎ Ability to detect a full working set of sensors on a device can form an identifier and could be used for fingerprinting.
選定された~sensorの組合nは、 ~device間の帯域外~通信~channelを形成するためにも利用され得る。 ◎ A combination of selected sensors can potentially be used to form an out of band communication channel between devices.
~sensorは、 ~device間にまたがる~link法や利用者の追跡にも利用され得る。 ◎ Sensors can potentially be used in cross-device linking and tracking of a user.
4.1. ~privacy/~security脅威の型
◎非規範的4.1.1. 所在~追跡
この型の脅威の下では、 攻撃は,~GPSその他の所在~sensorを利用することなく,`~sensor読取り$を利用して~deviceの所在を得する。 例えば,加速度計~dataは、 ~smartphoneの所在を推定するためにも利用できる — 統計的~modelを利用して軌跡を見積もってから、 地図~照合~algoを利用して,所在を予測できる(半径 200 ~meterの中で) `MOBILESENSORS$r 。 ◎ Under this type of threat, the attacks use sensor readings to locate the device without using GPS or any other location sensors. For example, accelerometer data can be used to infer the location of smartphones by using statistical models to obtain estimated trajectory, then map matching algorithms can be used to obtain predicted location points (within a 200-m radius)[MOBILESENSORS].
4.1.2. 盗聴
~gyroscope`~sensor読取り$から発話を回復することは、 盗聴~攻撃の例である。 `GYROSPEECHRECOGNITION$r を見よ。 ◎ Recovering speech from gyroscope readings is an example of eavesdropping attack. See [GYROSPEECHRECOGNITION].
4.1.3. ~keystrokeの監視
多くの利用者~入力は、 `~sensor読取り$から推定され得る。 これには、 ~motion~sensorを利用する,次に対する広範な攻撃を含まれる: 利用者の[ ~PIN/~password/~lock~pattern ](および,~click, ~scroll, ~zoomなどの~touch動作さえも)。 これらの攻撃は、 通常は,そのような利用者についての情報を発見するため,機械学習~algoを訓練する。 `STEALINGPINSVIASENSORS$r を見よ。 ◎ Many user inputs can be inferred from sensor readings, this includes a wide range of attacks on user PINs, passwords, and lock patterns (and even touch actions such as click, scroll, and zoom) using motion sensors. These attacks normally train a machine learning algorithm to discover such information about the users. See [STEALINGPINSVIASENSORS].
4.1.4. ~device指紋収集
~sensorは、 それらを利用して~deviceを一意に識別できる情報を供し得る。 どの~modelの具象-~sensorにも、 その~modelの中で一意になるような,小さな製造時のムラがある。 これらの製造時のムラは、 ~deviceを指紋収集するために利用し得る。 `ACCELPRINT$r `MOBILESENSORS$r ◎ Sensors can provide information that can uniquely identify the device using those sensors. Every concrete sensor model has minor manufacturing imperfections and differences that will be unique for this model. These manufacturing variations and imperfections can be used to fingerprint the device [ACCELPRINT] [MOBILESENSORS].
4.1.5. 利用者の識別-法
`~sensor読取り$は、 利用者を識別するためにも利用し得る — 例えば,~smartphoneや装身-可能な~deviceの~motion~sensorの~dataから、 各個人の歩き~patternを推定することを介して。 ◎ Sensor readings can be used to identify the user, for example via inferring individual walking patterns from smartphone or wearable device motion sensors' data.
4.2. 軽減~策
◎非規範的この節では、 この仕様の規範的な各~節にて指定される軽減~策のうち一部について, 高levelな呈示【!*】を与える。 ◎ This section gives a high-level presentation of some of the mitigation strategies specified in the normative sections of this specification.
4.2.1. ~secureな文脈
`~sensor読取り$は、 `Secure Contexts^cite `POWERFUL-FEATURES$r 仕様により明示的に,[ ~network攻撃者にとって高価値な~targetである ]ものとされている 【`~~参照@~SECURE-CONTEXT#threat-risks$】 。 【!flagged :`閲覧~文脈~sandbox化( ~secure )~flag@~SECURE-CONTEXT#sandboxed-secure-browsing-context-flag$?】 したがって,この仕様, その`拡張~仕様$に定義される~interfaceは、 どれも`~secureな文脈$enVの中に限り可用になる。 ◎ Sensor readings are explicitly flagged by the Secure Contexts specification [POWERFUL-FEATURES] as a high-value target for network attackers. Thus all interfaces defined by this specification or extension specifications are only available within a secure context.
4.2.2. 許可~施策
`~sensor読取り$が利用者に馴染みのない文脈と共有されることによる~privacy~riskを避けるため、 `~sensor読取り$は,[ 所与の`~sensor型$用の`施策により制御される特能$ ]の`利用は許容されて$いる`文書$用に限り可用になる。 詳細は `PERMISSIONS-POLICY$r を見よ。 ◎ To avoid the privacy risk of sharing sensor readings with contexts unfamiliar to the user, sensor readings are only available for the documents which are allowed to use the policy-controlled features for the given sensor type. See [PERMISSIONS-POLICY] for more details.
4.2.3. ~focusされた区画
`作動中な文書$nav %文書 における`~sensor読取り$は、 次が満たされる場合に限り可用になる ⇒ `~focusと生成元を検査する$( %文書 ) ~EQ ~T ◎ Sensor readings are only available for an active document if the focus and origin check on it returns true.
これは、[ `~focusを得た$要素を包含している`~navigable$に対する盗読み攻撃 ]の~riskを軽減するために行われる — 例えば、 利用者が,ある `iframe^e の中で[ 第三者-主体による支払い~serviceを利用して,~game内での購入を遂げる ]とき。 ◎ This is done in order to mitigate the risk of a skimming attack against the navigable containing an element which has gained focus, for example when the user carries out an in-game purchase using a third party payment service from within an iframe.
4.2.4. 可視性~状態
`~sensor読取り$は、 次を満たす`作動中な文書$navに限り可用になる ⇒ `可視性~状態$doc ~EQ `visible^l ◎ Sensor readings are only available for the active documents whose visibility state is "visible".
4.2.5. `許可~API^cite
`~sensor読取り$への~accessは、 `許可~API^cite `PERMISSIONS$r により制御される。 ◎ Access to sensor readings are controlled by the Permissions API [PERMISSIONS].
4.3. 事例~別に適用される軽減~策
各`~sensor型$は、 個別に査定される必要がある — [ それが可能化する各~利用事例, それの特定0の脅威~profile ]を織り込んで。 下に与える軽減~策のうち一部は、 ある種の~sensor用には効果的になる一方で, ある種の利用事例を邪魔する/まるごと防止するかもしれない。 ◎ Each sensor type will need to be assessed individually, taking into account the use cases it enables and its particular threat profile. While some of the below mitigation strategies are effective for certain sensors, they might also hinder or altogether prevent certain use cases.
注記: これらの軽減~策は、 定常的にも一時的にも適用できる — 例えば、 利用者が特定の動作を遂げているとき/ 脅威の~levelを増幅することが既知な他の~APIが利用-中にあるとき, 等々。 ◎ Note: These mitigation strategies can be applied constantly or temporarily, for example when the user is carrying out specific actions, when other APIs which are known to amplify the level of the threat are in use, etc.
4.3.1. 最大~標本化~frequencyを制限する
[ ~UA/`拡張~仕様$ ]は、 ある種の脅威を軽減するためとして, 各`~sensor型$の`最大~標本化~frequency$を定義してもヨイ。 ◎ User agents and extension specifications may mitigate certain threats by defining a sensor type's maximum sampling frequency.
どの上限を選ぶかは、 次に挙げるものに依存する ⇒# `~sensor型$, ~UAが保護しようと試行している脅威の種類, 予期される攻撃者の資源, 等々 ◎ What upper limit to choose depends on the sensor type, the kind of threats the user agent is trying to protect against, the expected resources of the attacker, etc.
`最大~標本化~frequency$を制限することは、 低-待時間や高-密度な~dataに依拠する利用事例を防止する。 ◎ Limiting the maximum sampling frequency prevents use cases which rely on low latency or high data density.
4.3.2. ~sensorをまるごと停止する
これは明白に最終手段ではあるが、 一時的であるなら極めて効果的になり得る。 例えば、 利用者が異なる[ 生成元( `rfc6454$r )/~app ]に属する資格証を手入力している間は, ~password盗読みの試みを防止するなど。 ◎ This is obviously a last-resort solution, but it can be extremely effective if it’s temporal, for example to prevent password skimming attempts when the user is entering credentials on a different origin ([rfc6454]) or in a different application.
4.3.3. 送達される読取りの回数を制限する
`最大~標本化~frequencyを制限する@#limit-max-frequency$代替として — `標本化~frequency$に関わらず — ~Web~app開発者に送達される`~sensor読取り$の回数を制限する。 これは、 供される~dataの量を増やすことなく, `標本化~frequency$を高めるため低-待時間が要件にある利用事例を許容する。 ◎ An alternative to limiting the maximum sampling frequency is to limit the number of sensor readings delivered to Web application developer, regardless of the sampling frequency. This allows use cases which have low latency requirement to increase the sampling frequency without increasing the amount of data provided.
中間的な読取りを破棄することは、 ある種の利用事例 — ある種類の~filterに依拠するものなど — を防止する。 ◎ Discarding intermediary readings prevents certain use cases, such as those relying on certain kinds of filters.
4.3.4. 正確度を抑制する
`~sensor読取り$や~sensor`読取り時刻印$の正確度を抑制することは、 ある種の脅威を軽減する一助になり得る。 したがって,~UAは、 ~sensor~dataの不必要に冗漫な読出しを供するベキでない。 ◎ Reducing the accuracy of sensor readings or sensor reading timestamps might also help mitigate certain threats, thus user agents should not provide unnecessarily verbose readouts of sensors data.
具象-~sensorの実装は、 次を定義してもヨイ: ◎ ↓
- `~threshold検査~algo$ ⇒ 新たな読取りが`最新な読取り~map$から十分に相違しないとき、 それを破棄するためにある。 ◎ Implementations of concrete sensors may define a threshold check algorithm so that new readings that do not differ enough from the latest readings are discarded.
- `読取り量子化~algo$ ⇒ `~device~sensor$から受信した`~sensor読取り$の正確度を抑制するためにある。 ◎ Implementations of concrete sensors may define a reading quantization algorithm to reduce the accuracy of the sensor readings received from a device sensor.
注記: これら 2 つの軽減~措置は、 互いに補い合うことが多い。 `~threshold検査~algo$しか実行しない実装は、 精確~過ぎる読取りを公開するかもしれない。 一方で,読取りを丸めることしかしない実装は、 生な読取りが異なる値に丸められたとき, より精確な読取り【があったこと】についての情報を攻撃者に供し得る。 ◎ Note: These two mitigation measures often complement each other. An implementation that only executes the threshold check algorithm might expose readings that are too precise, while an implementation that only rounds readings up may provide attackers with information about more precise readings when raw readings are rounded to different values.
注記: 不正確度は[ `~sensor読取り$上で遂げられる演算 / `読取り時刻印$から計算される時間差 ]においても更に増すので、 この軽減~策は,ある種の利用事例に影響し得る。 ◎ Note: Inaccuracies will further increase for operations carried out on the sensor readings, or time deltas calculated from the timestamps. So, this mitigation strategy can affect certain use cases.
注記: `~sensor読取り$に~randomな偏りを追加することにも類似な効果があるが、 実施には利用されるベキでない — 追加された~noiseを~filterで濾すのは容易なので。 ◎ Note: While adding random bias to sensor readings has similar effects, it shouldn’t be used in practice as it is easy to filter out the added noise.
4.3.5. ~APIの利用について利用者に伝え続ける
~UAは、 ~APIの[ 現在の/過去の ]利用について利用者に伝え続けることにしてもヨイ。 ◎ User agents may choose to keep the user informed about current and past use of the API.
注記: これは、 実際の`~sensor読取り$の~logをとり続けることは含意しない — それには自前の課題がある。 ◎ Note: This does not imply keeping a log of the actual sensor readings which would have issues of its own.
5. 各種~概念
5.1. ~sensor
用語 `~device~sensor@ ( `device sensor^en )は、 ~deviceの下層の物理的~sensor~instanceを指す。 ◎ The term device sensor refers to a device’s underlying physical sensor instance.
`~device~sensor$は、 物理量を測定して,対応する `~sensor読取り@ ( `sensor reading^en )を供する — それは、 環境についての情報の~sourceである。 ◎ A device sensor measures a physical quantities and provides a corresponding sensor reading which is a source of information about the environment.
各`~sensor読取り$は、 `~device~sensor$が[ `読取り時刻印@ ( `reading timestamp^en )と呼ばれる,各~測定-回の時刻 ]に測定した物理量の値たちから構成される。 ◎ Each sensor reading is composed of the values of the physical quantity measured by the device sensor at time tn which is called the reading timestamp.
`~device~sensor$が空間的な測定を遂行する場合(例:加速度, 角速度)、 `~device~sensor$の`~sensor読取り$用の基準~frameを表現する `局所~座標系@ ( `local coordinate system^en )内に解決するモノトスル。 そのような`~sensor読取り$を供する`~device~sensor$は、 `空間的~sensor@ ( `spatial sensor^en )と称される。 ◎ If the device sensor performs a spatial measurement (e.g. acceleration, angular velocity), it must be resolved in a local coordinate system that represents a reference frame for the device sensor's sensor readings. A device sensor that provides such sensor readings is referred to as spatial sensor.
`空間的~sensor$は、 同時的な測定を遂行できる直交な軸の本数に依存して,[ 単軸( `uniaxial^en ), 二軸( `biaxial^en ), 三軸( `triaxial^en ) ]いずれにもなり得る。 ◎ A spatial sensor can be uniaxial, biaxial, or triaxial, depending on the number of orthogonal axes in which it can perform simultaneous measurements.
~scalar物理量(例:温度)は、 解決~用の`局所~座標系$を要求しない。 ◎ Scalar physical quantities (e.g. temperature) do not require a local coordinate system for resolution.
通常は携帯~deviceで利用される`局所~座標系$は、 ~Cartesian座標系であり,~deviceの~screenに相対的に定義される , その ~X軸, ~Y軸は~screenの各 次元に平行になり,~Z軸は~screen面に垂直になる。 ◎ The local coordinate system normally used in a mobile device is a Cartesian coordinate system, which is defined relative to the device’s screen, so that X and Y axes are parallel to the screen dimentions and Z axis is perpendicular to the screen surface.
用語 `~platform~sensor@ ( `platform sensor^en )は、 ~UAが[ 1 個~以上の`~device~sensor$を出自にする単独の`~sensor型$ ]用に`~sensor読取り$を得するためにヤリトリできるような,~platform~interfaceを指す。 ◎ The term platform sensor refers to platform interfaces, with which the user agent interacts to obtain sensor readings for a single sensor type originated from one or more device sensors.
`~platform~sensor$は、 下層の~platformにより定義されることもあれば (例:~native~sensor~framework内で), ~UAにより定義されることもある — `~device~sensor$への直な~accessを有するならば。 ◎ Platform sensor can be defined by the underlying platform (e.g. in a native sensors framework) or by the user agent, if it has a direct access to device sensor.
実装の視点からは、 `~platform~sensor$は,対応する`~device~sensor$用の~software~proxyとして扱える。 下層の~platformが~supportするならば、 複数の`~platform~sensor$が同じ`~device~sensor$に同時的にヤリトリする可能性もある。 ◎ From the implementation perspective platform sensor can be treated as a software proxy for the corresponding device sensor. It is possible to have multiple platform sensors simultaneously interacting with the same device sensor if the underlying platform suppports it.
単純な事例では,`~platform~sensor$は単独の`~device~sensor$に対応するが、 供された`~sensor読取り$が~software内で遂行された`~sensor融合$の産物である場合,`~platform~sensor$は[ `~sensor融合$の処理nに孕まれる`~device~sensor$の集合 ]に対応する。 ◎ In simple cases, a platform sensor corresponds to a single device sensor, but if the provided sensor readings are a product of sensor fusion performed in software, the platform sensor corresponds to a set of device sensors involved in the sensor fusion process.
`~sensor読取り$と[ それに対応する,測定される物理量 ]との不一致は、 `較正@ ( `calibration^en )を通して正される — この不一致は、 製造~時に起こり得る。 一部の~sensorは、 未知な不一致を補償するため,動的な較正を要求し得る。 ◎ Discrepancies between a sensor reading and the corresponding physical quantity being measured are corrected through calibration that can happen at manufacturing time. Some sensors can require dynamic calibration to compensate unknown discrepancies.
注記: `~sensor融合$を通して作成される`~platform~sensor$は、 ~virtual~sensor, あるいは合成な~sensorとも呼ばれる。 しかしながら,実用的には、 この仕様は,それらを区別しない。 ◎ Note: Platform sensors created through sensor fusion are sometimes called virtual or synthetic sensors. However, the specification doesn’t make any practical distinction between them.
5.2. ~sensor型
測定される物理量は、 `~sensor型$ごとに異なる — 温度, 気圧, 心拍数, 光度など。 ◎ Different sensor types measure different physical quantities such as temperature, air pressure, heart-rate, or luminosity.
この仕様の目的においては、 各`~sensor型$は[ `高level$, `低level$ ]の 2 つに大別される: ◎ For the purpose of this specification we distinguish between high-level and low-level sensor types.
- ~sensorのうち,その実装により特徴付けられる`~sensor型$は、【!*】 `低level@ ( `low-level^en )な~sensorと称される。 例えば, `Gyroscope^I は`低level$な`~sensor型$である。 ◎ Sensor types which are characterized by their implementation are referred to as low-level sensors. For example a Gyroscope is a low-level sensor type.
- ~sensorのうち,その`~sensor読取り$の名前を継ぐもの【!*】は、 その実装に関わらず, `高level@ ( `high-level^en )な~sensorであるとされる。 一例として,地理所在~sensorは利用者の所在についての情報を供するが、 この~dataが得される精確な手段は,目的を以って不透明なままにされており (それは、[ ~GPS集積回路, ~network基地局三角測量, ~wifi~network, 等々,あるいはこれら任意の組合n ]のどれからも得られ得る)、 実装に特有な様々な経験則に依存する。 `高level$な~sensorは、 一般に,`低level$な~sensorに何らかの~algoを適用した結果【!fruits】 — 例えば,歩数計は~gyroscopeの出力のみを利用して築ける — であるか,`~sensor融合$のそれである。 ◎ Sensors named after their readings, regardless of the implementation, are said to be high-level sensors. For instance, geolocation sensors provide information about the user’s location, but the precise means by which this data is obtained is purposefully left opaque (it could come from a GPS chip, network cell triangulation, wifi networks, etc. or any combination of the above) and depends on various, implementation-specific heuristics. High-level sensors are generally the fruits of applying algorithms to low-level sensors—for example, a pedometer can be built using only the output of a gyroscope—or of sensor fusion.
とは言え、 `~sensor型$における[ `高level$, `低level$ ]の区別は,いくぶん恣意的であり、 この 2 つの間の線引きは,ぼやけていることが多い。 一例として,気圧を測定する気圧計は、 それが[ 圧抵抗圧力~sensorと温度~sensorが成す`~sensor融合$ ]の産物であっても,最も共通的な目的においては`低level$と見なされる — それを構成する~sensorを公開しても実用的な目的は果たさないので (圧電~sensorの温度を気にする者は居なかろう)。 気圧高度計も、 おそらく同じ分類に入る。 一方,構造不明な高度計は、 その~dataを気圧計からも~GPS信号からも取得することがあり、 明瞭に,`高level$な`~sensor型$に分類されることになる。 ◎ That said, the distinction between high-level and low-level sensor types is somewhat arbitrary and the line between the two is often blurred. For instance, a barometer, which measures air pressure, would be considered low-level for most common purposes, even though it is the product of the sensor fusion of resistive piezo-electric pressure and temperature sensors. Exposing the sensors that compose it would serve no practical purpose; who cares about the temperature of a piezo-electric sensor? A pressure-altimeter would probably fall in the same category, while a nondescript altimeter—which could get its data from either a barometer or a GPS signal—would clearly be categorized as a high-level sensor type.
この区別は,いくぶんぼやけているので、 この仕様に対する拡張 ( `§ 拡張能@#extensibility$を見よ) は、対象になる`~sensor型$用に,その専門分野に特有な[ `高level$, `低level$ ]~sensorの定義を供することが奨励される。 ◎ Because the distinction is somewhat blurry, extensions to this specification (see § 10 Extensibility) are encouraged to provide domain-specific definitions of high-level and low-level sensors for the given sensor types they are targeting.
相異なる`~sensor型$からの`~sensor読取り$は、 `~sensor融合@ ( `sensor fusion^en )と呼ばれる処理nを通して,一緒に結合され得る。 この処理nは、 `高level$な, または より正確aな~dataを供する (待時間が増える~costと引き換えになることが多い)。 例えば,[ 三軸からなる磁力計の`~sensor読取り$ ]は、[ そのための正しい軸受を供する,加速度計の`~sensor読取り$ ]と結合される必要がある。 ◎ Sensor readings from different sensor types can be combined together through a process called sensor fusion. This process provides higher-level or more accurate data (often at the cost of increased latency). For example, the readings of a triaxial magnetometer needs to be combined with the readings of an accelerometer to provide a correct bearing.
~sensorには、[ `~smart~sensor@ ( `smart sensor^en )/ ~sensor~hub ( `sensor hub^en ) ]と呼ばれる[ ~hardware~levelで`較正$と`~sensor融合$を遂げる,組込みの算出-資源 ]を備えるものもある。 それは、 処理nに割かれる~CPU資源を~~節約し, ~battery消費を抑える。 ◎ Smart sensors and sensor hubs have built-in compute resources which allow them to carry out calibration and sensor fusion at the hardware level, freeing up CPU resources and lowering battery consumption in the process.
`~sensor融合$は、[ ~hardware~levelでは遂行し得ない/~appに特有な`~sensor融合$~algoが要求される ]場合には,~software内で遂げられることもある。 ◎ Sensor fusion can also be carried out in software if it cannot be performed at the hardware level or if an application-specific fusion algorithm is required.
5.3. 既定の~sensor
汎用~sensor~APIは、 最も共通的な利用事例を単直にするよう設計されている — より複階的な利用事例も可能化しつつ。 ◎ The Generic Sensor API is designed to make the most common use cases straightforward while still enabling more complex use cases.
今日にて配備されている ほとんどの~deviceは、 同じ`~sensor型$の`~sensor読取り$を供する複数個の`~device~sensor$を備えてはいない。 複数個の類似な`~device~sensor$を要求する利用事例は稀であり、 一般に,特定の`~sensor型$ — 2-in-1【一台二役】~laptop内の複数の加速度計など — に限られる。 ◎ Most of devices deployed today do not carry more than one device sensor providing sensor readings of the same type. The use cases which require a set of similar device sensors are rare and generally limited to specific sensor types, such as multiple accelerometers in 2-in-1 laptops.
したがって,~deviceの既定の(かつ一意になることが多い)`~device~sensor$とヤリトリするのを容易にするため、 この~APIは,各`~sensor型$に対し,単純に対応する[ `Sensor$I の下位class ]を~instance化する。 ◎ The API therefore makes it easy to interact with the device’s default (and often unique) sensor for each type simply by instantiating the corresponding Sensor subclass.
~~実際,[ 所与の`~sensor型$の`~device~sensor$のうち,特定0の一つを識別する ]ような,特有な情報が伴われない下では、 ~UAが `既定の~sensor@ ( `default sensor^en )を選ぶことになる。 ◎ Indeed, without specific information identifying a particular sensor of a given type, the default sensor is chosen by the user agent.
下層の~platformが`既定の~sensor$を見出す~interfaceを供する場合、 ~UAは,~platformから提供された~sensorを選ぶモノトスル。 他の場合、 ~UA自身が[ ~device上に在る`~device~sensor$のうち,どれが`既定の~sensor$になるか ]を定義する。 ◎ If the underlying platform provides an interface to find the default sensor, the user agent must choose the sensor offered by the platform, otherwise the user agent itself defines which of the sensors present on the device is the default sensor.
既定の加速度計の変化を~listenする例: ◎ Listening to the default accelerometer changes:
let %sensor = new Accelerometer({ frequency: 30 }); %sensor.onreading = () => { ... } %sensor.start();
注記: この仕様に対する拡張は、 `既定の~sensor$を定義しないことにしてもヨイ — そうしてもイミを成さないならば。 例えば,`~sensor型$ `geolocation^l (地理所在)用の既定の`~device~sensor$を明示的に定義しても,イミを成さない — その~interfaceの実装は、 複数の~backendを利用できるので。 ◎ Note: Extensions to this specification may choose not to define a default sensor when doing so wouldn’t make sense. For example, it does not make sense to explicitly define a default sensor for geolocation sensor type as the implementation of its interface can use multiple backends.
同じ~device上で,同じ`~sensor型$に対応する複数の`~device~sensor$が共存し得る事例では、 拡張~仕様は,それぞれを一意に識別する仕方を定義する必要がある。 ◎ In cases where multiple device sensors corresponding to the same type may coexist on the same device, specification extension will have to define ways to uniquely identify each one.
例えば、 `pressure of the left rear tire^en (空気圧, 左後輪の)を検査するとき: ◎ For example checking the pressure of the left rear tire:
var %sensor = new DirectTirePressureSensor( { position: "rear", side: "left" } ); %sensor.onreading = _ => console.log(%sensor.pressure); %sensor.start();
5.4. 標本化~frequency, 報告ng~frequency
この仕様の目的においては、 `~platform~sensor$の `標本化~frequency@ ( `sampling frequency^en )は, `~platform~sensor$が下層の`~device~sensor$から`~sensor読取り$を得する~frequencyとして定義される。 そのような`~sensor読取り$が得される仕方は、 `実装定義$とする。 ◎ For the purpose of this specification, a platform sensor's sampling frequency is defined as a frequency at which a platform sensor obtains sensor readings from the underlying device sensor. The way such sensor readings are obtained is implementation-defined.
`~platform~sensor$の`標本化~frequency$は、 下層の`~device~sensor$の実際の標本化~rateに対応するとは限らず, この仕様の目的においては不透明である。 ◎ The platform sensor's sampling frequency may not correspond to the device sensor's actual sampling rate, which, for the purpose of this specification, is opaque.
注記: [ `~sensor読取り$用の~system~levelの~API ]および[ 当の~sensor自身に対する下層の~hardware~interface ]は、 ~polling用にも~event用にも築かれ得る。 ~pollingに基づく`~device~sensor$用には、 `~platform~sensor$の`標本化~frequency$は,[ ~system/~hardware ]から新たな読取りが要請される~rateになる。 ~eventに基づく`~device~sensor$用には、 `~platform~sensor$が,要請された標本化~frequencyを[ ~system/~hardware ]に供する — ~eventたちは、 その~frequency以下で生成される。 ~eventは、 ~sensor読取りが変化しなかった場合には,生成されないこともある。 ◎ Note: System-level APIs for sensor readings and the underlying hardware interface to the sensors themselves may be built for polling or events. For a polling-based device sensor, the platform sensor's sampling frequency would be the rate at which a new reading is requested from the system or hardware. For an event-based device sensor, a platform sensor provides a requested sampling frequency to the system or hardware, and events are generated at that frequency or below. Events may not be generated if the sensor reading has not changed.
`~device~sensor$は、 自身が`~platform~sensor$から受容できる標本化~frequencyの限界域を[ `最小~標本化~frequency@dV / `最大~標本化~frequency@dV ]の形でを供してもヨイ — 指定されない場合、[ 0 / 無限大 ]をとるとする†。 `~platform~sensor$の`標本化~frequency$は、 下層の`~device~sensor$の[ `最小~標本化~frequency$dV以上, `最大~標本化~frequency$dV以下 ]になるモノトスル。 ◎ A device sensor may provide bounds for the sampling frequency value it can accept from a platform sensor in the form of a minimum sampling frequency and a maximum sampling frequency. A platform sensor's sampling frequency must not be less than the device sensor's minimum sampling frequency or greater than its maximum sampling frequency.
【† これら “既定の” 値は、 他所の記述を簡素化するための,この訳による追加。 】
`~platform~sensor$ %~sensor の`標本化~frequency$は、[ %~sensor にて`作動化された~sensor~obj群$を成す各`~item$が供する `frequency$sl ]に基づいて決定される。 この計算は,`実装定義$であるが、 その結果は,次の両者により設定される限界域の中に入るモノトスル: ◎ A platform sensor's sampling frequency is determined based on the provided [[frequency]] of the items in its set of activated sensor objects. The calculation is implementation-defined, but the outcome value must lie within the bounds set by\
- %~sensor が`属する~sensor型$の[ `最小~標本化~frequency$, `最大~標本化~frequency$ ] ◎ the platform sensor's sensor type's minimum and maximum sampling frequencies and\
- %~sensor の下層の`~device~sensor$の[ `最小~標本化~frequency$dV, `最大~標本化~frequency$dV ] ◎ its device sensor's minimum and maximum sampling frequencies.
注記: 例えば,~UAは、 `標本化~frequency$を[ 供された各 `frequency$sl が成す集合の `Least Common Denominator (LCD)^en 【!最小公分母】 ]を[ 下層の~platformにより定義される`標本化~frequency$の限界域 ]で切り詰めた結果として見積もってもよい。 ◎ Note: For example, the user agent may estimate the sampling frequency as a Least Common Denominator (LCD) for a set of provided [[frequency]] capped by sampling frequency bounds defined by the underlying platform.
具象-【~sensorに対応する】 `Sensor$I ~obj用の `報告ng~frequency@ ( `reporting frequency^en )は、 この~objに向けて `reading$et ~eventが`発火され$る~frequencyとして定義される。 ◎ The reporting frequency for a concrete Sensor object is defined as a frequency at which the "reading" event is fired at this object.
`Sensor$I ~obj %~sensor は、 ~UAが下層の~platformから新たな`~sensor読取り$を得するよりも高い~rateでは, それらに~accessし得ない。 したがって, %~sensor の`報告ng~frequency$は: ◎ A Sensor object cannot access new readings at a higher rate than the user agent obtains them from the underlying platform, therefore the reporting frequency\
- %~sensor に結付けられた`~platform~sensor$ %~platform~sensor の`標本化~frequency$を — その結果,その下層の(指定されたならば)`~device~sensor$の`最大~標本化~frequency$dVも — 決して超過しない。 ◎ can never exceed a platform sensor's sampling frequency, which in turn can never exceed a device sensor's maximum sampling frequency (when specified).
-
次に挙げる事例などにおいては、 %~sensor の `frequency$sl と相違する: ◎ The reporting frequency differs from the Sensor's [[frequency]] in cases such as:
- 要請された `frequency$sl は、 次が返す限界域の外側にある ⇒ `~platform~sensorの標本化~限界域を取得する$( %~platform~sensor ) ◎ the requested [[frequency]] lies outside the bounds returned by invoking get a platform sensor’s sampling bounds with Sensor's associated platform sensor.
- ~OSまたは当の`~device~sensor$が, 前回に報告されたものから(絶対的あるいは相対的に)十分に相違しない読取りを — ~hardwareや~OSの~filterを介して,自動的に — 破棄している。 ◎ the operating system and/or the device sensor automatically discard readings that do not differ enough (in absolute or relative terms) from the previously reported ones via a hardware or operating system filter.
- %~platform~sensor が`属する~sensor型$の`~threshold検査~algo$に失敗した 【~algoは ~F を返した】 結果、 %~platform~sensor の`最新な読取り~map$は更新されなかった。 ◎ the Sensor instance’s associated sensor type's threshold check algorithm fails and the platform sensor's latest readings are not updated.
5.5. ~sensor読取りを公開するための条件
~UAが所与の`文書$ %文書 に対し `~sensor読取りを公開できる@ ( `can expose sensor readings^en ) のは、 ~AND↓ が満たされるとき, そのときに限られる: ◎ The user agent can expose sensor readings to a Document document if and only if all of the following are true:
- %文書 に`関連な設定群~obj$は、 `~secureな文脈$enVである。 ◎ document’s relevant settings object is a secure context.
- %文書 の`可視性~状態$doc ~EQ `visible^l ◎ document’s visibility state is "visible".
- `~focusと生成元を検査する$( %文書 ) ~EQ ~T ◎ The focus and origin check on document returns true.
- `拡張~仕様$に `特有な条件@ ( `specific conditions^en ) — `拡張~仕様$は、 各自の~sensor型~用に,[ より厳密な要件を成す新たな条件 ]をこの~listに追加してもヨイ。 ◎ Specific conditions: Extension specifications may add new conditions to this list to have stricter requirements for their sensor types.
注記: 上に挙げた条件に加えて,重要な注意は、[ `Sensor$I の各~下位classは、 自身の構築子において `~sensor施策により制御される特能を検査する@#check-sensor-policy-controlled-features$こと ]および[ `start()$m ~methodは、 `~sensor~accessを要請する$こと ]である。 これらの検査は、 組で, `§ 軽減~策@#mitigation-strategies$ にて述べられる軽減~策に対応する。 ◎ Note: In addition to the conditions above, it is important to note that Sensor subclasses invoke the check sensor policy-controlled features operation in their constructors, and § 7.1.7 Sensor.start() invokes request sensor access. Together, these checks correspond to the mitigation strategies described in § 4.2 Mitigation Strategies.
注記: ~hardware資源を解放するため、 ~UAは,[ `~sensor読取りを公開できる$ようになるまで,新たに可用な読取りについての通知を休止する ]よう,下層の`~platform~sensor$に要請できる/し得る。 ◎ Note: In order to release hardware resources, the user agent can request underlying platform sensor to suspend notifications about newly available readings until it can expose sensor readings.
6. ~model
6.1. ~sensor型
各 `~sensor型@ ( `sensor type^en )には、 次に挙げる~dataが結付けられなければナラナイ: ◎ A sensor type must have the following associated data:
- 1 個~以上の`拡張~sensor~interface$たち。 ◎ One or more extension sensor interfaces.
-
`~sensor許可~名~群@ ( `sensor permission names^en ) ⇒ `強力な特能$を識別する`名前$たちが成す`空$でない`集合$。 ◎ A non-empty ordered set of associated powerful feature names referred to as sensor permission names.
注記: 複数の`~sensor型$が、 同じ`名前$を共有し得る。 ◎ Note: Multiple sensor types may share the same name.
- `~sensor特能~名~群@ ( `sensor feature names^en ) ⇒ `施策により制御される特能$を識別する~tokenたちが成す`空$でない`集合$。 ◎ A non-empty ordered set of associated policy-controlled feature tokens referred to as sensor feature names.
- ある`許可~revocation~algo$ ◎ A permission revocation algorithm.
- `最小~標本化~frequency@ ⇒ ある正な数。 これは、 `実装定義$になるか,`拡張~仕様$により定義される。 どちらも設定された場合、 大きい方の値が利用される。 ◎ A minimum sampling frequency, a positive number. It is either implementation-defined or defined by an extension specification. If both are set, the largest value is used.
- `最大~標本化~frequency@ ⇒ ある正な数。 これは、 `実装定義$になるか,`拡張~仕様$により定義される。 どちらも設定された場合、 小さい方の値が利用される。 ◎ A maximum sampling frequency, a positive number. It is either implementation-defined or defined by an extension specification. If both are set, the smallest value is used.
`最小~標本化~frequency$は、 `最大~標本化~frequency$以下になるモノトスル。 ◎ The minimum sampling frequency must not be greater than the maximum sampling frequency.
各`~sensor型$には、 次に挙げる~dataが結付けられてもヨイ — いずれも,無い場合は ε をとるとする: ◎ A sensor type may have the following associated data:
- `既定の~sensor$ ⇒ 【ある`~device~sensor$/`~platform~sensor$。】 ◎ A default sensor.
- `~threshold検査~algo@ ( `threshold check algorithm^en ) ⇒ 所与の[ 別々な 2 個の`~sensor読取り$ ]に対し,真偽値を返す~algo。 これは、 2 つの読取りが十分~相違するか否かを決定する — 当の`~platform~sensor$の`最新な読取り~map$は、 その結果が ~T になる場合に限り,更新される。 ◎ A threshold check algorithm, which takes as arguments two separate sensor readings and determines if they differ enough to cause a platform sensor's latest reading map to be updated.
- `読取り量子化~algo@ ( `reading quantization algorithm^en ) ⇒ 所与の`~sensor読取り$に対し, 正確度に劣る`~sensor読取り$を返す~algo。 ◎ A reading quantization algorithm, which takes a sensor reading and returns a less accurate sensor reading.
- `属する~virtual~sensor型@ ⇒ ある`~virtual~sensor型$ ◎ A virtual sensor type.
6.2. ~sensor
現在の`閲覧~文脈$の`~platform~sensor$には、 次に挙げるものが結付けられるモノトスル: 【各~platform~sensor?/“現在の” とは?】 ◎ The current browsing context's platform sensor must have:
- `作動化された~sensor~obj群@ ( `activated sensor objects^en ) ⇒ 【`Sensor$I ~objたちが成す】`集合$ — 初期~時は`空$とする ◎ An associated set of activated sensor objects, which is initially empty;
- `最新な読取り~map@ ( `latest reading map^en / `latest readings^en / `latest reading^en ) ⇒ `~map$ — これは、最新な[ 可用な`~sensor読取り$ ]を保持する ◎ An associated latest reading map, which holds the latest available sensor readings.
- `属する~sensor型@ ⇒ ある`~sensor型$ ◎ An associated sensor type.
どの時点であれ,`~platform~sensor$用の新たな`~sensor読取り$が得されたときは、 次を走らすとする ⇒ ~IF[ ~UAは、 現在の`~navigable$にて`作動中な文書$navに対し`~sensor読取りを公開できる$ ] ⇒ `最新な読取りを更新する$( `~platform~sensor$, `~sensor読取り$ ) ◎ Any time a new sensor reading for a platform sensor is obtained and if the user agent can expose sensor readings to the current navigable's active document, the user agent invokes update latest reading with the platform sensor and the sensor reading as arguments.
`最新な読取り~map$は、 `~key$mapとして `timestamp^l を伴う`~entry$を包含する。 その`値$mapは、 高-分解能な時刻印であり, `読取り時刻印$の見積もりを[ ~milli秒数で表出される,`安全でない現在の時刻$1 ]として与える。 ◎ The latest reading map contains an entry whose key is "timestamp" and whose value is a high resolution timestamp that estimates the reading timestamp expressed in milliseconds as an unsafe current time.
`最新な読取り~map$[ `timestamp^l ] は、 初期~時は ~NULL に設定される — `最新な読取り~map$が,以前の`~sensor読取り$を~cacheしていない限り。 ◎ Latest reading["timestamp"] is initially set to null, unless the latest reading map caches a previous reading.
`最新な読取り~map$を成す他の`~entry$は、 各種`~platform~sensor$により測定された物理量の値を保持する。 これらの`~entry$の`~key$mapは、[ 当の`~sensor型$に結付けられた ある`拡張~sensor~interface$ %~interface ]に定義される`属性$ %属性 の`識別子$ %識別子 に合致するモノトスル。 %属性 の取得子の返り値は、 次を呼出すことで容易に得される ⇒ `最新な読取り~mapから値を取得する$( %~interface を実装している~obj, %識別子 ) ◎ The other entries of the latest reading map hold the values of the different quantities measured by the platform sensor. The keys of these entries must match the attribute identifier defined by the sensor type's associated extension sensor interface. The return value of the attribute getter is easily obtained by invoking get value from latest reading with the object implementing the extension sensor interface and the attribute identifier as arguments.
`最新な読取り~map$を成す どの`~entry$も,その`値$mapは、 初期~時は ~NULL に設定されるとする。 ◎ The value of all latest reading entries is initially set to null.
`~platform~sensorの標本化~限界域を取得する@ ときは、 所与の ( `~platform~sensor$ %~platform~sensor ) に対し: ◎ To get a platform sensor’s sampling bounds given a platform sensor platformSensor:
- %最小~frequency ~SET 次に挙げる値たちの最大 ⇒# %~platform~sensor の`~sensor型$の`最小~標本化~frequency$, %~platform~sensor に接続された`~device~sensor$の`最小~標本化~frequency$dV ◎ Let minimumFrequency be platformSensor’s sensor type's minimum sampling frequency. ◎ If platformSensor’s connected device sensor has a minimum sampling frequency, set minimumFrequency to the maximum of minimumFrequency and this value.
- %最大~frequency ~SET 次に挙げる値たちの最小 ⇒# %~platform~sensor の`~sensor型$の`最大~標本化~frequency$, %~platform~sensor に接続された`~device~sensor$の`最大~標本化~frequency$dV ◎ Let maximumFrequency be platformSensor’s sensor type's maximum sampling frequency. ◎ If platformSensor’s connected device sensor has a maximum sampling frequency, set maximumFrequency to the minimum of maximumFrequency and this value.
- ~RET `~tuple$( %最小~frequency, %最大~frequency ) ◎ Return a tuple (minimumFrequency, maximumFrequency).
`上で述べた~model@#model$のアリな実装を,次の例に示す。 ◎ This example illustrates a possible implementation of the described Model.
下の図式では、[ 異なる 2 つの`閲覧~文脈$ それぞれにおいて`作動化された~sensor~obj群$ ]が,単独の`~device~sensor$とヤリトリする。 ◎ In the diagram below several activated Sensor objects from two different browsing contexts interact with a single device sensor.
【! generic_sensor_model.png 】- ~frequency = 1 Hz
- `state$sl = `activated^l
- ~frequency = 10 Hz
- `state$sl = `activated^l
- 要請された標本化~frequency = 10 Hz
- 作動化された~sensor~obj
- 最新な読取り
- ~frequency = 1 Hz
- `state$sl = `activated^l
- ~frequency = 1 Hz
- `state$sl = `idle^l
- 要請された標本化~frequency = 1 Hz
- 作動化された~sensor~obj
- 最新な読取り
`遊休中@#sensor-lifecycle$( `idle^l )状態にある `Sensor$I ~objは、 `~platform~sensor$にて`作動化された~sensor~obj群$に含まれないので, `~device~sensor$とはヤリトリしない。 ◎ The Sensor object in "idle" state is not among the platform sensor's activated sensor objects and thus it does not interact with the device sensor.
この例には、 `閲覧~文脈$ごとに`~platform~sensor$~instanceがある。 ◎ In this example there is a platform sensor instance per browsing context.
`最新な読取り~map$は、 同じ`閲覧~文脈$からの `Sensor$I ~obj間で共有され, 対応する`~platform~sensor$に要請した`標本化~frequency$に等しい~rateで更新される。 ◎ The latest reading map is shared between Sensor objects from the same context and is updated at a rate equal to the requested sampling frequency of the corresponding platform sensor.
7. ~API
7.1. `Sensor^I ~interface
[`SecureContext$, `Exposed$=(DedicatedWorker, Window)] interface `Sensor@I : `EventTarget$I { readonly attribute `boolean$ `activated$m; readonly attribute `boolean$ `hasReading$m; readonly attribute `DOMHighResTimeStamp$I? `timestamp$m; `undefined$ `start$m(); `undefined$ `stop$m(); attribute `EventHandler$I `onreading$m; attribute `EventHandler$I `onactivate$m; attribute `EventHandler$I `onerror$m; }; dictionary `SensorOptions@I { `double$ `frequency@m; };
各 `Sensor$I ~objには、 ある`~platform~sensor$が結付けられる。 ◎ A Sensor object has an associated platform sensor.
各~具象- `Sensor$I ~obj %~obj には、 次を満たす ある`~sensor型$ %~sensor型 も結付けられる ⇒ %~obj が実装する ある`~interface$ ~IN %~sensor型 に結付けられた`拡張~sensor~interface$たち ◎ Concrete Sensor objects also have an associated sensor type, which is the sensor type that has their interface among its extension sensor interfaces.
【 遠回しな定義だが、 それ以上のことは,この仕様からは読み取れない。 該当し得るものが複数ある場合、 どれになるかは,個々の`拡張~仕様$により定義されるのかもしれない。 %~obj に結付けられた`~platform~sensor$が`属する~sensor型$を意図しているかもしれないが、 はっきりしない。 】
この仕様に言及される`~task$用の`~task~source$は、 `~sensor~task~source@ ( `sensor task source^en )とする。 ◎ The task source for the tasks mentioned in this specification is the sensor task source.
次の例では,~UAは、 先ず`~sensor読取り$に~accessする許可があるかどうか検査してから, 加速度計~sensorを構築して、[ 新たに可用にされた`~sensor読取り$についての[ `~platform~sensor$の作動化, ~error条件, 通知 ]用の`~event$を取得する ]ための`~event~listener$を追加する。 この例は、[ `~platform~sensor$を~hostしている~deviceの それまでに測定された最大な加速度 ]を~logする。 ◎ In the following example, firstly, we check whether the user agent has permission to access sensor readings, then we construct accelerometer sensor and add event listeners to get events for platform sensor activation, error conditions and notifications about newly available sensor readings. The example measures and logs maximum total acceleration of a device hosting the platform sensor.
対応する `Sensor$I ~interfaceの`~event~handler$属性~用の`~event~handler~event型$は、 `§ ~event~handler@#event-handlers$ に定義される。 ◎ The event handler event types for the corresponding Sensor Interface's event handler attributes are defined in Event handlers section.
navigator.permissions.query({ name: 'accelerometer' }).then(%result => { if (%result.state === 'denied') { console.log('加速度計~sensorを利用する許可は否認されました。'); return; } let %acl = new Accelerometer({frequency: 30}); let %max_magnitude = 0; %acl.addEventListener('activate', () => console.log('測定する用意ができました')); %acl.addEventListener('error', %error => console.log(``^~error: ${%error.name}``^)); %acl.addEventListener('reading', () => { let %magnitude = Math.hypot(%acl.x, %acl.y, %acl.z); if (%magnitude > %max_magnitude) { %max_magnitude = %magnitude; console.log(``^最大値: ${%max_magnitude} m/s2``^); } }); %acl.start(); });
7.1.1. `Sensor^I の~lifecycle
注記: 上の図式~内の各~nodeは、 `Sensor$I ~objの各~状態( `state$sl 値)を表現する。 それらは、下層の[ `~platform~sensor$/`~device~sensor$ ]にアリな状態と混同するべきでない。 ◎ Note: The nodes in the diagram above represent the states of a Sensor object and they should not be confused with the possible states of the underlying platform sensor or device sensor.
7.1.2. `Sensor^I の~garbage収集
`Sensor$I ~objは、 ~OR↓ を満たす間は~garbage収集しないモノトスル: ◎ ↓
- [ `state$sl ~EQ `activating^l ]~AND[[ `activate$et【!原文は `activated^et】 / `reading$et / `error$et ]~event用に登録された~event~listenerがある ◎ A Sensor object whose [[state]] is "activating" must not be garbage collected if there are any event listeners registered for "activated" events, "reading" events, or "error" events.
- [ `state$sl ~EQ `activated^l ]~AND[[ `reading$et / `error$et ]~event用に登録された~event~listenerがある ] ◎ A Sensor object whose [[state]] is "activated" must not be garbage collected if there are any event listeners registered for "reading" events, or "error" events.
`Sensor$I ~objのうち[ その `state$sl ~IN { `activated^l, `activating^l } ]を満たすもの %O が~garbage収集されるときは、 ~UAは次を呼出すモノトスル ⇒ `~sensor~objを非作動化する$( %O ) ◎ When a Sensor object whose [[state]] is "activated" or "activating" is garbage collected, the user agent must invoke deactivate a sensor object with this object as argument.
7.1.3. `Sensor^I の内部~slot
`Sensor$I の各~instanceは、 次の表tに述べる内部~slotを伴って作成される: ◎ Instances of Sensor are created with the internal slots described in the following table:
内部~slot | 値~型 | 初期~値 | 記述(規範的でない) |
---|---|---|---|
`state@sl | `文字列$ | `idle^l | `Sensor$I ~objの現在の状態 — 次のいずれかをとる ⇒ `idle^l, `activating^l, `activated^l |
`frequency@sl | ~NULL または `double^c | ~NULL |
~frequencyを~in-Hzで表現する。 [ 結付けられた`~platform~sensor$用の`標本化~frequency$を計算する/ この `Sensor$I ~obj用の`報告ng~frequency$の上限を定義する ]ために利用される。 |
`lastEventFiredAt@sl | ~NULL または `double^c | ~NULL |
`Sensor$I ~objの観測器へ送信された最新な`~sensor読取り$の[ `時刻~起点$enVからの~milli秒数で表出される,高-分解能な時刻印 ]。 |
`pendingReadingNotification@sl | 真偽値 | ~F | 新たな`~sensor読取り$が報告された後,観測器【すなわち `Sensor$I ~obj】に通知される必要があるかどうかを指示する。 |
7.1.4〜11. 属性と~method
`activated@m 取得子~手続きは ⇒ ~RET ~IS[ コレ . `state$sl ~EQ `activated^l ] ◎ 7.1.4. Sensor.activated ◎ The activated getter steps are: • If this.[[state]] is "activated", return true. • Otherwise, return false.
`hasReading@m 取得子~手続きは: ◎ 7.1.5. Sensor.hasReading ◎ The hasReading getter steps are:
- %時刻印 ~LET `最新な読取り~mapから値を取得する$( コレ, `timestamp^l ) ◎ Let timestamp be the result of invoking get value from latest reading with this and "timestamp" as arguments.
- ~RET ~IS[ %時刻印 ~NEQ ~NULL ] ◎ If timestamp is not null, return true. ◎ Otherwise, return false.
`timestamp@m 取得子~手続きは: ◎ 7.1.6. Sensor.timestamp ◎ The timestamp getter steps are:
- %大域~obj ~LET コレに`関連な大域~obj$ ◎ Let global be this's relevant global object.
- %安全でない時刻印 ~LET `最新な読取り~mapから値を取得する$( コレ, `timestamp^l ) ◎ Let unsafeTimestamp be the result of invoking get value from latest reading with this and "timestamp" as arguments.
- ~IF[ %安全でない時刻印 ~EQ ~NULL ] ⇒ ~RET ~NULL ◎ If unsafeTimestamp is null, return null.
- ~RET `相対的な高分解能~時刻$( %安全でない時刻印, %大域~obj ) ◎ Otherwise, return relative high resolution time with unsafeTimestamp and global.
`start()@m ~method手続きは: ◎ 7.1.7. Sensor.start() ◎ The start() method steps are:
- ~IF[ コレ . `state$sl ~IN { `activating^l, `activated^l } ] ⇒ ~RET ◎ If this.[[state]] is either "activating" or "activated", then return.
- コレ . `state$sl ~SET `activating^l ◎ Set this.[[state]] to "activating".
-
この段は`並列的$に走らす: ◎ Run these sub-steps in parallel:
- %許可~状態 ~LET `~sensor~accessを要請する$( コレ ) ◎ Let permissionState be the result of invoking request sensor access with this as argument.
-
~IF[ %許可~状態 ~EQ `denied^l ] ⇒ ◎ If permissionState is "denied", then:
- %e ~LET `例外を作成する$( `NotAllowedError$E ) ◎ Let e be the result of creating a "NotAllowedError" DOMException.
-
`~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `~errorを通知する$( コレ, %e )◎ Queue a task to run notify error with this and e as arguments. - ~RET ◎ Return.
- %接続されたか ~LET `~sensorに接続する$( コレ, コレに`関連な大域~obj$ ) ◎ Let connected be the result of invoking connect to sensor with this and this's relevant global object as argument.
-
~IF[ %接続されたか ~EQ ~F ]: ◎ If connected is false, then
- %e ~LET `例外を作成する$( `NotReadableError$E ) ◎ Let e be the result of creating a "NotReadableError" DOMException.
-
`~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `~errorを通知する$( コレ, %e )◎ Queue a task to run notify error with this and e as arguments. - ~RET ◎ Return.
- `~sensor~objを作動化する$( コレ ) ◎ Invoke activate a sensor object with this as argument.
`stop()@m ~method手続きは: ◎ 7.1.8. Sensor.stop() ◎ The stop() method steps are:
- ~IF[ コレ . `state$sl ~EQ `idle^l ] ⇒ ~RET ◎ If this.[[state]] is "idle", then return.
- コレ . `state$sl ~SET `idle^l ◎ Set this.[[state]] to "idle".
- この段は`並列的$に走らす ⇒ `~sensor~objを非作動化する$( コレ ) ◎ Run these sub-steps in parallel: • Invoke deactivate a sensor object with this as argument.
`onreading@m は、 `~event~handler~IDL属性$【! `EventHandler$I 】であり, 新たな`~sensor読取り$が可用であることを通知するために~callされる。 ◎ 7.1.9. Sensor.onreading ◎ onreading is an EventHandler which is called to notify that new reading is available.
`onactivate@m は、 `~event~handler~IDL属性$【! `EventHandler$I 】であり, コレ . `state$sl が `activating^l から `activated^l へ遷移したときに~callされる。 ◎ 7.1.10. Sensor.onactivate ◎ onactivate is an EventHandler which is called when this.[[state]] transitions from "activating" to "activated".
`onerror@m は、 `~event~handler~IDL属性$【! `EventHandler$I 】であり,[ 抽象-演算/~IDL演算 ]における~errorを同期的に取扱えないときに~callされる。 ◎ 7.1.11. Sensor.onerror ◎ onerror is an EventHandler which is called whenever an error in an abstract or IDL operation cannot be handled synchronously.
7.1.12. ~event~handler
`Sensor$I ~interfaceを実装している~objは、 次に挙げる`~event~handler$ (および,それぞれに対応する`~event~handler~event型$) を属性として~supportするモノトスル: ◎ The following are the event handlers (and their corresponding event handler event types) that must be supported as attributes by the objects implementing the Sensor interface:
~event~handler | ~event~handler~event型 |
---|---|
`onreading^m | `reading@et |
`onactivate^m | `activate@et |
`onerror^m | `error@et |
7.2. `SensorErrorEvent^I ~interface
[`SecureContext$, `Exposed$=(DedicatedWorker, Window)] interface `SensorErrorEvent@I : `Event$I { `SensorErrorEvent@mc(`DOMString$ %type, `SensorErrorEventInit$I %errorEventInitDict); readonly attribute `DOMException$I `error$m; }; dictionary `SensorErrorEventInit@I : `EventInit$I { required `DOMException$I `error@mb; };
`SensorErrorEvent$I の~instanceは、 `~event構築子$に述べられる手続きに従って構築される。 ◎ SensorErrorEvent instances are constructed by following the steps described in Event's constructor.
`error@m 取得子は、 初期化-時の値を返すモノトスル。 それは、 `SensorErrorEventInit$I を介して渡された `DOMException$I ~objを表現する。 ◎ The error attribute must return the value it was initialized to.\ It represents the DOMException object passed to SensorErrorEventInit.
8. 抽象-演算
8.1. ~sensor~objを初期化する
所与の ( `Sensor$I ~obj %~sensor~instance, `SensorOptions$I 辞書~instance %~option群 ) に対し: ◎ input • sensor_instance, a Sensor object. • options, a SensorOptions dictionary instance. output • None
- %~option群 を成す ~EACH( %~key → %値 ) に対し ⇒ ~IF[ %~key ~NIN %~sensor~instance の型が`~supportする~sensor~option群$ ] ⇒ ~THROW `NotSupportedError$E ◎ For each key → value of options • If the associated supported sensor options does not contain key •• Throw "NotSupportedError" DOMException.
- %~frequency ~LET %~option群[ "`frequency$m" ] ◎ ↓
-
~IF[ %~frequency ~NEQ ε ] ⇒ %~sensor~instance . `frequency$sl ~SET %~frequency ◎ If options["frequency"] exists, then • Set sensor_instance.[[frequency]] to options["frequency"].
注記: 要請された `frequency$m を~UAが尊重できる保証は無い。 適用され得る拘束については、 `§ 標本化~frequency, 報告ng~frequency@#concepts-sampling-and-reporting-frequencies$ を見よ。 ◎ Note: There is no guarantee that the requested options["frequency"] can be respected. See § 5.4 Sampling Frequency and Reporting Frequency for constraints that may be applied.
8.2. ~sensor施策により制御される特能を検査する
所与の ( `~sensor型$ %~sensor型 ) に対し,真偽値を返す: ◎ input • sensor_type, a sensor type. output • True if all of the associated sensor feature names are allowed to use, false otherwise.
- %~sensor型 の`~sensor特能~名~群$を成す ~EACH( %特能~名 ) に対し ⇒ ~IF[ `作動中な文書$navには %特能~名 の`利用は許容されて$いない ] ⇒ ~RET ~F ◎ Let feature_names be the sensor_type’s associated sensor feature names. ◎ For each feature_name of feature_names, • If active document is not allowed to use the policy-controlled feature named feature_name, then: •• Return false.
- ~RET ~T ◎ Return true.
8.3. ~sensorに接続する
所与の ( `Sensor$I ~obj %~sensor, `大域~obj$ %大域~obj ) に対し,[ %~sensor に ある`~platform~sensor$が結付けられるならば ~T / ~ELSE_ ~F ]を返す: ◎ input • sensor, a Sensor object. • global, a global object. output • True if sensor was associated with a platform sensor, false otherwise.
- %~platform~sensor ~LET ~NULL ◎ Let platformSensor be null.
- %~sensor型 ~LET %~sensor が`属する~sensor型$ ◎ Let type be sensor’s associated sensor type.
- %~virtual~sensor型 ~LET %~sensor型【!%~sensor】 が`属する~virtual~sensor型$ ◎ Let virtualSensorType be sensor’s associated virtual sensor type, or null if it is not set.
- %~virtual~sensor ~LET ε ◎ ↓
- ~IF[ %~virtual~sensor型 ~NEQ ε【!~NULL】 ] ⇒ %~virtual~sensor ~SET %大域~obj に`対応する~navigable$の`~top-level辿可能$navの`~virtual~sensor対応付け$[ %~virtual~sensor型 ] ◎ Let topLevelTraversable be global’s navigable's top-level traversable. ◎ ↓
-
~IF[ %~virtual~sensor ~NEQ ε ] ⇒ ~IF[ %~virtual~sensor の`読取りを供せるか$ ~EQ ~T ] ⇒ %~platform~sensor ~SET %~virtual~sensor に対応している`~platform~sensor$ ◎ If virtualSensorType is not null and topLevelTraversable’s virtual sensor mapping contains virtualSensorType: • Let virtualSensor be topLevelTraversable’s virtual sensor mapping[virtualSensorType]. • If virtualSensor’s can provide readings flag is true, set platformSensor to a platform sensor corresponding to virtualSensor.
注記: `読取りを供せるか$ ~EQ ~F の場合、 %~platform~sensor は ~NULL であり続け,この~algoは ~F を返すことになる。 ◎ • Note: If the can provide readings flag is false, platformSensor will remain null and this algorithm will return false.
- ~ELSE ⇒ %~platform~sensor ~LET 当の~deviceが備える[ %~sensor型 用の`~sensor読取り$を供せる`~device~sensor$たち ]の個数に応じて ⇒# 0 個ならば ~NULL / 1 個ならば その唯一の`~device~sensor$に対応する`~platform~sensor$/ 複数個ならば %~sensor型 用の`既定の~sensor$は定義されて[いるならば それ/いなければ ~NULL] ◎ Otherwise: • If the device has a single device sensor which can provide readings for type, then •• Set platformSensor to a platform sensor corresponding to this device sensor. • If the device has multiple device sensors which can provide readings for type, then • If type has an associated default sensor, then •• Set platformSensor to a platform sensor corresponding to this default device sensor.
- ~IF[ %~platform~sensor ~EQ ~NULL ] ⇒ ~RET ~F ◎ If platformSensor is null, return false.
- ( %最小, %最大 ) ~LET `~platform~sensorの標本化~限界域を取得する$( %~platform~sensor ) ◎ Let bounds be the result of invoking get a platform sensor’s sampling bounds with platformSensor.
- ~IF[ %~sensor . `frequency$sl ~EQ ~NULL ] ⇒ %~sensor . `frequency$sl ~SET %~sensor型 に依存する`実装定義$な値 ◎ If sensor.[[frequency]] is null, set it to an implementation-defined value dependent on type.
- ~IF[ %~sensor . `frequency$sl ~LT %最小 ] ⇒ %~sensor . `frequency$sl ~SET %最小 ◎ If sensor.[[frequency]] is less than bounds[0], set it to bounds[0].
- ~IF[ %~sensor . `frequency$sl ~GT %最大 ] ⇒ %~sensor . `frequency$sl ~SET %最大 ◎ If sensor.[[frequency]] is greater than bounds[1], set it to bounds[1].
- ~RET ~T ◎ Return true.
8.4. ~sensor~objを作動化する
所与の ( `Sensor$I ~obj %~sensor~instance ) に対し: ◎ input • sensor_instance, a Sensor object. output • None
- %~sensor ~LET %~sensor~instance の`~platform~sensor$ ◎ Let sensor be the platform sensor associated with sensor_instance.
- %~sensor にて`作動化された~sensor~obj群$に %~sensor~instance を`付加する$set ◎ Append sensor_instance to sensor’s set of activated sensor objects.
- `~sensor設定群を設定する$( %~sensor ) ◎ Invoke set sensor settings with sensor as argument.
-
`~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `作動化d状態を通知する$( %~sensor~instance )◎ Queue a task to run notify activated state with sensor_instance as an argument.
8.5. ~sensor~objを非作動化する
所与の ( `Sensor$I ~obj %~sensor~instance ) に対し: ◎ input • sensor_instance, a Sensor object. output • None
- `~sensor~task~source$に結付けられた`~task~queue$から %~sensor~instance に結付けられた すべての`~task$を除去する ◎ Remove all tasks associated with sensor_instance from the task queue associated with sensor task source.
- %~sensor ~LET %~sensor~instance の`~platform~sensor$ ◎ Let sensor be the platform sensor associated with sensor_instance.
- ~IF[ %~sensor~instance ~NIN %~sensor にて`作動化された~sensor~obj群$ ] ⇒ ~RET ◎ If sensor’s set of activated sensor objects contains sensor_instance,
- %~sensor にて`作動化された~sensor~obj群$から %~sensor~instance を`除去する$ ◎ Remove sensor_instance from sensor’s set of activated sensor objects.
- `~sensor設定群を設定する$( %~sensor ) ◎ Invoke set sensor settings with sensor as argument.
- %~sensor~instance . `pendingReadingNotification$sl ~SET ~F ◎ Set sensor_instance.[[pendingReadingNotification]] to false.
- %~sensor~instance . `lastEventFiredAt$sl ~SET ~NULL ◎ Set sensor_instance.[[lastEventFiredAt]] to null.
8.6. 汎用~sensor許可~revocation~algo
所与の ( ある`強力な特能$を識別する`名前$ %許可~名 ) に対し: ◎ input • permissionName, a powerful feature name output • None
-
`現在の~realm$に属する ~EACH( `Sensor$I ~instance %~sensor ) に対し: ◎ For each Sensor instance sensor in the current realm:
- ~IF[ %~sensor . `state$sl ~EQ `idle^l ] ⇒ ~CONTINUE ◎ If sensor.[[state]] is "idle", then continue.
-
~IF[ %許可~名 ~IN %~sensor の`~sensor型$の`~sensor許可~名~群$ ]: ◎ If sensor’s sensor type's sensor permission names contains permissionName:
- `~sensor~objを非作動化する$( %~sensor ) ◎ Invoke deactivate a sensor object with sensor.
- %例外 ~LET `例外を作成する$( `NotAllowedError$E ) ◎ Let exception be the result of creating a "NotAllowedError" DOMException.
-
`~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `~errorを通知する$( %~sensor, %例外 )◎ Queue a task to run notify error with sensor and exception.
8.7. ~sensor設定群を設定する
所与の ( `~platform~sensor$ %~platform~sensor ) に対し: ◎ input • platformSensor, a platform sensor. output • None
-
~IF[ %~platform~sensor にて`作動化された~sensor~obj群$は`空$である ]: ◎ If platformSensor’s set of activated sensor objects is empty,
- %~platform~sensor の`標本化~frequency$ ~SET ~NULL ◎ Set platformSensor’s sampling frequency to null.
- %~platform~sensor の`最新な読取り~map$を成す ~EACH( %~key → %値 ) に対し ⇒ %~platform~sensor の`最新な読取り~map$[ %~key ] ~SET ~NULL ◎ For each key → value of platformSensor’s latest reading. • Set platformSensor’s latest reading[key] to null.
- `実装定義$な仕方で更新する `in which^en [ `~sensor読取り$は %~platform~sensor から得される ]から[ `~sensor読取り$をもはや供さない ]へ【?】 ◎ Update the implementation-defined way in which sensor readings are obtained from platformSensor to no longer provide readings.
- ~RET ◎ Return.
- %~platform~sensor の`標本化~frequency$ ~SET [ %~platform~sensor にて`作動化された~sensor~obj群$を成す各~itemの `frequency$sl 値 ]に基づく`実装定義$な値 ◎ Set platformSensor’s sampling frequency to an implementation-defined value based on the [[frequency]] values of the items in its activated sensor objects set.
- ( %最小, %最大 ) ~LET `~platform~sensorの標本化~限界域を取得する$( %~platform~sensor ) ◎ Let bounds be the result of invoking get a platform sensor’s sampling bounds with platformSensor.
- ~Assert: %最小 ~LTE %~platform~sensor の`標本化~frequency$ ~LTE %最大 ◎ Assert: platformSensor’s sampling frequency is greater than or equal to bounds[0] and less than or equal to bounds[1].
8.8. 最新な読取りを更新する
所与の ( `~platform~sensor$ %~sensor, `~sensor読取り$ %読取り ) に対し: ◎ input • sensor, a platform sensor. • reading, a sensor reading. output • None
- %検査~algo ~LET %~sensor が`属する~sensor型$の`~threshold検査~algo$ ◎ Let type be sensor’s associated sensor type.
- ~IF[ %検査~algo ~NEQ ε ]~AND[ %検査~algo( %読取り, %~sensor の`最新な読取り~map$ ) ~EQ ~F ] ⇒ ~RET ◎ If type’s threshold check algorithm is defined, then: • Let result be the result of invoking type’s threshold check algorithm with reading and sensor’s latest reading. • If result is false, then abort these steps.
- %時刻印 ~LET %読取り[ `timestamp^l ] ◎ ↓
-
~IF[ %時刻印 ~NEQ ε ]: ◎ If reading["timestamp"] exists:
-
%読取り[ `timestamp^l ] ~SET %時刻印 を`実装定義$な仕方で[ 【この手続きを呼出した環境の】 `時刻~起点$enVたちにより共有される同じ`単調増加~時計$の`安全でない現在の時刻$1 ]へ変換した結果 ◎ Set reading["timestamp"] to the result of converting its current value in an implementation-defined way to an unsafe current time using the same monotonic clock that is shared by time origins.
注記: この段の目標は、 %時刻印 が異なる時刻~起点に相対的であった場合でも,[ `HR-TIME$r にて述べられる演算により利用されるものと同じ`単調増加~時計$ ]で算出に利用できる値へ変換されることを確保することにある。 ◎ Note: The goal of this step is to ensure that a timestamp that may have been relative to a different time origin is converted to a value that can be used in computations with the same monotonic clock used by the operations described in [HR-TIME].
-
-
~ELSE ⇒ %読取り[ `timestamp^l ] ~SET `安全でない共有される現在の時刻$ ◎ Otherwise, set reading["timestamp"] to the unsafe shared current time.
注記: どちらの事例でも、 `安全でない現在の時刻$1は,~scriptには公開されない。 `Sensor$I の `timestamp$m は、 常に,`時刻~起点$enVに相対的な`粗化した~moment$を返す。 ◎ Note: In neither case is an unsafe current time ever exposed to script. Sensor.timestamp always returns a coarsened moment relative to a time origin.
- `最新な読取り~map$を成す ~EACH( %~key → %値 ) に対し ⇒ `最新な読取り~map$[ %~key ] ~SET %読取り を成す対応する値 ◎ For each key → value of latest reading. • Set latest reading[key] to the corresponding value of reading.
- %作動化された~sensor群 ~LET %~sensor にて`作動化された~sensor~obj群$ ◎ Let activated_sensors be sensor’s associated set of activated sensor objects.
- この段は`並列的$に走らす ⇒ %作動化された~sensor群 を成す ~EACH( %s ) に対し ⇒ `最新な読取り更新を報告する$( %s ) ◎ Run these sub-steps in parallel: • For each s in activated_sensors, •• Invoke report latest reading updated with s as an argument.
8.9. 最新な読取り更新を報告する
所与の ( `Sensor$I ~obj %~sensor~instance ) に対し: ◎ input • sensor_instance, a Sensor object. output • None
- ~IF[ %~sensor~instance . `pendingReadingNotification$sl ~EQ ~T ] ⇒ ~RET ◎ If sensor_instance.[[pendingReadingNotification]] is true, • Return.
- %~sensor~instance . `pendingReadingNotification$sl ~SET ~T ◎ Set sensor_instance.[[pendingReadingNotification]] to true.
- %最後に報告された時刻印 ~LET %~sensor~instance . `lastEventFiredAt$sl ◎ Let lastReportedTimestamp be the value of sensor_instance.[[lastEventFiredAt]].
-
~IF[ %最後に報告された時刻印 ~EQ ~NULL【!is not set】 ] ⇒ ◎ If lastReportedTimestamp is not set
-
`~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `新たな読取りを通知する$( %~sensor~instance )◎ Queue a task to run notify new reading with sensor_instance as an argument. - ~RET ◎ Return.
-
- %~frequency ~LET %~sensor~instance . `frequency$sl ◎ ↓
- ~Assert: [ %~frequency ~NEQ ~NULL ]~AND[ %~frequency ~GT 0 ] ◎ Assert: sensor_instance.[[frequency]] is not null. ◎ Assert: sensor_instance.[[frequency]] is greater than 0.
- %報告ng間隔 ~LET 1 ~DIV %~frequency ◎ Let reportingInterval be the result of 1 / sensor_instance.[[frequency]].
- %時刻印~差分 ~LET `最新な読取り~map$[ `timestamp^l ] ~MINUS %最後に報告された時刻印 ◎ Let timestampDelta be the result of latest reading["timestamp"] - lastReportedTimestamp.
-
~IF[ %時刻印~差分 ~GTE %報告ng間隔 ] ⇒ ◎ If timestampDelta is greater than or equal to reportingInterval
-
`~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `新たな読取りを通知する$( %~sensor~instance )◎ Queue a task to run notify new reading with sensor_instance as an argument. - ~RET ◎ Return.
-
- ( %報告ng間隔 ~MINUS %時刻印~差分 ) を~~経過するまで`~event~loopを回す$ ◎ Let deferUpdateTime be the result of reportingInterval - timestampDelta. ◎ Spin the event loop for a period of time equal to deferUpdateTime.
-
~IF[ %~sensor~instance . `pendingReadingNotification$sl ~EQ ~T ] ⇒ `~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `新たな読取りを通知する$( %~sensor~instance )◎ If sensor_instance.[[pendingReadingNotification]] is true, • Queue a task to run notify new reading with sensor_instance as an argument.
8.10. 新たな読取りを通知する
所与の ( `Sensor$I ~obj %~sensor~instance ) に対し: ◎ input • sensor_instance, a Sensor object. output • None
- %~sensor~instance . `pendingReadingNotification$sl ~SET ~F ◎ Set sensor_instance.[[pendingReadingNotification]] to false.
- %~sensor~instance . `lastEventFiredAt$sl ~SET `最新な読取り~map$[ `timestamp^l ] ◎ Set sensor_instance.[[lastEventFiredAt]] to latest reading["timestamp"].
- `~eventを発火する$( %~sensor~instance, `reading$et ) ◎ Fire an event named "reading" at sensor_instance.
8.11. 作動化d状態を通知する
所与の ( `Sensor$I ~obj %~sensor~instance ) に対し: ◎ input • sensor_instance, a Sensor object. output • None
- %~sensor~instance . `state$sl ~SET `activated^l ◎ Set sensor_instance.[[state]] to "activated".
- `~eventを発火する$( %~sensor~instance, `activate$et ) ◎ Fire an event named "activate" at sensor_instance.
- %~sensor ~LET %~sensor~instance の`~platform~sensor$ ◎ Let sensor be the platform sensor associated with sensor_instance.
-
~IF[ %~sensor の`最新な読取り~map$[ `timestamp^l ] ~NEQ ~NULL ] ⇒ `~taskを~queueする$( `~sensor~task~source$, 次の手続き )
手続きは ⇒ `新たな読取りを通知する$( %~sensor~instance )◎ If sensor’s latest reading["timestamp"] is not null, • Queue a task to run notify new reading with sensor_instance as an argument.
8.12. ~errorを通知する
所与の ( `Sensor$I ~obj %~sensor~instance, `DOMException$I %~error ) に対し: ◎ input • sensor_instance, a Sensor object. • error, a DOMException. output • None
- %~sensor~instance . `state$sl ~SET `idle^l ◎ Set sensor_instance.[[state]] to "idle".
- `~eventを発火する$( %~sensor~instance, `error$et, `SensorErrorEvent$I ) — 次のように初期化して ⇒ `error$m 属性 ~SET %~error ◎ Fire an event named "error" at sensor_instance using SensorErrorEvent with its error attribute initialized to error.
8.13. 最新な読取りから値を取得する
所与の ( `Sensor$I ~obj %~sensor~instance, `文字列$ %~key ) に対し,[ `~sensor読取り$値/~NULL ]を返す: ◎ input • sensor_instance, a Sensor object. key, a string representing the name of the value. output • A sensor reading value or null.
-
~IF[ %~sensor~instance . `state$sl ~EQ `activated^l ] ⇒ ◎ If sensor_instance.[[state]] is "activated",
- %~platform~sensor ~LET %~sensor~instance に結付けられた`~platform~sensor$ ◎ ↓
- %読取り~map ~LET %~platform~sensor の`最新な読取り~map$ ◎ Let readings be the latest reading of sensor_instance’s related platform sensor.
- %量子化~algo ~LET %~platform~sensor が`属する~sensor型$の`読取り量子化~algo$ ◎ Let type be sensor_instance’s associated sensor type.
- ~IF[ %量子化~algo ~NEQ ε ] ⇒ %読取り~map ~SET %量子化~algo( %読取り~map ) ◎ If type’s reading quantization algorithm is defined, then: • Set readings to the result of invoking type’s reading quantization algorithm with readings.
- ~IF[ %~sensor~instance には、 ある`拡張~仕様$により`局所~座標系$ %座標系 が定義されている ] ⇒ %読取り~map を成す各~値を %座標系 内の値に変形する ( `COORDINATES-TRANSFORMATION$r を見よ) ◎ If the extension specification defines a local coordinate system for sensor_instance, • Remap (see [COORDINATES-TRANSFORMATION]) readings values to the local coordinate system.
- ~RET %読取り~map[ %~key ] ◎ Return readings[key].
- ~ELSE ⇒ ~RET ~NULL ◎ Otherwise, return null.
8.14. ~sensor~accessを要請する
所与の ( `Sensor$I ~obj %~sensor~instance ) に対し,`許可~状態$を返す: ◎ input • sensor_instance, a Sensor object. output • A permission state.
- ~Assert: この~algoは`並列的$に走っている。 【この段は、この訳による補完】
- %~sensor~instance の`~sensor型$の`~sensor許可~名~群$を成す ~EACH( %許可~名 ) に対し ⇒ ~IF[ `利用する許可を要請する$( %許可~名 ) ~EQ `denied^l ] ⇒ ~RET `denied^l ◎ Let sensor_type be sensor_instance’s associated sensor type. ◎ Let sensor_permissions be sensor_type’s associated sensor permission names. ◎ For each permission_name in sensor_permissions, • Let state be the result of requesting permission to use permission_name. • If state is "denied" •• Return "denied".
- ~RET `granted^l ◎ Return "granted".
8.15. ~focusと生成元を検査する
所与の ( `文書$ %文書 ) に対し,真偽値を返す: ◎ input • document, a Document. output • A boolean.
- %生成元 ~LET %文書 に`関連な設定群~obj$の`生成元$enV ◎ Let origin be document’s relevant settings object's origin.
- %被focus生成元 ~LET %文書 の`~node~navigable$の`~top-level辿可能$navの`現在の被focus区画$tlTの`~DOM~anchor$の`~node文書$に`関連な設定群~obj$の`生成元$enV ◎ Let focusedDocument be document’s node navigable's top-level traversable's currently focused area's DOM anchor's node document. ◎ Let focusedOrigin be focusedDocument’s relevant settings object's origin.
- ~RET ~IS[ ( %生成元, %被focus生成元 ) は`同じ生成元~domain$である ] ◎ Return true if origin and focusedOrigin are same origin-domain, and false otherwise.
9. 自動化
汎用~sensor~API, その`拡張~仕様$は、 作者に難題を~~課す — それらの~interfaceを全部的に行使するためには、 予測-可能な仕方で応答する物理的な~hardware~deviceが要るので。 この難題に取組むため、 この文書は,[ `~device~sensor$の様に挙動する`~virtual~sensor$を定義して制御する ]ことを許容する いくつかの `WEBDRIVER2$r `拡張~command$を定義する。 これらの`~virtual~sensor$は、 特定0の~propを伴う~deviceを表現し, その読取りは利用者【作者】がまるごと定義できる。 ◎ The Generic Sensor API and its extension specifications pose a challenge to test authors, as fully exercising those interfaces requires physical hardware devices that respond in predictable ways. To address this challenge this document defines a number of [WEBDRIVER2] extension commands that allow defining and controlling virtual sensors that behave like device sensors. These virtual sensors represent devices with particular properties and whose readings can be entirely defined by users.
9.1. ~virtual~sensor
`~virtual~sensor@ ( `virtual sensor^en )は、 `~device~sensor$の挙動を制御された仕方で模倣する。 それは、 それに接続された`~platform~sensor$たちが在れば,それらへ`~sensor読取り$を報告する。 ◎ A virtual sensor simulates the behavior of a device sensor in controlled ways. It reports sensor readings to zero or more platform sensors connected to it.
`~virtual~sensor$には、 次に挙げる~dataが結付けられる: ◎ A virtual sensor has the following associated data:
- `読取りを供せるか@vS ( `can provide readings flag^en ) ⇒ `真偽値$ ◎ A can provide readings flag (a boolean).
-
`要請された標本化~frequency@vS ( `requested sampling frequency^en ) ⇒ `有限な数$【!number】 ◎ A requested sampling frequency (a number).\
これは、 定例の`~device~sensor$の実際の標本化~frequencyと同じく不透明な,`実装定義$な値であり、[ `最小~標本化~frequency$vS, `最大~標本化~frequency$vS ]により設定された限界域の中にある。 当の`~virtual~sensor$が どの`~platform~sensor$にも読取りを供していない場合、 0 になる。 ◎ Just like a regular device sensor's actual sampling frequency is opaque, a virtual sensor's requested sampling frequency is an implementation-defined value that lies within the bounds set by the minimum sampling frequency and the maximum sampling frequency. If a virtual sensor is not providing readings to any platform sensor, its requested sampling frequency is 0.
注記: `要請された標本化~frequency$vSの値は、 とりわけ,それに接続された`~platform~sensor$が[ ある種の標本化~frequencyを要請したかどうか (`~platform~sensor$ごとに相違するかもしれない)や, 当の`~virtual~sensor$を~pollしているかどうか ]に依存する — 後者の事例では、 標本化~frequencyは,まったく要請されないかもしれない。 ◎ Note: Requested sampling frequency's value depends, among other things, on whether connected platform sensors have requested a certain sampling frequency (which might differ per platform sensor), or whether they are polling the virtual sensor, in which case no sampling frequency might have been requested at all.
-
`最小~標本化~frequency@vS ( `minimum sampling frequency^en ) ⇒ `有限な数$【!number】 ◎ A minimum sampling frequency (a number).\
`~virtual~sensor$は`~device~sensor$でもあるので、 これは,`~device~sensor$の`最小~標本化~frequency$dVに対応する。 ◎ A virtual sensor is a device sensor, so this corresponds to the device sensor's minimum sampling frequency.
-
`最大~標本化~frequency@vS ( `maximum sampling frequency^en ) ⇒ `有限な数$【!number】 ◎ A maximum sampling frequency (a number). \
`~virtual~sensor$は`~device~sensor$でもあるので、 これは,`~device~sensor$の`最大~標本化~frequency$dVに対応する。 ◎ A virtual sensor is a device sensor, so this corresponds to the device sensor's maximum sampling frequency.
`~virtual~sensor型@ ( `virtual sensor type^en )は、 所与の型の~sensorを表現する`文字列$である。 ◎ A virtual sensor type is a string that represents a sensor of a given type.
`型ごとの~virtual~sensor~metadata@ ( `per-type virtual sensor metadata^en )は、 `~virtual~sensor型$から`~virtual~sensor~metadata$への`有順序~map$であり, 初期~時は空とする。 `拡張~仕様$は、 この`~map$内に[ 自身が定義する`~sensor型$に対応する 1 個以上の~entry ]を定義するベキである。 ◎ The per-type virtual sensor metadata is an ordered map of virtual sensor types to virtual sensor metadata. It is initially empty, and extension specifications should define one or more entries in the map corresponding to the sensor types they define.
`~virtual~sensor~metadata@ ( `virtual sensor metadata^en )は、 次に挙げる`~item$sctからなる`構造体$である: ◎ A virtual sensor metadata is a struct whose items are:
- `読取り構文解析~algo@vsM ( `reading parsing algorithm^en ) ⇒ ある~algo — 所与の~JSON `Object$jt に対し,[ `~sensor読取り$/ `undefined^jv ]を返す。 ◎ reading parsing algorithm • An algorithm that takes a JSON Object and returns a sensor reading or undefined.
各`~top-level辿可能$は、 `~virtual~sensor対応付け@ ( `virtual sensor mapping^en ) を有する — それは、 `~virtual~sensor型$から`~virtual~sensor$への`有順序~map$である。 ◎ Each top-level traversable has a virtual sensor mapping, which is an ordered map of virtual sensor types to virtual sensor.
注記: `~virtual~sensor対応付け$【!`構造体$】は、 所与の型に属するすべての`~virtual~sensor$に共通な~dataを包含する。 `~virtual~sensor$は、 `~virtual~sensor$を[ 作成する/用立てる ]にあたって変わり得る~dataを包含する。 ◎ Note: The virtual sensor mapping struct contains data that is common to all virtual sensors of a given type. A virtual sensor contains data that can vary on virtual sensor creation and utilization.
注記: `~virtual~sensor対応付け$は、 `~navigable$ではなく`~top-level辿可能$に束ねられる — 所与の`~sensor型$を伴う`~platform~sensor$は、 どの`~navigable$においても,その`~top-level辿可能$navが同じなら同じ`~virtual~sensor$へ接続することが想定されるので。 これは、 現実における挙動 — 同じ~hardware~sensor(または融合~sensor)が異なる`~navigable$たちへ読取りを供する — をより良く真似る。 ◎ Note: Virtual sensor mappings are tied to top-level traversables rather than any navigable because platform sensors with a given sensor type in all navigables with the same top-level traversable are supposed to connect to the same virtual sensor. This better mimics real-world behavior, where the same hardware (or fusion) sensor provides readings to different navigables.
注記: この挙動は、 `web-platform-tests@https://web-platform-tests.org$ を通して,この仕様の~test法を追加的に援助する — `testdriver.js を介した~WebDriver通信は、すべて test harness を包含している~frameを通う@https://web-platform-tests.org/writing-tests/testdriver.html#using-test-driver-in-other-browsing-contexts$ ので。 ◎ Note: This behavior additionally aids testing of this specification through web-platform-tests, as all WebDriver communication via testdriver.js goes through the frame containing the test harness.
9.2. 拡張~command
【 この訳では、 この節に利用される `WEBDRIVER$r その他の用語に以下に挙げる表記を用いる: 】
- `~error@wdr( %~code )
- `~WebDriver~error~code$ %~code を伴う`~WebDriver~error$
- `成功@wdr( %~data )
- ~data~fieldに %~data を伴う`成功$
所与の %値 が `有限な数@ であるとは、 次が満たされることをいう ⇒ [ %値 は `Number$jt である ]~AND[ %値 ~NIN { `NaN^jv, `+∞^jv, `−∞^jv } ]
9.2.1. ~virtual~sensorを作成する
~HTTP~method | `~URI~template$ |
---|---|
`POST^hm | `/session/{session id}/sensor^c |
この`拡張~command$は、 ある種の`~sensor型$を成す新たな`~virtual~sensor$を作成する。 同じ`~sensor型$の各 `Sensor$I ~instanceに対する `start()$m ~callは、 `~virtual~sensorを削除する~command@#delete-virtual-sensor-command$が走るまで, それらを~backしている`~device~sensor$として,この`~virtual~sensor$を利用させることになる。 ◎ This extension command creates a new virtual sensor of a certain sensor type. Calls to Sensor.start() from Sensor instances of the same sensor type will cause this virtual sensor to be used as their backing device sensor until § 9.2.4 Delete virtual sensor is run.
注記: この`拡張~command$は、[ 同じ型の `Sensor$I ~instanceたちが共存しつつ, 各自が異なる`~device~sensor$を有する ]ことを許容する仕方で働く。 そのような~instanceは、 この`拡張~command$が呼出される前に作成され, 本物の~hardware~sensorに接続-済みなこともある — それは、 働き続け,そこから読取りを受信することに加え、 `~sensorに接続する$が再び呼出された場合に限り,`~virtual~sensor$から読取りを受信する。 ◎ Note: The way this extension command works allows Sensor instances of the same type to coexist and have different device sensors. A Sensor sensor may have been created and connected to a real, hardware sensor before this extension command is invoked. It continues to work and receive readings from it, and only receives readings from a virtual sensor if connect to sensor is invoked again.
~parameter名 | 値~型 | 要求されるか |
---|---|---|
`type^l | `String$jt | Yes |
`connected^l | `Boolean$jt | No |
`maxSamplingFrequency^l | `Number$jt | No |
`minSamplingFrequency^l | `Number$jt | No |
`~remote端~手続き$は: ◎ The remote end steps are:
- %~virtual~sensor型 ~LET %~parameter群 から`~propを取得する$( `type^l ) ◎ Let virtualSensorType be the result of invoking get a property "type" from parameters.
- ~IF[ %~virtual~sensor型 は `String$jt でない ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If virtualSensorType is not a String, return error with WebDriver error code invalid argument.
- ~IF[ `型ごとの~virtual~sensor~metadata$[ %~virtual~sensor型 ] ~EQ ε ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If per-type virtual sensor metadata does not contain virtualSensorType, return error with WebDriver error code invalid argument.
- ~IF[ `現在の閲覧~文脈$の`~top-level辿可能$bcの`~virtual~sensor対応付け$[ %~virtual~sensor型 ] ~NEQ ε ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ Let topLevelVirtualSensorMapping be the current browsing context's top-level traversable's virtual sensor mapping. ◎ If topLevelVirtualSensorMapping contains virtualSensorType, return error with WebDriver error code invalid argument.
- %接続されたか ~LET %~parameter群 から`既定を伴う~propを取得する$( `connected^l , ~T ) ◎ Let connected be the result of invoking get a property with default with "connected" and true from parameters.
- %最大~標本化~frequency ~LET %~parameter群 から`既定を伴う~propを取得する$( `maxSamplingFrequency^l, `実装定義$な値 ) ◎ Let maxSamplingFrequency be the result of invoking get a property with default with "maxSamplingFrequency" and an implementation-defined value from parameters.
- ~IF[ %最大~標本化~frequency は`有限な数$でない ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If maxSamplingFrequency is not a Number, or its value is NaN, +∞, or −∞, return error with WebDriver error code invalid argument.
- %最小~標本化~frequency ~LET %~parameter群 から`既定を伴う~propを取得する$( `minSamplingFrequency^l, `実装定義$な値 ) ◎ Let minSamplingFrequency be the result of invoking get a property with default with "minSamplingFrequency" and an implementation-defined value from parameters.
- ~IF[ %最小~標本化~frequency は`有限な数$でない ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If minSamplingFrequency is not a Number, or its value is NaN, +∞, or −∞, return error with WebDriver error code invalid argument.
- ~IF[ %最小~標本化~frequency ~GT %最大~標本化~frequency ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If minSamplingFrequency is greater than maxSamplingFrequency, return error with WebDriver error code invalid argument.
- %~virtual~sensor ~LET 新たな`~virtual~sensor$ — その ⇒# `読取りを供せるか$vS ~SET %接続されたか, `最小~標本化~frequency$vS ~SET %最小~標本化~frequency, `最大~標本化~frequency$vS ~SET %最大~標本化~frequency ◎ Let virtualSensor be a new virtual sensor. ◎ Set virtualSensor’s can provide readings flag to connected. ◎ Set virtualSensor’s minimum sampling frequency to minSamplingFrequency. ◎ Set virtualSensor’s maximum sampling frequency to maxSamplingFrequency.
- `現在の閲覧~文脈$の`~top-level辿可能$bcの`~virtual~sensor対応付け$[ %~virtual~sensor型 ] ~SET %~virtual~sensor ◎ Set topLevelVirtualSensorMapping[virtualSensorType] to virtualSensor.
- ~RET `成功$wdr( ~NULL ) ◎ Return success with data null.
~ID 23 を伴う`~session$の`現在の閲覧~文脈$内に[ `ambient-light^l ~virtual~sensor ]を作成するためには、 `局所~端$は,次の本体を伴う `/session/23/sensor^c を `POST^hm することになる: ◎ To create an "ambient-light" virtual sensor in the current browsing context of the session with ID 23, the local end would POST to /session/23/sensor with the body:
{ "type": "ambient-light", "maxSamplingFrequency": 60, "minSamplingFrequency": 5 }
所与の`~sensor型$に対し,`~top-level辿可能$内で作成できる`~virtual~sensor$は、 1 個までに限られることを自覚すること — さもなければ `~error$wdr( `無効な引数$i ) が返されることになる。 ◎ Be aware that only one virtual sensor of a given sensor type can be created in a top-level traversable, otherwise an invalid argument WebDriver error code will be returned.
9.2.2. ~virtual~sensor情報を取得する
~HTTP~method | `~URI~template$ |
---|---|
`GET^hm | `/session/{session id}/sensor/{type}^c |
この`拡張~command$は、 所与の[ `~virtual~sensorを作成する~command@#create-virtual-sensor-command$ により作成された`~virtual~sensor$ ]についての情報を検索取得する。 ◎ This extension command retrieves information about a given virtual sensor created by § 9.2.1 Create virtual sensor.
`成功$wdr( %報 ) が返された場合、 %報 は,次に挙げる~propを伴う `Object$jt になる: ◎ When it returns success, success's associated data is an Object with the following properties:
~prop名 | 値~型 | 記述(規範的でない) |
---|---|---|
`requestedSamplingFrequency^l | `Number$jt | 当の`~virtual~sensor$の`要請された標本化~frequency$vS |
注記: `標本化~frequency$に対する拘束は `§ 標本化~frequency, 報告ng~frequency@#concepts-sampling-and-reporting-frequencies$ を見よ。 なぜ`要請された標本化~frequency$vSが`実装定義$な値になるかについての説明は `§ ~virtual~sensor@#virtual-sensors$ を見よ。 一般に,この値に関して安全に見做せることは、 `~virtual~sensor$の[ `最小~標本化~frequency$vS, `最大~標本化~frequency$vS ]により設定された限界域の中にあること以外にない。 ◎ Note: See § 5.4 Sampling Frequency and Reporting Frequency for some constraints on sampling frequency as well as the explanation about why a requested sampling frequency is an implementation-defined value in § 9.1 Virtual Sensors. In general, it is only safe to assume that the value lies within the bounds set by the virtual sensor's minimum sampling frequency and maximum sampling frequency.
`~remote端~手続き$は: ◎ The remote end steps are:
- %~virtual~sensor型 ~LET `type^c `~url変数$の値 ◎ Let virtualSensorType be the value of the type url variable.
- %~virtual~sensor ~LET `現在の閲覧~文脈$の`~top-level辿可能$bcの`~virtual~sensor対応付け$[ %~virtual~sensor型 ] ◎ Let topLevelVirtualSensorMapping be the current browsing context's top-level traversable's virtual sensor mapping. ◎ ↓
- ~IF[ %~virtual~sensor ~EQ ε ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If topLevelVirtualSensorMapping does not contain virtualSensorType, return error with WebDriver error code invalid argument. ◎ Let virtualSensor be topLevelVirtualSensorMapping[virtualSensorType].
- %報 ~LET 新たな `Object$jt ◎ Let info be a new Object.
- %報 の`~propを設定する$( `requestedSamplingFrequency^l, %~virtual~sensor の`要請された標本化~frequency$vS ) ◎ Invoke set a property on info with "requestedSamplingFrequency" and virtualSensor’s requested sampling frequency.
- ~RET `成功$wdr( %報 ) ◎ Return success with data info.
9.2.3. ~virtual~sensor読取りを更新する
~HTTP~method | `~URI~template$ |
---|---|
`POST^hm | `/session/{session id}/sensor/{type}^c |
この`拡張~command$は、 新たな`~sensor読取り$を`~platform~sensor$から可用にする。 ◎ This extension command makes a new sensor reading available to platform sensors.
注記: `~virtual~sensor$は`~device~sensor$の様に動作するので、 ここで生産される`~sensor読取り$であっても,`~platform~sensor$により処理される必要がある — それは、 例えば[ `~sensor型$の`~threshold検査~algo$/ `~sensor読取りを公開できない@#can-expose-sensor-readings$こと ]に因り,読取りを破棄するかもしれない。 ◎ Note: A virtual sensor acts like a device sensor, so the sensor reading produced here still has to be processed by a platform sensor, which might discard it due to, for example, a sensor type's threshold check algorithm or can expose sensor readings's result.
~parameter名 | 値~型 | 要求されるか |
---|---|---|
`reading^l | `Object$jt | Yes |
`~remote端~手続き$は: ◎ The remote end steps are:
- %読取り ~LET %~parameter群 から`~propを取得する$( `reading^l ) ◎ Let reading be the result of invoking get a property "reading" from parameters.
- ~IF[ %読取り は `Object$jt でない ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If reading is not an Object, return error with WebDriver error code invalid argument.
- %~virtual~sensor型 ~LET `type^c `~url変数$の値 ◎ Let virtualSensorType be the value of the type url variable.
- %~metadata ~LET `型ごとの~virtual~sensor~metadata$[ %~virtual~sensor型 ] ◎ ↓
- ~IF[ %~metadata ~EQ ε ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If per-type virtual sensor metadata does not contain virtualSensorType, return error with WebDriver error code invalid argument. ◎ Let metadata be per-type virtual sensor metadata[virtualSensorType].
- %~virtual~sensor ~LET `現在の閲覧~文脈$の`~top-level辿可能$bcの`~virtual~sensor対応付け$[ %~virtual~sensor型 ] ◎ Let topLevelVirtualSensorMapping be the current browsing context's top-level traversable's virtual sensor mapping. ◎ ↓
- ~IF[ %~virtual~sensor ~EQ ε ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If topLevelVirtualSensorMapping does not contain virtualSensorType, return error with WebDriver error code invalid argument. ◎ Let virtualSensor be topLevelVirtualSensorMapping[virtualSensorType].
- %構文解析した読取り ~LET %~metadata の`読取り構文解析~algo$vsM( %読取り ) ◎ Let parsedReading be the result of invoking metadata’s reading parsing algorithm with reading.
- ~IF[ %構文解析した読取り ~EQ `undefined^jv ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If parsedReading is undefined, return error with WebDriver error code invalid argument.
- %構文解析した読取り を[ %~virtual~sensor に接続された`~platform~sensor$から得せる ]よう,`実装定義$な仕方で可用にする ◎ In an implementation-defined way, make parsedReading available so that it can be obtained by platform sensors connected to virtualSensor.
- ~RET `成功$wdr( ~NULL ) ◎ Return success with data null.
9.2.3.1. 読取りを構文解析する~algo
この仕様は、 `拡張~仕様$が[ `型ごとの~virtual~sensor~metadata$において利用するために`~virtual~sensor~metadata$を定義する ]ときに利用できる~algoをいくつか定義する。 ◎ This specification defines some algorithms that extension specifications can use when defining a virtual sensor metadata for use in per-type virtual sensor metadata.
9.2.3.1.1. 一数の読取りを構文解析する
所与の ( ~JSON `Object$jt %~parameter群, `文字列$ %値の名前 ) に対し,[ `~sensor読取り$/ `undefined^jv ]を返す: ◎ input • parameters, a JSON Object • valueName, a string output • A sensor reading or undefined
- %値 ~LET %~parameter群 から`~propを取得する$( %値の名前 ) ◎ Let value be the result of invoking get a property from parameters with valueName.
- ~IF[ %値 は`有限な数$でない ] ⇒ ~RET `undefined^jv ◎ If value is not a Number, or its value is NaN, +∞, or −∞, return undefined.
- %読取り ~LET 新たな`~sensor読取り$ ◎ Let reading be a new sensor reading.
- %読取り[ %値の名前 ] ~SET %値 ◎ Set reading[valueName] to value.
- ~RET %読取り ◎ Return reading.
9.2.3.1.2. ~xyzの読取りを構文解析する
所与の ( ~JSON `Object$jt %~parameter群 ) に対し,[ `~sensor読取り$/ `undefined^jv ]を返す: ◎ input • parameters, a JSON Object output • A sensor reading or undefined
- %x ~LET %~parameter群 から`~propを取得する$( `x^l ) ◎ Let x be the result of invoking get a property from parameters with "x".
- ~IF[ %x は`有限な数$でない ] ⇒ ~RET `undefined^jv ◎ If x is not a Number, or its value is NaN, +∞, or −∞, return undefined.
- %y ~LET %~parameter群 から`~propを取得する$( `y^l ) ◎ Let y be the result of invoking get a property from parameters with "y".
- ~IF[ %y は`有限な数$でない ] ⇒ ~RET `undefined^jv ◎ If y is not a Number, or its value is NaN, +∞, or −∞, return undefined.
- %z ~LET %~parameter群 から`~propを取得する$( `z^l ) ◎ Let z be the result of invoking get a property from parameters with "z".
- ~IF[ %z は`有限な数$でない ] ⇒ ~RET `undefined^jv ◎ If z is not a Number, or its value is NaN, +∞, or −∞, return undefined.
- %読取り ~LET 新たな`~sensor読取り$ ◎ Let reading be a new sensor reading.
- %読取り[ `x^l ] ~SET %x ◎ Set reading["x"] to x.
- %読取り[ `y^l ] ~SET %y ◎ Set reading["y"] to y.
- %読取り[ `z^l ] ~SET %z ◎ Set reading["z"] to z.
- ~RET %読取り ◎ Return reading.
9.2.4. ~virtual~sensorを削除する
~HTTP~method | `~URI~template$ |
---|---|
`DELETE^hm | `/session/{session id}/sensor/{type}^c |
この`拡張~command$は、 所与の型の`~virtual~sensor$を削除する。 ◎ This extension command deletes a given type of virtual sensor.
`~remote端~手続き$は: ◎ The remote end steps are:
- %~virtual~sensor型 ~LET `type^c `~url変数$の値 ◎ Let virtualSensorType be the value of the type url variable.
- ~IF[ `型ごとの~virtual~sensor~metadata$[ %~virtual~sensor型 ] ~EQ ε ] ⇒ ~RET `~error$wdr( `無効な引数$i ) ◎ If per-type virtual sensor metadata does not contain virtualSensorType, return error with WebDriver error code invalid argument.
- `現在の閲覧~文脈$の`~top-level辿可能$bcの`~virtual~sensor対応付け$[ %~virtual~sensor型 ] ~SET ε ◎ Let topLevelVirtualSensorMapping be the current browsing context's top-level traversable's virtual sensor mapping. ◎ Remove topLevelVirtualSensorMapping[virtualSensorType].
- ~RET `成功$wdr( ~NULL ) ◎ Return success with data null.
注記: 利用-中にある`~device~sensor$が可用でなくなったとき (例:物理的に切断された/~UAには無関係な要因に因り停止した) における[ `~platform~sensor$/ `Sensor$I ~instance ]の挙動は指定されない。 実装は、 次に挙げるいずれを行なってもヨイ:
- 既存の `Sensor$I ~instanceをそのまま保つ (それらは、 単純に,新たな読取り報告しなくなる)
- `~sensor~objを非作動化する$
- `~platform~sensor$に~errorを報告させる — 最終的に`~errorを通知する$ことになるよう。
10. 拡張能
◎非規範的注記: この節(下位節も含む)は、 規範的な言語を利用して`拡張~仕様$の`作者~向け^emの指導を供する。 `実装者^emの視点からは、 この節は規範的でないと見なされる。 ◎ Note: This section and its subsections provide guidance to extension specification authors using normative language. From implementers' point of view, this section and its subsections are considered non-normative.
この節は、 この仕様をどう拡張すれば,各種`~sensor型$用の~APIを指定できるかを述べる。 ◎ This section describes how this specification can be extended to specify APIs for different sensor types.
そのような `拡張~仕様@ ( `extension specification^en )には、 次が奨励される:
- 単独の`~sensor型$に注力すること
- [ `高level$, `低level$ ]どちらも適切に公開すること
- `~sensor読取り$に`較正$処理-を適用するかどうかを定義すること
`拡張~仕様$は、 結付けられた`~sensor型$に対し,`局所~座標系$を[ 明示的に定義してもヨイ/ `Sensor$I ~objごとに環境設定-可能にしてもヨイ ]。 ◎ Extension specifications may explicitly define the local coordinate system for the associated sensor type or make it configurable per Sensor object.
`拡張~仕様$たちが成す~~最新な~listは、 次に挙げる文書を見られたし ⇒# `GENERIC-SENSOR-USECASES$r, `MOTION-SENSORS$r ◎ For an up-to-date list of extension specifications, please refer to [GENERIC-SENSOR-USECASES] and [MOTION-SENSORS] documents.
10.1. ~securityと~privacy
`拡張~仕様$には、 次が期待される: ◎ Extension specifications are expected to:
- 汎用な`軽減~策@#mitigation-strategies$に適合すること ◎ conform with the generic mitigation strategies,
- `事例~別に適用される軽減~策@#mitigation-strategies-case-by-case$ を考慮すること ◎ consider mitigation strategies applied on a case by case basis,
- `~securityと~privacyに関する自己-考査~質問票^cite `SECURITY-PRIVACY-QUESTIONNAIRE$r を評価すること ◎ be evaluated against the Self-Review Questionnaire on Security and Privacy [SECURITY-PRIVACY-QUESTIONNAIRE],
- 特に,`同一-生成元~施策~違反$ — ~sensorが[ 同一-生成元~施策で統治されない,新たな通信~channel ]を公開する場合に発生し得るそれ — に対し評価すること ◎ and in particular, be evaluated against the same-origin policy violations that can arise if sensors expose a new communication channel not governed by the same-origin policy.
10.2. 命名-法
`低level$な~sensor用の `Sensor$I ~interfaceは、 それが結付ける`~platform~sensor$の名前を継ぐベキである。 例えば, `gyroscope^en ( ~gyroscope)を結付ける~interfaceは、 単純に `Gyroscope^I と命名されるベキである。 `高level$な~sensor用の `Sensor$I ~interfaceは、 その`~platform~sensor$が測定する物理量に "Sensor" 接尾辞を結合して命名されるベキである。 例えば,自身からの距離【 `proximity^en/~~近接】を測定している`~platform~sensor$を結付ける~interfaceは、 `ProximitySensor^I と命名されるベキである。 ◎ Sensor interfaces for low-level sensors should be named after their associated platform sensor. So for example, the interface associated with a gyroscope should be simply named Gyroscope. Sensor interfaces for high-level sensors should be named by combining the physical quantity the platform sensor measures with the "Sensor" suffix. For example, a platform sensor measuring the distance at which an object is from it may see its associated interface called ProximitySensor.
`Sensor$I 下位classの属性のうち,`~sensor読取り$の値たちを保持するものは、 これらの値たちを成す全部的な名前を継ぐベキである。 例えば, `Thermometer^I ~interfaceは、 `~sensor読取り$の値を `temperature^m 属性~内に保持するベキである ( `value^m や `temp^m 属性ではなく)。 命名~用の良い出発点は、 `Quantities, Units, Dimensions and Data Types Ontologies^cite `QUDT$r にある。 ◎ Attributes of the Sensor subclass that hold sensor readings values should be named after the full name of these values. For example, the Thermometer interface should hold the sensor reading's value in a temperature attribute (and not a value or temp attribute). A good starting point for naming are the Quantities, Units, Dimensions and Data Types Ontologies [QUDT].
10.3. 単位
`拡張~仕様$は、 `~sensor読取り$の単位を指定しなければナラナイ。 ◎ Extension specifications must specify the unit of sensor readings.
TAG( `Technical Architecture Group^cite )による~API設計-原則 `API-DESIGN-PRINCIPLES$r に則り、 すべての時間~測定は,~milli秒数になるベキである。 他のすべての単位は、 `SI Brochure^cite `SI$r に述べられるとおり, 選好~順で次に挙げるいずれかを利用して指定されるベキである ⇒# ~SI単位系( `International System of Units^en ), ~SIから導出された単位, ~SIとの併用に受容される非~SI単位 ◎終 ただし,例外として、 温度は,~Kelvin【絶対温度】より~Celsiusの方が選好される。 ◎ As per the Technical Architecture Group’s (TAG) API Design Principles [API-DESIGN-PRINCIPLES], all time measurement should be in milliseconds. All other units should be specified using, in order of preference, and with the exception of temperature (for which Celsius should be favored over Kelvin), the International System of Units (SI), SI derived units, and Non-SI units accepted for use with the SI, as described in the SI Brochure [SI].
10.4. 高levelか低levelか,どちらの~sensorを公開するか
これまで,~sensorを~Web~platformに公開している仕様は、 `高level$な~sensor~APIに注力していた。 `GEOLOCATION-API$r `ORIENTATION-EVENT$r ◎ So far, specifications exposing sensors to the Web platform have focused on high-level sensors APIs. [GEOLOCATION-API] [ORIENTATION-EVENT]
これは、 いくつかの理由から適理な~approachであった。 ~~実際, `高level$な~sensorは: ◎ This was a reasonable approach for a number of reasons. Indeed, high-level sensors:
- 開発者の意図を明瞭に伝達する。 ◎ convey developer intent clearly,
- 下層の~hardwareの~sensorがどう機能するかについて親密な知識を要求しない。 ◎ do not require intimate knowledge of how the underlying hardware sensors functions,
- 利用するのが容易である。 ◎ are easy to use,
- ~UAは処理能と~battery寿命を有意に改善できるようになり得る。 ◎ may enable the User Agent to make significant performance and battery life improvements,
- 公開される情報の量や型を減らすことにより,ある種の[ ~privacy/~security ]課題を避ける一助になる。 ◎ help avoid certain privacy and security issues by decreasing the amount and type of information exposed.
しかしながら,仮想現実( `virtual reality^en )や拡張現実( `augmented reality^en )などの利用事例が数を増やしており、 特に処理能の理由から,~sensorへの`低level$な~accessが要求されている。 ◎ However, an increasing number of use cases such as virtual and augmented reality require low-level access to sensors, most notably for performance reasons.
`低level$な~accessを供することは、 ~Web~app開発者が[ 専門分野に特有な拘束を活用する/ もっと高処理能な~systemを設計する ]ことを可能化する。 ◎ Providing low-level access enables Web application developers to leverage domain-specific constraints and design more performant systems.
`拡張~仕様$は、 `Extensible Web Manifesto^cite `EXTENNNNSIBLE$r の~~原則に従い, 首に`低level$な~sensor~APIを公開することに注力するベキであるが、 `高level$な~APIも — そうすることに明瞭な便益があるときには — 公開するベキである。 ◎ Following the precepts of the Extensible Web Manifesto [EXTENNNNSIBLE], extension specifications should focus primarily on exposing low-level sensor APIs, but should also expose high-level APIs when they are clear benefits in doing so.
10.5. 同じ型の複数の~sensorを可能化するのは、どのようなとき~~相応しくないか?
同じ`~sensor型$の複数の `Sensor$I ~instanceを, 等しい構築~parameterを伴わせて構築することは、 ~hardware資源の不必要な消費に至らせ得るので,勧められない。 ◎ It is not advisable to construct multiple Sensor instances of the same sensor type with equal construction parameters, as it can lead to unnecessary hardware resources consumption.
複数の観測器が[ 新たに可用な`~sensor読取り$ ]の通知に関心がある事例では — 同じ`~sensor型$の複数の~instanceを作成する代わりに — 単独の `Sensor$I ~instanceに`~event~listener$を追加して,単純な `onreading$m ~event~handlerを利用できる。 ◎ In cases when multiple observers are interested in notifications of a newly available sensor reading, an event listener can be added on a single Sensor instance instead of creating multiple instances of the same sensor type and using simple onreading event handler.
逆に,異なる設定群 — `frequency$m /正確度/`拡張~仕様$に定義される他の設定など — の下での利用を意図するなら、 同じ`~sensor型$の複数の `Sensor$I を作成できる。 ◎ Conversely, multiple Sensors of the same sensor type can be created when they are intended to be used with different settings, such as: frequency, accuracy or other settings defined in extension specifications.
10.6. 定義~要件
`拡張~仕様$は、 `§ ~sensor型@#model-sensor-type$にて[ 結付けられなければナラナイものとして挙げられた~data ]すべてを定義しなければナラナイ。 ◎ Extension specifications must define all the associated data listed in § 6.1 Sensor Type.
この節は、 それらの~dataの一部について,さらに情報を供する。 ◎ This section provides more information about some of the associated data that extension specifications must specify.
-
`拡張~sensor~interface@ ( `extension sensor interface^en )は、 ~AND↓ を満たす`~interface$でなければナラナイ:
- `Sensor$I ~IN 当の~interfaceが`継承した~interface群$
- `構築子~演算$を伴う【![Constructor]】 — すなわち、 構築-可能である。
- 前項の構築子は、 次を満たす省略可能な`辞書$を引数にとる ⇒ `SensorOptions$I ~IN 当の辞書が`継承した辞書~群$
`拡張~sensor~interface$は、 `~supportする~sensor~option群@ ( `supported sensor options^en ) — それが~supportする~option【の名前】たちが成す`集合$ — を持つ。 `拡張~仕様$が他を定義しない限り、 `~supportする~sensor~option群$は,単独の~item `frequency^l のみからなるとする。 ◎ The extension sensor interface has a set of supported options referred to as supported sensor options. Unless the extension specification defines otherwise, supported sensor options contain a single item which is "frequency".
~UAは、 所与の`拡張~sensor~interface$用の`~supportする~sensor~option群$から, 自身が~supportできない各~sensor~optionに対応する~itemを除去するモノトスル。 ◎ The user agent must remove items from supported sensor options for a given extension sensor interface if it cannot support the corresponding sensor options.
`拡張~sensor~interface$を成す各`属性$のうち`~sensor読取り$を公開するものは、 `読専$であり,それらの取得子は次の結果を返すモノトスル ⇒ `最新な読取り~mapから値を取得する$( コレ, `属性$の`識別子$ ) ◎ The extension sensor interface attributes which expose sensor readings are read only and their getters must return the result of invoking get value from latest reading with this and attribute identifier as arguments.
- 当の`~sensor型$が`~sensor融合$を表現している場合、 その`~sensor許可~名~群$を成す各`名前$は, 融合~sourceを成す いずれかの`~sensor型$に結付けられたものでなければナラナイ。 ◎ If the sensor type is representing sensor fusion, its sensor permission names must be those associated with the fusion source sensor types.
`拡張~仕様$は、 各`~sensor型$に対し,次に挙げる定義を指定してもヨイ: ◎ An extension specification may specify the following definitions for each sensor type:
- 次を満たす`辞書$ %辞書 ⇒ `SensorOptions$I ~IN %辞書 が`継承した辞書~群$ ◎ A dictionary whose inherited dictionaries contains SensorOptions.
- `既定の~sensor$。 ~deviceが所与の`~sensor型$用に備える`~platform~sensor$は,一般に 1 つだけなので、 その事例では,`既定の~sensor$を定義することは単直である。 複数の`~device~sensor$が共通的な所では、 `拡張~仕様$は,当の`~sensor型$用の`既定の~sensor$を定義しないことにしてもヨイ — とりわけ,そうしてもイミを成さないときには。 ◎ A default sensor. Generally, devices are equipped with a single platform sensor of each type, in which case defining a default sensor is straightforward. For sensor types where multiple sensors are common, extension specifications may choose not to define a default sensor, especially when doing so would not make sense.
10.7. 自動化
~UAの自動化と~appの~test法を可能化するため、 `拡張~仕様$には,次が奨励される: ◎ In order to enable user-agent automation and application testing, extension specifications are encouraged to:
- `型ごとの~virtual~sensor~metadata$に 1 個以上の`~entry$を追加する。 ◎ Add one or more entries to per-type virtual sensor metadata.
- 前項の帰結として, 1 個以上の`~virtual~sensor~metadata$を定義する。 ◎ Consequently, define one or more virtual sensor metadata instances.
- `~sensor型$が`属する~virtual~sensor型$を指定する — それは、 追加した いずれかの`~entry$の`~key$map【!対応している`型ごとの~virtual~sensor~metadata$を成す~entryに利用される~key】に合致するベキである。 ◎ Specify a sensor type's virtual sensor type, which should match the key used in the corresponding per-type virtual sensor metadata entry.
`§ ~Web~IDL 例@#example-webidl$ にて述べられる近接~sensor用の`拡張~仕様$は、 次のような~textを包含することもできる: ◎ The extension specification for proximity sensors described in § 10.10 Example WebIDL could contain the following text:
`近接~sensor^i は、 次が結付けられる`~sensor型$である: ◎ The Proximity Sensor is a sensor type with\
- `拡張~sensor~interface$ ⇒ `ProximitySensor^I ◎ one associated extension sensor interface, ProximitySensor.\
- `属する~virtual~sensor型$ ⇒ `proximity^l ◎ Its associated virtual sensor type is "proximity".
[...]
`近接~読取りを構文解析する~algo^i は、 所与の ( ~JSON `Object$jt %~parameter群 ) に対し,次を呼出すモノトスル ⇒ `一数の読取りを構文解析する@#parse-single-value-number-reading$( %~parameter群, `distance^l ) ◎ The proximity reading parsing algorithm, given a JSON Object parameters, must invoke parse single-value number reading with parameters and "distance".
`型ごとの~virtual~sensor~metadata$は、 次に挙げる~entryを伴うモノトスル: ◎ The per-type virtual sensor metadata map must have an entry\
- ~key `proximity^l ⇒ 対応する値を与える`~virtual~sensor~metadata$の ⇒# `読取り構文解析~algo$vsMは `近接~読取りを構文解析する~algo^i ◎ whose key is "proximity" and whose value is a virtual sensor metadata whose reading parsing algorithm is proximity reading parsing algorithm.
10.8. `許可~API^citeの拡張-法
各`~sensor型$用の `Sensor$I ~interfaceの実装は、 それによる`~sensor読取り$を,結付けられた[ `名前$ / `PermissionDescriptor$I【`許可~記述子~型$】 ]により保護するモノトスル。 `低level$な `Sensor$I は、 `名前$として その~interface名を利用してもヨイ (例: `gyroscope^l / `accelerometer^l )。 `~sensor融合$は、 融合の~sourceとして利用される各~sensorに対し,`~accessする許可を要請する$モノトスル。 ◎ An implementation of the Sensor interface for each sensor type must protect its reading by associated name or PermissionDescriptor. A low-level sensor may use its interface name as a name, for instance, "gyroscope" or "accelerometer". Fusion sensors must request permission to access each of the sensors that are used as a source of fusion.
融合された~dataから`低level$な`~sensor読取り$を構築し直すのは困難であっても、 元の情報の一部は,推定され得る。 例えば[ `絶対~方位~sensor$/`地磁気~方位~sensor$ ]が利用されれば,空間における利用者の方位を演繹するのは容易である。 したがって,これらの~sensorは、 磁力計を`利用する許可を要請する$モノトスル — ~deviceの方位についての情報を地球の磁場との関係で供するので。 対照的に,`相対~方位~sensor$は そのような情報を公開しないので、 磁力計を`利用する許可を要請する$必要はない。 ◎ Even though it might be difficult to reconstruct low-level sensor readings from fused data, some of the original information might be inferred. For example, it is easy to deduce user’s orientation in space if absolute or geomagnetic orientation sensors are used, therefore, these sensors must request permission to use magnetometer as it provides information about orientation of device in relation to Earth’s magnetic field. In contrast, relative orientation sensor does not expose such information, thus, it does not need to request permission to use magnetometer.
`PermissionDescriptor$I も利用できる — 正確度または`標本化~frequency$に許容される上限を設定するためとして。 ◎ Permission descriptors can also be used to set maximum allowed limits for accuracy or sampling frequency.\
加速度計~sensor用の`許可~API^citeにアリな拡張の例: ◎ An example for a possible extension of the Permission API for accelerometer sensor is given below.
dictionary AccelerometerPermissionDescriptor : `PermissionDescriptor$I { boolean highAccuracy = false; boolean highFrequency = false; };
10.9. `許可~施策~API^citeの拡張-法
各`~sensor型$用の `Sensor$I ~interfaceの実装には、 1 個(`~sensor融合$は遂行されない場合)または複数個の,`施策により制御される特能$が結付けられる — それらは、 その実装を文書~内で利用できるかどうかを制御する。 ◎ An implementation of the Sensor interface for each sensor type has one (if sensor fusion is not performed) or several policy-controlled features that control whether or not this implementation can be used in a document.
これらの各`施策により制御される特能$の`既定の許容list$は、 `'self'^l とする。 ◎ The features' default allowlist is 'self'.
【 複数の`~sensor型$用の `Sensor$I ~interfaceが同じ特能を共有する場合に、 ~interfaceごとに異なる`既定の許容list$を指定する必要が生じる~~状況は, 今の所は想定されていないようだ。 】
注記: `既定の許容list$ `'self'^l は、 `Sensor$I ~interfaceの実装の用法を,[ 同一-生成元に属する入子な~frame ]には許容するが、[ 第三者-主体~内容による`~sensor読取り$への~access ]は防止する。 ◎ Note: The default allowlist of 'self' allows Sensor interface implementation usage in same-origin nested frames but prevents third-party content from sensor readings access.
`~sensor特能~名~群$は、 それに結付けられた[ 各`施策により制御される特能$を識別する~token ]からなるモノトスル。 ◎ The sensor feature names set must contain policy-controlled feature tokens of every associated feature.
`低level$な`~sensor型$は、 その~interface名を`施策により制御される特能$用の~tokenとして利用してもヨイ — 例: `gyroscope^l / `accelerometer^l 。 `拡張~仕様$が他を定義しない限り,`~sensor特能~名~群$は、 同じ`~sensor型$に結付けられた`~sensor許可~名~群$に合致する。 ◎ A low-level sensor may use its interface name as a policy-controlled feature token, for instance, "gyroscope" or "accelerometer". Unless the extension specification defines otherwise, the sensor feature names matches the same type-associated sensor permission names.
加速度計~特能は、 ~frame容器~要素に `allow$a 属性を追加することにより, 第三者-主体の生成元~用に選択的に可能化される: ◎ The accelerometer feature is selectively enabled for third-party origin by adding an allow attribute to the frame container element:
<iframe src="https://third-party.com" allow="accelerometer"/></iframe>
~sensor用法は、 ~HTTP応答~header内に許可~施策を指定することにより,完全に不能化される: ◎ A sensor usage is disabled completely by specifying the permissions policy in an HTTP response header:
Permissions-Policy: accelerometer=()
`~sensor融合$は、 融合の~sourceとして利用される各~sensorの`~sensor特能~名~群$を利用するモノトスル。 ◎ Fusion sensors must use sensor feature names of the sensors that are used as a source of fusion.
`絶対~方位~sensor$に要求される[ 加速度計, 磁力計, ~gyroscope ]特能を利用するのを,第三者-主体の生成元に許容する: ◎ Allow third-party origin to use accelerometer, magnetometer and gyroscope features that are required by the absolute orientation sensor.
<iframe src="https://third-party.com" allow="accelerometer; magnetometer; gyroscope"/>
10.10. ~Web~IDL例
この仕様の拡張としてアリな,近接`~device~sensor$用の~Web~IDLの例: ◎ Here’s an example WebIDL for a possible extension of this specification for proximity sensors.
[SecureContext, Exposed=Window] interface ProximitySensor : Sensor { constructor(optional ProximitySensorOptions proximitySensorOptions = {}); readonly attribute double? distance; }; dictionary ProximitySensorOptions : SensorOptions { double min; double max; ProximitySensorPosition position; ProximitySensorDirection direction; }; enum ProximitySensorPosition { "top-left", "top", "top-right", "middle-left", "middle", "middle-right", "bottom-left", "bottom", "bottom-right" }; enum ProximitySensorDirection { "front", "rear", "left", "right", "top", "bottom" };
謝辞
次に挙げる方々に感謝する:
- 何よりもまず: `Anssi Kostiainen^en 氏は、 この仕様の開発~全体を通して継続的かつ献身的に~supportと意見を寄せていただいた。 また, `Mikhail Pozdnyakov^en, `Alexander Shalamov^en, `Rijubrata Bhaumik^en, `Kenneth Rohde Christiansen^en 各氏は、 この仕様に貴重な[ 実装~feedback, 示唆, 事実調査 ]を伝えて,その作業に助力していただいた。 ◎ First and foremost,\ I would like to thank Anssi Kostiainen for his continuous and dedicated support and input throughout the development of this specification,\ as well as Mikhail Pozdnyakov, Alexander Shalamov, Rijubrata Bhaumik, and Kenneth Rohde Christiansen for their invaluable implementation feedback, suggestions, and research that have helped inform the specification work.
- `Rick Waldron^en 氏は、 ~Web用の汎用~sensor~APIの設計を巡る論点を推進して, この仕様が基づいている元の~APIを素描して, 氏の `Johnny Five^en における作業から実装~feedbackを供して, この仕様の開発の間に継続的に意見を寄せていただいた。 ◎ Special thanks to Rick Waldron for driving the discussion around a generic sensor API design for the Web, sketching the original API on which this is based, providing implementation feedback from his work on Johnny-Five, and continuous input during the development of this specification.
- `Boris Smus^en, `Tim Volodine^en, `Rich Tibbett^en 各氏は、 一貫性をもって,~sensorを~webに公開するための初期~作業に携わっていただいた。 ◎ Special thanks to Boris Smus, Tim Volodine, and Rich Tibbett for their initial work on exposing sensors to the web with consistency.
- `Anne van Kesteren^en 氏は、 ~~直におよび IRC を通して,たゆまず助力していただいた。 ◎ Thanks to Anne van Kesteren for his tireless help both in person and through IRC.
- `Domenic Denicola^en, `Jake Archibald^en 各氏による助力に。 ◎ Thanks to Domenic Denicola and Jake Archibald for their help.
- `Frederick Hirsch^en, `Dominique Hazaël-Massieux^en 各氏は、 ( `HTML5Apps project^en を介して) 運営上の助力, 技術的な意見を寄せていただいた。 ◎ Thanks also to Frederick Hirsch and Dominique Hazaël-Massieux (via the HTML5Apps project) for both their administrative help and technical input.
- `Tab Atkins^en 氏は、 Bikeshed を作り上げ,それを詳しく説明する時間を割いていただいた。 ◎ Thanks to Tab Atkins for making Bikeshed and taking the time to explain its subtleties.
- `Lukasz Olejnik^en, `Maryam Mehrnezhad^en 各氏は、 ~privacyと~security周りで貢献していただいた。 ◎ Thanks to Lukasz Olejnik and Maryam Mehrnezhad for their contributions around privacy and security.
-
次に挙げる方々は、 GitHub 上での多方面な論点を通して,この仕様に多大に貢献していただいた: ◎ The following people have greatly contributed to this specification through extensive discussions on GitHub:\
Anssi Kostiainen, Boris Smus, chaals, Claes Nilsson, Dave Raggett, David Mark Clements, Domenic Denicola, Dominique Hazaël-Massieux (via the HTML5Apps project), Francesco Iovine, Frederick Hirsch, gmandyam, Jafar Husain, Johannes Hund, Kris Kowal, Lukasz Olejnik, Marcos Caceres, Marijn Kruisselbrink, Mark Foltz, Mats Wichmann, Matthew Podwysocki, Olli Pettay, pablochacin, Remy Sharp, Rich Tibbett, Rick Waldron, Rijubrata Bhaumik, robman, Sean T. McBeth, Tab Atkins Jr., Virginie Galindo, zenparsing, and Zoltan Kis.
- `Anssi Kostiainen^en, `Dominique Hazaël-Massieux^en, `Erik Wilde^en, `Michael[tm] Smith^en 各氏は、 編集上の意見を寄せていただいた。 ◎ We’d also like to thank Anssi Kostiainen, Dominique Hazaël-Massieux, Erik Wilde, and Michael[tm] Smith for their editorial input.