| < draft-ietf-urn-ietf-06.txt | draft-ietf-urn-ietf-07.txt > | |||
|---|---|---|---|---|
| Internet-Draft Ryan Moats | Internet-Draft Ryan Moats | |||
| draft-ietf-urn-ietf-06.txt AT&T | draft-ietf-urn-ietf-07.txt AT&T | |||
| Expires in six months June 1998 | Expires in six months October 1998 | |||
| A URN Namespace for IETF Documents | A URN Namespace for IETF Documents | |||
| Filename: draft-ietf-urn-ietf-06.txt | Filename: draft-ietf-urn-ietf-07.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 learn the current status of any Internet-Draft, please check | |||
| the ``1id-abstracts.txt'' listing contained in the Internet- | the ``1id-abstracts.txt'' listing contained in the Internet- | |||
| Drafts Shadow Directories on ftp.is.co.za (Africa), nic.nordu.net | Drafts Shadow Directories on ftp.is.co.za (Africa), nic.nordu.net | |||
| (Europe), munnari.oz.au (Pacific Rim), ds.internic.net (US East | (Europe), munnari.oz.au (Pacific Rim), ftp.ietf.org (US East | |||
| Coast), or ftp.isi.edu (US West Coast). | 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, FYIs, | namespace consists of the RFC family of documents (RFCs, STDs, FYIs, | |||
| and BCPs) developed by the IETF and published by the RFC editor and | and BCPs) developed by the IETF and published by the RFC Editor, the | |||
| the minutes of working groups (WG) and birds of a feather (BOF) | minutes of working groups (WG) and birds of a feather (BOF) meetings | |||
| meetings that occur during IETF conferences. Both the current URN | that occur during IETF conferences, and the Internet Drafts published | |||
| framework and URN syntax support this namespace. | by the Internet Drafts Editor. Both the current URN framework and | |||
| URN syntax support this namespace. | ||||
| 0.1 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 | 0.2 Changes from -03 | |||
| Text was added to the template clarifying persistence and uniqueness. | Text was added to the template clarifying persistence and uniqueness. | |||
| skipping to change at page 2, line 22 ¶ | skipping to change at page 2, line 22 ¶ | |||
| More clarifications for the persistence section. In addition, | More clarifications for the persistence section. In addition, | |||
| cleaned up some typos and ensured that the Appendix examples are | cleaned up some typos and ensured that the Appendix examples are | |||
| functional | functional | |||
| 0.4 Changes from -05 | 0.4 Changes from -05 | |||
| Based on a number of requests, i-ds have been added to the structure | Based on a number of requests, i-ds have been added to the structure | |||
| and resolvers. In addition, some examples have been added. | and resolvers. In addition, some examples have been added. | |||
| 0.4 Changes from -06 | ||||
| Some changes of the template to conform with draft-ietf-urn-nid-req- | ||||
| 06.txt. Minor editing of some of the sections for more clarity. | ||||
| 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, FYIs, and BCPs) developed by the | RFC family of documents (RFCs, STDs, FYIs, and BCPs) developed by the | |||
| IETF and published by the RFC editor and the minutes of working | IETF and published by the RFC editor and the minutes of working | |||
| groups (WG) and birds of a feather (BOF) meetings that occur during | groups (WG) and birds of a feather (BOF) meetings that occur during | |||
| IETF 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. | |||
| Registration Information: | ||||
| Registration version number: 1 | ||||
| Registration date: 1998-10-09 | ||||
| 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) | |||
| ( "id:" name) | ( "id:" name) | |||
| family = "rfc" / "std" / "fyi" / "bcp" | family = "rfc" / "std" / "fyi" / "bcp" | |||
| number = 1*DIGIT | number = 1*DIGIT | |||
| wgbofname = 1*LETDIGIT | wgbofname = 1*LETDIGIT | |||
| name = id draft designation with "draft-" and trailing | name = id draft name beginning with "draft-" and trailing | |||
| type removed (e.g. ietf-urn-ietf-06) | type removed (e.g. ietf-urn-ietf-06) | |||
| 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 | |||
| skipping to change at page 3, line 46 ¶ | skipping to change at page 4, line 8 ¶ | |||
| 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. Distinct from this, the | |||
| resources identified as RFCs are immutable, whereas | resources identified as RFCs are immutable, whereas | |||
| the other sorts of documents, STDs, FYIs, and BCPs are | the other sorts of documents, STDs, FYIs, and BCPs are | |||
| not. They may be composites of one or more RFCs and | not. They may be composites of one or more RFCs and | |||
| the set of RFCs that comprise 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 two | Assignment of URNs from this namespace occurs in three | |||
| ways. The first is when a new RFC, FYI, STD or BCP is | ways. The first is through publication of a new RFC, | |||
| passed by the IESG and published by the RFC | FYI, STD or BCP is by the RFC Editor. This new document | |||
| Editor. This new document will have a new series | will have a new series number and will therefore define | |||
| number and will therefore define a new URN. The | a new URN. The document mappings maintained by the | |||
| document mappings maintained by the RFC Editor (the | RFC Editor (the index files "rfc-index.txt", | |||
| index files "rfc-index.txt", "fyi-index.txt", | "fyi-index.txt", "bcp-index.txt" and "std-index.txt") | |||
| "bcp-index.txt" and "std-index.txt") are defined to be | are defined to be the definitive statement of the | |||
| the definitive statement of the assignment of RFC | assignment of RFC Family URNs in this 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 through the filing | |||
| group or birds of a feather files meeting minutes as | of meeting minutes by a working group or birds of a | |||
| part of an IETF conference. The list of minutes | feather as part of an IETF conference. The list of | |||
| maintained by the IETF for each working group and | minutes maintained by the IETF for each working group | |||
| conference in the subtree pointed at by the URL | and 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. | |||
| The third way a URN is assigned is through the | The third way a URN is assigned is through the | |||
| publication of a new internet-draft by the Internet | publication of a new internet-draft by the Internet | |||
| Draft Editor. This draft will have a distinct name | Draft Editor. This draft will have a distinct name | |||
| (and version number) and therefore defined a new URN. | (and version number) and therefore defined a new URN. | |||
| The document mapping maintained by the Internet Drafts | The document mapping maintained by the Internet Drafts | |||
| 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 | |||
| this portion of the namespace. | this portion of the namespace. | |||
| Process of identifier resolution: | Process of identifier resolution: | |||
| A mirrored copy of the underlying documentation is | A mirrored copy of the underlying documentation is | |||
| required to resolve these URNs. Resolution via | required to resolve these URNs. Resolution via | |||
| HTTP is accomplished by a set of simple Perl cgi-bin | HTTP is done by a set of simple Perl cgi-bin | |||
| scripts presented in Appendix A. | scripts presented in Appendix A. | |||
| Rules for Lexical Equivalence: | Rules for Lexical Equivalence: | |||
| The entire URN is case-insensitive. | The entire URN is case-insensitive. | |||
| Conformance with URN Syntax: | Conformance with URN Syntax: | |||
| There are no additional characters reserved. | There are no additional characters reserved. | |||
| skipping to change at page 7, line 4 ¶ | skipping to change at page 7, line 12 ¶ | |||
| 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:(i); | (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(i); | |||
| (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(72)/i); | (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(72)/i); | |||
| (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(9*)-( | (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg-(9*)-( | |||
| 120&urn_error("400 Bad Request0); | 120&urn_error("400 Bad Request0); | |||
| sub resolvemtg { | sub resolvemtg { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| &urn_error("404 Not Found0) if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found0) 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 OK70; | print "Status: 200 OK70; | |||
| print "Content-type: text/html70; | print "Content-type: text/html70; | |||
| print "<HTML>0TITLE>Citation for $urn</TITLE>0; | print "<HTML>0TITLE>Citation for $urn</TITLE>0; | |||
| print "<BODY>0; | print "<BODY>0; | |||
| print "<H1><A HREF= | print "<H1><A HREF= | |||
| print "Minutes of the $sesnam working group from the " . &end($ietfnum) . " IETF"; | print "Minutes of the $sesnam working group from the " . &end($ietfnum) | |||
| . " IETF"; | ||||
| print "</BODY>0/HTML>0; | print "</BODY>0/HTML>0; | |||
| return; | return; | |||
| } | } | |||
| my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; | |||
| if (-f $link) { | if (-f $link) { | |||
| print "Status: 200 OK70; | print "Status: 200 OK70; | |||
| print "Content-type: text/html70; | print "Content-type: text/html70; | |||
| print "<HTML>0TITLE>Citation for $urn</TITLE>0; | print "<HTML>0TITLE>Citation for $urn</TITLE>0; | |||
| print "<BODY>0; | print "<BODY>0; | |||
| print "<H1><A HREF= | print "<H1><A HREF= | |||
| print "Minutes of the $sesnam working group from the " . &end($ietfnum) . " IETF"; | print "Minutes of the $sesnam working group from the " . &end($ietfnum) | |||
| . " IETF"; | ||||
| print "</BODY>0/HTML>0; | print "</BODY>0/HTML>0; | |||
| return; | return; | |||
| } | } | |||
| &urn_error("404 Not Found0); | &urn_error("404 Not Found0); | |||
| } | } | |||
| sub end { | sub end { | |||
| my($inarg)=@_; | my($inarg)=@_; | |||
| return $inarg . "st" if ($inarg =~ /1$/); | return $inarg . "st" if ($inarg =~ /1$/); | |||
| return $inarg . "nd" if ($inarg =~ /2$/); | return $inarg . "nd" if ($inarg =~ /2$/); | |||
| skipping to change at page 14, line 51 ¶ | skipping to change at page 15, line 13 ¶ | |||
| sub resolve2 { | sub resolve2 { | |||
| my($ietfnum, $sesnam) = @_; | my($ietfnum, $sesnam) = @_; | |||
| &urn_error("404 Not Found0) if (!defined $number2date{$ietfnum}); | &urn_error("404 Not Found0) 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"; | |||
| my($httplink)="http://$host/$link"; | my($httplink)="http://$host/$link"; | |||
| my($glink)="gopher://$host:70/0/$link"; | my($glink)="gopher://$host:70/0/$link"; | |||
| if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise text/html | if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise | |||
| text/html | ||||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| print "Content-type: text/uri-list0; | print "Content-type: text/uri-list0; | |||
| print "#$urn0; | print "#$urn0; | |||
| print "$ftplink0; | print "$ftplink0; | |||
| print "$httplink0; | print "$httplink0; | |||
| print "$glink0; | print "$glink0; | |||
| } | } | |||
| if ($accept =~ /text/html/) { | if ($accept =~ /text/html/) { | |||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| print "Content-type: text/html0HTML>0; | print "Content-type: text/html0HTML>0; | |||
| skipping to change at page 15, line 31 ¶ | skipping to change at page 15, line 42 ¶ | |||
| print "</UL>0/body>0/HTML>0; | print "</UL>0/body>0/HTML>0; | |||
| } | } | |||
| return; | return; | |||
| } | } | |||
| my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; | my($link)="$wgpath/$date/$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"; | |||
| my($httplink)="http://$host/$link"; | my($httplink)="http://$host/$link"; | |||
| my($glink)="gopher://$host:70/0/$link"; | my($glink)="gopher://$host:70/0/$link"; | |||
| if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise text/html | if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise | |||
| text/html | ||||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| print "Content-type: text/uri-list0; | print "Content-type: text/uri-list0; | |||
| print "#$urn0; | print "#$urn0; | |||
| print "$ftplink0; | print "$ftplink0; | |||
| print "$httplink0; | print "$httplink0; | |||
| print "$glink0; | print "$glink0; | |||
| } | } | |||
| if ($accept =~ /text/html/) { | if ($accept =~ /text/html/) { | |||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| print "Content-type: text/html0HTML>0; | print "Content-type: text/html0HTML>0; | |||
| skipping to change at page 16, line 36 ¶ | skipping to change at page 16, line 45 ¶ | |||
| } | } | |||
| $try="/ftp/$pathbase{$scheme}$value.html"; | $try="/ftp/$pathbase{$scheme}$value.html"; | |||
| if (-f $try) { | if (-f $try) { | |||
| push(@urls, "http://$host/$pathbase{$scheme}$value.html"); | push(@urls, "http://$host/$pathbase{$scheme}$value.html"); | |||
| push(@urls, "ftp://$host/$pathbase{$scheme}$value.html"); | push(@urls, "ftp://$host/$pathbase{$scheme}$value.html"); | |||
| } | } | |||
| &urn_error("404 Not Found0) if ($#urls == -1); | &urn_error("404 Not Found0) if ($#urls == -1); | |||
| MIME_SWITCH: { | MIME_SWITCH: { | |||
| if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise text/html | if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise | |||
| text/html | ||||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| print "Content-type: text/uri-list0; | print "Content-type: text/uri-list0; | |||
| print "#$urn0; | print "#$urn0; | |||
| foreach $i (@urls) { | foreach $i (@urls) { | |||
| print "$i0; | print "$i0; | |||
| } | } | |||
| last MIME_SWITCH; | last MIME_SWITCH; | |||
| } | } | |||
| if ($accept =~ /text/html/) { | if ($accept =~ /text/html/) { | |||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| skipping to change at page 18, line 6 ¶ | skipping to change at page 18, line 16 ¶ | |||
| } | } | |||
| $try="/ftp/$pathbase{$scheme}$value.html"; | $try="/ftp/$pathbase{$scheme}$value.html"; | |||
| if (-f $try) { | if (-f $try) { | |||
| push(@urls, "http://$host/$pathbase{$scheme}$value.html"); | push(@urls, "http://$host/$pathbase{$scheme}$value.html"); | |||
| push(@urls, "ftp://$host/$pathbase{$scheme}$value.html"); | push(@urls, "ftp://$host/$pathbase{$scheme}$value.html"); | |||
| } | } | |||
| &urn_error("404 Not Found0) if ($#urls == -1); | &urn_error("404 Not Found0) if ($#urls == -1); | |||
| MIME_SWITCH: { | MIME_SWITCH: { | |||
| if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise text/html | if ($accept =~ /text/uri-list/) { #look for text/uri-list, otherwise | |||
| text/html | ||||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| print "Content-type: text/uri-list0; | print "Content-type: text/uri-list0; | |||
| print "#$urn0; | print "#$urn0; | |||
| foreach $i (@urls) { | foreach $i (@urls) { | |||
| print "$i0; | print "$i0; | |||
| } | } | |||
| last MIME_SWITCH; | last MIME_SWITCH; | |||
| } | } | |||
| if ($accept =~ /text/html/) { | if ($accept =~ /text/html/) { | |||
| print "Status: 200 OK0; | print "Status: 200 OK0; | |||
| End of changes. 18 change blocks. | ||||
| 32 lines changed or deleted | 49 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/ | ||||