RFC2648 日本語訳

2648 A URN Namespace for IETF Documents. R. Moats. August 1999. (Format: TXT=46826 bytes) (Status: INFORMATIONAL)
プログラムでの自動翻訳です。
英語原文

Network Working Group                                           R. Moats
Request for Comments: 2648                                          AT&T
Category: Informational                                      August 1999

Network Working Group R. Moats Request for Comments: 2648 AT&T Category: Informational August 1999

                   A URN Namespace for IETF Documents

A URN Namespace for IETF Documents

Status of this Memo

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.

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 Notice

   Copyright (C) The Internet Society (1999).  All Rights Reserved.

Copyright (C) The Internet Society (1999). All Rights Reserved.

Abstract

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.

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.

1. Introduction

1. Introduction

   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.

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.

   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.

Moats                        Informational                      [Page 1]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 1] RFC 2648 A URN Namespace for IETF Documents August 1999

      Registration Information:

Registration Information:

            Registration version number: 1
            Registration date: 1999-04-22

Registration version number: 1 Registration date: 1999-04-22

      Declared registrant of the namespace:

Declared registrant of the namespace:

            Ryan Moats
            jayhawk@att.com
            AT&T
            15621 Drexel Circle
            Omaha, NE 68135-2358

Ryan Moats jayhawk@att.com AT&T 15621 Drexel Circle Omaha, NE 68135-2358

      Declaration of structure:

Declaration of structure:

            The identifier has the following ABNF [2] specification:

The identifier has the following ABNF [2] specification:

            NSS = rfc-nss / fyi-nss / std-nss / bcp-nss /
                  draft-nss / mtg-nss / other-nss

NSS = rfc-nss / fyi-nss / std-nss / bcp-nss / draft-nss / mtg-nss / other-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 draft-nss = "id:" string mtg-nss = "mtg:" string other-nss = string ; beginning with a prefix other than one of those ; above for future expansion

            string = 1*(DIGIT / ALPHA / "-")

string = 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.

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.

      Relevant ancillary documentation:

Relevant ancillary documentation:

            Relevant documentation is in RFC 2648.

Relevant documentation is in RFC 2648.

Moats                        Informational                      [Page 2]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 2] RFC 2648 A URN Namespace for IETF Documents August 1999

      Identifier uniqueness considerations:

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.

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:

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.

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:

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.

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

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

Moats                        Informational                      [Page 3]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 3] RFC 2648 A URN Namespace for IETF Documents August 1999

            group or birds of a feather minutes.

group or birds of a feather minutes.

            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.

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.

      Process of identifier resolution:

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.

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:

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.

      Validation mechanism:

Validation mechanism:

            None additional to resolution specified

None additional to resolution specified

      Scope:

Scope:

            Global.

Global.

3. Examples

3. Examples

   The following are examples of URNs that a resolver for this namespace
   can resolve:

The following are examples of URNs that a resolver for this namespace can resolve:

         urn:ietf:rfc:2141
         urn:ietf:std:50
         urn:ietf:id:ietf-urn-ietf-06
         urn:ietf:mtg:41-urn

urn:ietf:rfc:2141 urn:ietf:std:50 urn:ietf:id:ietf-urn-ietf-06 urn:ietf:mtg:41-urn

Moats                        Informational                      [Page 4]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 4] RFC 2648 A URN Namespace for IETF Documents August 1999

4. Security Considerations

4. Security Considerations

   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.

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.

5. Acknowledgments

5. Acknowledgments

   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.

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.

6. References

6. References

   Request For Comments (RFC) and Internet Draft documents are available
   from numerous mirror sites.

Request For Comments (RFC) and Internet Draft documents are available from numerous mirror sites.

   [1]  Moats, R., "URN Syntax", RFC 2141, May 1997.

[1] Moats, R., "URN Syntax", RFC 2141, May 1997.

   [2]  Crocker, D. and P. Overell, "Augmented BNF for Syntax
        Specifications: ABNF", RFC 2234, November 1997.

[2] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997.

7. Author's Address

7. Author's Address

   Ryan Moats
   AT&T
   15621 Drexel Circle
   Omaha, NE 68135-2358
   USA

Ryan Moats AT&T 15621 Drexel Circle Omaha, NE 68135-2358 USA

   EMail:  jayhawk@att.com

EMail: jayhawk@att.com

Moats                        Informational                      [Page 5]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 5] RFC 2648 A URN Namespace for IETF Documents August 1999

Appendix A.  Example Resolution Scripts

Appendix A. Example Resolution Scripts

   The following scripts are examples that can be used for resolving
   URNs in this namespace.

