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 저장소

발행 이후 보고된 오류나 이슈가 있는지 정오표를 확인해 주십시오

번역본도 참조하십시오.


초록

Open Digital Rights Language(ODRL)는 콘텐츠 및 서비스 사용에 관한 진술을 표현하기 위해 유연하고 상호 운용 가능한 정보 모델, 어휘 및 인코딩 메커니즘을 제공하는 정책 표현 언어입니다. ODRL 정보 모델은 ODRL 정책의 의미론을 위한 기초 기반을 형성하는 기본 개념, 엔터티 및 관계를 설명합니다.

정책은 특정 자산에 대해 허용되거나 금지된 동작과 이해관계자가 충족해야 하는 의무를 나타내는 데 사용됩니다. 또한 정책은 제약 조건(예: 시간적 또는 공간적 제약 조건)에 의해 제한될 수 있으며, 허가에는 의무(예: 지불)가 부과될 수 있습니다.

이 문서의 상태

이 섹션은 발행 당시 이 문서의 상태를 설명합니다. 다른 문서가 이 문서를 대체할 수 있습니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 https://www.w3.org/TR/ 의 W3C 기술 보고서 색인에서 찾을 수 있습니다.

이 문서는 Permissions & Obligations Expression Working Group에서 권고안으로 발행했습니다. 이 문서에 대한 의견을 환영합니다. 의견은 public-poe-comments@w3.org로 보내 주십시오 (구독, 아카이브).

워킹 그룹의 구현 보고서를 참조하십시오.

이 문서는 W3C 회원, 소프트웨어 개발자, 그 밖의 W3C 그룹 및 관심 있는 당사자들의 검토를 받았으며, 디렉터가 W3C 권고안으로 승인했습니다. 이는 안정적인 문서이며 참조 자료로 사용하거나 다른 문서에서 인용할 수 있습니다. 권고안을 만드는 데 있어 W3C의 역할은 해당 명세에 주의를 환기하고 그 광범위한 배포를 촉진하는 것입니다. 이는 웹의 기능성과 상호 운용성을 향상시킵니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했습니다. W3C는 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지하며, 해당 페이지에는 특허 공개 지침도 포함되어 있습니다. 실제로 어떤 특허가 필수 청구항을 포함한다고 믿을 만한 지식을 가진 개인은 W3C 특허 정책 6절에 따라 그 정보를 공개해야 합니다.

이 문서는 2018년 2월 1일 W3C 프로세스 문서의 적용을 받습니다.

1. 소개

이 섹션은 비규범적입니다.

여러 비즈니스 시나리오에서는 리소스에 대해 허용되거나 금지된 동작이 무엇인지 표현해야 합니다. 이러한 허용/금지된 동작은 일반적으로 정책의 형태, 즉 기존 규정이나 소유자가 지정한 제약 조건에 부합하는 콘텐츠의 사용 및 재사용을 나타내는 표현으로 기술됩니다. 정책은 또한 추가 정보로 보강될 수 있습니다. 즉, 그러한 Policy의 정의를 담당하는 엔터티와 이를 준수해야 하는 엔터티가 누구인지, Policy가 표현하는 Permissions, Prohibitions 및 Duties와 연결될 추가 제약 조건이 무엇인지 등을 포함할 수 있습니다. 이러한 개념과 관계를 표현하는 능력은 콘텐츠 생산자에게도 중요합니다. 즉, 오용을 방지하기 위해 허용된 동작과 금지된 동작을 명확하게 명시할 수 있기 때문이며, 소비자에게도 중요합니다. 즉, 규칙, 법률 또는 소유자의 제약 조건을 위반하지 않기 위해 어떤 리소스를 사용하고 재사용할 수 있는지 정확히 알 수 있기 때문입니다. 이 명세는 이러한 정책 개념을 표현하는 공통 접근 방식을 설명합니다.

ODRL 정보 모델은 콘텐츠 사용을 설명하는 허가, 금지 및 의무 진술을 위한 기본 의미 모델을 정의합니다. 정보 모델은 콘텐츠 사용 진술을 위한 기초 모델을 제공하는 핵심 개념, 엔터티 및 관계를 다룹니다. 이러한 기계 판독 가능 정책은 소비자가 이 정보를 쉽게 검색할 수 있도록 관련 콘텐츠와 직접 연결될 수 있습니다.

1.1 모델의 목표

ODRL 정보 모델의 주요 목표는 일반적인 콘텐츠와 연결될 허가, 금지 및 의무 진술을 표현하기 위한 표준 설명 모델과 형식을 제공하는 것입니다. 이러한 진술은 리소스의 사용 및 재사용 조건을 설명하는 데 사용됩니다. 이 모델은 가능한 한 많은 허가, 금지 및 의무 사용 사례를 포괄해야 하며, 복잡한 경우를 다룰 때에도 정책 모델링을 쉽게 유지해야 합니다.

ODRL 정보 모델은 모든 이해관계자가 사용할 수 있는 단일하고 일관된 모델입니다. 수용해야 하는 기존 표준이 있거나 단일 방법만 사용하는 데 상당한 비용이 따르는 경우가 아니라면, 사용 사례를 충족하는 단일 방법이 여러 방법보다 강하게 선호됩니다. ODRL 정보 모델은 Linked Data 원칙을 사용하여 구축되었지만, 설계는 그래프 기반이 아닌 구현도 허용하도록 의도되었습니다.

1.2 적합성

비규범으로 표시된 섹션뿐 아니라, 이 명세의 모든 작성 지침, 다이어그램, 예제, 참고 사항은 비규범적입니다. 이 명세의 그 밖의 모든 것은 규범적입니다.

핵심 단어 MAY, MUST, MUST NOT, RECOMMENDED, SHOULD, 및 SHOULD NOT은 [RFC2119]에 설명된 대로 해석해야 합니다.

문서 전체의 예제는 [json-ld]로 직렬화되어 있습니다. JSON 컨텍스트를 포함한 규범적 직렬화에 대해서는 ODRL Vocabulary and Expression [odrl-vocab]을 참조하십시오.

1.3 용어

Policy
하나 이상의 Rules 그룹
Rule
Permissions, Prohibitions 및 Duties의 공통 특성을 나타내는 추상 개념.
Action
Asset에 대한 연산
Permission
Asset에 대해 Action을 수행할 수 있는 능력
Prohibition
Asset에 대해 Action을 수행할 수 없음
Duty
합의된 Action을 수행해야 하는 의무.
Asset
Rule의 대상이 되는 리소스 또는 리소스의 컬렉션
Party
Rule에서 Roles를 맡는 엔터티 또는 엔터티의 컬렉션
Constraint
Action 및 Party/Asset 컬렉션 또는 Rule에 적용되는 조건을 정제하는 boolean/논리 표현식.
ODRL Validator
속성의 카디널리티, 해당 속성이 ODRL 정보 모델이 정의한 값 유형과 관련되는지 여부, 그리고 정보 모델의 검증 요구 사항을 포함하여 ODRL Policy 표현의 적합성을 확인하는 시스템.
ODRL Evaluator
ODRL Policy 표현의 Rules가 의도한 동작 수행을 충족했는지 여부를 판단하는 시스템.
ODRL Core Vocabulary
ODRL 정보 모델로 표현되는 용어 집합.
ODRL Profile
ODRL Core Vocabulary를 새 용어로 확장하여 Policies를 표현하는 커뮤니티 또는 부문별 어휘
ODRL Common Vocabulary
ODRL Profiles에서 재사용할 수 있는 일반 용어 집합.

2. ODRL 정보 모델

ODRL 정보 모델은 Asset 리소스의 사용과 관련된 Permissions, Prohibitions 및 Duties를 표현하는 Policies를 나타냅니다. 정보 모델은 Policy에 의해 무엇이 허용되고 무엇이 허용되지 않는지뿐 아니라, 관련된 다른 조건, 요구 사항 및 당사자를 명시적으로 표현합니다. ODRL 정보 모델의 목표는 정책 작성자가 Policies에 많거나 적은 세부 정보를 포함할 수 있도록 하여 유연한 Policy 표현을 가능하게 하는 것입니다.

아래 그림은 ODRL 정보 모델을 보여 줍니다.

ODRL Information Model
그림 1 ODRL 정보 모델(SVG 형식으로도 제공됨)

ODRL 정보 모델에는 다음 클래스가 포함됩니다:

ODRL 정보 모델에는 클래스 간의 속성 관계가 포함됩니다. 대부분은 명시적으로 이름이 붙은 속성이며, 일부는 추상 속성(구체적으로 relation, function, operand, 및 failure)입니다. 추상 속성은 명시적인 의미론을 가진 하위 속성(하위 유형)으로 표현되도록 설계된 일반적인 부모 속성입니다.

예를 들어, 그림 1의 두 속성 relationfunction은 Rule과 Asset 및 Party 클래스 사이의 개념적 관계를 나타내도록 설계되었습니다. 그림은 Asset이 Rule의 주요 대상임을 표현하기 위해 하위 유형 target을 가진 relation 속성을 보여 줍니다. function 속성에는 Rule을 발행하는 Party를 표현하는 하위 유형 assigner와 Rule의 수신 Party를 표현하는 하위 유형 assignee가 있습니다.

참고

ODRL 정보 모델은 Policy 모델 구성 요소의 논리적 관점을 제공합니다. ODRL 정보 모델의 구현 가능한 관점은 ODRL Vocabulary & Expression 문서 [odrl-vocab]에서 규범적으로 설명한 다양한 인코딩 직렬화로 제공됩니다. 논리적 정보 모델 구성 요소를 구현 가능한 직렬화에 매핑할 때에는 직렬화 언어가 지원하는 기능에 따라 일부 절충 및/또는 차이가 필요할 수 있습니다.

다음 섹션에서는 ODRL 정보 모델에 대한 추가 세부 정보를 제공합니다.

2.1 Policy 클래스

Policy 클래스에는 다음 속성이 있습니다:

ODRL Policy는 모든 Rules에 공유되고 공통되는 속성을 선언할 수도 (MAY) 있습니다. 구체적으로는 action 속성, relation의 하위 속성(target 등), 그리고 function의 하위 속성(assignerassignee 등)입니다. 이러한 공유 속성의 검증 요구 사항은 Compact Policy 섹션을 참조하십시오.

ODRL Policy는 다음 중 하나여야 합니다:

후자의 경우, profile 속성은 ODRL Profile(들)의 IRI를 나타내는 데 사용되어야(MUST) 합니다. ODRL Profiles를 정의하는 메커니즘과 적합성 요구 사항에 대한 자세한 내용은 ODRL Profiles 섹션을 참조하십시오. (이 문서의 예제는 설명 목적만을 위해 ODRL Profile 식별자를 사용합니다.)

ODRL Policy는 Policy의 사용 맥락을 더 정확하게 설명하기 위해 하위 클래스로 만들 수 (MAY) 있으며, 여기에는 ODRL 프로세서가 이해해야 (MUST) 하는 추가 제약 조건이 포함될 수 (MAY) 있습니다. 추가 Policy 하위 클래스는 ODRL Common Vocabulary [odrl-vocab] 또는 ODRL Profiles에 문서화될 수 있습니다. Policy 클래스는 Set을 제외한 모든 Policy 하위 클래스와 서로소여야(MUST) 합니다.

2.1.1 Set 클래스

Set 하위 클래스의 ODRL Policy는 Rules의 모든 조합을 나타냅니다. Set Policy 하위 클래스는 Policy의 기본 하위 클래스이기도 합니다(아무것도 지정되지 않은 경우).

예제 사용 사례: 아래 Set Policy는 대상 Asset http//example.com/asset:9898.movieuse할 수 있는 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 토큰에 매핑됩니다. 위 예제는 Set 유형 대신 Policy 유형을 사용할 수도 있습니다(둘은 동등하기 때문입니다).

위 예제는 모든 용어가 ODRL Core Vocabulary [odrl-vocab]에 의해 정의되므로 profile 속성을 사용하지 않습니다.

2.1.2 Offer 클래스

Offer 하위 클래스의 ODRL Policy는 assigner Parties로부터 제공되는 Rules를 나타냅니다. Offer는 일반적으로 더 넓은 대상에게 Policies를 제공하는 데 사용되지만, 어떤 Rules도 부여하지는 않습니다.

Offer 하위 클래스의 ODRL Policy는:

  • 동일한 Rules에서 기능적 역할을 나타내기 위해 assigner 속성 값(Party 유형)을 하나 가져야(MUST) 합니다.

참고: 기능적 역할에 대한 자세한 내용은 Function Property 섹션을 참조하십시오.

참고: 위 속성 카디널리티는 규범적 ODRL 정보 모델을 반영합니다. 일부 경우에는 일부 속성의 반복 출현도 지원되지만(Policy Rule CompositionCompact Policy에 설명됨), 규범적 원자 Policy는 위 속성 카디널리티와 일관됩니다.

예제 사용 사례: 아래 Offer Policy(이전 예제 기반)는 assigner Party http://example.com/party:org:abc로부터 대상 Asset http//example.com/asset:9898.movieplay할 수 있는 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"
    }]
}
참고

위 예제는 사용된 용어가 http://example.com/odrl:profile:01로 식별되는 ODRL Profile에 의해 정의됨을 나타내기 위해 profile 속성을 사용합니다. 자세한 내용은 ODRL Profiles 섹션을 참조하십시오.

2.1.3 Agreement 클래스

Agreement 하위 클래스의 ODRL Policy는 assigner에서 assignee Parties로 부여된 Rules를 나타냅니다. Agreement는 일반적으로 Parties 사이에서 Rules의 조건을 부여하는 데 사용됩니다.

Agreement 하위 클래스의 ODRL Policy는:

  • 동일한 Rules에서 기능적 역할을 나타내기 위해 assigner 속성 값(Party 유형)을 하나 가져야(MUST) 합니다.
  • 동일한 Rules에서 기능적 역할을 나타내기 위해 assignee 속성 값(Party 유형)을 하나 가져야(MUST) 합니다.

참고: 기능적 역할에 대한 자세한 내용은 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.movieplay할 수 있는 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은 데이터/정보, 콘텐츠/미디어, 애플리케이션, 서비스 또는 물리적 산출물과 같이 식별 가능한 리소스의 어떤 형태든 될 수 있습니다. 또한 Duty에서처럼 Policy 표현을 수행하는 데 필요한 다른 Asset 클래스를 나타내는 데 사용할 수 있습니다. Asset은 Permission 및/또는 Prohibition이 참조하며, Duty도 참조합니다.

Asset 클래스에는 다음 속성이 있습니다:

참고

Asset이 uid 속성을 사용하여 식별자를 명시하지 않는 경우, ODRL Policies의 ODRL Validators 및 Evaluators에 미치는 영향과 같은 전체 함의를 이해해야 합니다.

Asset 클래스에는 다음 하위 클래스가 있습니다:

AssetCollection 클래스에는 다음 속성이 있습니다:

ODRL Policies는 모든 종류의 Asset을 다룰 수 있으므로, ODRL 정보 모델은 특정 미디어 유형의 Assets를 설명하기 위한 추가 메타데이터를 제공하지 않습니다. Asset 유형이나 목적에 적합한 Dublin Core Metadata Terms와 같은 기존 메타데이터 표준을 사용하는 것이 권장됩니다.

2.2.1 Relation 속성

추상 relation 속성은 Action과 Asset 사이에 명시적 링크를 만들어, Asset이 이를 연결하는 Rule과 관련하여 어떻게 사용되어야(MUST) 하는지를 나타내는 데 사용됩니다.

ODRL validator는 다음 relation의 하위 속성을 지원해야 (MUST) 합니다:

  • target: Asset이 Rule action이 직접 적용되는 주요 대상임을 나타냅니다.

추가 relation 하위 유형 속성은 ODRL Common Vocabulary [odrl-vocab] 및 ODRL Profiles에서 정의될 수 (MAY) 있습니다.

예제 사용 사례: assigner Party http//example.com/party:0001target 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는 target Asset http://example.com/archive1011에 대한 index action Permission을 보여 줍니다. target asset은 해당 리소스가 리소스 컬렉션임을 나타내기 위해 AssetCollection으로도 선언됩니다. 추가 Asset relation 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을 식별하는 데 사용됩니다. 목적은 Assets와 AssetCollections 사이의 멤버십 관계를 명시적으로 표현하는 것입니다. 이를 통해 AssetCollection과 관련된 Rule이 해당 Rule이 적용될 수 있는 개별 Assets가 무엇인지 이해할 수 있습니다. 또한 Asset/AssetCollection 멤버십 관계는 Rules의 충돌을 잠재적으로 감지할 수 있습니다.

예제 사용 사례: 아래 스니펫은 문서를 설명하는 일부 Dublin Core 메타데이터를 보여 줍니다. odrl:partOf 속성은 Asset http://example.com/asset:111.doc이 위 예제의 Policy에서 사용되는 http://example.com/archive1011 AssetCollection의 멤버임을 명시합니다. 이는 http://example.com/asset:111.doc이 Policy의 target Assets 중 하나이며 인덱싱될 수 있음을 의미합니다.

예제 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 클래스는 hasPolicy 속성에 의해 참조될 수도 (MAY) 있습니다. 이는 ODRL Policy Rules가 외부 메타데이터 표현(Asset을 식별하는 표현)의 객체가 되는 것을 지원합니다. hasPolicy가 메타데이터 표현과 ODRL Policy 사이에 명시되었을 때, 식별되는 Asset은 해당 Policy의 모든 Rules의 target Asset으로 추론되어야 (MUST) 합니다. Policy에 여러 Rules가 있는 경우, 추론된 Asset은 Policy의 모든 Rule에 대한 target 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에 대한 target Asset이기도 합니다. 이 Policy에 추가 Rules가 있다면, 동일한 Asset이 각 Rule의 target 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는 Actions를 수행하거나 (또는 수행하지 않거나), Duty에서 기능을 갖습니다(즉, Rule에서 수행하는 function과 연결하여 Party를 Rule에 할당합니다).

Party 클래스에는 다음 속성이 있습니다:

참고

Party가 uid 속성을 사용하여 식별자를 명시하지 않는 경우, ODRL Policies의 ODRL Validators 및 Evaluators에 미치는 영향과 같은 전체 함의를 이해해야 합니다.

Party 클래스에는 다음 하위 클래스가 있습니다:

PartyCollection 클래스에는 다음 속성이 있습니다:

ODRL 정보 모델은 Party 클래스에 대한 추가 메타데이터를 제공하지 않습니다. W3C vCard Ontology [vcard-rdf] 또는 FOAF Vocabulary [foaf]와 같은 기존 메타데이터 표준을 사용하는 것이 권장됩니다.

2.3.1 Function 속성

function 속성은 Rule을 Party에 연결하여, 이를 연결하는 Rule과 관련하여 Party가 수행하는 기능을 나타내는 데 사용됩니다. function 속성 자체는 추상적이며, 하위 속성은 Party와 Rule 사이의 기능적 역할에 대한 명시적 의미론을 나타냅니다.

ODRL validator는 다음 function의 하위 속성을 지원해야 (MUST) 합니다:

  • assigner: Rule을 발행하는 Party를 나타냅니다. 예를 들어 Permission을 부여하거나 합의된 Duty의 이행을 요구하는 Party입니다.
  • assignee: Rule의 수신자인 Party를 나타냅니다. 예를 들어 Permission을 부여받거나 합의된 Duty를 이행해야 하는 Party입니다.

추가 function 하위 유형 속성은 ODRL Common Vocabulary [odrl-vocab] 및 ODRL Profiles에서 정의될 수 (MAY) 있습니다.

예제 사용 사례: 이 Policy는 assignerassignee의 기능적 역할을 가진 두 Parties가 포함된 Agreement를 보여 줍니다. assignerassignee에게 target asset에 대한 play action을 부여합니다.

예제 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는 assignerassignee의 기능적 역할을 가진 두 Parties가 포함된 Agreement를 보여 줍니다. assignerassignee에게 target asset의 사용을 부여합니다. 이 경우 assignerParty이자 vcard:Organisation 및 일부 추가 외부 속성으로 명시적으로 선언됩니다. assigneePartyCollection이자 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을 식별하는 데 사용됩니다. 목적은 Parties와 PartyCollections 사이의 멤버십 관계를 명시적으로 표현하는 것입니다. 이를 통해 PartyCollection과 관련된 Rule이 해당 Rule이 적용될 수 있는 개별 Parties가 무엇인지 이해할 수 있습니다. 또한 Party/PartyCollection 멤버십 관계는 Rules의 충돌을 잠재적으로 감지할 수 있습니다.

예제 사용 사례: 아래 스니펫은 Party를 설명하는 일부 vCard 메타데이터를 보여 줍니다. odrl:partOf 속성은 Party http://example.com/person/murphy가 위 예제의 Policy에서 사용되는 http://example.com/team/A PartyCollection의 멤버임을 명시합니다. 이는 http://example.com/person/murphy가 assignee이며 Policy의 target asset을 사용할 수 있음을 의미합니다.

예제 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 클래스는 assignerOfassigneeOf 속성에 의해 참조될 수도(MAY) 있습니다. 이는 ODRL Policy Rules가 외부 메타데이터 표현(Party를 식별하는 표현)의 객체가 되는 것을 지원합니다. assignerOf가 메타데이터 표현과 ODRL Policy 사이에 명시되었을 때, 식별되는 Party는 해당 Policy의 모든 Rules에서 assigner 기능적 역할을 수행하는 것으로 추론되어야(MUST) 합니다. assigneeOf가 메타데이터 표현과 ODRL Policy 사이에 명시되었을 때, 식별되는 Party는 해당 Policy의 모든 Rules에서 assignee 기능적 역할을 수행하는 것으로 추론되어야(MUST) 합니다. Policy에 여러 Rules가 있는 경우, 추론된 Party는 Policy의 모든 Rule에 대해 기능적 역할을 수행합니다.

예제 사용 사례: 아래 스니펫은 individual 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에 추가 Rules가 있다면, 동일한 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은 target Asset에 대해 수행하는 것이 허용됩니다. Prohibition과 관련된 경우, Action은 target Asset에 대해 수행하는 것이 금지된 연산을 나타냅니다. Duty와 관련된 경우, Action은 Party가 이행해야 하는 합의된 연산이 의무적임을 나타냅니다

ODRL 정보 모델은 다음 최상위 Actions를 정의합니다:

Action 클래스에는 다음 속성이 있습니다:

Action 용어는 포괄하는 Action을 참조하는 includedIn 속성을 사용하고, 전이적 방식으로 use 또는 transfer를 최상위 부모 용어로 하여 정의되어야(MUST) 합니다. includedIn 속성의 목적은 참조된 다른 Action 인스턴스의 의미론이 이 Action 인스턴스의 의미론을 포괄(포함)한다는 것을 명시적으로 선언하는 것입니다. includedIn 속성은 전이적이므로 Actions는 조상 관계를 형성합니다.

includedIn 속성의 함의는 포괄하는 Action에 대한 Permission 또는 Prohibition이 includedIn 관계를 가진 모든 Actions에 상속된다는 것입니다. 예를 들어, play Action이 use와 함께 includedIn으로 정의되어 있고, Policy에서 play가 허용되며 동일한 Policy에서 use가 금지되고, 두 Actions가 동일한 target Asset에 적용된다면, 두 Action 사이에 명시된 이 관계 때문에 Policy에 충돌이 발생합니다. (자세한 내용은 Policy Conflict Strategy를 참조하십시오.)

implies 속성은 Action의 한 인스턴스가 Action의 다른 인스턴스가 금지되지 않았음을 함의한다고 명시합니다. implies 속성은 두 Action 인스턴스 사이에 includedIn 관계가 없는 경우 그러한 명시를 설정할 수 있습니다. 예를 들어, share Action이 distribute Action을 명시적으로 함의한다면, Policy에서 share가 허용되고 동일한 Policy에서 distribute가 금지되며, 두 Actions가 동일한 target Asset에 적용되는 경우 이는 Policy에 충돌을 일으킵니다. 함의된 다른 action이 금지되지 않았다면 이는 충돌을 일으키지 않습니다. (자세한 내용은 Policy Conflict Strategy를 참조하십시오.)

includedInimplies 속성의 사용 세부 사항은 ODRL Profiles를 참조하십시오.

ODRL Common Vocabulary [odrl-vocab]는 ODRL Profiles가 채택할 수(MAY) 있는 일반 Actions의 표준 집합을 정의합니다.

예제 사용 사례: 이 Policy는 target Asset http://example.com/music:1012에 대해 Asset을 play하는 Action을 가진 Offer를 표현합니다(playuseincludedIn 용어로 정의됩니다).

예제 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에 적용되는 조건을 선언하는 데 사용할 수 있는 boolean/논리 표현식입니다. Constraints는 Constraint 클래스 또는 Logical Constraint 클래스로 표현할 수 있습니다. Logical Constraint는 기존 Constraints를 자신의 operands로 참조합니다. 여러 Constraints가 동일한 Rule, Action, Party/Asset Collection에 적용되는 경우, 이들은 논리곱으로 해석되며 모두 충족되어야(MUST) 합니다.

Constraint 및 Logical Constraint 클래스는 Party Collection, Asset Collection, Action 및 Rule 클래스와 의미론적 및 조건적 관계를 형성합니다. 속성 관계는 아래 그림에 요약되어 있습니다.

ODRL Constraint Relationships
그림 2 ODRL Constraint 관계 (SVG 형식으로도 제공됨)

2.5.1 Constraint 클래스

Constraint 클래스는 하나의 관계 연산자로 두 operands(Constraints가 아닌 것)를 비교하는 표현식에 사용됩니다. 비교가 일치하면 Constraint는 충족되고, 그렇지 않으면 충족되지 않습니다. Constraint 클래스는 예를 들어 사용 횟수(leftOperand)가 숫자 10(rightOperand)보다 작아야 한다(operator)는 식의 비교 표현식을 공식화합니다.

Constraint 클래스에는 다음 속성이 있습니다:

  • Constraint는 Constraint를 식별하기 위해 uid 속성 값(IRI [rfc3987] 유형)을 없거나 하나 가질 수(MAY) 있습니다.
  • Constraint는 LeftOperand 유형의 leftOperand 속성 값을 하나 가져야(MUST) 합니다.
  • Constraint는 Operator 유형의 operator 속성 값을 하나 가져야(MUST) 합니다.
  • Constraint는 다음 중 하나를 가져야(MUST) 합니다:
    • 다음 유형의 rightOperand 속성 값 하나:
      • 리터럴, 또는 IRI [rfc3987], 또는 RightOperand; 또는
      • 집합 기반 operators의 경우, 리터럴 목록, 또는 IRI 목록 [rfc3987], 또는 RightOperands 목록;
    • 다음 유형의 rightOperandReference 속성 값 하나:
      • IRI [rfc3987]; 또는
      • 집합 기반 operators의 경우, IRI 목록 [rfc3987];
      right operand 값에 대한 참조.
  • Constraint는 rightOperand/Reference의 데이터 유형을 위한 dataType 속성 값을 없거나 하나 가질 수(MAY) 있습니다.
  • Constraint는 rightOperand/Reference 값에 사용되는 단위를 설정하기 위해 unit 속성 값(IRI [rfc3987] 유형)을 없거나 하나 가질 수(MAY) 있습니다.
  • Constraint는 leftOperand action에서 생성된 값 또는 leftOperand와 관련되어 비교의 참조로 설정된 값을 위한 status 속성 값을 없거나 하나 가질 수 (MAY) 있습니다.

leftOperand 속성 값은 LeftOperand 클래스의 인스턴스로 정의됩니다. leftOperand 인스턴스는 Constraint의 의미론을 나타내도록 명확히 정의되어야(MUST) 하며, 비교할 값을 어떻게 검색하거나 생성해야 하는지를 선언할 수(MAY) 있습니다. ODRL Common Vocabulary [odrl-vocab]는 ODRL Profiles가 사용할 수(MAY) 있는 leftOperand들을 정의합니다.

operator 속성 값은 Operator 클래스의 인스턴스로 정의됩니다. operator 인스턴스는 left operand와 right operand 사이의 “보다 큼” 또는 “같음”과 같은 관계 연산을 식별합니다.

rightOperand 속성 값은 RightOperand 클래스의 인스턴스, IRI 또는 Literal 값으로 정의됩니다. rightOperandleftOperand와 비교될 Constraint의 값입니다. rightOperandReferencerightOperand의 실제 값을 얻기 위해 먼저 역참조되어야(MUST) 하는 IRI를 나타냅니다. rightOperandReferencerightOperand의 값을 먼저 IRI 역참조를 통해 얻어야(MUST) 하는 경우에 사용됩니다. Constraint에는 rightOperand 또는 rightOperandReference 중 하나만 나타나야(MUST) 합니다.

rightOperand는 값을 나타내고, rightOperandReference는 값을 얻기 위해 역참조해야 하는 IRI를 나타냅니다. rightOperandhttp://example.com/c100이라면, 이는 표현식에서 비교할 값으로 해석됩니다. rightOperandReference가 동일한 값인 http://example.com/c100이라면, 해당 IRI를 먼저 역참조해야 하며 반환된 데이터는 표현식에서 비교할 값으로 해석되어야 합니다.

dataTypexsd:decimal 또는 xsd:datetime과 같은  rightOperand/Reference의 유형을 나타내며, unit은 “EU 통화”와 같은 rightOperand/Reference의 단위 값을 나타냅니다.

status는 비교 표현식에서 사용되어야(MUST) 하는, leftOperand action에서 생성된 값을 제공합니다. 예를 들어, count constraint가 rightOperand 값 10과 status 값 5를 가질 수 있습니다. 이는 action이 이미 5번 수행되었으며, 비교에서는 현재 action을 status 값과 비교해야 함을 의미합니다.

2.5.2 Logical Constraint 클래스

Logical Constraint 클래스는 기존 Constraints인 두 개 이상의 operands를 하나의 논리 연산자로 비교하는 표현식에 사용됩니다. 비교가 논리적으로 일치하면 Logical Constraint는 충족되고, 그렇지 않으면 충족되지 않습니다. 예를 들어, 세 Constraints가 논리적으로 and 처리되어 세 가지 모두가 참이어야 Logical Constraint가 충족됨을 나타낼 수 있습니다.

Logical Constraint 클래스에는 다음 속성이 있습니다:

  • Logical Constraint는 Logical Constraint를 식별하기 위해 uid 속성 값(IRI [rfc3987] 유형)을 없거나 하나 가질 수(MAY) 있습니다.
  • Logical Constraint는 비교되는 기존 constraints의 논리적 관계를 나타내는 operand 하위 속성을 하나 가져야(MUST) 하며, 그 값은 기존 Constraint 인스턴스의 목록입니다.

ODRL evaluator는 다음 operand의 하위 속성을 지원해야 (MUST) 합니다:

  • or - Constraints 중 적어도 하나가 충족되어야(MUST) 합니다
  • xone - Constraints 중 하나만, 그리고 그 이상은 아니게 충족되어야(MUST) 합니다
  • and - Constraints 모두가 충족되어야(MUST) 합니다
  • andSequence - Constraints 모두가 순서대로 충족되어야(MUST) 합니다

추가 operand 하위 속성은 ODRL Profiles에 의해 정의될 수 (MAY) 있습니다.

Logical Constraints에 대한 ODRL 검증 요구 사항에는 다음이 포함됩니다:

  1. operandor, xone, and, andSequence 하위 속성 중 하나여야(MUST) 합니다. 추가 operand 하위 속성은 Logical Constraints의 사용만을 위해 ODRL Profiles에 의해 정의될 수(MAY) 있습니다.
  2. 모든 operand 값은 고유한 Constraint 인스턴스여야(MUST) 합니다.

Constraint 인스턴스는 평가되어야(MUST) 하며, 그 결과는 (operand 하위 속성의 의미론에 따라) 논리적 관계가 충족되는지 판단하는 데 사용됩니다.

참고

andSequence와 같이 순서대로 평가되어야 하는 논리 operand를 사용할 때, serialisations는 목록 멤버의 순서를 보존해야(MUST) 합니다. JSON-LD에서는 순서 있는 컬렉션을 나타내기 위해 @list 키워드를 사용해야(MUST) 합니다.

2.5.3 Rule을 가진 Constraint 속성

Rule(Permission, Prohibition 또는 Duty 등)은 Rule에 대한 조건을 나타내기 위해 constraint 속성을 포함할 수(MAY) 있습니다. 이 조건을 충족하려면, constraint 속성이 참조하는 모든 Constraints/Logical Constraints가 충족되어야(MUST) 합니다.

