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
Library
of Congress