NOTE: To enable interactive browsing of XML, this specification uses an HTML version that leverages the XML access functionality provided by the W3C XPath recommendation. For this reason, you need to view these HTML documents with a browser that supports that recommendation (for example, Internet Explorer Version 6.0).
Copyright © 2001-2002 ContentGuard Holdings, Inc. All rights reserved. "ContentGuard" is a registered trademark and "XrML", "eXtensible rights Markup Language", the XrML logo, and the ContentGuard logo are trademarks of ContentGuard Holdings, Inc. All other trademarks are properties of their respective owners.
XrML 2.1 Specification Terms of Use
READ THESE TERMS OF USE ("AGREEMENT") CAREFULLY BEFORE USING THE XrML 2.1 SPECIFICATION ("SPECIFICATION"). ATTEMPTING TO USE ANY PART OF THE SPECIFICATION WILL INDICATE THAT YOU HAVE READ, UNDERSTOOD, AND ACCEPTED THESE TERMS. DO NOT PROCEED IN ANY SUCH MANNER UNLESS YOU ARE ABLE AND WILLING TO ENTER INTO AND COMPLY WITH THIS AGREEMENT. CONTENTGUARD STRONGLY RECOMMENDS THAT YOU KEEP A COPY OF THIS AGREEMENT IN A SAFE PLACE FOR FUTURE REFERENCE. IF YOU DO NOT AGREE TO THESE TERMS, THEN DO NOT USE OR COPY THE SPECIFICATION AND IMMEDIATELY DESTROY ANY COPY OF THE SPECIFICATION YOU MAY HAVE OBTAINED.
This specification defines the eXtensible rights Markup Language (XrML) Standard Extension, a set of commonly useful extensions to the XrML Core.
Feedback and suggestions are welcome. Please report errors and provide comments on this document to the current editor at http://www.xrml.org/xrml_comments.asp.
This document builds upon the XrML Core 2.1 Specification. It defines a set of concepts that are generally and broadly useful and applicable to XrML2 usage scenarios, but which aren't necessarily at the heart of XrML2 semantics.
These concepts are broadly classified, according to the purpose that they serve, into conditions, payment notions, properties, and revocation extensions.
This document follows the same keyword conventions as the XrML Core 2.1 Specification.
This document follows the same schema conventions as the XrML Core 2.1 Specification.
The standard extension schema defines several extensions of the type Condition
. Of these, six extensions require a notion of state. To facilitate the definition of these extensions, a type StatefulCondition
is defined as well. Condition
extensions are constructed either by extending the type StatefulCondition
or by directly extending the type Condition
. What it means for a Condition
extension to be satisfied is left to its description.
Some Condition
s may be tied to a notion of state. For example, the number of times some content may be rendered can be bounded by some value. To cover such usages, standard extension defines a type called StatefulCondition
. The type is an extension of the type Condition
defined in the core. It includes a child element serviceReference
, which indicates a service to be used to manage state. The details of this interaction is necessarily service-specific and so is not discussed here.
StatefulCondition
A pattern that identifies a set of ServiceReference
s using pattern matching by dereferencing their values.
StateReferenceValuePattern
A StateReferenceValuePattern
p matches a ServiceReference
if and only if it can be determined that the present state of the service can be represented by the children of p. The means for determining this is necessarily service-specific and so is not discussed here.
The element stateReferenceValuePattern
is typically used with the obtain
element. When the Right
to obtain
a grant
with a StatefulCondition
is issued, then (to give the user exercising the obtain
Right
an idea about the initial state a certain serviceReference
will happen to have) a stateReferenceValuePattern
is created to make such an indication. This ensures that only serviceReference
s in the proper state will appear in the obtained grant
.
Indicates a limit on the number of times that certain exercises may occur.
ExerciseLimit
An ExerciseLimit
is satisfied if the current exercise is one of n allowed exercises, where these allowed exercises (and hence the number n) are managed by the specified serviceReference
.
Indicates that the specified service must give its approval for this Condition
to be satisfied.
SeekApproval
A SeekApproval
is satisfied if the specified serviceReference
allows it to be.
Indicates that exercises must be tracked with a designated tracking service.
TrackReport
A TrackReport
c is satisfied while either
serviceReference
orcommunicationFailurePolicy
is "lax" andRepresents a Condition
based on some stateful integral value.
TrackQuery
A TrackQuery
is satisfied if the stateful integral value managed by the specified serviceReference
is within the range as specified by the two child elements notMoreThan
and notLessThan
.
TrackQuery
is commonly used to predicate the possibility of one exercise on the occurrence (or non-occurrence) of other exercises. In particular, a trackReport
applied to one exercise might cause the value of a trackQuery
applied to another exercise to increase by one, thus possibly changing the satisfaction of the trackQuery
.
Represents an interval of allowed exercising that begins with the first exercise.
ValidityIntervalFloating
A ValidityIntervalFloating
is satisfied during the interval of allowed exercising, where that interval (and hence both its start and duration) are managed by the specified serviceReference
.
A ValidityIntervalFloating
Condition
is useful to express floating intervals that become fixed on first use. Often times (either for business model reasons or to minimize the amount of state keeping done by a compact device) it is also useful to be able to express floating intervals that get fixed during some License
issuance step. For this reason, the standard extension defines two types for use in conjunction with ValidityInterval
(from the core) to accomplish this goal. The ValidityIntervalDurationPattern
pattern and ValidityIntervalStartsNow
Condition
are useful in this respect when placed on a Grant
to Issue
.
ValidityIntervalDurationPattern
A ValidityInterval
v matches a ValidityIntervalDurationPattern
d if the duration of time represented by v is equal to d/duration
.
ValidityIntervalStartsNow
A ValidityIntervalStartsNow
Condition
c is said to be satisfied at time t if all of the following hold:
backwardTolerance
is present, then c/validityInterval
/notBefore
is present and greater than or equal to the result of t set backwards by the value c/backwardTolerance
.forwardTolerance
is present, then c/validityInterval
/notBefore
is either forwardTolerance
.Represents a constraint on the cumulative exercise time over all exercises.
ValidityTimeMetered
Unlike ValidityIntervalFloating
, ValidityTimeMetered
deals with a length of time that is not necessarily contiguous. A ValidityTimeMetered
is satisfied at time t if t lies within the intervals of time that make up the cumulative time duration, where those intervals are managed by the specified serviceReference
. If the quantum
child of a ValidityTimeMetered
is specified, it specifies the minimum length that one can expect each such interval to have.
Indicates a validity time window that recurs periodically. For example, this condition can be used to express time windows such as "every weekend" or "the second week of every month".
ValidityTimePeriodic
A locally defined element of type xsd:dateTime
. Indicates the start of the time, typically date, from which the periods designated in this right become meaningful.
A locally defined element of type xsd:duration
. This indicates the frequency with which the exercise time window recurs.
A locally defined element of type xsd:duration
. This is used to indicate a period of latency before beginning each time window. When this value is positive then it directly specifies the duration of latency. When this value is negative, then the duration of latency is equal to the length of period minus the absolute value specified herein.
A locally defined element of type xsd:duration
. This indicates the actual length of the time window.
A locally defined element of type xsd:integer
. Indicates a bound on the number of time windows. This element is optional.
Suppose c is a ValidityTimePeriodic
Condition
and let
start
,period
,phase
,duration
, andperiodCount
then c is satisfied at time t if s + i*p + h <= t <= s + i*p + h + d for some i satisfying all of the following:
Indicates that there is a fee for the exercise.
Fee
This element of type paymentAbstract
is abstract. It is meant to be substitutable. For more details and examples of extensions see paymentAbstract
.
This locally defined optional element contains a paymentAbstract
element. It specifies the minimum amount due. If the total amount paid is less than the value of this element, a new payment in the amount of the difference is due.
This locally defined optional element contains a paymentAbstract
element. It specifies the maximum amount due. If the total amount paid is greater than the value of this element, a new credit in the amount of the difference is due. If the total amount paid is equal to the value of this element all other payments resulting from this Fee
are void until the value of max
increases.
This locally defined element is of type AccountPayable
. It indicates the party to whom, and the means by which, payment is to be made. To allow for the rare cases where this is discovered from context, this element is left optional.
AccountPayable
is used to identify a party to whom one can transfer a sum of money, along with an identification of the means by which such a transfer is to take place. While there are undoubtedly many ways this can be done, two ways are explicitly defined. The type AccountPayable
is defined as a choice between three options. The first, a paymentService
, identifies the party to whom the payment is made. The second option, aba
, identifies a bank in the US banking system. As a provision to support other forms of banking mechanisms, an option is made for specifying other banking means as well. This is realized by the xsd:any
particle.
AccountPayable
The locally defined element paymentService
contains a serviceReference
. This identifies the party to whom the payment is to be made, and the interface to the service indicates the necessary payment mechanism.
The locally defined element identifies an account within a US banking institution by means of conventions established by the American Banking Association. It defines two child elements, institution and account. The banking institution is identified by its nine-digit banking routing number using the institution. The account within that institution is identified with account.
A Grant
can predicate an exercise on a Fee
. Typically Fee
s involve a payment and a designation of the party the payment is made to. Options about what form the payment should take (such as periodic or one-time or usage-based or metered) are reflected by the paymentAbstract
element. A child element to
of type AccountPayable
is used to characterize both the payment mechanism and the payee.
There are two other optional elements. The optional min
price specification indicates the minimum price to be paid if the right is exercised at all. The optional max
price specification refers to the maximum price to be paid. When both max
and min
price specifications are given, the max
price specification dominates.
Suppose that the Fee
s in paymentAbstract
, min
, and max
independently amount to p, min, and max respectively due for the exercise as defined by their respective paymentAbstract
extensions. Then, let x be
Then the Fee
Condition
is satisfied if and only if the amount x is paid to the entity identified by to
for this purpose.
Not all forms of paymentAbstract
extensions are directly comparable. For the Fee
Condition
to be sensibly evaluated, it is necessary that the extensions of the paymentAbstract
elements in paymentAbstract
, min
, and max
are comparable. In the standard extension, the paymentAbstract
extensions either contain serviceReference
s or they do not. Those that do are considered stateful. Stateful paymentAbstract
extensions are not comparable with stateless ones, so it is required that the paymentAbstract
extensions in paymentAbstract
, min
, and max
are either all stateful or all stateless. The corresponding Fee
Condition
s are respectively termed as stateful and stateless.
Indicates a constraint on the geographic or virtual space where the exercised may occur.
Territory
This element defines inline the optional elements region
, country
, state
, city
, postalCode
and street
that designate a physical location.
This element designates an ISO 3166 country subdivision.
This element designates an ISO 3166 country.
This element is a two-letter code for US states.
This element designates a city.
This element designates a postal code (e.g. a zip code).
This element designates a street.
This element defines inline an element uri
to designate a digital location.
This element, has type xsd:anyUri
and can be any URI that designates a digital location.
Since it may be desirable to have an exercise occur in more than one location, physical or digital, the content model for Territory
allows for an unbounded number of children.
A Territory
is satisfied if the exercise can be shown to be occurring in at least one of the locations or domains.
The notion of payment is abstracted in the Standard Extension. The element paymentAbstract
has type PaymentAbstract
. Both are conceptually abstract.
In place of PaymentAbstract
, more concrete forms of payment (PaymentFlat
, BestPriceUnder
, CallForPrice
, Markup
, etc.) are to be used. The standard extension defines seven different kinds of payments. Each of these defines its own notion of when a payment has been made that works toward a Fee
Condition
being satisfied, as described in the section on Fee
.
PaymentAbstract
An amount of money in a designated currency (using ISO 4217).
Cash
Specifies a payment due upon exercising. The contained serviceReference
is used to determine if the fee has already been paid and to keep record of payment. The contained rate
specifies the Cash
value of the payment to be made.
PaymentFlat
Specifies a payment due for each time interval during which an exercise occurs. The contained rate
and per
elements together specify the charge per period. The contained by
element indicates the quantum by which time is measured for the computation of the amount. The contained phase
element is used for rounding purposes; it indicates what portion of time may elapse before somone is billed for the whole duration defined with by
.
PaymentMetered
The element phase
is used for rounding the units of time that are smaller than the duration described by the by
element: a value of zero would have the effect of rounding up while a value equal to the value of by
would have the effect of rounding down.
Formally, after normalilzing all of the duration values to seconds, suppose the rate
is r, per
in seconds is p, by
in seconds is b, and phase
in seconds is h. Then, if the interval of exercise of the right is t seconds, then the payment due is given by the expression r * (p/b) * ( floor(
t/b
) + round ) where round is 1 if t%b is greater than h and is 0 otherwise.
Specifies a payment due for each time interval during which the ability to exercise is desired. The enclosed serviceReference
is used to keep track of the time through which payment has been made. The contained rate
and per
elements together specify the charge per period.
PaymentPerInterval
Specifies a payment due each time a right is exercised. The contained rate
and initialNumberOfUses
elements together specify the charge per package of uses. If initialNumberOfUses
is absent, it defaults to 1. The serviceReference
is used to keep track of the number of prepaid uses remaining.
PaymentPerUse
Specifies the maximum price that ultimately must be paid without specifying the ultimate price exactly. The ultimate price is determined through a later, unspecified settlement mechanism. While max
overrides min
if max
is less than min
, min
overrides BestPriceUnder
if BestPriceUnder
is less than min
. If an implementation cannot determine the ultimate price exactly, it is free to voluntarily take the payment contained herein as the ultimate price.
BestPriceUnder
Identifies an entity with whom a price must be negotiated before exercising. Any one of the specified serviceReference
s can be used to negotiate a price. Unlike BestPriceUnder
, price determination is required for CallForPrice
.
CallForPrice
Specifies a fee due each time some other fees are due. The rate
element indicates the fractional rate at which markup is calculated.
Markup
Let m be a Markup
. Then m requires the payment of any m/fee
s and m/feeForResource
s which may be present therein. In addition, for each such payment, an additional payment equal to the product of that payment and the value m/rate
is due.
The presence of a feeForResource
implies a context in which multiple resources are being used simultaneously. The total price for using the specified m/feeForResource
/resource
t is calculated (and such amount is paid, as defined by any License
s for that t). The price is then marked up by the m/rate
, and the markup is paid as specified by the containing Fee
element. If t is not used in conjunction with this exercise, then m is not fulfilled and the containing Fee
is not satisfied.
A property indicating a name from some name space.
Name
Name
is an extension of the type PropertyAbstract
, and, as such, can be used along with the PossessProperty
Right
to associate a Name
with a Principal
. (This is useful for modeling the X.509 certificate-like binding of names to principals). Such associations allow (other) Grant
s to be made to, colloquially speaking, Principal
s described by their Name
s.
Both the element name
and type Name
are conceptually abstract.
An Internet email address (per rfc822/rfc2822) associated with the entity.
EmailName
A name in the DNS name space, with trailing period omitted. For example, "xyz.com"
DnsName
A name by which an entity is colloquially known. Intended to be used as the CN name part from X400.
CommonName
The subject name of some X509 certificate associated with the entity. Intended to address legacy interoperability issues involving X509 certificates.
X509SubjectName
A pattern that identifies a set of X509 subject names using pattern matching.
X509SubjectNamePattern
X509SubjectNamePattern
is not a derivation of the type Name
. Rather, it is a derivation of the type ResourcePatternAbstract
. It matches any X509SubjectName
for which it is the root of the X509SubjectName
tree. This element can be used to enforce constraints similar to the X509 specification.
Identifies a dsig:SignatureValue
that can be Revoke
d. The dsig:SignatureValue
can be identified literally or by reference. In the latter case, the result of dereferencing the reference must be of type dsig:SignatureType
; the dsig:SignatureValue
able to be Revoke
d is the one dsig:SignatureValue
therein.
Revocable
A Revocable
is a Resource
for use with the Revoke
Right
.
xrml21-xrml2sx.xsd (normative)