ODRL 信息模型 2.2

W3C 推荐标准

此版本:
https://www.w3.org/TR/2018/REC-odrl-model-20180215/
最新发布版本:
https://www.w3.org/TR/odrl-model/
最新编辑草案:
https://w3c.github.io/poe/model/
实现报告:
https://w3c.github.io/poe/test/implementors
上一版本:
https://www.w3.org/TR/2018/PR-odrl-model-20180104/
编辑:
Renato Iannella, Monegraph,
Serena Villata, INRIA,
问题列表:
GitHub 仓库

请查看 勘误表,了解自发布以来报告的任何错误或 问题

另请参见 译文


摘要

开放数字权利语言(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 流程文档约束。

1. 引言

本节是非规范性的。

若干业务场景需要表达对资源允许和禁止的操作。 这些允许/禁止的操作通常以策略的形式表达,即 表明内容的哪些使用和再使用符合现有法规或 所有者所指定约束的表达式。策略还可以用附加信息来丰富,即 负责定义此类策略的实体是谁,以及需要遵循该策略的实体是谁, 与策略所表达的许可、禁止和职责相关联的 附加约束是什么。表达这些概念和关系的能力 对内容生产者和消费者都很重要:对内容生产者而言, 他们可以清楚地说明哪些操作被允许、哪些操作被禁止,以防止 滥用;对消费者而言,他们可以准确知道自己被允许使用和 再使用哪些资源,以避免违反任何规则、法律或所有者的约束。 本规范描述了一种表达这些策略概念的通用方法。

ODRL 信息模型定义了描述内容使用的许可、禁止和义务 声明的底层语义模型。该信息模型涵盖了为内容使用声明 提供基础模型的核心概念、实体和关系。这些机器可读的 策略可以直接链接到与其相关联的内容,目的是让消费者能够 轻松检索这些信息。

1.1 模型的目标

ODRL 信息模型的主要目标是提供一种标准描述模型和格式, 用于表达与一般内容相关联的许可、禁止和义务声明。这些 声明用于描述资源的使用和再使用条款。该模型应覆盖 尽可能多的许可、禁止和义务用例,同时即使在处理复杂情况时, 也要保持策略建模的简便性。

ODRL 信息模型是一个单一且一致的模型,可供所有相关方使用。 在满足一个用例时,强烈首选单一方法而非多种方法,除非有 需要兼容的现有标准,或仅使用单一方法会产生显著成本。 尽管 ODRL 信息模型是使用链接数据原则构建的,但其设计 旨在允许非基于图的实现。

1.2 一致性

除标记为非规范性的章节外,本规范中的所有编写指南、图表、示例 和注释均为非规范性的。本规范中的其他所有内容都是 规范性的。

关键词 MAYMUSTMUST NOTRECOMMENDEDSHOULDSHOULD NOT 应按 [RFC2119] 中的描述解释。

本文档中的示例均序列化为 [json-ld]。对于包括 JSON 上下文在内的规范性序列化,请参见 ODRL 词汇表与表达式 [odrl-vocab]。

1.3 术语

策略
一个或多个规则的组
规则
表示许可、禁止和职责共同特征的抽象概念。
操作
对资产执行的操作
许可
对资产执行操作的能力
禁止
不能对资产执行操作
职责
执行约定操作的义务。
资产
作为规则主体的资源或资源集合
参与方
在规则中承担角色的实体或实体集合
约束
细化操作和参与方/资产集合,或适用于规则条件的布尔/逻辑表达式。
ODRL 验证器
检查 ODRL 策略表达式一致性的系统,包括属性的基数、 属性是否与 ODRL 信息模型所定义的值类型相关,以及 信息模型的验证要求。
ODRL 求值器
确定 ODRL 策略表达式中的规则是否已满足其预期 操作执行的系统。
ODRL 核心词汇表
由 ODRL 信息模型表示的术语集合。
ODRL 配置文件
社区或行业特定的词汇表,用新术语扩展 ODRL 核心词汇表, 以表达策略
ODRL 通用词汇表
一组可由 ODRL 配置文件再使用的通用术语。

2. ODRL 信息模型

ODRL 信息模型表示与资产资源使用相关的、表达许可、禁止和职责的策略。 信息模型明确表达策略允许什么和不允许什么,以及其他相关条款、要求 和参与方。ODRL 信息模型的目标是通过允许策略作者在策略中包含 尽可能多或尽可能少的细节,从而支持灵活的策略表达。

下图展示了 ODRL 信息模型。

ODRL 信息模型
1 ODRL 信息模型(也 提供 SVG 格式

ODRL 信息模型包含以下类:

ODRL 信息模型包含类之间的属性关系。大多数是显式命名的 属性,也有一些是抽象属性(具体为 relationfunctionoperandfailure)。抽象属性是通用父属性, 设计为由具有显式语义的子属性(子类型)来表示。

例如,图 1 中的两个属性 relationfunction 旨在表示 Rule 与 Asset 和 Party 类之间的概念性关系。 该图显示 relation 属性带有子类型 target,用于表达 Asset 是 Rule 的主要主体。function 属性带有子类型 assigner, 用于表达发布 Rule 的 Party,并带有子类型 assignee,用于表达 Rule 的接收方 Party。

ODRL 信息模型提供了策略模型组件的逻辑视图。 ODRL 信息模型的可实现视图由各种编码 序列化提供,具体在 ODRL 词汇表与表达式文档 [odrl-vocab] 中作规范性描述。 将逻辑信息模型组件映射到可实现的序列化时,可能需要根据序列化语言 支持的特性进行一些权衡和/或产生差异。

以下章节提供 ODRL 信息模型的更多详细信息。

2.1 Policy 类

Policy 类具有以下属性:

ODRL Policy MAY 还可以声明由其所有 Rule 共享和 共用的属性。具体包括:action 属性、relation 的子属性 (如 target),以及 function 的子属性(如 assignerassignee)。 有关这些共享属性的验证要求,请参见 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 除外)不相交。

2.1.1 Set 类

Set 子类的 ODRL Policy 表示 Rules 的任意组合。Set Policy 子类也是 Policy 的默认子类(如果未指定)。

示例用例:下面的 Set Policy 展示了对目标 Asset http//example.com/asset:9898.movie 执行 use 的 Permission。

示例 1
{
    "@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] 定义。

2.1.2 Offer 类

Offer 子类的 ODRL Policy 表示由 assigner Parties 提供的 Rules。Offer 通常用于向更广泛的受众提供 Policies, 但不授予任何 Rules。

Offer 子类的 ODRL Policy:

  • MUST 具有一个 assigner 属性值(类型为 Party),用于表示同一 Rules 中的功能角色。

注:有关功能角色的详细信息,请参见 Function Property 章节。

注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule CompositionCompact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。

示例用例:下面的 Offer Policy(基于前一个示例)展示了 从 assigner Party http://example.com/party:org:abc 对 目标 Asset http//example.com/asset:9898.movie 执行 play 的 Permission。

示例 2
{
    "@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 章节。

2.1.3 Agreement 类

Agreement 子类的 ODRL Policy 表示 已从 assigner 授予 assignee Parties 的 Rules。Agreement 通常用于授予 Parties 之间的 Rules 条款。

Agreement 子类的 ODRL Policy:

  • MUST 具有一个 assigner 属性值(类型为 Party),用于表示同一 Rules 中的功能角色。
  • MUST 具有一个 assignee 属性值(类型为 Party),用于表示同一 Rules 中的功能角色。

注:有关功能角色的详细信息,请参见 Function Property 章节。

注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule CompositionCompact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。

示例用例:下面的 Agreement Policy(基于前一个示例)展示了 从 assigner Party http://example.com/party:org:abc 为 assignee Party http://example.com/party:person:billie 授予 对目标 Asset http//example.com/asset:9898.movie 执行 play 的 Permission。

示例 3
{
    "@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"
    }]
}

2.2 Asset 类

Asset 类是作为 Rule 主体的资源或资源集合。Asset 可以是 任何形式的可标识资源,例如数据/信息、内容/媒体、应用、服务 或物理制品。此外,它还可用于表示执行 Policy 表达式所需的其他 Asset 类,例如与 Duty 一起使用时。Asset 由 Permission 和/或 Prohibition 引用,也由 Duty 引用。

Asset 类具有以下属性:

如果 Asset 未使用 uid 属性声明标识符,则必须理解其全部 影响,例如对 ODRL Policy 的 ODRL Validator 和 Evaluator 的影响。

Asset 类具有以下子类:

AssetCollection 类具有以下属性:

由于 ODRL Policy 可以处理任何种类的 Asset,ODRL 信息模型不提供 用于描述特定媒体类型 Asset 的附加元数据。建议使用现有的 元数据标准,例如适合 Asset 类型或用途的 Dublin Core Metadata Terms

2.2.1 Relation 属性

抽象 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 提供显示 target Asset http://example.com/asset:3333

示例 4
{
   "@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/archive1011index 操作 Permission。 该目标 Asset 也声明为 AssetCollection,以表示该资源是资源集合。一个 附加 Asset 关系 summary 表示索引输出应存储到其中的 Asset http://example.com/x/database。 ODRL Profile ttp://example.com/odrl:profile:03 定义了这个新的 relation 子属性。

示例 5
{
   "@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"
   }]
}

2.2.2 Part Of 属性

partOf 属性用于标识 Asset 资源所属的 AssetCollection。其目的是显式表达 Asset 与 AssetCollection 之间的成员关系。这使与 AssetCollection 相关的 Rule 能够了解该 Rule 可能适用于哪些单独的 Asset。此外,Asset/AssetCollection 成员 关系还可能检测 Rule 中的冲突。

示例用例:下面的片段展示了一些描述文档的 Dublin Core 元数据。 odrl:partOf 属性声明 Asset http://example.com/asset:111.dochttp://example.com/archive1011 AssetCollection 的成员,后者用于上面示例中的 Policy。这意味着 http://example.com/asset:111.doc 是该 Policy 中的目标 Asset 之一,并且可以被索引。

示例 6
{
   "@type": "dc:Document",
   "@id": "http://example.com/asset:111.doc",
   "dc:title": "Annual Report",
   ...
   "odrl:partOf": "http://example.com/archive1011",
   ...
}

2.2.3 Target Policy 属性

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 Policy http://example.com/policy:1010(这是上文描述的 Set Policy)。在此 情况下,Asset http://example.com/asset:9999.movie 现在也是 Policy http://example.com/policy:1010 中 Permission 的目标 Asset。 如果此 Policy 中还有其他 Rule,则同一 Asset 将是每个 Rule 的目标 Asset。

