NegotiationRecordDefinition-charSetandLanguageNegotiation-3 {Z39-50-negotiationRecordDefinition CharSetandLanguageNegotiation-3 (3)} DEFINITIONS ::= BEGIN IMPORTS LanguageCode FROM RecordSyntax-explain; 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) (optionally) A list of collections (i.e. subsets of characters from the -- complete 10646 definition). -- (2) An implementation level. -- (3) Syntax/form: e.g. ucs-2, ucs-4, utf-8, utf-16. -- And if the target selects (b), it responds by choosing a subset of the -- collections proposed by the origin in (1) and an implementation level less -- than or equal to that proposed by the origin in (2). -- -- 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'. 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. See rule 6 above. } PrivateCharacterSet ::= CHOICE{ viaOid [1] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER, externallySpecified [2] IMPLICIT EXTERNAL, previouslyAgreedUpon [3] IMPLICIT NULL} -- IMPORTED -- 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 and control character sets; -- 3) g0, g1, g2, g3, c0, c1, the registration numbers of the graphical and -- control character sets that are initially designated to g0, g1, etc. -- The origin submits one or more sequences of values for -- g0, g1, g2, g3, c0, c1 (for each sequence: at least one of -- g0 and g1 must be included; g2 and g3 are optional and -- may be included only if g1 is included; -- c0 should be included; and c1 is optional); the target -- selects one of the proposed sequences. -- 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 OPTIONAL, g1 [1] IMPLICIT INTEGER OPTIONAL, -- one of g0 and g1 must be included g2 [2] IMPLICIT INTEGER OPTIONAL, g3 [3] IMPLICIT INTEGER OPTIONAL, --g2 and/or g3 may be included -- only if g1 was included c0 [4] IMPLICIT INTEGER, c1 [5] IMPLICIT INTEGER OPTIONAL} LeftAndRight ::= SEQUENCE{ gLeft [3] IMPLICIT INTEGER{ g0 (0), g1 (1), g2 (2), g3 (3)}, gRight [4] IMPLICIT INTEGER{ g1 (1), g2 (2), g3 (3)} OPTIONAL} -- 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 syntax/form: -- 1.0.10646.1.0.form -- -- (The second '0' represents "transfer syntax".) -- -- where values of form include: -- 2: ucs-2 -- 4: ucs-4 -- 5: utf-16 -- 8: utf-8 Iso10646 ::= SEQUENCE{ collections [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL, --oid of form 1.0.10646.1.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. -- -- when 'collections' is omitted, -- 'implementationLevel' defaults to 3. -- encodingLevel [2] IMPLICIT OBJECT IDENTIFIER -- oid of form 1.0.10646.1.0.form -- where value of 'form' is 2, 4, 5, or 8 -- for ucs-2, ucs-4, utf-16, utf-8 } END