请查看 勘误表,了解自发布以来报告的任何错误或 问题
另请参见 译文。
Copyright © 2018 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
开放数字权利语言(ODRL)是一种策略表达语言,提供灵活且 可互操作的信息模型、词汇表和编码机制,用于表示关于 内容和服务使用的声明。ODRL 信息模型描述了构成 ODRL 策略语义基础的底层概念、实体和 关系。
策略用于表示对某个资产允许和禁止的操作,以及 利益相关方需要履行的义务。此外,策略可以受约束限制(例如, 时间或空间约束),也可以对许可施加职责(例如付款)。
本节描述本文档在发布时的状态。其他文档可能会 取代本文档。当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 技术报告 索引中找到,地址为 https://www.w3.org/TR/。
本文档由 权限与义务 表达工作组作为推荐标准发布。 欢迎对本文档提出评论。请将评论发送至 public-poe-comments@w3.org (订阅, 归档)。
请参见工作组的实现 报告。
本文档已由 W3C 成员、软件 开发者以及其他 W3C 团体和相关方审阅,并由主管认可为 W3C 推荐标准。 它是一份稳定文档,可用作参考材料或被其他 文档引用。W3C 在制定推荐标准中的作用是 提请人们关注该 规范并促进其广泛部署。这增强了 Web 的功能 和互操作性。
本文档由一个 依据 W3C 专利政策运作的 小组制作。 W3C 维护一份与该小组交付物相关的任何专利 披露的公开列表; 该页面还包括 披露专利的说明。如果某个人实际知晓某项专利, 且该个人认为该专利包含 必要 权利要求,则必须按照 W3C 专利政策第 6 节披露该信息。
本文档受 2018年2月1日 W3C 流程文档约束。
本节是非规范性的。
若干业务场景需要表达对资源允许和禁止的操作。 这些允许/禁止的操作通常以策略的形式表达,即 表明内容的哪些使用和再使用符合现有法规或 所有者所指定约束的表达式。策略还可以用附加信息来丰富,即 负责定义此类策略的实体是谁,以及需要遵循该策略的实体是谁, 与策略所表达的许可、禁止和职责相关联的 附加约束是什么。表达这些概念和关系的能力 对内容生产者和消费者都很重要:对内容生产者而言, 他们可以清楚地说明哪些操作被允许、哪些操作被禁止,以防止 滥用;对消费者而言,他们可以准确知道自己被允许使用和 再使用哪些资源,以避免违反任何规则、法律或所有者的约束。 本规范描述了一种表达这些策略概念的通用方法。
ODRL 信息模型定义了描述内容使用的许可、禁止和义务 声明的底层语义模型。该信息模型涵盖了为内容使用声明 提供基础模型的核心概念、实体和关系。这些机器可读的 策略可以直接链接到与其相关联的内容,目的是让消费者能够 轻松检索这些信息。
ODRL 信息模型的主要目标是提供一种标准描述模型和格式, 用于表达与一般内容相关联的许可、禁止和义务声明。这些 声明用于描述资源的使用和再使用条款。该模型应覆盖 尽可能多的许可、禁止和义务用例,同时即使在处理复杂情况时, 也要保持策略建模的简便性。
ODRL 信息模型是一个单一且一致的模型,可供所有相关方使用。 在满足一个用例时,强烈首选单一方法而非多种方法,除非有 需要兼容的现有标准,或仅使用单一方法会产生显著成本。 尽管 ODRL 信息模型是使用链接数据原则构建的,但其设计 旨在允许非基于图的实现。
除标记为非规范性的章节外,本规范中的所有编写指南、图表、示例 和注释均为非规范性的。本规范中的其他所有内容都是 规范性的。
关键词 MAY、MUST、MUST NOT、RECOMMENDED、SHOULD 和 SHOULD NOT 应按 [RFC2119] 中的描述解释。
本文档中的示例均序列化为 [json-ld]。对于包括 JSON 上下文在内的规范性序列化,请参见 ODRL 词汇表与表达式 [odrl-vocab]。
ODRL 信息模型表示与资产资源使用相关的、表达许可、禁止和职责的策略。 信息模型明确表达策略允许什么和不允许什么,以及其他相关条款、要求 和参与方。ODRL 信息模型的目标是通过允许策略作者在策略中包含 尽可能多或尽可能少的细节,从而支持灵活的策略表达。
下图展示了 ODRL 信息模型。
ODRL 信息模型包含以下类:
Policy - 一个非空的许可(通过 permission 属性)和/或禁止
(通过 prohibition 属性)和/或职责(通过 obligation 属性)组成的组。Policy 类是
Set、Offer 和 Agreement 子类的父类:
Set - Policy 的子类,支持表达通用规则。Offer - Policy 的子类,支持由 assigner
参与方提供规则。Agreement - Policy 的子类,支持从 assigner 到
assignee 参与方授予规则。 Asset - 作为规则主体的资源或资源集合(通过
抽象 relation 属性)。Asset 类是以下类的父类:
AssetCollection - Asset 的子类,用于标识资源集合。
Party - 在规则中承担角色的实体或实体集合(通过
抽象 function 属性)。Party 类是以下类的父类:
PartyCollection - Party 的子类,用于标识实体集合。
Action - 对资产执行的操作。Rule - 表示许可、
禁止和职责共同特征的抽象概念。
Permission - 对资产执行操作的能力。Permission MAY 还具有
duty 属性,
该属性表达一项约定操作,该操作 MUST 被执行(作为
获得 Permission 的前置条件)。
Prohibition - 不能对资产执行操作。Duty - 执行操作的义务。Constraint/LogicalConstraint - 细化操作和
参与方/资产集合,或适用于规则条件的布尔/逻辑表达式。ODRL 信息模型包含类之间的属性关系。大多数是显式命名的 属性,也有一些是抽象属性(具体为 relation、function、 operand 和 failure)。抽象属性是通用父属性, 设计为由具有显式语义的子属性(子类型)来表示。
例如,图 1 中的两个属性 relation 和 function 旨在表示
Rule 与 Asset 和 Party 类之间的概念性关系。
该图显示 relation 属性带有子类型 target,用于表达 Asset
是 Rule 的主要主体。function 属性带有子类型 assigner,
用于表达发布 Rule 的 Party,并带有子类型 assignee,用于表达
Rule 的接收方 Party。
ODRL 信息模型提供了策略模型组件的逻辑视图。 ODRL 信息模型的可实现视图由各种编码 序列化提供,具体在 ODRL 词汇表与表达式文档 [odrl-vocab] 中作规范性描述。 将逻辑信息模型组件映射到可实现的序列化时,可能需要根据序列化语言 支持的特性进行一些权衡和/或产生差异。
以下章节提供 ODRL 信息模型的更多详细信息。
Policy 类具有以下属性:
uid 属性值(类型为
IRI [rfc3987]),用于标识 Policy。
permission、
prohibition 或 obligation 属性值,类型为 Rule。(更多详细信息见 Permission、Prohibition 和 Obligation 章节。)
profile
属性值(类型为 IRI [rfc3987]),用于
标识此 Policy 所符合的 ODRL Profile。(更多详细信息见 ODRL
Profiles 章节。)inheritFrom
属性值(类型为 IRI [rfc3987]),用于
标识此子 Policy 继承自的父 Policy。(更多详细信息见 ODRL Inheritance 章节。) conflict 属性
值(类型为 ConflictTerm),用于表示如何处理 Policy
冲突的冲突策略偏好。(更多详细信息见 Policy Conflict Strategy 章节。)
ODRL Policy MAY 还可以声明由其所有 Rule 共享和
共用的属性。具体包括:action 属性、relation 的子属性
(如 target),以及 function 的子属性(如
assigner 和 assignee)。
有关这些共享属性的验证要求,请参见 Compact Policy 章节。
ODRL Policy 必须满足以下任一条件:
在后一种情况下,profile 属性 MUST 用于表示 ODRL Profile 的 IRI。 有关定义 ODRL Profile 的机制和一致性要求的更多详细信息,请参见 ODRL Profiles 章节。(本文档中的示例仅为说明目的使用 ODRL Profile 标识符。)
ODRL Policy MAY 被子类化,以更精确地描述 Policy 使用的上下文, 该上下文 MAY 包含 ODRL 处理器 MUST 理解的附加约束。附加 Policy 子类 MAY 可在 ODRL 通用词汇表 [odrl-vocab] 或 ODRL Profile 中记录。Policy 类 MUST 与所有 Policy 子类(Set 除外)不相交。
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 令牌。上面的示例也可以使用 Policy 类型
而不是 Set 类型(因为它们等价)。
上面的示例未使用 profile 属性,因为所有术语均由
ODRL 核心词汇表 [odrl-vocab] 定义。
Offer 子类的 ODRL Policy 表示由 assigner
Parties 提供的 Rules。Offer 通常用于向更广泛的受众提供 Policies,
但不授予任何 Rules。
Offer 子类的 ODRL Policy:
assigner 属性值(类型为
Party),用于表示同一 Rules 中的功能角色。注:有关功能角色的详细信息,请参见 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"
}]
}
上面的示例使用 profile 属性来表示所用术语由
http://example.com/odrl:profile:01 所标识的 ODRL Profile 定义。
更多详细信息请参见 ODRL Profiles 章节。
Agreement 子类的 ODRL Policy 表示
已从 assigner 授予 assignee Parties 的 Rules。Agreement
通常用于授予 Parties 之间的 Rules 条款。
Agreement 子类的 ODRL Policy:
assigner 属性值(类型为
Party),用于表示同一 Rules 中的功能角色。assignee 属性值(类型为
Party),用于表示同一 Rules 中的功能角色。注:有关功能角色的详细信息,请参见 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 可以是
任何形式的可标识资源,例如数据/信息、内容/媒体、应用、服务
或物理制品。此外,它还可用于表示执行 Policy 表达式所需的其他
Asset 类,例如与 Duty 一起使用时。Asset 由
Permission 和/或 Prohibition 引用,也由 Duty 引用。
Asset 类具有以下属性:
uid 属性值(类型为
IRI [rfc3987]),用于标识 Asset。
partOf
属性值(类型为 AssetCollection),用于标识该 Asset 所属集合中的
AssetCollection。如果 Asset 未使用 uid 属性声明标识符,则必须理解其全部
影响,例如对 ODRL Policy 的 ODRL Validator 和 Evaluator 的影响。
Asset 类具有以下子类:
AssetCollection - 一种 Asset,它是表示一组成员
资源的单个资源。这表示该集合的所有成员都将成为 Rule 的主体。AssetCollection 类具有以下属性:
source 属性
值(类型为 IRI [rfc3987]),用于引用
AssetCollection。refinement 属性值,类型为 Constraint。更多详细信息见 带有 Asset Collection
的细化属性。
由于 ODRL Policy 可以处理任何种类的 Asset,ODRL 信息模型不提供 用于描述特定媒体类型 Asset 的附加元数据。建议使用现有的 元数据标准,例如适合 Asset 类型或用途的 Dublin Core Metadata Terms。
抽象 relation 属性用于在
Action 与 Asset 之间创建显式链接,指示该 Asset 相对于链接到它的 Rule
MUST 如何被使用。
ODRL validator MUST 支持
relation 的以下子属性:
target:表示 Asset 是 Rule action
直接适用的主要主体。附加的 relation 子类型属性 MAY
可在 ODRL 通用词汇表 [odrl-vocab] 和 ODRL Profile
中定义。
示例用例:assigner Party
http//example.com/party:0001提供显示targetAssethttp://example.com/asset:3333。
{
"@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的index操作 Permission。 该目标 Asset 也声明为AssetCollection,以表示该资源是资源集合。一个 附加 Asset 关系summary表示索引输出应存储到其中的 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。其目的是显式表达 Asset 与
AssetCollection 之间的成员关系。这使与 AssetCollection 相关的 Rule 能够了解该
Rule 可能适用于哪些单独的 Asset。此外,Asset/AssetCollection 成员
关系还可能检测 Rule 中的冲突。
示例用例:下面的片段展示了一些描述文档的 Dublin Core 元数据。
odrl:partOf属性声明 Assethttp://example.com/asset:111.doc是http://example.com/archive1011AssetCollection 的成员,后者用于上面示例中的 Policy。这意味着http://example.com/asset:111.doc是该 Policy 中的目标 Asset 之一,并且可以被索引。
{
"@type": "dc:Document",
"@id": "http://example.com/asset:111.doc",
"dc:title": "Annual Report",
...
"odrl:partOf": "http://example.com/archive1011",
...
}
ODRL Policy 类 MAY 也可由
hasPolicy 属性引用。这支持 ODRL Policy Rule 作为外部
元数据表达式(用于标识 Asset)的对象。当 hasPolicy 已在
元数据表达式与 ODRL Policy 之间声明时,被标识的 Asset MUST 被推断为该
Policy 所有 Rule 的 target Asset。如果 Policy 中有多个 Rule,
则推断出的 Asset 将是该 Policy 中每一个 Rule 的目标 Asset。
示例用例:下面的片段展示了一些描述电影 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 的目标 Asset。 如果此 Policy 中还有其他 Rule,则同一 Asset 将是每个 Rule 的目标 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 中承担功能角色的实体或实体集合,例如 个人、人员集合、组织或代理。代理是承担 主动角色或产生特定效果的人或事物。Party 执行(或不执行)Action,或在 Duty 中具有某种功能(即通过将 Party 与其在 Rule 中扮演的 function 相关联,将该 Party 分配给 Rule)。
Party 类具有以下属性:
uid 属性值(类型为
IRI [rfc3987]),用于标识 Party。
partOf
属性值(类型为 PartyCollection),用于标识该 Party 所属的
PartyCollection。如果 Party 未使用 uid 属性声明标识符,则必须理解其全部
影响,例如对 ODRL Policy 的 ODRL Validator 和 Evaluator 的影响。
Party 类具有以下子类:
PartyCollection - 一种 Party,它是表示一组成员
实体的单个实体。这表示该集合的所有成员都将在
Rule 中承担相同的功能角色。PartyCollection 类具有以下属性:
source 属性
值(类型为 IRI [rfc3987]),用于引用
PartyCollection。refinement 属性值,类型为 Constraint。更多详细信息见 带有 Party Collection
的细化属性。
ODRL 信息模型不为 Party 类提供附加元数据。建议使用 现有的元数据标准,例如 W3C vCard Ontology [vcard-rdf] 或 FOAF Vocabulary [foaf]。
function 属性用于将 Rule 链接到 Party,指示该 Party
相对于链接到它的 Rule 所承担的功能。function
属性本身是抽象的;子属性表示 Party 与 Rule 之间
功能角色的显式语义。
ODRL validator MUST 支持
function 的以下子属性:
assigner:表示发布 Rule 的 Party。例如,授予
Permission 或要求履行约定 Duty 的 Party。assignee:表示 Rule 的接收方 Party。例如,
被授予 Permission 或被要求履行约定 Duty 的 Party。附加的 function 子类型属性 MAY
可在 ODRL 通用词汇表 [odrl-vocab] 和 ODRL Profile
中定义。
示例用例:该 Policy 展示了具有两个 Party 的 Agreement,其功能角色为
assigner和assignee。assigner授予assignee对目标资产执行 play 操作。
{
"@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 展示了具有两个 Party 的 Agreement,其功能角色为
assigner和assignee。assigner授予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。其目的是显式表达 Party 与
PartyCollection 之间的成员关系。这使与 PartyCollection 相关的 Rule 能够了解
该 Rule 可能适用于哪些单独的 Party。此外,Party/PartyCollection 成员
关系还可能检测 Rule 中的冲突。
示例用例:下面的片段展示了一些描述 Party 的 vCard 元数据。
odrl:partOf属性声明 Partyhttp://example.com/person/murphy是http://example.com/team/APartyCollection 的成员,后者用于上面示例中的 Policy。这意味着http://example.com/person/murphy是 assignee,并且 可以使用 Policy 中的目标资产。
{
"@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 类 MAY 也可由
assignerOf 和 assigneeOf 属性引用。这支持 ODRL Policy Rule
作为外部元数据表达式(用于标识 Party)的对象。当
assignerOf 已在元数据表达式与 ODRL Policy 之间声明时,
被标识的 Party MUST 被推断为承担该
Policy 所有 Rule 的
assigner 功能角色。当 assigneeOf
已在元数据表达式与 ODRL Policy 之间声明时,被标识的 Party MUST 被推断为承担
assignee
功能角色。
如果 Policy 中有多个 Rule,则推断出的 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 中还有其他 Rule,则同一 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 被允许在目标 Asset 上执行。当与 Prohibition 相关时,Action 表示被禁止在 目标 Asset 上执行的操作。当与 Duty 相关时,Action 表示 Party 有义务履行的约定操作
ODRL 信息模型定义了以下顶层 Actions:
use - 涉及各方一般使用的 actions。 transfer - 涉及向第三方转让所有权的 actions。Action 类具有以下属性:
refinement
属性值(类型为 Constraint),用于细化 Action 操作的语义。更多详细信息见 Constraints 章节。includedIn 属性值(类型为 Action),以传递方式断言此 Action
被包含在其操作语义中。
implies
属性值(类型为 Action),用于断言此 Action 不被禁止以启用其操作
语义。
Action 术语 MUST 使用 includedIn
属性定义,该属性指向一个包含性 Action,并以 use 或 transfer 作为
通过传递方式形成的顶层父术语。
includedIn 属性的目的是显式断言所引用的另一个 Action 实例的
语义包含(包括)此 Action 实例的语义。
includedIn 属性是传递性的,因此 Actions 形成祖先
关系。
includedIn 属性的含义是,对某个
包含性 Action 的 Permission 或 Prohibition 会被所有具有 includedIn 关系的
Actions 继承。
例如,如果 play Action 被定义为通过 includedIn 属于 use,
那么如果在同一 Policy 中允许 play 且禁止 use
——并且两个 Actions 都适用于同一目标 Asset——则由于
两者之间断言的这种关系,Policy 中存在冲突。(更多
详细信息见 Policy Conflict Strategy。)
implies 属性断言某个 Action 实例蕴含另一个
Action 实例未被禁止。implies 属性可以在两个
Action 实例之间建立这样的断言,前提是它们没有 includedIn 关系。
例如,如果 share Action 显式蕴含 distribute Action,那么
如果在同一 Policy 中允许 share 且禁止 distribute
——并且两个 Actions 都适用于同一目标 Asset——这将导致 Policy 中出现冲突。
如果被蕴含的另一个 action 未被禁止,则不会导致冲突。
(更多详细信息见 Policy Conflict Strategy。)
有关 includedIn 和
implies 属性的使用详情,请参见 ODRL Profiles。
ODRL 通用词汇表 [odrl-vocab] 定义了 一组标准的通用 Actions,ODRL Profiles MAY 采用这些 Actions。
示例用例:该 Policy 表达了针对目标 Asset
http://example.com/music:1012的 Offer,其中 Action 是play该 Asset (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 作为其操作数。当多个 Constraints 适用于同一 Rule、 Action、Party/Asset Collection 时,它们被解释为合取,并且全部 MUST 得到满足。
Constraint 和 Logical Constraint 类与 Party Collection、Asset Collection、Action 和 Rule 类形成语义和条件关系。属性关系汇总在 下图中。
Constraint 类用于通过一个关系运算符比较两个操作数(它们不是 Constraints)的
表达式。如果比较返回匹配,则该 Constraint
得到满足,否则它未得到满足。Constraint 类
表述一个比较表达式,例如使用次数(leftOperand)
必须小于(operator)数字 10(rightOperand)。
Constraint 类具有以下属性:
uid 属性
值(类型为 IRI [rfc3987]),用于标识
Constraint。leftOperand
属性值,类型为 LeftOperand。operator 属性
值,类型为 Operator。dataType
属性值,用于 rightOperand/Reference 的数据类型。unit
属性值(类型为 IRI [rfc3987]),用于
设置 rightOperand/Reference 值所使用的单位。status
属性值,用于由 leftOperand action 生成的值,或用于与
leftOperand 相关、作为比较引用而设置的值。leftOperand 属性值被定义为 LeftOperand 类的实例。
leftOperand 实例 MUST 被清楚地
定义,以指示 Constraint 的语义,并且 MAY 声明如何获取或生成用于比较的值。
ODRL 通用词汇表 [odrl-vocab]
定义了 ODRL
Profiles MAY 使用的 leftOperand。
operator 属性值被定义为 Operator 类的实例。
operator 实例标识关系操作,例如左操作数和右操作数之间的
“大于”或“等于”。
rightOperand 属性值被定义为 RightOperand 类的实例,或
IRI,或 Literal 值。rightOperand 是 Constraint 中要与
leftOperand 比较的值。rightOperandReference 表示一个 IRI,
该 IRI MUST 先被解引用,以获得
rightOperand 的实际值。rightOperandReference 用于
rightOperand 的值 MUST 先通过
解引用 IRI 获取的情况。rightOperand 或
rightOperandReference 中只能有一个 MUST 出现在
Constraint 中。
rightOperand 表示一个值,而 rightOperandReference
表示必须解引用以获得该值的 IRI。如果 rightOperand
是 http://example.com/c100,则它被解释为表达式中要比较的
值。如果 rightOperandReference 是相同的值
http://example.com/c100,则必须先解引用该 IRI,并且返回的数据
必须被解释为表达式中要比较的值。
dataType 指示 rightOperand/Reference 的类型,例如
xsd:decimal 或 xsd:datetime,而 unit 指示
rightOperand/Reference 的单位
值,例如 “EU currency”。
status 提供由 leftOperand action 生成的值,该值
MUST 用于比较表达式。例如,
count constraint 可以具有值为 10 的 rightOperand,
以及值为 5 的
status。这意味着该 action 已经被执行了 5 次,并且
比较必须将当前 action 与 status 值进行比较。
Logical Constraint 类用于通过一个逻辑运算符比较两个或多个 现有 Constraints 作为操作数的表达式。如果比较返回逻辑匹配,则 Logical Constraint 得到满足,否则它未得到满足。 例如,三个 Constraints 可以在逻辑上被 and 连接,表示三者 都必须为真,Logical Constraint 才能得到满足。
Logical Constraint 类具有以下属性:
uid
属性值(类型为 IRI [rfc3987]),用于
标识 Logical Constraint。operand 子属性,用于表示所比较的
现有 constraints 的逻辑关系;其值是现有 Constraint 实例的列表。
ODRL evaluator MUST 支持
operand 的以下子属性:
or - 至少一个 Constraints MUST
得到满足xone - 只有一个且不超过一个 Constraints MUST 得到满足and - 所有 Constraints MUST
得到满足andSequence - 所有 Constraints——按顺序——MUST 得到满足
附加的 operand 子属性 MAY 可由
ODRL Profiles 定义。
Logical Constraints 的 ODRL 验证要求包括:
operand MUST 只能是以下
子属性:or、xone、and、andSequence。
operand 的附加子属性 MAY 只能由 ODRL Profiles
定义,专用于 Logical
Constraints。
Constraint 实例 MUST 被求值,其结果
用于确定逻辑关系是否得到满足(基于
operand 子属性的语义)。
当使用需要按顺序求值的逻辑 operand(例如
andSequence)时,序列化 MUST 保留
列表成员的顺序。在 JSON-LD 中,@list 关键词 MUST 用于表示有序集合。
Rule(例如 Permission、Prohibition 或 Duty)MAY 包含
constraint 属性,用于表示 Rule 上的条件。
为满足此条件,constraint 属性所引用的所有
Constraints/Logical Constraints MUST
得到满足。
示例用例:在下面的 Policy Offer 示例中,permission 允许目标 asset 被
distribute,并包含一个dateTime条件的 constraint, 即 permission 只能在 2018-01-01 之前执行。
{
"@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 MAY 包含 refinement 属性,用于
表示直接缩窄 Action 操作语义的 Constraint/Logical Constraint。
为满足 Action 更窄语义的这一条件,refinement 属性
引用的所有 Constraints/Logical Constraints MUST
用于生成已满足状态。
注:对 Action 应用 refinements 的结果 SHOULD NOT 导致空操作。
示例用例:在下面的 Policy Offer 示例中,permission 允许目标 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 展示了对目标 asset 进行 reproduce 的 permission, 或者通过在线媒体,或者通过印刷媒体,但不能二者同时。 这表示为一个 Logical Constraint(带有
xoneoperand),引用了两个 在别处声明的现有 Constraints。
{
"@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" }
}
将 refinement 属性与 Action 一起使用时,rdf:value
属性用于表示 Action 的实例,该实例 MUST 使用其命名空间标识符(例如
odrl),并断言它是
一个 @id 键。此外,Constraint 实例的标识符(用于逻辑
constraint 操作数)必须将它们断言为 @id 键。
AssetCollection MAY 包含
refinement 属性,用于表示识别完整集合中
单个 Asset(s) 的细化上下文。refinement 属性适用于
集合中每个成员的特征(而不是整个资源)。
为满足识别完整
AssetCollection 中单个 Asset(s) 的这一条件,refinement
属性引用的所有 Constraints/Logical Constraints MUST
得到满足。
注:对 AssetCollection 应用 refinements 的结果 SHOULD NOT 导致空集合。
请注意,使用 refinement 属性时,uid 属性 MUST
NOT 用于标识
AssetCollection。相反,source 属性 MUST
用于引用 AssetCollection。
示例用例:该 Policy 定义了一个目标 source
http://example.com/media-catalogue,它是多媒体视频的 AssetCollection。 该 target 还具有一个 refinement,用于指定 AssetCollection 成员的特征。在此情况下,目标 Assets 子集将是那些播放 时长少于 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 MAY 包含
refinement 属性,用于表示识别完整集合中
单个 Party(ies) 的细化上下文。refinement 属性适用于
集合中每个成员的特征(而不是整个资源)。
为满足识别完整
PartyCollection 中单个 Party(ies) 的这一条件,refinement
属性引用的所有 Constraints/Logical Constraints MUST
得到满足。
注:对 PartyCollection 应用 refinements 的结果 SHOULD NOT 导致空集合。
请注意,使用 refinement 属性时,uid 属性 MUST
NOT 用于标识
PartyCollection。相反,source 属性 MUST
用于引用 PartyCollection。
示例用例:目标 Asset
http://example.com/myPhotos:BdayParty是 由照片的 assignerhttp://example.com/user44发布到社交网络站点的一组照片。assignee source 是 PartyCollectionhttp://example.com/user44/friends,表示 assigner 的所有朋友。 assignee 还具有一个 refinement,表示只有集合中foaf:age超过 18 的成员才会被分配ex:viewpermission(由 Profile 定义)。
{
"@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 类表示 这三个类的共同特征。Rule 类 MUST 与所有其他 Rule 子类不相交。
Rule 类具有以下属性:
action 属性值,
类型为 Action。relation
子属性值,类型为 Asset。function 子属性值,类型为 Party。
failure
子属性值,类型为 Rule。constraint
属性值,类型为 Constraint/LogicalConstraint。uid 属性值
(类型为 IRI [rfc3987]),用于标识 Rule,
因而它 MAY 可被其他 Rules 引用。注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule Composition 和 Compact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。
必须使用抽象 relation、relation
和 failure 属性的显式子属性,具体选择取决于所讨论的 Rule
子类。
Rules 的三个类还与 Duty Rule 形成重要关系。属性 关系汇总在下图中。
Permission 允许一个 action(在所有 refinements 得到满足时) 在所有 constraints 得到满足且所有 duties 得到履行的情况下,在 Asset 上执行。
Permission 类是 Rule 类的子类,并从 Rule 类继承所有属性,且具有 以下附加属性语义:
target 属性
值,类型为 Asset。(其他 relation 子属性 MAY 可被使用。)
assigner
和/或 assignee 属性值(类型为 Party),用于功能角色。(其他
function 子属性 MAY 可被使用。)
duty
属性值,类型为 Duty。注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule Composition 和 Compact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。
duty 属性表达一项约定的义务,该义务 MUST 被履行。也就是说,duty 属性断言 Permission 与 Duty 之间的前置条件。更多详细信息见 带有 Permission 的 Duty 章节。
示例用例:来自 assigner
http://example.com/org:xyz的 PolicyOffer表达了对目标 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 不允许一个 action(在所有 refinements 得到满足时) 在所有 constraints 得到满足的情况下,在 Asset 上执行。如果 Prohibition 已因该 action 被执行而受到违反,则所有 remedies MUST 被履行,以将 Prohibition 的状态设为未违反。
Prohibition 类是 Rule 类的子类,并从 Rule 类继承所有属性,且 具有以下附加属性语义:
target 属性
值,类型为 Asset。(其他 relation 子属性 MAY 可被使用。)
assigner
和/或 assignee 属性值(类型为 Party),用于功能角色。(其他
function 子属性 MAY 可被使用。)
remedy 属性值,类型为 Duty。
注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule Composition 和 Compact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。
remedy 属性(failure 属性的子属性)
表达一项约定的义务,该义务在 Prohibition 已
受到违反的情况下 MUST 被履行。
也就是说,remedy 属性断言一个 Duty,如果 Prohibition 的 action 被执行,
则该 Duty 必须被履行。更多详细信息见 带有 Prohibition 的 Remedy 章节。
示例用例:目标 Asset
http://example.com/photoAlbum:55的 assigner 表达了一个同时包含 Permission 和 Prohibition 的 Agreement Policy。assigner Partyhttp://example.com/MyPix:55将 Permissiondisplay分配给 assignee Partyhttp://example.com/assignee:55,同时给出一个禁止archive目标 Asset 的 Prohibition。此外,如果 Policy 中存在任何冲突 (例如 Permission 与 Prohibition 之间),则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 是执行某个 action 的义务,并且所有
refinements 均得到满足。如果所有 constraints 均
得到满足,且其 action(在所有 refinements 得到满足时)
已被执行,则 Duty 得到履行。如果其 action 尚未被执行,
则所有 consequence 也必须被履行,才能履行
Duty。也就是说,consequences 是附加 Duties,也必须被履行。(注:只有被
duty 或 obligation 属性引用的 Duties 才可以使用 consequence 属性。)
Duty 类是 Rule 类的子类,并从 Rule 类继承所有属性,且具有 以下附加属性语义:
target 属性
值(类型为 Asset),用于表示 Duty
直接适用的主要主体 Asset。(其他 relation 子属性 MAY
可被使用。)assigner 和/或
assignee 属性值(类型为 Party),用于功能角色。(其他
function 子属性 MAY 可被使用。)
consequence
属性值,类型仅为 Duty。注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule Composition 和 Compact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。
Duty 类还具有以下附加要求:
consequence 属性(failure 属性的子属性)
用于表达未履行约定的 Policy obligation 或 Permission 的 duty 所带来的后果。
如果其中任一项未被履行,则这会导致 consequence
Duties 也成为新的要求,这意味着原始 obligation 或 duty,以及
consequence Duties MUST 都必须
得到履行。
在某些情况下,为了履行触发 consequence 的原始 duty/obligation, 如果原始 duty/obligation 上的某些 constraints 和/或 refinements 已不再能够 得到满足,则 MAY 需要放宽它们。
例如,如果提供数据的义务未能在固定日期前履行,则 consequence 是还需要支付 100 美元罚款。如果日期已过,则原始 duty 在技术上无法履行(因为日期 constraint 无法 得到满足)。
在这种情况下,ODRL 实现 SHOULD 提供 机制,以允许原始 duty/obligation 在触发 consequence 后仍可满足。
请注意,consequence 属性 MUST NOT 用于 已经是 Permission duty 或 Policy obligation 的 consequence 的 Duty。
Policy MAY 包含履行 Duty 的 obligation。该 obligation 在所有 constraints 均得到满足,且其 action(在所有 refinements 得到满足时)已被执行的情况下 得到履行。
示例用例:下面的 Agreement 包含一项 obligation,要求 assignee
http://example.com/person:44向 assignerhttp://example.com/org:43补偿 EU500.00 的付款金额。
{
"@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 MAY 还可以包含未履行 obligation 的 consequence。
示例用例:下面的 Agreement 包含一项 obligation,要求 assignee
http://example.com/person:44向 assignerhttp://example.com/org:43删除目标 Asset。如果 obligation 未被履行, 则 consequence 是 assigner MUST 现在还要向指定慈善机构 补偿 EU10.00 的付款(同时还要履行 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 MAY 被指定为一个前置条件,该条件要求 通过从 Permission 到 Duty 的 duty 属性关系来履行。
如果一个 Permission 有多个 Duties,则所有 Duties MUST
都必须约定为得到履行。如果多个 Permissions 通过同一 Duty 的
uid 属性引用同一 Duty,则该 Duty 只需履行一次。
如果 Duty 中未声明 function 子属性,则这些
功能角色将与引用它的 Permission 中声明的功能角色相同。
示例用例:Party
http://example.com/assigner:sony发出一个 Offer,以播放 目标 assethttp://example.com/music/1999.mp3。permission 包含一个 duty, 其compensateaction 具有payAmount为 $EU5.00 的 refinement。该 duty 还具有一个 constraint,即event小于policyUsage,这意味着 duty rule 必须先被执行(即补偿),然后 permission rule 才能被执行。
{
"@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 MAY 包含
一个因未履行该 duty 或 obligation 而产生的 consequence Duty。
在这种情况下,所有 consequence Duties MUST 也必须
得到履行,以将 Permission/Obligation Duty 的最终状态设为
已履行。
consequence 属性是 failure
属性的子属性。有关 consequence 属性的更多信息,请参见 Duty Class 章节。
示例用例:下面的 Agreement 位于 assigner
http://example.com/org:99与 assigneehttp://example.com/person:88之间,允许 assignee 在前置条件下分发 Assethttp://example.com/data:77,该前置条件是他们将该 asset 归属给 Partyhttp://australia.gov.au/。如果 assignee 未履行 duty,或 在未履行 duty 的情况下分发该 asset,则 consequence 是他们还将 被http://example.com/dept:100跟踪。
{
"@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 属性表达一项约定的 Duty,在 Prohibition 因被执行而
受到违反的情况下,该 Duty MUST 被履行。如果 Prohibition
action 被执行,则所有
remedy Duties MUST 被履行,以处理
Prohibition 的违反并将其设为未违反状态。
remedy 属性是 failure 属性的子属性。
remedy MUST NOT 引用包含 consequence Duty 的 Duty。
示例用例:下面的 Agreement 位于 assigner
http://example.com/person:88与 assigneehttp://example.com/org:99之间,禁止 assignee 索引 Assethttp://example.com/data:77。如果 assignee 确实索引了目标 asset, 则 remedy 是他们 MUST 匿名化 目标 assethttp://example.com/data:77。
{
"@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 会与一个 Asset、一个或多个 Party 功能角色、一个 Action(并可能与 Constraints 和/或 Duties)相关
Policy Rules Composition 允许每个 Rule 扩展 ODRL 信息模型的基数要求,以支持一个 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 中包含两个目标 Assets 和两个 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" ]
}]
}
然后,上面的示例可以被约简为四个原子 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 MAY 可以保存声明在 Policy 层级的属性,这些属性由其所有 Rules 共享并通用。这仅旨在作为一种 快捷方法,以支持更紧凑的序列化。这些共享 属性 MUST NOT 被解释为 Policy 层级 属性(例如 Policy 类章节中定义的那些属性)。
MAY 被共享的属性(如下图所示) 包括:
action 属性。relation 的一个或多个子属性(例如 target)。
function 的一个或多个子属性(例如 assigner 和
assignee)。
在 Policy 中展开快捷形式的 ODRL 验证要求是:
此外,遵循 ODRL 验证要求,在 Policy 中创建原子 Rules (定义于上一节)。
RECOMMENDED 在处理一致性时,将紧凑的 ODRL Policies 展开为原子 Policies。
下面的示例展示了应用于 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 的个人、代理或组织。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 属性,则处理器 MUST 认为第一个
Policy 无效,并且 MUST 获取并处理所标识的 Policy。示例用例:下面的示例展示了若干元数据属性,用于表示谁创建了该 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 可以继承一个或多个(父)
Policies 的所有原子 Rules。
inheritFrom 属性 MUST 用于从父 Policy
继承的子 Policy 中,并且 MAY 包含
多个父 Policies 的标识符。
使用继承时适用以下规则:
status 信息。
也就是说,如果父 Policy 具有带值的 status 属性,则这些
值将被置空。示例用例:考虑下面的(父)Policy
http://example.com/policy:default。 它包含一个(Policy 层级的)assigner,以及一个审阅目标资产策略文档的 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 展示了
inheritFrom 属性指向父 Policy
http://example.com/policy:default(见上文)。该子 Policy 展示了目标 Asset、
actions(用于显示该 Asset)以及 Agreement 的 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 中,并带有原始子(Policy 层级) assignee。
{
"@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 属性 SHOULD 采用以下
Conflict Strategy Preference 值之一(ConflictTerm 类的实例):
perm:Permissions MUST 覆盖
Prohibitionsprohibit:Prohibitions MUST 覆盖
Permissionsinvalid:如果检测到任何冲突,整个 Policy MUST
无效如果未显式设置 conflict 属性,则将使用默认值
invalid。
附加的 conflict 属性值 MAY 由
ODRL Profiles 定义。
Conflict Strategy 要求包括:
conflict 属性为 perm,则任何冲突的
Permission Rule MUST 覆盖 Prohibition Rule。conflict 属性为 prohibit,则任何冲突的
Prohibition Rule MUST 覆盖 Permission Rule。conflict 属性为 invalid,则任何冲突的
Rules MUST 使整个 Policy 无效。conflict 属性值(例如在 Policy 合并或
继承之后),并且存在冲突的 Rules,则整个 Policy MUST 无效。示例用例:两个 Policies 关联到同一目标 Asset
http://example.com/asset:1212。第一个 Policyhttp://example.com/policy:0001允许use该 Asset。第二个 Policyhttp://example.com/policy:0002允许显示该 Asset,但禁止conflict属性设为perm,显式声明如何处理冲突。因此 Permissions 将始终 覆盖任何 Prohibitions。在此用例中,由于useAction 的特化,可能会存在冲突。然而,perm冲突 策略意味着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"
}]
}
在上述用例中,如果第二个 Policy 的 conflict 值为 prohibit,那么
结果将是直接矛盾,且结果将是一个无效的 Policy。
ODRL 信息模型作为表达策略的核心框架和词汇表。ODRL 核心 词汇表 [odrl-vocab] 阐明了这一组 词汇术语。ODRL 策略可以使用 ODRL 核心词汇表来表达,这表示 最低限度支持的策略表达。
ODRL Profile MUST 被定义,以提供可在需要附加语义的 ODRL 策略中使用的词汇术语(其范围见 ODRL Profile 机制章节)。 ODRL Profile 通过规定它们要求在 ODRL 策略表达式中支持的词汇术语, 明确服务于社区需求。这些术语可以显式定义, 也可以从 ODRL 通用词汇表中采用。
ODRL 通用词汇表 [odrl-vocab] 提供了一系列通用的 common actions,用于 Permissions、Prohibition 和 Duties,以及 Policy 子类、Constraint left operands 和 operators、Asset relations 以及 Party functions。
如果 ODRL Policy 符合某个 ODRL Profile,则 profile 属性 MUST
被指定,以表示 ODRL
Profile 的标识符(IRI)。MAY 使用多个标识符来表示某个
ODRL Policy 符合多个 ODRL Profiles。
当在 ODRL Policy 中使用一个或多个 ODRL Profile(s) 时,ODRL Processing 系统 MUST 理解所标识的 ODRL Profile(s) 的语义。如果 ODRL Processing 系统不能识别 ODRL Profile 标识符,则它 MUST 停止处理该 policy。
要创建 ODRL Profile,需要以下列方式定义对 ODRL 核心词汇表类、属性和 实例的直接扩展:
| 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 MAY 被定义为 includedIn 到任何 现有 Action。 如果新 Action 与另一个新的或现有的 Action 形成依赖关系,则用 implies 属性定义这两个 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,则以下标识符 MAY 可用于 Core
Profile:
http://www.w3.org/ns/odrl/2/core
本节是非规范性的。
ODRL 信息模型并不直接表达敏感个人信息,例如包含与 Parties 相关的此类数据的 Assets 是否存在的身份信息。然而,ODRL 词汇表(例如 ODRL 通用词汇表 [odrl-vocab] 和 ODRL Profiles)可能会定义与个人信息相关的术语。这些规范应告知 生成或使用此类 ODRL 表达式的实现采取措施,向所有相关 用户说明该 policy 的使用方式、该 policy 与之共享的任何其他 party 的身份, 以及该 policy 与其他 parties 共享的原因。
POE 工作组感谢 ODRL 社区小组以及早期的 ODRL 倡议所作的贡献。特别是 编辑们要感谢 Susanne Guth、Daniel Paehler 和 Andreas Kasten 过去在编辑方面的 贡献。
为了使本规范推进到提议推荐标准,以下描述的每项特性必须至少有两个独立 实现。每项特性可以由不同的产品集合实现,并且不要求任何单个产品实现每项特性。
特性为评估退出准则,以下内容被视为特性:
在存在或缺少某项给定特性时不会改变其行为的软件,不被认为是为了退出候选推荐标准阶段 而实现了该特性。
权限与义务表达工作组交付物的基础是由 W3C ODRL 社区小组创建的报告。ODRL 社区小组已经 开发了一系列规范,以支持针对内容服务的发布、 分发和消费来创新地表达资产使用。 ODRL 社区小组的最终输出是 ODRL Version 2.1 规范,它是对 ODRL 的一次重大 更新,并取代了原始的 ODRL Version 1.1 [odrl](作为 W3C NOTE 发布)。
以下文档属于 ODRL 社区小组报告系列:
ODRL 信息模型源自 ODRL V2.1 核心模型社区小组报告。W3C 工作组交付物与 ODRL 社区小组报告之间差异的详细信息维护在 附录中。所有新的 ODRL 实现都应使用权限与义务表达工作组的交付物。
相对 2016年7月21日首次公开工作草案 的变更:
相对 2017年2月23日工作草案 的变更:
相对 2017年9月26日候选推荐标准 的变更:
相对 2018年1月04日提议推荐标准 的变更: