RFC 615

Proposed Network Standard Data Pathname syntax

πŸ“… published March 1974, from ietf

RFC 615, Proposed Network Standard Data Pathname Syntax πŸŽ€

Network Working Group · D. Crocker (UCLA-NMC) · MAR 74 · NIC #21531 ✨

The header doesn't list anything it obsoletes or updates, so there's no drama there. πŸ’… This one is a proposal, so it's basically D. Crocker floating an idea and asking everyone to weigh in. πŸ¦‹


The Big Idea πŸ’–

okay so there's been an increasing call for a Network Standard Data Pathname (NSDP). Basically a standard way to point at a specific spot where a collection of bits lives somewhere on the Network. 🌸

The reasons for a standard (or virtual anything) have been talked about at length elsewhere, so I'm not going to rehash them here. πŸ™ˆ Instead, the author only wants to propose a standardized SYNTAX for writing pathnames. This is useful for three groups of people:

  • users who don't know a site well, or who use lots of different sites and don't want to memorize each site's quirks 🧚
  • programs that access data at several other sites πŸ€–
  • documentation πŸ“š

The syntax lets you specify the network, host, peripheral device, directory, file, type, and site-specific fields. Adding more fields later is expected to be quite simple. ✨


The BNF πŸ“

Here's the grammar, bestie. 🫢

   <NSDP> ::= % <bulk> <cr><lf>

   <bulk> ::= <field> / <field> <bulk>

   <field> ::= <key> <L-delim> <name> <R-delim>

   <key> ::= NETWORK / HOST / PERIPHERAL/ DIRECTORY /
             FILE / TYPE / SITEPARM / N / H / P / D / F /
             T / S

<L-delim> ::= any printable character that is not in the
              succeeding <name> field and that is
              acceptable to the object site: For visual
              aesthetics and to facilitate human parsing,
              anytime <L-delim> is a left-bracket
              character (<, [, (, _), <R-delim> must be
              the complementary right-bracket character
              (>, ], ), |).

<name> ::=    any sequence of characters acceptable to the
              object site. This is the actual data field
              with the file, directory, device (or
              whatever) name.

<R-delim> ::= Either 1) the same character as <L-delim> or
              2) if the <L-delim> character is a
              left-bracket character (<, [, (, _) then its
              complementary right-bracket (>, ], ), |).

<cr> ::=      carriage-return

<lf> ::=      line-feed

More Details, Please πŸ”₯

The syntax lets <name> fields be an arbitrary number of rs long. πŸ€·β€β™€οΈ Case doesn't matter to the syntax itself, though some sites will care about case inside <name> fields. πŸ’…

<key> tells you what part of the pathname the next <name> is going to refer to. The single-character keys are just abbreviations for the full-word keys. πŸ¦‹

The <field>s are order dependent, but defaulted ones can be left out. The order is the one shown for <key>s, so: Network, Host, ..: Siteparm. πŸ‘‘

Fields can be repeated when the object site is fine with it, so you can have multiple Directory fields and so on. 🌈

Whether a combination of <field>s is valid is totally up to the site. For example, if a site will accept it, an NSDP with a Host field and nothing else is allowed. πŸ’€

<delim> is used to mark the beginning and end of the <name> field. ✨


Explaining the Keys 🧚

       NETWORK or N:   Currently, only ARPA is defined.

       HOST or H:      Reference to host, by official name or
                       nickname or number: The default radix is
                       ten; a numeric string ending with "H"
                       indicates hexadecimal, "O"(oh) indicates
                       octal, and (gratuitously) "D" indicates
                       decimal:

      PERIPHERAL or P: Peripheral device being referred to:

      DIRECTORY or D:  Name of a directory which contains a
                       pointer to the entity (directory or
                       filename) specified in the following
                       <field>:

      FILE or F:       Basic name of the file or data set:

      TYPE or T:       Optional modifier to filename: (Tenex
                       calls it the extension.)

      SITEPARM or S:   A parameter, such as an access
                       specification or version number, peculiar
                       to the object site. The content of the
                       <name> field must serve to identify what
                       Siteparm is involved. Each site will be
                       responsible for defining the syntax of
                       Siteparm <name>s it will accept.

Reserved PERIPHERAL Names πŸ“

