2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT Editor: Kurt D. Zeilenga
|
|
|
|
|
Intended Category: Standard Track OpenLDAP Foundation
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Expires in six months 1 March 2002
|
2002-01-27 08:14:23 +08:00
|
|
|
|
Obsoletes: RFC 2596
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Language Tags and Ranges in LDAP
|
2002-06-07 09:58:40 +08:00
|
|
|
|
draft-zeilenga-ldap-rfc2596-01.txt
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Status of Memo
|
|
|
|
|
|
|
|
|
|
This document is an Internet-Draft and is in full conformance with all
|
|
|
|
|
provisions of Section 10 of RFC2026.
|
|
|
|
|
|
|
|
|
|
This document is intended to be, after appropriate review and
|
|
|
|
|
revision, submitted to the RFC Editor as a Standard Track document.
|
|
|
|
|
Distribution of this memo is unlimited. Technical discussion of this
|
|
|
|
|
document will take place on the IETF LDAP Extensions Working Group
|
|
|
|
|
(LDAPext) mailing list <ietf-ldapext@netscape.com>. Please send
|
|
|
|
|
editorial comments directly to the document editor
|
|
|
|
|
<Kurt@OpenLDAP.org>.
|
|
|
|
|
|
|
|
|
|
Internet-Drafts are working documents of the Internet Engineering Task
|
|
|
|
|
Force (IETF), its areas, and its working groups. Note that other
|
|
|
|
|
groups may also distribute working documents as Internet-Drafts.
|
|
|
|
|
Internet-Drafts are draft documents valid for a maximum of six months
|
|
|
|
|
and may be updated, replaced, or obsoleted by other documents at any
|
|
|
|
|
time. It is inappropriate to use Internet-Drafts as reference
|
|
|
|
|
material or to cite them other than as ``work in progress.''
|
|
|
|
|
|
|
|
|
|
The list of current Internet-Drafts can be accessed at
|
|
|
|
|
<http://www.ietf.org/ietf/1id-abstracts.txt>. The list of
|
|
|
|
|
Internet-Draft Shadow Directories can be accessed at
|
|
|
|
|
<http://www.ietf.org/shadow.html>.
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Copyright 2002, The Internet Society. All Rights Reserved.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
Please see the Copyright section near the end of this document for
|
|
|
|
|
more information.
|
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
It is often desirable to to be able to indicate the natural language
|
|
|
|
|
associated with values held in a directory and to be able to query the
|
|
|
|
|
directory for values which fulfill the user's language needs. This
|
|
|
|
|
document details the use of Language Tags and Ranges in the
|
|
|
|
|
Lightweight Directory Access Protocol (LDAP).
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 1]
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Conventions
|
|
|
|
|
|
|
|
|
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
2002-06-07 09:58:40 +08:00
|
|
|
|
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
2002-01-27 08:14:23 +08:00
|
|
|
|
document are to be interpreted as described in BCP 14 [RFC2119].
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. Background and Intended Use
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
The Lightweight Directory Access Protocol (LDAP) [Roadmap] provides a
|
2002-01-27 08:14:23 +08:00
|
|
|
|
means for clients to interrogate and modify information stored in a
|
|
|
|
|
distributed directory system. The information in the directory is
|
|
|
|
|
maintained as attributes of entries. Most of these attributes have
|
|
|
|
|
syntaxes which are human-readable strings, and it is desirable to be
|
|
|
|
|
able to indicate the natural language associated with attribute
|
|
|
|
|
values.
|
|
|
|
|
|
|
|
|
|
This document describes how language tags and ranges [RFC3066] are
|
|
|
|
|
carried in LDAP and are to be interpreted by LDAP implementations.
|
|
|
|
|
All implementations MUST be prepared to accept language tags and
|
|
|
|
|
ranges in the LDAP protocol.
|
|
|
|
|
|
|
|
|
|
This document replaces RFC 2596. Appendix A summaries changes made
|
|
|
|
|
since RFC 2596.
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Appendix B discusses differences from X.500(1997) "contexts"
|
|
|
|
|
mechanism.
|
|
|
|
|
|
|
|
|
|
Appendix A and B are provided for information purposes and are not a
|
|
|
|
|
normative part of this specification.
|
|
|
|
|
|
|
|
|
|
The remainder of this section provides a summary of Language Tags,
|
2002-01-27 08:14:23 +08:00
|
|
|
|
Language Ranges, and Attribute Descriptions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.1. Language Tags
|
|
|
|
|
|
|
|
|
|
Section 2 of BCP 47 [RFC3066] describes the language tag format which
|
|
|
|
|
is used in LDAP. Briefly, it is a string of ASCII alphabetic
|
|
|
|
|
characters and hyphens. Examples include "fr", "en-US" and "ja-JP".
|
|
|
|
|
Language tags are case insensitive. For example, the language tag
|
|
|
|
|
"en-us" is the same as "EN-US".
|
|
|
|
|
|
|
|
|
|
Section 2 of this document details use of language tags in LDAP.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2. Language Ranges
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 2]
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Section 2.5 of BCP 47 [RFC3066] describes the language ranges.
|
|
|
|
|
Language ranges are used to specify sets of language tags.
|
|
|
|
|
|
|
|
|
|
A language range matches a language tag if it exactly equals the tag,
|
|
|
|
|
or if it exactly equals a prefix of the tag such that the first
|
|
|
|
|
character following the prefix is "-". The special tag "*" matches
|
2002-01-27 08:14:23 +08:00
|
|
|
|
all tags.
|
|
|
|
|
|
|
|
|
|
Due to restrictions upon option naming in LDAP, this document uses a
|
|
|
|
|
different language range syntax. However, the semantics of language
|
|
|
|
|
ranges in LDAP is consistent with BCP 47.
|
|
|
|
|
|
|
|
|
|
Section 3 of this document details use of language ranges in LDAP.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3. Attribute Descriptions
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
This section provides an overview of attributes in LDAP. LDAP
|
|
|
|
|
attributes are defined in [Models].
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
An attribute consists of a type, a set of zero or more associated
|
|
|
|
|
tagging options, and a set of one or more values. The type and the
|
|
|
|
|
options are combined into the AttributeDescription.
|
|
|
|
|
AttributeDescriptions can also contain options which are not part of
|
|
|
|
|
the attribute, but indicate some other function such as the transfer
|
|
|
|
|
encoding.
|
|
|
|
|
|
|
|
|
|
An attribute with one or more tagging options is a direct subtype of
|
|
|
|
|
each attribute of the same with all but one of the tagging options.
|
|
|
|
|
If the attribute's type is a direct subtype of some other type, then
|
|
|
|
|
the attribute is also a direct subtype of the attribute whose
|
|
|
|
|
description consists of the the supertype and all of the tagging
|
|
|
|
|
options. That is, CN;x-bar;x-foo is a direct subtype of CN;x-bar,
|
|
|
|
|
CN;x-foo, and name;x-bar;x-foo. Note that CN is a subtype of name.
|
|
|
|
|
|
|
|
|
|
If the attribute description contains an unrecognized option, the
|
|
|
|
|
attribute description is treated as an unrecognized attribute type.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
As language tags are intended to stored with the attribute, they are
|
2002-06-07 09:58:40 +08:00
|
|
|
|
to treated as tagging options as described in Section 2. Language
|
|
|
|
|
range are used only to match against language ranges and are not
|
|
|
|
|
stored with the attribute. They are not treated tagging options (nor
|
|
|
|
|
as transfer options), but as described in Section 3.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. Use of Language Tags in LDAP
|
|
|
|
|
|
|
|
|
|
This section describes how LDAP implementations MUST interpret
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 3]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
2002-01-27 08:14:23 +08:00
|
|
|
|
language tags in performing operations.
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Servers which support storing attributes with language tag options in
|
|
|
|
|
the Directory Information Tree (DIT) SHOULD allow any attribute type
|
|
|
|
|
it recognizes that has the Directory String, IA5 String, or other
|
|
|
|
|
textual string syntax to have language tag options associated with it.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
Servers MAY allow language options to be associated with other
|
|
|
|
|
attributes types.
|
|
|
|
|
|
|
|
|
|
Clients SHOULD NOT assume servers are capable of storing attributes
|
|
|
|
|
with language tags in the directory.
|
|
|
|
|
|
|
|
|
|
Implementations MUST NOT otherwise interpret the structure of the tag
|
2002-06-07 09:58:40 +08:00
|
|
|
|
when comparing two tag, and MUST treat them simply as strings of
|
2002-01-27 08:14:23 +08:00
|
|
|
|
characters. Implementations MUST allow any arbitrary string which
|
2002-06-07 09:58:40 +08:00
|
|
|
|
conforms to the syntax defined in BCP 47 [RFC3066] to be used as a
|
|
|
|
|
language tag.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.1. Language Tag Options
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
A language tag option associates a natural language with values of an
|
|
|
|
|
attribute. An attribute description MAY contain multiple language tag
|
|
|
|
|
options. An entry MAY contain multiple attributes with same attribute
|
|
|
|
|
type but different combinations of language tag (and other) options.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
A language tag option conforms to the following ABNF [RFC2234]:
|
|
|
|
|
|
|
|
|
|
language-tag-option = "lang-" Language-Tag
|
|
|
|
|
|
|
|
|
|
where the Language-Tag production is as defined in BCP 47 [RFC3066].
|
2002-06-07 09:58:40 +08:00
|
|
|
|
This production and those it imports from [RFC2234] are provided here
|
|
|
|
|
for convenience:
|
|
|
|
|
|
|
|
|
|
Language-Tag = Primary-subtag *( "-" Subtag )
|
|
|
|
|
|
|
|
|
|
Primary-subtag = 1*8ALPHA
|
|
|
|
|
|
|
|
|
|
Subtag = 1*8(ALPHA / DIGIT)
|
|
|
|
|
|
|
|
|
|
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
|
|
|
|
|
|
|
|
|
|
DIGIT = %x30-39 ; 0-9
|
|
|
|
|
|
|
|
|
|
A language tag option is a tagging option [Models]. A language tag
|
|
|
|
|
option has no effect on the syntax of the attribute's values nor their
|
|
|
|
|
transfer encoding.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 4]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Examples of valid AttributeDescription:
|
|
|
|
|
|
|
|
|
|
givenName;lang-en-US
|
|
|
|
|
CN;lang-ja
|
|
|
|
|
SN;lang-de;lang-gem-PFL
|
|
|
|
|
O;lang-i-klingon;x-foobar
|
|
|
|
|
description;x-foobar
|
|
|
|
|
CN
|
|
|
|
|
|
|
|
|
|
Notes: The last two have no language tag options. The x-foobar option
|
|
|
|
|
is fictious and used for example purposes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.2. Search Filter
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
If language tag options are present in an AttributeDescription in an
|
2002-01-27 08:14:23 +08:00
|
|
|
|
assertion, then for each entry within scope, the values of each
|
|
|
|
|
attribute whose AttributeDescription consists of the same attribute
|
|
|
|
|
type or its subtypes and contains each of the presented (and possibly
|
|
|
|
|
other) options is to be matched.
|
|
|
|
|
|
|
|
|
|
Thus for example a filter of an equality match of type
|
|
|
|
|
"name;lang-en-US" and assertion value "Billy Ray", against the
|
|
|
|
|
following directory entry
|
|
|
|
|
|
|
|
|
|
dn: SN=Ray,DC=example,DC=com
|
|
|
|
|
objectclass: top DOES NOT MATCH (wrong type)
|
|
|
|
|
objectclass: person DOES NOT MATCH (wrong type)
|
|
|
|
|
name;lang-en-US: Billy Ray MATCHES
|
|
|
|
|
name;lang-en-US: Billy Bob DOES NOT MATCH (wrong value)
|
|
|
|
|
CN;lang-en-US: Billy Ray MATCHES
|
|
|
|
|
CN;lang-en-US;x-foobar: Billy Ray MATCHES
|
|
|
|
|
CN;lang-en;x-foobar: Billy Ray DOES NOT MATCH (differing lang-)
|
|
|
|
|
CN;x-foobar: Billy Ray DOES NOT MATCH (no lang-)
|
|
|
|
|
name: Billy Ray DOES NOT MATCH (no lang-)
|
|
|
|
|
SN;lang-en-GB;lang-en-US: Billy Ray MATCHES
|
2002-06-07 09:58:40 +08:00
|
|
|
|
SN: Ray DOES NOT MATCH (no lang-,
|
|
|
|
|
wrong value)
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
(Note that "CN" and "SN" are subtypes of "name".)
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
It is noted that providing a language tag option in a search filter
|
|
|
|
|
AttributeDescription will filter out desirable values where the tag
|
|
|
|
|
does not match exactly. For example, the filter (name;lang-en=Billy
|
|
|
|
|
Ray) does NOT match the attribute "name;lang-en-US: Billy Ray".
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
If the server does not support storing attributes with language tag
|
|
|
|
|
options in the DIT, then any assertion which includes a language tag
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 5]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
option will not match as such it is an unrecognized attribute type.
|
|
|
|
|
No error would be returned because of this; a presence assertion would
|
2002-01-27 08:14:23 +08:00
|
|
|
|
evaluate to FALSE and all other assertions to Undefined.
|
|
|
|
|
|
|
|
|
|
If no options are specified in the assertion, then only the base
|
|
|
|
|
attribute type and the assertion value need match the value in the
|
|
|
|
|
directory.
|
|
|
|
|
|
|
|
|
|
Thus for example a filter of an equality match of type "name" and
|
|
|
|
|
assertion value "Billy Ray", against the following directory entry
|
|
|
|
|
|
|
|
|
|
dn: SN=Ray,DC=example,DC=net
|
|
|
|
|
objectclass: top DOES NOT MATCH (wrong type)
|
|
|
|
|
objectclass: person DOES NOT MATCH (wrong type)
|
|
|
|
|
name;lang-en-US: Billy Ray MATCHES
|
|
|
|
|
name;lang-en-US: Billy Bob DOES NOT MATCH (wrong value)
|
|
|
|
|
CN;lang-en-US;x-foobar: Billy Ray MATCHES
|
|
|
|
|
CN;lang-en;x-foobar: Billy Ray MATCHES
|
|
|
|
|
CN;x-foobar: Billy Ray MATCHES
|
|
|
|
|
name: Billy Ray MATCHES
|
|
|
|
|
SN;lang-en-GB;lang-en-US: Billy Ray MATCHES
|
|
|
|
|
SN: Ray DOES NOT MATCH (wrong value)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.3. Requested Attributes in Search
|
|
|
|
|
|
|
|
|
|
Clients can provide language tag options in AttributeDescription in
|
|
|
|
|
the requested attribute list in a search request.
|
|
|
|
|
|
|
|
|
|
If language tag options are provided in an attribute description, then
|
|
|
|
|
only attributes in a directory entry whose attribute descriptions have
|
|
|
|
|
the same attribute type or its subtype and the provided language tags
|
|
|
|
|
options are to be returned. Thus if a client requests just the
|
|
|
|
|
attribute "name;lang-en", the server would return "name;lang-en" and
|
|
|
|
|
"CN;lang-en;lang-ja" but not "SN" nor "name;lang-fr".
|
|
|
|
|
|
|
|
|
|
Clients can provide in the attribute list multiple
|
|
|
|
|
AttributeDescription which have the same base attribute type but
|
|
|
|
|
different options. For example a client could provide both
|
|
|
|
|
"name;lang-en" and "name;lang-fr", and this would permit an attribute
|
|
|
|
|
with either language tag option to be returned. Note there would be
|
|
|
|
|
no need to provide both "name" and "name;lang-en" since all subtypes
|
|
|
|
|
of name would match "name".
|
|
|
|
|
|
|
|
|
|
If a server does not support storing attributes with language tag
|
|
|
|
|
options in the DIT, then any attribute descriptions in the list which
|
|
|
|
|
include language tag options are to be ignored, just as if they were
|
|
|
|
|
unknown attribute types.
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 6]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
2002-01-27 08:14:23 +08:00
|
|
|
|
If a request is made specifying all attributes or an attribute is
|
|
|
|
|
requested without providing a language tag option, then all attribute
|
|
|
|
|
values regardless of their language tag option are returned.
|
|
|
|
|
|
|
|
|
|
For example, if the client requests a "description" attribute, and a
|
|
|
|
|
matching entry contains the following attributes:
|
|
|
|
|
|
|
|
|
|
objectclass: top
|
|
|
|
|
objectclass: organization
|
|
|
|
|
O: Software GmbH
|
|
|
|
|
description: software
|
|
|
|
|
description;lang-en: software products
|
|
|
|
|
description;lang-de: Softwareprodukte
|
|
|
|
|
postalAddress: Berlin 8001 Germany
|
|
|
|
|
postalAddress;lang-de: Berlin 8001 Deutschland
|
|
|
|
|
|
|
|
|
|
The server would return:
|
|
|
|
|
|
|
|
|
|
description: software
|
|
|
|
|
description;lang-en: software products
|
|
|
|
|
description;lang-de: Softwareprodukte
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.4. Compare
|
|
|
|
|
|
|
|
|
|
Language tag options can be present in an AttributeDescription used in
|
|
|
|
|
a compare request AttributeValueAssertion. This is to be treated by
|
|
|
|
|
servers the same as the use of language tag options in a search filter
|
2002-06-07 09:58:40 +08:00
|
|
|
|
with an equality match, as described in Section 2.2. If there is no
|
2002-01-27 08:14:23 +08:00
|
|
|
|
attribute in the entry with the same subtype and language tag options,
|
|
|
|
|
the noSuchAttributeType error will be returned.
|
|
|
|
|
|
|
|
|
|
Thus for example a compare request of type "name" and assertion value
|
|
|
|
|
"Johann", against an entry containing the following attributes:
|
|
|
|
|
|
|
|
|
|
objectclass: top
|
|
|
|
|
objectclass: person
|
|
|
|
|
givenName;lang-de-DE: Johann
|
|
|
|
|
CN: Johann Sibelius
|
|
|
|
|
SN: Sibelius
|
|
|
|
|
|
|
|
|
|
would cause the server to return compareTrue.
|
|
|
|
|
|
|
|
|
|
However, if the client issued a compare request of type "name;lang-de"
|
|
|
|
|
and assertion value "Johann" against the above entry, the request
|
|
|
|
|
would fail with the noSuchAttributeType error.
|
|
|
|
|
|
|
|
|
|
If the server does not support storing attributes with language tag
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 7]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
2002-01-27 08:14:23 +08:00
|
|
|
|
options in the DIT, then any comparison which includes a language tag
|
|
|
|
|
option will always fail to locate an attribute, and
|
|
|
|
|
noSuchAttributeType will be returned.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.5. Add Operation
|
|
|
|
|
|
|
|
|
|
Clients can provide language options in AttributeDescription in
|
|
|
|
|
attributes of a new entry to be created.
|
|
|
|
|
|
|
|
|
|
A client can provide multiple attributes with the same attribute type
|
|
|
|
|
and value, so long as each attribute has a different set of language
|
|
|
|
|
tag options.
|
|
|
|
|
|
|
|
|
|
For example, the following is a legal request.
|
|
|
|
|
|
|
|
|
|
dn: CN=John Smith,DC=example,DC=com
|
|
|
|
|
objectclass: top
|
|
|
|
|
objectclass: person
|
|
|
|
|
objectclass: residentialPerson
|
|
|
|
|
name: John Smith
|
|
|
|
|
CN: John Smith
|
|
|
|
|
CN;lang-en: John Smith
|
|
|
|
|
SN: Smith
|
|
|
|
|
SN;lang-en;lang-en-US: Smith
|
|
|
|
|
streetAddress: 1 University Street
|
|
|
|
|
streetAddress;lang-en: 1 University Street
|
|
|
|
|
streetAddress;lang-fr: 1 rue Universite
|
|
|
|
|
houseIdentifier;lang-fr: 9e etage
|
|
|
|
|
|
|
|
|
|
If a server does not support storing language tag options with
|
|
|
|
|
attribute values in the DIT, then it MUST treat an
|
|
|
|
|
AttributeDescription with a language tag option as an unrecognized
|
|
|
|
|
attribute. If the server forbids the addition of unrecognized
|
|
|
|
|
attributes then it MUST fail the add request with an appropriate
|
|
|
|
|
result code.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.6. Modify Operation
|
|
|
|
|
|
|
|
|
|
A client can provide language tag options in an AttributeDescription
|
|
|
|
|
as part of a modification element in the modify operation.
|
|
|
|
|
|
|
|
|
|
Attribute types and language tag options MUST match exactly against
|
|
|
|
|
values stored in the directory. For example, if the modification is a
|
|
|
|
|
"delete", then if the stored values to be deleted have language tag
|
|
|
|
|
options, then those language tag options MUST be provided in the
|
|
|
|
|
modify operation, and if the stored values to be deleted do not have
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 8]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
2002-01-27 08:14:23 +08:00
|
|
|
|
any language tag option, then no language tag option is to be
|
|
|
|
|
provided.
|
|
|
|
|
|
|
|
|
|
If the server does not support storing language tag options with
|
|
|
|
|
attribute values in the DIT, then it MUST treat an
|
|
|
|
|
AttributeDescription with a language tag option as an unrecognized
|
|
|
|
|
attribute, and MUST fail the request with an appropriate result code.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. Use of Language Ranges in LDAP
|
|
|
|
|
|
|
|
|
|
Since the publication of RFC 2596, it has become apparent that there
|
|
|
|
|
is a need to provide a mechanism for a client to request attributes
|
|
|
|
|
based upon set of language tag options whose tags all begin with the
|
2002-06-07 09:58:40 +08:00
|
|
|
|
same sequence of language sub-tags.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
AttributeDescriptions containing language range options are intended
|
|
|
|
|
to be used in attribute value assertions, search attribute lists, and
|
|
|
|
|
other places where the client desires to provide an attribute
|
|
|
|
|
description matching of a range of language tags associated with
|
|
|
|
|
attributes.
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
A language range option conforms to the following ABNF [RFC2234]:
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
language-range-option = "lang-" [ Language-Tag "-" ]
|
|
|
|
|
|
|
|
|
|
where the Language-Tag production is as defined in BCP 47 [RFC3066].
|
2002-06-07 09:58:40 +08:00
|
|
|
|
This production and those it imports from [RFC2234] are provided here
|
|
|
|
|
for convenience:
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Language-Tag = Primary-subtag *( "-" Subtag )
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Primary-subtag = 1*8ALPHA
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Subtag = 1*8(ALPHA / DIGIT)
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
DIGIT = %x30-39 ; 0-9
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
A language range option matches a language tag option if language
|
|
|
|
|
range option less the trailing "-" matches exactly the language tag or
|
2002-01-27 08:14:23 +08:00
|
|
|
|
if the language range option (including the trailing "-") matches a
|
|
|
|
|
prefix of the language tag option. Note that the language range
|
|
|
|
|
option "lang-" matches all language tag options.
|
|
|
|
|
|
|
|
|
|
Examples of valid AttributeDescription containing language range
|
|
|
|
|
options:
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 9]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
2002-01-27 08:14:23 +08:00
|
|
|
|
givenName;lang-en-
|
|
|
|
|
CN;lang-
|
|
|
|
|
O;lang-x-;x-foobar
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
A language range option is not a tagging option. Attributes cannot be
|
|
|
|
|
stored with language range options. Any attempt to add or update an
|
|
|
|
|
attribute description with a language range option SHALL be treated as
|
|
|
|
|
an undefined attribute type and result in an error.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
A language range option has no effect on the transfer encoding nor on
|
2002-01-27 08:14:23 +08:00
|
|
|
|
the syntax of the attribute values.
|
|
|
|
|
|
|
|
|
|
Servers SHOULD support assertion of language ranges for any attribute
|
|
|
|
|
which they allow to stored with language tags.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.1. Search Filter
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
If a language range option is present in an AttributeDescription in an
|
|
|
|
|
assertion, then for each entry within scope, the values of each
|
2002-01-27 08:14:23 +08:00
|
|
|
|
attribute whose AttributeDescription consists of the same attribute
|
|
|
|
|
type or its subtypes and contains a language tag option matching the
|
|
|
|
|
language range option are to be returned.
|
|
|
|
|
|
|
|
|
|
Thus for example a filter of an equality match of type "name;lang-en-"
|
|
|
|
|
and assertion value "Billy Ray", against the following directory entry
|
|
|
|
|
|
|
|
|
|
dn: SN=Ray,DC=example,DC=com
|
|
|
|
|
objectclass: top DOES NOT MATCH (wrong type)
|
|
|
|
|
objectclass: person DOES NOT MATCH (wrong type)
|
|
|
|
|
name;lang-en-US: Billy Ray MATCHES
|
|
|
|
|
name;lang-en-US: Billy Bob DOES NOT MATCH (wrong value)
|
|
|
|
|
CN;lang-en-US: Billy Ray MATCHES
|
|
|
|
|
CN;lang-en-US;x-foobar: Billy Ray MATCHES
|
|
|
|
|
CN;lang-en;x-foobar: Billy Ray MATCHES
|
|
|
|
|
CN;x-foobar: Billy Ray DOES NOT MATCH (no lang-)
|
|
|
|
|
name: Billy Ray DOES NOT MATCH (no lang-)
|
|
|
|
|
SN;lang-en-GB;lang-en-US: Billy Ray MATCHES
|
2002-06-07 09:58:40 +08:00
|
|
|
|
SN: Ray DOES NOT MATCH (no lang-,
|
|
|
|
|
wrong value)
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
(Note that "CN" and "SN" are subtypes of "name".)
|
|
|
|
|
|
|
|
|
|
If the server does not support storing attributes with language tag
|
|
|
|
|
options in the DIT, then any assertion which includes a language range
|
|
|
|
|
option will not match as it is an unrecognized attribute type. No
|
|
|
|
|
error would be returned because of this; a presence filter would
|
|
|
|
|
evaluate to FALSE and all other assertions to Undefined.
|
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 10]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
2002-01-27 08:14:23 +08:00
|
|
|
|
3.2. Requested Attributes in Search
|
|
|
|
|
|
|
|
|
|
Clients can provide language range options in AttributeDescription in
|
|
|
|
|
the requested attribute list in a search request.
|
|
|
|
|
|
|
|
|
|
If a language range option is provided in an attribute description,
|
|
|
|
|
then only attributes in a directory entry whose attribute descriptions
|
|
|
|
|
have the same attribute type or its subtype and a language tag option
|
|
|
|
|
matching the provided language range option are to be returned. Thus
|
|
|
|
|
if a client requests just the attribute "name;lang-en-", the server
|
|
|
|
|
would return "name;lang-en-US" and "CN;lang-en;lang-ja" but not "SN"
|
|
|
|
|
nor "name;lang-fr".
|
|
|
|
|
|
|
|
|
|
Clients can provide in the attribute list multiple
|
|
|
|
|
AttributeDescription which have the same base attribute type but
|
|
|
|
|
different options. For example a client could provide both
|
|
|
|
|
"name;lang-en-" and "name;lang-fr-", and this would permit an
|
|
|
|
|
attribute whose type was name or subtype of name and with a language
|
|
|
|
|
tag option matching either language range option to be returned.
|
|
|
|
|
|
|
|
|
|
If a server does not support storing attributes with language tag
|
|
|
|
|
options in the DIT, then any attribute descriptions in the list which
|
|
|
|
|
include language range options are to be ignored, just as if they were
|
|
|
|
|
unknown attribute types.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3. Compare
|
|
|
|
|
|
|
|
|
|
Language range options can be present in an AttributeDescription used
|
|
|
|
|
in a compare request AttributeValueAssertion. This is to be treated
|
|
|
|
|
by servers the same as the use of language range options in a search
|
2002-06-07 09:58:40 +08:00
|
|
|
|
filter with an equality match, as described in Section 3.1. If there
|
2002-01-27 08:14:23 +08:00
|
|
|
|
is no attribute in the entry with the same subtype and a matching
|
|
|
|
|
language tag option, the noSuchAttributeType error will be returned.
|
|
|
|
|
|
|
|
|
|
Thus for example a compare request of type "name;lang-" and assertion
|
|
|
|
|
value "Johann", against the entry with the following attributes:
|
|
|
|
|
|
|
|
|
|
objectclass: top
|
|
|
|
|
objectclass: person
|
|
|
|
|
givenName;lang-de-DE: Johann
|
|
|
|
|
CN: Johann Sibelius
|
|
|
|
|
SN: Sibelius
|
|
|
|
|
|
|
|
|
|
will cause the server to return compareTrue. (Note that the language
|
|
|
|
|
range option "lang-" matches any language tag option.)
|
|
|
|
|
|
|
|
|
|
However, if the client issued a compare request of type "name;lang-de"
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 11]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
2002-01-27 08:14:23 +08:00
|
|
|
|
and assertion value "Sibelius" against the above entry, the request
|
|
|
|
|
would fail with the noSuchAttributeType error.
|
|
|
|
|
|
|
|
|
|
If the server does not support storing attributes with language tag
|
|
|
|
|
options in the DIT, then any comparison which includes a language
|
|
|
|
|
range option will always fail to locate an attribute, and
|
|
|
|
|
noSuchAttributeType will be returned.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. Discovering Language Option Support
|
|
|
|
|
|
|
|
|
|
A server SHOULD indicate that it supports storing attributes with
|
|
|
|
|
language tag options in the DIT by publishing OID.TDB as a value of
|
|
|
|
|
the supportedFeatures [FEATURES] attribute in the root DSE.
|
|
|
|
|
|
|
|
|
|
A server SHOULD indicate that it supports language range matching of
|
|
|
|
|
attributes with language tag options stored in the DIT by publishing
|
|
|
|
|
OID.TDB as a value of the supportedFeatures [FEATURES] attribute in
|
|
|
|
|
the root DSE.
|
|
|
|
|
|
|
|
|
|
A server MAY restrict use of language tag options to a subset of the
|
2002-06-07 09:58:40 +08:00
|
|
|
|
attribute types it recognizes. This document does not define a
|
2002-01-27 08:14:23 +08:00
|
|
|
|
mechanism for determining which subset of attribute types can be used
|
|
|
|
|
with language tag options.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5. Security Considerations
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Language tags and range options are used solely to indicate the native
|
|
|
|
|
language of values and in querying the directory for values which
|
|
|
|
|
fulfill the user's language needed. These options are not known to
|
|
|
|
|
raise specific security considerations. However, the reader should
|
|
|
|
|
consider general directory security issues detailed in the LDAP
|
|
|
|
|
technical specification [Roadmap].
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
6. Acknowledgments
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
This document is a revision of RFC 2596 by Mark Wahl and Tim Howes.
|
|
|
|
|
RFC 2596 was a product of the IETF ASID and LDAPEXT working groups.
|
|
|
|
|
|
|
|
|
|
This document borrows from a number of IETF documents including BCP
|
2002-06-07 09:58:40 +08:00
|
|
|
|
47.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
7. Normative References
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 12]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
|
|
|
|
|
|
|
|
|
|
[RFC2234] D. Crocker, P. Overell, "Augmented BNF for Syntax
|
|
|
|
|
Specifications: ABNF", RFC 2234, November 1997.
|
|
|
|
|
|
|
|
|
|
[RFC3066] Alvestrand, H., "Tags for the Identification of Languages",
|
|
|
|
|
BCP 47 (also RFC 3066), January 2001.
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
[Roadmap] K. Zeilenga (editor), "LDAP: Technical Specification Road
|
|
|
|
|
Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in
|
|
|
|
|
progress.
|
|
|
|
|
|
|
|
|
|
[Models] K. Zeilenga (editor), "LDAP: Directory Information Models",
|
|
|
|
|
draft-ietf-ldapbis-models-xx.txt, a work in progress.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
[FEATURES] K. Zeilenga, "Feature Discovery in LDAP",
|
|
|
|
|
draft-zeilenga-ldap-features-xx.txt (a work in progress).
|
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
8. Informative References
|
|
|
|
|
|
|
|
|
|
[X.501] "The Directory: Models", ITU-T Recommendation X.501, 1997.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
Appendix A. Differences from RFC 2596
|
|
|
|
|
|
|
|
|
|
This document adds support for language ranges, provides a mechanism
|
2002-01-27 08:14:23 +08:00
|
|
|
|
that a client can use to discover whether a server supports language
|
2002-06-07 09:58:40 +08:00
|
|
|
|
tags and ranges, and clarifies how attributes with multiple language
|
|
|
|
|
tags are to be treated. This document is a significant rewrite of RFC
|
|
|
|
|
2596.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
Appendix B. Differences from X.500(1997)
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
X.500(1997) [X.501] defines a different mechanism, contexts, as the
|
|
|
|
|
means of representing language tags (codes). This section summarizes
|
|
|
|
|
the major differences in approach.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
a) An X.500 operation which has specified a language code on a value
|
|
|
|
|
matches a value in the directory without a language code.
|
|
|
|
|
b) LDAP references BCP 47 [RFC3066], which allows for IANA
|
|
|
|
|
registration of new tags as well as unregistered tags.
|
|
|
|
|
c) LDAP supports language ranges.
|
|
|
|
|
d) LDAP does not allow language tags (and ranges) in distinguished
|
|
|
|
|
names.
|
|
|
|
|
e) X.500 describes subschema administration procedures to allow
|
|
|
|
|
language codes to be associated with particular attributes types.
|
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 13]
|
|
|
|
|
|
|
|
|
|
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Copyright 2002, The Internet Society. All Rights Reserved.
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|
|
|
|
|
This document and translations of it may be copied and furnished to
|
|
|
|
|
others, and derivative works that comment on or otherwise explain it
|
|
|
|
|
or assist in its implementation may be prepared, copied, published and
|
|
|
|
|
distributed, in whole or in part, without restriction of any kind,
|
|
|
|
|
provided that the above copyright notice and this paragraph are
|
|
|
|
|
included on all such copies and derivative works. However, this
|
|
|
|
|
document itself may not be modified in any way, such as by removing
|
|
|
|
|
the copyright notice or references to the Internet Society or other
|
|
|
|
|
Internet organizations, except as needed for the purpose of
|
|
|
|
|
developing Internet standards in which case the procedures for
|
|
|
|
|
copyrights defined in the Internet Standards process must be followed,
|
|
|
|
|
or as required to translate it into languages other than English.
|
|
|
|
|
|
|
|
|
|
The limited permissions granted above are perpetual and will not be
|
|
|
|
|
revoked by the Internet Society or its successors or assigns.
|
|
|
|
|
|
|
|
|
|
This document and the information contained herein is provided on an
|
|
|
|
|
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
|
|
|
|
|
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
|
|
|
|
|
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
|
|
|
|
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
|
|
|
|
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2002-06-07 09:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeilenga Language Tags and Ranges in LDAP [Page 14]
|
2002-01-27 08:14:23 +08:00
|
|
|
|
|