draft-ietf-urn-ddds-07.txt | rfc3402.txt | |||
---|---|---|---|---|
URN M. Mealling | Network Working Group M. Mealling | |||
Internet-Draft VeriSign | Request for Comments: 3402 Verisign | |||
Expires: November 5, 2002 May 7, 2002 | Obsoletes: 2915, 2168 October 2002 | |||
Category: Standards Track | ||||
Dynamic Delegation Discovery System (DDDS) Part Two: The Algorithm | Dynamic Delegation Discovery System (DDDS) | |||
draft-ietf-urn-ddds-07.txt | Part Two: The Algorithm | |||
Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is in full conformance with | This document specifies an Internet standards track protocol for the | |||
all provisions of Section 10 of RFC2026. | Internet community, and requests discussion and suggestions for | |||
improvements. Please refer to the current edition of the "Internet | ||||
Internet-Drafts are working documents of the Internet Engineering | Official Protocol Standards" (STD 1) for the standardization state | |||
Task Force (IETF), its areas, and its working groups. Note that | and status of this protocol. Distribution of this memo is unlimited. | |||
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. | ||||
This Internet-Draft will expire on November 5, 2002. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (C) The Internet Society (2002). All Rights Reserved. | Copyright (C) The Internet Society (2002). All Rights Reserved. | |||
Abstract | Abstract | |||
This document describes the Dynamic Delegation Discovery System | This document describes the Dynamic Delegation Discovery System | |||
(DDDS) algorithm for applying dynamically retrieved string | (DDDS) algorithm for applying dynamically retrieved string | |||
transformation rules to an application-unique string. Well-formed | transformation rules to an application-unique string. Well-formed | |||
transformation rules will reflect the delegation of management of | transformation rules will reflect the delegation of management of | |||
information associated with the string. This document is also part | information associated with the string. This document is also part | |||
of a series that is completely specified in "Dynamic Delegation | of a series that is completely specified in "Dynamic Delegation | |||
Discovery System (DDDS) Part One: The Comprehensive DDDS Standard" | Discovery System (DDDS) Part One: The Comprehensive DDDS" (RFC 3401). | |||
(RFC WWWW). It is very important to note that it is impossible to | It is very important to note that it is impossible to read and | |||
read and understand any document in this series without reading the | understand any document in this series without reading the others. | |||
others. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. The Algorithm . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. The Algorithm . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3.1 Components of a Rule . . . . . . . . . . . . . . . . . . . . . 7 | 3.1 Components of a Rule . . . . . . . . . . . . . . . . . . . . . 6 | |||
3.2 Substitution Expression Syntax . . . . . . . . . . . . . . . . 8 | 3.2 Substitution Expression Syntax . . . . . . . . . . . . . . . . 6 | |||
3.3 The Complete Algorithm . . . . . . . . . . . . . . . . . . . . 10 | 3.3 The Complete Algorithm . . . . . . . . . . . . . . . . . . . . 8 | |||
4. Specifying An Application . . . . . . . . . . . . . . . . . . 12 | 4. Specifying An Application . . . . . . . . . . . . . . . . . . 9 | |||
5. Specifying A Database . . . . . . . . . . . . . . . . . . . . 14 | 5. Specifying A Database . . . . . . . . . . . . . . . . . . . . 11 | |||
6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
6.1 An Automobile Parts Identification System . . . . . . . . . . 16 | 6.1 An Automobile Parts Identification System . . . . . . . . . . 12 | |||
6.2 A Document Identification Service . . . . . . . . . . . . . . 17 | 6.2 A Document Identification Service . . . . . . . . . . . . . . 14 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | |||
References . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | References . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . 22 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
Full Copyright Statement . . . . . . . . . . . . . . . . . . . 23 | Full Copyright Statement . . . . . . . . . . . . . . . . . . . 17 | |||
1. Introduction | 1. Introduction | |||
The Dynamic Delegation Discovery System is used to implement lazy | The Dynamic Delegation Discovery System (DDDS) is used to implement | |||
binding of strings to data, in order to support dynamically | lazy binding of strings to data, in order to support dynamically | |||
configured delegation systems. The DDDS functions by mapping some | configured delegation systems. The DDDS functions by mapping some | |||
unique string to data stored within a DDDS Database by iteratively | unique string to data stored within a DDDS Database by iteratively | |||
applying string transformation rules until a terminal condition is | applying string transformation rules until a terminal condition is | |||
reached. | reached. | |||
This document describes the general DDDS algorithm, not any | This document describes the general DDDS algorithm, not any | |||
particular application or usage scenario. The entire series of | particular application or usage scenario. The entire series of | |||
documents is specified in "Dynamic Delegation Discovery System (DDDS) | documents is specified in "Dynamic Delegation Discovery System (DDDS) | |||
Part One: The Comprehensive DDDS Standard" (RFC WWWW) [1]. It is | Part One: The Comprehensive DDDS" (RFC 3401) [1]. It is very | |||
very important to note that it is impossible to read and understand a | important to note that it is impossible to read and understand a | |||
single document in that series without reading the related documents. | single document in that series without reading the related documents. | |||
The DDDS's history is an evolution from work done by the Uniform | The DDDS's history is an evolution from work done by the Uniform | |||
Resource Name Working Group. When Uniform Resource Names [6] were | Resource Name Working Group. When Uniform Resource Names (URNs) [6] | |||
originally formulated there was the desire to locate an authoritative | were originally formulated there was the desire to locate an | |||
server for a URN that (by design) contained no information about | authoritative server for a URN that (by design) contained no | |||
network locations. A system was formulated that could use a database | information about network locations. A system was formulated that | |||
of rules that could be applied to a URN to find out information about | could use a database of rules that could be applied to a URN to find | |||
specific chunks of syntax. This system was originally called the | out information about specific chunks of syntax. This system was | |||
Resolver Discovery System [7] and only applied to URNs. | originally called the Resolver Discovery Service (RDS) [7] and only | |||
applied to URNs. | ||||
Over time other systems began to apply this same algorithm and | Over time other systems began to apply this same algorithm and | |||
infrastructure to other, non-URN related, systems (see Section 6 for | infrastructure to other, non-URN related, systems (see Section 6 for | |||
examples of other ways of using the DDDS). This caused some of the | examples of other ways of using the DDDS). This caused some of the | |||
underlying assumptions to change and need clarification. These | underlying assumptions to change and need clarification. These | |||
document are an update of those original URN specifications in order | documents are an update of those original URN specifications in order | |||
to allow new applications and rule databases to be developed in a | to allow new applications and rule databases to be developed in a | |||
standardized manner. | standardized manner. | |||
This document obsoletes RFC 2168 [11] and RFC 2915 [9] as well as | This document obsoletes RFC 2168 [11] and RFC 2915 [9] as well as | |||
updates RFC 2276 [7]. | updates RFC 2276 [7]. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119. | document are to be interpreted as described in RFC 2119. | |||
Application Unique String | Application Unique String | |||
A string that is the initial input to a DDDS application. The | A string that is the initial input to a DDDS application. The | |||
lexical structure of this string must imply a unique delegation | lexical structure of this string must imply a unique delegation | |||
path, which is analyzed and traced by the repeated selection and | path, which is analyzed and traced by the repeated selection and | |||
application of Rewrite Rules. | application of Rewrite Rules. | |||
Rewrite Rule | Rewrite Rule | |||
A rule that is applied to an Application Unique String to produce | A rule that is applied to an Application Unique String to produce | |||
skipping to change at page 4, line 46 | skipping to change at page 4, line 12 | |||
Application Unique String, the First Well Known Rule, and one or | Application Unique String, the First Well Known Rule, and one or | |||
more Databases that are valid for the Application. | more Databases that are valid for the Application. | |||
Rule Database | Rule Database | |||
Any store of Rules such that a unique key can identify a set of | Any store of Rules such that a unique key can identify a set of | |||
Rules that specify the delegation step used when that particular | Rules that specify the delegation step used when that particular | |||
Key is used. | Key is used. | |||
Services | Services | |||
A common rule database may be used to associate different services | A common rule database may be used to associate different services | |||
with a given Application Unique String; e.g. different protocol | with a given Application Unique String; e.g., different protocol | |||
functions, different operational characteristics, geographic | functions, different operational characteristics, geographic | |||
segregation, backwards compatibility, etc. Possible service | segregation, backwards compatibility, etc. Possible service | |||
differences might be message receiving services for email/fax/ | differences might be message receiving services for email/fax/ | |||
voicemail, load balancing over web servers, selection of a nearby | voicemail, load balancing over web servers, selection of a nearby | |||
mirror server, cost vs performance trade-offs, etc. These | mirror server, cost vs performance trade-offs, etc. These | |||
Services are included as part of a Rule to allow the Application | Services are included as part of a Rule to allow the Application | |||
to make branching decisions based on the applicability of one | to make branching decisions based on the applicability of one | |||
branch or the other from a Service standpoint. | branch or the other from a Service standpoint. | |||
Flags | Flags | |||
Most Applications will require a way for a Rule to signal to the | Most Applications will require a way for a Rule to signal to the | |||
Application that some Rules provide particular outcomes that | Application that some Rules provide particular outcomes that | |||
others do not; e.g. different output formats, extensibility | others do not; e.g., different output formats, extensibility | |||
mechanisms, terminal rule signaling, etc. Most Datatabases will | mechanisms, terminal rule signaling, etc. Most Databases will | |||
define a Flags field that an Application can use to encode various | define a Flags field that an Application can use to encode various | |||
values that express these signals. | values that express these signals. | |||
3. The Algorithm | 3. The Algorithm | |||
The DDDS algorithm is based on the concept of Rewrite Rules. These | The DDDS algorithm is based on the concept of Rewrite Rules. These | |||
rules are collected into a DDDS Rule Database, and accessed by given | rules are collected into a DDDS Rule Database, and accessed by given | |||
unique keys. A given Rule, when applied to an Application Unique | unique keys. A given Rule, when applied to an Application Unique | |||
String, transforms that String into new Key that can be used to | String, transforms that String into new Key that can be used to | |||
retrieve a new Rule from the Rule Database. This new rule is then | retrieve a new Rule from the Rule Database. This new rule is then | |||
re-applied to the original Application Unique String and the cycle | reapplied to the original Application Unique String and the cycle | |||
repeats itself until a terminating condition is reached. An | repeats itself until a terminating condition is reached. An | |||
Application MUST NOT apply a Rule to the output of a previous Rule. | Application MUST NOT apply a Rule to the output of a previous Rule. | |||
All Rewrite Rules for all Applications must ALWAYS apply to the exact | All Rewrite Rules for all Applications must ALWAYS apply to the exact | |||
same Application Unique String that the algorithm started with. | same Application Unique String that the algorithm started with. | |||
It is a fundamental assumption that the Application Unique String has | It is a fundamental assumption that the Application Unique String has | |||
some kind of regular, lexical structure that the rules can be applied | some kind of regular, lexical structure that the rules can be applied | |||
to. It is an assumption of the DDDS that the lexical element used to | to. It is an assumption of the DDDS that the lexical element used to | |||
make a delegation decision is simple enough to be contained within | make a delegation decision is simple enough to be contained within | |||
the Application Unique String itself. The DDDS does not solve the | the Application Unique String itself. The DDDS does not solve the | |||
case where a delegation decision is made using knowledge contained | case where a delegation decision is made using knowledge contained | |||
outside the AUS and the Rule (time of day, financial transactions, | outside the AUS and the Rule (time of day, financial transactions, | |||
rights management, etc). | rights management, etc.). | |||
Diagramatically the algorithm looks like this: | Diagrammatically the algorithm looks like this: | |||
+--------- Application Unique String | +--------- Application Unique String | |||
| +-----+ | | +-----+ | |||
| |input| | | |input| | |||
| +-------+ +---------+ | | +-------+ +---------+ | |||
| | First Well Known Rule | | | | First Well Known Rule | | |||
| +-------+ +--------+ | | +-------+ +--------+ | |||
| |output| | | |output| | |||
| +------+ | | +------+ | |||
| First Key | | First Key | |||
| | | | | | |||
| | | ||||
| +----<--------------<--------------+ | | +----<--------------<--------------+ | |||
| | | | | | | | |||
| key (a DDDS database always | | | key (a DDDS database always | | |||
| +-----+ takes a key and returns | | | +-----+ takes a key and returns | | |||
| |input| a rule) ^ | | |input| a rule) ^ | |||
| +---------+ +------------+ | | | +---------+ +------------+ | | |||
| | Lookup key in DDDS Database| | | | | Lookup key in DDDS Database| | | |||
| +---------+ +-----------+ | | | +---------+ +-----------+ | | |||
| |output| | | | |output| | | |||
| +------+ | | | +------+ | | |||
skipping to change at page 7, line 17 | skipping to change at page 5, line 42 | |||
+---------------->|input| either a key or the result) | | +---------------->|input| either a key or the result) | | |||
+---------------+ +------------------+ | | +---------------+ +------------------+ | | |||
| Apply Rules to Application Unique String| | | | Apply Rules to Application Unique String| | | |||
| until non-empty result are obtained | | | | until non-empty result are obtained | | | |||
| that meet the applications requirements | | | | that meet the applications requirements | | | |||
+---------------+ +-----------------+ | | +---------------+ +-----------------+ | | |||
|output| | | |output| | | |||
+------+ ^ | +------+ ^ | |||
key | | key | | |||
| | | | | | |||
| | | ||||
| | | ||||
| | | ||||
v | | v | | |||
+--------------------------------------+ | | +--------------------------------------+ | | |||
| Was the last matching rule terminal? | No >------+ | | Was the last matching rule terminal? | No >------+ | |||
+--------------------------------------+ | +--------------------------------------+ | |||
Yes (if the rule isn't terminal | Yes (if the rule isn't terminal then | |||
| then its output is the new | | its output is the new key which | |||
| key which is used to find a | | is used to find a new rule set) | |||
| new rule set) | ||||
| | ||||
+------------------------------------+ | +------------------------------------+ | |||
| The output of the last rule is the | | | The output of the last rule is the | | |||
| result desired by the application | | | result desired by the application | | |||
+------------------------------------+ | +------------------------------------+ | |||
3.1 Components of a Rule | 3.1 Components of a Rule | |||
A Rule is made up of 4 pieces of information: | A Rule is made up of 4 pieces of information: | |||
A Priority | A Priority | |||
Simply a number used to show which of two otherwise equal rules | Simply a number used to show which of two otherwise equal rules | |||
may have precedence. This allows the database to express rules | may have precedence. This allows the database to express rules | |||
that may offer roughly the same results but one delegation path | that may offer roughly the same results but one delegation path | |||
may be faster, better, cheaper than the other. | may be faster, better, cheaper than the other. | |||
A set of Flags | A Set of Flags | |||
Flags are used to specify attributes of the rule that determine if | Flags are used to specify attributes of the rule that determine if | |||
this rule is the last one to be applied. The last rule is called | this rule is the last one to be applied. The last rule is called | |||
the terminal rule and its output should be the intended result for | the terminal rule and its output should be the intended result for | |||
the application. Flags are unique across Applications. An | the application. Flags are unique across Applications. An | |||
Application may specify that it is using a flag defined by yet | Application may specify that it is using a flag defined by yet | |||
another Application but it must use that other Application's | another Application but it must use that other Application's | |||
definition. One Application cannot re-define a Flag used by | definition. One Application cannot redefine a Flag used by | |||
another Application. This may mean that a registry of Flags will | another Application. This may mean that a registry of Flags will | |||
be needed in the future but at this time it is not a requirement. | be needed in the future but at this time it is not a requirement. | |||
A description of Services | A Description of Services | |||
Services are used to specify semantic attributes of a particular | Services are used to specify semantic attributes of a particular | |||
delegation branch. There are many cases where two delegation | delegation branch. There are many cases where two delegation | |||
branches are identical except that one delegates down to a result | branches are identical except that one delegates down to a result | |||
that provides one set of features while another provides some | that provides one set of features while another provides some | |||
other set. Features may include operational issues such as load | other set. Features may include operational issues such as load | |||
balancing, geographically based traffic segregation, degraded but | balancing, geographically based traffic segregation, degraded but | |||
backwardly compatibile functions for older clients, etc. For | backwardly compatible functions for older clients, etc. For | |||
example, two rules may equally apply to a specific delegation | example, two rules may equally apply to a specific delegation | |||
decision for a string. One rule can lead to a terminal rule that | decision for a string. One rule can lead to a terminal rule that | |||
produces information for use in high availability environments | produces information for use in high availability environments | |||
while another may lead to an archival service that may be slower | while another may lead to an archival service that may be slower | |||
but is more stable over long periods of time. | but is more stable over long periods of time. | |||
A Substitution Expression | A Substitution Expression | |||
This is the actual string modification part of the rule. It is a | This is the actual string modification part of the rule. It is a | |||
combination of a POSIX Extended Regular Expression [8] and a | combination of a POSIX Extended Regular Expression [8] and a | |||
replacement string similar to Unix sed-style substitution | replacement string similar to Unix sed-style substitution | |||
skipping to change at page 8, line 41 | skipping to change at page 7, line 9 | |||
The character set(s) that the substitution expression is in and can | The character set(s) that the substitution expression is in and can | |||
act on are dependent both on the Application and on the Database | act on are dependent both on the Application and on the Database | |||
being used. An Application must define what the allowed character | being used. An Application must define what the allowed character | |||
sets are for the Application Unique String. A DDDS Database | sets are for the Application Unique String. A DDDS Database | |||
specification must define what character sets are required for | specification must define what character sets are required for | |||
producing its keys and for how the substitution expression itself is | producing its keys and for how the substitution expression itself is | |||
encoded. The grammar-required characters below only have meaning | encoded. The grammar-required characters below only have meaning | |||
once a specific character set is defined for the Database and/or | once a specific character set is defined for the Database and/or | |||
Application. | Application. | |||
The syntax of the Substitution Expression part of the rule is a sed- | The syntax of the Substitution Expression part of the rule is a | |||
style substitution expression. True sed-style substitution | sed-style substitution expression. True sed-style substitution | |||
expressions are not appropriate for use in this application for a | expressions are not appropriate for use in this application for a | |||
variety of reasons, therefore the contents of the regexp field MUST | variety of reasons, therefore the contents of the regexp field MUST | |||
follow this grammar: | follow this grammar: | |||
subst-expr = delim-char ere delim-char repl delim-char *flags | subst-expr = delim-char ere delim-char repl delim-char *flags | |||
delim-char = "/" / "!" / <Any octet not in 'POS-DIGIT' or 'flags'> | delim-char = "/" / "!" / <Any octet not in 'POS-DIGIT' or 'flags'> | |||
; All occurances of a delim_char in a subst_expr must | ; All occurrences of a delim_char in a subst_expr | |||
; be the same character.> | ; must be the same character.> | |||
ere = <POSIX Extended Regular Expression> | ere = <POSIX Extended Regular Expression> | |||
repl = *(string / backref) | repl = *(string / backref) | |||
string = *(anychar / escapeddelim) | string = *(anychar / escapeddelim) | |||
anychar = <any character other than delim-char> | anychar = <any character other than delim-char> | |||
escapeddelim = "\" delim-char | escapeddelim = "\" delim-char | |||
backref = "\" POS-DIGIT | backref = "\" POS-DIGIT | |||
flags = "i" | flags = "i" | |||
POS-DIGIT = "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" | POS-DIGIT = "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" | |||
The result of applying the substitution expression to the String MUST | The result of applying the substitution expression to the String MUST | |||
result in a key which obeys the rules of the Database (unless of | result in a key which obeys the rules of the Database (unless of | |||
course it is a Terminal Rule in which case the output follows the | course it is a Terminal Rule in which case the output follows the | |||
rules of the application). Since it is possible for the regular | rules of the application). Since it is possible for the regular | |||
expression to be improperly specified, such that a non-conforming key | expression to be improperly specified, such that a non-conforming key | |||
can be constructed, client software SHOULD verify that the result is | can be constructed, client software SHOULD verify that the result is | |||
a legal database key before using it. | a legal database key before using it. | |||
Backref expressions in the repl portion of the substitution | Backref expressions in the repl portion of the substitution | |||
skipping to change at page 10, line 15 | skipping to change at page 8, line 26 | |||
occurrences of that character, digits MUST NOT be used as delimiters. | occurrences of that character, digits MUST NOT be used as delimiters. | |||
Backrefs would be confused with literal digits were this allowed. | Backrefs would be confused with literal digits were this allowed. | |||
Similarly, if flags are specified in the substitution expression, the | Similarly, if flags are specified in the substitution expression, the | |||
delimiter character must not also be a flag character. | delimiter character must not also be a flag character. | |||
3.3 The Complete Algorithm | 3.3 The Complete Algorithm | |||
The following is the exact DDDS algorithm: | The following is the exact DDDS algorithm: | |||
1. The First Well Known Rule is applied to the Application Unique | 1. The First Well Known Rule is applied to the Application Unique | |||
String which produces a Key | String which produces a Key. | |||
2. The Application asks the Database for the ordered set of Rules | 2. The Application asks the Database for the ordered set of Rules | |||
that are bound to that Key (see NOTE below on order details) | that are bound to that Key (see NOTE below on order details). | |||
3. The Substitution Expression for each Rule in the list is applied, | 3. The Substitution Expression for each Rule in the list is applied, | |||
in order, to the Application Unique String until a non-empty | in order, to the Application Unique String until a non-empty | |||
string is produced. The position in the list is noted and the | string is produced. The position in the list is noted and the | |||
Rule that produced the non-empty string is used for the next | Rule that produced the non-empty string is used for the next | |||
step. If the next step rejects this rule and returns to this | step. If the next step rejects this rule and returns to this | |||
step then the Substitution Expression application process | step then the Substitution Expression application process | |||
continues at the point where it left off. If the list is | continues at the point where it left off. If the list is | |||
exhausted without a valid match then the application is notified | exhausted without a valid match then the application is notified | |||
that no valid output was available. | that no valid output was available. | |||
skipping to change at page 11, line 11 | skipping to change at page 9, line 24 | |||
express the case where two or more Rules are considered equal. These | express the case where two or more Rules are considered equal. These | |||
Rules are treated as the same Rule, each one possibly having a | Rules are treated as the same Rule, each one possibly having a | |||
Priority which is used to communicate a preference for otherwise | Priority which is used to communicate a preference for otherwise | |||
equivalent Rules. This allows for Rules to act as fallbacks for | equivalent Rules. This allows for Rules to act as fallbacks for | |||
others. It should be noted that this is a real Preference, not a | others. It should be noted that this is a real Preference, not a | |||
load balancing mechanism. Applications should define the difference | load balancing mechanism. Applications should define the difference | |||
carefully. | carefully. | |||
NOTE 2: Databases may or may not have rules that determine when and | NOTE 2: Databases may or may not have rules that determine when and | |||
how records within that database expire (expiration dates, times to | how records within that database expire (expiration dates, times to | |||
live, etc). These expiration mechanisms must be adhered to in all | live, etc.). These expiration mechanisms must be adhered to in all | |||
cases. Specfically, since the expiration of a databases record could | cases. Specifically, since the expiration of a databases record | |||
cause a new Rule to be retrieved that is inconsistent with previous | could cause a new Rule to be retrieved that is inconsistent with | |||
Rules, while in the algorithm any attempts to optimize the process by | previous Rules, while in the algorithm any attempts to optimize the | |||
falling back to previous keys and Rules MUST ensure that no | process by falling back to previous keys and Rules MUST ensure that | |||
previously retrieved Rule has expired. If a Rule has expired then | no previously retrieved Rule has expired. If a Rule has expired then | |||
the application MUST start over at Step 1. | the application MUST start over at Step 1. | |||
4. Specifying An Application | 4. Specifying an Application | |||
In order for this algorithm to have any usefulness, a specification | In order for this algorithm to have any usefulness, a specification | |||
must be written describing an application and one or more databases. | must be written describing an application and one or more databases. | |||
In order to specify an application the following pieces of | In order to specify an application the following pieces of | |||
information are required: | information are required: | |||
Application Unique String: | Application Unique String: | |||
This is the only string that the rewrite rules will apply to. The | This is the only string that the rewrite rules will apply to. The | |||
string must have some regular structure and be unique within the | string must have some regular structure and be unique within the | |||
application such that anyone applying Rules taken from the same | application such that anyone applying Rules taken from the same | |||
skipping to change at page 13, line 12 | skipping to change at page 10, line 39 | |||
that will produce the correct Keys. In the URI Resolution example | that will produce the correct Keys. In the URI Resolution example | |||
shown here, the character set of a URI is 7 bit ASCII which | shown here, the character set of a URI is 7 bit ASCII which | |||
matches fairly well with DNS's 8 bit limitation on characters in | matches fairly well with DNS's 8 bit limitation on characters in | |||
its zone files. | its zone files. | |||
Expected Output: | Expected Output: | |||
The Application must define what the expected output of the | The Application must define what the expected output of the | |||
Terminal Rule should be. For example, the URI Resolution | Terminal Rule should be. For example, the URI Resolution | |||
application is concerned with finding servers that contain | application is concerned with finding servers that contain | |||
authoritative data about a given URI. Thus the output of the | authoritative data about a given URI. Thus the output of the | |||
terminal rule would be information (hosts, ports, protocols, etc) | terminal rule would be information (hosts, ports, protocols, etc.) | |||
that would be used to contact that authoritative server. | that would be used to contact that authoritative server. | |||
In the past there has been some confusion concerning load balancing | In the past there has been some confusion concerning load balancing | |||
and the use of the DDDS 'Priority'. Applications should be aware | and the use of the DDDS 'Priority'. Applications should be aware | |||
that the Priority of a given rule is just that: a way of specifying | that the Priority of a given rule is just that: a way of specifying | |||
that one rule is "better, faster, cheaper" than another. If an | that one rule is "better, faster, cheaper" than another. If an | |||
application needs some method of allowing a client to load balance | application needs some method of allowing a client to load balance | |||
between servers (i.e. weighted random selection, etc) then it should | between servers (i.e., weighted random selection, etc.) then it | |||
do so outside the DDDS algorithm. For example, Applications that | should do so outside the DDDS algorithm. For example, Applications | |||
make use of the DNS Database may use the SRV record as a way of | that make use of the DNS Database may use the SRV record as a way of | |||
signifying that a particular service is actually handled by several | signifying that a particular service is actually handled by several | |||
hosts cooperating with each other. The difference being that load | hosts cooperating with each other. The difference being that load | |||
balancing is done between hosts that are identical to each other | balancing is done between hosts that are identical to each other | |||
where as DDDS is concerned with delegation paths that have some | where as DDDS is concerned with delegation paths that have some | |||
particular feature set or administrative domain. | particular feature set or administrative domain. | |||
5. Specifying A Database | 5. Specifying A Database | |||
Additionally, any Application must have at least one corresponding | Additionally, any Application must have at least one corresponding | |||
Database from which to retrieve the Rules. It is important to note | Database from which to retrieve the Rules. It is important to note | |||
that a given Database may be used by more than one Application. If | that a given Database may be used by more than one Application. If | |||
this is the case, each rule must be use some combination of its | this is the case, each rule must be use some combination of its | |||
Services and/or substitution expression to match only those | Services and/or substitution expression to match only those | |||
Application Unique Strings for which it is valid. | Application Unique Strings for which it is valid. | |||
A Database specification must include the following pieces of | A Database specification must include the following pieces of | |||
information: | information: | |||
General Specification: | General Specification: | |||
The Database must have a general specification. This can | The Database must have a general specification. This can | |||
reference other standards (SQL, DNS, etc) or it can fully specify | reference other standards (SQL, DNS, etc.) or it can fully specify | |||
a novel database system. This specification MUST be clear as to | a novel database system. This specification MUST be clear as to | |||
what allowed character sets exist in order to know in which | what allowed character sets exist in order to know in which | |||
character set the Keys and Rules are encoded. | character set the Keys and Rules are encoded. | |||
Lookup Procedure: | Lookup Procedure: | |||
This specifies how a query is formulated and submitted to the | This specifies how a query is formulated and submitted to the | |||
database. In the case of databases that are used for other | database. In the case of databases that are used for other | |||
purposes (such as DNS), the specification must be clear as to how | purposes (such as DNS), the specification must be clear as to how | |||
a query is formulated specifically for the database to be a DDDS | a query is formulated specifically for the database to be a DDDS | |||
database. For example, a DNS based Database must specify which | database. For example, a DNS based Database must specify which | |||
skipping to change at page 16, line 8 | skipping to change at page 12, line 18 | |||
how rule collisions will be avoided. There are usually two | how rule collisions will be avoided. There are usually two | |||
methods for handling this: 1) disallow one key from being valid in | methods for handling this: 1) disallow one key from being valid in | |||
two different Applications; 2) if 1 isn't possible then write the | two different Applications; 2) if 1 isn't possible then write the | |||
substitution expression such that the regular expression part | substitution expression such that the regular expression part | |||
contains enough of the Application Unique String as part of its | contains enough of the Application Unique String as part of its | |||
match to differentiate between the two Applications. | match to differentiate between the two Applications. | |||
6. Examples | 6. Examples | |||
The examples given here are for pedagogical purposes only. They are | The examples given here are for pedagogical purposes only. They are | |||
specifically taken from fictious applications that have not been | specifically taken from ficticious applications that have not been | |||
specified in any published document. | specified in any published document. | |||
6.1 An Automobile Parts Identification System | 6.1 An Automobile Parts Identification System | |||
In this example imagine a system setup where all automobile | In this example imagine a system setup where all automobile | |||
manufacturers come together and create a standardized part numbering | manufacturers come together and create a standardized part numbering | |||
system for the various parts (nuts, bolts, frames, instruments, etc) | system for the various parts (nuts, bolts, frames, instruments, etc.) | |||
that make up the automobile manufacturing and repair process. The | that make up the automobile manufacturing and repair process. The | |||
problem with such a system is that the auto industry is a very | problem with such a system is that the auto industry is a very | |||
distributed system where parts are built by various third parties | distributed system where parts are built by various third parties | |||
distributed around the world. In order to find information about a | distributed around the world. In order to find information about a | |||
given part a system must be able to find out who makes that part and | given part a system must be able to find out who makes that part and | |||
contact them about it. | contact them about it. | |||
To facilitate this distributed system the identification number | To facilitate this distributed system the identification number | |||
assigned to a part is assigned hierarchically such that the first 5 | assigned to a part is assigned hierarchically such that the first 5 | |||
digits make up a parts manufacturer ID number. The next 3 digits are | digits make up a parts manufacturer ID number. The next 3 digits are | |||
an auto line identifier (Ford, Toyota, etc). The rest of the digits | an auto line identifier (Ford, Toyota, etc.). The rest of the digits | |||
are assigned by the parts manufacturer according to rules that the | are assigned by the parts manufacturer according to rules that the | |||
manufacturer decides. | manufacturer decides. | |||
The auto industry decides to use the DDDS to create a distributed | The auto industry decides to use the DDDS to create a distributed | |||
information retrieval system that routes queries to the actual owner | information retrieval system that routes queries to the actual owner | |||
of the data. The industry specifies a database and a query syntax | of the data. The industry specifies a database and a query syntax | |||
for retrieving rewrite rules (the APIDA Network) and then specifies | for retrieving rewrite rules (the APIDA Network) and then specifies | |||
the Auto Parts Identification DDDS Application (APIDA). | the Auto Parts Identification DDDS Application (APIDA). | |||
The APIDA specification would define the following: | The APIDA specification would define the following: | |||
o Application Unique String: the part number | o Application Unique String: the part number. | |||
o First Well Known Rule: take the first 5 digits (the manufacturers | o First Well Known Rule: take the first 5 digits (the manufacturers | |||
ID number) and use that as the Key | ID number) and use that as the Key. | |||
o Valid Databases: The APIDA Network | o Valid Databases: The APIDA Network. | |||
o Expected Output: EDIFAC information about the part | o Expected Output: EDIFAC information about the part. | |||
The APIDA Network Database specification would define the following: | The APIDA Network Database specification would define the following: | |||
o General Specification: a network of EDI enabled databases and | o General Specification: a network of EDI enabled databases and | |||
services that, when given a subcomponent of a part number will | services that, when given a subcomponent of a part number will | |||
return an XML encoded rewrite rule | return an XML encoded rewrite rule. | |||
o Lookup Procedure: following normal APIDA Network protocols, ask | o Lookup Procedure: following normal APIDA Network protocols, ask | |||
the network for a rewrite rule for the Key. | the network for a rewrite rule for the Key. | |||
o Key Format: no conversion is required | o Key Format: no conversion is required. | |||
o Rule Format: see APIDA Network documentation for the XML DTD | o Rule Format: see APIDA Network documentation for the XML DTD. | |||
o Rule Insertion Procedure: determined by the authority that has | o Rule Insertion Procedure: determined by the authority that has | |||
control over each section of the part number. I.e. in order to | control over each section of the part number. I.e., in order to | |||
get a manufacturer ID you must be a member of the Auto Parts | get a manufacturer ID you must be a member of the Auto Parts | |||
Manufacturers Association | Manufacturers Association. | |||
In order to illustrate how the system would work, imagine the part | In order to illustrate how the system would work, imagine the part | |||
number "4747301AB7D". The system would take the first 5 digits, | number "4747301AB7D". The system would take the first 5 digits, | |||
'47473' and ask the network for that Rewrite Rule. This Rule would | '47473' and ask the network for that Rewrite Rule. This Rule would | |||
be provided by the parts manufacturers database and would allow the | be provided by the parts manufacturers database and would allow the | |||
manufacturer to either further sub-delegate the space or point the | manufacturer to either further sub-delegate the space or point the | |||
querier directly at the EDIFAC information in the system. | querier directly at the EDIFAC information in the system. | |||
In this example let's suppose that the manufacturer returns a Rule | In this example let's suppose that the manufacturer returns a Rule | |||
that states that the next 3 digits should be used as part of a query | that states that the next 3 digits should be used as part of a query | |||
skipping to change at page 17, line 52 | skipping to change at page 14, line 22 | |||
Also, in order to keep from having a large flat space of authors, the | Also, in order to keep from having a large flat space of authors, the | |||
authors are organized by organizations and departments. | authors are organized by organizations and departments. | |||
Let's suppose that the Application Unique String in this example | Let's suppose that the Application Unique String in this example | |||
looks like the following: | looks like the following: | |||
<organization>-<department>-<author>:<project>-<bookcase>-<book> | <organization>-<department>-<author>:<project>-<bookcase>-<book> | |||
The Application specification would look like this: | The Application specification would look like this: | |||
o Application Unique String: the Document ID string given above | o Application Unique String: the Document ID string given above. | |||
o First Well Known Rule: the characters up to but not including the | o First Well Known Rule: the characters up to but not including the | |||
first '-' is treated as the first Key. | first '-' is treated as the first Key. | |||
o Valid Databases: the DIS LDAP Directory | o Valid Databases: the DIS LDAP Directory. | |||
o Expected Output: a record from an LDAP server containing | o Expected Output: a record from an LDAP server containing | |||
bibliographic information about the document in XML | bibliographic information about the document in XML. | |||
The Database specification for the DIS LDAP Directory would look like | The Database specification for the DIS LDAP Directory would look like | |||
this: | this: | |||
o General Specification: the Database uses the LDAP directory | o General Specification: the Database uses the LDAP directory | |||
service. Each LDAP server has a record that contains the Rewrite | service. Each LDAP server has a record that contains the Rewrite | |||
Rule. Rules refer to other LDAP servers using the LDAP URL | Rule. Rules refer to other LDAP servers using the LDAP URL | |||
scheme. | scheme. | |||
o Lookup Procedure: using standard LDAP queries, the client asks the | o Lookup Procedure: using standard LDAP queries, the client asks the | |||
LDAP server for information about the Key. | LDAP server for information about the Key. | |||
o Key Format: no conversion is necessary. | o Key Format: no conversion is necessary. | |||
o Rule Format: See the LDAP Rewrite Rule specification | o Rule Format: See the LDAP Rewrite Rule specification. | |||
o Rule Insertion Procedure: See the procedures published by the | o Rule Insertion Procedure: See the procedures published by the | |||
entity that has authority over that section of the DIS tree. The | entity that has authority over that section of the DIS tree. The | |||
first section, the organization, is owned by the DIS Agency. | first section, the organization, is owned by the DIS Agency. | |||
In this example, the first lookup is for the organization's Rule. At | In this example, the first lookup is for the organization's Rule. At | |||
that point the organization may point the client directly at some | that point the organization may point the client directly at some | |||
large, organization wide database that contains the expected output. | large, organization wide database that contains the expected output. | |||
Other organizations may decentralize this process so that Rules end | Other organizations may decentralize this process so that Rules end | |||
up delegating the query all the way down to the authors document | up delegating the query all the way down to the authors document | |||
skipping to change at page 21, line 7 | skipping to change at page 15, line 29 | |||
attack. | attack. | |||
8. IANA Considerations | 8. IANA Considerations | |||
This document does not create any requirements on the IANA. Database | This document does not create any requirements on the IANA. Database | |||
and Application specifications may have considerable requirements but | and Application specifications may have considerable requirements but | |||
they cannot be enumerated here. | they cannot be enumerated here. | |||
References | References | |||
[1] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part | [1] Mealling, M., "Dynamic Delegation Discovery System (DDDS) | |||
One: The Comprehensive DDDS Standard", RFC WWWW, draft-ietf- | Part One: The Comprehensive DDDS", RFC 3401, October 2002. | |||
urn-ddds-toc-02.txt (work in progress), May 2002. | ||||
[2] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part | [2] Mealling, M., "Dynamic Delegation Discovery System (DDDS) | |||
Two: The Algorithm", RFC XXXX, draft-ietf-urn-ddds-07.txt (work | Part Two: The Algorithm", RFC 3402, October 2002. | |||
in progress), May 2002. | ||||
[3] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part | [3] Mealling, M., "Dynamic Delegation Discovery System (DDDS) | |||
Three: The DNS Database", RFC ZZZZ, draft-ietf-urn-dns-ddds- | Part Three: The Domain Name System (DNS) Database", RFC 3403, | |||
database-09.txt (work in progress), May 2002. | October 2002. | |||
[4] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part | [4] Mealling, M., "Dynamic Delegation Discovery System (DDDS) | |||
Four: The URI Resolution Application", RFC YYYY, draft-ietf- | Part Four: The Uniform Resource Identifiers (URI) Resolution | |||
urn-uri-res-ddds-07.txt (work in progress), May 2002. | Application", RFC 3404, October 2002. | |||
[5] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part | [5] Mealling, M., "Dynamic Delegation Discovery System (DDDS) | |||
Five: URI.ARPA Assignment Procedures", RFC VVVV, draft-ietf- | Part Five: URI.ARPA Assignment Procedures", RFC 3405, | |||
urn-net-procedures-11.txt (work in progress), May 2002. | October 2002. | |||
[6] Moats, R., "URN Syntax", RFC 2141, May 1997. | [6] Moats, R., "URN Syntax", RFC 2141, May 1997. | |||
[7] Sollins, K., "Architectural Principles of Uniform Resource Name | [7] Sollins, K., "Architectural Principles of Uniform Resource Name | |||
Resolution", RFC 2276, January 1998. | Resolution", RFC 2276, January 1998. | |||
[8] The Institute of Electrical and Electronics Engineers, "IEEE | [8] The Institute of Electrical and Electronics Engineers, "IEEE | |||
Standard for Information Technology - Portable Operating System | Standard for Information Technology - Portable Operating System | |||
Interface (POSIX) - Part 2: Shell and Utilities (Vol. 1)", IEEE | Interface (POSIX) - Part 2: Shell and Utilities (Vol. 1)", IEEE | |||
Std 1003.2-1992, ISBN 1-55937-255-9, January 1993. | Std 1003.2-1992, ISBN 1-55937-255-9, January 1993. | |||
[9] Mealling, M. and R. Daniel, "The Naming Authority Pointer | [9] Mealling, M. and R. Daniel, "The Naming Authority Pointer | |||
(NAPTR) DNS Resource Record", RFC 2915, August 2000. | (NAPTR) DNS Resource Record", RFC 2915, August 2000. | |||
[10] Faltstrom, P., "E.164 number and DNS", RFC 2916, September | [10] Faltstrom, P., "E.164 number and DNS", RFC 2916, September | |||
2000. | 2000. | |||
[11] Daniel, R. and M. Mealling, "Resolution of Uniform Resource | [11] Daniel, R. and M. Mealling, "Resolution of Uniform Resource | |||
Identifiers using the Domain Name System", RFC 2168, June 1997. | Identifiers using the Domain Name System", RFC 2168, June 1997. | |||
Author's Address | Author's Address | |||
Michael Mealling | Michael Mealling | |||
VeriSign | VeriSign | |||
21345 Ridgetop Circle | 21345 Ridgetop Circle | |||
Sterling, VA 20166 | Sterling, VA 20166 | |||
US | US | |||
EMail: michael@neonym.net | EMail: michael@neonym.net | |||
End of changes. 59 change blocks. | ||||
150 lines changed or deleted | 129 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |