There is support in the ODRL Evaluator for odrl:Permission rules.
This is achieved by checking whether all its properties are satisfied (as elaborated in the ODRL Formal Semantics spec).
The properties of the permission that are evaluated against a request and the state of the world are the following:
- Asset: the
odrl:targetof the Permission - Party: the
odrl:assigneeof the Permission (the recipient) - Action: the
odrl:actionof the Permission - Constraints: the
odrl:constraint(s) of the permission.- Note: when there are multiple constraints and no logical constraint is provided, it is assumed that
odrl:andis expected.
- Note: when there are multiple constraints and no logical constraint is provided, it is assumed that
Note that there the permission evaluation does not yet take into account Duty Reports. That is the (pre-)conditions.
There is support in the ODRL Evaluator for odrl:Prohibition rules.
No support (yet) in the ODRL Evaluator for odrl:Duty rules.
Reason being that requests to duties do not seem to make sense. Therefore, we assume that working with duties rely them being part of the State of the World.
Columns of the table elaborated:
- Label: The
rdfs:labelas defined by ODRL - Identifier: The ODRL unique identifier for the term
- Normative: Whether it is part of the official standard or not (hint)
- Deprecated: An element that has been outdated by newer constructs (sometimes superseded by newer version).
- Supported: Whether the ODRL Evaluator supports it.
- Included in: Whether the action is encompassed by an other action. Note that this is a transitive property.
- For more information, checkout ODRL IM §2.4 for
odrl:includedIn
- For more information, checkout ODRL IM §2.4 for
- Exact Match: Whether the action has a similar meaning than the other, i.e., it is an exact match (Symmetric and Transitive)
- For more information, checkout Simple Knowledge Organization System (SKOS) primer §3.1 for
skos:ExactMatch
- For more information, checkout Simple Knowledge Organization System (SKOS) primer §3.1 for
| Label | Identifier | Normative | Deprecated | Supported | Included in | Exact Match |
|---|---|---|---|---|---|---|
| Attribution | cc:Attribution |
❌ | ❌ | ✅ | odrl:use |
|
| Commercial Use | cc:CommercialUse |
❌ | ❌ | ✅ | odrl:use |
|
| Derivative Works | cc:DerivativeWorks |
❌ | ❌ | ✅ | odrl:use |
|
| Distribution | cc:Distribution |
❌ | ❌ | ✅ | odrl:use |
|
| Notice | cc:Notice |
❌ | ❌ | ✅ | odrl:use |
|
| Reproduction | cc:Reproduction |
❌ | ❌ | ✅ | odrl:use |
|
| Share Alike | cc:ShareAlike |
❌ | ❌ | ✅ | odrl:use |
|
| Sharing | cc:Sharing |
❌ | ❌ | ✅ | odrl:use |
|
| Source Code | cc:SourceCode |
❌ | ❌ | ✅ | odrl:use |
|
| Accept Tracking | odrl:acceptTracking |
❌ | ❌ | ✅ | odrl:use |
|
| Ad-hoc sharing | odrl:adHocShare |
? |
✅ | ✅ | ||
| Aggregate | odrl:aggregate |
❌ | ❌ | ✅ | odrl:use |
|
| Annotate | odrl:annotate |
❌ | ❌ | ✅ | odrl:use |
|
| Anonymize | odrl:anonymize |
❌ | ❌ | ✅ | odrl:use |
|
| Append | odrl:append |
? |
✅ | ✅ | odrl:modify |
|
| Append To | odrl:appendTo |
? |
✅ | ✅ | odrl:modify |
|
| Archive | odrl:archive |
❌ | ❌ | ✅ | odrl:use |
|
| Attach policy | odrl:attachPolicy |
? |
✅ | ✅ | cc:Notice |
|
| Attach source | odrl:attachSource |
? |
✅ | ✅ | cc:SourceCode |
|
| Attribute | odrl:attribute |
❌ | ❌ | ✅ | odrl:use |
|
| Commercialize | odrl:commercialize |
? |
✅ | ✅ | cc:CommercialUse |
|
| Compensate | odrl:compensate |
❌ | ❌ | ✅ | odrl:use |
|
| Concurrent Use | odrl:concurrentUse |
❌ | ❌ | ✅ | odrl:use |
|
| Copy | odrl:copy |
? |
✅ | ✅ | odrl:reproduce |
|
| Delete | odrl:delete |
❌ | ❌ | ✅ | odrl:use |
|
| Derive | odrl:derive |
❌ | ❌ | ✅ | odrl:use |
|
| Digitize | odrl:digitize |
❌ | ❌ | ✅ | odrl:use |
|
| Display | odrl:display |
❌ | ❌ | ✅ | odrl:play |
|
| Distribute | odrl:distribute |
❌ | ❌ | ✅ | odrl:use |
|
| Ensure Exclusivity | odrl:ensureExclusivity |
❌ | ❌ | ✅ | odrl:use |
|
| Execute | odrl:execute |
❌ | ❌ | ✅ | odrl:use |
|
| Export | odrl:export |
? |
✅ | ✅ | odrl:transform |
|
| Extract | odrl:extract |
❌ | ❌ | ✅ | odrl:reproduce |
|
| Extract character | odrl:extractChar |
? |
✅ | ✅ | ||
| Extract page | odrl:extractPage |
? |
✅ | ✅ | ||
| Extract word | odrl:extractWord |
? |
✅ | ✅ | ||
| Give | odrl:give |
❌ | ❌ | ✅ | odrl:transfer |
|
| Grant Use | odrl:grantUse |
❌ | ❌ | ✅ | odrl:use |
|
| Include | odrl:include |
❌ | ❌ | ✅ | odrl:use |
|
| Index | odrl:index |
❌ | ❌ | ✅ | odrl:use |
|
| Inform | odrl:inform |
❌ | ❌ | ✅ | odrl:use |
|
| Install | odrl:install |
❌ | ❌ | ✅ | odrl:use |
|
| Lease | odrl:lease |
? |
✅ | ✅ | ||
| Lend | odrl:lend |
? |
✅ | ✅ | ||
| License | odrl:license |
? |
✅ | ✅ | odrl:grantUse |
|
| Modify | odrl:modify |
❌ | ❌ | ✅ | odrl:use |
|
| Move | odrl:move |
❌ | ❌ | ✅ | odrl:use |
|
| Next Policy | odrl:nextPolicy |
❌ | ❌ | ✅ | odrl:use |
|
| Obtain Consent | odrl:obtainConsent |
❌ | ❌ | ✅ | odrl:use |
|
| Pay | odrl:pay |
? |
✅ | ✅ | odrl:compensate |
|
| Play | odrl:play |
❌ | ❌ | ✅ | odrl:use |
|
| Present | odrl:present |
❌ | ❌ | ✅ | odrl:use |
|
| Preview | odrl:preview |
? |
✅ | ✅ | ||
odrl:print |
❌ | ❌ | ✅ | odrl:use |
||
| Read | odrl:read |
❌ | ❌ | ✅ | odrl:use |
|
| Reproduce | odrl:reproduce |
❌ | ❌ | ✅ | odrl:use |
|
| Review Policy | odrl:reviewPolicy |
❌ | ❌ | ✅ | odrl:use |
|
| Secondary Use | odrl:secondaryUse |
? |
✅ | ✅ | ||
| Sell | odrl:sell |
❌ | ❌ | ✅ | odrl:transfer |
|
| Share | odrl:share |
? |
✅ | ✅ | cc:Sharing |
|
| Share-alike | odrl:shareAlike |
? |
✅ | ✅ | cc:ShareAlike |
|
| Stream | odrl:stream |
❌ | ❌ | ✅ | odrl:use |
|
| Synchronize | odrl:synchronize |
❌ | ❌ | ✅ | odrl:use |
|
| Text-to-speech | odrl:textToSpeech |
❌ | ❌ | ✅ | odrl:use |
|
| Transfer Ownership | odrl:transfer |
✅ | ❌ | ✅ | ||
| Transform | odrl:transform |
❌ | ❌ | ✅ | odrl:use |
|
| Translate | odrl:translate |
❌ | ❌ | ✅ | odrl:use |
|
| Uninstall | odrl:uninstall |
❌ | ❌ | ✅ | odrl:use |
|
| Use | odrl:use |
✅ | ❌ | ✅ | ||
| Watermark | odrl:watermark |
❌ | ❌ | ✅ | odrl:use |
|
| Write | odrl:write |
? |
✅ | ✅ | odrl:modify |
|
| Write to | odrl:writeTo |
? |
✅ | ✅ | odrl:modify |
Support for skos:ExactMatch and odrl:includedIn is provided through inferences using simple Notation3 rules
Support for odrl:Asset is provided by either exact matching of the request with the policy or by doing an inference over the Asset Collection.
For doing inferences over Asset Collection, these collections must be supplied by the state of the world.
When this is not the case, no satisfaction of this constraint can be obtained.
To check for membership in an Asset Collection, the odrl:partOf property is used as stated in ODRL IM §2.2.2.
Example rule of Asset when Asset Collection is present:
{
?ruleReport a ?ruleReportType ;
report:rule ?permission ;
report:ruleRequest ?requestPermission ;
report:premiseReport ?targetReport .
?ruleReportType list:in (report:PermissionReport report:RuleReport report:ProhibitionReport) .
?targetReport a report:TargetReport .
?permission odrl:target ?assetCollection .
?assetCollection a odrl:AssetCollection.
?requestPermission odrl:target ?resourceInCollection .
?resourceInCollection odrl:partOf ?assetCollection .
}
=>
{
?targetReport report:satisfactionState report:Satisfied .
} .
Note that the rule is a bit odd. This was also pointed out by Joshua Corenjo in a github issue.
This is analogous to how Asset evaluation works.
Support for odrl:Party is provided by either exact matching of the request with the policy or by doing an inference over the Party Collection.
For doing inferences over Party Collection, these collections must be supplied by the state of the world.
When this is not the case, no satisfaction of this constraint can be obtained.
To check for membership in an Party Collection, the odrl:partOf property is used as stated in ODRL IM §2.2.2.
Rules that implement the constraints can be found in constraints.n3.
This is handled similar to constraints.
No support yet. Documentation and implementation is still required.
Columns of the table elaborated:
- Label: The
rdfs:labelas defined by ODRL - Identifier: The ODRL unique identifier for the term
- Normative: Whether it is part of the official standard or not (hint)
- Deprecated: An element that has been outdated by newer constructs (sometimes superseded by newer version).
- Supported: Whether the ODRL Evaluator supports it.
| Label | Identifier | Normative | Deprecated | Supported |
|---|---|---|---|---|
| Only One | odrl:xone |
✅ | ❌ | ✅ |
| And | odrl:and |
✅ | ❌ | ✅ |
| And Sequence | odrl:andSequence |
✅ | ❌ | ✅ |
| Or | odrl:or |
✅ | ❌ | ✅ |
Columns of the table elaborated:
- Label: The
rdfs:labelas defined by ODRL - Identifier: The ODRL unique identifier for the term
- Normative: Whether it is part of the official standard or not (hint)
- Deprecated: An element that has been outdated by newer constructs (sometimes superseded by newer version).
- Supported: Whether the ODRL Evaluator supports it.
| Label | Identifier | Normative | Deprecated | Supported |
|---|---|---|---|---|
| Equal to | odrl:eq |
✅ | ❌ | ✅ |
| Greater than | odrl:gt |
✅ | ❌ | ✅ |
| Greater than or equal to | odrl:gteq |
✅ | ❌ | ✅ |
| Has part | odrl:hasPart |
✅ | ❌ | ❌ |
| Is a | odrl:isA |
✅ | ❌ | ✅ |
| Is all of | odrl:isAllOf |
✅ | ❌ | ❌ |
| Is any of | odrl:isAnyOf |
✅ | ❌ | ✅ |
| Is none of | odrl:isNoneOf |
✅ | ❌ | ✅ |
| Is part of | odrl:isPartOf |
✅ | ❌ | ❌ |
| Less than | odrl:lt |
✅ | ❌ | ✅ |
| Less than or equal to | odrl:lteq |
✅ | ❌ | ✅ |
| Not equal to | odrl:neq |
✅ | ❌ | ✅ |
Columns of the table elaborated:
- Label: The
rdfs:labelas defined by ODRL - Identifier: The ODRL unique identifier for the term
- Normative: Whether it is part of the official standard or not (hint)
- Deprecated: An element that has been outdated by newer constructs (sometimes superseded by newer version).
- Supported: Whether the ODRL Evaluator supports it.
| Label | Identifier | Normative | Deprecated | Supported |
|---|---|---|---|---|
| Absolute Asset Position | odrl:absolutePosition |
❌ | ❌ | ❌ |
| Absolute Asset Size | odrl:absoluteSize |
❌ | ❌ | ❌ |
| Absolute Spatial Asset Position | odrl:absoluteSpatialPosition |
✅ | ❌ | ❌ |
| Absolute Temporal Asset Position | odrl:absoluteTemporalPosition |
✅ | ❌ | ❌ |
| Count | odrl:count |
❌ | ❌ | ❌ |
| Datetime | odrl:dateTime |
❌ | ❌ | ✅ |
| Delay Period | odrl:delayPeriod |
❌ | ❌ | ❌ |
| Delivery Channel | odrl:deliveryChannel |
❌ | ❌ | ❌ |
| Device | odrl:device |
✅ | ✅ | ❌ |
| Elapsed Time | odrl:elapsedTime |
❌ | ❌ | ❌ |
| Event | odrl:event |
❌ | ❌ | ❌ |
| File Format | odrl:fileFormat |
❌ | ❌ | ❌ |
| Industry Context | odrl:industry |
❌ | ❌ | ❌ |
| Language | odrl:language |
❌ | ❌ | ❌ |
| Media Context | odrl:media |
❌ | ❌ | ❌ |
| Metered Time | odrl:meteredTime |
❌ | ❌ | ❌ |
| Payment Amount | odrl:payAmount |
❌ | ❌ | ❌ |
| Asset Percentage | odrl:percentage |
❌ | ❌ | ❌ |
| Product Context | odrl:product |
❌ | ❌ | ❌ |
| Purpose | odrl:purpose |
❌ | ❌ | ✅ |
| Recipient | odrl:recipient |
❌ | ❌ | ❌ |
| Relative Asset Position | odrl:relativePosition |
❌ | ❌ | ❌ |
| Relative Asset Size | odrl:relativeSize |
❌ | ❌ | ❌ |
| Relative Spatial Asset Position | odrl:relativeSpatialPosition |
✅ | ❌ | ❌ |
| Relative Temporal Asset Position | odrl:relativeTemporalPosition |
✅ | ❌ | ❌ |
| Rendition Resolution | odrl:resolution |
❌ | ❌ | ❌ |
| Geospatial Named Area | odrl:spatial |
❌ | ❌ | ❌ |
| Geospatial Coordinates | odrl:spatialCoordinates |
✅ | ❌ | ❌ |
| System | odrl:system |
✅ | ✅ | ❌ |
| System Device | odrl:systemDevice |
✅ | ❌ | ❌ |
| Recurring Time Interval | odrl:timeInterval |
❌ | ❌ | ❌ |
| Unit Of Count | odrl:unitOfCount |
❌ | ❌ | ❌ |
| Version | odrl:version |
❌ | ❌ | ❌ |
| Virtual IT Communication Location | odrl:virtualLocation |
❌ | ❌ | ❌ |
In ODRL there is some notion about broader and narrower concepts (using skos notation). To the best of our knowledge, no additional reasoning support can be added.
odrl:spatial- broader (transitive) than
odrl:spatialCoordinates
- broader (transitive) than
odrl:absolutePosition- broader (transitive) than
odrl:absoluteSpatialPosition - broader (transitive) than
odrl:absoluteTemporalPosition
- broader (transitive) than
odrl:relativePosition- broader (transitive) than
odrl:relativeSpatialPosition - broader (transitive) than
odrl:relativeTemporalPosition
- broader (transitive) than
There is no support for the odrl:conflict property.
The reasons are two-fold:
- There is no terminology in the Compliance Report Model at the
report:PolicyReportlevel regarding conflicts in its rules. - ODRL IM 2.2 does not describe (in §2.10) how to merge multiple policies when their
odrl:conflictproperty is differenent.- E.g. how should two policies be merged when one policy contains an
odrl:permstrategy, while the otherodrl:prohibit? If that were to be described in ODRL, then evaluation can be implemented fairly easily.
- E.g. how should two policies be merged when one policy contains an