| < draft-ietf-urn-ietf-08.txt | draft-ietf-urn-ietf-09.txt > | |||
|---|---|---|---|---|
| Internet-Draft Ryan Moats | Internet-Draft Ryan Moats | |||
| draft-ietf-urn-ietf-08.txt AT&T | draft-ietf-urn-ietf-09.txt AT&T | |||
| Expires in six months November 1998 | Expires in six months May 1999 | |||
| A URN Namespace for IETF Documents | A URN Namespace for IETF Documents | |||
| Filename: draft-ietf-urn-ietf-08.txt | Filename: draft-ietf-urn-ietf-09.txt | |||
| Status of This Memo | Status of This Memo | |||
| This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
| all provisions of Section 10 of RFC2026. | all provisions of Section 10 of RFC2026. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
| Drafts. | Drafts. | |||
| skipping to change at page 2, line 32 ¶ | skipping to change at page 2, line 32 ¶ | |||
| Ryan Moats | Ryan Moats | |||
| jayhawk@att.com | jayhawk@att.com | |||
| AT&T | AT&T | |||
| 15621 Drexel Circle | 15621 Drexel Circle | |||
| Omaha, NE 68135-2358 | Omaha, NE 68135-2358 | |||
| Declaration of structure: | Declaration of structure: | |||
| The identifier has the following ABNF [2] specification: | The identifier has the following ABNF [2] specification: | |||
| NSS = (family ":" number) / ("mtg-" number "-" wgbofname) | NSS = rfc-nss / fyi-nss / std-nss / bcp-nss / | |||
| ( "id:" name) | draft-nss / mtg-nss / other-nss | |||
| family = "rfc" / "std" / "fyi" / "bcp" | ||||
| number = 1*DIGIT | ||||
| wgbofname = 1*(DIGIT/ALPHA) | ||||
| name = "draft-" draft-name "-" draft-version | ||||
| draft-name = draft-ietf / draft-individual / draft-rfced | rfc-nss = "rfc:" 1*DIGIT | |||
| draft-ietf = "ietf-" wgbofname "-" draft-title | fyi-nss = "fyi:" 1*DIGIT | |||
| draft-individual = draft-author "-" draft-title | std-nss = "std:" 1*DIGIT | |||
| draft-rfced = "rfced-" draft-title | bcp-nss = "bcp:" 1*DIGIT | |||
| draft-title = draft-namepart *( "-" draft-namepart ) | draft-nss = "id:" string | |||
| mtg-nss = "mtg:" string | ||||
| other-nss = string | ||||
| ; beginning with a prefix other than one of those | ||||
| ; above for future expansion | ||||
| draft-author = 1*(DIGIT/ALPHA) | string = 1*(DIGIT / ALPHA / "-") | |||
| draft-nameart = 1*(DIGIT/ALPHA) | ||||
| wgbofname = 1*(DIGIT/ALPHA) | ||||
| number = 1*DIGIT | ||||
| draft-version = 2*DIGIT | ||||
| If the IESG (or it successor) adds a new document | If the IESG (or it successor) adds a new document | |||
| series, this ABNF specification will need to be | series, this ABNF specification will need to be | |||
| updated. Further, if a working group or BOF is | updated. Further, if a working group or BOF is | |||
| created that used characters outside the range of this | created that used characters outside the range of this | |||
| ABNF specification, this specification will need to be | ABNF specification, this specification will need to be | |||
| updated. Any system intended to resolve names for | updated. Any system intended to resolve names for | |||
| this namespace should be written with the awareness | this namespace should be written with the awareness | |||
| that this could occur at any time. | that this could occur at any time. | |||
| Relevant ancillary documentation: | Relevant ancillary documentation: | |||
| The intended RFC document is currently | Relevant documentation is in draft-ietf-urn-ietf-09. | |||
| draft-ietf-urn-ietf-08. | ||||
| Identifier uniqueness considerations: | Identifier uniqueness considerations: | |||
| Because the rfc-editor assigns the RFC number uniquely | Because the rfc-editor assigns the RFC number uniquely | |||
| these URNs are unique. Since the mapping between RFCs | these URNs are unique. Since the mapping between RFCs | |||
| and other rfc-editor document series (STDs, FYIs or | and other rfc-editor document series (STDs, FYIs or | |||
| BCPs) is not necessarily one-to-one, uniqueness of | BCPs) is not necessarily one-to-one, uniqueness of | |||
| STDs, FYIs and BCPs are defined based on the document | STDs, FYIs and BCPs are defined based on the document | |||
| mappings maintained by the RFC Editor (the index files | mappings maintained by the RFC Editor (the index files | |||
| "rfc-index.txt", "fyi-index.txt", "bcp-index.txt", | "rfc-index.txt", "fyi-index.txt", "bcp-index.txt", | |||
| skipping to change at page 3, line 42 ¶ | skipping to change at page 3, line 38 ¶ | |||
| editor ("1id-abstracts.txt") is defined as the | editor ("1id-abstracts.txt") is defined as the | |||
| definitive statement of the assignment of URNs for | definitive statement of the assignment of URNs for | |||
| the internet draft portion of this namespace. | the internet draft portion of this namespace. | |||
| Identifier persistence considerations: | Identifier persistence considerations: | |||
| Persistence of the URNs of this namespace is | Persistence of the URNs of this namespace is | |||
| independent of the mutability of the underlying | independent of the mutability of the underlying | |||
| documents. A URN once assigned will never be | documents. A URN once assigned will never be | |||
| reassigned to a different resource; the assignment is | reassigned to a different resource; the assignment is | |||
| persistent and immutable. Distinct from this, the | persistent and immutable. Immutability of RFCs, STDs, | |||
| resources identified as RFCs are immutable, whereas | FYIs and BCPs is at the discretion of the RFC Editor. | |||
| the other sorts of documents, STDs, FYIs, and BCPs are | They may be composites of one or more RFCs and the | |||
| not. They may be composites of one or more RFCs and | set of RFCs that includes them may change with | |||
| the set of RFCs that includes them may change with | ||||
| time. It is important to note that this mutability of | time. It is important to note that this mutability of | |||
| some resources is independent of the immutability of | some resources is independent of the immutability of | |||
| URN assignment to a resource. | URN assignment to a resource. | |||
| Process of identifier assignment: | Process of identifier assignment: | |||
| Assignment of URNs from this namespace occurs in three | Assignment of URNs from this namespace occurs in three | |||
| ways. The first is through publication of a new RFC, | ways. The first is through publication of a new RFC, | |||
| FYI, STD or BCP is by the RFC Editor. This new document | FYI, STD or BCP is by the RFC Editor. This new document | |||
| will have a new series number and will therefore define | will have a new series number and will therefore define | |||
| skipping to change at page 5, line 15 ¶ | skipping to change at page 5, line 13 ¶ | |||
| Global. | Global. | |||
| 3. Examples | 3. Examples | |||
| The following are examples of URNs that a resolver for this namespace | The following are examples of URNs that a resolver for this namespace | |||
| can resolve: | can resolve: | |||
| urn:ietf:rfc:2141 | urn:ietf:rfc:2141 | |||
| urn:ietf:std:50 | urn:ietf:std:50 | |||
| urn:ietf:id:ietf-urn-ietf-06 | urn:ietf:id:ietf-urn-ietf-06 | |||
| urn:ietf:mtg-41-urn | urn:ietf:mtg:41-urn | |||
| 4. Security Considerations | 4. Security Considerations | |||
| Because this namespace defines no additional reserved characters, it | Because this namespace defines no additional reserved characters, it | |||
| does not add any security considerations beyond those inherent from | does not add any security considerations beyond those inherent from | |||
| the existence of the reserved characters from [1]. Further, none of | the existence of the reserved characters from [1]. Further, none of | |||
| the reserved characters from [1] are used in the definition of the | the reserved characters from [1] are used in the definition of the | |||
| NSS. This means that resolvers for this namespace may be considered | NSS. This means that resolvers for this namespace may be considered | |||
| "secure" in the sense that any escaping of characters in the NSS MUST | "secure" in the sense that any escaping of characters in the NSS MUST | |||
| result in the resolver indicating that the URN has incorrect syntax. | result in the resolver indicating that the URN has incorrect syntax. | |||
| skipping to change at page 6, line 47 ¶ | skipping to change at page 6, line 46 ¶ | |||
| 22 => "91nov", 21 => "91jul", 20 => "91mar", | 22 => "91nov", 21 => "91jul", 20 => "91mar", | |||
| 19 => "90dec" ); | 19 => "90dec" ); | |||
| my($wgpath) = "/ftp/ietf"; | my($wgpath) = "/ftp/ietf"; | |||
| my($urn) = $ENV{'QUERY_STRING'}; | my($urn) = $ENV{'QUERY_STRING'}; | |||
| my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | |||
| my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | |||
| (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | |||
| (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | |||
| (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(\d*)-(\w*)/i); | (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); | |||
| &urn_error("400 Bad Request\n"); | &urn_error("400 Bad Request\n"); | |||
| sub resolvemtg { | sub resolvemtg { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | |||
| my($date)=$number2date{$ietfnum}; | my($date)=$number2date{$ietfnum}; | |||
| my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | |||
| if (-f $link) { | if (-f $link) { | |||
| print "Status: 200 OK\r\n"; | print "Status: 200 OK\r\n"; | |||
| print "Content-type: text/html\r\n\r\n"; | print "Content-type: text/html\r\n\r\n"; | |||
| skipping to change at page 11, line 41 ¶ | skipping to change at page 11, line 41 ¶ | |||
| 22 => "91nov", 21 => "91jul", 20 => "91mar", | 22 => "91nov", 21 => "91jul", 20 => "91mar", | |||
| 19 => "90dec" ); | 19 => "90dec" ); | |||
| my($wgpath) = "/ftp/ietf"; | my($wgpath) = "/ftp/ietf"; | |||
| my($urn) = $ENV{'QUERY_STRING'}; | my($urn) = $ENV{'QUERY_STRING'}; | |||
| my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | |||
| my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | |||
| (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | |||
| (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | |||
| (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(\d*)-(\w*)/i); | (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); | |||
| &urn_error("400 Bad Request\n"); | &urn_error("400 Bad Request\n"); | |||
| sub resolvemtg { | sub resolvemtg { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | |||
| my($date)=$number2date{$ietfnum}; | my($date)=$number2date{$ietfnum}; | |||
| my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | |||
| if (-f $link) { | if (-f $link) { | |||
| print "Status: 302 Moved temporarily\n"; | print "Status: 302 Moved temporarily\n"; | |||
| print "Location: $link\n"; | print "Location: $link\n"; | |||
| skipping to change at page 14, line 39 ¶ | skipping to change at page 14, line 39 ¶ | |||
| 22 => "91nov", 21 => "91jul", 20 => "91mar", | 22 => "91nov", 21 => "91jul", 20 => "91mar", | |||
| 19 => "90dec" ); | 19 => "90dec" ); | |||
| my($wgpath) = "/ftp/ietf"; | my($wgpath) = "/ftp/ietf"; | |||
| my($urn) = $ENV{'QUERY_STRING'}; | my($urn) = $ENV{'QUERY_STRING'}; | |||
| my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | |||
| my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | |||
| (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | |||
| (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | |||
| (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(\d*)-(\w*)/i); | (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); | |||
| &urn_error("400 Bad Request\n"); | &urn_error("400 Bad Request\n"); | |||
| sub resolve2 { | sub resolve2 { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | |||
| my($date)=$number2date{$ietfnum}; | my($date)=$number2date{$ietfnum}; | |||
| my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | |||
| if (-f $link) { | if (-f $link) { | |||
| $link=~s/^\/ftp\///; | $link=~s/^\/ftp\///; | |||
| my($ftplink)="ftp://$host/$link"; | my($ftplink)="ftp://$host/$link"; | |||
| skipping to change at page 19, line 20 ¶ | skipping to change at page 19, line 20 ¶ | |||
| 22 => "91nov", 21 => "91jul", 20 => "91mar", | 22 => "91nov", 21 => "91jul", 20 => "91mar", | |||
| 19 => "90dec" ); | 19 => "90dec" ); | |||
| my($wgpath) = "/ftp/ietf"; | my($wgpath) = "/ftp/ietf"; | |||
| my($urn) = $ENV{'QUERY_STRING'}; | my($urn) = $ENV{'QUERY_STRING'}; | |||
| my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | |||
| my($port) = $ENV={'SERVER_PORT'}; | my($port) = $ENV={'SERVER_PORT'}; | |||
| my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | |||
| (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | |||
| (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(\d*)-(\w*)/i); | (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); | |||
| &urn_error("400 Bad Request\n"); | &urn_error("400 Bad Request\n"); | |||
| sub resolve2 { | sub resolve2 { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | |||
| my($date)=$number2date{$ietfnum}; | my($date)=$number2date{$ietfnum}; | |||
| my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | |||
| if (-f $link) { | if (-f $link) { | |||
| if ($accept =~ /text\/uri-list/) { | if ($accept =~ /text\/uri-list/) { | |||
| print "Status: 200 OK\n"; | print "Status: 200 OK\n"; | |||
| skipping to change at page 23, line 5 ¶ | skipping to change at page 23, line 5 ¶ | |||
| 19 => "90dec" ); | 19 => "90dec" ); | |||
| my($wgpath) = "/ftp/ietf"; | my($wgpath) = "/ftp/ietf"; | |||
| my($urn) = $ENV{'QUERY_STRING'}; | my($urn) = $ENV{'QUERY_STRING'}; | |||
| my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | |||
| my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | |||
| print "$urn\n"; | print "$urn\n"; | |||
| (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); | |||
| (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | |||
| (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(\d*)-(\w*)/i); | (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); | |||
| &urn_error("400 Bad Request\n"); | &urn_error("400 Bad Request\n"); | |||
| sub resolve2 { | sub resolve2 { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | |||
| my($date)=$number2date{$ietfnum}; | my($date)=$number2date{$ietfnum}; | |||
| my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | |||
| if (-f $link) { | if (-f $link) { | |||
| print "Status: 200 OK\n"; | print "Status: 200 OK\n"; | |||
| print "Content-type: text/plain\n\n"; | print "Content-type: text/plain\n\n"; | |||
| skipping to change at page 26, line 43 ¶ | skipping to change at page 26, line 43 ¶ | |||
| 22 => "91nov", 21 => "91jul", 20 => "91mar", | 22 => "91nov", 21 => "91jul", 20 => "91mar", | |||
| 19 => "90dec" ); | 19 => "90dec" ); | |||
| my($wgpath) = "/ftp/ietf"; | my($wgpath) = "/ftp/ietf"; | |||
| my($urn) = $ENV{'QUERY_STRING'}; | my($urn) = $ENV{'QUERY_STRING'}; | |||
| my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs | |||
| my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header | |||
| (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\s*)/i); | (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\s*)/i); | |||
| (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); | |||
| (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(\d*)-(\w*)/i); | (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); | |||
| &urn_error("400 Bad Request\n"); | &urn_error("400 Bad Request\n"); | |||
| sub resolve2 { | sub resolve2 { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| my(@vers,$i); | my(@vers,$i); | |||
| &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); | |||
| my($date)=$number2date{$ietfnum}; | my($date)=$number2date{$ietfnum}; | |||
| my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; | |||
| if (-f $link) { | if (-f $link) { | |||
| push(@vers,$link); | push(@vers,$link); | |||
| End of changes. 14 change blocks. | ||||
| 33 lines changed or deleted | 27 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||