These are the reserved peripheral <name>s. Stan-worthy list, honestly. 🫢

      DISK or DSK:     Immediately accessible, direct-access
                       storage.

      ONLINE or ONL:    Whatever immediately-accessible (measured
                        in fractions of a second) storage the
                        user accesses by default; usually disk:

      TAPE or TAP:      Industry-compatible magnetic tape:

      TAPE7 or TP7:     7-Track industry compatible tape:

      TAPE9 or TP9:     9-Track industry compatible tape:

      DECTAPE or DEC:   DEC Tape.

      OFFLINE or OFF:   Any tertiary storage; usually tape,
                        though "devices" like the Datacomputer
                        are permissible: The user should expect
                        to wait minutes or hours before being
                        able to access OFFLINE files:

      PRINTER or PTR:   Any available line-printer:

      DOCPRINTER or DOC:Upper-lower case line printer, preferably
                        with 8 1/2" X 11" unlined paper.

      PAPER or PAP:     Paper tape.

      PUNCH or PUN:     Standard 8O-column card punch.

      READER or RDR:    Standard 80-column card reader:

      OPERATOR or OPR:  System Operator's console.

      CONSULTANT or CON: On-line consultant.

Defaults 🌸

Defaults are usually context dependent, so the author offers these as guidelines only πŸ’…:

      Network:    ARPA

      Host:       The host interpreting the NVP

      Peripheral: ONLINE (DISK)

      Directory:  The user's current "working" directory,
                  usually set by the logon process:

      Filename:    None.

      Type:        None.

      Siteparm:     None.

General Comments πŸ’œ

The only field that has to be checked against any host's current syntax is the escape-to-NVP field (the per-cent sign as the first character of a pathname specification). It isn't currently known to conflict with any host's syntax. πŸ”₯

The exclamation mark (!) is the only other character that seems permissible, assuming it should be a graphic. Using it would cause minor problems at Multics. But more importantly, as a graphic it's too similar to the numeral "1". πŸ™ˆ

The syntax is meant to be adequate for all hosts, so any given part of it might be inappropriate for a given host. 🧚

A site is expected to permit specifications in a given field if and only if that site already has a way of accepting the same information. πŸ‘‘

The author believes any changes to the syntax will be graceful additions rather than a wholesale redesign, so they can be put off for a while. For now, any undefined attributes must be specified in a Siteparm field. ✨

Version, Access protection, and Accounting, plus other kinds of info, might be better as standard <key>s instead of being buried as Siteparms. The author expects the next version of the NSDP Syntax specification to include them as <key>s, but wants to wait for community comments first. πŸ¦‹

The syntax doesn't currently allow addressing any collection of bits smaller than a file. This could be fixed by adding PAGE, BYTE, and other <key>s, but again, the author would like to collect some comments first. 🌈


Disclaimer πŸ™ˆ

A pathname written in the proposed syntax is pretty easy to type but kinda ugly to read. So, at the cost of design cleanliness, the <L-delim>/<R-delim> syntax was modified to try to fix this somewhat. As you'll see below, it's only partially successful. πŸ’€

The first draft used a mix of Tenex and Multics conventions, like this: (Network)[Host]Peripheral:Directory>Filename:Type;Siteparm It looked nicer and was generally quicker to type, but it lacks extensibility. For example, adding Version number or Access protection as standard fields would be difficult. 😭

It's suggested that human interfaces be built to translate to and from NSDP syntax and the user's standard environment. 🫢


Sample Pathnames πŸŽ€

Here are some examples, iykyk. 🧚

%H[ISI]D<DCROCKER>F(MESSAGE)T/TXT/S(P77O4O4)<cr><lf>

This refers to my protected message file at ISI (<DCROCKER>MESSAGE:TXT;P77O4O4). πŸ”₯

%H/OFFICE-l/D>JOURNAL>F<l8659>T.NLS.<cr><lf>

This refers to NIC Journal document #18659 (Tenex file <JOURNAL>l8659:NLS). πŸ“š

%H/65/D.ARP061.D.LAD:F.DOCUMENT.<cr><lf>

This refers to a file ARPO6l:LAD.DOCUMENT at UCLA-CCN. Notice the use of multiple Directory fields! 🌈

%H[540]D//D>udd>D>Comp=net>D>Map>F(Mail)<cr><lf>

This refers to the file CompNet>Map>Mail at Mit-Multics. Note that the initial NSPD Directory <name> field is empty. That's how Multics likes to start at the top of its directory structure. πŸ‘‘


Thank Yous πŸ’–

Big thanks to Jon Postel, Vint Cerf, Jim White, Charlie Kline, Ken Pogran, Jerry Burchfiel, and Tom Boynton for their suggestions. You're all iconic. 🫢✨

πŸ“¦ where this page comes from