home *** CD-ROM | disk | FTP | other *** search
/ Internet Core Protocols / Oreilly-InternetCoreProtocols.iso / RFCs / rfc2482.txt < prev    next >
Encoding:
Text File  |  1999-10-14  |  27.9 KB  |  788 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                       K. Whistler
  8. Request for Comments: 2482                                       Sybase
  9. Category: Informational                                        G. Adams
  10.                                                                Spyglass
  11.                                                            January 1999
  12.  
  13.  
  14.                  Language Tagging in Unicode Plain Text
  15.  
  16. Status of this Memo
  17.  
  18.    This memo provides information for the Internet community.  It does
  19.    not specify an Internet standard of any kind.  Distribution of this
  20.    memo is unlimited.
  21.  
  22. Copyright Notice
  23.  
  24.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  25.  
  26. IESG Note:
  27.  
  28.    This document has been accepted by ISO/IEC JTC1/SC2/WG2 in meeting
  29.    #34 to be submitted as a recommendation from WG2 for inclusion in
  30.    Plane 14 in part 2 of ISO/IEC 10646.
  31.  
  32. 1.  Abstract
  33.  
  34.    This document proposed a mechanism for language tagging in [UNICODE]
  35.    plain text. A set of special-use tag characters on Plane 14 of
  36.    [ISO10646] (accessible through UTF-8, UTF-16, and UCS-4 encoding
  37.    forms) are proposed for encoding to enable the spelling out of
  38.    ASCII-based string tags using characters which can be strictly
  39.    separated from ordinary text content characters in ISO10646 (or
  40.    UNICODE).
  41.  
  42.    One tag identification character and one cancel tag character are
  43.    also proposed. In particular, a language tag identification character
  44.    is proposed to identify a language tag string specifically; the
  45.    language tag itself makes use of [RFC1766] language tag strings
  46.    spelled out using the Plane 14 tag characters. Provision of a
  47.    specific, low-overhead mechanism for embedding language tags in plain
  48.    text is aimed at meeting the need of Internet Protocols such as ACAP,
  49.    which require a standard mechanism for marking language in UTF-8
  50.    strings.
  51.  
  52.    The tagging mechanism as well the characters proposed in this
  53.    document have been approved by the Unicode Consortium for inclusion
  54.    in The Unicode Standard.  However, implementation of this decision
  55.  
  56.  
  57.  
  58. Whistler & Adams             Informational                      [Page 1]
  59.  
  60. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  61.  
  62.  
  63.    awaits formal acceptance by ISO JTC1/SC2/WG2, the working group
  64.    responsible for ISO10646. Potential implementers should be aware that
  65.    until this formal acceptance occurs, any usage of the characters
  66.    proposed herein is strictly experimental and not sanctioned for
  67.    standardized character data interchange.
  68.  
  69. 2.  Definitions and Notation
  70.  
  71.    No attempt is made to define all terms used in this document. In
  72.    particular, the terminology pertaining to the subject of coded
  73.    character systems is not explicitly specified. See [UNICODE],
  74.    [ISO10646], and [RFC2130] for additional definitions in this area.
  75.  
  76. 2.1 Requirements Notation
  77.  
  78.    This document occasionally uses terms that appear in capital letters.
  79.    When the terms "MUST", "SHOULD", "MUST NOT", "SHOULD NOT", and "MAY"
  80.    appear capitalized, they are being used to indicate particular
  81.    requirements of this specification. A discussion of the meanings of
  82.    these terms appears in [RFC2119].
  83.  
  84. 2.2 Definitions
  85.  
  86.    The terms defined below are used in special senses and thus warrant
  87.    some clarification.
  88.  
  89. 2.2.1 Tagging
  90.  
  91.    The association of attributes of text with a point or range of the
  92.    primary text. (The value of a particular tag is not generally
  93.    considered to be a part of the "content" of the text. Typical
  94.    examples of tagging is to mark language or font of a portion of
  95.    text.)
  96.  
  97. 2.2.2 Annotation
  98.  
  99.    The association of secondary textual content with a point or range of
  100.    the primary text. (The value of a particular annotation *is*
  101.    considered to be a part of the "content" of the text. Typical
  102.    examples include glossing, citations, exemplication, Japanese yomi,
  103.    etc.)
  104.  
  105. 2.2.3 Out-of-band
  106.  
  107.    An out-of-band channel conveys a tag in such a way that the textual
  108.    content, as encoded, is completely untouched and unmodified. This is
  109.    typically done by metadata or hyperstructure of some sort.
  110.  
  111.  
  112.  
  113.  
  114. Whistler & Adams             Informational                      [Page 2]
  115.  
  116. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  117.  
  118.  
  119. 2.2.4 In-band
  120.  
  121.    An in-band channel conveys a tag along with the textual content,
  122.    using the same basic encoding mechanism as the text itself. This is
  123.    done by various means, but an obvious example is SGML markup, where
  124.    the tags are encoded in the same character set as the text and are
  125.    interspersed with and carried along with the text data.
  126.  
  127. 3.0 Background
  128.  
  129.    There has been much discussion over the last 8 years of language
  130.    tagging and of other kinds of tagging of Unicode plain text. It is
  131.    fair to say that there is more-or-less universal agreement that
  132.    language tagging of Unicode plain text is required for certain
  133.    textual processes. For example, language "hinting" of multilingual
  134.    text is necessary for multilingual spell-checking based on multiple
  135.    dictionaries to work well.  Language tagging provides a minimum level
  136.    of required information for text-to-speech processes to work
  137.    correctly.  Language tagging is regularly done on web pages, to
  138.    enable selection of alternate content, for example.
  139.  
  140.    However, there has been a great deal of controversy regarding the
  141.    appropriate placement of language tags. Some have held that the only
  142.    appropriate placement of language tags (or other kinds of tags) is
  143.    out-of-band, making use of attributed text structures or metadata.
  144.    Others have argued that there are requirements for lower-complexity
  145.    in-band mechanisms for language tags (or other tags) in plain text.
  146.  
  147.    The controversy has been muddied by the existence and widespread use
  148.    of a number of in-band text markup mechanisms (HTML, text/enriched,
  149.    etc.) which enable language tagging, but which imply the use of
  150.    general parsing mechanisms which are deemed too "heavyweight" for
  151.    protocol developers and a number of other applications. The
  152.    difficulty of using general in-band text markup for simple protocols
  153.    derives from the fact that some characters are used both for textual
  154.    content and for the text markup; this makes it more difficult to
  155.    write simple, fast algorithms to find only the textual content and
  156.    ignore the tags, or vice versa. (Think of this as the algorithmic
  157.    equivalent of the difficulty the human reader has attempting to read
  158.    just the content of raw HTML source text without a browser
  159.    interpreting all the markup tags.)
  160.  
  161.    The Plane 14 proposal addresses the recurrent and persistent call for
  162.    a lighter-weight mechanism for text tagging than typical text markup
  163.    mechanisms in Unicode. It proposes a special set of characters used
  164.    *only* for tagging. These tag characters can be embedded into plain
  165.  
  166.  
  167.  
  168.  
  169.  
  170. Whistler & Adams             Informational                      [Page 3]
  171.  
  172. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  173.  
  174.  
  175.    text and can be identified and/or ignored with trivial algorithms,
  176.    since there is no overloading of usage for these tag characters--they
  177.    can only express tag values and never textual content itself.
  178.  
  179.    The Plane 14 proposal is not intended for general annotation of text,
  180.    such as textual citations, phonetic readings (e.g.  Japanese Yomi),
  181.    etc. In its present form, its use is intended to be restriced solely
  182.    to specifying in-line language tags.  Future extensions may widen
  183.    this scope of intended usage.
  184.  
  185. 4.0 Proposal
  186.  
  187.    This proposal suggests the use of 97 dedicated tag characters encoded
  188.    at the start of Plane 14 of ISO/IEC 10646 consisting of a clone of
  189.    the 94 printable 7-bit ASCII graphic characters and ASCII SPACE, as
  190.    well as a tag identification character and a tag cancel character.
  191.  
  192.    These tag characters are to be used to spell out any ASCII-based
  193.    tagging scheme which needs to be embedded in Unicode plain text. In
  194.    particular, they can be used to spell out language tags in order to
  195.    meet the expressed requirements of the ACAP protocol and the likely
  196.    requirements of other new protocols following the guidelines of the
  197.    IAB character workshop (RFC 2130).
  198.  
  199.    The suggested range in Plane 14 for the block reserved for tag
  200.    characters is as follows, expressed in each of the three most
  201.    generally used encoding schemes for ISO/IEC 10646:
  202.  
  203.    UCS-4
  204.  
  205.    U-000E0000 .. U-000E007F
  206.  
  207.    UTF-16
  208.  
  209.    U+DB40 U+DC00 .. U+DB40 U+DC7F
  210.  
  211.    UTF-8
  212.  
  213.    0xF3 0xA0 0x80 0x80 .. 0xF3 0xA0 0x81 0xBF
  214.  
  215.    Of this range, U-000E0020 .. U-000E007E is the suggested range for
  216.    the ASCII clone tag characters themselves.
  217.  
  218. 4.1 Names for the Tag Characters
  219.  
  220.    The names for the ASCII clone tag characters should be exactly the
  221.    ISO 10646 names for 7-bit ASCII, prefixed with the word "TAG".
  222.  
  223.  
  224.  
  225.  
  226. Whistler & Adams             Informational                      [Page 4]
  227.  
  228. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  229.  
  230.  
  231.    In addition, there is one tag identification character and a CANCEL
  232.    TAG character. The use and syntax of these characters is described in
  233.    detail below.
  234.  
  235.    The entire encoding for the proposed Plane 14 tag characters and
  236.    names of those characters can be derived from the following list.
  237.    (The encoded values here and throughout this proposal are listed in
  238.    UCS-4 form, which is easiest to interpret. It is assumed that most
  239.    Unicode applications will, however, be making use either of UTF-16 or
  240.    UTF-8 encoding forms for actual implementation.)
  241.  
  242.    U-000E0000  <reserved>
  243.    U-000E0001  LANGUAGE TAG
  244.    U-000E0002  <reserved>
  245.    U-000E001F  <reserved>
  246.    U-000E0020  TAG SPACE
  247.    U-000E0021  TAG EXCLAMATION MARK
  248.    U-000E0041  TAG LATIN CAPITAL LETTER A
  249.    U-000E007A  TAG LATIN SMALL LETTER Z
  250.    U-000E007E  TAG TILDE
  251.    U-000E007F  CANCEL TAG
  252.  
  253. 4.2 Range Checking for Tag Characters
  254.  
  255.    The range checks required for code testing for tag characters would
  256.    be as follows. The same range check is expressed here in C for each
  257.    of the three significant encoding forms for 10646.
  258.  
  259. Range check expressed in UCS-4:
  260.  
  261. if ( ( *s >= 0xE0000 ) || ( *s <= 0xE007F ) )
  262.  
  263. Range check expressed in UTF-16 (Unicode):
  264.  
  265. if ( ( *s == 0xDB40 ) && ( *(s+1) >= 0xDC00 ) && ( *(s+1) <= 0xDC7F ) )
  266.  
  267. Expressed in UTF-8:
  268.  
  269. if ( ( *s == 0xF3 ) && ( *(s+1) == 0xA0 ) && ( *(s+2) & 0xE0 == 0x80 )
  270.  
  271.    Because of the choice of the range for the tag characters, it would
  272.    also be possible to express the range check for UCS-4 or UTF-16 in
  273.    terms of bitmask operations, as well.
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282. Whistler & Adams             Informational                      [Page 5]
  283.  
  284. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  285.  
  286.  
  287. 4.3 Syntax for Embedding Tags
  288.  
  289.    The use of the Plane 14 tag characters is very simple. In order to
  290.    embed any ASCII-derived tag in Unicode plain text, the tag is simply
  291.    spelled out with the tag characters instead, prefixed with the
  292.    relevant tag identification character. The resultant string is
  293.    embedded directly in the text.
  294.  
  295.    The tag identification character is used as a mechanism for
  296.    identifying tags of different types. This enables multiple types of
  297.    tags to coexist amicably embedded in plain text and solves the
  298.    problem of delimitation if a tag is concatenated directly onto
  299.    another tag. Although only one type of tag is currently specified,
  300.    namely the language tag, the encoding of other tag identification
  301.    characters in the future would allow for distinct tag types to be
  302.    used.
  303.  
  304.    No termination character is required for a tag. A tag terminates
  305.    either when the first non Plane 14 Tag Character (i.e. any other
  306.    normal Unicode value) is encountered, or when the next tag
  307.    identification character is encountered.
  308.  
  309.    All tag arguments must be encoded only with the tag characters U-
  310.    000E0020 .. U-000E007E. No other characters are valid for expressing
  311.    the tag argument.
  312.  
  313.    A detailed BNF syntax for tags is listed below.
  314.  
  315. 4.4   Tag Scope and Nesting
  316.  
  317.    The value of an established tag continues from the point the tag is
  318.    embedded in text until either:
  319.  
  320.       A. The text itself goes out of scope, as defined by the
  321.          application. (E.g. for line-oriented protocols, when reaching
  322.          the end-of-line or end-of-string; for text streams, when
  323.          reaching the end-of-stream; etc.)
  324.  
  325.    or
  326.  
  327.       B. The tag is explicitly cancelled by the CANCEL TAG character.
  328.  
  329.    Tags of the same type cannot be nested in any way. The appearance of
  330.    a new embedded language tag, for example, after text which was
  331.    already language tagged, simply changes the tagged value for
  332.    subsequent text to that specified in the new tag.
  333.  
  334.  
  335.  
  336.  
  337.  
  338. Whistler & Adams             Informational                      [Page 6]
  339.  
  340. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  341.  
  342.  
  343.    Tags of different type can have interdigitating scope, but not
  344.    hierarchical scope. In effect, tags of different type completely
  345.    ignore each other, so that the use of language tags can be completely
  346.    asynchronous with the use of character set source tags (or any other
  347.    tag type) in the same text in the future.
  348.  
  349. 4.5 Cancelling Tag Values
  350.  
  351.    U-000E007F CANCEL TAG is provided to allow the specific cancelling of
  352.    a tag value. The use of CANCEL TAG has the following syntax.  To
  353.    cancel a tag value of a particular type, prefix the CANCEL TAG
  354.    character with the tag identification character of the appropriate
  355.    type. For example, the complete string to cancel a language tag is:
  356.  
  357.    U-000E0001 U-000E007F
  358.  
  359.    The value of the relevant tag type returns to the default state for
  360.    that tag type, namely: no tag value specified, the same as untagged
  361.    text.
  362.  
  363.    The use of CANCEL TAG without a prefixed tag identification character
  364.    cancels *any* Plane 14 tag values which may be defined. Since only
  365.    language tags are currently provided with an explicit tag
  366.    identification character, only language tags are currently affected.
  367.  
  368.    The main function of CANCEL TAG is to make possible such operations
  369.    as blind concatenation of strings in a tagged context without the
  370.    propagation of inappropriate tag values across the string boundaries.
  371.    For example, a string tagged with a Japanese language tag can have
  372.    its tag value "sealed off" with a terminating CANCEL TAG before
  373.    another string of unknown language value is concatenated to it. This
  374.    would prevent the string of unknown language from being erroneously
  375.    marked as being Japanese simply because of a concatenation to a
  376.    Japanese string.
  377.  
  378. 4.6 Tag Syntax Description
  379.  
  380.    An extended BNF (Backus-Naur Form) description of the tags specified
  381.    in this proposal is found below.  Note the following BNF extensions
  382.    used in this formalism:
  383.  
  384.    1. Semantic constraints are specified by rules in the form of an
  385.       assertion specified between double braces; the variable $$ denotes
  386.       the string consisting of all terminal symbols matched by the this
  387.       non-terminal.
  388.  
  389.       Example:   {{ Assert ( $$[0] == '?' ); }}
  390.  
  391.  
  392.  
  393.  
  394. Whistler & Adams             Informational                      [Page 7]
  395.  
  396. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  397.  
  398.  
  399.       Meaning:   The first character of the string matched by this
  400.                  non-terminal must be '?'
  401.  
  402.    2. A number of predicate functions are employed in semantic
  403.       constraint rules which are not otherwise defined; their name is
  404.       sufficient for determining their predication.
  405.  
  406.       Example:   IsRFC1766LanguageIdentifier ( tag-argument )
  407.  
  408.       Meaning:   tag-argument is a valid RFC1766 language identifier
  409.  
  410.    3. A lexical expander function, TAG, is employed to denote the tag
  411.       form of an ASCII character; the argument to this function is
  412.       either a character or a character set specified by a range or
  413.       enumeration expression.
  414.  
  415.       Example:   TAG('-')
  416.  
  417.       Meaning:   TAG HYPHEN-MINUS
  418.  
  419.       Example:   TAG([A-Z])
  420.  
  421.       Meaning:   TAG LATIN CAPITAL LETTER A ...
  422.                  TAG LATIN CAPITAL LETTER Z
  423.  
  424.    4. A macro is employed to denote terminal symbols that are character
  425.       literals which can't be directly represented in ASCII. The
  426.       argument to the macro is the UNICODE (ISO/IEC 10646) character
  427.       name.
  428.  
  429.       Example:   '${TAG CANCEL}'
  430.  
  431.       Meaning:   character literal whose code value is U-000E007F
  432.  
  433.    5. Occurrence indicators used are '+' (one or more) and '*' (zero or
  434.       more); optional occurrence is indicated by enclosure in '[' and
  435.       ']'.
  436.  
  437. 4.6.1 Formal Tag Syntax
  438.  
  439. tag                     :   language-tag
  440.                         |   cancel-all-tag
  441.                         ;
  442.  
  443. language-tag            :   language-tag-introducer language-tag-argument
  444.                         ;
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Whistler & Adams             Informational                      [Page 8]
  451.  
  452. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  453.  
  454.  
  455. language-tag-argument   :   tag-argument
  456.               {{ Assert ( IsRFC1766LanguageIdentifier ( $$ ); }}
  457.                         |   tag-cancel
  458.                         ;
  459.  
  460. cancel-all-tag          :   tag-cancel
  461.                         ;
  462.  
  463. tag-argument            :   tag-character+
  464.                         ;
  465.  
  466. tag-character           :   { c : c in
  467.               TAG( { a : a in printable ASCII characters or SPACE } ) }
  468.                         ;
  469.  
  470. language-tag-introducer :   '${TAG LANGUAGE}'
  471.                         ;
  472.  
  473. tag-cancel              :   '${TAG CANCEL}'
  474.                         ;
  475.  
  476.  
  477. 5.0 Tag Types
  478.  
  479. 5.1 Language Tags
  480.  
  481.    Language tags are of general interest and should have a high degree
  482.    of interoperability for protocol usage. To this end, a specific
  483.    LANGUAGE TAG tag identification character is provided.  A Plane 14
  484.    tag string prefixed by U-000E0001 LANGUAGE TAG is specified to
  485.    constitute a language tag. Furthermore, the tag values for the
  486.    language tag are to be spelled out as specified in RFC 1766, making
  487.    use only of registered tag values or of user-defined language tags
  488.    starting with the characters "x-".
  489.  
  490.    For example, to embed a language tag for Japanese, the Plane 14
  491.    characters would be used as follows. The Japanese tag from RFC 1766
  492.    is "ja" (composed of ISO 639 language id) or, alternatively, "ja-JP"
  493.    (composed of ISO 639 language id plus ISO 3166 country id).  Since
  494.    RFC 1766 specifies that language tags are not case significant, it is
  495.    recommended that for language tags, the entire tag be lowercased
  496.    before conversion to Plane 14 tag characters. (This would not be
  497.    required for Unicode conformance, but should be followed as general
  498.    practice by protocols making use of RFC 1766 language tags, to
  499.    simplify and speed up the processing for operations which need to
  500.    identify or ignore language tags embedded in text.) Lowercasing,
  501.  
  502.  
  503.  
  504.  
  505.  
  506. Whistler & Adams             Informational                      [Page 9]
  507.  
  508. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  509.  
  510.  
  511.    rather than uppercasing, is recommended because it follows the
  512.    majority practice of expressing language tag values in lowercase
  513.    letters.
  514.  
  515.    Thus the entire language tag (in its longer form) would be converted
  516.    to Plane 14 tag characters as follows:
  517.  
  518.    U-000E0001 U-000E006A U-000E0061 U-000E002D U-000E006A U-000E0070
  519.  
  520.    The language tag (in its shorter, "ja" form) could be expressed as
  521.    follows:
  522.  
  523.    U-000E0001 U-000E006A U-000E0061
  524.  
  525.    The value of this string is then expressed in whichever encoding form
  526.    (UCS-4, UTF-16, UTF-8) is required and embedded in text at the
  527.    relevant point.
  528.  
  529. 5.2 Additional Tags
  530.  
  531.    Additional tag identification characters might be defined in the
  532.    future. An example would be a CHARACTER SET SOURCE TAG, or a GENERIC
  533.    TAG for private definition of tags.
  534.  
  535.    In each case, when a specific tag identification character is
  536.    encoded, a corresponding reference standard for the values of the
  537.    tags associated with the identifier should be designated, so that
  538.    interoperating parties which make use of the tags will know how to
  539.    interpret the values the tags may take.
  540.  
  541. 6.0 Display Issues
  542.  
  543.    All characters in the tag character block are considered to have no
  544.    visible rendering in normal text. A process which interprets tags may
  545.    choose to modify the rendering of text based on the tag values (as
  546.    for example, changing font to preferred style for rendering Chinese
  547.    versus Japanese). The tag characters themselves have no display; they
  548.    may be considered similar to a U+200B ZERO WIDTH SPACE in that
  549.    regard. The tag characters also do not affect breaking, joining, or
  550.    any other format or layout properties, except insofar as the process
  551.    interpreting the tag chooses to impose such behavior based on the tag
  552.    value.
  553.  
  554.    For debugging or other operations which must render the tags
  555.    themselves visible, it is advisable that the tag characters be
  556.    rendered using the corresponding ASCII character glyphs (perhaps
  557.    modified systematically to differentiate them from normal ASCII
  558.  
  559.  
  560.  
  561.  
  562. Whistler & Adams             Informational                     [Page 10]
  563.  
  564. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  565.  
  566.  
  567.    characters). But, as noted below, the tag character values are chosen
  568.    so that even without display support, the tag characters will be
  569.    interpretable in most debuggers.
  570.  
  571. 7.0 Unicode Conformance Issues
  572.  
  573.    The basic rules for Unicode conformance for the tag characters are
  574.    exactly the same as for any other Unicode characters. A conformant
  575.    process is not required to interpret the tag characters. If it does
  576.    not interpret tag characters, it should leave their values
  577.    undisturbed and do whatever it does with any other uninterpreted
  578.    characters. If it does interpret them, it should interpret them
  579.    according to the standard, i.e. as spelled-out tags.
  580.  
  581.    So for a non-TagAware Unicode application, any language tag
  582.    characters (or any other kind of tag expressed with Plane 14 tag
  583.    characters) encountered would be handled exactly as for uninterpreted
  584.    Tibetan from the BMP, uninterpreted Linear B from Plane 1, or
  585.    uninterpreted Egyptian hieroglyphics from private use space in Plane
  586.    15.
  587.  
  588.    A TagAware but TagPhobic Unicode application can recognize the tag
  589.    character range in Plane 14 and choose to deliberately strip them out
  590.    completely to produce plain text with no tags.
  591.  
  592.    The presence of a correctly formed tag cannot be taken as a guarantee
  593.    that the data so tagged is correctly tagged. For example, nothing
  594.    prevents an application from erroneously labelling French data as
  595.    Spanish, or from labelling JIS-derived data as Japanese, even if it
  596.    contains Greek or Cyrillic characters.
  597.  
  598. 7.1 Note on Encoding Language Tags
  599.  
  600.    The fact that this proposal for encoding tag characters in Unicode
  601.    includes a mechanism for specifying language tag values does not mean
  602.    that Unicode is departing from one of its basic encoding principles:
  603.  
  604.        Unicode encodes scripts, not languages.
  605.  
  606.    This is still true of the Unicode encoding (and ISO/IEC 10646), even
  607.    in the presence of a mechanism for specifying language tags in plain
  608.    text.  There is nothing obligatory about the use of Plane 14 tags,
  609.    whether for language tags or any other kind of tags.
  610.  
  611.    Language tagging in no way impacts current encoded characters or the
  612.    encoding of future scripts.
  613.  
  614.  
  615.  
  616.  
  617.  
  618. Whistler & Adams             Informational                     [Page 11]
  619.  
  620. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  621.  
  622.  
  623.    It is fully anticipated that implementations of Unicode which already
  624.    make use of out-of-band mechanisms for language tagging or "heavy-
  625.    weight" in-band mechanisms such as HTML will continue to do exactly
  626.    what they are doing and will ignore Plane 14 tag characters
  627.    completely.
  628.  
  629. 8.0 Security Considerations
  630.  
  631.    There are no known security issues raised by this document.
  632.  
  633. References
  634.  
  635.    [ISO10646] ISO/IEC 10646-1:1993 International Organization for
  636.               Standardization.  "Information Technology -- Universal
  637.               Multiple-Octet Coded Character Set (UCS) -- Part 1:
  638.               Architecture and Basic Multilingual Plane", Geneva, 1993.
  639.  
  640.    [RFC1766]  Alvestrand, H., "Tags for the Identification of
  641.               Languages", RFC 1766, March 1995.
  642.  
  643.    [RFC2070]  Yergeau, F., Nicol, G. Adams, G. and M. Duerst,
  644.               "Internationalization of the Hypertext Markup Language",
  645.               RFC 2070, January 1997.
  646.  
  647.    [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
  648.               Requirement Levels", BCP 14, RFC 2119, March 1997.
  649.  
  650.    [RFC2130]  Weider, C. Preston, C., Simonsen, K., Alvestrand, H.,
  651.               Atkinson, R., Crispin, M. and P. Svanberg, "The Report of
  652.               the IAB Character Set Workshop held 29 February - 1 March,
  653.               1996", RFC 2130, April 1997.
  654.  
  655.    [UNICODE]  The Unicode Standard, Version 2.0, The Unicode Consortium,
  656.               Addison-Wesley, July 1996.
  657.  
  658. Acknowledgements
  659.  
  660.    The following people also contributed to this document, directly or
  661.    indirectly: Chris Newman, Mark Crispin, Rick McGowan, Joe Becker,
  662.    John Jenkins, and Asmus Freytag. This document also was reviewed by
  663.    the Unicode Technical Committee, and the authors wish to thank all of
  664.    the UTC representatives for their input. The authors are, of course,
  665.    responsible for any errors or omissions which may remain in the text.
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Whistler & Adams             Informational                     [Page 12]
  675.  
  676. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  677.  
  678.  
  679. Authors' Addresses
  680.  
  681.    Ken Whistler
  682.    Sybase, Inc.
  683.    6475 Christie Ave.
  684.    Emeryville, CA 94608-1050
  685.  
  686.    Phone: +1 510 922 3611
  687.    EMail: kenw@sybase.com
  688.  
  689.  
  690.    Glenn Adams
  691.    Spyglass, Inc.
  692.    One Cambridge Center
  693.    Cambridge, MA 02142
  694.  
  695.    Phone: +1 617 679 4652
  696.    EMail: glenn@spyglass.com
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. Whistler & Adams             Informational                     [Page 13]
  731.  
  732. RFC 2482         Language Tagging in Unicode Plain Text     January 1999
  733.  
  734.  
  735. Full Copyright Statement
  736.  
  737.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  738.  
  739.    This document and translations of it may be copied and furnished to
  740.    others, and derivative works that comment on or otherwise explain it
  741.    or assist in its implementation may be prepared, copied, published
  742.    and distributed, in whole or in part, without restriction of any
  743.    kind, provided that the above copyright notice and this paragraph are
  744.    included on all such copies and derivative works.  However, this
  745.    document itself may not be modified in any way, such as by removing
  746.    the copyright notice or references to the Internet Society or other
  747.    Internet organizations, except as needed for the purpose of
  748.    developing Internet standards in which case the procedures for
  749.    copyrights defined in the Internet Standards process must be
  750.    followed, or as required to translate it into languages other than
  751.    English.
  752.  
  753.    The limited permissions granted above are perpetual and will not be
  754.    revoked by the Internet Society or its successors or assigns.
  755.  
  756.    This document and the information contained herein is provided on an
  757.    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  758.    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  759.    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  760.    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  761.    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Whistler & Adams             Informational                     [Page 14]
  787.  
  788.