[dispatch] Conceptual proposal for extensibility of Alert-Info URNs

"WORLEY, Dale R (Dale)" <dworley@avaya.com> Tue, 15 June 2010 17:28 UTC

Return-Path: <dworley@avaya.com>
X-Original-To: dispatch@core3.amsl.com
Delivered-To: dispatch@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 1AA7B3A6887 for <dispatch@core3.amsl.com>; Tue, 15 Jun 2010 10:28:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.556
X-Spam-Level:
X-Spam-Status: No, score=-1.556 tagged_above=-999 required=5 tests=[AWL=0.443, BAYES_50=0.001, GB_I_LETTER=-2]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ymmm120tyvgQ for <dispatch@core3.amsl.com>; Tue, 15 Jun 2010 10:28:08 -0700 (PDT)
Received: from p-us1-iereast-outbound-tmp.us1.avaya.com (p-us1-iereast-outbound-tmp.us1.avaya.com [135.11.29.16]) by core3.amsl.com (Postfix) with ESMTP id CA7FF3A687C for <dispatch@ietf.org>; Tue, 15 Jun 2010 10:28:07 -0700 (PDT)
X-IronPort-AV: E=Sophos;i="4.53,421,1272859200"; d="scan'208";a="20734173"
Received: from unknown (HELO co300216-co-erhwest.avaya.com) ([198.152.7.5]) by p-us1-iereast-outbound-tmp.us1.avaya.com with ESMTP; 15 Jun 2010 13:28:11 -0400
X-IronPort-AV: E=Sophos;i="4.53,421,1272859200"; d="scan'208";a="483651417"
Received: from dc-us1hcex1.us1.avaya.com (HELO DC-US1HCEX1.global.avaya.com) ([135.11.52.20]) by co300216-co-erhwest-out.avaya.com with ESMTP; 15 Jun 2010 13:28:10 -0400
Received: from DC-US1MBEX4.global.avaya.com ([169.254.2.188]) by DC-US1HCEX1.global.avaya.com ([2002:870b:3414::870b:3414]) with mapi; Tue, 15 Jun 2010 13:28:10 -0400
From: "WORLEY, Dale R (Dale)" <dworley@avaya.com>
To: "dispatch@ietf.org" <dispatch@ietf.org>
Date: Tue, 15 Jun 2010 13:27:59 -0400
Thread-Topic: Conceptual proposal for extensibility of Alert-Info URNs
Thread-Index: AQHLDLAZz4CvE4x2vE2wuJFs46Ydnw==
Message-ID: <CD5674C3CD99574EBA7432465FC13C1B21FD73619B@DC-US1MBEX4.global.avaya.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
acceptlanguage: en-US
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: [dispatch] Conceptual proposal for extensibility of Alert-Info URNs
X-BeenThere: dispatch@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: DISPATCH Working Group Mail List <dispatch.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/dispatch>, <mailto:dispatch-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/dispatch>
List-Post: <mailto:dispatch@ietf.org>
List-Help: <mailto:dispatch-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dispatch>, <mailto:dispatch-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 15 Jun 2010 17:28:10 -0000

[As I am the chair-elect for this topic, I now have to identify that I
am proposing this as an individual contributor-elect.]

This is a conceptual proposal for for specifying Alert-Info URNs.  The
problem that I am attacking is extensibility -- because the practical
application of the Alert-Info URNs will be as successors of the
ring tone and ringback tone implementations of innumerable existing
telephone systems, we expect the uses of Alert-Info URNs to be subject
to much extension.  The primary problem is to provide a framework
which allows such extensions to be implemented without damaging
interoperability between systems whose Alert-Info usage has not been
coordinated a priori.  A secondary problem is to ensure that the
framework can be implemented efficiently in practical situations.

The basis of this proposal has been stolen from previous contributors
to the Alert-Info work.

Since this is a conceptual proposal, I am not particular about the
syntax to be used -- the syntax shown here is just to illustrate the
concepts.  What I am proposing is a system of semantics; many variant
syntaxes can be used to implement it with differing tradeoffs.

* Terminology

We say that a "specifier" sends an "indication" (a URN in an
Alert-Info header) to a "renderer" which then "renders" a "signal"
based on the indication to a human user.  A "category" is a
characteristic whose "values" can be used to classify indications.

* Requirements and non-requirements

Requirement A:  Indications must be able to represent a wide variety
of signals, which have many largely-orthogonal characteristics.  (See
draft-liess-dispatch-alert-info-urns-00 section section 2 for a
partial list, and Paul Kyzivat's message for another partial list.)

Requirement B:  Indications include subsets which have distinctly
different semantics, that is, they form disjoint "value spaces".  For
example, some indications should describe the semantics of the
signaling situation whereas others should describe the audio
characteristics of the signal.  This implies that there is no single
set of categories that can be used as independent coordinates of the
value-space of indications.

Requirement C:  The set of indications must be able to support
extensibility by a wide variety of organizations that are not
coordinated with each other.  Extensions must be able to:

- add further values to any existing category

- add further categories that are orthogonal to existing categories

- semantically subdivide the meaning provided by any existing
  indication

- add further "value spaces" of indications whose semantics are not
  related to existing indications, and thus, whose categories differ
  from and do not interact with existing categories

Requirement D:  An indication is transmitted from a specifier to a
renderer, which must base its rendering decision only on the
indication.  In particular, there is no multi-message negotiation
process or carrying of context from one indication to the next.

Requirement E:  The renderer may be customized in ways that limit the
set of signals that it can render, or it may be provided with a set of
signals that have uncommon semantics.  (The canonical example is a UA
for the hearing-impaired.)  (By Requirement D, the renderer has no way
of transmitting this fact to the specifier.)

Requirement F:  If the specifier and the renderer have designs that
are properly coordinated, the indications must be able to reliably
carry all extensions that are supported in the coordinated designs.

Requirement G:  In any situation, the renderer must be able to perform
close to the best possible rendering that it could do even the
specifier had specific knowledge of the renderer's capabilities.

Non-Requirement H:  In any situation other than that of Requirement F,
we do not require the render to perform the best possible rendering.

* Categories, values, and indicators

There are a theoretically infinite number of categories.  Each
category is named by a word, such as:

    reason
    priority
    source
    duration

The values of each category conceptually form a tree.  The root of the
tree is the universal, or most general, value.  It is denoted by the
the category name, and represents the universe of all possibilities.
Each further subdivision of a value is specified by adding a hyphen
and another word.  Thus, within the category "state" we have values:

    state
    state-unknown
    state-waiting
    state-on.call
    state-away

(Here we pretend '.' is a letter.)

The first of these values specifies no specific information.  The
following values specify subdivisions of the semantic space.  The
value "state-waiting" can be further subdivided based on the
importance of the call being waited upon:

    state-waiting-standard
    state-waiting-vip

An indication is assembled by providing a sequence of values (which
implicitly specify their categories), separated by colons, in order of
importance.  That is, the first value is the one that should be
rendered as accurately as possible; within that constraint, the second
value should be rendered as accurately as possible; etc.

For example, we can assemble the following indications:

    an internal, priority call
        source-internal:priority-high

    priority call waiting
        reason-call.waiting:priority-high

    short Albanian auto-callback
        reason-auto.callback:duration-short:locale-al

(The specific examples are taken from
draft-liess-dispatch-alert-info-urns-00 section 4.5, the specific
categories and values are adapted from Paul Kyzivat's message.)

All of these indications are easily extensible.  For instance, if
Albania has two service providers with different signal tones, we
could specialize the last indication into:

    short Albanian auto-callback, service provider A
        reason-auto.callback:duration-short:locale-al-sp.A

    short Albanian auto-callback, service provider B
        reason-auto.callback:duration-short:locale-al-sp.B

Due to the rule that the earlier values in an indicator have more
influence than latter values, there is a subtle difference between:

    source-internal:priority-high
    priority-high:source-internal

in regard to which aspect of the indication it is more important to
render.

* Selecting the signal based on an indication

Having defined a universe of indications with infinite extensibility,
we now need to show that a practical device can interpret indications
to select from a limited set of signals.  To do this, I will describe
a very general algorithm for doing this selection in all possible
situations.  Note that in practical cases (where all the signals that
can be rendered can be described by a small number of values of a
small number of categories) the algorithm will operate in a reasonably
rapid and simple way.

To start with, we assume that the renderer possesses a set of
available signals.  This set will naturally be partially determined by
the renderer itself, but the set may also be affected by the
configuration of the renderer (e.g., hearing-impaired mode vs. hearing
mode) and the context of the indication (e.g., ring tone vs. ringback
tone situations).  The set may be finite or infinite.  Of course, if
the set is infinite, it can't be represented literally, but the
renderer necessarily has a method of representing the set and its
possible subsets.  A finite set of available signals can be enumerated
directly, or represented in some other way.

Each available signal is described by the values of a set of
categories.  We assume that the renderer only knows the values for a
finite set of categories; for all other categories, all available
signals implicitly have the "universal", root value.

Informally, the algorithm proceeds as follows:

    Load a set of "acceptable signals" with all available signals.

    Process the words in the values in the indication from left to right.
    As each additional word is considered, consider the portion of the
    value that has been examined, and remove from the acceptable set all
    signals which are inconsistent with that value, in that their value
    for that category is not equal to or below the indication's value (as
    processed so far).

        If after processing a word, one or more signals remain in the
        acceptable set, continue processing the next word.

        If after processing a word, no signals remain in the
        acceptable set, restore the previous state of the acceptable
        set and continue with the next value in the indication.

    At the end of processing, the acceptable set will contain one or more
    signals.  Choose from among them according to some sort of priority
    system.

More formally, an indication is processed by:

      initialize the acceptable set of signals with all available signals

      for each value in the indication (going left to right):

          for each word in the value (going left to right, which is down
          the tree of values):

              if there are acceptable signals which have a value of the
              category which is equal to or below the indication value as
              seen so far:

                  delete all acceptable signals which do not have such a
                  value, and continue processing this value

              else

                  cease processing this value and continue with the next
                  value

      the acceptable set will contain at least one signal.  Choose from
      among the acceptable signals via some priority scheme.

Let me work through an example.

Let us suppose that the renderer implements three categories:

    reason
        reason-normal
        reason-call.waiting
        reason-forward
        reason-auto.callback
        reason-recall.hold
        reason-recall.transfer

    duration
        duration-normal
        duration-short
        duration-long

    locale
        locale-fm
        locale-al
            locale-al-sp.A
            locale-al-sp.B

Let us suppose that the renderer has signals for all combinations of
the leaf values of these categories, except that for historical
reasons if "reason" has a non-universal value, "default" must be
universal, and vice-versa; the signals (copied from the PSTN service
providers) do not allow signaling a non-standard reason with a
non-standard duration.  So the allowed combinations of these two
values are:

    reason-normal & duration
    reason-call.waiting & duration
    reason-forward & duration
    reason-auto.callback & duration
    reason-recall.hold & duration
    reason-recall.transfer & duration
    reason & duration-normal
    reason & duration-short
    reason & duration-long

There are signals that combine each of these with "locale-fm",
"locale-al-sp.A", and "locale-al-sp.B".

To process the indication
"reason-auto.callback:duration-short:locale-al-sp.A", the renderer
first loads the acceptable signal set with all 27 of its signals, and
then examines the indication word by word:

- "reason"

Removes no signals from the set.

- "reason-auto.callback"

Reduces the set to

    reason-auto.callback & duration & locale-fm
    reason-auto.callback & duration & locale-al-sp.A
    reason-auto.callback & duration & locale-al-sp.B

- "duration"

Removes no signals from the set.

- "duration-short"

Since no signals in the set have a value at or under this value, no
change is made and the processing of this value ends.

- "locale"

Removes no signals from the set.

- "locale-al"

Reduces the set to

    reason-auto.callback & duration & locale-al-sp.A
    reason-auto.callback & duration & locale-al-sp.B

- "locale-al-sp.A"

Reduces the set to

    reason-auto.callback & duration & locale-al-sp.A

The end of the indication is reached, and since only one signal remains
in the set, it is rendered.

Now, if the indication was less specific,
"reason-auto.callback:duration-short:locale-al", at the end the
acceptable set would be

    reason-auto.callback & duration & locale-al-sp.A
    reason-auto.callback & duration & locale-al-sp.B

and the renderer would have to choose between these two signals in
some way.

Let us suppose that the renderer implemented a further category:

    mode
        mode-visual
        mode-audio

and applied the value "mode-audio" to all of the above signals, but
only added the following signals with "mode-visual":

    reason & duration-normal & locale & mode-visual
    reason & duration-short & locale & mode-visual
    reason & duration-long & locale & mode-visual

That is, the only variation provided is in "duration".

Then the indication "reason-auto.callback:duration-short:locale-al"
would generate the same acceptable set as above, that is, there would
be no "mode-visual" signals.  The indication
"mode-visual:reason-auto.callback:duration-short:locale-al" would
generate the acceptable set:

    reason & duration-short & locale & mode-visual

This is because the indication implies that matching "mode" is more
important than matching "reason" and "duration".  Once the selection
for "mode-visual" has been done, no further selection can be done on
"reason", but "duration-short" can be acted upon.

In practice, for use with a hearing-impaired user, the initial set of
signals would be restricted to those with "mode-visual".  In this
example, we have assumed that the user considers "mode-visual" and
"mode-audio" to be equally acceptable.

If we configured the renderer to only use "mode-visual" signals, then
the indication "reason-auto.callback:duration-short:locale-al" would
select only the signal

    reason & duration-short & locale & mode-visual

In this configuration, the indication
"mode-audio:reason-auto.callback:duration-short:locale-al" would also
select that signal, because the value "mode-audio" cannot be acted
upon within that set of available signals.  It is effectively ignored.

* Extensibility

Let us now see how this scheme supports the various types of
extensibility listed in Requirement C.

- add further values to any existing category

We could define an additional value such as

    reason-avaya.special

If the renderer had any signals that had this value, they would be
selected by an indicator containing "reason-avaya.special".  If the
renderer has no such signals, then in an indicator this value acts the
same as "reason", that is, it has no effect.

- add further categories that are orthogonal to existing categories

We could define an additional category with values:

    avaya
        avaya-a
        avaya-b
        avaya-c

If a renderer does not know of this category, all of its signals
implicitly have the value "avaya".  Because of this, when such a
renderer processes a value of this category in an indicator, it never
changes the available set.

- semantically subdivide the meaning provided by any existing
  indication

We could define subvalues of existing values, such as:

    state
        state-waiting
            state-waiting-avaya.standard
            state-waiting-avaya.vip

If the renderer has two signals that differ only in the values
"state-waiting-avaya.standard" and "state-waiting-avaya.vip", any
indicator that does not know of this subdivision will never separate
the two signals; they will both remain in the acceptable set or both
be excluded from it.  So the renderer needs a policy for choosing one
over the other -- In this case, clearly "state-waiting-avaya.standard"
is to be preferred.

However, if the indicator gives one of the two subvalues, the renderer
will select the appropriate signal.

If the indicator gives one of the two subvalues but the renderer only
knows of "state-waiting", the "avaya.standard" or "avaya.vip" part of
the value will never affect the acceptable set (since to select based
on it would make the acceptable set empty).  Processing of
"state-waiting-avaya.standard" would have the same effect as
"state-waiting".

- add further "value spaces" of indications whose semantics are not
  related to existing indications, and thus, whose categories differ
  from and do not interact with existing categories

We can define completely independent spaces of signals by defining new
categories to describe the new space, giving signals in one space the
universal value for categories describing the other space.

For example, we can define

    auto
        auto-make
            auto-make-volvo
            auto-make-toyota
    color
        color-red
        color-green

If we have signals with the values

    auto-make-volvo & color-red
    auto-make-volvo & color-green
    auto-make-toyota & color-red
    auto-make-toyota & color-green

and add them to the set of "mode-visual" signals given above, we get:

    reason & duration-normal & locale & mode-visual & auto & color
    reason & duration-short & locale & mode-visual & auto & color
    reason & duration-long & locale & mode-visual & auto & color
    reason & duration & locale & mode & auto-make-volvo & color-red
    reason & duration & locale & mode & auto-make-volvo & color-green
    reason & duration & locale & mode & auto-make-toyota & color-red
    reason & duration & locale & mode & auto-make-toyota & color-green

This set is a combination of chalk and cheese.  But the first
non-universal value in the indicator will select signals of one type
or the other.  For instance, "auto-make" will select

    reason & duration & locale & mode & auto-make-volvo & color-red
    reason & duration & locale & mode & auto-make-volvo & color-green
    reason & duration & locale & mode & auto-make-toyota & color-red
    reason & duration & locale & mode & auto-make-toyota & color-green

and "duration-normal" will select

    reason & duration-normal & locale & mode-visual & auto & color

Dale