示例 7
{
   "@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",
   ...
}

2.3 Party 类

Party 类是在 Rule 中承担功能角色的实体或实体集合,例如 个人、人员集合、组织或代理。代理是承担 主动角色或产生特定效果的人或事物。Party 执行(或不执行)Action,或在 Duty 中具有某种功能(即通过将 Party 与其在 Rule 中扮演的 function 相关联,将该 Party 分配给 Rule)。

Party 类具有以下属性:

如果 Party 未使用 uid 属性声明标识符,则必须理解其全部 影响,例如对 ODRL Policy 的 ODRL Validator 和 Evaluator 的影响。

Party 类具有以下子类:

PartyCollection 类具有以下属性:

ODRL 信息模型不为 Party 类提供附加元数据。建议使用 现有的元数据标准,例如 W3C vCard Ontology [vcard-rdf] 或 FOAF Vocabulary [foaf]。

2.3.1 Function 属性

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,其功能角色为 assignerassigneeassigner 授予 assignee 对目标资产执行 play 操作。

示例 8
{
    "@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 表示直接 使用 assignerassignee 作为令牌,因为它们已被定义为 父 function 属性的子属性。

示例用例:该 Policy 展示了具有两个 Party 的 Agreement,其功能角色为 assignerassigneeassigner 授予 assignee 使用目标资产的权利。在此情况下,assigner 被 显式声明为 Party,同时也是 vcard:Organisation,并带有一些 附加外部属性。assignee 被显式声明为 PartyCollection,同时也是 vcard:Group,并带有一些附加外部 属性。这意味着所有被标识为 http://example.com/team/A 的实体都将各自拥有相同的已授予 action

示例 9
{
    "@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"
    }]
}  

2.3.2 Part Of 属性

partOf 属性用于标识 Party 实体所属的 PartyCollection。其目的是显式表达 Party 与 PartyCollection 之间的成员关系。这使与 PartyCollection 相关的 Rule 能够了解 该 Rule 可能适用于哪些单独的 Party。此外,Party/PartyCollection 成员 关系还可能检测 Rule 中的冲突。

示例用例:下面的片段展示了一些描述 Party 的 vCard 元数据。 odrl:partOf 属性声明 Party http://example.com/person/murphyhttp://example.com/team/A PartyCollection 的成员,后者用于上面示例中的 Policy。这意味着 http://example.com/person/murphy 是 assignee,并且 可以使用 Policy 中的目标资产。

示例 10
{
   "@type": "vcard:Individual",
   "@id": "http://example.com/person/murphy",
   "vcard:fn": "Murphy",
   "vcard:hasEmail": "murphy@example.com",
   ...
   "odrl:partOf": "http://example.com/team/A",
   ...
}

2.3.3 Assigned Policy 属性

ODRL Policy 类 MAY 也可由 assignerOfassigneeOf 属性引用。这支持 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 Policy http://example.com/policy:1011(这是上文描述的 Offer Policy)。在此 情况下,Party http://example.com/person/billie 现在也是 Policy http://example.com/policy:1011 中 Permission 的 assignee。 如果此 Policy 中还有其他 Rule,则同一 Party 将是每个 Rule 的 assignee。

示例 11
{
   "@type": "vcard:Individual",
   "@id": "http://example.com/person/billie",
   "vcard:fn": "Billie",
   "vcard:hasEmail": "billie@example.com",
   ...
   "odrl:assigneeOf": "http://example.com/policy:1011",
   ...
}

2.4 Action 类

Action 类表示可在 Asset 上执行的操作。Action 通过 Rule 中的 action 属性 与 Asset 关联。

Rule 提供 Action 的具体解释。例如;当与 Permission 相关时,Action 被允许在目标 Asset 上执行。当与 Prohibition 相关时,Action 表示被禁止在 目标 Asset 上执行的操作。当与 Duty 相关时,Action 表示 Party 有义务履行的约定操作

ODRL 信息模型定义了以下顶层 Actions:

Action 类具有以下属性:

Action 术语 MUST 使用 includedIn 属性定义,该属性指向一个包含性 Action,并以 usetransfer 作为 通过传递方式形成的顶层父术语。 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。)

有关 includedInimplies 属性的使用详情,请参见 ODRL Profiles

ODRL 通用词汇表 [odrl-vocab] 定义了 一组标准的通用 Actions,ODRL Profiles MAY 采用这些 Actions。

示例用例:该 Policy 表达了针对目标 Asset http://example.com/music:1012 的 Offer,其中 Action 是 play 该 Asset (play 被定义为 useincludedIn 术语)。

示例 12
{
    "@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"
     }]
}

2.5 Constraints

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 类形成语义和条件关系。属性关系汇总在 下图中。

