draft-ietf-urn-ietf-03.txt   draft-ietf-urn-ietf-04.txt 
Internet-Draft Ryan Moats Internet-Draft Ryan Moats
draft-ietf-urn-ietf-03.txt AT&T draft-ietf-urn-ietf-04.txt AT&T
Expires in six months September 1997
pl 10.0i
A URN Namespace for IETF Documents A URN Namespace for IETF Documents
Filename: draft-ietf-urn-ietf-03.txt Filename: draft-ietf-urn-ietf-04.txt
Status of This Memo Status of This Memo
This document is an Internet-Draft. Internet-Drafts are working This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its documents of the Internet Engineering Task Force (IETF), its
areas, and its working groups. Note that other groups may also areas, and its working groups. Note that other groups may also
distribute working documents as Internet-Drafts. distribute working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other months and may be updated, replaced, or obsoleted by other
documents at any time. It is inappropriate to use Internet- documents at any time. It is inappropriate to use Internet-
Drafts as reference material or to cite them other than as ``work Drafts as reference material or to cite them other than as ``work
in progress.'' in progress.''
To learn the current status of any Internet-Draft, please check To view the entire list of current Internet-Drafts, please check
the ``1id-abstracts.txt'' listing contained in the Internet- the "1id-abstracts.txt" listing contained in the Internet-Drafts
Drafts Shadow Directories on ftp.is.co.za (Africa), nic.nordu.net Shadow Directories on ftp.is.co.za (Africa), ftp.nordu.net
(Europe), munnari.oz.au (Pacific Rim), ds.internic.net (US East (Northern Europe), ftp.nis.garr.it (Southern Europe), munnari.oz.au
Coast), or ftp.isi.edu (US West Coast). (Pacific Rim), ftp.ietf.org (US East Coast), or ftp.isi.edu
(US West Coast).
Abstract Abstract
A system for Uniform Resource Names (URNs) must be capable of A system for Uniform Resource Names (URNs) must be capable of
supporting new naming systems. As an example of proposing a new supporting new naming systems. As an example of proposing a new
namespace, this document proposes the ''ietf'' namespace. This namespace, this document proposes the "ietf" namespace. This
namespace consists of the RFC family of documents (RFCs, STDs, and namespace consists of the RFC family of documents (RFCs, STDs, FYIs,
FYIs) developed by the IETF and published by the RFC editor and the and BCPs) developed by the IETF and published by the RFC editor and
minutes of working groups (WG) and birds of a feather (BOF) meetings the minutes of working groups (WG) and birds of a feather (BOF)
that occur during IETF conferences. Both the current URN framework meetings that occur during IETF conferences. Both the current URN
and URN syntax support this namespace. framework and URN syntax support this namespace.
0. Changes from -02 0.1 Changes from -02
This document has been restructured to use the template proposed in This document has been restructured to use the template proposed in
draft-ietf-urn-nid-req-03.txt. Example Perl scripts for resolving draft-ietf-urn-nid-req-03.txt. Example Perl scripts for resolving
this namespace have been supplied in an Appendix. this namespace have been supplied in an Appendix.
0.2 Changes from -03
Text was added to the template clarifying persistence and uniqueness.
Support for the BCP document series added to the examples and the
ABNF.
1. Introduction 1. Introduction
This document proposes the "ietf" namespace, which consists of the This document proposes the "ietf" namespace, which consists of the
RFC family of documents (RFCs, STDs, and FYIs) developed by the IETF RFC family of documents (RFCs, STDs, FYIs, and BCPs) developed by the
and published by the RFC editor and the minutes of working groups IETF and published by the RFC editor and the minutes of working
(WG) and birds of a feather (BOF) meetings that occur during IETF groups (WG) and birds of a feather (BOF) meetings that occur during
conferences. IETF conferences.
The namespace specification is for a formal namespace. The namespace specification is for a formal namespace.
2. Specification Template 2. Specification Template
Namespace ID: Namespace ID:
"ietf" requested. "ietf" requested.
Declared registrant of the namespace: Declared registrant of the namespace:
Ryan Moats Ryan Moats
jayhawk@att.com jayhawk@att.com
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 = (family ":" number) / ("mtg-" number "-" wgbofname)
family = "rfc" / "std" / "fyi" family = "rfc" / "std" / "fyi" / "bcp"
number = 1*DIGIT number = 1*DIGIT
wgbofname = 1*LETDIGIT wgbofname = 1*LETDIGIT
LETDIGIT = DIGIT / %x41..%x5a / %x61..%x7a LETDIGIT = DIGIT / %x41..%x5a / %x61..%x7a
DIGIT = %x30..%x39 DIGIT = %x30..%x39
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.
Identifier uniqueness considerations: Identifier uniqueness considerations:
Because the rfc-editor assigns the RFC, FYI and STD Because the rfc-editor assigns the RFC number uniquely
number uniquely these URNs are unique. The meeting these URNs are unique. Since the mapping between RFCs
minutes portion of the namespace is guaranteed unique and other rfc-editor docuent series (STDs, FYIs or
because the URN includes the sequence number of the BCPs) is not necessarily one-to-one, uniqueness of
IETF conference STDs, FYIs and BCPs are defined based on the document
mappings maintained by the RFC Editor (the index files
"rfc-index.txt", "fyi-index.txt", "bcp-index.txt" and
"std-index.txt") are defined to be the definitive
statement of the assignment of RFC Family URNs in this
namespace. The meeting minutes portion of the
namespace is guaranteed unique because the URN
includes the sequence number of the IETF conference.
Identifier persistence considerations: Identifier persistence considerations:
Persistence of the URNs of this namespace is dependent Persistence of the URNs of this namespace is dependent
on the persistence of the underlying documents. on the persistence of the underlying documents. The
fundamental difference between RFCs on one hand and
STDs, FYIs, or BCPs on the other is that only RFCs are
real, even persistent, documents while the others are
just names for sets of one or more RFCs which may
change over time.
Process of identifier assignment: Process of identifier assignment:
Assignment of URNs from this namespace occur in two Assignment of URNs from this namespace occur in two
ways. The first is when a new RFC, FYI or STD is ways. The first is when a new RFC, FYI, STD or BCP is
passed by the IESG and published by the RFC passed by the IESG and published by the RFC
Editor. This new document will have a new series Editor. This new document will have a new series
number and will therefore define a new URN. The number and will therefore define a new URN. The
document mappings maintained by the RFC Editor (the document mappings maintained by the RFC Editor (the
index files "rfc-index.txt", "fyi-index.txt", index files "rfc-index.txt", "fyi-index.txt",
"std-index.txt") are defined to be the definitive "bcp-index.txt" and "std-index.txt") are defined to be
statement of the assignment of RFC Family URNs in this the definitive statement of the assignment of RFC
namespace. Family URNs in this namespace.
The second way a URN is assigned is when a working The second way a URN is assigned is when a working
group or birds of a feather files meeting minutes as group or birds of a feather files meeting minutes as
part of an IETF conference. The list of minutes part of an IETF conference. The list of minutes
maintained by the IETF for each working group and maintained by the IETF for each working group and
conference in the subtree pointed at by the URL conference in the subtree pointed at by the URL
ftp://ietf.org/ietf/ is considered the definitive ftp://ietf.org/ietf/ is considered the definitive
assignment of URNs for working group or birds of a assignment of URNs for working group or birds of a
feather minutes. feather minutes.
skipping to change at page 5, line 4 skipping to change at page 4, line 54
Phone: +1 402 894-9456 Phone: +1 402 894-9456
EMail: jayhawk@att.com EMail: jayhawk@att.com
Appendix A. Example Resolution Scripts Appendix A. Example Resolution Scripts
The following scripts are examples that can be used for resolving The following scripts are examples that can be used for resolving
URNs in this namespace. URNs in this namespace.
A.1 I2C A.1 I2C
#!/usr/local/bin/perl #!/usr/local/bin/perl
use strict; use strict;
# #
# this is a URN 2 URC resolver for the ietf namespace # this is a URN 2 URC resolver for the ietf namespace
# #
my(%cite) = ( my(%cite) = (
rfc => "/ftp/rfc/rfc-index.txt", rfc => "/ftp/rfc/rfc-index.txt",
fyi => "/ftp/fyi/fyi-index.txt", fyi => "/ftp/fyi/fyi-index.txt",
std => "/ftp/std/std-index.txt" std => "/ftp/std/std-index.txt",
bcp => "/ftp/rfc/bcp-index.txt"
); );
my(%number2date) = ( my(%number2date) = (
41 => "98apr", 41 => "98apr",
40 => "97dec", 39 => "97aug", 38 => "97apr", 40 => "97dec", 39 => "97aug", 38 => "97apr",
37 => "96dec", 36 => "96jun", 35 => "96mar", 37 => "96dec", 36 => "96jun", 35 => "96mar",
34 => "95dec", 33 => "95jul", 32 => "95apr", 34 => "95dec", 33 => "95jul", 32 => "95apr",
31 => "94dec", 30 => "94jul", 29 => "94mar", 31 => "94dec", 30 => "94jul", 29 => "94mar",
28 => "93nov", 27 => "93jul", 26 => "93mar", 28 => "93nov", 27 => "93jul", 26 => "93mar",
25 => "92nov", 24 => "92jul", 23 => "92mar", 25 => "92nov", 24 => "92jul", 23 => "92mar",
22 => "91nov", 21 => "91jul", 20 => "91mar", 22 => "91nov", 21 => "91jul", 20 => "91mar",
skipping to change at page 7, line 7 skipping to change at page 6, line 46
if ($scheme ne "rfc") { if ($scheme ne "rfc") {
print "HTTP/1.0 200 OK\r\n"; print "HTTP/1.0 200 OK\r\n";
print "Content-type: text/html\r\n\r\n"; print "Content-type: text/html\r\n\r\n";
$bib[0] =~ s/^[0-9]*\s*/<B>/; $bib[0] =~ s/^[0-9]*\s*/<B>/;
for ($i=0; $i<=$#bib; $i+=1) { for ($i=0; $i<=$#bib; $i+=1) {
last if ($bib[$i] =~ s/\./.<\/B>/); last if ($bib[$i] =~ s/\./.<\/B>/);
} }
for ($i=0;$i<=$#bib;$i+=1) { for ($i=0;$i<=$#bib;$i+=1) {
$k=$bib[$i]; $k=$bib[$i];
while ($k =~ /(fyi|std|rfc)([0-9]+)(.*)/i) { while ($k =~ /(fyi|std|rfc|bcp)([0-9]+)(.*)/i) {
push @ref,"$1$2"; push @ref,"$1$2";
$k=$3; $k=$3;
} }
$done=""; $done="";
foreach $j (@ref) { foreach $j (@ref) {
next if ($done =~ $j); next if ($done =~ $j);
$done .= "$j "; $done .= "$j ";
$l = $j; $l = $j;
$l =~ tr/A-Z/a-z/; $l =~ tr/A-Z/a-z/;
$link=&make_link("$l"); $link=&make_link("$l");
skipping to change at page 7, line 40 skipping to change at page 7, line 25
print "HTTP/1.0 200 OK\r\n"; print "HTTP/1.0 200 OK\r\n";
print "Content-type: text/html\r\n\r\n"; print "Content-type: text/html\r\n\r\n";
$bib[0] =~ s/^[0-9]*\s*//; $bib[0] =~ s/^[0-9]*\s*//;
$j=0; $j=0;
for ($i=0; $i<=$#bib; $i+=1) { for ($i=0; $i<=$#bib; $i+=1) {
$j += ($bib[$i] =~ s/, "/, <B>"/); $j += ($bib[$i] =~ s/, "/, <B>"/);
$j += ($bib[$i] =~ s/",/"<\/B>,/); $j += ($bib[$i] =~ s/",/"<\/B>,/);
} }
for ($i=0;$i<=$#bib;$i+=1) { for ($i=0;$i<=$#bib;$i+=1) {
$k=$bib[$i]; $k=$bib[$i];
while ($k =~ /(fyi\s|std\s|rfc)([0-9]+)(.*)/i) { while ($k =~ /(fyi\s|std\s|rfc|bcp)([0-9]+)(.*)/i) {
push @ref,"$1$2"; push @ref,"$1$2";
$k=$3; $k=$3;
} }
$done=""; $done="";
foreach $j (@ref) { foreach $j (@ref) {
next if ($done =~ $j); next if ($done =~ $j);
$done .= "$j "; $done .= "$j ";
$l = $j; $l = $j;
$l =~ s/\s//g; $l =~ s/\s//g;
$l =~ tr/A-Z/a-z/; $l =~ tr/A-Z/a-z/;
skipping to change at page 9, line 6 skipping to change at page 8, line 33
use strict; use strict;
# #
# this is a URN 2 URL resolver for the ietf namespace # this is a URN 2 URL resolver for the ietf namespace
# #
my(%pathbase) = ( my(%pathbase) = (
rfc => "rfc/rfc", rfc => "rfc/rfc",
fyi => "fyi/fyi", fyi => "fyi/fyi",
std => "std/std" std => "std/std",
bcp => "bcp/bcp",
); );
my(%number2date) = ( my(%number2date) = (
38 => "97apr", 41 => "98apr",
40 => "97dec", 39 => "97aug", 38 => "97apr",
37 => "96dec", 36 => "96jun", 35 => "96mar", 37 => "96dec", 36 => "96jun", 35 => "96mar",
34 => "95dec", 33 => "95jul", 32 => "95apr", 34 => "95dec", 33 => "95jul", 32 => "95apr",
31 => "94dec", 30 => "94jul", 29 => "94mar", 31 => "94dec", 30 => "94jul", 29 => "94mar",
28 => "93nov", 27 => "93jul", 26 => "93mar", 28 => "93nov", 27 => "93jul", 26 => "93mar",
25 => "92nov", 24 => "92jul", 23 => "92mar", 25 => "92nov", 24 => "92jul", 23 => "92mar",
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'};
skipping to change at page 11, line 17 skipping to change at page 10, line 33
# #
# this is a URN 2 URLs resolver for the ietf namespace # this is a URN 2 URLs resolver for the ietf namespace
# #
my(@urls); my(@urls);
my(%pathbase) = ( my(%pathbase) = (
rfc => "rfc/rfc", rfc => "rfc/rfc",
fyi => "fyi/fyi", fyi => "fyi/fyi",
std => "std/std" std => "std/std",
bcp => "bcp/bcp"
); );
my(%number2date) = ( my(%number2date) = (
38 => "97apr", 41 => "98apr",
40 => "97dec", 39 => "97aug", 38 => "97apr",
37 => "96dec", 36 => "96jun", 35 => "96mar", 37 => "96dec", 36 => "96jun", 35 => "96mar",
34 => "95dec", 33 => "95jul", 32 => "95apr", 34 => "95dec", 33 => "95jul", 32 => "95apr",
31 => "94dec", 30 => "94jul", 29 => "94mar", 31 => "94dec", 30 => "94jul", 29 => "94mar",
28 => "93nov", 27 => "93jul", 26 => "93mar", 28 => "93nov", 27 => "93jul", 26 => "93mar",
25 => "92nov", 24 => "92jul", 23 => "92mar", 25 => "92nov", 24 => "92jul", 23 => "92mar",
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'};
skipping to change at page 14, line 15 skipping to change at page 13, line 16
last MIME_SWITCH; last MIME_SWITCH;
} }
} }
} }
sub urn_error { sub urn_error {
my($code) = @_; #store failure code here... my($code) = @_; #store failure code here...
print "HTTP/1.0 $code"; print "HTTP/1.0 $code";
print "Content-type: text/html\n\n<HTML>\n"; print "Content-type: text/html\n\n<HTML>\n";
print "<head><title>URN Resolution: I2L $code</title></head>\n"; print "<head><title>URN Resolution: I2Ls $code</title></head>\n";
print "<BODY>\n"; print "<BODY>\n";
print "<h1>URN to URL resolution failed for the URN:</h1>\n"; print "<h1>URN to URL resolution failed for the URN:</h1>\n";
print "<hr><h3>$urn</h3>\n"; print "<hr><h3>$urn</h3>\n";
print "</body>\n"; print "</body>\n";
print "</html>\n"; print "</html>\n";
exit; exit;
} }
A.4 I2Ns A.4 I2Ns
skipping to change at page 14, line 37 skipping to change at page 13, line 38
use strict; use strict;
# #
# this is a URN 2 URNs resolver for the ietf namespace # this is a URN 2 URNs resolver for the ietf namespace
# #
my(%cite) = ( my(%cite) = (
rfc => "/ftp/rfc/rfc-index.txt", rfc => "/ftp/rfc/rfc-index.txt",
fyi => "/ftp/fyi/fyi-index.txt", fyi => "/ftp/fyi/fyi-index.txt",
std => "/ftp/std/std-index.txt" std => "/ftp/std/std-index.txt",
bcp => "/ftp/rfc/bcp-index.txt"
); );
my(%number2date) = ( my(%number2date) = (
38 => "97apr", 41 => "98apr",
40 => "97dec", 39 => "97aug", 38 => "97apr",
37 => "96dec", 36 => "96jun", 35 => "96mar", 37 => "96dec", 36 => "96jun", 35 => "96mar",
34 => "95dec", 33 => "95jul", 32 => "95apr", 34 => "95dec", 33 => "95jul", 32 => "95apr",
31 => "94dec", 30 => "94jul", 29 => "94mar", 31 => "94dec", 30 => "94jul", 29 => "94mar",
28 => "93nov", 27 => "93jul", 26 => "93mar", 28 => "93nov", 27 => "93jul", 26 => "93mar",
25 => "92nov", 24 => "92jul", 23 => "92mar", 25 => "92nov", 24 => "92jul", 23 => "92mar",
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'};
skipping to change at page 16, line 37 skipping to change at page 15, line 28
while (<INPUT>) { while (<INPUT>) {
$flag = 1 if (/^0*$value /); $flag = 1 if (/^0*$value /);
if ($flag == 1) { if ($flag == 1) {
last if (/^$/); last if (/^$/);
chop; chop;
push @bib,$_; push @bib,$_;
} }
} }
$k=join " ",@bib; $k=join " ",@bib;
while ($k =~ /(\S*)\s*(fyi|std|rfc)\s*([0-9]+)(.*)/i) { while ($k =~ /(\S*)\s*(fyi|std|rfc|bcp)\s*([0-9]+)(.*)/i) {
$k=$4; $k=$4;
$a=$2; $b=$3; $a=$2; $b=$3;
if (($a ne $scheme || $b ne $value) && ($1 !~ /obso/i)){ if (($a ne $scheme || $b ne $value) && ($1 !~ /obso/i)){
$a =~ tr/A-Z/a-z/; $a =~ tr/A-Z/a-z/;
$b =~ s/^0*//;
push @ref,"urn:ietf:$a:$b"; push @ref,"urn:ietf:$a:$b";
} }
} }
MIME_SWITCH: { MIME_SWITCH: {
if ($accept =~ /text\/uri-list/) { if ($accept =~ /text\/uri-list/) {
print "HTTP/1.0 200 OK\n"; print "HTTP/1.0 200 OK\n";
print "Content-type: text/uri-list\n\n\n"; print "Content-type: text/uri-list\n\n\n";
print "#$urn\n"; print "#$urn\n";
foreach $i (@ref) { foreach $i (@ref) {
skipping to change at page 17, line 17 skipping to change at page 15, line 57
} }
if ($accept =~ /\*\/\*|text\/html/) { if ($accept =~ /\*\/\*|text\/html/) {
print "HTTP/1.0 200 OK\n"; print "HTTP/1.0 200 OK\n";
print "Content-type: text/html\n\n<HTML>\n"; print "Content-type: text/html\n\n<HTML>\n";
print "<head><title>URN Resolution: I2Ns</title></head>\n"; print "<head><title>URN Resolution: I2Ns</title></head>\n";
print "<BODY>\n"; print "<BODY>\n";
print "<h1>URN $urn resolves to the following URNs:</h1>\n"; print "<h1>URN $urn resolves to the following URNs:</h1>\n";
print "<hr><ul>\n"; print "<hr><ul>\n";
foreach $i (@ref) { foreach $i (@ref) {
print "<li>$i: Click to resolve using\n"; print "<li>$i: Click to resolve using\n";
print "<a href=\"http://dsm0.ds.internic.net:8080/uri-res/I2C?$i\">I2C</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2C?$i\">I2C</a>,\n";
print "<a href=\"http://dsm0.ds.internic.net:8080/uri-res/I2L?$i\">I2L</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2L?$i\">I2L</a>,\n";
print "<a href=\"http://dsm0.ds.internic.net:8080/uri-res/I2Ls?$i\">I2Ls</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2Ls?$i\">I2Ls</a>,\n";
print "<a href=\"http://dsm0.ds.internic.net:8080/uri-res/I2R?$i\">I2R</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2R?$i\">I2R</a>,\n";
print "<a href=\"http://dsm0.ds.internic.net:8080/uri-res/I2Rs?$i\">I2Rs</a>\n"; print "<a href=\"http://$host:$port/uri-res/I2Rs?$i\">I2Rs</a>\n";
} }
print "</UL>\n</body>\n</HTML>\n"; print "</UL>\n</body>\n</HTML>\n";
} }
} }
} }
sub make_link { sub make_link {
my($sc); my($sc);
my($inarg)=@_; my($inarg)=@_;
($sc=$1) if ($inarg =~ /([a-z]*)/); ($sc=$1) if ($inarg =~ /([a-z]*)/);
skipping to change at page 18, line 15 skipping to change at page 16, line 50
use strict; use strict;
# #
# this is a URN 2 resource resolver for the ietf namespace # this is a URN 2 resource resolver for the ietf namespace
# #
my(%pathbase) = ( my(%pathbase) = (
rfc => "rfc/rfc", rfc => "rfc/rfc",
fyi => "fyi/fyi", fyi => "fyi/fyi",
std => "std/std" std => "std/std",
bcp => "bcp/bcp"
); );
my(%number2date) = ( my(%number2date) = (
38 => "97apr", 41 => "98apr",
40 => "97dec", 39 => "97aug", 38 => "97apr",
37 => "96dec", 36 => "96jun", 35 => "96mar", 37 => "96dec", 36 => "96jun", 35 => "96mar",
34 => "95dec", 33 => "95jul", 32 => "95apr", 34 => "95dec", 33 => "95jul", 32 => "95apr",
31 => "94dec", 30 => "94jul", 29 => "94mar", 31 => "94dec", 30 => "94jul", 29 => "94mar",
28 => "93nov", 27 => "93jul", 26 => "93mar", 28 => "93nov", 27 => "93jul", 26 => "93mar",
25 => "92nov", 24 => "92jul", 23 => "92mar", 25 => "92nov", 24 => "92jul", 23 => "92mar",
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'};
skipping to change at page 20, line 27 skipping to change at page 18, line 52
} }
&urn_error("404 Not Found\n"); &urn_error("404 Not Found\n");
} }
} }
sub urn_error { sub urn_error {
my($code) = @_; #store failure code here... my($code) = @_; #store failure code here...
print "HTTP/1.0 $code"; print "HTTP/1.0 $code";
print "Content-type: text/html\n\n<HTML>\n"; print "Content-type: text/html\n\n<HTML>\n";
print "<head><title>URN Resolution: I2L $code</title></head>\n"; print "<head><title>URN Resolution: I2R $code</title></head>\n";
print "<BODY>\n"; print "<BODY>\n";
print "<h1>URN to URL resolution failed for the URN:</h1>\n"; print "<h1>URN to URL resolution failed for the URN:</h1>\n";
print "<hr><h3>$urn</h3>\n"; print "<hr><h3>$urn</h3>\n";
print "</body>\n"; print "</body>\n";
print "</html>\n"; print "</html>\n";
exit; exit;
} }
A.6 I2Rs A.6 I2Rs
skipping to change at page 20, line 51 skipping to change at page 19, line 22
# #
# this is a URN 2 resources resolver for the ietf namespace # this is a URN 2 resources resolver for the ietf namespace
# #
my(@urls); my(@urls);
my(%pathbase) = ( my(%pathbase) = (
rfc => "rfc/rfc", rfc => "rfc/rfc",
fyi => "fyi/fyi", fyi => "fyi/fyi",
std => "std/std" std => "std/std",
bcp => "bcp/bcp"
); );
my(%number2date) = ( my(%number2date) = (
38 => "97apr", 41 => "98apr",
40 => "97dec", 39 => "97aug", 38 => "97apr",
37 => "96dec", 36 => "96jun", 35 => "96mar", 37 => "96dec", 36 => "96jun", 35 => "96mar",
34 => "95dec", 33 => "95jul", 32 => "95apr", 34 => "95dec", 33 => "95jul", 32 => "95apr",
31 => "94dec", 30 => "94jul", 29 => "94mar", 31 => "94dec", 30 => "94jul", 29 => "94mar",
28 => "93nov", 27 => "93jul", 26 => "93mar", 28 => "93nov", 27 => "93jul", 26 => "93mar",
25 => "92nov", 24 => "92jul", 23 => "92mar", 25 => "92nov", 24 => "92jul", 23 => "92mar",
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'};
skipping to change at page 23, line 11 skipping to change at page 21, line 20
close FILE; close FILE;
} }
print "--endpart\n"; print "--endpart\n";
} }
sub urn_error { sub urn_error {
my($code) = @_; #store failure code here... my($code) = @_; #store failure code here...
print "HTTP/1.0 $code"; print "HTTP/1.0 $code";
print "Content-type: text/html\n\n<HTML>\n"; print "Content-type: text/html\n\n<HTML>\n";
print "<head><title>URN Resolution: I2L $code</title></head>\n"; print "<head><title>URN Resolution: I2Rs $code</title></head>\n";
print "<BODY>\n"; print "<BODY>\n";
print "<h1>URN to URL resolution failed for the URN:</h1>\n"; print "<h1>URN to URL resolution failed for the URN:</h1>\n";
print "<hr><h3>$urn</h3>\n"; print "<hr><h3>$urn</h3>\n";
print "</body>\n"; print "</body>\n";
print "</html>\n"; print "</html>\n";
exit; exit;
} }
 End of changes. 33 change blocks. 
53 lines changed or deleted 86 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/