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

Paul Kyzivat <pkyzivat@cisco.com> Tue, 15 June 2010 18:20 UTC

Return-Path: <pkyzivat@cisco.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 AE6A13A6837 for <dispatch@core3.amsl.com>; Tue, 15 Jun 2010 11:20:20 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -11.167
X-Spam-Level:
X-Spam-Status: No, score=-11.167 tagged_above=-999 required=5 tests=[AWL=1.432, BAYES_00=-2.599, GB_I_LETTER=-2, RCVD_IN_DNSWL_HI=-8]
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 raNndW3noi+F for <dispatch@core3.amsl.com>; Tue, 15 Jun 2010 11:20:13 -0700 (PDT)
Received: from rtp-iport-1.cisco.com (rtp-iport-1.cisco.com [64.102.122.148]) by core3.amsl.com (Postfix) with ESMTP id 4CB5A3A6909 for <dispatch@ietf.org>; Tue, 15 Jun 2010 11:20:11 -0700 (PDT)
Authentication-Results: rtp-iport-1.cisco.com; dkim=neutral (message not signed) header.i=none
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: AvsEANdgF0xAZnwM/2dsb2JhbACecnGmcpozglmCQQQ
X-IronPort-AV: E=Sophos;i="4.53,421,1272844800"; d="scan'208";a="121868288"
Received: from rtp-core-1.cisco.com ([64.102.124.12]) by rtp-iport-1.cisco.com with ESMTP; 15 Jun 2010 18:15:45 +0000
Received: from [161.44.174.142] (dhcp-161-44-174-142.cisco.com [161.44.174.142]) by rtp-core-1.cisco.com (8.13.8/8.14.3) with ESMTP id o5FIFjId007080; Tue, 15 Jun 2010 18:15:45 GMT
Message-ID: <4C17C351.7020405@cisco.com>
Date: Tue, 15 Jun 2010 14:15:45 -0400
From: Paul Kyzivat <pkyzivat@cisco.com>
User-Agent: Thunderbird 2.0.0.24 (Windows/20100228)
MIME-Version: 1.0
To: "WORLEY, Dale R (Dale)" <dworley@avaya.com>
References: <CD5674C3CD99574EBA7432465FC13C1B21FD73619B@DC-US1MBEX4.global.avaya.com>
In-Reply-To: <CD5674C3CD99574EBA7432465FC13C1B21FD73619B@DC-US1MBEX4.global.avaya.com>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
Cc: "dispatch@ietf.org" <dispatch@ietf.org>
Subject: Re: [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 18:20:20 -0000

Very interesting!

Without getting into syntax specifics, I think I like this - it provides 
a much cleaner conceptual framework. The idea of the specifier providing 
a priority seems to resolve some loose ends.

	Thanks,
	Paul

WORLEY, Dale R (Dale) wrote:
> [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
> _______________________________________________
> dispatch mailing list
> dispatch@ietf.org
> https://www.ietf.org/mailman/listinfo/dispatch
>