| < 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 | Expires in six months April 1998 | |||
| 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 4 ¶ | skipping to change at page 6, line 43 ¶ | |||
| push @bib,$_; | push @bib,$_; | |||
| } | } | |||
| } | } | |||
| 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 41 ¶ | skipping to change at page 7, line 26 ¶ | |||
| 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 34 ¶ | |||
| 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 4 ¶ | skipping to change at page 10, line 19 ¶ | |||
| print "<head><title>URN Resolution: I2L $code</title></head>\n"; | print "<head><title>URN Resolution: I2L $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.3 I2Ls | A.3 I2Ls | |||
| #!/usr/local/bin/perl | #!/usr/local/bin/perl | |||
| use strict; | use strict; | |||
| # | # | |||
| # 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 13, line 52 ¶ | skipping to change at page 13, line 4 ¶ | |||
| } | } | |||
| 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: I2Ls</title></head>\n"; | print "<head><title>URN Resolution: I2Ls</title></head>\n"; | |||
| print "<BODY>\n"; | print "<BODY>\n"; | |||
| print "<h1>URN $urn resolves to the following URLs:</h1>\n"; | print "<h1>URN $urn resolves to the following URLs:</h1>\n"; | |||
| print "<hr><ul>\n"; | print "<hr><ul>\n"; | |||
| foreach $i (@urls) { | foreach $i (@urls) { | |||
| print "<LI><A HREF=\"$i\">$i</A>\n"; | print "<LI><A HREF=\"$i\">$i</A>\n"; | |||
| } | } | |||
| print "</UL>\n</body>\n</HTML>\n"; | print "</UL>\n</body>\n</HTML>\n"; | |||
| 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 39 ¶ | |||
| 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 38 ¶ | 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 4 ¶ | skipping to change at page 16, line 38 ¶ | |||
| print "<head><title>URN Resolution: I2Ns $code</title></head>\n"; | print "<head><title>URN Resolution: I2Ns $code</title></head>\n"; | |||
| print "<BODY>\n"; | print "<BODY>\n"; | |||
| print "<h1>URN to URC resolution failed for the URN:</h1>\n"; | print "<h1>URN to URC 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.5 I2R | A.5 I2R | |||
| #!/usr/local/bin/perl | #!/usr/local/bin/perl | |||
| 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 28 ¶ | 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 52 ¶ | 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 4 ¶ | skipping to change at page 21, line 13 ¶ | |||
| if ($i =~ /ps$/) { | if ($i =~ /ps$/) { | |||
| print "Content-Type: application/postscript\n\n"; | print "Content-Type: application/postscript\n\n"; | |||
| } | } | |||
| open(FILE, "$i"); | open(FILE, "$i"); | |||
| while (<FILE>) { | while (<FILE>) { | |||
| print "$_"; | print "$_"; | |||
| } | } | |||
| 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. 38 change blocks. | ||||
| 56 lines changed or deleted | 88 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/ | ||||