Amended 1/17/97 to correct minor ASN.1 syntax errors.
Amended 4/97 to provide limited support for records.
The 4/97 changes are considered approved as of June 1,
1997.
Affected areas are rule 6 below, and the ASN.1
parameters recordsInSelectedCharSets in OriginProposal
and TargetResponse.
The following rule added 4/97.
When character set negotiation is in effect for records, if a requested record is not available in one of the negotiated character sets the target will substitute a surrogate diagnostic for the record. The origin may determine the supported character sets for a record, using a mechanism such as eSpec-1.
The origin may override the negotiation by requesting the record according to one of the supported character sets (again, using a mechanism such as espec-1).
UserInfoFormat-charSetandLanguageNegotiation-1 {Z39-50-userInfoFormat CharSetandLanguageNegotiation-1 (2)} DEFINITIONS ::= BEGIN CharSetandLanguageNegotiation ::= CHOICE{ proposal [1] IMPLICIT OriginProposal, response [2] IMPLICIT TargetResponse} -- -- For character sets: -- Origin proposes one, two, or all three of the following, in order of -- preference: -- (a) 2022 character sets. -- (b) 10646 character set. -- (c) Private character set. -- -- The target responds with one of (a), (b), or (c), indicating the -- character set(s) to be supported for all name and message strings. -- -- If the origin includes (a), -- the origin proposes: -- (1) A proposed environment: 7-bit, 8-bit, or no-preference. -- (2) A set of iso 2022 registration numbers. -- (3) One or more proposed initial sets of registration numbers, -- for c0,c1, g0,g1,g2 and g3. These must come from (2). -- (4) The proposed encoding level. -- And if the target selects (a), it responds with: -- (1) A selected environment: 7-bit or 8-bit. -- (2) A subset of the set of iso 2022 registration numbers proposed -- by the origin. -- (3) The initial set of registrations, which must come from (2) -- but need not be from the set of initial registrations proposed -- by the origin. -- (4) The encoding level; less than or equal to that proposed. -- -- If the origin includes (b), -- The origin proposes: -- (1) A list of collections (i.e. subsets of characters from the -- complete 10646 definition). -- (2) An implementation level. -- (3) The encoding level: 2 or 4 byte. -- And if the target selects (b), it responds by choosing a subset of the -- collections proposed by the origin in (1), an implementation level less -- than or equal to that proposed by the origin in (2), and an encoding -- level less that or equal to that proposed by the origin in (3). -- -- If the origin includes (c), the origin proposes one of the following: -- (1) A list of private character sets, by one or more object -- identifiers. -- (2) A list of private character sets, by an EXTERNAL. -- (3) An indication to use a private, previously agreed upon -- character set. -- And if the target selects (c): -- - If the origin proposed (1), the target should respond with (1), and -- the list of object identifiers should be a subset of the list that -- the origin included. -- - If the origin proposed (2), the target should respond with (2), using -- the same EXTERNAL definition (but not necessarily the same content) -- used by the origin. -- - If the origin proposed (3), the target should respond with (3). -- -- For Languages: -- The origin optionally proposes one or more language codes. The target -- response may include a single language code, which indicates the -- language to be used for all message strings. The target may include or -- omit this, whether or not the origin included a proposed set, and the -- language code indicated need not be from among those proposed. -- -- OriginProposal ::= SEQUENCE { proposedCharSets [1] IMPLICIT SEQUENCE OF CHOICE{ -- Each should occur at most once, and in order of preference -- (the "order of preference" is the reason why this is -- "SEQUENCE OF CHOICE" rather than just "SEQUENCE") iso2022 [1] Iso2022, iso10646 [2] IMPLICIT Iso10646, private [3] PrivateCharacterSet} OPTIONAL, -- proposedCharSets must be omitted -- if origin proposes version 2 proposedlanguages [2] IMPLICIT SEQUENCE OF LanguageCode OPTIONAL, recordsInSelectedCharSets [3] IMPLICIT BOOLEAN OPTIONAL -- default 'false'. Added 4/97. See rule 6 above. } TargetResponse ::= SEQUENCE{ selectedCharSets [1] CHOICE{ iso2022 [1] Iso2022, iso10646 [2] IMPLICIT Iso10646, private [3] PrivateCharacterSet, none [4] IMPLICIT NULL -- If selected, no negotiation -- is assumed to be in force -- for character sets. } OPTIONAL, -- Omitted if and only if proposedCharSets -- was Omitted in the request. selectedLanguage [2] IMPLICIT LanguageCode OPTIONAL, recordsInSelectedCharSets [3] IMPLICIT BOOLEAN OPTIONAL -- Omitted if and only if 'recordsInSelectedCharSets' was omitted -- in the request. Added 4/97. See rule 6 above. } PrivateCharacterSet ::= CHOICE{ viaOid [1] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER, externallySpecified [2] IMPLICIT EXTERNAL, previouslyAgreedUpon [3] IMPLICIT NULL} LanguageCode ::= GeneralString -- from ANSI Z39.53-1994 -- Definition of ISO2022 -- For ISO 2022, the following is negotiated: -- 1) The environment: 7-bit or 8-bit; -- 2) a set of registration numbers (from the ISO Register of coded -- character sets) for graphical; -- control character sets; -- 3) g0, g1, g2, g3, c0, c1, the register numbers of the graphical and -- control character sets that are initially designated to g0, g1, -- etc. More that one may be proposed by the origin, and one is -- selected by the target; -- 4) gleft: which of G0, G1, G2 or G3, initially has GL shift status in -- an 8-bit environment or has shift status in a 7-bit environment; and -- 5) gright: which of G1, G2 or G3 initially has GR shift status in an -- 8-bit environment. Iso2022 ::= CHOICE{ originProposal [1] IMPLICIT SEQUENCE{ proposedEnvironment [0] Environment OPTIONAL, -- omitted means no preference proposedSets [1] IMPLICIT SEQUENCE OF INTEGER, proposedInitialSets [2] IMPLICIT SEQUENCE OF InitialSet, proposedLeftAndRight [3] IMPLICIT LeftAndRight}, targetResponse [2] IMPLICIT SEQUENCE{ selectedEnvironment [0] Environment, selectedSets [1] IMPLICIT SEQUENCE OF INTEGER, selectedinitialSet [2] IMPLICIT InitialSet, selectedLeftAndRight [3] IMPLICIT LeftAndRight}} Environment ::= CHOICE{ sevenBit [1] IMPLICIT NULL, eightBit [2] IMPLICIT NULL} InitialSet::= SEQUENCE{ g0 [0] IMPLICIT INTEGER, g1 [1] IMPLICIT INTEGER, g2 [2] IMPLICIT INTEGER, g3 [3] IMPLICIT INTEGER, c0 [4] IMPLICIT INTEGER, c1 [5] IMPLICIT INTEGER} LeftAndRight ::= SEQUENCE{ gLeft [3] IMPLICIT INTEGER{ g0 (0), g1 (1), g2 (2), g3 (3)}, gRight [4] IMPLICIT INTEGER{ g1 (1), g2 (2), g3 (3)}} -- Definition of Iso10646 -- -- The 10646 object identifier looks like: -- 1.0.10646.1.implementationLevel.repertoireSubset.arc1.arc2. .... -- -- (The second '1' is for "part 1" of 10646.) -- -- ImplementationLevel is 1-3 -- -- repertoireSubset is 0 or 1, for 'all' or 'collections'. -- The arcs are present only if repertoireSubset is 'collections', -- in which case arc1, arc2, etc., are the -- identifiers of collections of character repertoires. -- -- There is a second 10646 oid, for specifying 2 or 4 bytes: -- 1.0.10646.1.0.bytes -- -- (The second '0' represents "transfer syntax".) -- -- where bytes is 2 or 4. -- Iso10646 ::= SEQUENCE{ collections [1] IMPLICIT OBJECT IDENTIFIER, -- oid of form 1.0.10646.implementationLevel -- .repertoireSubset.arc1.arc2. .... -- Target to choose a subset of the collections -- proposed by the origin, and an implementation level -- less than or equal to that proposed. encodingLevel [2] IMPLICIT OBJECT IDENTIFIER -- oid of form 1.0.10646.0.bytes -- where value of 'bytes' is 2 or 4 for 2 or 4 bytes. -- Target to choose an encoding level less that or -- equal to that proposed by origin. } END