The following scripts are examples that can be used for resolving 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) = (
  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(%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

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");

(&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};

sub resolvemtg { my($ietfnum, $sesnam) = @_; &urn_error("404 Not Found\n") if (!defined $number2date{$ietfnum}); my($date)=$number2date{$ietfnum};

Moats                        Informational                      [Page 6]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 6] RFC 2648 A URN Namespace for IETF Documents August 1999

  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");
}

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 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");
  }

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 /);

$flag = 0; open(INPUT, "$cite{$scheme}"); while (<INPUT>) { $flag = 1 if (/^0*$value /);

Moats                        Informational                      [Page 7]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 7] RFC 2648 A URN Namespace for IETF Documents August 1999

    if ($flag == 1) {
      last if (/^$/);
      chop;
      push @bib,$_;
    }
  }

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) {

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) {

Moats                        Informational                      [Page 8]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 8] RFC 2648 A URN Namespace for IETF Documents August 1999

      $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";
  }
}

$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 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...

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: 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;

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;

Moats                        Informational                      [Page 9]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 9] RFC 2648 A URN Namespace for IETF Documents August 1999

};

};

sub resolveid {
  my($flag,@bib,$i,$k,$j,$count,@ref);
  my($l,$link, $hdr, $done);
  my($value) = @_;
  my($scheme) = "id";

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");
}

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"); }

Moats                        Informational                     [Page 10]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 10] RFC 2648 A URN Namespace for IETF Documents August 1999

A.2 I2L

A.2 I2L

#!/usr/local/bin/perl

#!/usr/local/bin/perl

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) = (
  rfc => "rfc/rfc",
  fyi => "fyi/fyi",
  std => "std/std",
  bcp => "bcp/bcp",
  id => "internet-drafts/draft-"
);

my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/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" );

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

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");

(&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";

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";

Moats                        Informational                     [Page 11]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 11] RFC 2648 A URN Namespace for IETF Documents August 1999

    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");
}

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 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 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"); } }

Moats                        Informational                     [Page 12]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 12] RFC 2648 A URN Namespace for IETF Documents August 1999

sub urn_error {
  my($code) = @_; #store failure code here...

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;
}

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");
  }
}

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"); } }

Moats                        Informational                     [Page 13]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 13] RFC 2648 A URN Namespace for IETF Documents August 1999

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) = (
  rfc => "rfc/rfc",
  fyi => "fyi/fyi",
  std => "std/std",
  bcp => "bcp/bcp",
  id => "internet-drafts/draft-"
);

my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/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" );

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

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");

(&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) {

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) {

Moats                        Informational                     [Page 14]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 14] RFC 2648 A URN Namespace for IETF Documents August 1999

    $link=~s/^\/ftp\///;
    my($ftplink)="ftp://$host/$link";
    my($httplink)="http://$host/$link";
    my($glink)="gopher://$host:70/0/$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";

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";

Moats                        Informational                     [Page 15]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 15] RFC 2648 A URN Namespace for IETF Documents August 1999

      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";
    }

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");
}

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");
  }

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 Not Found\n") if ($#urls == -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";
      }

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"; }

Moats                        Informational                     [Page 16]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 16] RFC 2648 A URN Namespace for IETF Documents August 1999

      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;
    }
  }
}

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...

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;
}

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");

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");

Moats                        Informational                     [Page 17]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 17] RFC 2648 A URN Namespace for IETF Documents August 1999

    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");
  }

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 Not Found\n") if ($#urls == -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;
    }
  }
}

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;

use strict;

#
# this is a URN 2 URNs resolver for the ietf namespace
#

# # this is a URN 2 URNs resolver for the ietf namespace #

Moats                        Informational                     [Page 18]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 18] RFC 2648 A URN Namespace for IETF Documents August 1999

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"
);

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" );

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(%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($port) = $ENV={'SERVER_PORT'};
my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header

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");

(&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";

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";

Moats                        Informational                     [Page 19]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 19] RFC 2648 A URN Namespace for IETF Documents August 1999

      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");
}

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 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");
  }

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) {

$flag = 0; open(INPUT, "$cite{$scheme}"); while (<INPUT>) { $flag = 1 if (/^0*$value /); if ($flag == 1) {

Moats                        Informational                     [Page 20]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 20] RFC 2648 A URN Namespace for IETF Documents August 1999

      last if (/^$/);
      chop;
      push @bib,$_;
    }
  }

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";
    }
  }

$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";

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";

Moats                        Informational                     [Page 21]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 21] RFC 2648 A URN Namespace for IETF Documents August 1999

  }
}
}

} } }

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 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...

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: 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;
};

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;

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) = (
  rfc => "rfc/rfc",
  fyi => "fyi/fyi",
  std => "std/std",
  bcp => "bcp/bcp",
  id => "internet-drafts/draft-"
);

my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/draft-" );

my(%number2date) = (
  44 => "99mar",
  43 => "98dec", 42 => "98aug", 41 => "98apr",

my(%number2date) = ( 44 => "99mar", 43 => "98dec", 42 => "98aug", 41 => "98apr",

Moats                        Informational                     [Page 22]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 22] RFC 2648 A URN Namespace for IETF Documents August 1999

  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

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");

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 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"); }

Moats                        Informational                     [Page 23]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 23] RFC 2648 A URN Namespace for IETF Documents August 1999

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 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;
    }

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; }

Moats                        Informational                     [Page 24]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 24] RFC 2648 A URN Namespace for IETF Documents August 1999

    &urn_error("404 Not Found\n");
  }
}

&urn_error("404 Not Found\n"); } }

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 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"); } }

Moats                        Informational                     [Page 25]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 25] RFC 2648 A URN Namespace for IETF Documents August 1999

sub urn_error {
  my($code) = @_; #store failure code here...

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;
}

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;

use strict;

#
# 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) = (
  rfc => "rfc/rfc",
  fyi => "fyi/fyi",
  std => "std/std",
  bcp => "bcp/bcp",
  id => "internet-drafts/draft-"
);

my(%pathbase) = ( rfc => "rfc/rfc", fyi => "fyi/fyi", std => "std/std", bcp => "bcp/bcp", id => "internet-drafts/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" );

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($wgpath) = "/ftp/ietf"; my($urn) = $ENV{'QUERY_STRING'};

Moats                        Informational                     [Page 26]

RFC 2648           A URN Namespace for IETF Documents        August 1999

Moats Informational [Page 26] RFC 2648 A URN Namespace for IETF Documents August 1999

my($host) = $ENV{'SERVER_NAME'}; #get my host name for ftp: URLs
my($accept) = $ENV{'HTTP_ACCEPT'}; #this is the "Accept:" HTTP header

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");

(resolveid(1ドル)、出てください) ($つぼ=~/つぼ:ietf:イド: (\s*)/i)であるなら。 (resolve1(1ドルと、2ドル)、出てください) ($つぼの=~/つぼ: ietf: (\w*): (\d*)/i)であるなら。 (resolve2(1ドルと、2ドル)、出てください) ($つぼは~/つぼ:ietf:mtgと等しいです: (\d*)--(\w*)/i)なら。 つぼ_誤り(「悪い400要求円の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";

「潜水艦resolve2、私の($ietfnum、$sesnam)=@_;、私、(@vers、$i)、およびつぼ_誤り(「404によって、\がnであることがわからなかった」)、($がietfnumする$number2date) 私の; $がietfnumする私の($日付)=$number2date;($リンク)=」 $wgpath/$sesnam/$sesnam数分-$の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);

「(-f$リンク)である、プッシュ(@vers、$はリンクされる);、$リンク=」 $wgpath/$日付/$sesnam数分-$date.txt、」、。 (-f$リンク)である、プッシュ(@vers、$はリンクされる);、つぼ_誤り、(「404によって、\がnであることがわからなかった」) ($#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";
}

印刷、「状態:」 「200OK円n」。 印刷、「文書内容:」 複合/代替手段。 「境界=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、私、($旗、@bib、$i、$k、$j、行われた$、@ref)。

Moats                        Informational                     [Page 27]

RFC 2648           A URN Namespace for IETF Documents        August 1999

IETFのためのつぼの名前空間あたり情報[27ページ]のRFC2648が1999年8月に記録する堀

  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);

私、($l、$リンク、@vers)。 私の($計画、$値)=@_。 $計画はa~A tr/Z/z/と等しいです。 つぼ_誤り、(「404によって、\がnであることがわからなかった」) (定義された$pathbase$計画)であるなら。 私の($は試みます)=「/ftp/$pathbase$計画$value.txt」。 (-f$トライ) プッシュ(@vers、$は試みる); $トライ=「/ftp/$pathbase$計画$value.ps」。 (-f$トライ) プッシュ(@vers、$は試みる); $トライ=「/ftp/$pathbase$計画$value.html」。 (-f$トライ)である、押してください(@vers、$は試みます)。

  }
  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";
}

