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
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 42 skipping to change at page 11, line 42
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 40 skipping to change at page 14, line 40
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 6 skipping to change at page 23, line 6
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 44 skipping to change at page 26, line 44
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. 
34 lines changed or deleted 26 lines changed or added

This html diff was produced by rfcdiff 1.34. The latest version is available from http://tools.ietf.org/tools/rfcdiff/