Network Working Group R. Moats Request for Comments: 2648 AT&T Category: Informational August 1999
A URN Namespace for IETF Documents
Status of this Memo
このメモの位置付け
This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.
このメモはインターネットコミュニティのための情報を提供します。それはどんな種類のインターネット標準を指定しません。このメモの配布は無制限です。
Copyright Notice
著作権表示
Copyright (C) The Internet Society (1999). All Rights Reserved.
著作権(C)インターネット協会(1999)。全著作権所有。
Abstract
抽象
A system for Uniform Resource Names (URNs) must be capable of supporting new naming systems. As an example of proposing a new namespace, this document proposes the "ietf" namespace. This namespace consists of the RFC family of documents (RFCs, STDs, FYIs, and BCPs) developed by the IETF and published by the RFC Editor, the minutes of working groups (WG) and birds of a feather (BOF) meetings that occur during IETF conferences, and the Internet Drafts published by the Internet Drafts Editor. Both the current URN framework and URN syntax support this namespace.
統一リソース名(URNの)のためのシステムは、新たなネーミングシステムをサポートできなければなりません。新しい名前空間を提案する例として、この文書は、「IETF」の名前空間を提案しています。この名前空間は、RFC文書の家族(のRFC、性感染症、FYIに、とのBCP)IETFによって開発され、RFC編集者によって公開され、ワーキンググループの議事録(WG)との間に発生羽(BOF)会議の鳥で構成されていIETF会議、およびインターネットドラフトエディタによって公開されインターネットドラフト。現在のURN枠組みとURN構文のサポートこの名前空間の両方。
This document proposes the "ietf" namespace, which consists of 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 groups (WG) and birds of a feather (BOF) meetings that occur during IETF conferences.
この文書は、文書(RFCは、性感染症、FYIに、とのBCP)IETFによって開発され、RFCエディタによって公開とのワーキンググループ(WG)と鳥の分のRFCファミリーで構成され、「IETF」の名前空間を、提案しています羽(BOF)IETF会議中に発生する会議。
The namespace specification is for a formal namespace.
名前空間仕様は正式な名前空間のためです。
Namespace ID:
名前空間ID:
"ietf" requested.
要求された "IETF"。
Registration Information:
登録情報:
Registration version number: 1 Registration date: 1999-04-22
Declared registrant of the namespace:
名前空間の宣言された登録者:
Ryan Moats jayhawk@att.com AT&T 15621 Drexel Circle Omaha, NE 68135-2358
Declaration of structure:
構造体の宣言:
The identifier has the following ABNF [2] specification:
識別子は、以下のABNF [2]仕様を有します。
NSS = rfc-nss / fyi-nss / std-nss / bcp-nss / draft-nss / mtg-nss / other-nss
NSS = RFC-NSS / FYI-NSS / STD-NSS / BCP-NSS /ドラフト-NSS / MTG-NSS /その他-NSS
rfc-nss = "rfc:" 1*DIGIT fyi-nss = "fyi:" 1*DIGIT std-nss = "std:" 1*DIGIT bcp-nss = "bcp:" 1*DIGIT draft-nss = "id:" string mtg-nss = "mtg:" string other-nss = string ; beginning with a prefix other than one of those ; above for future expansion
RFC-NSS = "RFC:" 1 * DIGIT FYI-NSS = "FYI:" 1 * DIGITのSTD-NSS = "STD:" 1 * DIGITのBCP-NSS = "BCP:" 1 * DIGITドラフト-NSS =「ID 」文字列MTG-NSS = "MTG" ストリング他-NSS =ストリング。上記以外の接頭辞で始まります。将来の拡張のために上記
string = 1*(DIGIT / ALPHA / "-")
文字列= 1 *(DIGIT / ALPHA / " - ")
If the IESG (or it successor) adds a new document series, this ABNF specification will need to be updated. Further, if a working group or BOF is created that used characters outside the range of this ABNF specification, this specification will need to be updated. Any system intended to resolve names for this namespace should be written with the awareness that this could occur at any time.
IESG(またはそれ後継が)新しいドキュメントシリーズを追加した場合、このABNF仕様は更新する必要があります。ワーキンググループまたはBOFは、このABNF仕様の範囲外の文字を使用している作成された場合はさらに、この仕様を更新する必要があります。この名前空間の名前を解決することを目的と任意のシステムでは、これはいつでも発生する可能性があることを意識して記述する必要があります。
Relevant ancillary documentation:
関連の補助ドキュメント:
Relevant documentation is in RFC 2648.
関連文書は、RFC 2648です。
Identifier uniqueness considerations:
識別子一意性の考慮事項:
Because the rfc-editor assigns the RFC number uniquely these URNs are unique. Since the mapping between RFCs and other rfc-editor document series (STDs, FYIs or BCPs) is not necessarily one-to-one, uniqueness of 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", "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. The document mapping maintained by the Internet Drafts editor ("1id- abstracts.txt") is defined as the definitive statement of the assignment of URNs for the internet draft portion of this namespace.
Identifier persistence considerations:
識別子の永続性の考慮事項:
Persistence of the URNs of this namespace is independent of the mutability of the underlying documents. A URN once assigned will never be reassigned to a different resource; the assignment is persistent and immutable. Immutability of RFCs, STDs, FYIs and BCPs is at the discretion of the RFC Editor. They may be composites of one or more RFCs and the set of RFCs that includes them may change with time. It is important to note that this mutability of some resources is independent of the immutability of URN assignment to a resource.
Process of identifier assignment:
識別子割り当てのプロセス。
Assignment of URNs from this namespace occurs in three ways. The first is through publication of a new RFC, FYI, STD or BCP is by the RFC Editor. This new document will have a new series number and will therefore define a new URN. 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 second way a URN is assigned is through the filing of meeting minutes by a working group or birds of a feather as part of an IETF conference. The list of minutes maintained by the IETF for each working group and conference in the subtree pointed at by the URL ftp://ietf.org/ietf/ is considered the definitive assignment of URNs for working group or birds of a feather minutes.
URNが割り当てられている第二の方法は、IETF会議の一環として、ワーキンググループや羽の鳥で議事録の提出を介して行われます。サブツリー内の各ワーキンググループ会議にIETFによって維持分のリストは、ワーキンググループや羽分の鳥のためのURNの決定的な割り当てとみなされftp://ietf.org/ietf/ URLが指します。
The third way a URN is assigned is through the publication of a new internet-draft by the Internet Draft Editor. This draft will have a distinct name (and version number) and therefore defined a new URN. The document mapping maintained by the Internet Drafts editor ("1id-abstracts.txt") is defined as the definitive statement of the assignment of URNs for this portion of the namespace.
URNが割り当てられている第三の方法は、インターネットドラフトエディタによって新しいインターネットドラフトの出版を通じてです。この草案は、明確な名前(およびバージョン番号)を持っているので、新しいURNを定義します。インターネットドラフトエディタ(「1ID-abstracts.txt」)によって維持文書マッピングは、名前空間のこの部分のためのURNの割り当ての決定的な文として定義されます。
Process of identifier resolution:
識別子解像度のプロセス。
A mirrored copy of the underlying documentation is required to resolve these URNs. Resolution via HTTP is done by a set of simple Perl cgi-bin scripts presented in Appendix A.
Rules for Lexical Equivalence:
字句等価のルール:
The entire URN is case-insensitive.
全体のURNは、大文字と小文字を区別しません。
Conformance with URN Syntax:
URN構文に準拠:
There are no additional characters reserved.
予約は追加の文字がありません。
Validation mechanism:
検証メカニズム:
None additional to resolution specified
指定した解像度への追加なし
Scope:
範囲:
Global.
グローバル。
The following are examples of URNs that a resolver for this namespace can resolve:
この名前空間のためのリゾルバは解決できるのURNの例は次のとおりです。
urn:ietf:rfc:2141 urn:ietf:std:50 urn:ietf:id:ietf-urn-ietf-06 urn:ietf:mtg:41-urn
Because this namespace defines no additional reserved characters, it does not add any security considerations beyond those inherent from the existence of the reserved characters from [1]. Further, none of the reserved characters from [1] are used in the definition of the NSS. This means that resolvers for this namespace may be considered "secure" in the sense that any escaping of characters in the NSS MUST result in the resolver indicating that the URN has incorrect syntax.
この名前空間には、追加の予約文字を定義していないので、それは、[1]からの予約文字の存在から、固有のもの以外の任意のセキュリティ上の考慮事項を追加しません。さらに、[1]から予約文字のいずれもNSSの定義に使用されていません。これは、この名前空間のためのリゾルバは、NSS内の文字のいずれかのエスケープはURNが不正な構文を持っていることを示すリゾルバをもたらさなければなりませんという意味で「安全」と見なすことができることを意味しています。
Thanks to various members of the URN working group for comments on earlier drafts of this document. The work described in this document is partially supported by the National Science Foundation, Cooperative Agreement NCR-9218179.
このドキュメントの以前のドラフトでのコメントのURNワーキンググループの様々なメンバーに感謝します。この文書で説明する作業は、部分的に国立科学財団、協力協定NCR-9218179によってサポートされています。
Request For Comments (RFC) and Internet Draft documents are available from numerous mirror sites.
コメント(RFC)とインターネットドラフト文書の要求は、多数のミラーサイトから入手できます。
[1] Moats, R., "URN Syntax", RFC 2141, May 1997.
[1]堀、R.、 "URN構文"、RFC 2141、1997年5月を。
[2] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997.
[2]クロッカー、D.、およびP. Overell、 "構文仕様のための増大しているBNF:ABNF"、RFC 2234、1997年11月。
Ryan Moats AT&T 15621 Drexel Circle Omaha, NE 68135-2358 USA
ライアン・モーツAT&T 15621ドレクセルサークルオマハ、ネブラスカ68135から2358 USA
EMail: jayhawk@att.com
メールアドレス:jayhawk@att.com
Appendix A. Example Resolution Scripts
付録A.例解決スクリプト
The following scripts are examples that can be used for resolving URNs in this namespace.
次のスクリプトは、この名前空間内のURNを解決するために使用することができます例です。
A.1 I2C
A.1 I2C
#!/usr/local/bin/perl
#!/ usr / local / bin / perlの
use strict;
厳密に使用します。
# # this is a URN 2 URC resolver for the ietf namespace #
##これは、IETF名前空間の#のためのURN 2 URCリゾルバです
my(%cite) = ( bcp => "/ftp/rfc/bcp-index.txt", fyi => "/ftp/fyi/fyi-index.txt", id => "/ftp/internet-drafts/1id-abstracts.txt", rfc => "/ftp/rfc/rfc-index.txt", std => "/ftp/std/std-index.txt" ); my(%number2date) = ( 44 => "99mar", 43 => "98dec", 42 => "98aug", 41 => "98apr", 40 => "97dec", 39 => "97aug", 38 => "97apr", 37 => "96dec", 36 => "96jun", 35 => "96mar", 34 => "95dec", 33 => "95jul", 32 => "95apr", 31 => "94dec", 30 => "94jul", 29 => "94mar", 28 => "93nov", 27 => "93jul", 26 => "93mar", 25 => "92nov", 24 => "92jul", 23 => "92mar", 22 => "91nov", 21 => "91jul", 20 => "91mar", 19 => "90dec" );
my($wgpath) = "/ftp/ietf"; my($urn) = $ENV{'QUERY_STRING'}; my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header
(&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); &urn_error("400 Bad Request\n");
sub resolvemtg { my($ietfnum, $sesnam) = @_; &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); my($date)=$number2date{$ietfnum};
my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; if (-f $link) { print "Status: 200 OK\r\n"; print "Content-type: text/html\r\n\r\n"; print "<HTML>\n<TITLE>Citation for $urn</TITLE>\n"; print "<BODY>\n"; print "<H1><A HREF=\"$link\">$urn</A>:</H1>\n"; print "Minutes of the $sesnam working group from the " . &end($ietfnum) . " IETF"; print "</BODY>\n</HTML>\n"; return; } my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; if (-f $link) { print "Status: 200 OK\r\n"; print "Content-type: text/html\r\n\r\n"; print "<HTML>\n<TITLE>Citation for $urn</TITLE>\n"; print "<BODY>\n"; print "<H1><A HREF=\"$link\">$urn</A>:</H1>\n"; print "Minutes of the $sesnam working group from the " . &end($ietfnum) . " IETF"; print "</BODY>\n</HTML>\n"; return; } &urn_error("404 Not Found\n"); }
sub end { my($inarg)=@_; return $inarg . "st" if ($inarg =~ /1$/); return $inarg . "nd" if ($inarg =~ /2$/); return $inarg . "rd" if ($inarg =~ /3$/); return $inarg . "th"; }
sub resolverfc { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($scheme, $value) = @_; $scheme =~ tr/A-Z/a-z/; if (!defined $cite{$scheme}) { &urn_error("404 Not Found\n"); }
$flag = 0; open(INPUT, "$cite{$scheme}"); while (<INPUT>) { $flag = 1 if (/^0*$value /);
if ($flag == 1) { last if (/^$/); chop; push @bib,$_; } }
if ($scheme ne "rfc") { print "Status: 200 OK\r\n"; print "Content-type: text/html\r\n\r\n"; $bib[0] =~ s/^[0-9]*\s*/<B>/; for ($i=0; $i<=$#bib; $i+=1) { last if ($bib[$i] =~ s/\./.<\/B>/); } for ($i=0;$i<=$#bib;$i+=1) { $k=$bib[$i]; while ($k =~ /(fyi|std|rfc|bcp)([0-9]+)(.*)/i) { push @ref,"$1$2"; $k=$3; } $done=""; foreach $j (@ref) { next if ($done =~ $j); $done .= "$j "; $l = $j; $l =~ tr/A-Z/a-z/; $link=&make_link("$l"); $bib[$i] =~ s/$j/<A HREF="$link">$j<\/A>/g; } } print "<HTML>\n<TITLE>Citation for $urn</TITLE>\n"; print "<BODY>\n"; $link=&make_link("$scheme$value"); print "<H1><A HREF=\"$link\">$scheme$value</A>:</H1>\n"; foreach $i (@bib) { print "$i\n"; } print "</BODY>\n</HTML>\n"; } else { print "Status: 200 OK\r\n"; print "Content-type: text/html\r\n\r\n"; $bib[0] =~ s/^[0-9]*\s*//; $j=0; for ($i=0; $i<=$#bib; $i+=1) { $j += ($bib[$i] =~ s/, "/, <B>"/); $j += ($bib[$i] =~ s/",/"<\/B>,/); } for ($i=0;$i<=$#bib;$i+=1) {
$k=$bib[$i]; while ($k =~ /(fyi\s|std\s|rfc|bcp)([0-9]+)(.*)/i) { push @ref,"$1$2"; $k=$3; } $done=""; foreach $j (@ref) { next if ($done =~ $j); $done .= "$j "; $l = $j; $l =~ s/\s//g; $l =~ tr/A-Z/a-z/; $link=&make_link("$l"); $bib[$i] =~ s/$j/<A HREF="$link">$j<\/A>/g; } } print "<HTML>\n<TITLE>Citation for $urn</TITLE>\n"; print "<BODY>\n"; $link=&make_link("$scheme$value"); print "<H1><A HREF=\"$link\">$scheme$value</A>:</H1>\n"; foreach $i (@bib) { print "$i\n"; } print "</BODY>\n</HTML>\n"; } }
sub make_link { my($sc); my($inarg)=@_; ($sc=$1) if ($inarg =~ /([a-z]*)/); return "/$sc/$inarg.ps" if (-e "/ftp/$sc/$inarg.ps"); return "/$sc/$inarg.html" if (-e "/ftp/$sc/$inarg.html"); return "/$sc/$inarg.txt"; }
sub urn_error { my($code) = @_; #store failure code here...
サブurn_error {私の($コード)= @_;ここ#store障害コード...
print "Status: $code"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2C $code</title></head>\n"; print "<BODY>\n"; print "<h1>URN to URC resolution failed for the URN:</h1>\n"; print "<hr><h3>$urn</h3>\n"; print "</body>\n"; print "</html>\n"; exit;
};
};
sub resolveid { my($flag,@bib,$i,$k,$j,$count,@ref); my($l,$link, $hdr, $done); my($value) = @_; my($scheme) = "id";
open(INPUT, "$cite{$scheme}"); while (<INPUT>) { # # capture record # if ($flag == 1 || /^\s+\"/) { push @bib,$_; ($hdr = -1, $count = 0, $flag = 1) if (/^\s+\"/); $count++ if (/^\s+$/); } if ($count == 1) { $hdr = $#bib if ($hdr == -1); } if ($count == 2) { for ($i=0; $i<=$hdr; $i+=1) { if ($bib[$i] =~ /<(.*)>/) { $l = $1; if ($l eq "draft-$value.txt" || $l eq "draft-$value.ps") { print "Status: 200 OK\r\n"; print "Content-type: text/html\r\n\r\n"; print "<HTML>\n<TITLE>Citation for $urn</TITLE>\n"; print "<BODY>\n"; print "<a href=\"http://blackhole.vip.att.net/internet-drafts/$l\">$l</a>:\n"; print "<pre>\n"; foreach $i (@bib) { print "$i"; } print "</pre>\n"; print "</BODY>\n</HTML>\n"; exit; } } } $flag = 0; @bib = (); } } &urn_error("404 Not Found\n"); }
A.2 I2L
A.2 I2L
#!/usr/local/bin/perl
#!/ usr / local / bin / perlの
use strict;
厳密に使用します。
# # this is a URN 2 URL resolver for the ietf namespace #
##これは、IETF名前空間の#のためのURN 2 URLリゾルバです
my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/draft-" );
私(%のpathbase)=(RFC => "RFC / RFC"、FYI => "FYI / FYI"、STD => "STD / STD"、BCP => "BCP / BCP"、ID =>「インターネットドラフト/ draft-」);
my(%number2date) = ( 44 => "99mar", 43 => "98dec", 42 => "98aug", 41 => "98apr", 40 => "97dec", 39 => "97aug", 38 => "97apr", 37 => "96dec", 36 => "96jun", 35 => "96mar", 34 => "95dec", 33 => "95jul", 32 => "95apr", 31 => "94dec", 30 => "94jul", 29 => "94mar", 28 => "93nov", 27 => "93jul", 26 => "93mar", 25 => "92nov", 24 => "92jul", 23 => "92mar", 22 => "91nov", 21 => "91jul", 20 => "91mar", 19 => "90dec" );
私(%のnumber2date)=(44 => "99mar"、43 => "98dec"、42 => "98aug"、41 => "98apr"、40 =、38、39 => "97aug"> "97dec" => "97apr"、37 => "96dec"、36 => "96jun"、35 => "96mar"、34 => "95dec"、33 => "95jul"、32 => "95apr"、31 = > "94dec"、30 => "94jul"、29 => "94mar"、28 => "93nov"、27 => "93jul"、26 => "93mar"、25 => "92nov"、24 => "92jul"、23 => "92mar"、22 => "91nov"、21 => "91jul"、20 => "91mar"、19 =>) "90dec"。
my($wgpath) = "/ftp/ietf"; my($urn) = $ENV{'QUERY_STRING'}; my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header
(&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); (&resolverfc($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); (&resolvemtg($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); &urn_error("400 Bad Request\n");
sub resolvemtg { my($ietfnum, $sesnam) = @_; &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); my($date)=$number2date{$ietfnum}; my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; if (-f $link) { print "Status: 302 Moved temporarily\n"; print "Location: $link\n";
return; } my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; if (-f $link) { print "Status: 302 Moved temporarily\n"; print "Location: $link\n"; return; } &urn_error("404 Not Found\n"); }
sub end { my($inarg)=@_; return $inarg . "st" if ($inarg =~ /1$/); return $inarg . "nd" if ($inarg =~ /2$/); return $inarg . "rd" if ($inarg =~ /3$/); return $inarg . "th"; }
sub resolverfc { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($scheme, $value) = @_; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($txttry)="/ftp/$pathbase{$scheme}$value.txt"; my($pstry)="/ftp/$pathbase{$scheme}$value.ps"; my($htmltry)="/ftp/$pathbase{$scheme}$value.html"; MIME_SWITCH: { if ($accept =~ /application\/postscript/ && -f $pstry) { print "Status: 302 Moved temporarily\n"; print "Location: http://$host/$pathbase{$scheme}$value.ps\n\n"; last MIME_SWITCH; } if ($accept =~ /text\/html/ && -f $htmltry) { print "Status: 302 Moved temporarily0; print "Location: http://$host/$pathbase{$scheme}$value.html\n\n"; last MIME_SWITCH; } if ($accept =~ /\*\/\*|text\/plain/ && -f $txttry) { print "Status: 302 Moved temporarily\n"; print "Location: http://$host/$pathbase{$scheme}$value.txt\n\n"; last MIME_SWITCH; } &urn_error("404 Not Found\n"); } } sub urn_error { my($code) = @_; #store failure code here...
print "Status: $code"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2L $code</title></head>\n"; print "<BODY>\n"; print "<h1>URN to URL resolution failed for the URN:</h1>\n"; print "<hr><h3>$urn</h3>\n"; print "</body>\n"; print "</html>\n"; exit; }
sub resolveid { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($scheme) = "id"; my($value) = @_; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($txttry)="/ftp/$pathbase{$scheme}$value.txt"; my($pstry)="/ftp/$pathbase{$scheme}$value.ps"; my($htmltry)="/ftp/$pathbase{$scheme}$value.html"; MIME_SWITCH: { if ($accept =~ /application\/postscript/ && -f $pstry) { print "Status: 302 Moved temporarily\n"; print "Location: http://$host/$pathbase{$scheme}$value.ps\n\n"; last MIME_SWITCH; } if ($accept =~ /text\/html/ && -f $htmltry) { print "Status: 302 Moved temporarily\n"; print "Location: http://$host/$pathbase{$scheme}$value.html\n\n"; last MIME_SWITCH; } if ($accept =~ /\*\/\*|text\/plain/ && -f $txttry) { print "Status: 302 Moved temporarily\n"; print "Location: http://$host/$pathbase{$scheme}$value.txt\n\n"; last MIME_SWITCH; } &urn_error("404 Not Found\n"); } }
A.3 I2Ls
A.3 I2Ls
#!/usr/local/bin/perl
#!/ usr / local / bin / perlの
use strict;
厳密に使用します。
# # this is a URN 2 URLs resolver for the ietf namespace #
##これは、IETF名前空間の#のためのURN 2のURLリゾルバです
my(@urls);
私(@urls)。
my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/draft-" );
私(%のpathbase)=(RFC => "RFC / RFC"、FYI => "FYI / FYI"、STD => "STD / STD"、BCP => "BCP / BCP"、ID =>「インターネットドラフト/ draft-」);
my(%number2date) = ( 44 => "99mar", 43 => "98dec", 42 => "98aug", 41 => "98apr", 40 => "97dec", 39 => "97aug", 38 => "97apr", 37 => "96dec", 36 => "96jun", 35 => "96mar", 34 => "95dec", 33 => "95jul", 32 => "95apr", 31 => "94dec", 30 => "94jul", 29 => "94mar", 28 => "93nov", 27 => "93jul", 26 => "93mar", 25 => "92nov", 24 => "92jul", 23 => "92mar", 22 => "91nov", 21 => "91jul", 20 => "91mar", 19 => "90dec" );
私(%のnumber2date)=(44 => "99mar"、43 => "98dec"、42 => "98aug"、41 => "98apr"、40 =、38、39 => "97aug"> "97dec" => "97apr"、37 => "96dec"、36 => "96jun"、35 => "96mar"、34 => "95dec"、33 => "95jul"、32 => "95apr"、31 = > "94dec"、30 => "94jul"、29 => "94mar"、28 => "93nov"、27 => "93jul"、26 => "93mar"、25 => "92nov"、24 => "92jul"、23 => "92mar"、22 => "91nov"、21 => "91jul"、20 => "91mar"、19 =>) "90dec"。
my($wgpath) = "/ftp/ietf"; my($urn) = $ENV{'QUERY_STRING'}; my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header
(&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); &urn_error("400 Bad Request\n");
sub resolve2 { my($ietfnum, $sesnam) = @_; &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); my($date)=$number2date{$ietfnum}; my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; if (-f $link) {
$link=~s/^\/ftp\///; my($ftplink)="ftp://$host/$link"; my($httplink)="http://$host/$link"; my($glink)="gopher://$host:70/0/$link";
if ($accept =~ /text\/uri-list/) { #look for text/uri-list, otherwise text/html print "Status: 200 OK\n"; print "Content-type: text/uri-list\n\n\n"; print "#$urn\n"; print "$ftplink\n"; print "$httplink\n"; print "$glink\n"; } if ($accept =~ /\*\/\*|text\/html/) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ls</title></head>\n"; print "<BODY>\n"; print "<h1>URN $urn resolves to the following URLs:</h1>\n"; print "<hr><ul>\n"; print "<a href=\"$ftplink\">$ftplink</a>\n"; print "<a href=\"$httplink\">$httplink</a>\n"; print "<a href=\"$glink\">$glink</a>\n"; print "</UL>\n</body>\n</HTML>\n"; } return; } my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; if (-f $link) { $link=~s/^\/ftp\///; my($ftplink)="ftp://$host/$link"; my($httplink)="http://$host/$link"; my($glink)="gopher://$host:70/0/$link"; if ($accept =~ /text\/uri-list/) { #look for text/uri-list, otherwise text/html print "Status: 200 OK\n"; print "Content-type: text/uri-list\n\n\n"; print "#$urn\n"; print "$ftplink\n"; print "$httplink\n"; print "$glink\n"; } if ($accept =~ /\*\/\*|text\/html/) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ls</title></head>\n"; print "<BODY>\n";
print "<h1>URN $urn resolves to the following URLs:</h1>\n"; print "<hr><ul>\n"; print "<a href=\"$ftplink\">$ftplink</a>\n"; print "<a href=\"$httplink\">$httplink</a>\n"; print "<a href=\"$glink\">$glink</a>\n"; print "</UL>\n</body>\n</HTML>\n"; }
return; } &urn_error("404 Not Found\n"); }
sub resolve1 { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($scheme, $value) = @_; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($try)="/ftp/$pathbase{$scheme}$value.txt"; if (-f $try) { push(@urls, "http://$host/$pathbase{$scheme}$value.txt"); push(@urls, "ftp://$host/$pathbase{$scheme}$value.txt"); push(@urls, "gopher://$host:70/0/$pathbase{$scheme}$value.txt"); } $try="/ftp/$pathbase{$scheme}$value.ps"; if (-f $try) { push(@urls, "http://$host/$pathbase{$scheme}$value.ps"); push(@urls, "ftp://$host/$pathbase{$scheme}$value.ps"); push(@urls, "gopher://$host:70/0/$pathbase{$scheme}$value.ps"); } $try="/ftp/$pathbase{$scheme}$value.html"; if (-f $try) { push(@urls, "http://$host/$pathbase{$scheme}$value.html"); push(@urls, "ftp://$host/$pathbase{$scheme}$value.html"); }
&urn_error("404 Not Found\n") if ($#urls == -1);
&urn_error( "404が見つかりませんでした\ nを")IF($#のURL == -1)。
MIME_SWITCH: { if ($accept =~ /text\/uri-list/) { #look for text/uri-list, otherwise text/html print "Status: 200 OK\n"; print "Content-type: text/uri-list\n\n\n"; print "#$urn\n"; foreach $i (@urls) { print "$i\n"; } last MIME_SWITCH; } if ($accept =~ /\*\/\*|text\/html/) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ls</title></head>\n"; print "<BODY>\n"; print "<h1>URN $urn resolves to the following URLs:</h1>\n"; print "<hr><ul>\n"; foreach $i (@urls) { print "<LI><A HREF=\"$i\">$i</A>\n"; } print "</UL>\n</body>\n</HTML>\n"; last MIME_SWITCH; } } }
sub urn_error { my($code) = @_; #store failure code here...
サブurn_error {私の($コード)= @_;ここ#store障害コード...
print "Status: $code"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2L $code</title></head>\n"; print "<BODY>\n"; print "<h1>URN to URL resolution failed for the URN:</h1>\n"; print "<hr><h3>$urn</h3>\n"; print "</body>\n"; print "</html>\n"; exit; }
sub resolveid { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($value) = @_; my($scheme) = "id"; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($try)="/ftp/$pathbase{$scheme}$value.txt"; if (-f $try) { push(@urls, "http://$host/$pathbase{$scheme}$value.txt"); push(@urls, "ftp://$host/$pathbase{$scheme}$value.txt"); push(@urls, "gopher://$host:70/0/$pathbase{$scheme}$value.txt"); } $try="/ftp/$pathbase{$scheme}$value.ps"; if (-f $try) { push(@urls, "http://$host/$pathbase{$scheme}$value.ps");
push(@urls, "ftp://$host/$pathbase{$scheme}$value.ps"); push(@urls, "gopher://$host:70/0/$pathbase{$scheme}$value.ps"); } $try="/ftp/$pathbase{$scheme}$value.html"; if (-f $try) { push(@urls, "http://$host/$pathbase{$scheme}$value.html"); push(@urls, "ftp://$host/$pathbase{$scheme}$value.html"); }
&urn_error("404 Not Found\n") if ($#urls == -1);
&urn_error( "404が見つかりませんでした\ nを")IF($#のURL == -1)。
MIME_SWITCH: { if ($accept =~ /text\/uri-list/) { #look for text/uri-list, otherwise text/html print "Status: 200 OK\n"; print "Content-type: text/uri-list\n\n\n"; print "#$urn\n"; foreach $i (@urls) { print "$i\n"; } last MIME_SWITCH; } if ($accept =~ /\*\/\*|text\/html/) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ls</title></head>\n"; print "<BODY>\n"; print "<h1>URN $urn resolves to the following URLs:</h1>\n"; print "<hr><ul>\n"; foreach $i (@urls) { print "<LI><A HREF=\"$i\">$i</A>\n"; } print "</UL>\n</body>\n</HTML>\n"; last MIME_SWITCH; } } }
A.4 I2Ns
A.4 I2Ns
#!/usr/local/bin/perl
#!/ usr / local / bin / perlの
use strict;
厳密に使用します。
# # this is a URN 2 URNs resolver for the ietf namespace # my(%cite) = ( rfc => "/ftp/rfc/rfc-index.txt", fyi => "/ftp/fyi/fyi-index.txt", std => "/ftp/std/std-index.txt", bcp => "/ftp/rfc/bcp-index.txt" );
##これはURN 2つの壷IETF名前空間#私のためのリゾルバ(%は引用)=(RFC => "/ftp/rfc/rfc-index.txt"、FYI =>「/ FTP / FYI / FYIインデックスです。 TXT」、STD => "/ftp/std/std-index.txt"、BCP => ")" /ftp/rfc/bcp-index.txt。
my(%number2date) = ( 44 => "99mar", 43 => "98dec", 42 => "98aug", 41 => "98apr", 40 => "97dec", 39 => "97aug", 38 => "97apr", 37 => "96dec", 36 => "96jun", 35 => "96mar", 34 => "95dec", 33 => "95jul", 32 => "95apr", 31 => "94dec", 30 => "94jul", 29 => "94mar", 28 => "93nov", 27 => "93jul", 26 => "93mar", 25 => "92nov", 24 => "92jul", 23 => "92mar", 22 => "91nov", 21 => "91jul", 20 => "91mar", 19 => "90dec" );
私(%のnumber2date)=(44 => "99mar"、43 => "98dec"、42 => "98aug"、41 => "98apr"、40 =、38、39 => "97aug"> "97dec" => "97apr"、37 => "96dec"、36 => "96jun"、35 => "96mar"、34 => "95dec"、33 => "95jul"、32 => "95apr"、31 = > "94dec"、30 => "94jul"、29 => "94mar"、28 => "93nov"、27 => "93jul"、26 => "93mar"、25 => "92nov"、24 => "92jul"、23 => "92mar"、22 => "91nov"、21 => "91jul"、20 => "91mar"、19 =>) "90dec"。
my($wgpath) = "/ftp/ietf"; my($urn) = $ENV{'QUERY_STRING'}; my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs my($port) = $ENV={'SERVER_PORT'}; my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header
(&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); &urn_error("400 Bad Request\n");
sub resolve2 { my($ietfnum, $sesnam) = @_; &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); my($date)=$number2date{$ietfnum}; my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; if (-f $link) { if ($accept =~ /text\/uri-list/) { print "Status: 200 OK\n"; print "Content-type: text/uri-list\n\n\n"; print "#$urn\n"; return; } if ($accept =~ /\*\/\*|text]\/html/) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ns</title></head>\n"; print "<BODY>\n"; print "<h1>URN $urn resolves to the following URNs:</h1>\n"; print "<hr><ul>\n";
print "</UL>\n</body>\n</HTML>\n"; return; } } my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; if (-f $link) { if ($accept =~ /text\/uri-list/) { print "Status: 200 OK\n"; print "Content-type: text/uri-list\n\n\n"; print "#$urn\n"; return; } if ($accept =~ /\*\/\*|text\/html/) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ns</title></head>\n"; print "<BODY>\n"; print "<h1>URN $urn resolves to the following URNs:</h1>\n"; print "<hr><ul>\n"; print "</UL>\n</body>\n</HTML>\n"; return; } } &urn_error("404 Not Found\n"); }
sub end { my($inarg)=@_; return $inarg . "st" if ($inarg =~ /1$/); return $inarg . "nd" if ($inarg =~ /2$/); return $inarg . "rd" if ($inarg =~ /3$/); return $inarg . "th"; }
sub resolve1 { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($scheme, $value) = @_; $scheme =~ tr/A-Z/a-z/; if (!defined $cite{$scheme}) { &urn_error("404 Not Found\n"); }
$flag = 0; open(INPUT, "$cite{$scheme}"); while (<INPUT>) { $flag = 1 if (/^0*$value /); if ($flag == 1) {
last if (/^$/); chop; push @bib,$_; } }
$k=join " ",@bib; while ($k =~ /(\S*)\s*(fyi|std|rfc|bcp)\s*([0-9]+)(.*)/i) { $k=$4; $a=$2; $b=$3; if (($a ne $scheme || $b ne $value) && ($1 !~ /obso/i)){ $a =~ tr/A-Z/a-z/; $b =~ s/^0*//; push @ref,"urn:ietf:$a:$b"; } }
MIME_SWITCH: { if ($accept =~ /text\/uri-list/) { print "Status: 200 OK\n"; print "Content-type: text/uri-list\n\n\n"; print "#$urn\n"; foreach $i (@ref) { print "$i\n"; } last MIME_SWITCH; } if ($accept =~ /\*\/\*|text\/html/) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ns</title></head>\n"; print "<BODY>\n"; print "<h1>URN $urn resolves to the following URNs:</h1>\n"; print "<hr><ul>\n"; foreach $i (@ref) { print "<li>$i: Click to resolve using\n"; print "<a href=\"http://$host:$port/uri-res/I2C?$i\">I2C</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2L?$i\">I2L</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2Ls?$i\">I2Ls</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2R?$i\">I2R</a>,\n"; print "<a href=\"http://$host:$port/uri-res/I2Rs?$i\">I2Rs</a>\n"; } print "</UL>\n</body>\n</HTML>\n";
} } }
} } }
sub make_link { my($sc); my($inarg)=@_; ($sc=$1) if ($inarg =~ /([a-z]*)/); return "/$sc/$inarg.ps" if (-e "/ftp/$sc/$inarg.ps"); return "/$sc/$inarg.html" if (-e "/ftp/$sc/$inarg.html"); return "/$sc/$inarg.txt"; }
sub urn_error { my($code) = @_; #store failure code here...
サブurn_error {私の($コード)= @_;ここ#store障害コード...
print "Status: $code"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Ns $code</title></head>\n"; print "<BODY>\n"; print "<h1>URN to URN resolution failed for the URN:</h1>\n"; print "<hr><h3>$urn</h3>\n"; print "</body>\n"; print "</html>\n"; exit; };
A.5 I2R
A.5 I2R
#!/usr/local/bin/perl
#!/ usr / local / bin / perlの
use strict;
厳密に使用します。
# # this is a URN 2 resource resolver for the ietf namespace #
##これは、IETF名前空間の#のためのURN 2リソースリゾルバです
my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/draft-" );
私(%のpathbase)=(RFC => "RFC / RFC"、FYI => "FYI / FYI"、STD => "STD / STD"、BCP => "BCP / BCP"、ID =>「インターネットドラフト/ draft-」);
my(%number2date) = ( 44 => "99mar", 43 => "98dec", 42 => "98aug", 41 => "98apr",
私(%のnumber2date)=(44 => "99mar"、43 => "98dec"、42 => "98aug"、41 => "98apr"、
40 => "97dec", 39 => "97aug", 38 => "97apr", 37 => "96dec", 36 => "96jun", 35 => "96mar", 34 => "95dec", 33 => "95jul", 32 => "95apr", 31 => "94dec", 30 => "94jul", 29 => "94mar", 28 => "93nov", 27 => "93jul", 26 => "93mar", 25 => "92nov", 24 => "92jul", 23 => "92mar", 22 => "91nov", 21 => "91jul", 20 => "91mar", 19 => "90dec" );
40 => "97dec"、39 => "97aug"、38 => "97apr"、37 => "96dec"、36 => "96jun"、35 => "96mar"、34 => "95dec"、33 => "95jul"、32 => "95apr"、31 => "94dec"、30 => "94jul"、29 => "94mar"、28 => "93nov"、27 => "93jul"、26 = > "93mar"、25 => "92nov"、24 => "92jul"、23 => "92mar"、22 => "91nov"、21 => "91jul"、20 => "91mar"、19 => "90dec");
my($wgpath) = "/ftp/ietf"; my($urn) = $ENV{'QUERY_STRING'}; my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header
print "$urn\n"; (&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\S+)/i); (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); &urn_error("400 Bad Request\n");
sub resolve2 { my($ietfnum, $sesnam) = @_; &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); my($date)=$number2date{$ietfnum}; my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt"; if (-f $link) { print "Status: 200 OK\n"; print "Content-type: text/plain\n\n"; open(FILE, "$link"); while (<FILE>) { print $_; } close FILE; return; } my($link)="$wgpath/$date/$sesnam-minutes-$date.txt"; if (-f $link) { print "Status: 200 OK\n"; print "Content-type: text/plain\n\n"; open(FILE, "$link"); while (<FILE>) { print $_; } close FILE; return; } &urn_error("404 Not Found\n"); } sub end { my($inarg)=@_; return $inarg . "st" if ($inarg =~ /1$/); return $inarg . "nd" if ($inarg =~ /2$/); return $inarg . "rd" if ($inarg =~ /3$/); return $inarg . "th"; }
sub resolve1 { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($scheme, $value) = @_; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($txttry)="/ftp/$pathbase{$scheme}$value.txt"; my($pstry)="/ftp/$pathbase{$scheme}$value.ps"; my($htmltry)="/ftp/$pathbase{$scheme}$value.html"; MIME_SWITCH: { if ($accept =~ /application\/postscript/ && -f $pstry) { print "Status: 200 OK\n"; print "Content-type: application/postscript\n\n"; open(FILE, "$pstry"); while (<FILE>) { print $_; } close FILE; last MIME_SWITCH; } if ($accept =~ /text\/html/ && -f $htmltry) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n"; open(FILE, "$htmltry"); while (<FILE>) { print $_; } close FILE; last MIME_SWITCH; } if ($accept =~ /\*\/\*|text\/plain/ && -f $txttry) { print "Status: 200 OK\n"; print "Content-type: text/plain\n\n"; open(FILE, "$txttry"); while (<FILE>) { print $_; } close FILE; last MIME_SWITCH; }
&urn_error("404 Not Found\n"); } }
(「見つかりませんでした404 \に」)エラーを燃やします。 }}
sub resolveid { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link); my($scheme) = "id"; my($value) = @_; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($txttry)="/ftp/$pathbase{$scheme}$value.txt"; my($pstry)="/ftp/$pathbase{$scheme}$value.ps"; my($htmltry)="/ftp/$pathbase{$scheme}$value.html"; MIME_SWITCH: { if ($accept =~ /application\/postscript/ && -f $pstry) { print "Status: 200 OK\n"; print "Content-type: application/postscript\n\n"; open(FILE, "$pstry"); while (<FILE>) { print $_; } close FILE; last MIME_SWITCH; } if ($accept =~ /text\/html/ && -f $htmltry) { print "Status: 200 OK\n"; print "Content-type: text/html\n\n"; open(FILE, "$htmltry"); while (<FILE>) { print $_; } close FILE; last MIME_SWITCH; } if ($accept =~ /\*\/\*|text\/plain/ && -f $txttry) { print "Status: 200 OK\n"; print "Content-type: text/plain\n\n"; open(FILE, "$txttry"); while (<FILE>) { print $_; } close FILE; last MIME_SWITCH; } &urn_error("404 Not Found\n"); } } sub urn_error { my($code) = @_; #store failure code here...
print "Status: $code"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2R $code</title></head>\n"; print "<BODY>\n"; print "<h1>URN to URL resolution failed for the URN:</h1>\n"; print "<hr><h3>$urn</h3>\n"; print "</body>\n"; print "</html>\n"; exit; }
A.6 I2Rs
A.6 I2Rs
#!/usr/local/bin/perl
#!/ usr / local / bin / perlの
use strict;
厳密に使用します。
# # this is a URN 2 resources resolver for the ietf namespace #
##これは、IETF名前空間の#のためのURN 2リソースリゾルバです
my(@urls);
私(@urls)。
my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/draft-" );
私(%のpathbase)=(RFC => "RFC / RFC"、FYI => "FYI / FYI"、STD => "STD / STD"、BCP => "BCP / BCP"、ID =>「インターネットドラフト/ draft-」);
my(%number2date) = ( 44 => "99mar", 43 => "98dec", 42 => "98aug", 41 => "98apr", 40 => "97dec", 39 => "97aug", 38 => "97apr", 37 => "96dec", 36 => "96jun", 35 => "96mar", 34 => "95dec", 33 => "95jul", 32 => "95apr", 31 => "94dec", 30 => "94jul", 29 => "94mar", 28 => "93nov", 27 => "93jul", 26 => "93mar", 25 => "92nov", 24 => "92jul", 23 => "92mar", 22 => "91nov", 21 => "91jul", 20 => "91mar", 19 => "90dec" );
私(%のnumber2date)=(44 => "99mar"、43 => "98dec"、42 => "98aug"、41 => "98apr"、40 =、38、39 => "97aug"> "97dec" => "97apr"、37 => "96dec"、36 => "96jun"、35 => "96mar"、34 => "95dec"、33 => "95jul"、32 => "95apr"、31 = > "94dec"、30 => "94jul"、29 => "94mar"、28 => "93nov"、27 => "93jul"、26 => "93mar"、25 => "92nov"、24 => "92jul"、23 => "92mar"、22 => "91nov"、21 => "91jul"、20 => "91mar"、19 =>) "90dec"。
my($wgpath) = "/ftp/ietf"; my($urn) = $ENV{'QUERY_STRING'};
my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header
私の($ホスト)= $ ENV { 'SERVER_NAME'}; ftpのための私のホスト名を#get:URLの私の($受け入れる)= $ ENV { 'HTTP_ACCEPT'}; HTTPヘッダー:#これは、「同意する」です
(&resolveid($1), exit) if ($urn =~ /urn:ietf:id:(\s*)/i); (&resolve1($1, $2), exit) if ($urn =~ /urn:ietf:(\w*):(\d*)/i); (&resolve2($1, $2), exit) if ($urn =~ /urn:ietf:mtg:(\d*)-(\w*)/i); &urn_error("400 Bad Request\n");
sub resolve2 { my($ietfnum, $sesnam) = @_; my(@vers,$i); &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); my($date)=$number2date{$ietfnum}; my($link)="$wgpath/$sesnam/$sesnam-minutes-$date.txt";
if (-f $link) { push(@vers,$link); } $link="$wgpath/$date/$sesnam-minutes-$date.txt"; if (-f $link) { push(@vers,$link); } &urn_error("404 Not Found\n") if ($#vers==-1);
print "Status: 200 OK\n"; print "Content-type: multipart/alternative; boundary=endpart\n\n"; foreach $i (@vers) { print "--endpart\n"; if ($i =~ /html$/) { print "Content-Type: text/html\n\n"; } if ($i =~ /txt$/) { print "Content-Type: text/plain\n\n"; } if ($i =~ /ps$/) { print "Content-Type: application/postscript\n\n"; } open(FILE, "$i"); while (<FILE>) { print "$_"; } close FILE; } print "--endpart\n"; }
sub resolve1 { my($flag,@bib,$i,$k,$j,$done,@ref);
サブresolve1 {私の($フラグ、@よだれかけ、$ I、$ K、$ jを、$ refの@、行われます)。
my($l,$link,@vers); my($scheme, $value) = @_; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($try)="/ftp/$pathbase{$scheme}$value.txt"; if (-f $try) { push(@vers, $try); } $try="/ftp/$pathbase{$scheme}$value.ps"; if (-f $try) { push(@vers, $try); } $try="/ftp/$pathbase{$scheme}$value.html"; if (-f $try) { push(@vers, $try);
} print "Status: 200 OK\n"; print "Content-type: multipart/alternative; boundary=endpart\n\n"; foreach $i (@vers) { print "--endpart\n"; if ($i =~ /html$/) { print "Content-Type: text/html\n\n"; } if ($i =~ /txt$/) { print "Content-Type: text/plain\n\n"; } if ($i =~ /ps$/) { print "Content-Type: application/postscript\n\n"; } open(FILE, "$i"); while (<FILE>) { print "$_"; } close FILE; } print "--endpart\n"; }
sub resolveid { my($flag,@bib,$i,$k,$j,$done,@ref); my($l,$link,@vers); my($scheme) = "id"; my($value) = @_; $scheme =~ tr/A-Z/a-z/; &urn_error("404 Not Found\n")if (!defined $pathbase{$scheme}); my($try)="/ftp/$pathbase{$scheme}$value.txt"; if (-f $try) {
push(@vers, $try); } $try="/ftp/$pathbase{$scheme}$value.ps"; if (-f $try) { push(@vers, $try); } $try="/ftp/$pathbase{$scheme}$value.html"; if (-f $try) { push(@vers, $try); } print "Status: 200 OK\n"; print "Content-type: multipart/alternative; boundary=endpart\n\n"; foreach $i (@vers) { print "--endpart\n"; if ($i =~ /html$/) { print "Content-Type: text/html\n\n";
} if ($i =~ /txt$/) { print "Content-Type: text/plain\n\n"; } if ($i =~ /ps$/) { print "Content-Type: application/postscript\n\n"; } open(FILE, "$i"); while (<FILE>) { print "$_"; } close FILE; } print "--endpart\n"; } sub urn_error { my($code) = @_; #store failure code here...
print "Status: $code"; print "Content-type: text/html\n\n<HTML>\n"; print "<head><title>URN Resolution: I2Rs $code</title></head>\n"; print "<BODY>\n"; print "<h1>URN to URL resolution failed for the URN:</h1>\n"; print "<hr><h3>$urn</h3>\n"; print "</body>\n"; print "</html>\n"; exit; }
Full Copyright Statement
完全な著作権声明
Copyright (C) The Internet Society (1999). All Rights Reserved.
著作権(C)インターネット協会(1999)。全著作権所有。
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
この文書とその翻訳は、コピーして他の人に提供し、それ以外についてはコメントまたは派生物は、いかなる種類の制限もなく、全体的にまたは部分的に、準備コピーし、公表して配布することができることを説明したり、その実装を支援することができます、上記の著作権表示とこの段落は、すべてのそのようなコピーや派生物に含まれていることを条件とします。しかし、この文書自体は著作権のための手順はで定義されている場合には、インターネット標準を開発するために必要なものを除き、インターネットソサエティもしくは他のインターネット関連団体に著作権情報や参照を取り除くなど、どのような方法で変更されないかもしれませんインターネット標準化プロセスが続く、または英語以外の言語に翻訳するために、必要に応じなければなりません。
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
上記の制限は永久で、インターネット学会やその後継者や譲渡者によって取り消されることはありません。
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
この文書とここに含まれている情報は、基礎とインターネットソサエティおよびインターネットエンジニアリングタスクフォースはすべての保証を否認し、明示または黙示、その情報の利用がない任意の保証を含むがこれらに限定されない「として、」上に設けられています特定の目的への権利または商品性または適合性の黙示の保証を侵害します。
Acknowledgement
謝辞
Funding for the RFC Editor function is currently provided by the Internet Society.
RFC Editor機能のための基金は現在、インターネット協会によって提供されます。