- From: Koen Holtman <koen@win.tue.nl>
- Date: Tue, 6 May 1997 21:26:47 +0200 (MET DST)
- To: http-wg@cuckoo.hpl.hp.com
- Cc: frystyk@w3.org
In Memphis and at WWW6, a number of us talked about synchronising the negotiation metadata models for PEP, transparent content negotiation, and possibly user-agent side rendering scripts. What came out was that transparent content negotiation would place its feature tags in the URI namespace, like PEP does for its extension identifiers. Basically, there would be only a single database of supported feature/extension identifiers inside the browser. Support for the PEP extension http://whatever.com/blah would equal presence of the TCN feature tag http://whatever.com/blah, and vice versa. This eases metadata aministration, and gives people the choice to use either negotiation scheme for those things for which either would be usable. Note that, in my opinion, the overlap area in which both TCN and PEP are usable is not very big. It is certainly not so big that one could easily unify the protocols. I include the revised feature negotiation sections for the upcoming draft-ietf-http-negotiation-02.txt, with changebars, below. Comments are welcome. Koen. ---snip-- 6 Feature negotiation This section defines the feature negotiation mechanism. Feature negotiation has been introduced in section 4.8. Appendix 18 contains examples of feature negotiation. 6.1 Feature tags A feature tag (ftag) identifies a capability of a user agent or a preference of a user. A feature is said to be `present' in a user agent if the corresponding capability is implemented, or if the user has expressed corresponding preference. | ftag = <absolute URI, as defined in [1], not containing any "#"> | | Examples of feature tags are | | http://x.org/tables, mid:33829%7e432, x:tables, x:fonts, | x:screenwidth, x:colordepth | | [##Note: TCN feature tags and PEP extension identifiers share the | same namespace. We may want to synchronize terminology.##] | | [##Note: The `x:' scheme in the examples could belong to an | IANA-maintained namespace, as in the feature tag registration | draft (draft-ietf-http-feature-reg-00.txt). `x:' stands for | `extension', and was mainly chosen because of editorial | considerations (it is short, so it does not lead to much | reformatting of examples). More discussion about the issue of | having an IANA-managed space of shorter-than-http-url feature | tags is needed.##] | | [##Note: We may want to specify a default scheme, so that | "screenwidth" is the same as "x:screenwidth".##] An example of the use of feature tags in a variant description is: {"index.html" 1.0 {type text/html} | {features "http://x.org/tables" "x:frames"}} | | Equality comparison for feature tags MUST be done with the URI | comparison rules in [1]. Note that this comparison is largely | case-sensitive. Because of this, the use of uppercase characters | in feature tags is discouraged. | | [##Issue: does [1] actually define comparison of non-http URIs | and URIs with unknown schemes in an unambiguous way?##] Note that context may determine whether a feature tag expresses a | capability or a preference. An "x:textonly" tag would be naturally present for a text-only user agent, but the user of a graphical user agent could set the tag to be present if text-only content is preferred to graphical content. | As feature creation will be an ongoing process, it is generally not possible for a user agent to know the meaning of all feature tags it can possibly encounter in a variant description. A user agent SHOULD treat all features with tags unknown to it as absent. |6.1.1 Feature tag values | | The definition of a feature tag may state that a feature tag, if | present, can have associated with it one or more values which | reflect a particular capability or preference. Such values have | the syntax of URI fragment identifiers as defined in [1]: | | ftag-val = fragment | | For example, a feature tag "x:paper" could be present with the | values "A4" and "A5". This is commonly written as "x:paper#A4" and | "x:paper#A5". Equality comparison for tag values MUST be done with | the URI comparison rules in [1] as they apply to fragment | identifiers. 6.2 Accept-Features header The Accept-Features request header can be used by a client to give information about the presence or absence of certain features. Accept-Features = "Accept-Features" ":" #( feature-expr *( ";" feature-extension ) ) | feature-expr = [ "!" ] <"> ftag <"> | | [ "!" ] <"> ftag "#" ftag-val <"> | | "1" <"> ftag "#" ftag-val <"> | | <"> ftag "#" number "#" [ number | "inf" ] <"> | | "*" feature-extension = token [ "=" ( token | quoted-string ) ] | No feature extensions are defined in this specification. An example is: | Accept-Features: "x:blex", !"x:blebber", "x:colordepth#0#5", | !"x:screenwidth", 1"x:ua-media#stationary", | "x:paper#A4", ! "paper#A0", "x:x_version#100#205", | "x:screenwidth#5000#inf", * The different feature expressions have the following meaning: | "ftag" ftag is present | | !"ftag" ftag is absent | | "ftag#V" ftag is present with the value V (it may also be present with other values) | !"ftag#V" ftag is present, but not with the value V | | 1"ftag#V" ftag is present with the value V, and not with any other values | "ftag#N#M" ftag is present with the numeric values from N up to | and including M, and not with any other values. The | special value "inf" for M stands for positive infinity. * makes true all feature predicates (section 6.3) which were not assigned truth values by other elements of the header Absence of the Accept-Features header in a request is equivalent to the inclusion of Accept-Features: * 6.3 Feature predicates Feature predicates are used in the features attribute of a variant description. | fpred = [ "!" ] <"> ftag <"> | | [ "!" ] <"> ftag "#" ftag-val <"> | | <"> ftag "#" number "#" number <"> Examples of feature predicates are | "x:blebber", !"x:blebber", "x:paper#A4", "x:paper#%414" | "x:colordepth#5", !"x:blex#54", "x:dpi#300#599" A server can compute the truth value of a feature predicate by using the knowledge gained from the Accept-Features header in the current request. The truth value MUST be assigned as follows, depending on the form of the predicate: | "ftag" true if the feature is known to be present false if the feature is known to be absent | !"ftag" true if the feature is known to be absent false if the feature is known to be present | "ftag#V" true if the feature is known to be present with the value V, false if the feature is known not to be present with the value V | !"ftag#V" true if the feature is known to be present, but known not to be present with the value V, false if the feature is known to be absent or present with the value V | "ftag#N#M" true if the feature is known to be present with some numeric values, while the highest value with which it is present is known and in the range N-M, false if the feature is known to be absent, or if it is known to be present with some numeric values, while the highest value with which it is present is known and not in the range N-M. | The special value "inf" for M stands for positive infinity. If the information in the Accept-Features header does not provide sufficient knowledge to assign a value to a predicate using the above rules, then the value is true if there is a "*" in the Accept-Features header, false otherwise. As an example, the header | Accept-Features: "x:blex", !"x:blebber", "x:colordepth#0#5", | !"x:screenwidth", 1"x:ua-media#stationary", | "x:paper#A4", ! "paper#A0", "x:x_version#100#205", * makes the following predicates true: | "x:blex", "x:colordepth#4", !"x:colordepth#6", "x:colordepth", | ! "x:screenwidth", "x:ua-media#stationary", | !"x:ua-media#screen", "x:paper#A4", "x:paper#%414", | !"x:paper#A0", "x:colordepth#4#6", "x:x_version#101" The * in the header makes all of the following predicates true: | "x:blex#wox", !"x:blex#wox", "x:paper#A5", "x:frtnbf", | !"x:frtnbf", "x:frtnbf#4", !"x:frtnbf#4", "x:frtnbf#1#42#" The header makes the following predicates false: | !"x:blex", "x:blebber", "x:colordepth#6", "x:colordepth#foo", | !"x:colordepth", "x:screenwidth", "x:screenwidth#640", | !"x:screenwidth#640", "x:x_version#99", "x:ua-media#screen", | "x:paper#A0"
Received on Tuesday, 6 May 1997 12:32:11 UTC