印刷、「状態:」 「200OK円n」。 印刷、「文書内容:」 複合/代替手段。 「境界=endpart\n\n」。 foreach$i(@vers)、印刷、「--endpart\n」。 印刷..コンテントタイプ..テキスト..印刷..コンテントタイプ..テキスト..明瞭..印刷..コンテントタイプ..アプリケーション..追伸..開く while (<FILE>) { print "$_"; } close FILE; 印刷、「--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) {

潜水艦..旗..リンク..計画..イド..値..計画..等しい..つぼ..誤り..見つける..定義..計画..トライ..計画..トライ

Moats                        Informational                     [Page 28]

RFC 2648           A URN Namespace for IETF Documents        August 1999

IETFのためのつぼの名前空間あたり情報[28ページ]のRFC2648が1999年8月に記録する堀

      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";

押してください(@vers、$は試みます)。 } $は=「/ftp/$pathbase$計画$value.ps」を試みます。 (-f$トライ)である、押してください(@vers、$は試みます)。 } $は=「/ftp/$pathbase$計画$value.html」を試みます。 (-f$トライ)である、押してください(@vers、$は試みます)。 印刷、「状態:」 「200OK円n」。 印刷、「文書内容:」 複合/代替手段。 「境界=endpart\n\n」。 foreach$i(@vers)、印刷、「--endpart\n」。 (~/htmlな$i=$/)である、「コンテントタイプ: テキスト/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...

(~/txtな$i=$/)である、印刷、「コンテントタイプ:」 「テキスト/明瞭な\n\n」。 (~/ps$i=$/)である、印刷、「コンテントタイプ:」 「アプリケーション/追伸\n\n」。 「開いている、(ファイル、」、$i」)、。 while (<FILE>) { print "$_"; FILEを閉じてください。 印刷、「--endpart\n」。 潜水艦つぼ_誤り、私の($コード)=@_。 #失敗コードをここに格納してください…

  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;
}

印刷、「状態:」 「$コード」。 印刷、「文書内容:」 「テキスト/html\n円n<HTML>\n」。 印刷してください。「<は><タイトル>つぼの解決を導きます」。 「I2Rs$コード</タイトル></ヘッド>\n」。 「<ボディー>\n」を印刷してください。 「URN: </h1>\nで失敗されたURL解決への<h1>URN」を印刷してください。 印刷、「<時間、><h3>$つぼの</h3>\n」。 「</ボディー>\n」を印刷してください。 「</html>\n」を印刷してください。 出てください。 }

Moats                        Informational                     [Page 29]

RFC 2648           A URN Namespace for IETF Documents        August 1999

IETFのためのつぼの名前空間あたり情報[29ページ]のRFC2648が1999年8月に記録する堀

Full Copyright Statement

完全な著作権宣言文

   Copyright (C) The Internet Society (1999).  All Rights Reserved.

Copyright(C)インターネット協会(1999)。 All rights reserved。

   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.

それに関するこのドキュメントと翻訳は、コピーして、それが批評するか、またはそうでなければわかる他のもの、および派生している作品に提供するか、または準備されているかもしれなくて、コピーされて、発行されて、全体か一部広げられた実現を助けるかもしれません、どんな種類の制限なしでも、上の版権情報とこのパラグラフがそのようなすべてのコピーと派生している作品の上に含まれていれば。 しかしながら、このドキュメント自体は何らかの方法で変更されないかもしれません、インターネット協会か他のインターネット組織の版権情報か参照を取り除くのなどように、それを英語以外の言語に翻訳するのが著作権のための手順がインターネットStandardsの過程で定義したどのケースに従わなければならないか、必要に応じてさもなければ、インターネット標準を開発する目的に必要であるのを除いて。

   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機能のための基金は現在、インターネット協会によって提供されます。

Moats                        Informational                     [Page 30]

モウツInformationalです。[30ページ]

一覧

 RFC 1〜100  RFC 1401〜1500  RFC 2801〜2900  RFC 4201〜4300 
 RFC 101〜200  RFC 1501〜1600  RFC 2901〜3000  RFC 4301〜4400 
 RFC 201〜300  RFC 1601〜1700  RFC 3001〜3100  RFC 4401〜4500 
 RFC 301〜400  RFC 1701〜1800  RFC 3101〜3200  RFC 4501〜4600 
 RFC 401〜500  RFC 1801〜1900  RFC 3201〜3300  RFC 4601〜4700 
 RFC 501〜600  RFC 1901〜2000  RFC 3301〜3400  RFC 4701〜4800 
 RFC 601〜700  RFC 2001〜2100  RFC 3401〜3500  RFC 4801〜4900 
 RFC 701〜800  RFC 2101〜2200  RFC 3501〜3600  RFC 4901〜5000 
 RFC 801〜900  RFC 2201〜2300  RFC 3601〜3700  RFC 5001〜5100 
 RFC 901〜1000  RFC 2301〜2400  RFC 3701〜3800  RFC 5101〜5200 
 RFC 1001〜1100  RFC 2401〜2500  RFC 3801〜3900  RFC 5201〜5300 
 RFC 1101〜1200  RFC 2501〜2600  RFC 3901〜4000  RFC 5301〜5400 
 RFC 1201〜1300  RFC 2601〜2700  RFC 4001〜4100  RFC 5401〜5500 
 RFC 1301〜1400  RFC 2701〜2800  RFC 4101〜4200 

スポンサーリンク

SQLiteの特徴

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る