예제 사용 사례: 아래 Policy Offer 예제에서 permission은 target asset이 distribute될 수 있도록 허용하며, permission이 2018-01-01까지만 수행될 수 있다는 dateTime 조건의 constraint를 포함합니다.

예제 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은 Action 연산의 의미론을 직접 좁히는 Constraint/Logical Constraint를 나타내기 위해 refinement 속성을 포함할 수(MAY) 있습니다. Action에 대한 더 좁은 의미론이라는 이 조건을 충족하려면, refinement 속성이 참조하는 모든 Constraints/Logical Constraints가 충족 상태를 생성하는 데 사용되어야(MUST) 합니다.

참고: Action에 refinements를 적용한 결과는 null 연산이 되어서는 안 됩니다(SHOULD NOT).

예제 사용 사례: 아래 Policy Offer 예제에서 permission은 target 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는 target asset을 온라인 미디어 또는 인쇄 미디어를 통해 둘 중 하나로 복제할 수 있지만 둘 다는 아님을 보여 줍니다. 이는 다른 곳에 선언된 두 기존 Constraints를 참조하는 Logical Constraint(xone operand 사용)로 표현됩니다.

예제 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" }
}
참고

Action과 함께 refinement 속성을 사용할 때, rdf:value 속성은 자신의 namespace 식별자(예: odrl)를 사용해야(MUST) 하는 Action 인스턴스를 나타내고, 이를 @id 키로 명시하는 데 사용됩니다. 또한 Constraint 인스턴스의 식별자(논리 constraint operands용)는 이를 @id 키로 명시해야 합니다.

2.5.5 Asset Collection을 가진 Refinement 속성

AssetCollection은 전체 컬렉션의 개별 Asset(s)을 식별할 refinement 맥락을 나타내기 위해 refinement 속성을 포함할 수(MAY) 있습니다. refinement 속성은 컬렉션의 각 멤버의 특성에 적용됩니다(리소스 전체에는 적용되지 않음). 전체 AssetCollection의 개별 Asset(s)을 식별하는 이 조건을 충족하려면, refinement 속성이 참조하는 모든 Constraints/Logical Constraints가 충족되어야(MUST) 합니다.

참고: AssetCollection에 refinements를 적용한 결과는 null 집합이 되어서는 안 됩니다(SHOULD NOT).

refinement 속성을 사용할 때에는 uid 속성을 사용하여 AssetCollection식별해서는 안 됩니다(MUST NOT). 대신 source 속성을 사용하여 AssetCollection참조해야(MUST) 합니다.

예제 사용 사례: Policy는 멀티미디어 비디오의 AssetCollection인 target source http://example.com/media-catalogue를 정의합니다. target에는 AssetCollection 멤버의 특성을 지정하는 refinement도 있습니다. 이 경우 target Assets의 하위 집합은 running time이 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은 전체 컬렉션의 개별 Party(ies)를 식별할 refinement 맥락을 나타내기 위해 refinement 속성을 포함할 수(MAY) 있습니다. refinement 속성은 컬렉션의 각 멤버의 특성에 적용됩니다(리소스 전체에는 적용되지 않음). 전체 PartyCollection의 개별 Party(ies)를 식별하는 이 조건을 충족하려면, refinement 속성이 참조하는 모든 Constraints/Logical Constraints가 충족되어야(MUST) 합니다.

참고: PartyCollection에 refinements를 적용한 결과는 null 집합이 되어서는 안 됩니다(SHOULD NOT).

refinement 속성을 사용할 때에는 uid 속성을 사용하여 PartyCollection식별해서는 안 됩니다(MUST NOT). 대신 source 속성을 사용하여 PartyCollection참조해야(MUST) 합니다.

예제 사용 사례: target Asset http://example.com/myPhotos:BdayParty는 사진의 assigner인 http://example.com/user44가 소셜 네트워크 사이트에 게시한 사진들의 집합입니다. assignee source는 PartyCollection http://example.com/user44/friends이며 assigner의 모든 친구를 나타냅니다. assignee에는 또한 컬렉션 멤버 중 foaf:age가 18을 초과하는 사람에게만 ex:view permission(Profile에 의해 정의됨)이 할당됨을 나타내는 refinement가 있습니다.

예제 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 클래스는 다른 모든 Rule 하위 클래스와 서로소여야(MUST) 합니다.

Rule 클래스에는 다음 속성이 있습니다:

참고: 위 속성 카디널리티는 규범적 ODRL 정보 모델을 반영합니다. 일부 경우에는 일부 속성의 반복 출현도 지원되지만(Policy Rule CompositionCompact Policy에 설명됨), 규범적 원자 Policy는 위 속성 카디널리티와 일관됩니다.

추상 relation, relationfailure 속성의 명시적 하위 속성을 사용해야 하며, 선택은 해당 Rule 하위 클래스에 따라 달라집니다.

Rules의 세 클래스는 Duty Rule과도 중요한 관계를 형성합니다. 속성 관계는 아래 그림에 요약되어 있습니다.

ODRL Rule Relationships
그림 3 ODRL Rule 관계(SVG 형식으로도 제공됨)

2.6.1 Permission 클래스

Permission은 모든 refinements가 충족된 action이, 모든 constraints가 충족되고 모든 duties가 이행된 경우 Asset에 대해 수행될 수 있도록 허용합니다.

Permission 클래스는 Rule 클래스의 하위 클래스이며, Rule 클래스의 모든 속성을 상속하고 다음과 같은 추가 속성 의미론을 가집니다:

  • Permission은 Asset 유형의 target 속성 값을 하나 가져야(MUST) 합니다. (다른 relation 하위 속성이 사용될 수(MAY) 있습니다.)
  • Permission은 기능적 역할을 위해 Party 유형의 assigner 및/또는 assignee 속성 값을 없거나 하나 가질 수(MAY) 있습니다. (다른 function 하위 속성이 사용될 수(MAY) 있습니다.)
  • Permission은 Duty 유형의 duty 속성 값을 없거나, 하나 또는 여러 개 가질 수(MAY) 있습니다.

참고: 위 속성 카디널리티는 규범적 ODRL 정보 모델을 반영합니다. 일부 경우에는 일부 속성의 반복 출현도 지원되지만(Policy Rule CompositionCompact Policy에 설명됨), 규범적 원자 Policy는 위 속성 카디널리티와 일관됩니다.

duty 속성은 이행되어야(MUST) 하는 합의된 의무를 표현합니다. 즉, duty 속성은 Permission과 Duty 사이의 사전 조건을 명시합니다. 자세한 내용은 Permission을 가진 Duty 섹션을 참조하십시오.

예제 사용 사례: assigner http://example.com/org:xyz의 Policy Offer는 target 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은 모든 refinements가 충족된 action이, 모든 constraints가 충족된 경우 Asset에 대해 수행되는 것을 허용하지 않습니다. action이 수행되어 Prohibition이 위반된 경우, Prohibition의 상태를 위반되지 않음으로 설정하려면 모든 remedies가 MUST 이행되어야 합니다.

Prohibition 클래스는 Rule 클래스의 하위 클래스이며, Rule 클래스의 모든 속성을 상속하고 다음과 같은 추가 속성 의미론을 가집니다:

  • Prohibition은 Asset 유형의 target 속성 값을 하나 가져야(MUST) 합니다. (다른 relation 하위 속성이 사용될 수(MAY) 있습니다.)
  • Prohibition은 기능적 역할을 위해 Party 유형의 assigner 및/또는 assignee 속성 값을 없거나 하나 가질 수(MAY) 있습니다. (다른 function 하위 속성이 사용될 수(MAY) 있습니다.)
  • Prohibition은 Duty 유형의 remedy 속성 값을 없거나, 하나 또는 여러 개 가질 수(MAY) 있습니다.

참고: 위 속성 카디널리티는 규범적 ODRL 정보 모델을 반영합니다. 일부 경우에는 일부 속성의 반복 출현도 지원되지만(Policy Rule CompositionCompact Policy에 설명됨), 규범적 원자 Policy는 위 속성 카디널리티와 일관됩니다.

remedy 속성(failure 속성의 하위 속성)은 Prohibition이 위반된 경우 이행되어야(MUST) 하는 합의된 의무를 표현합니다. 즉, remedy 속성은 Prohibition의 action이 수행된 경우 이행되어야 하는 Duty를 명시합니다. 자세한 내용은 Prohibition을 가진 Remedy 섹션을 참조하십시오.

예제 사용 사례: target Asset http://example.com/photoAlbum:55의 assigner는 Permission과 Prohibition을 모두 포함하는 Agreement Policy를 표현합니다. assigner Party http://example.com/MyPix:55는 assignee Party http://example.com/assignee:55에게 Permission display를 할당하는 동시에 target Asset을 archive하는 것을 Prohibition으로 설정합니다. 또한 Policy에 충돌(예: Permissions와 Prohibitions 사이)이 있는 경우, 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는 모든 refinements가 충족된 action을 수행해야 하는 의무입니다. 모든 constraints가 충족되고, 모든 refinements가 충족된 해당 action이 수행된 경우 Duty는 이행됩니다. 해당 action이 수행되지 않은 경우, Duty를 이행하려면 모든 consequence도 이행되어야 합니다. 즉, consequences는 함께 이행되어야 하는 추가 Duties입니다. (참고: duty 또는 obligation 속성이 참조하는 Duties만 consequence 속성을 사용할 수 있습니다.)

Duty 클래스는 Rule 클래스의 하위 클래스이며, Rule 클래스의 모든 속성을 상속하고 다음과 같은 추가 속성 의미론을 가집니다:

  • Duty는 Duty가 직접 적용되는 주요 대상 Asset을 나타내기 위해 Asset 유형의 target 속성 값을 없거나 하나 가질 수(MAY) 있습니다. (다른 relation 하위 속성이 사용될 수(MAY) 있습니다.)
  • Duty는 기능적 역할을 위해 Party 유형의 assigner 및/또는 assignee 속성 값을 없거나 하나 가질 수(MAY) 있습니다. (다른 function 하위 속성이 사용될 수(MAY) 있습니다.)
  • Duty는 duty 또는 obligation 속성을 가진 Rule이 해당 Duty를 참조하는 경우에만 Duty 유형의 consequence 속성 값을 없거나, 하나 또는 여러 개 가질 수 (MAY) 있습니다.

참고: 위 속성 카디널리티는 규범적 ODRL 정보 모델을 반영합니다. 일부 경우에는 일부 속성의 반복 출현도 지원되지만(Policy Rule CompositionCompact Policy에 설명됨), 규범적 원자 Policy는 위 속성 카디널리티와 일관됩니다.

Duty 클래스에는 다음 추가 요구 사항도 있습니다:

  • duty를 수행할 의무가 있는 Party는 Duty Action을 수행할 능력이 있어야(MUST) 합니다.
  • duty를 수행할 의무가 있는 Party는 Duty를 충족해야(MUST) 합니다.

consequence 속성(failure 속성의 하위 속성)은 Permission에 대한 합의된 Policy obligation 또는 duty를 이행하지 않은 결과를 표현하는 데 사용됩니다. 이 중 하나라도 이행되지 않으면, consequence Duties도 또한 새로운 요구 사항이 되며, 이는 원래 obligation 또는 duty뿐 아니라 consequence Duties도 모두 MUST 이행되어야 함을 의미합니다.

참고

일부 경우에는 consequence를 트리거한 원래 duty/obligation을 이행하기 위해, 원래 duty/obligation에 대한 일부 constraints 및/또는 refinements가 더 이상 충족될 수 없다면 완화될 필요가 있을 수(MAY) 있습니다.

예를 들어, 고정된 날짜까지 데이터를 제공해야 하는 obligation이 이행되지 않은 경우, $100 벌금이라는 consequence도 지급해야 합니다. 날짜가 지난 경우, 원래 duty는 날짜 constraint를 충족할 수 없기 때문에 기술적으로 이행될 수 없습니다.

이러한 경우, ODRL 구현은 consequence가 트리거된 후에도 원래 duty/obligation이 충족 가능하도록 하는 메커니즘을 제공해야(SHOULD) 합니다.

consequence 속성은 Permission duty 또는 Policy obligation에 대한 consequence인 Duty에서 사용되어서는 안 됩니다(MUST NOT).

2.6.4 Policy를 가진 Obligation 속성

Policy는 Duty를 이행해야 하는 obligation을 포함할 수(MAY) 있습니다. 모든 constraints가 충족되고, 모든 refinements가 충족된 해당 action이 수행된 경우 obligation은 이행됩니다.

예제 사용 사례: 아래 Agreement는 assigner http://example.com/org:43에서 assignee http://example.com/person:44에게 EU500.00의 payment amount로 assigner를 보상해야 하는 obligation을 포함합니다.

예제 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는 obligation을 이행하지 않은 consequence도 포함할 수(MAY) 있습니다.

예제 사용 사례: 아래 Agreement는 assigner http://example.com/org:43에서 assignee http://example.com/person:44에게 target Asset을 삭제해야 하는 obligation을 포함합니다. obligation이 이행되지 않으면, consequence로 assigner는 이제 지명된 자선 단체에 EU10.00을 보상해야(MUST) 합니다(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는 Permission에서 Duty로 이어지는 duty 속성 관계를 사용하여 이행을 요구하는 사전 조건으로 지정될 수(MAY) 있습니다.

Permission에 여러 Duties가 있는 경우, 모든 Duties는 이행되기로 합의되어야 (MUST) 합니다. 여러 Permissions가 동일한 Duty를 (uid 속성을 통해) 참조하는 경우, Duty는 한 번만 이행되면 됩니다.

Duty에 function 하위 속성이 선언되어 있지 않은 경우, 이러한 기능적 역할은 참조하는 Permission에 선언된 것과 동일합니다.

예제 사용 사례: Party http://example.com/assigner:sony는 target asset http://example.com/music/1999.mp3을 play하도록 Offer를 만듭니다. permission에는 payAmount가 $EU5.00인 refinement를 가진 compensate action에 대한 duty가 포함됩니다. duty에는 또한 eventpolicyUsage보다 작다는 constraint가 있으며, 이는 permission rule이 수행되기 전에 duty 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은 해당 duty 또는 obligation을 이행하지 않은 것에 대한 consequence Duty를 포함할 수(MAY) 있습니다. 이 경우, Permission/Obligation Duty의 최종 상태를 이행됨으로 설정하려면 모든 consequence Duties도 MUST 이행되어야 합니다.

consequence 속성은 failure 속성의 하위 속성입니다. consequence 속성에 대한 자세한 내용은 Duty 클래스 섹션을 참조하십시오.

예제 사용 사례: 아래 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 속성은 Prohibition이 수행되어 위반된 경우 이행되어야(MUST) 하는 합의된 Duty를 표현합니다. Prohibition action이 수행되면, Prohibition의 위반을 처리하고 그 상태를 위반되지 않음으로 설정하기 위해 모든 remedy Duties가 MUST 이행되어야 합니다. remedy 속성은 failure 속성의 하위 속성입니다.

remedy는 consequence Duty를 포함하는 Duty를 참조해서는 안 됩니다(MUST NOT).

예제 사용 사례: 아래 Agreement는 assigner http://example.com/person:88와 assignee http://example.com/org:99 사이에서, assignee가 Asset http://example.com/data:77을 index하는 것을 금지합니다. assignee가 실제로 target asset을 index하는 경우, remedy는 target asset http://example.com/data:77을 anonymize해야(MUST) 하는 것입니다.

예제 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 Policy Rule 구성

ODRL 정보 모델은 Rules에 대한 속성 관계의 규범적 카디널리티를 제공합니다. 핵심 수준에서 ODRL Rule은 하나의 Asset, 하나 이상의 Party 기능적 역할, 하나의 Action(그리고 잠재적으로 Constraints 및/또는 Duties)에 관련됩니다

Policy Rules 구성은 각 Rule이 ODRL 정보 모델의 카디널리티 요구 사항을 확장하여 Rule이 여러 Assets, Parties 및 Actions와 관련될 수 있도록 허용합니다. 목적은 공통 속성(단일 Rule 안에서)을 결합하여 더 복합적인 Policy를 표현하는 것입니다. 그런 다음 Policy는 그 규범적 atomic 동등 형태로 처리되어야(SHOULD) 합니다.

아래 예제는 더 이상 줄이거나 단순화할 수 없는 Rule, 즉 atomic 수준의 Policy를 보여 줍니다.

예제 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 안에 두 개의 target 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" ]
    }]
}

위 예제는 네 개의 atomic 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에서 atomic Rules를 만들기 위해, 여러 Assets, Parties 및 Actions를 가진 Rules에 대한 ODRL 검증 요구 사항에는 다음이 포함됩니다:

  1. 여러 Assets(동일한 relation을 가진)이 있는 경우, 기존 Rule을 새로 생성된 Rules(이러한 Assets 각각에 대해 하나씩)로 대체하고, 각 Rule에는 하나의 Asset relation만 포함하며 다른 모든 (비-Asset) 속성을 포함합니다
  2. 여러 Parties(동일한 function을 가진)가 있는 경우, 기존 Rule을 새로 생성된 Rules(이러한 Parties 각각에 대해 하나씩)로 대체하고, 각 Rule에는 하나의 Party function만 포함하며 다른 모든 (비-Party) 속성을 포함합니다.
  3. 여러 Actions가 있는 경우, 기존 Rule을 새로 생성된 Rules(이러한 Actions 각각에 대해 하나씩)로 대체하고, 각 Rule에는 하나의 Action만 포함하며 다른 모든 (비-Action) 속성을 포함합니다.

2.7.1 Compact Policy

ODRL Policy는 Policy 수준에서 선언되고 모든 Rules에 공유되며 공통되는 속성을 보유할 수 (MAY) 있습니다. 이는 더 compact한 직렬화를 지원하기 위한 short-cut 방법만을 목적으로 합니다. 이러한 공유 속성은 Policy 수준 속성(Policy Class 섹션에 정의된 것과 같은)으로 해석되어서는 안 됩니다(MUST NOT).

공유될 수(MAY) 있는 속성(아래 그림에 표시됨)은 다음을 포함합니다:

  • 하나 또는 여러 개의 action 속성.
  • 하나 또는 여러 개의 relation 하위 속성(target 등).
  • 하나 또는 여러 개의 function 하위 속성(assignerassignee 등).
ODRL Shared Properties
그림 4 ODRL Shared Properties(SVG 형식으로도 제공됨)

Policy에서 short-cuts를 확장하기 위한 ODRL 검증 요구 사항은 다음과 같습니다:

  1. Policy의 각 Rule에 대해:
    • 관련된 모든 공유 속성(Policy 수준)을 검증합니다.
    • 이 속성들을 Rule에 복제합니다.
  2. Policy 수준에서 선언된 공유 속성을 제거합니다

또한 Policy에서 atomic Rules를 만들기 위한 ODRL 검증 요구 사항(이전 섹션에서 정의됨)을 따릅니다.

compact ODRL Policies는 적합성 처리를 할 때 atomic Policies로 확장하는 것이 권장됩니다(RECOMMENDED).

아래 예제는 그러한 공유 공통 속성이 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 속성이 있는 경우, 프로세서는 첫 번째 Policy를 무효로 간주해야(MUST) 하며, 식별된 Policy를 검색하고 처리해야(MUST) 합니다.

예제 사용 사례: 아래 예제는 누가 Policy를 만들었는지, 설명, Policy가 발행된 시점, Policy가 적용되는 관할권(호주 Queensland의 식별자), 그리고 대체되는 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의 모든 atomic Rules를 상속할 수 있는 상속 메커니즘을 지원합니다. inheritFrom 속성은 부모 Policy에서 상속하는 자식 Policy에서 사용되어야 (MUST) 하며, 부모 Policies의 여러 식별자를 포함할 수 (MAY) 있습니다.

상속을 사용할 때 다음이 적용됩니다:

예제 사용 사례: 아래 (부모) Policy http://example.com/policy:default를 생각해 보십시오. 여기에는 (policy-level) assigner와 target asset policy 문서를 검토해야 하는 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:4444inheritFrom 속성이 (위의) 부모 Policy http://example.com/policy:default를 가리키는 것을 보여 줍니다. 자식 Policy는 Agreement에 대한 target Asset, actions(Asset을 표시하기 위한) 및 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-level 속성이 자식 Policy에 추가되고 Rules가 atomic으로 만들어진 후의 결과 Policy가 아래에 표시됩니다. 원래 자식 Permission rule에는 이제 부모 Policy의 (policy-level) assigner가 포함됩니다. 부모 Obligation rule은 원래 자식 (policy-level) assignee와 함께 갱신된 자식 policy에 나타납니다.

예제 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 상속에 대한 ODRL 검증 요구 사항에는 다음이 포함됩니다:

  1. 자식 Policy는 부모 Policy에 접근하고 갱신된 자식 Policy에 다음을 복제해야(MUST) 합니다:
    • 부모 Policy의 모든 policy-level Assets, Parties, Actions.
    • 모든 profile 식별자.
    • 모든 conflict 속성
    • 부모 Policy의 모든 Rules.
  2. 식별된 각 부모 Policy에 대해 위 절차를 반복합니다.
  3. 최종 갱신된 자식 Policy는 Policy Composition 섹션에 정의된 ODRL 검증 요구 사항을 따라 추가로(atomic Rules로) 확장될 수(MAY) 있습니다.

2.10 Policy 충돌 전략

conflict 속성은 Policies 병합에서 발생하는 충돌 또는 동일 Policy 안의 Permissions와 Prohibitions 사이의 충돌을 해결하기 위한 전략을 설정하는 데 사용됩니다. 충돌은 Policy 상속의 결과로 Policies를 병합할 때, 그리고 결과 Rules가 일관되지 않을 때 발생할 수 있습니다.

conflict 속성은 다음 Conflict Strategy Preference 값(ConflictTerm 클래스의 인스턴스) 중 하나를 가져야(SHOULD) 합니다:

conflict 속성이 명시적으로 설정되지 않은 경우, 기본값 invalid가 사용됩니다.

추가 conflict 속성 값은 ODRL Profiles에 의해 정의될 수(MAY) 있습니다.

Conflict Strategy 요구 사항에는 다음이 포함됩니다:

  1. Policy가 permconflict 속성을 가진 경우, 충돌하는 Permission Rule은 Prohibition Rule을 재정의해야(MUST) 합니다.
  2. Policy가 prohibitconflict 속성을 가진 경우, 충돌하는 Prohibition Rule은 Permission Rule을 재정의해야(MUST) 합니다.
  3. Policy가 invalidconflict 속성을 가진 경우, 충돌하는 Rules는 전체 Policy를 무효화해야(MUST) 합니다.
  4. Policy가 여러 conflict 속성 값(예: Policy 병합 또는 상속 후)을 가지고 있고 충돌하는 Rules가 있는 경우, 전체 Policy는 무효가 되어야(MUST) 합니다.

예제 사용 사례: 두 Policies가 동일한 target Asset http://example.com/asset:1212에 연결되어 있습니다. 첫 번째 Policy http://example.com/policy:0001는 Asset을 use하도록 허용합니다. 두 번째 Policy http://example.com/policy:0002는 Asset의 display를 허용하지만 print는 금지합니다. 두 정책 모두 conflict 속성을 perm으로 설정하여 충돌을 처리하는 방법을 명시적으로 나타냅니다. 따라서 Permissions는 항상 모든 Prohibitions를 재정의합니다. 이 사용 사례에서 print Action은 use Action의 특수화이므로 충돌이 있을 수 있습니다. 그러나 perm conflict 전략은 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 Profiles

3.1 ODRL Profile 목적

ODRL 정보 모델은 정책을 표현하기 위한 핵심 프레임워크와 어휘 역할을 합니다. ODRL Core Vocabulary [odrl-vocab]는 이러한 어휘 용어 집합을 명시합니다. ODRL policy는 ODRL Core Vocabulary를 사용하여 표현될 수 있으며, 이는 최소한으로 지원되는 policy 표현을 나타냅니다.

ODRL Profile은 추가 의미론이 필요한 ODRL policies에서 사용할 수 있는 어휘 용어(ODRL Profile Mechanism 섹션에서 범위가 정해짐)를 제공하도록 정의되어야(MUST) 합니다. ODRL Profile은 ODRL policy 표현에서 지원되어야 하는 어휘 용어를 지정함으로써 커뮤니티의 요구를 명시적으로 충족합니다. 이러한 용어는 명시적으로 정의될 수도 있고 ODRL Common Vocabulary에서 채택될 수도 있습니다.

ODRL Common Vocabulary [odrl-vocab]는 Policy 하위 클래스, Constraint left operands 및 operators, Asset relations, Party functions뿐만 아니라 Permissions, Prohibition 및 Duties를 위한 일반적인 공통 actions 범위를 제공합니다.

3.2 ODRL Profile 적합성

ODRL Policy가 ODRL Profile을 준수하는 경우, ODRL Profile의 식별자(IRI)를 나타내기 위해 profile 속성이 지정되어야(MUST) 합니다. ODRL Policy가 여러 ODRL Profiles를 준수함을 나타내기 위해 여러 식별자가 사용될 수(MAY) 있습니다.

ODRL Policy에서 ODRL Profile(s)이 사용되는 경우, ODRL Processing system은 식별된 ODRL Profile(s)의 의미론을 이해해야(MUST) 합니다. ODRL Processing system이 ODRL Profile identifier(s)를 인식하지 못하는 경우, policy 처리를 중단해야(MUST) 합니다.

3.3 ODRL Profile 메커니즘

ODRL Profile을 만들기 위해, ODRL Core Vocabulary 클래스, 속성 및 인스턴스에 대한 직접 확장은 다음과 같은 방식으로 정의됩니다:

ODRL Profile 정의 예제
추가 Policy 하위 클래스:
ODRL Policy 클래스의 하위 클래스를 만들고, 이를 다른 모든 Policy 하위 클래스(Set 제외)와 서로소로 정의합니다.
ex:myPolicyType rdfs:subClassOf odrl:Policy .
owl:disjointWith :Agreement :Offer, :Privacy, :Request, :Ticket, :Assertion .
추가 Asset 관계:
추상 relation 속성의 하위 속성을 만듭니다.
ex:myRelation rdfs:subPropertyOf odrl:relation .
추가 Party 기능적 역할:
추상 function 속성의 하위 속성을 만듭니다.
ex:myFunctionRole rdfs:subPropertyOf odrl:function .
Rules를 위한 추가 Actions:
Action의 인스턴스를 만들고 includedIn 부모 Action을 정의합니다.
새 Action은 기존 Action 중 어느 것에든 includedIn으로 정의될 수(MAY) 있습니다.
새 Action이 다른 새 Action 또는 기존 Action과 의존성을 형성하는 경우, 두 actions를 implies 속성으로 정의합니다.
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 관계 operators:
Operator 클래스의 인스턴스를 만듭니다.
ex:myOperator a odrl:Operator .
추가 Logical Constraint operands:
추상 operand 속성의 하위 속성을 만듭니다.
ex:myLogicalOp rdfs:subPropertyOf odrl:operand .
추가 Policy Conflict strategies:
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:domainrdfs:range도 정의하는 것이 좋습니다.

각 새 용어에 대해 이름에는 rdfs:label, 공식 정의에는 skos:definition, 사용에 관한 추가 설명에는 skos:note를 사용한 사람이 읽을 수 있는 문서화도 권장됩니다.

3.4 ODRL Core Profile

ODRL Core Profile을 식별해야 하는 상황, 즉 Policy가 ODRL Core Vocabulary만을 준수하는 경우, Core Profile에 대해 다음 식별자가 사용될 수(MAY) 있습니다: http://www.w3.org/ns/odrl/2/core

4. 개인정보 보호 고려 사항

이 섹션은 비규범적입니다.

ODRL 정보 모델은 Parties와 관련된 그러한 데이터를 포함하는 Assets의 존재나 신원과 같은 민감한 개인정보를 직접 표현하지 않습니다. 그러나 ODRL vocabularies(예: ODRL Common Vocabulary [odrl-vocab] 및 ODRL Profiles)는 개인정보와 관련될 수 있는 용어를 정의할 수 있습니다. 이러한 명세는 그러한 ODRL 표현을 생산하거나 소비하는 구현에, policy가 사용되는 방식, 해당 policy가 공유되는 다른 party의 신원, 그리고 policy가 다른 parties와 공유되는 이유를 모든 관련 사용자에게 전달하기 위한 조치를 취하도록 알려야 합니다.

A. 감사의 말

POE Working Group은 ODRL Community Group 및 이전 ODRL Initiative의 기여에 깊이 감사드립니다. 특히 편집자들은 과거 편집 기여에 대해 Susanne Guth, Daniel Paehler 및 Andreas Kasten에게 감사의 뜻을 전합니다.

B. 후보 권고안 종료 기준

이 명세가 제안 권고안으로 진행되려면, 아래에 설명된 각 기능에 대해 최소 두 개의 독립적인 구현이 있어야 합니다. 각 기능은 서로 다른 제품 집합에 의해 구현될 수 있으며, 단일 제품이 모든 기능을 구현해야 한다는 요구 사항은 없습니다.

기능

종료 기준 평가의 목적상, 다음이 기능으로 간주됩니다:

특정 기능의 존재 여부에 따라 동작을 변경하지 않는 소프트웨어는 후보 권고안 단계를 종료하기 위한 목적상 해당 기능을 구현한 것으로 간주되지 않습니다.

C. W3C ODRL Community Group Reports와의 관계

Permissions & Obligations Expression Working Group의 산출물의 기반은 W3C ODRL Community Group이 만든 보고서입니다. ODRL Community Group은 콘텐츠 서비스의 발행, 배포 및 소비를 위한 자산 사용의 혁신적 표현을 지원하기 위해 명세군을 개발했습니다. ODRL Community Group의 최종 산출물은 ODRL Version 2.1 명세였으며, 이는 ODRL의 주요 업데이트이고 원래 ODRL Version 1.1 [odrl](W3C NOTE로 발행됨)을 대체했습니다.

다음 문서는 ODRL Community Group 보고서 시리즈의 일부입니다:

ODRL 정보 모델은 ODRL V2.1 Core Model Community Group report에서 파생되었습니다. W3C Working Group 산출물과 ODRL Community Group Reports 사이의 차이에 대한 세부 사항은 부록에서 관리됩니다. 모든 새로운 ODRL 구현은 Permissions & Obligations Expression Working Group의 산출물을 사용할 것으로 기대됩니다.

D. 이전 버전으로부터의 변경 사항

2016년 7월 21일 첫 공개 작업 초안으로부터의 변경 사항:

2017년 2월 23일 작업 초안으로부터의 변경 사항:

2017년 9월 26일 후보 권고안으로부터의 변경 사항:

2018년 1월 4일 제안 권고안으로부터의 변경 사항:

E. 참고 문헌

E.1 규범 참고 문헌

[odrl-vocab]
ODRL Vocabulary & Expression 2.2. Renato Iannella; Michael Steidl; Stuart Myles; Víctor Rodríguez-Doncel. W3C. 2018년 2월 15일. W3C Recommendation. URL: https://www.w3.org/TR/odrl-vocab/
[RFC2119]
요구 수준을 나타내기 위해 RFC에서 사용하는 핵심 단어. S. Bradner. IETF. 1997년 3월. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[rfc3987]
Internationalized Resource Identifiers (IRIs). M. Duerst; M. Suignard. IETF. 2005년 1월. Proposed Standard. URL: https://tools.ietf.org/html/rfc3987

E.2 정보 참고 문헌

[dcterms]
DCMI Metadata Terms. Dublin Core metadata initiative. 2012년 6월 14일. DCMI Recommendation. URL: http://dublincore.org/documents/dcmi-terms/
[foaf]
FOAF Vocabulary Specification 0.99 (Paddington Edition). 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 Recommendation. URL: https://www.w3.org/TR/json-ld/
[odrl]
Open Digital Rights Language (ODRL) Version 1.1. Renato Iannella. W3C. 2002년 9월 19일. W3C Note. URL: https://www.w3.org/TR/odrl
[odrl2-req]
ODRL Version 2 Requirements. Susanne Guth; Renato Iannella. ODRL Initiative. 2005년 2월 13일. Working Draft. URL: https://www.w3.org/2012/09/odrl/archive/odrl.net/2.0/v2req.html
[odrl21-json]
ODRL Version 2.1 JSON Encoding. 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 Core Model. 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 Ontology. 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 Common Vocabulary. 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 Encoding. Renato Iannella. W3C. 2015년 3월 5일. W3C Community Group Final Specification. URL: https://www.w3.org/community/odrl/xml/2.1/
[vcard-rdf]
vCard Ontology - for describing People and Organizations. Renato Iannella; James McKinney. W3C. 2014년 5월 22일. W3C Note. URL: https://www.w3.org/TR/vcard-rdf/