ODRL 约束关系
2 ODRL 约束关系 (也提供 SVG 格式

2.5.1 Constraint 类

Constraint 类用于通过一个关系运算符比较两个操作数(它们不是 Constraints)的 表达式。如果比较返回匹配,则该 Constraint 得到满足,否则它未得到满足。Constraint 类 表述一个比较表达式,例如使用次数(leftOperand) 必须小于(operator)数字 10(rightOperand)。

Constraint 类具有以下属性:

  • Constraint MAY 具有零个或一个 uid 属性 值(类型为 IRI [rfc3987]),用于标识 Constraint。
  • Constraint MUST 具有一个 leftOperand 属性值,类型为 LeftOperand。
  • Constraint MUST 具有一个 operator 属性 值,类型为 Operator。
  • Constraint MUST 具有以下二者之一:
    • 一个 rightOperand 属性值,类型为:
      • 字面量,或 IRI [rfc3987],或 RightOperand;或
      • 对于基于集合的运算符;字面量列表,或 IRI 列表 [rfc3987],或 RightOperands 列表;
    • 一个 rightOperandReference 属性值,类型为:
      • IRI [rfc3987];或
      • 对于基于集合的运算符;IRI 列表 [rfc3987];
      用于引用右操作数值。
  • Constraint MAY 具有零个或一个 dataType 属性值,用于 rightOperand/Reference 的数据类型。
  • Constraint MAY 具有零个或一个 unit 属性值(类型为 IRI [rfc3987]),用于 设置 rightOperand/Reference 值所使用的单位。
  • Constraint MAY 具有零个或一个 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 获取的情况。rightOperandrightOperandReference 中只能有一个 MUST 出现在 Constraint 中。

rightOperand 表示一个值,而 rightOperandReference 表示必须解引用以获得该值的 IRI。如果 rightOperandhttp://example.com/c100,则它被解释为表达式中要比较的 值。如果 rightOperandReference 是相同的值 http://example.com/c100,则必须先解引用该 IRI,并且返回的数据 必须被解释为表达式中要比较的值。

dataType 指示 rightOperand/Reference 的类型,例如 xsd:decimalxsd:datetime,而 unit 指示 rightOperand/Reference 的单位 值,例如 “EU currency”。

status 提供由 leftOperand action 生成的值,该值 MUST 用于比较表达式。例如, count constraint 可以具有值为 10 的 rightOperand, 以及值为 5 的 status。这意味着该 action 已经被执行了 5 次,并且 比较必须将当前 action 与 status 值进行比较。

2.5.2 Logical Constraint 类

Logical Constraint 类用于通过一个逻辑运算符比较两个或多个 现有 Constraints 作为操作数的表达式。如果比较返回逻辑匹配,则 Logical Constraint 得到满足,否则它未得到满足。 例如,三个 Constraints 可以在逻辑上被 and 连接,表示三者 都必须为真,Logical Constraint 才能得到满足。

Logical Constraint 类具有以下属性:

  • Logical Constraint MAY 具有零个或一个 uid 属性值(类型为 IRI [rfc3987]),用于 标识 Logical Constraint。
  • Logical Constraint MUST 具有一个 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 验证要求包括:

  1. operand MUST 只能是以下 子属性:orxoneandandSequenceoperand 的附加子属性 MAY 只能由 ODRL Profiles 定义,专用于 Logical Constraints。
  2. 所有 operand 值 MUST 都必须是唯一的 Constraint 实例。

Constraint 实例 MUST 被求值,其结果 用于确定逻辑关系是否得到满足(基于 operand 子属性的语义)。

当使用需要按顺序求值的逻辑 operand(例如 andSequence)时,序列化 MUST 保留 列表成员的顺序。在 JSON-LD 中,@list 关键词 MUST 用于表示有序集合。

2.5.3 带有 Rule 的 Constraint 属性

Rule(例如 Permission、Prohibition 或 Duty)MAY 包含 constraint 属性,用于表示 Rule 上的条件。 为满足此条件,constraint 属性所引用的所有 Constraints/Logical Constraints MUST 得到满足

示例用例:在下面的 Policy Offer 示例中,permission 允许目标 asset 被 distribute,并包含一个 dateTime 条件的 constraint, 即 permission 只能在 2018-01-01 之前执行。

示例 13
{
    "@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" }
       }]
   }]
}

2.5.4 带有 Action 的 Refinement 属性

Action MAY 包含 refinement 属性,用于 表示直接缩窄 Action 操作语义的 Constraint/Logical Constraint。 为满足 Action 更窄语义的这一条件,refinement 属性 引用的所有 Constraints/Logical Constraints MUST 用于生成已满足状态。

注:对 Action 应用 refinements 的结果 SHOULD NOT 导致空操作。

示例用例:在下面的 Policy Offer 示例中,permission 允许目标 asset 被 print,并且还包含一个小于或等于 1200 dpi 分辨率的 refinement Constraint。该 refinement 是打印的更窄语义,在此情况下, 表示以特定最高分辨率级别进行打印。

示例 14
{
    "@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(带有 xone operand),引用了两个 在别处声明的现有 Constraints。

示例 15
{
    "@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 键。

2.5.5 带有 Asset Collection 的 Refinement 属性

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 分钟的资源,并且这些资源中的每一个都可以被播放。请注意, runningTime leftOperand 与 play action 一起定义在 ODRL Profile http://example.com/odrl:profile:11 中。

示例 16
{
  "@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"
  }]
}

2.5.6 带有 Party Collection 的 Refinement 属性

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 是 由照片的 assigner http://example.com/user44 发布到社交网络站点的一组照片。assignee source 是 PartyCollection http://example.com/user44/friends,表示 assigner 的所有朋友。 assignee 还具有一个 refinement,表示只有集合中 foaf:age 超过 18 的成员才会被分配 ex:view permission(由 Profile 定义)。

示例 17
{
  "@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" }
  }]
}

2.6 Rule 类

Rule 类是 Permission、Prohibition 和 Duty 类的父类。Rule 类表示 这三个类的共同特征。Rule 类 MUST 与所有其他 Rule 子类不相交。

Rule 类具有以下属性:

注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule CompositionCompact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。

必须使用抽象 relationrelationfailure 属性的显式子属性,具体选择取决于所讨论的 Rule 子类。

Rules 的三个类还与 Duty Rule 形成重要关系。属性 关系汇总在下图中。

ODRL Rule 关系
3 ODRL Rule 关系(也 提供 SVG 格式

2.6.1 Permission 类

Permission 允许一个 action(在所有 refinements 得到满足时) 在所有 constraints 得到满足且所有 duties 得到履行的情况下,在 Asset 上执行

Permission 类是 Rule 类的子类,并从 Rule 类继承所有属性,且具有 以下附加属性语义:

  • Permission MUST 具有一个 target 属性 值,类型为 Asset。(其他 relation 子属性 MAY 可被使用。)
  • Permission MAY 具有零个或一个 assigner 和/或 assignee 属性值(类型为 Party),用于功能角色。(其他 function 子属性 MAY 可被使用。)
  • Permission MAY 具有零个、一个或多个 duty 属性值,类型为 Duty。

注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule CompositionCompact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。

duty 属性表达一项约定的义务,该义务 MUST 被履行。也就是说,duty 属性断言 Permission 与 Duty 之间的前置条件。更多详细信息见 带有 Permission 的 Duty 章节。

示例用例:来自 assigner http://example.com/org:xyz 的 Policy Offer 表达了对目标 Asset http//example.com/game:9090 的 play action,并且 permission 有效期至 2017 年年底。

示例 18
{
   "@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" }
       }]
   }]
}

2.6.2 Prohibition 类

Prohibition 不允许一个 action(在所有 refinements 得到满足时) 在所有 constraints 得到满足的情况下,在 Asset 上执行。如果 Prohibition 已因该 action 被执行而受到违反,则所有 remedies MUST履行,以将 Prohibition 的状态设为未违反

Prohibition 类是 Rule 类的子类,并从 Rule 类继承所有属性,且 具有以下附加属性语义:

  • Prohibition MUST 具有一个 target 属性 值,类型为 Asset。(其他 relation 子属性 MAY 可被使用。)
  • Prohibition MAY 具有零个或一个 assigner 和/或 assignee 属性值(类型为 Party),用于功能角色。(其他 function 子属性 MAY 可被使用。)
  • Prohibition MAY 具有零个、一个或多个 remedy 属性值,类型为 Duty。

注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule CompositionCompact 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 Party http://example.com/MyPix:55 将 Permission display 分配给 assignee Party http://example.com/assignee:55,同时给出一个禁止 archive 目标 Asset 的 Prohibition。此外,如果 Policy 中存在任何冲突 (例如 Permission 与 Prohibition 之间),则 Policyconflict 属性被设置为 perm, 表示 Permissions 将优先。

示例 19
{
    "@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"
    }]
}

2.6.3 Duty 类

Duty 是执行某个 action 的义务,并且所有 refinements 均得到满足。如果所有 constraints 均 得到满足,且其 action(在所有 refinements 得到满足时) 已被执行,则 Duty 得到履行。如果其 action 尚未被执行, 则所有 consequence 也必须被履行,才能履行 Duty。也就是说,consequences 是附加 Duties,也必须被履行。(注:只有被 duty 或 obligation 属性引用的 Duties 才可以使用 consequence 属性。)

Duty 类是 Rule 类的子类,并从 Rule 类继承所有属性,且具有 以下附加属性语义:

  • Duty MAY 具有零个或一个 target 属性 值(类型为 Asset),用于表示 Duty 直接适用的主要主体 Asset。(其他 relation 子属性 MAY 可被使用。)
  • Duty MAY 具有零个或一个 assigner 和/或 assignee 属性值(类型为 Party),用于功能角色。(其他 function 子属性 MAY 可被使用。)
  • Duty MAY 仅当 Duty 由带有 duty 或 obligation 属性的 Rule 引用时,才可以具有零个、一个或多个 consequence 属性值,类型仅为 Duty。

注:上述属性基数反映了规范性的 ODRL 信息模型。在某些情况下, 某些属性也支持重复出现(如 Policy Rule CompositionCompact Policy 中所述),但规范性的原子 Policy 与上述属性基数保持一致。

Duty 类还具有以下附加要求:

  • 有义务履行 duty 的 Party MUST 具备 执行 Duty Action 的能力。
  • 有义务履行 duty 的 Party MUST 满足该 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。

2.6.4 带有 Policy 的 Obligation 属性

Policy MAY 包含履行 Duty 的 obligation。该 obligation 在所有 constraints 均得到满足,且其 action(在所有 refinements 得到满足时)已被执行的情况下 得到履行

示例用例:下面的 Agreement 包含一项 obligation,要求 assignee http://example.com/person:44 向 assigner http://example.com/org:43 补偿 EU500.00 的付款金额。

示例 20
{
  "@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 向 assigner http://example.com/org:43 删除目标 Asset。如果 obligation 未被履行, 则 consequence 是 assigner MUST 现在还要向指定慈善机构 补偿 EU10.00 的付款(同时还要履行 obligation Duty)。

示例 21
{
    "@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"
         }]
    }]
}

2.6.5 带有 Permission 的 Duty 属性

Duty MAY 被指定为一个前置条件,该条件要求 通过从 Permission 到 Duty 的 duty 属性关系来履行。

如果一个 Permission 有多个 Duties,则所有 Duties MUST 都必须约定为得到履行。如果多个 Permissions 通过同一 Duty 的 uid 属性引用同一 Duty,则该 Duty 只需履行一次

如果 Duty 中未声明 function 子属性,则这些 功能角色将与引用它的 Permission 中声明的功能角色相同。

示例用例:Party http://example.com/assigner:sony 发出一个 Offer,以播放 目标 asset http://example.com/music/1999.mp3。permission 包含一个 duty, 其 compensate action 具有 payAmount 为 $EU5.00 的 refinement。该 duty 还具有一个 constraint,即 event 小于 policyUsage,这意味着 duty rule 必须先被执行(即补偿),然后 permission rule 才能被执行。

示例 22
{
    "@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" }
            }]
        }]
    }]
}  

2.6.6 带有 Permission/Obligation Duty 的 Consequence 属性

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 与 assignee http://example.com/person:88 之间,允许 assignee 在前置条件下分发 Asset http://example.com/data:77,该前置条件是他们将该 asset 归属给 Party http://australia.gov.au/。如果 assignee 未履行 duty,或 在未履行 duty 的情况下分发该 asset,则 consequence 是他们还将 被 http://example.com/dept:100 跟踪。

示例 23
{
    "@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"
            }]
        }]
    }]
}

2.6.7 带有 Prohibition 的 Remedy 属性

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 与 assignee http://example.com/org:99 之间,禁止 assignee 索引 Asset http://example.com/data:77。如果 assignee 确实索引了目标 asset, 则 remedy 是他们 MUST 匿名化 目标 asset http://example.com/data:77

示例 24
{
    "@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"
        }]
    }]
}

2.7 策略规则组合

ODRL 信息模型为与 Rules 的属性关系提供规范性的基数。在 核心层级,ODRL Rule 会与一个 Asset、一个或多个 Party 功能角色、一个 Action(并可能与 Constraints 和/或 Duties)相关

Policy Rules Composition 允许每个 Rule 扩展 ODRL 信息模型的基数要求,以支持一个 Rule 与多个 Assets、Parties 和 Actions 相关。 其目的是组合公共属性(在单个 Rule 中),以表达更复合的 Policy。然后,Policy SHOULD 被处理为其规范性的原子 等效形式。

下面的示例展示了 Policy 的原子层级,其中它是不可约的 Rule(也就是说, 不能再被约简或进一步简化)。

