公開以降に報告された誤りまたは課題については、正誤表を確認してください。
翻訳も参照してください。
Copyright © 2018 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
Open Digital Rights Language(ODRL)は、コンテンツおよびサービスの利用に関する記述を表現するための、 柔軟で相互運用可能な情報モデル、語彙、および符号化メカニズムを提供するポリシー表現言語である。 ODRL 情報モデルは、ODRL ポリシーの意味論の基礎を成す、基盤となる概念、エンティティ、および 関係を記述する。
ポリシーは、特定の資産に対する許可された行為および禁止された行為、ならびに 利害関係者が満たす必要のある義務を表現するために用いられる。さらに、ポリシーは制約(例: 時間的または空間的制約)によって制限されることがあり、義務(例:支払い)が許可に課されることもある。
この節は、公開時点における本文書の位置付けを記述する。他の文書が 本文書に取って代わる場合がある。現在の W3C 公開文書およびこの技術報告書の最新改訂版の一覧は、https://www.w3.org/TR/ にある W3C 技術報告書 索引で確認できる。
本文書は、Permissions & Obligations Expression Working Group によって勧告として公開された。 本文書に関するコメントを歓迎する。コメントは public-poe-comments@w3.org (購読, アーカイブ)まで送信されたい。
ワーキンググループの実装 報告書を参照されたい。
本文書は、W3C 会員、ソフトウェア 開発者、およびその他の W3C グループと関係者によってレビューされ、ディレクターにより W3C 勧告として承認されている。 これは安定した文書であり、参考資料として使用したり、他の 文書から引用したりできる。勧告を作成する際の W3C の役割は、 仕様に注意を喚起し、その広範な展開を促進することである。これにより、Web の機能性 および相互運用性が向上する。
本文書は、 W3C 特許ポリシーの下で活動する グループによって作成された。 W3C は、当該グループの成果物に関連して行われた 特許開示の公開一覧 を管理している。このページには、 特許を開示するための手順も含まれる。実際に特許を知っており、 その特許に 必須 クレームが含まれると考える個人は、 W3C 特許ポリシーの 第6節に従ってその情報を開示しなければならない。
本文書には、2018年2月1日版 W3C プロセス文書が適用される。
この節は非規範的である。
いくつかのビジネス・シナリオでは、リソースに対して許可される行為および禁止される行為を表現する必要がある。 これらの許可/禁止された行為は、通常ポリシーの形式、すなわち、既存の規制または所有者によって 割り当てられた制約に適合するコンテンツの利用および再利用を示す表現として記述される。ポリシーは、 そのような Policy の定義を担うエンティティおよびそれに従う必要があるエンティティ、Policy によって表現される Permissions、Prohibitions および Duties に関連付けられる追加の制約が何であるか、といった追加情報で 拡張することもできる。これらの概念および関係を表現できることは、コンテンツの作成者にとっても、 すなわち誤用を防ぐために許可される行為および禁止される行為を明確に述べることができる点で重要であり、 また利用者にとっても、すなわち規則、法律、または所有者の制約に違反することを避けるために、 どのリソースの利用および再利用が許されているかを正確に知ることができる点で重要である。本仕様は、 これらのポリシー概念を表現するための共通のアプローチを記述する。
ODRL 情報モデルは、コンテンツ利用を記述する許可、禁止、および義務の記述のための基礎となる 意味モデルを定義する。この情報モデルは、コンテンツ利用記述の基盤モデルを提供する中核概念、エンティティ、 および関係を扱う。これらの機械可読なポリシーは、利用者がこの情報を容易に取得できるようにする目的で、 関連付けられるコンテンツに直接リンクできる。
ODRL 情報モデルの主な目的は、一般にコンテンツに関連付けられる許可、禁止、および義務の記述を 表現するための標準的な記述モデルおよび形式を提供することである。これらの記述は、リソースの利用条件 および再利用条件を記述するために用いられる。このモデルは、可能な限り多くの許可、禁止、および義務の ユースケースを扱いつつ、複雑な場合を扱う際にもポリシー・モデリングを容易に保つべきである。
ODRL 情報モデルは、すべての関係者が利用できる単一の一貫したモデルである。対応する必要がある 既存の標準が存在する場合、または単一の方法だけを用いることに大きなコストが伴う場合を除き、 1つのユースケースを満たす単一の方法が、複数の方法よりも強く望まれる。ODRL 情報モデルは Linked Data の原則を用いて構築されているが、その設計はグラフベースでない実装も可能にすることを 意図している。
非規範的と示された節に加えて、本仕様内のすべての作成ガイドライン、図、例、 および注は非規範的である。本仕様内のそれ以外のすべては 規範的である。
キーワード MAY, MUST, MUST NOT, RECOMMENDED, SHOULD, および SHOULD NOT は、 [RFC2119] に記述されるとおりに解釈される。
本文書全体の例は、[json-ld] として直列化されている。JSON コンテキストを含む規範的な直列化については、ODRL Vocabulary and Expression [odrl-vocab] を参照されたい。
ODRL 情報モデルは、Asset リソースの利用に関連する Permissions、Prohibitions および Duties を 表現する Policies を表す。情報モデルは、Policy によって許可されるものと許可されないもの、 ならびに関与するその他の条件、要件、および当事者を明示的に表現する。ODRL 情報モデルの目的は、ポリシー作成者が Policies に任意の量の詳細を含められるようにすることで、 柔軟な Policy 表現を可能にすることである。
下の図は ODRL 情報モデルを示している。
ODRL 情報モデルには次のクラスが含まれる:
Policy - Permissions(permission プロパティによる)および/または Prohibitions
(prohibition プロパティによる)および/または Duties(obligation プロパティによる)の空でないグループ。
Policy クラスは、Set、Offer、および Agreement サブクラスの親クラスである:
Set - 汎用 Rules の表現をサポートする Policy のサブクラス。Offer - assigner
Parties からの Rules の提示をサポートする Policy のサブクラス。Agreement - assigner から
assignee Parties への Rules の付与をサポートする Policy のサブクラス。 Asset - Rule の対象となるリソースまたはリソースの集合(抽象
relation プロパティによる)。Asset クラスは次の親クラスである:
AssetCollection - リソースの集合を識別する Asset のサブクラス。
Party - Rule において Roles を担うエンティティまたはエンティティの集合(抽象
function プロパティによる)。Party クラスは次の親クラスである:
PartyCollection - エンティティの集合を識別する Party のサブクラス。
Action - Asset に対する操作。Rule - Permissions、
Prohibitions、および Duties の共通特性を表す抽象概念。
Permission - Asset に対して Action を実行する能力。Permission は、合意された Action を
表現する duty プロパティを持つことも MAY であり、その Action
は(Permission を付与されるための
事前条件として)実行されなければならない MUST。Prohibition - Asset に対して Action を実行できないこと。Duty - Action を実行する義務。Constraint/LogicalConstraint - Action および
Party/Asset 集合、または Rule に適用される条件を精緻化するブール/論理式。ODRL 情報モデルには、クラス間のプロパティ関係が含まれる。ほとんどは明示的に名前付けされた プロパティであり、一部は抽象プロパティ(具体的には relation、function、 operand、および failure)である。抽象プロパティは、明示的な意味論を持つ 子プロパティ(サブタイプ)によって表現されるように設計された汎用の親プロパティである。
例えば、図 1 の relation および function という2つのプロパティは、
Rule と Asset および Party クラスの間の概念的関係を表すように設計されている。
図は、Asset が Rule の主対象であることを表現するために、サブタイプ target を持つ
relation プロパティを示している。function プロパティは、
Rule を発行する Party を表現するサブタイプ assigner と、
Rule の受領者である Party を表現するサブタイプ assignee を持つ。
ODRL 情報モデルは、Policy モデルの構成要素の論理ビューを提供する。 ODRL 情報モデルの実装可能ビューは、ODRL Vocabulary & Expression 文書 [odrl-vocab] において規範的に記述されている各種の 符号化直列化によって提供される。論理的な情報モデル構成要素を実装可能な直列化へマッピングする際には、 直列化言語によってサポートされる機能に応じて、いくつかのトレードオフおよび/または 差異が必要になる場合がある。
以降の節では、ODRL 情報モデルについてさらに詳しく説明する。
Policy クラスには次のプロパティがある:
uid プロパティ値(型は
IRI [rfc3987])を持たなければならない
MUST。
permission、
prohibition、または obligation プロパティ値を少なくとも1つ
持たなければならない MUST。(詳細については、Permission、Prohibition、および Obligation の節を参照。)
profile
プロパティ値(型は IRI [rfc3987])を
0個、1個、または複数持つことができる MAY。(詳細については
ODRL
Profiles の節を参照。)
inheritFrom
プロパティ値(型は IRI [rfc3987])を
0個、1個、または複数持つことができる MAY。(詳細については ODRL
Inheritance の節を参照。) conflict プロパティ値(型は ConflictTerm)を 0個または1個持つことができる
MAY。(詳細については Policy Conflict Strategy
の節を参照。)
ODRL Policy は、そのすべての Rules に共通して共有されるプロパティを宣言することもできる
MAY。具体的には、action プロパティ、
relation のサブプロパティ(target など)、および
function のサブプロパティ(assigner および assignee など)である。
これらの共有プロパティに関する検証要件については、Compact Policy の節を参照。
ODRL Policy は次のいずれかでなければならない:
後者の場合、ODRL Profile(s) の IRI を示すために、profile プロパティを使用しなければならない MUST。 ODRL Profiles を定義する機構および適合要件の詳細については、ODRL Profiles の節を参照。(本文書の例では、説明のみを目的として ODRL Profile 識別子を使用する。)
ODRL Policy は、その Policy の利用の文脈をより正確に記述するためにサブクラス化できる MAY。その文脈には、ODRL プロセッサが理解しなければならない MUST 追加の制約が含まれる場合がある MAY。追加の Policy サブクラスは、ODRL Common Vocabulary [odrl-vocab] または ODRL Profiles に文書化できる MAY。Policy クラスは、(Set を除く)すべての Policy サブクラスと 互いに素でなければならない MUST。
サブクラス Set の ODRL Policy は、Rules の任意の組み合わせを表す。Set
Policy サブクラスは、Policy の既定のサブクラスでもある(何も指定されない場合)。
ユースケース例: 下の
SetPolicy は、対象 Assethttp//example.com/asset:9898.movieをuseする Permission を示している。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Set",
"uid": "http://example.com/policy:1010",
"permission": [{
"target": "http://example.com/asset:9898.movie",
"action": "use"
}]
}
本文書の例では、ODRL Policy サブクラスは JSON-LD
@type トークンにマッピングされる。上の例では、Set 型の代わりに
Policy 型を使用することもできた(それらは等価であるため)。
上の例は、すべての用語が ODRL Core Vocabulary [odrl-vocab] によって定義されているため、
profile プロパティを使用していない。
サブクラス Offer の ODRL Policy は、assigner
Parties から提示されている Rules を表す。Offer は通常、Policies をより広い対象に
利用可能にするために用いられるが、いかなる Rules も付与しない。
サブクラス Offer の ODRL Policy:
assigner プロパティ値(型は
Party)を持たなければならない MUST。注: 機能的役割の詳細については、Function Property の節を参照。
注: 上記のプロパティ・カーディナリティは、規範的な ODRL 情報モデルを反映している。場合によっては、 一部のプロパティの繰り返し出現もサポートされる(Policy Rule Composition および Compact Policy に記述される)が、規範的な原子的 Policy は上記のプロパティ・カーディナリティと一致する。
ユースケース例: 下の
OfferPolicy(前の例に基づく)は、 assigner Partyhttp://example.com/party:org:abcから、対象 Assethttp//example.com/asset:9898.movieをplayする Permission を示している。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:1011",
"profile": "http://example.com/odrl:profile:01",
"permission": [{
"target": "http://example.com/asset:9898.movie",
"assigner": "http://example.com/party:org:abc",
"action": "play"
}]
}
上の例は、使用される用語が http://example.com/odrl:profile:01 によって識別される
ODRL Profile によって定義されていることを示すために、profile プロパティを使用している。
詳細については ODRL Profiles の節を参照。
サブクラス Agreement の ODRL Policy は、
assigner から assignee Parties に付与された Rules を表す。Agreement は通常、
Parties 間の Rules の条件を付与するために用いられる。
サブクラス Agreement の ODRL Policy:
assigner プロパティ値(型は
Party)を持たなければならない MUST。assignee プロパティ値(型は
Party)を持たなければならない MUST。注: 機能的役割の詳細については、Function Property の節を参照。
注: 上記のプロパティ・カーディナリティは、規範的な ODRL 情報モデルを反映している。場合によっては、 一部のプロパティの繰り返し出現もサポートされる(Policy Rule Composition および Compact Policy に記述される)が、規範的な原子的 Policy は上記のプロパティ・カーディナリティと一致する。
ユースケース例: 下の
AgreementPolicy(前の例に基づく)は、 assigner Partyhttp://example.com/party:org:abcから assignee Partyhttp://example.com/party:person:billieに対して、対象 Assethttp//example.com/asset:9898.movieをplayする Permission を 付与することを示している。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:1012",
"profile": "http://example.com/odrl:profile:01",
"permission": [{
"target": "http://example.com/asset:9898.movie",
"assigner": "http://example.com/party:org:abc",
"assignee": "http://example.com/party:person:billie",
"action": "play"
}]
}
Asset クラスは、Rule の対象となるリソースまたはリソースの集合である。Asset は、
データ/情報、コンテンツ/メディア、アプリケーション、サービス、または物理的人工物など、
識別可能な任意の形式のリソースであり得る。さらに、Duty の場合など、Policy 表現を実施するために
必要となる他の Asset クラスを表すためにも使用できる。Asset は、
Permission および/または Prohibition によって参照され、Duty によっても参照される。
Asset クラスには次のプロパティがある:
uid プロパティ値(型は
IRI [rfc3987])を持つべきである
SHOULD。
partOf
プロパティ値(型は AssetCollection)を 0個、1個、または複数持つことができる MAY。Asset が uid プロパティを用いて識別子を表明しない場合は、
ODRL Policies の ODRL Validators および Evaluators への影響など、その全面的な
含意を理解しなければならない。
Asset クラスには次のサブクラスがある:
AssetCollection - メンバー・リソースの集合を表す単一のリソースである Asset。
これは、その集合のすべてのメンバーが Rule の対象となることを示す。AssetCollection クラスには次のプロパティがある:
source プロパティ
値(型は IRI [rfc3987])を
持つことができる MAY。refinement プロパティ値を 0個、1個、または
複数持つことができる MAY。詳細については Asset
Collection に伴う Refinement プロパティを参照。
ODRL Policies は任意の種類の Asset を扱う可能性があるため、ODRL 情報モデルは 特定のメディア型の Assets を記述する追加メタデータを提供しない。Asset の型または目的に 適した Dublin Core Metadata Terms など、既存のメタデータ標準を使用することが推奨される。
抽象 relation プロパティは、Action と Asset の間に明示的なリンクを
作成するために用いられ、その Asset がそれにリンクする Rule に関してどのように利用されなければ
ならないか MUST を示す。
ODRL validator は、relation の次のサブプロパティをサポートしなければならない
MUST:
target: Asset が、Rule の action が直接適用される主対象であることを示す。追加の relation サブタイプ・プロパティは、ODRL Common Vocabulary
[odrl-vocab] および ODRL Profiles において
定義できる MAY。
ユースケース例: assigner Party
http//example.com/party:0001が、targetAssethttp://example.com/asset:3333を display することを offer している。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:3333",
"profile": "http://example.com/odrl:profile:02",
"permission": [{
"target": "http://example.com/asset:3333",
"action": "display",
"assigner": "http://example.com/party:0001"
}]
}
上の例では、relation プロパティの JSON-LD 表現は
target をトークンとして直接使用している。これは、親
relation プロパティのサブタイプとして定義されているためである。
ユースケース例: 下の Policy は、対象 Asset
http://example.com/archive1011に対するindexaction の Permission を示している。対象 asset は、そのリソースがリソースの集合であることを示すために、AssetCollectionとしても宣言されている。追加の Asset relationsummaryは、インデックス作成の出力を格納すべき Assethttp://example.com/x/databaseを示している。ODRL Profilettp://example.com/odrl:profile:03は、relation のこの新しいサブプロパティを 定義する。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:1011",
"profile": "http://example.com/odrl:profile:03",
"permission": [{
"target": {
"@type": "AssetCollection",
"uid": "http://example.com/archive1011" },
"action": "index",
"summary": "http://example.com/x/database"
}]
}
partOf プロパティは、Asset リソースがメンバーである AssetCollection を
識別するために用いられる。その目的は、Assets と AssetCollections の間のメンバーシップ関係を
明示的に表現することである。これにより、AssetCollection に関連する Rule が、どの個別
Assets にその Rule が適用され得るかを理解できる。さらに、Asset/AssetCollection の
メンバーシップ関係は、Rules における競合を検出できる可能性がある。
ユースケース例: 下のスニペットは、文書を記述するいくつかの Dublin Core メタデータを示している。
odrl:partOfプロパティは、Assethttp://example.com/asset:111.docが、上の例の Policy で使用されているhttp://example.com/archive1011AssetCollection のメンバーであることを表明する。 これは、http://example.com/asset:111.docが Policy 内の target Assets の1つであり、 index され得ることを意味する。
{
"@type": "dc:Document",
"@id": "http://example.com/asset:111.doc",
"dc:title": "Annual Report",
...
"odrl:partOf": "http://example.com/archive1011",
...
}
ODRL Policy クラスは、hasPolicy プロパティによって参照されることもできる
MAY。これは、ODRL Policy Rules が
外部メタデータ表現(Asset を識別するもの)のオブジェクトとなることをサポートする。
hasPolicy がメタデータ表現と ODRL Policy の間に表明された場合、
識別されている Asset は、その Policy のすべての Rules の target Asset であると
推論されなければならない MUST。Policy 内に複数の Rules がある場合、推論された Asset は
Policy 内のすべての Rule に対する target Asset となる。
ユースケース例: 下のスニペットは、movie Asset を記述するいくつかの Dublin Core メタデータを 示している。
odrl:hasPolicyプロパティは、ODRL Policyhttp://example.com/policy:1010(これは上で記述した Set Policy)にリンクする。 この場合、Assethttp://example.com/asset:9999.movieは、 Policyhttp://example.com/policy:1010内の Permission に対する target Asset にもなる。この Policy に追加の Rules がある場合、同じ Asset が各 Rule の target Asset となる。
{
"@type": "dc:MovingImage",
"@id": "http://example.com/asset:9999.movie",
"dc:publisher": "ABC Pictures",
"dc:creator": "Allen, Woody",
"dc:issued": "2017",
"dc:subject": "Musical Comedy",
...
"odrl:hasPolicy": "http://example.com/policy:1010",
...
}
Party クラスは、Rule において機能的役割を担うエンティティまたはエンティティの集合であり、 人、人物の集合、組織、または agent などである。agent とは、能動的な役割を担う、または 指定された効果を生み出す人または物である。Party は Actions を実行する(または実行しない)か、 Duty における function を持つ(すなわち、Rule において果たす function と関連付けることにより、 Party を Rule に割り当てる)。
Party クラスには次のプロパティがある:
uid プロパティ値(型は
IRI [rfc3987])を持つべきである
SHOULD。
partOf
プロパティ値(型は PartyCollection)を 0個、1個、または複数持つことができる MAY。Party が uid プロパティを用いて識別子を表明しない場合は、
ODRL Policies の ODRL Validators および Evaluators への影響など、その全面的な
含意を理解しなければならない。
Party クラスには次のサブクラスがある:
PartyCollection - メンバー・エンティティの集合を表す単一のエンティティである
Party。これは、その集合のすべてのメンバーが Rule において同じ機能的役割を担うことを示す。PartyCollection クラスには次のプロパティがある:
source プロパティ
値(型は IRI [rfc3987])を
持つことができる MAY。refinement プロパティ値を 0個、1個、または
複数持つことができる MAY。詳細については Party
Collection に伴う Refinement プロパティを参照。
ODRL 情報モデルは、Party クラスに対する追加メタデータを提供しない。W3C vCard Ontology [vcard-rdf] または FOAF Vocabulary [foaf] など、既存のメタデータ標準を 使用することが推奨される。
function プロパティは、Rule を Party にリンクするために用いられ、
それにリンクする Rule に関して Party が担う function を示す。
function プロパティ自体は抽象的であり、サブプロパティは Party と
Rule の間の機能的役割の明示的な意味論を表す。
ODRL validator は、function の次のサブプロパティをサポートしなければならない
MUST:
assigner: Rule を発行している Party を示す。例えば、Permission を付与する
Party、または合意された Duty の履行を求める Party。assignee: Rule の受領者である Party を示す。例えば、Permission を付与される
Party、または合意された Duty を履行することを求められる Party。追加の function サブタイプ・プロパティは、ODRL Common Vocabulary
[odrl-vocab] および ODRL Profiles において
定義できる MAY。
ユースケース例: この Policy は、
assignerおよびassigneeという 機能的役割を持つ2つの Parties による Agreement を示す。assignerは、 target asset に対する play action をassigneeに付与する。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:8888",
"profile": "http://example.com/odrl:profile:04",
"permission": [{
"target": "http://example.com/music/1999.mp3",
"assigner": "http://example.com/org/sony-music",
"assignee": "http://example.com/people/billie",
"action": "play"
}]
}
上の例では、function の JSON-LD 表現は
assigner および assignee をトークンとして直接使用している。
これは、親 function プロパティのサブプロパティとして
定義されているためである。
ユースケース例: この Policy は、
assignerおよびassigneeという 機能的役割を持つ2つの Parties による Agreement を示す。assignerは、 target asset の use をassigneeに付与する。この場合、assignerはPartyとして、また vcard:Organisation および いくつかの追加の外部プロパティとして明示的に宣言されている。assigneeは、PartyCollectionとして、また vcard:Group およびいくつかの追加の外部 プロパティとして明示的に宣言されている。これは、http://example.com/team/Aとして識別されるすべてのエンティティが、 それぞれ同じ付与された action を持つことを意味する
{
"@context": [
"http://www.w3.org/ns/odrl.jsonld",
{ "vcard": "http://www.w3.org/2006/vcard/ns#" }
],
"@type": "Agreement",
"uid": "http://example.com/policy:777",
"profile": "http://example.com/odrl:profile:05",
"permission": [{
"target": "http://example.com/looking-glass.ebook",
"assigner": {
"@type": [ "Party", "vcard:Organization" ],
"uid": "http://example.com/org/sony-books",
"vcard:fn": "Sony Books LCC",
"vcard:hasEmail": "sony-contact@example.com" },
"assignee": {
"@type": [ "PartyCollection", "vcard:Group" ],
"uid": "http://example.com/team/A",
"vcard:fn": "Team A",
"vcard:hasEmail": "teamA@example.com"},
"action": "use"
}]
}
partOf プロパティは、Party エンティティがメンバーである PartyCollection を
識別するために用いられる。その目的は、Parties と PartyCollections の間のメンバーシップ関係を
明示的に表現することである。これにより、PartyCollection に関連する Rule が、どの個別
Parties にその Rule が適用され得るかを理解できる。さらに、Party/PartyCollection の
メンバーシップ関係は、Rules における競合を検出できる可能性がある。
ユースケース例: 下のスニペットは、Party を記述するいくつかの vCard メタデータを示している。
odrl:partOfプロパティは、Partyhttp://example.com/person/murphyが、上の例の Policy で使用されているhttp://example.com/team/APartyCollection のメンバーであることを表明する。 これは、http://example.com/person/murphyが assignee であり、 Policy 内の target asset を使用できることを意味する。
{
"@type": "vcard:Individual",
"@id": "http://example.com/person/murphy",
"vcard:fn": "Murphy",
"vcard:hasEmail": "murphy@example.com",
...
"odrl:partOf": "http://example.com/team/A",
...
}
ODRL Policy クラスは、assignerOf および assigneeOf プロパティに
よって参照されることもできる MAY。これは、
ODRL Policy Rules が外部メタデータ表現(Party を識別するもの)のオブジェクトとなることを
サポートする。assignerOf がメタデータ表現と ODRL Policy の間に表明された場合、
識別されている Party は、その Policy のすべての Rules の assigner 機能的役割を
担うと推論されなければならない MUST。
assigneeOf がメタデータ表現と ODRL Policy の間に表明された場合、
識別されている Party は、その Policy のすべての Rules の assignee
機能的役割を担うと推論されなければならない MUST。
Policy 内に複数の Rules がある場合、推論された Party は Policy 内のすべての
Rule に対してその機能的役割を担う。
ユースケース例: 下のスニペットは、個人の Party を記述するいくつかの vCard メタデータを 示している。
odrl:assigneeOfプロパティは、ODRL Policyhttp://example.com/policy:1011(これは上で記述した Offer Policy)にリンクする。 この場合、Partyhttp://example.com/person/billieは、 Policyhttp://example.com/policy:1011内の Permission の assignee にもなる。 この Policy に追加の Rules がある場合、同じ Party が各 Rule の assignee となる。
{
"@type": "vcard:Individual",
"@id": "http://example.com/person/billie",
"vcard:fn": "Billie",
"vcard:hasEmail": "billie@example.com",
...
"odrl:assigneeOf": "http://example.com/policy:1011",
...
}
Action クラスは、Asset に対して実行できる操作を示す。Action は、Rule 内の action プロパティを介して Asset に関連付けられる。
Rule は Action の具体的な解釈を提供する。例えば、Permission に関連付けられる場合、Action は target Asset に対して実行することが許可される。Prohibition に関連付けられる場合、 Action は target Asset に対して実行することが禁止される操作を示す。Duty に関連付けられる場合、 Action は Party によって履行されることが義務である、合意された操作を示す
ODRL 情報モデルは、次の最上位 Actions を定義する:
use - parties による一般的な利用を伴う actions。 transfer - 所有権を第三者へ移転することを伴う actions。Action クラスには次のプロパティがある:
refinement
プロパティ値(型は Constraint)を 0個、1個、または複数持つことができる MAY。詳細については Constraints の節を参照。includedIn プロパティ値(型は Action)を
持たなければならない MUST。
implies プロパティ値(型は Action)を 0個、1個、または複数持つことができる
MAY。
Action 用語は、包含する Action を参照する includedIn
プロパティを用い、推移的な手段によって use または transfer を
最上位の親用語として定義されなければならない MUST。
includedIn プロパティの目的は、参照された他の Action インスタンスの意味論が、
この Action インスタンスの意味論を包含する(含む)ことを明示的に表明することである。
includedIn プロパティは推移的であり、そのため Actions は祖先関係を形成する。
includedIn プロパティの含意は、包含する Action の Permission または Prohibition が、
includedIn 関係を持つすべての Actions に継承されるということである。
例えば、play Action が use と includedIn として定義され、
ある Policy で play が許可され、同じ Policy で use が禁止されている場合
― かつ両方の Actions が同じ target Asset に適用される場合 ― これら2つの間で表明された関係により、
その Policy には競合がある。(詳細については Policy Conflict Strategy を参照。)
implies プロパティは、Action のインスタンスが、他方の Action インスタンスが
禁止されていないことを含意することを表明する。implies プロパティは、
includedIn 関係を持たない2つの Action インスタンス間に、そのような表明を確立できる。
例えば、share Action が distribute Action を明示的に含意する場合、
ある Policy で share が許可され、同じ Policy で distribute が禁止されていると
― かつ両方の Actions が同じ target Asset に適用されると ― これは Policy 内で競合を引き起こす。
含意された他の action が禁止されていない場合、これは競合を引き起こさない。
(詳細については Policy Conflict Strategy を参照。)
includedIn および
implies プロパティの使用方法の詳細については ODRL Profiles を参照。
ODRL Common Vocabulary [odrl-vocab] は、 ODRL Profiles が採用できる MAY 汎用 Actions の標準集合を定義する。
ユースケース例: この Policy は、target Asset
http://example.com/music:1012に対する Offer を表し、その Asset をplayする Action を伴う (playはuseのincludedIn用語として定義されている)。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:1012",
"profile": "http://example.com/odrl:profile:06",
"permission": [{
"target": "http://example.com/music:1012",
"assigner": "http://example.com/org:abc",
"action": "play"
}]
}
Constraints は、Action および Party/Asset Collection の意味論を精緻化したり、Rule に適用される 条件を宣言したりするために使用できるブール/論理式である。Constraints は Constraint クラスまたは Logical Constraint クラスとして表せる。 Logical Constraint は、既存の Constraints をその operands として参照する。複数の Constraints が 同じ Rule、Action、Party/Asset Collection に適用される場合、それらは論理積として解釈され、 すべてが満たされなければならない MUST。
Constraint および Logical Constraint クラスは、Party Collection、Asset Collection、Action、および Rule クラスとの意味的および条件的関係を形成する。 プロパティ関係は下の図にまとめられている。
Constraint クラスは、1つの関係演算子によって2つの operands(Constraints ではないもの)を
比較する式に用いられる。比較が一致を返す場合、Constraint は
満たされる。そうでない場合は満たされない。Constraint クラスは、
例えば、利用回数(leftOperand)が(operator)10
(rightOperand)より小さくなければならない、といった比較式を定式化する。
Constraint クラスには次のプロパティがある:
uid プロパティ値
(型は IRI [rfc3987])を
0個または1個持つことができる MAY。leftOperand
プロパティ値を1つ持たなければならない MUST。operator プロパティ値を1つ持たなければならない
MUST。
dataType
プロパティ値を 0個または1個持つことができる MAY。unit プロパティ値(型は IRI [rfc3987])を
0個または1個持つことができる MAY。
status
プロパティ値を 0個または1個持つことができる MAY。leftOperand プロパティ値は、LeftOperand クラスのインスタンスとして定義される。
leftOperand インスタンスは、Constraint の意味論を示すために明確に
定義されなければならず MUST、
比較のための値をどのように取得または生成しなければならないかを宣言できる
MAY。ODRL Common Vocabulary
[odrl-vocab] は、
ODRL Profiles が使用できる MAY
leftOperand を定義する。
operator プロパティ値は、Operator クラスのインスタンスとして定義される。
operator インスタンスは、left および right operands の間の「より大きい」または
「等しい」などの関係操作を識別する。
rightOperand プロパティ値は、RightOperand クラスのインスタンス、または
IRIs、または Literal 値として定義される。rightOperand は、
leftOperand と比較される Constraint の値である。
rightOperandReference は、rightOperand の実際の値を得るために
まず参照解決されなければならない MUST IRI を表す。
rightOperandReference は、rightOperand の値を
まず IRI の参照解決から取得しなければならない MUST
場合に使用される。Constraint には rightOperand または
rightOperandReference のいずれか一方だけが現れなければならない
MUST。
rightOperand は値を表し、rightOperandReference
は値を取得するために参照解決しなければならない IRI を表す。rightOperand が
http://example.com/c100 であった場合、それは式で比較される値として解釈される。
rightOperandReference が同じ値
http://example.com/c100 であった場合、その IRI はまず参照解決されなければならず、
返されたデータが式で比較される値として解釈されなければならない。
dataType は、xsd:decimal や xsd:datetime などの
rightOperand/Reference の型を示し、unit は
「EU currency」などの rightOperand/Reference の単位値を示す。
status は、比較式で使用されなければならない MUST、leftOperand action から生成された値を
提供する。例えば、count constraint は rightOperand 値 10 と
status 5 を持つことができる。これは、その action がすでに5回実行されており、
比較は現在の action を status 値と比較しなければならないことを意味する。
Logical Constraint クラスは、既存の Constraints である2つ以上の operands を、1つの論理演算子で 比較する式に用いられる。比較が論理的一致を返す場合、 Logical Constraint は満たされる。そうでない場合は満たされない。 例えば、3つの Constraints が論理的に and で結合され、3つすべてが true でなければ Logical Constraint が満たされないことを示せる。
Logical Constraint クラスには次のプロパティがある:
uid
プロパティ値(型は IRI [rfc3987])を
0個または1個持つことができる MAY。operand サブプロパティを1つ持たなければならない
MUST。その値は既存の Constraint インスタンスのリストである。
ODRL evaluator は、operand の次のサブプロパティをサポートしなければならない
MUST:
or - Constraints の少なくとも1つが満たされなければならない
MUST
xone - Constraints のうち1つのみ、かつそれ以上ではなく、満たされなければならない
MUST
and - すべての Constraints が満たされなければならない
MUST
andSequence - すべての Constraints が、順番に、満たされなければならない
MUST
追加の operand サブプロパティは、ODRL Profiles によって定義できる
MAY。
Logical Constraints に関する ODRL 検証要件には次が含まれる:
operand は、サブプロパティ or、xone、
and、andSequence のみでなければならない
MUST。
operand の追加サブプロパティは、Logical
Constraints の使用に限り、ODRL Profiles によって定義できる MAY。
Constraint インスタンスは評価されなければならず MUST、
その結果は、論理関係が満たされるかどうかを判断するために用いられる(
operand サブプロパティの意味論に基づく)。
andSequence など、順番に評価する必要がある論理 operand を使用する場合、
serialisations はリストのメンバーの順序を保持しなければならない MUST。JSON-LD
では、順序付きコレクションを表すために
@list キーワードを使用しなければならない MUST。
Rule(Permission、Prohibition、または Duty など)は、Rule に対する条件を示すために
constraint プロパティを含むことができる MAY。
この条件を満たすには、constraint プロパティによって参照されるすべての
Constraints/Logical Constraints が満たされなければならない
MUST。
ユースケース例: 下の Policy Offer の例では、permission は target asset を
distributeすることを許可し、その permission が 2018-01-01 までしか 実行できないというdateTime条件の constraint を含む。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:6163",
"profile": "http://example.com/odrl:profile:10",
"permission": [{
"target": "http://example.com/document:1234",
"assigner": "http://example.com/org:616",
"action": "distribute",
"constraint": [{
"leftOperand": "dateTime",
"operator": "lt",
"rightOperand": { "@value": "2018-01-01", "@type": "xsd:date" }
}]
}]
}
Action は、Action 操作の意味論を直接狭める Constraint/Logical Constraint を示すために
refinement プロパティを含むことができる MAY。
Action に対するより狭い意味論のこの条件を満たすには、
refinement プロパティによって参照されるすべての Constraints/Logical
Constraints が、満たされた状態を生成するものとして使用されなければならない
MUST。
注: Action に refinement を適用した結果は、null 操作になってはならない SHOULD NOT。
ユースケース例: 下の Policy Offer の例では、permission は target asset を
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:6161",
"profile": "http://example.com/odrl:profile:10",
"permission": [{
"target": "http://example.com/document:1234",
"assigner": "http://example.com/org:616",
"action": [{
"rdf:value": { "@id": "odrl:print" },
"refinement": [{
"leftOperand": "resolution",
"operator": "lteq",
"rightOperand": { "@value": "1200", "@type": "xsd:integer" },
"unit": "http://dbpedia.org/resource/Dots_per_inch"
}]
}]
}]
}
ユースケース例: 下の Policy は、target asset を online media または print media の いずれか一方で reproduce する permission を示すが、 両方ではない。これは、他の場所で宣言された2つの既存 Constraints を 参照する Logical Constraint(
xoneoperand を伴う)として表現される。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:88",
"profile": "http://example.com/odrl:profile:10",
"permission": [{
"target": "http://example.com/book/1999",
"assigner": "http://example.com/org/paisley-park",
"action": [{
"rdf:value": { "@id": "odrl:reproduce" },
"refinement": {
"xone": {
"@list": [
{ "@id": "http://example.com/p:88/C1" },
{ "@id": "http://example.com/p:88/C2" }
]
}
}
}]
}]
}
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Constraint",
"uid": "http://example.com/p:88/C1",
"leftOperand": "media",
"operator": "eq",
"rightOperand": { "@value": "online", "@type": "xsd:string" }
}
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Constraint",
"uid": "http://example.com/p:88/C2",
"leftOperand": "media",
"operator": "eq",
"rightOperand": { "@value": "print", "@type": "xsd:string" }
}
Action に伴って refinement プロパティを使用する場合、rdf:value
プロパティは、namespace 識別子(例 odrl)を使用しなければならない
MUST Action のインスタンスを表し、それが
@id キーであることを表明するために用いられる。さらに、Constraint インスタンス
(logical constraint operands 用)の識別子は、それらを @id キーとして
表明しなければならない。
AssetCollection は、完全なコレクションの個別 Asset(s) を識別する際の
refinement context を示すために、refinement プロパティを含むことができる
MAY。refinement プロパティは、
コレクションの各メンバーの特性に適用される(リソース全体には適用されない)。
完全な AssetCollection の個別 Asset(s) を識別するというこの条件を満たすには、
refinement プロパティによって参照されるすべての Constraints/Logical Constraints が
満たされなければならない MUST。
注: AssetCollection に refinements を適用した結果は、null 集合になってはならない SHOULD NOT。
refinement プロパティを使用する場合、uid プロパティは
AssetCollection を識別するために使用してはならない MUST
NOT。代わりに、
AssetCollection を参照するために source プロパティを
使用しなければならない MUST。
ユースケース例: この Policy は、マルチメディア動画の AssetCollection である target source
http://example.com/media-catalogueを定義する。 target には、AssetCollection メンバーの特性を指定する refinement もある。この場合、 Assets の target subset は、running time が60分未満のものとなり、それらの各々を再生できる。なお、runningTimeleftOperand は、playaction とともに ODRL Profilehttp://example.com/odrl:profile:11で定義されている。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:4444",
"profile": "http://example.com/odrl:profile:11",
"permission": [{
"assigner": "http://example.com/org88",
"target": {
"@type": "AssetCollection",
"source": "http://example.com/media-catalogue",
"refinement": [{
"leftOperand": "runningTime",
"operator": "lt",
"rightOperand": { "@value": "60", "@type": "xsd:integer" },
"unit": "http://qudt.org/vocab/unit/MinuteTime"
}]
},
"action": "play"
}]
}
PartyCollection は、完全なコレクションの個別 Party(ies) を識別する際の
refinement context を示すために、refinement プロパティを含むことができる
MAY。refinement プロパティは、
コレクションの各メンバーの特性に適用される(リソース全体には適用されない)。
完全な PartyCollection の個別 Party(ies) を識別するというこの条件を満たすには、
refinement プロパティによって参照されるすべての Constraints/Logical Constraints が
満たされなければならない MUST。
注: PartyCollection に refinements を適用した結果は、null 集合になってはならない SHOULD NOT。
refinement プロパティを使用する場合、uid プロパティは
PartyCollection を識別するために使用してはならない MUST
NOT。代わりに、
PartyCollection を参照するために source プロパティを
使用しなければならない MUST。
ユースケース例: target Asset
http://example.com/myPhotos:BdayPartyは、 写真の assignerhttp://example.com/user44によってソーシャルネットワークサイトに 投稿された写真の集合である。assignee source は PartyCollectionhttp://example.com/user44/friendsであり、assigner のすべての friends を表す。 assignee には、collection のうちfoaf:ageが18を超えるメンバーのみに、ex:viewpermission(Profile によって定義される)が割り当てられることを示す refinement もある。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:4444",
"profile": "http://example.com/odrl:profile:12",
"permission": [{
"target": "http://example.com/myPhotos:BdayParty",
"assigner": "http://example.com/user44",
"assignee": {
"@type": "PartyCollection",
"source": "http://example.com/user44/friends",
"refinement": [{
"leftOperand": "foaf:age",
"operator": "gt",
"rightOperand": { "@value": "17", "@type": "xsd:integer" }
}]
},
"action": { "@id": "ex:view" }
}]
}
Rule クラスは、Permission、Prohibition、および Duty クラスの親である。Rule クラスは、 これら3つのクラスに共通する特性を表す。Rule クラスは、他のすべての Rule サブクラスと 互いに素でなければならない MUST。
Rule クラスには次のプロパティがある:
action プロパティ値を1つ持たなければならない
MUST。
relation
サブプロパティ値を 0個または1個持つことができる MAY。function サブプロパティ値を 0個、1個、または複数持つことができる
MAY。
failure
サブプロパティ値を 0個、1個、または複数持つことができる MAY。constraint
プロパティ値を 0個、1個、または複数持つことができる MAY。uid プロパティ値(型は IRI [rfc3987])を
0個または1個持つことができる MAY。
注: 上記のプロパティ・カーディナリティは、規範的な ODRL 情報モデルを反映している。場合によっては、 一部のプロパティの繰り返し出現もサポートされる(Policy Rule Composition および Compact Policy に記述される)が、 規範的な原子的 Policy は上記のプロパティ・カーディナリティと一致する。
抽象 relation、relation
および failure プロパティの明示的なサブプロパティを使用しなければならず、
その選択は対象となる Rule のサブクラスに依存する。
Rules の3つのクラスは、Duty Rule とも重要な関係を形成する。プロパティ関係は 下の図にまとめられている。
Permission は、すべての refinements が満たされ、すべての constraints が 満たされ、かつすべての duties が履行されている場合に、 Asset に対して action が実行されることを許可する。
Permission クラスは Rule クラスのサブクラスであり、Rule クラスからすべてのプロパティを継承する。 さらに、次の追加のプロパティ意味論を持つ:
target プロパティ値を1つ持たなければならない
MUST。(他の
relation サブプロパティを使用できる MAY。)
assigner
および/または assignee プロパティ値を 0個または1個持つことができる
MAY。(他の
function サブプロパティを使用できる MAY。)
duty
プロパティ値を 0個、1個、または複数持つことができる MAY。注: 上記のプロパティ・カーディナリティは、規範的な ODRL 情報モデルを反映している。場合によっては、 一部のプロパティの繰り返し出現もサポートされる(Policy Rule Composition および Compact Policy に記述される)が、規範的な原子的 Policy は上記のプロパティ・カーディナリティと一致する。
duty プロパティは、履行されなければならない MUST 合意された義務を表す。すなわち、duty プロパティは Permission と Duty の間の事前条件を表明する。詳細については Permission に伴う Duty の節を参照。
ユースケース例: assigner
http://example.com/org:xyzからの PolicyOfferは、target Assethttp//example.com/game:9090に対する play action を表し、その permission は 2017年末まで有効である。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:9090",
"profile": "http://example.com/odrl:profile:07",
"permission": [{
"target": "http://example.com/game:9090",
"assigner": "http://example.com/org:xyz",
"action": "play",
"constraint": [{
"leftOperand": "dateTime",
"operator": "lteq",
"rightOperand": { "@value": "2017-12-31", "@type": "xsd:date" }
}]
}]
}
Prohibition は、すべての refinements が満たされ、すべての constraints が 満たされている場合に、Asset に対して action が実行されることを 禁止する。Prohibition が action の実行によって侵害された場合、 Prohibition の状態を未侵害に設定するために、すべての remedies が MUST 履行されなければならない。
Prohibition クラスは Rule クラスのサブクラスであり、Rule クラスからすべてのプロパティを継承する。 さらに、次の追加のプロパティ意味論を持つ:
target プロパティ値を1つ持たなければならない
MUST。(他の
relation サブプロパティを使用できる MAY。)
assigner
および/または assignee プロパティ値を 0個または1個持つことができる
MAY。(他の
function サブプロパティを使用できる MAY。)
remedy
プロパティ値を 0個、1個、または複数持つことができる MAY。
注: 上記のプロパティ・カーディナリティは、規範的な ODRL 情報モデルを反映している。場合によっては、 一部のプロパティの繰り返し出現もサポートされる(Policy Rule Composition および Compact Policy に記述される)が、規範的な原子的 Policy は上記のプロパティ・カーディナリティと一致する。
remedy プロパティ(failure プロパティのサブプロパティ)は、
Prohibition が侵害された場合に履行されなければならない
MUST 合意された義務を表す。すなわち、remedy プロパティは、
Prohibition の action が実行された場合に履行されなければならない Duty を表明する。詳細については
Prohibition に伴う Remedy の節を参照。
ユースケース例: target Asset
http://example.com/photoAlbum:55の assigner は、 Permission と Prohibition の両方を持つ Agreement Policy を表す。assigner Partyhttp://example.com/MyPix:55は、assignee Partyhttp://example.com/assignee:55に Permissiondisplayを割り当てると同時に、 target Asset をarchiveする Prohibition を割り当てる。さらに、Policy 内で競合 (例: Permissions と Prohibitions の間)が発生した場合、Policyのconflictプロパティはpermに設定され、Permissions が優先されることを示す。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:5555",
"profile": "http://example.com/odrl:profile:08",
"conflict": "perm",
"permission": [{
"target": "http://example.com/photoAlbum:55",
"action": "display",
"assigner": "http://example.com/MyPix:55",
"assignee": "http://example.com/assignee:55"
}],
"prohibition": [{
"target": "http://example.com/photoAlbum:55",
"action": "archive",
"assigner": "http://example.com/MyPix:55",
"assignee": "http://example.com/assignee:55"
}]
}
Duty は、すべての refinements が満たされた状態で action を
実行する義務である。Duty は、すべての constraints が
満たされ、かつ、その action がすべての refinements が満たされた状態で
実行されている場合に履行される。その action が実行されていない場合、
Duty を履行するには、すべての consequence も履行されなければならない。
すなわち、consequences は、同様に履行されなければならない追加の Duties である。
(注: duty または obligation プロパティによって参照される Duties のみが consequence プロパティを使用できる。)
Duty クラスは Rule クラスのサブクラスであり、Rule クラスからすべてのプロパティを継承する。 さらに、次の追加のプロパティ意味論を持つ:
target プロパティ値を 0個または1個持つことができる MAY。
(他の relation サブプロパティを使用できる MAY。)
assigner および/または
assignee プロパティ値を 0個または1個持つことができる MAY。
(他の function サブプロパティを使用できる MAY。)
consequence プロパティ値を 0個、1個、または複数持つことができる
MAY。
注: 上記のプロパティ・カーディナリティは、規範的な ODRL 情報モデルを反映している。場合によっては、 一部のプロパティの繰り返し出現もサポートされる(Policy Rule Composition および Compact Policy に記述される)が、規範的な原子的 Policy は上記のプロパティ・カーディナリティと一致する。
Duty クラスには、次の追加要件もある:
consequence プロパティ(failure プロパティのサブプロパティ)は、
Permission に対する合意された Policy obligation または duty を履行しないことの影響を表すために
利用される。これらのいずれかが履行されない場合、その結果として consequence
Duties も同様に新たな要件となり、元の obligation または duty に加えて、
consequence Duties もすべて MUST
履行されなければならないことを意味する。
場合によっては、consequence を引き起こした元の duty/obligation を履行するために、 元の duty/obligation に対する一部の constraints および/または refinements がもはや 満たせない場合、それらを緩和することが必要になることがある MAY。
例えば、固定日までにデータを提供する obligation が履行されない場合、結果として 100ドルの罰金も支払うべきものとなる。その日付が過ぎている場合、元の duty は(日付 constraint を満たせないため)技術的には履行できない。
そのような場合、ODRL 実装は、consequence の発生後に元の duty/obligation を 満たせるようにする機構を提供するべきである SHOULD。
なお、consequence プロパティは、Permission duty または Policy obligation の consequence で すでにある Duty には使用してはならない MUST NOT。
Policy は、Duty を履行する obligation を含むことができる MAY。 その obligation は、すべての constraints が満たされ、かつ、その action が すべての refinements が満たされた状態で実行されている場合に 履行される。
ユースケース例: 下の Agreement は、assigner
http://example.com/org:43から assigneehttp://example.com/person:44への、 EU500.00 の支払い額について assigner に compensate する obligation を含む。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:42",
"profile": "http://example.com/odrl:profile:09",
"obligation": [{
"assigner": "http://example.com/org:43",
"assignee": "http://example.com/person:44",
"action": [{
"rdf:value": {
"@id": "odrl:compensate"
},
"refinement": [
{
"leftOperand": "payAmount",
"operator": "eq",
"rightOperand": { "@value": "500.00", "@type": "xsd:decimal" },
"unit": "http://dbpedia.org/resource/Euro"
}]
}]
}]
}
Policy は、obligation を履行しないことの consequence を含むこともできる MAY。
ユースケース例: 下の Agreement は、assigner
http://example.com/org:43から assigneehttp://example.com/person:44への、 target Asset を delete する obligation を含む。obligation が履行されない場合、consequence として、 assigner は指名された慈善団体にも EU10.00 の支払いを compensate しなければならない MUST(obligation Duty の履行に加えて)。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:42B",
"profile": "http://example.com/odrl:profile:09",
"assigner": "http://example.com/org:43",
"assignee": "http://example.com/person:44",
"obligation": [{
"action": "delete",
"target": "http://example.com/document:XZY",
"consequence": [{
"action": [{
"rdf:value": { "@id": "odrl:compensate" },
"refinement": [{
"leftOperand": "payAmount",
"operator": "eq",
"rightOperand": { "@value": "10.00", "@type": "xsd:decimal" },
"unit": "http://dbpedia.org/resource/Euro"
}]
}],
"compensatedParty": "http://wwf.org"
}]
}]
}
Duty は、Permission から Duty への duty プロパティ関係を用いて履行を要求する事前条件として 指定できる MAY。
Permission が複数の Duties を持つ場合、すべての Duties が履行されることに
合意されなければならない MUST。複数の Permissions が
同じ Duty(その uid プロパティによる)を参照する場合、その Duty は一度だけ
履行されればよい。
Duty に function サブプロパティが宣言されていない場合、これらの
機能的役割は、参照元 Permission で宣言されたものと同じになる。
ユースケース例: Party
http://example.com/assigner:sonyは、 target assethttp://example.com/music/1999.mp3を play する Offer を行う。 permission は、payAmountが $EU5.00 である refinement を持つcompensateaction の duty を含む。duty には、eventがpolicyUsageより小さいという constraint もあり、permission rule を実行する前に duty rule(すなわち compensation)を実行しなければならないことを意味する。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Offer",
"uid": "http://example.com/policy:88",
"profile": "http://example.com/odrl:profile:09",
"permission": [{
"assigner": "http://example.com/assigner:sony",
"target": "http://example.com/music/1999.mp3",
"action": "play",
"duty": [{
"action": [{
"rdf:value": { "@id": "odrl:compensate" },
"refinement": [{
"leftOperand": "payAmount",
"operator": "eq",
"rightOperand": { "@value": "5.00", "@type": "xsd:decimal" },
"unit": "http://dbpedia.org/resource/Euro"
}]
}],
"constraint": [{
"leftOperand": "event",
"operator": "lt",
"rightOperand": { "@id": "odrl:policyUsage" }
}]
}]
}]
}
Permission の duty、および Policy の obligation は、その duty または obligation を履行しないことに対する
consequence Duty を含むことができる MAY。
この場合、Permission/Obligation Duty の最終状態を
履行済みに設定するために、すべての consequence Duties も
MUST 履行されなければならない。
consequence プロパティは、failure
プロパティのサブプロパティである。consequence プロパティの詳細については
Duty クラス の節を参照。
ユースケース例: assigner
http://example.com/org:99と assigneehttp://example.com/person:88の間の下の Agreement は、assignee が Assethttp://example.com/data:77を distribute することを、asset を Partyhttp://australia.gov.au/に attribute する事前条件の下で許可する。 assignee が duty を履行しない場合、または duty を履行せずに asset を distribute する場合、 consequence として、assignee はhttp://example.com/dept:100によって track されることにもなる。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:66",
"profile": "http://example.com/odrl:profile:09",
"permission": [{
"target": "http://example.com/data:77",
"assigner": "http://example.com/org:99",
"assignee": "http://example.com/person:88",
"action": "distribute",
"duty": [{
"action": "attribute",
"attributedParty": "http://australia.gov.au/",
"consequence": [{
"action": "acceptTracking",
"trackingParty": "http://example.com/dept:100"
}]
}]
}]
}
remedy プロパティは、Prohibition が実行されることによって
侵害された場合に履行されなければならない MUST 合意された Duty
を表す。Prohibition action が実行された場合、
その Prohibition の侵害に対処して状態を未侵害に設定するために、すべての
remedy Duties が MUST 履行されなければならない。
remedy プロパティは failure プロパティのサブプロパティである。
remedy は、consequence Duty を含む Duty を参照してはならない MUST NOT。
ユースケース例: assigner
http://example.com/person:88と assigneehttp://example.com/org:99の間の下の Agreement は、assignee が Assethttp://example.com/data:77を index することを禁止する。 assignee が実際に target asset を index した場合、remedy として assignee は target assethttp://example.com/data:77を anonymize しなければならない MUST。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:33CC",
"profile": "http://example.com/odrl:profile:09",
"prohibition": [{
"target": "http://example.com/data:77",
"assigner": "http://example.com/person:88",
"assignee": "http://example.com/org:99",
"action": "index",
"remedy": [{
"action": "anonymize",
"target": "http://example.com/data:77"
}]
}]
}
ODRL 情報モデルは、Rules に対するプロパティ関係の規範的なカーディナリティを提供する。中核レベルでは、 ODRL Rule は1つの Asset、1つ以上の Party 機能的役割、1つの Action(および場合によっては Constraints および/または Duties)に関連付けられる。
Policy Rules Composition は、各 Rule が ODRL 情報モデルのカーディナリティ要件を拡張し、1つの Rule が複数の Assets、Parties、および Actions に 関連付けられることをサポートできるようにする。その目的は、共通プロパティを(単一の Rule 内で)組み合わせ、 より複合的な Policy を表現することである。その Policy はその後、規範的な原子的 等価物へ処理されるべきである SHOULD。
下の例は、Policy の原子的レベルを示しており、これは既約な Rule (すなわち、縮約またはさらなる単純化ができないもの)である。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:7777",
"profile": "http://example.com/odrl:profile:20",
"permission": [{
"target": "http://example.com/music/1999.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "play"
}]
}
下の Policy 例は、同じ permission Rule 内に2つの target Assets と2つの actions を含む。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:8888",
"profile": "http://example.com/odrl:profile:20",
"permission": [{
"target": [ "http://example.com/music/1999.mp3",
"http://example.com/music/PurpleRain.mp3" ],
"assigner": "http://example.com/org/sony-music",
"action": [ "play", "stream" ]
}]
}
上の例は、4つの原子的 permission Rules に縮約できる。各 permission Rule は、 単一の target と単一の action を含む。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:8888",
"profile": "http://example.com/odrl:profile:20",
"permission": [{
"target": "http://example.com/music/1999.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "play"
},
{
"target": "http://example.com/music/1999.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "stream"
},
{
"target": "http://example.com/music/PurpleRain.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "play"
},
{
"target": "http://example.com/music/PurpleRain.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "stream"
}]
}
Policy 内に原子的 Rules を作成するために、複数の Assets、Parties、および Actions を持つ Rules に対する ODRL 検証要件には次が含まれる:
ODRL Policy は、そのすべての Rules に共有され共通する、Policy レベルで宣言されたプロパティを 保持できる MAY。これは、よりコンパクトな serialisations をサポートするためのショートカット方法としてのみ意図されている。 これらの共有プロパティは、Policy レベルのプロパティ(Policy クラス節で 定義されたものなど)として解釈してはならない MUST NOT。
共有できる MAY プロパティ(下の図に示す)には次が含まれる:
action プロパティ。relation の1つまたは複数のサブプロパティ(target など)。
function の1つまたは複数のサブプロパティ(assigner および
assignee など)。
Policy 内のショートカットを展開するための ODRL 検証要件は次のとおりである:
さらに、前の節で定義された ODRL 検証要件に従い、Policy 内に原子的 Rules を 作成する。
コンパクトな ODRL Policies は、適合性のために処理される際に原子的 Policies へ展開されることが 推奨される RECOMMENDED。
下の例は、そのような共有共通プロパティを Policy に適用したものを示す:
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:8888",
"profile": "http://example.com/odrl:profile:21",
"target": "http://example.com/music/1999.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "play",
"permission": [{
"assignee": "http://example.com/people/billie"
},
{
"assignee": "http://example.com/people/murphy"
}]
}
下の例は、これらの共有プロパティが上記の ODRL 検証要件に従って Policy の Permissions に 展開される方法を示す。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:8888",
"profile": "http://example.com/odrl:profile:21",
"permission": [{
"assignee": "http://example.com/people/billie",
"target": "http://example.com/music/1999.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "play"
},
{
"assignee": "http://example.com/people/murphy",
"target": "http://example.com/music/1999.mp3",
"assigner": "http://example.com/org/sony-music",
"action": "play",
}]
}
追加のメタデータ・プロパティは、外部語彙からさらなる真正性および完全性の目的をサポートするために、 Policy に追加できる MAY。ODRL 情報モデルは、 ODRL Policies に Dublin Core Metadata Terms [dcterms] を使用することを推奨する。
次の Dublin Core Metadata Terms [dcterms] プロパティを使用すべきである SHOULD:
dc:creator プロパティ値 - Policy を作成した個人、
agent、または組織。dc:description プロパティ値 - Policy の人間可読な表現または
要約。dc:issued プロパティ値 - Policy が最初に発行された日付(および時刻)。dc:modified プロパティ値 - Policy が更新された日付(および時刻)。
dc:coverage プロパティ値 - Policy が関連する管轄区域。dc:replaces プロパティ値(型は Policy) - この Policy が置き換える
Policy の識別子。dc:isReplacedBy プロパティ値(型は Policy) - この Policy を
置き換える Policy の識別子。上記のメタデータ・プロパティを持つ Policies に対する ODRL 検証要件には次が含まれる:
dc:isReplacedBy プロパティを持つ場合、プロセッサは最初の Policy を
無効とみなさなければならず MUST、識別された Policy を取得して処理しなければならない
MUST。
ユースケース例: 下の例は、誰が Policy を作成したか、説明、Policy がいつ発行されたか、 Policy が適用される管轄区域(オーストラリア、クイーンズランド州の識別子)、および それが置き換える Policy の古いバージョンの識別子を示すメタデータ・プロパティを示している。
{
"@context": [
"http://www.w3.org/ns/odrl.jsonld",
{ "dc": "http://purl.org/dc/terms/" }
],
"@type": "Policy",
"uid": "http://example.com/policy:8888",
"profile": "http://example.com/odrl:profile:22",
"dc:creator": "Billie Enterprises LLC",
"dc:description": "This policy covers...",
"dc:issued": "2017-01-01T12:00",
"dc:coverage": { "@id": "https://www.iso.org/obp/ui/#iso:code:3166:AU-QLD" },
"dc:replaces": { "@id": "http://example.com/policy:8887" },
"permission": [ { } ]
}
注: Dublin Core メタデータ・プロパティで使用される文字列値は、正規化されていない場合があるため、 Policy メタデータの比較用には設計されていない。
ODRL は、(子)Policy が1つ以上の(親)Policies のすべての原子的 Rules を継承できる継承機構を
サポートする。
inheritFrom プロパティは、親 Policy から継承する子
Policy で使用されなければならず MUST、
親 Policies の複数の識別子を含むことができる MAY。
継承を使用する場合、次が適用される:
status 情報は親 Policy から子
Policy へ転送されない。すなわち、親 Policy が値を持つ status プロパティを
持っていた場合、それらの値は null 化される。ユースケース例: 下の(親)Policy
http://example.com/policy:defaultを考える。 これは(Policy レベルの)assigner と、target asset policy document を review する Obligation を 含む。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:default",
"profile": "http://example.com/odrl:profile:30",
"assigner": "http://example.com/org-01",
"obligation": [{
"target": "http://example.com/asset:terms-and-conditions",
"action": "reviewPolicy"
}]
}
下の子 AgreementPolicy http://example.com/policy:4444 は、
親 Policy
http://example.com/policy:default(上記)を指す inheritFrom プロパティを示している。
子 Policy は、Agreement のための target Asset、actions(Asset を display すること)、
および assignee Party を示す。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:4444",
"profile": "http://example.com/odrl:profile:30",
"inheritFrom": "http://example.com/policy:default",
"assignee": "http://example.com/user:0001",
"permission": [{
"target": "http://example.com/asset:5555",
"action": "display"
}]
}
継承が実行された後(親 Policy Rules と Policy レベルのプロパティが子 Policy に追加される)、 さらに Rules が原子的にされた後、結果の Policy は下に示される。元の子 Permission rule は、 親 Policy からの(Policy レベルの)assigner を含むようになる。親 Obligation rule は、 元の子(Policy レベルの)assignee を伴って、更新された子 policy に現れる。
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Agreement",
"uid": "http://example.com/policy:4444",
"profile": "http://example.com/odrl:profile:30",
"inheritFrom": "http://example.com/policy:default",
"permission": [{
"target": "http://example.com/asset:5555",
"action": "display",
"assigner": "http://example.com/org-01",
"assignee": "http://example.com/user:0001"
}],
"obligation": [{
"target": "http://example.com/asset:terms-and-conditions",
"action": "reviewPolicy",
"assigner": "http://example.com/org-01",
"assignee": "http://example.com/user:0001"
}]
}
ODRL Policy Inheritance に対する ODRL 検証要件には次が含まれる:
conflict プロパティは、Policies のマージにより生じる競合、または同じ Policy 内の
Permissions と Prohibitions の間の競合を解決する戦略を確立するために用いられる。競合は、
Policy Inheritance の結果として Policies をマージし、その結果の Rules が
一貫しない場合に発生することがある。
conflict プロパティは、次の Conflict Strategy Preference 値(ConflictTerm クラスの
インスタンス)のいずれかを取るべきである SHOULD:
perm: Permissions は Prohibitions を上書きしなければならない
MUST
prohibit: Prohibitions は Permissions を上書きしなければならない
MUST
invalid: 競合が検出された場合、Policy 全体は無効でなければならない
MUST
conflict プロパティが明示的に設定されていない場合、既定値の invalid が
使用される。
追加の conflict プロパティ値は、ODRL Profiles によって定義できる
MAY。
Conflict Strategy 要件には次が含まれる:
perm の conflict プロパティを持つ場合、競合する
Permission Rule は Prohibition Rule を上書きしなければならない MUST。prohibit の conflict プロパティを持つ場合、競合する
Prohibition Rule は Permission Rule を上書きしなければならない MUST。invalid の conflict プロパティを持つ場合、競合する
Rules は Policy 全体を無効にしなければならない MUST。conflict プロパティ値を持つ場合(例えば、Policy のマージまたは
継承の後)、競合する Rules があるなら、Policy 全体は無効でなければならない MUST。ユースケース例: 2つの Policies が同じ target Asset
http://example.com/asset:1212に関連付けられている。最初の Policyhttp://example.com/policy:0001は Asset をuseすることを許可する。2番目の Policyhttp://example.com/policy:0002は Asset の display を許可するが、conflictプロパティをpermに設定することで、競合をどのように扱うかを明示的に述べている。 したがって、Permissions は常に Prohibitions を上書きする。このユースケースでは、useAction の特殊化であるため、競合が発生する可能性がある。 しかし、permconflict strategy により、usePermission は
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:0001",
"profile": "http://example.com/odrl:profile:40",
"conflict": "perm",
"permission": [{
"target": "http://example.com/asset:1212",
"action": "use",
"assigner": "http://example.com/owner:181"
}]
}
{
"@context": "http://www.w3.org/ns/odrl.jsonld",
"@type": "Policy",
"uid": "http://example.com/policy:0002",
"profile": "http://example.com/odrl:profile:40",
"conflict": "perm",
"permission": [{
"target": "http://example.com/asset:1212",
"action": "display",
"assigner": "http://example.com/owner:182"
}],
"prohibition": [{
"target": "http://example.com/asset:1212",
"action": "print"
}]
}
上のユースケースで、2番目の Policy が prohibit の conflict 値を持っていた場合、
結果は直接的な矛盾となり、その結果は無効な Policy となる。
ODRL 情報モデルは、ポリシーを表現するための中核的なフレームワークおよび語彙として機能する。ODRL Core Vocabulary [odrl-vocab] は、この一連の 語彙用語を明示する。ODRL policy は ODRL Core Vocabulary を用いて表現でき、これは 最小限サポートされるポリシー表現を表す。
ODRL Profile は、追加の意味論を必要とする ODRL policies で使用できる語彙用語(ODRL Profile Mechanism 節で 範囲付けられるもの)を提供するために定義されなければならない MUST。ODRL Profile は、ODRL policy 表現で サポートされる必要がある語彙用語を指定することにより、コミュニティのニーズに明示的に対応する。 これらの用語は明示的に定義してもよく、ODRL Common Vocabulary から採用してもよい。
ODRL Common Vocabulary [odrl-vocab] は、 Permissions、Prohibition、および Duties のための共通 actions の汎用的な範囲に加えて、Policy サブクラス、Constraint left operands および operators、Asset relations、ならびに Party functions を 提供する。
ODRL Policy が ODRL Profile に適合する場合、ODRL
Profile の識別子(IRI)を示すために profile プロパティを指定しなければならない
MUST。ODRL Policy が複数の ODRL Profiles に適合することを
示すために、複数の識別子を使用できる MAY。
ODRL Policy で ODRL Profile(s) が使用される場合、ODRL Processing system は、識別された ODRL Profile(s) の意味論を理解しなければならない MUST。ODRL Processing system が ODRL Profile identifier(s) を認識しない場合、 policy の処理を停止しなければならない MUST。
ODRL Profile を作成するには、ODRL Core Vocabulary のクラス、プロパティ、および インスタンスへの直接的な拡張を、次の方法で定義する:
| ODRL Profile 定義 | 例 |
|---|---|
| 追加の Policy サブクラス: ODRL Policy クラスのサブクラスを作成し、 他のすべての Policy サブクラス(Set を除く)と互いに素であると定義する。 |
ex:myPolicyType rdfs:subClassOf odrl:Policy .owl:disjointWith :Agreement :Offer, :Privacy, :Request, :Ticket, :Assertion .
|
| 追加の Asset 関係: 抽象 relation プロパティのサブプロパティを作成する。 |
ex:myRelation rdfs:subPropertyOf odrl:relation . |
| 追加の Party 機能的役割: 抽象 function プロパティのサブプロパティを作成する。 |
ex:myFunctionRole rdfs:subPropertyOf odrl:function . |
| Rules のための追加 Actions: Action のインスタンスを作成し、その includedIn 親 Action を定義する。 新しい Action は、任意の既存 Action に includedIn として定義できる MAY。 新しい Action が別の新規または既存 Action と依存関係を形成する場合、implies プロパティで 2つの actions を定義する。 |
ex:myAction a odrl:Action .ex:myAction odrl:includedIn odrl:use .
ex:myAction odrl:implies odrl:distribute .
|
| 追加の Constraint left operands: LeftOperand クラスのインスタンスを作成する。 |
ex:myLeftOperand a odrl:LeftOperand . |
| 追加の Constraint right operands: RightOperand クラスのインスタンスを作成する。 |
ex:myRightOperand a odrl:RightOperand . |
| 追加の Constraint 関係演算子: Operator クラスのインスタンスを作成する。 |
ex:myOperator a odrl:Operator . |
| 追加の Logical Constraint operands: 抽象 operand プロパティのサブプロパティを作成する。 |
ex:myLogicalOp rdfs:subPropertyOf odrl:operand . |
| 追加の Policy 競合戦略: ConflictTerm クラスのインスタンスを作成する。 |
ex:myStrategy a odrl:ConflictTerm . |
| 追加の Rule クラス: Rule クラスのサブクラスを作成し、 他のすべての Rule サブクラスと互いに素であると定義する。 |
ex:myRule rdfs:subClassOf odrl:Rule ;owl:disjointWith odrl:Prohibition, odrl:Duty, odrl:Permission .
|
すべての新しいクラス(rdfs:Class, owl:Class)、プロパティ(rdf:Property,
owl:ObjectProperty)、およびインスタンス(owl:NamedIndividual)も、
skos:Concept として定義されなければならない。クラスについては、適切な
rdfs:domain および rdfs:range も定義すべきである。
各新規用語について、人間可読な文書化も推奨される。名前には rdfs:label、
形式的定義には skos:definition、使用に関する追加コメントには skos:note を
用いる。
ODRL Core Profile を識別する必要がある状況、すなわち Policy が ODRL Core Vocabulary
のみに適合する場合、Core Profile には次の識別子を使用できる
MAY:
http://www.w3.org/ns/odrl/2/core
この節は非規範的である。
ODRL 情報モデルは、Parties に関連するそのようなデータを含む Assets の存在の同一性など、 機微な個人情報を直接表現しない。しかし、ODRL 語彙(ODRL Common Vocabulary [odrl-vocab] や ODRL Profiles など)は、個人情報に関連し得る用語を定義する場合がある。これらの仕様は、 そのような ODRL 表現を生成または消費する実装に対し、policy が使用される方法、その policy が 共有される相手となる他の party の同一性、および policy が他の parties と共有される理由を、 すべての関連ユーザーに伝達するための措置を講じるよう知らせるべきである。
POE Working Group は、ODRL Community Group および以前の ODRL Initiative の貢献に 深く感謝する。特に編集者は、過去の編集上の貢献について、Susanne Guth、Daniel Paehler、および Andreas Kasten に感謝したい。
この仕様が Proposed Recommendation に進むには、下記の各機能について少なくとも2つの独立した 実装が存在しなければならない。各機能は異なる製品群によって実装されてもよく、単一の製品が すべての機能を実装しなければならないという要件はない。
機能終了基準を評価する目的では、次のものを機能とみなす:
ある機能の存在または欠如によって動作を変更しないソフトウェアは、候補勧告段階を終了する目的において、 その機能を実装しているとはみなされない。
Permissions & Obligations Expression Working Group の成果物の基礎は、W3C ODRL Community Group によって作成された報告書である。 ODRL Community Group は、コンテンツ・サービスの公開、配布、および消費に関する資産利用の革新的な表現を サポートするため、一連の仕様を開発した。 ODRL Community Group の最終成果物は ODRL Version 2.1 仕様であり、これは ODRL の大幅な更新であり、 元の ODRL Version 1.1 [odrl](W3C NOTE として公開)を置き換えた。
次の文書は ODRL Community Group 報告書シリーズの一部である:
ODRL 情報モデルは、ODRL V2.1 Core Model Community Group 報告書から派生したものである。 W3C Working Group 成果物と ODRL Community Group 報告書との相違点の詳細は、付録に維持されている。 すべての新しい ODRL 実装は、Permissions & Obligations Expression Working Group の成果物を使用することが期待される。
2016年7月21日 First Public Working Draft からの変更:
2017年2月23日 Working Draft からの変更:
2017年9月26日 Candidate Recommendation からの変更:
2018年1月4日 Proposed Recommendation からの変更: