RightsML: Avoiding ambiguities in the expression of Duties and Constraints

Every effort has been made to ensure that the definitions of terms in the ODRL 2.0 Common Vocabulary and the RightsML vocabulary are clear and unambiguous. However, it is recognised that combinations of terms in complex expressions may be subject to a variety of interpretations. This particularly affects the interpretation of combinations of Duties and Constraints in combination with specific Permissions. This arises primarily due to the deliberate choice of the ODRL Initiative to keep the ODRL 2.0 Core Model as simple as possible, so as to discourage the inclusion of expressions that cannot be interpreted by a machine without reference to data outside the expression. While this makes implementation of ODRL 2.0 more straightforward on end-user devices (e.g. mobile phones), where the ODRL 2.0 expression is being used in basic protection of content against misuse, it does not make it so easy for applications of ODRL 2.0 in a business-to-business context, such as the RightsML use case, where more complex usage constraints need to be expressed unambiguously for processing by more sophisticated and powerful rules engines than can be installed on an end-user device.

An example of such an ambiguity is provided by the following permission:

"It is permitted to make up to five printed copies of the content asset, provided a fee x is paid."

Several ambiguities are evident in such an expression. It is unclear whether the fee must be paid before any copies can be made, or may be paid later. It is also unclear whether the fee must be paid only once, and if so, whether this means that no more than five copies may ever be made. If the fee may be paid more than once, it is not clear whether the fee is per copy, or per occasion on which up to five copies are made.

Such ambiguities arise because in the context of a license or set of terms and conditions that are designed to be interpreted by a human being, any ambiguities can usually be resolved by applying human reason to the potentially ambiguous text in its rightful context. Such ambiguities render a rights expression un-interpretable by a machine. 

It is therefore necessary to ensure that, when determining the correct form of expression for a complex usage term, such as in the above example, any ambiguities are resolved by being as precise and explicit as possible, so that each permission or prohibition can be interpreted in isolation or as part of an explicit chain of linked permissions and prohibitions. 

The ambiguities in the above example might be avoided by re-phrasing the permission:

"It is permitted to make up to five printed copies of the content asset, for which a fee x must be paid in advance. It is permitted to make a further five printed copies, provided an additional fee x is paid in advance. It is prohibited to make more than ten printed copies in total."

This permission can be expressed unambiguously in ODRL 2.0 XML syntax as follows:

<o:policy xmlns:o="http://w3.org/ns/odrl/2" type="http://w3.org/ns/odrl/vocab#set" uid="http://example.org/id/a123456">
  <!-- The permission: allow printing up to 5 times, as long as a printing fee is paid first -->
  <o:permission xmlns:a="http://iptc.org/std/RightsML/2011-10-07/" xmlns:ns="http://example.org/myRightsMLvocabulary">
    <!-- The Content Asset that is the target of the permission -->
    <o:asset uid="ns:myContentAsset" relation="http://w3.org/ns/odrl/vocab#target"/>
    <!-- The action being permitted is printing -->
    <o:action name="o:print"/>
    <!-- The action may be performed less than or equal to 5 times -->
    <o:constraint name="o:count" operator="o:lteq" rightOperand="5"/>
    <!-- The action is permitted as long as a duty is fufilled -->
    <o:duty>
      <!-- The duty action is to make a payment -->
      <o:action name="o:pay"/>
      <!-- The duty entails paying a printing fee -->
      <o:asset uid="ns:printingFee" relation="http://w3.org/ns/odrl/vocab#target"/>
      <!-- The duty is constrained: the action can only occur during the time period whilst the policy is being exercised. -->
      <o:constraint name="o:event" operator="o:lt" rightOperand="o:policyUsage"/>
      <!-- The duty is constrained: the duty must be performed exactly once -->
      <o:constraint name="o:count" operator="o:eq" rightOperand="1"/>
      <!-- The "pay" duty must specify the payeeParty, i.e. who gets paid? -->
      <o:party function="o:payeeParty" uid="http://example.org/id/me"/>
    </o:duty>
  </o:permission>

  <!-- The prohibition: don't print more than 10 copies altogether -->
  <o:prohibition>
    <o:asset uid="ns:myContentAsset" relation="http://w3.org/ns/odrl/vocab#target"/>
    <o:action name="o:print"/>
    <o:constraint name="o:count" operator="o:gt" rightOperand="10"/>
  </o:prohibition>
</o:policy>

Feedback and Questions
We welcome feedback on and questions about RightsML. You may post to the public RightsML Forum. If you are an IPTC member, then you are also entitled to join the private RightsML email discussion list.