示例 25
{
  "@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。

示例 26
{
    "@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。

示例 27
{
    "@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 验证要求包括:

  1. 如果存在多个 Assets(具有相同 relation),则用新创建的 Rules 替换现有 Rule(每个 Asset 一个),并在每个 Rule 中仅包含一个 Asset relation, 同时包含所有其他(非 Asset)属性
  2. 如果存在多个 Parties(具有相同 function),则用新创建的 Rules 替换现有 Rule(每个 Party 一个),并在每个 Rule 中仅包含一个 Party function, 同时包含所有其他(非 Party)属性。
  3. 如果存在多个 Actions,则用新创建的 Rules 替换现有 Rule(每个 Action 一个),并在每个 Rule 中仅包含一个 Action,同时包含所有其他(非 Action)属性。

2.7.1 紧凑 Policy

ODRL Policy MAY 可以保存声明在 Policy 层级的属性,这些属性由其所有 Rules 共享并通用。这仅旨在作为一种 快捷方法,以支持更紧凑的序列化。这些共享 属性 MUST NOT 被解释为 Policy 层级 属性(例如 Policy 类章节中定义的那些属性)。

MAY 被共享的属性(如下图所示) 包括:

  • 一个或多个 action 属性。
  • relation 的一个或多个子属性(例如 target)。
  • function 的一个或多个子属性(例如 assignerassignee)。
ODRL 共享属性
4 ODRL 共享属性(也 提供 SVG 格式

在 Policy 中展开快捷形式的 ODRL 验证要求是:

  1. 对于 Policy 中的每个 Rule:
    • 验证任何相关的共享属性(位于 Policy 层级)。
    • 将这些属性复制到 Rule 中。
  2. 移除声明在 Policy 层级的共享属性

此外,遵循 ODRL 验证要求,在 Policy 中创建原子 Rules (定义于上一节)。

RECOMMENDED 在处理一致性时,将紧凑的 ODRL Policies 展开为原子 Policies。

下面的示例展示了应用于 Policy 的这些共享公共属性:

示例 28
{
    "@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 中。

示例 29
{
    "@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",
        }]
}  

2.8 Policy 元数据

可以向 Policy 添加附加元数据属性 MAY, 以支持来自外部词汇表的进一步真实性和完整性目的。ODRL 信息模型 推荐对 ODRL Policies 使用 Dublin Core Metadata Terms [dcterms]。

以下 Dublin Core Metadata Terms [dcterms] 属性 SHOULD 被使用:

具有上述元数据属性的 Policies 的 ODRL 验证要求包括:

  1. 如果 Policy 具有 dc:isReplacedBy 属性,则处理器 MUST 认为第一个 Policy 无效,并且 MUST 获取并处理所标识的 Policy。

示例用例:下面的示例展示了若干元数据属性,用于表示谁创建了该 Policy、 描述、Policy 何时发布、Policy 适用于哪个司法辖区(澳大利亚昆士兰的标识符), 以及其所替换的旧版本 Policy 的标识符。

示例 30
{
    "@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 元数据的比较,因为它们可能没有被规范化。

2.9 Policy 继承

ODRL 支持一种继承机制,其中(子)Policy 可以继承一个或多个(父) Policies 的所有原子 Rules。 inheritFrom 属性 MUST 用于从父 Policy 继承的子 Policy 中,并且 MAY 包含 多个父 Policies 的标识符。

使用继承时适用以下规则:

示例用例:考虑下面的(父)Policy http://example.com/policy:default。 它包含一个(Policy 层级的)assigner,以及一个审阅目标资产策略文档的 Obligation。

示例 31
{
    "@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。

示例 32
{
    "@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。

示例 33
{
    "@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 验证要求包括:

  1. 子 Policy MUST 访问父 Policy,并在更新后的子 Policy 中复制 以下内容:
    • 来自父 Policy 的所有 Policy 层级 Assets、Parties、Actions。
    • 所有 profile 标识符。
    • 任何 conflict 属性
    • 来自父 Policy 的所有 Rules。
  2. 对每个已标识的父 Policy 重复上述过程。
  3. 最终更新后的子 Policy MAY 随后可通过遵循 Policy Composition 章节中定义的 ODRL 验证要求,进一步展开 (为原子 Rules)。

2.10 Policy 冲突策略

conflict 属性用于建立策略,以解决由 Policies 合并产生的冲突,或同一 Policy 中 Permissions 与 Prohibitions 之间的冲突。冲突 可能在因 Policy Inheritance 合并 Policies 时产生,并且所得 Rules 不一致。

conflict 属性 SHOULD 采用以下 Conflict Strategy Preference 值之一(ConflictTerm 类的实例):

如果未显式设置 conflict 属性,则将使用默认值 invalid

附加的 conflict 属性值 MAY 由 ODRL Profiles 定义。

Conflict Strategy 要求包括:

  1. 如果 Policy 的 conflict 属性为 perm,则任何冲突的 Permission Rule MUST 覆盖 Prohibition Rule。
  2. 如果 Policy 的 conflict 属性为 prohibit,则任何冲突的 Prohibition Rule MUST 覆盖 Permission Rule。
  3. 如果 Policy 的 conflict 属性为 invalid,则任何冲突的 Rules MUST 使整个 Policy 无效。
  4. 如果 Policy 具有多个 conflict 属性值(例如在 Policy 合并或 继承之后),并且存在冲突的 Rules,则整个 Policy MUST 无效。

示例用例:两个 Policies 关联到同一目标 Asset http://example.com/asset:1212。第一个 Policy http://example.com/policy:0001 允许 use 该 Asset。第二个 Policy http://example.com/policy:0002 允许显示该 Asset,但禁止 print。两个 policies 都通过将 conflict 属性设为 perm,显式声明如何处理冲突。因此 Permissions 将始终 覆盖任何 Prohibitions。在此用例中,由于 print Action 是 use Action 的特化,可能会存在冲突。然而,perm 冲突 策略意味着 use Permission 将覆盖 print Prohibition。

示例 34
{
    "@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"
    }]
}
示例 35
{
    "@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。

3. ODRL 配置文件

3.1 ODRL 配置文件目的

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。

3.2 ODRL Profile 一致性

如果 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。

3.3 ODRL Profile 机制

要创建 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:Classowl:Class)、属性(rdf:Propertyowl:ObjectProperty)和实例(owl:NamedIndividual)也必须被定义为 skos:Concept。还应为类定义适当的 rdfs:domainrdfs:range

还建议为每个新术语提供人类可读的文档,使用 rdfs:label 表示 名称,使用 skos:definition 表示正式定义,并使用 skos:note 表示其使用的附加 注释。

3.4 ODRL 核心 Profile

在需要标识 ODRL Core Profile 的情况下,即 Policy 符合 ODRL Core Vocabulary,则以下标识符 MAY 可用于 Core Profile: http://www.w3.org/ns/odrl/2/core

4. 隐私考量

本节是非规范性的。

ODRL 信息模型并不直接表达敏感个人信息,例如包含与 Parties 相关的此类数据的 Assets 是否存在的身份信息。然而,ODRL 词汇表(例如 ODRL 通用词汇表 [odrl-vocab] 和 ODRL Profiles)可能会定义与个人信息相关的术语。这些规范应告知 生成或使用此类 ODRL 表达式的实现采取措施,向所有相关 用户说明该 policy 的使用方式、该 policy 与之共享的任何其他 party 的身份, 以及该 policy 与其他 parties 共享的原因。

A. 致谢

POE 工作组感谢 ODRL 社区小组以及早期的 ODRL 倡议所作的贡献。特别是 编辑们要感谢 Susanne Guth、Daniel Paehler 和 Andreas Kasten 过去在编辑方面的 贡献。

B. 候选推荐标准退出 准则

为了使本规范推进到提议推荐标准,以下描述的每项特性必须至少有两个独立 实现。每项特性可以由不同的产品集合实现,并且不要求任何单个产品实现每项特性。

特性

为评估退出准则,以下内容被视为特性:

在存在或缺少某项给定特性时不会改变其行为的软件,不被认为是为了退出候选推荐标准阶段 而实现了该特性。

C. W3C ODRL 社区小组报告的关系

权限与义务表达工作组交付物的基础是由 W3C ODRL 社区小组创建的报告。ODRL 社区小组已经 开发了一系列规范,以支持针对内容服务的发布、 分发和消费来创新地表达资产使用。 ODRL 社区小组的最终输出是 ODRL Version 2.1 规范,它是对 ODRL 的一次重大 更新,并取代了原始的 ODRL Version 1.1 [odrl](作为 W3C NOTE 发布)。

以下文档属于 ODRL 社区小组报告系列:

ODRL 信息模型源自 ODRL V2.1 核心模型社区小组报告。W3C 工作组交付物与 ODRL 社区小组报告之间差异的详细信息维护在 附录中。所有新的 ODRL 实现都应使用权限与义务表达工作组的交付物。

D. 相对先前版本的变更

相对 2016年7月21日首次公开工作草案 的变更:

相对 2017年2月23日工作草案 的变更:

相对 2017年9月26日候选推荐标准 的变更:

相对 2018年1月04日提议推荐标准 的变更:

E. 参考文献

E.1 规范性参考文献

[odrl-vocab]
ODRL 词汇表与表达式 2.2. Renato Iannella; Michael Steidl; Stuart Myles; Víctor Rodríguez-Doncel. W3C. 2018年2月15日. W3C 推荐标准. URL: https://www.w3.org/TR/odrl-vocab/
[RFC2119]
用于 RFC 中表示 需求级别的关键词. S. Bradner. IETF. 1997年3月. 当前最佳实践. URL: https://tools.ietf.org/html/rfc2119
[rfc3987]
国际化资源标识符 (IRI). M. Duerst; M. Suignard. IETF. 2005年1月. 提议标准. URL: https://tools.ietf.org/html/rfc3987

E.2 资料性参考文献

[dcterms]
DCMI 元数据术语. Dublin Core metadata initiative.2012年6月14日. DCMI 推荐标准. URL: http://dublincore.org/documents/dcmi-terms/
[foaf]
FOAF 词汇表规范 0.99(Paddington 版). Dan Brickley; Libby Miller. FOAF project. 2014年1月14日. URL: http://xmlns.com/foaf/spec
[json-ld]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 2014年1月16日. W3C 推荐标准. URL: https://www.w3.org/TR/json-ld/
[odrl]
开放数字权利语言(ODRL)Version 1.1. Renato Iannella. W3C. 2002年9月19日. W3C Note. URL: https://www.w3.org/TR/odrl
[odrl2-req]
ODRL Version 2 需求. Susanne Guth; Renato Iannella. ODRL Initiative. 2005年2月13日. 工作草案. URL: https://www.w3.org/2012/09/odrl/archive/odrl.net/2.0/v2req.html
[odrl21-json]
ODRL Version 2.1 JSON 编码. Jonas Öberg; Stuart Myles; Lu Ai. W3C. 2015年3月5日. W3C Community Group Final Specification. URL: https://www.w3.org/community/odrl/json/2.1/
[odrl21-model]
ODRL Version 2.1 核心模型. Renato Iannella; Susanne Guth; Daniel Paehler; Andreas Kasten. W3C. 2015年3月5日. W3C Community Group Final Specification. URL: https://www.w3.org/community/odrl/model/2.1/
[odrl21-onto]
ODRL Version 2.1 本体. Mo McRoberts; Víctor Rodríguez Doncel. W3C. 2015年3月5日. W3C Community Group Final Specification. URL: https://www.w3.org/ns/odrl/2/ODRL21
[odrl21-vocab]
ODRL Version 2.1 通用 词汇表. Renato Iannella; Michael Steidl; Susanne Guth. W3C. 2015年3月5日. W3C Community Group Final Specification. URL: https://www.w3.org/community/odrl/vocab/2.1/
[odrl21-xml]
ODRL Version 2.1 XML 编码. Renato Iannella. W3C. 2015年3月5日. W3C Community Group Final Specification. URL: https://www.w3.org/community/odrl/xml/2.1/
[vcard-rdf]
vCard 本体 - 用于描述人员和 组织. Renato Iannella; James McKinney. W3C. 2014年5月22日. W3C Note. URL: https://www.w3.org/TR/vcard-rdf/