INTERNET-DRAFT                                               J. Boynton
<draft-boynton-uol-04.txt>                          Produx House, Corp.
Expires six months from -->                             5 August,  2001

                   Uniform Object Locator -- UOL


Status of This Memo

   This document is an Internet-Draft and is in full conformance
   with all provisions of Section 10 of RFC2026.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as
   Internet-Drafts.

   Internet-Drafts are draft documents valid for a maximum of six
   months and may be updated, replaced, or obsoleted by other
   documents at any time.  It is inappropriate to use Internet-
   Drafts as reference material or to cite them other than as
   "work in progress."

   The list of current Internet-Drafts can be accessed at
   http//www.ietf.org/ietf/1id-abstracts.txt

   The list of Internet-Draft Shadow Directories can be accessed at
   http//www.ietf.org/shadow.html.

Abstract

   A Uniform Object Locator (UOL) provides an architecture neutral
   mechanism for dynamic creation of unique, human readable identifiers
   for object oriented and relational data.  UOL is designed to meet
   the recommendations for URI queries laid out in "Uniform Resource
   Identifiers (URI) Generic Syntax" [RFC2396].

   This document defines syntax and semantics of UOL, including both
   absolute and relative forms, and guidelines for their use; it
   revises features, definitions, and examples, given in "draft-
   boynton-uol-03" and updates the scheme to provide additional
   functionality.















Boynton                 Expires February 2002                  [page 1]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

Table of Contents

   1 Introduction
     1.1 Purpose
     1.2 General Description
     1.3 Terminology
   2 UOL Syntactic Components
     2.1 Path Components
       2.1.1 Authority
       2.1.2 Object Constructor
       2.1.3 Object Name
     2.2 Absolute and Relative
     2.3 Comment Marker
   3 Path Elements
     3.1 Directory
     3.2 Attribute
     3.3 Object
     3.4 Container
       3.4.1  Table Container
       3.4.2  List Container
     3.5 Name
   4 Name Substitution
     4.1 Wild Cards
     4.2 Index Names
     4.3 Default Name
   5 Reserved Attributes and Parameters
   6 Example UOL
     6.1 HTML Table
     6.2 Relational Database
   7 XML, XPath, and UOL
   8 References
   9 Author's Address (send comments)

1  Introduction

   The UOL concept uses the logical location and relationship of data
   as a base for generating unique identifiers.  Once mapped to a UOL
   id, data can be manipulated in memory by conventional programming
   tools and algorithms such as: hash tables, stacks, dynamic arrays
   etc..

   The practical benefit of this approach is that an application can
   deconstruct the UOL, as needed, to derive additional information
   about the data source; even if such logic was not anticipated during
   the initial design process.  Thus allowing programs to achieve many
   of the benefits of Object Oriented design without regard to
   application environment.

1.1  Purpose

   The Uniform Object Locator (UOL) scheme is designed to encapsulate
   the location and relational context of data into a single unique
   identifier.  This draft defines the hierarchical structure UOL and
   proposes relative forms of UOL for simplified concatenation and

Boynton                 Expires February 2002                  [page 2]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

   efficient serialization of UOL within a data stream.

1.3  General Description

   The UOL is constructed from a hierarchical list of elements in
   similar fashion to a URL path component; with the '/' forward slash
   as the delimiter for directory elements.  The lower-most directory
   element may contain a single attribute delimited by the commercial
   "at" sign "@".  A double slash "//" is used to define an authority
   element.

   UOL maps a data structure by providing two separate components that
   define strings of related hierarchical elements. The two components
   are separated by a '#' (crosshatch), and divide the UOL into
   re-usable segments; an object constructor and object name.  When
   used together, the two segments form a unique all-purpose
   identifier.

1.2  Terminology

   For clarity, the specific role of elements within the UOL are
   defined below.

   element
      A single, un-delimited, string of characters.

   directory
      A typical hierarchical string of elements delimited by a '/'
      (forward slash).

   attribute
      An element descending from a directory that terminates a
      constructor path.

   schema
      For this draft, schema is a subset of nodes, directories, or
      attributes, defined by a schema, DTD(Document Type Definition),
      or class definition.

   object
      A collection of directories and/or attributes defined by a
      schema. An object can be visualized as a re-usable tree of nodes
      descending from a single directory.


   container
      A branching node that extends an object and servers as the parent
      component to one or more named child objects.

   constructor
      A directory path descending from an authority component and
      terminating with a single attribute; where no attribute is given,
      the path itself.


Boynton                 Expires February 2002                  [page 3]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

   object name
      A hierarchical collection of dot "." delimited elements that,
      when used together, provide the full name for a UOL constructor.

   name element
      An individual element within an object name.  Its value is mapped
      to an object element within a constructor.

   top level
      The highest node, of a given type, within a hierarchy.

2. UOL Syntactic Components

   UOL characteristics are derived from widely implemented URL syntax
   and semantics.  A UOL consists of a scheme, authority, constructor
   and name fragment.  UOL may also be appended to a URI as a query
   component; [RFC2396].  The UOL, itself, does not define a query
   component.

   <scheme><authority><constructor>#<name>

   Where used as a query to a URL, the authority and path component of
   the URL comprise the authority for the UOL

   <scheme><authority-path-component>?<constructor>#<name>

2.1  Path Components

2.1.1  Authority

   The authority component defines a root directory for resolving a UOL
   path to an absolute form.  It may be a file, URL, or any name that
   identifies the resource being accessed.  All elements within the UOL
   are bound by the context of the authority and may only resolve to
   elements that descend from the authority.

2.1.2  Constructor

   The constructor component maps the relationship of objects,
   directories, and attributes through the use of a path metaphor.  In
   most cases, the constructor does not map the actual location of
   data.  Instead, the constructor is used as a pattern for identifying
   the relationships between an object and its various elements.  The
   constructor is composed of directory elements and is terminated by a
   single attribute.

2.1.3 Name

   The name component is comprised of name elements that are mapped to
   object nodes within the constructor.  Name elements are appended,
   from left-to-right, corresponding to the object element each
   identifies.

   The constructor and name component are separated by a crosshatch

Boynton                 Expires February 2002                  [page 4]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

   "#".  Name elements are delimited by a dot ".".

2.2  Absolute and Relative

   A UOL can be expressed in absolute and relative forms.  An absolute
   UOL will resolve to, or contain, a top level element that is
   preceded by two forward slashes "//" (the authority).

   For directory and attribute elements descending from the authority,
   UOLs  beginning with "..", ".", or "/", are resolved in a manner
   consistent with the behavior for URI path components in Section 5.2
   [RFC2396].  The prefix, itself, is not considered an element of the
   UOL path.

   UOL provides two switches that can be appended to the above
   components; dollar sign "$" and tilde "~".  The switches limit
   parsing to object and container elements respectively.  When used,
   the switches have the effect of masking trivial elements within UOL
   constructor.

   The following components are defined for resolving a partial UOL to:

    "/"   = AUTHORITY

    "."   = the current DIRECTORY

    ".."  = the next higher DIRECTORY.
          Combinations of this component will resolve to higher
          directory nodes but will not resolve above the authority.

    "$"   = the top level OBJECT

    ".$"  = the current OBJECT.

    "..$" = the parent OBJECT.
          Combinations of this component will resolve to higher object
          elements but will not resolve above the top level object
          element (i.e. it will not resolve to the authority).

    "~"   = the top level CONTAINER

    ".~"  = the current CONTAINER.

    "..~" = the parent CONTAINER.
          Combinations of this component will resolve to higher
          container elements but will not resolve above the top level
          container element.

   In each case, the elements above should be followed by a "path
   delimiter"; the forward slash "/" for directories and the commercial
   at sign "@" for attributes.




Boynton                 Expires February 2002                  [page 5]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

   Rules for parsing relative components:

   Given that the "." dot character is used to identify object elements
   as well as the relative components.  The following tests are used to
   disambiguate the two uses.

   1) if "." is followed by a path delimiter, the element is relative.

   2) if "." is followed by a switch (dollar sign "$" or tilde "~") and
      the switch is followed by a path delimiter, the element is
      relative.

   3) if the "." dot is followed by any character other than a path
      delimiter and the result of test two is false, the element is an
      object.

2.3 Comment Marker

   The UOL scheme reserves the exclamation point character "!" for
   marking the UOL as a references to a "comment" value.  The comment
   provides user information regarding the data.  It is not intended to
   provide machine level implementation instructions.

   The marker is reserved for use as a UOL prefix.  Its meaning
   modifies the entire relative or absolute UOL to which it is applied.
   A Marked UOL must not have white space between the marker and the
   UOL itself.

   example
     "!//authority/.object@att" = comment for att

3.  Path Elements

3.1  Directory

   A directory element is a generic element used to organize a UOL
   constructor into a logical hierarchical path.  Its usage is similar
   to its counter-part in an ordinary file system.  Object and
   container elements, discussed later, are both directory elements.

   In relative forms of UOL, directory references must not be
   ambiguous.  If a partial UOL begins with a directory and the
   directory is not an object or container element, it must be preceded
   by a relative component; section 2.2.

   example
     abs = "/directory"
     rel = "./directory"

3.2  Attribute

   An attribute element is the UOL equivalent to a file name in an
   ordinary file system.  The element always descends from a directory
   and terminates a constructors path.

Boynton                 Expires February 2002                  [page 6]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001


   Attributes do not ordinarily carry an extension (e.g. .txt, .exe,
   etc...).  To prevent an attribute reference from being ambiguous,
   the "@" (commercial at sign) character is used as a delimiter
   between directory and attribute elements.

   example
     ref = "/directory@attribute"
     ref = "/@attribute"

   Relative forms of UOL may omit the "@" sign if the reference is to
   an attribute in the current directory.

   example
     cur dir = "/directory"
     ref = "attribute"
     resolved = /directory@attribute

3.3  Object

   In the UOL scheme, an object element is the root node for a tree of
   elements defined by a schema; section 1.2.  It is also a directory
   element.  An object element is identified by the prefix "." (dot).

   object reference
      "/.object/dir@attr"

   It is important to note that UOL defines relative components that
   also begin with a dot ".".  Rules for differentiating between the
   two uses are discussed in Section 2.2.

3.4  Container

   An element with a prefix of two or more dots (e.g. ".." or "...") is
   interpreted as a "container".  All containers extend object
   elements.  The container element shares an objects name space as
   well as its object name (if any).  It does not, however, reference
   the objects attributes.  Instead, the container diverts the UOL path
   to named object nodes within its scope.  The UOLs object name is
   then extended to identify the branching elements.

   example
        "/..container/dir@field#name"

   Container elements should be followed by a path delimiter ("/" or
   "@").  If the container is not followed by a path delimiter, the UOL
   is a reference to the container itself; the "name element" is not
   parsed.

   Containers can be nested.  The name element assigned to the nested
   container is appended to the object name inherited from its parent.
   The nested name element is delimited from the object name by a dot
   "." character.


Boynton                 Expires February 2002                  [page 7]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

   example
        "/..parent/..nested/dir@field#parent_name.nested_name"

   In the UOL scheme, object and container elements are mutually
   exclusive (they cannot be visible at the same time).  Because a
   container must extend an object, its presence implies the object
   and, therefore, eliminates the need to express both.  This approach
   increases the efficiency of UOL by reducing the number of elements
   in the constructor.

   When resolving partial UOL with relative components, the
   "object/container" name space is treated as a single element.
   Switch characters within the relative component are used to
   differentiate between overlapping object and container elements;
   section 2.2.

3.4.1  Table Container

   As the name implies, table containers are used to encapsulate
   tabular data structures.  Each named sub-set of elements below a
   table container use the same schema.  The schema used by a table
   container is inherited from the object element it extends.  For
   example, if an object defines the field "price", so too will the
   container.

   example UOL
     object instance     = "/.invoice@price"
     container instance  = "/..invoice@price#name"

   In addition to suppling a schema, the containers object instance may
   also be used to hold default values for populating each named
   instance within the container.

3.4.2  List Container

   A List container is used to encapsulate an array of unrelated
   objects.  Because the list is an array,  the name for objects
   enclosed by the list must be in the form of an integer equal to, or
   greater than, zero (0).

   List containers can be used to describe SGML documents and popular
   sub-sets of SGML, such as HTML and XML.  The following UOLs
   illustrate this concept by describing attributes within the HTML
   table below (An extended example is shown in section 6.1).

   <table cellspacing=0 cellpadding=0 border=10>
        <tr>
         <td align="Left" valign="Top">Text one</td>
         <td align="Center" valign="Top">Text two</td>
      </tr>
   </table>

   ref to object
      .table@border="10"

Boynton                 Expires February 2002                  [page 8]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001


   ref to object in a container
      ...table/...tr/.td@align#0.1="Center"

   A list container can also use undefined objects to bind a UOL to its
   value.  The undefined object is implied when a list container is
   followed by a forward slash "/" and terminates a UOL constructor.

   ref to default object
      ...table/...tr/...td/#0.1.0="Text two"

3.5  Name

   Object elements enclosed by a container are assigned a unique name
   id.  The name is appended to the object name (if any) inherited from
   the container itself; section 3.4.  The name elements are delimited
   by a "." (dot).

   example
      "/..container/.object/#obj_name"
      "/..container1/..container2/.object/#con2_name.obj_name"

4  Name Substitution

   This section proposes a minimum set of parsing capabilities that
   should be supported for name substitution.  All substitute name
   elements must be fully interpreted before the UOL is considered to
   be valid.

4.1  Wild Cards

   The asterisk "*" is reserved as a wild card for name elements.
   Where present, an application should return a list of matching UOLs
   delimited by a line feed character (U000A).

4.2  Index Names

   UOL should allow name substitution with index values.  The index
   name is an integer >= -1 and inclosed by "[" and "]" (open and
   closed square brackets).  For any name element, the integer index
   may be used in place of the actual name.

   A name elements index is application dependant and does not have to
   conform to a specific algorithm.  However, it should be the case,
   for any un-modified collection of UOL, the index will consistently
   return the same element.

   parsing rules:

   1) If the name contains square brackets and the contents cannot be
      parsed to an integer >= -1, the UOL is invalid.

   2) If a name cannot be located from the supplied index, the UOL is
      invalid.

Boynton                 Expires February 2002                  [page 9]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001


   3) If the integer is equal to -1, the index is the largest valid
      index plus 1.

4.3  Default Name

   The "" (empty string) is reserved for naming default object
   elements.  Applications can use the default object for storing
   schemas or default values.

   ref to default object
     "//authority/..object1/..object2@attr#"

   Where a named object appears with a
   default object, the "." (dot) delimiter implies the default name.

   default name (leading)
     "//authority/..object1/..object2@attr#.name2"

   default name (trailing)
     "//authority/..object1/..object2@attr#name1"

5  Reserved Attributes and Parameters

   UOL does not define a language for interacting with its
   components.  It does, however, reserve the semicolon ";" character
   for delimiting parameters as described in section 3.3 of [RFC2396].
   Although supporting such functionality is optional, at minimum, a
   UOL parser should remove the parameter where identified.

   In addition to parameter support, UOL reserves a set of case
   insensitive, directory specific, attributes.  The attributes are
   used to return and set information regarding directory and object
   structure.

   Directory level attributes operate on the directory node itself.  In
   other words, they do not extend a schema.  Directory attributes are
   identified by doubling the attribute delimiter "@@".

   example
     "/directory@@attlist"

   The following are a minimum set of directory level attributes
   proposed for UOL.

   names - The names parameter operates exclusively on container
      elements.  If the container is a table, its value is a comma ","
      delimited string of name elements.  If the container is a list,
      the parameters value is "[n]" where 'n' is the number of elements
      in the list.

   schema - Used to obtain a line delimited list of UOL strings
      representing a complete schema for sub-elements of the current
      directory.  The list provides partial UOL constructors that will

Boynton                 Expires February 2002                 [page 10]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

      resolve correctly when combined with the current path.  Each
      element path is enumerated in turn.  The object name fragment
      (if any) is removed. This attribute is "read-only".

   attlist - a non-recursive, comma "," delimited list of elements
      contained in the current directory.

   code - the class description or file for an object that will use
      data from this directory.

   codebase - the path description or URL to a class described by
      "code".

   aka - "Also Known As" holds a single, alternate name for describing
      an object element. Where present, "aka" should provide the most
      common generic substitute for the actual name used.

   functions - Used to retrieve or update a line delimited list of
      functions that will interact with values associated with a UOL
      directory.  functions should be stated in a form consistent with
      a "classid" URI; Section 13.3 [REC html 4.01].

6  Example UOL

   The following section provides examples of common data structures
   expressed in the form of UOL.

   6.1  HTML Table

   <table cellspacing=0 cellpadding=0 border=10>
        <tr>
         <td align="Left" valign="Top">Text one</td>
         <td align="Center" valign="Top">Text two</td>
      </tr>
        <tr>
         <td><img src="myimage.gif"></td>
      </tr>
   </table>

   The following shows the above html source expressed in UOL.  Note
   that with UOL, changing the logical order of tags will not effect
   the meaning of the table.

   .table@cellspacing                  = 0
   .table@cellpadding                  = 0
   .table@border                       = 0
   ...table/...tr/.td@align#0.0        = Left
   ...table/...tr/.td@valign#0.0       = Top
   ...table/...tr/...td/#0.0.0         = Text one
   ...table/...tr/.td@align#0.1        = Center
   ...table/...tr/.td@valign#0.1       = Top
   ...table/...tr/...td/#0.1.0         = Text two
   ...table/...tr/...td/.img@src#1.0.0 = myimage.gif


Boynton                 Expires February 2002                 [page 11]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

   The following shows the above list in a serial form.

   .table
   cellspacing = 0
   cellpadding = 0
   border      = 0
   ...table
   ...tr#0
   .td#0
   align       = Left
   valign      = Top
   ...td
   .#0         = Text one
   ..
   .td#1
   align       = Center
   valign      = Top
   ...td
   .#0         = Text two
   ..
   ..
   ...tr#1
   ...td#0
   .img#0
   src         = myimage.gif

   6.2  Relational Database

   ---------------------
   |PK_Entity |  Name  |
   ---------------------
   |   101    | Smith  |
   |   102    | Jones  |
   |   103    | Carter |
   --------------------

   --------------------------------------
   |PK_Meeting | Start_Time | Stop_Time |
   --------------------------------------
   |    201    |   8:00 am  |   8:30 am |
   |    202    |   9:00 am  |   9:30 am |
   --------------------------------------

   Attendees Table:
   --------------------------
   | FK_Entity | FK_Meeting |
   --------------------------
   |    101    |     201    |
   |    102    |     201    |
   |    102    |     202    |
   |    103    |     202    |
   --------------------------


Boynton                 Expires February 2002                 [page 12]


INTERNET-DRAFT          Uniform Object Locator          5 August,  2001

   UOL for "Meeting" attendees

      constructor = "/..Meeting/..Entity@Name#"

      "/..Meeting/..Entity@Name#201.101" = Smith
      "/..Meeting/..Entity@Name#201.102" = Jones

   relative UOL for "Meeting" time
      "..@Start_Time#201" = 8:00 am

   A UOL can also expresses this data in the context of an appointment
   for a specific entity.

      constructor = "/..Entity/..Meeting@Start_Time#"

      "/..Entity/..Meeting@Start_Time#103.202" = 9:00 am
      "/..Entity/..Meeting@Start_Time#102.201" = 8:00 am

   relative UOL for attendee name
      "..@Name#103" = Carter

7  XML, XPath, and UOL

   Interaction with XML data is one possible use for the UOL scheme.
   However, UOL is NOT proposed for use as an embedded identifier
   within XML schemas, DTDs, or payload.  This functionality is
   provided by XML Path Language which was specifically written for
   this task.  At the time this draft was updated, the W3C
   recommendation for XML Path Language was [XPath10];

8 References

   [RFC2396] T. Berners-Lee, R. Fielding, and L. Masinter.
             "Uniform Resource Identifiers (URI) Generic Syntax".
             IETF RFC 2396 August 1998.

   [HTML401] D. Raggett, A. Le Hors, and I. Jacobs, Editors,
             "HTML 4.01 Specification".
             W3C Recommendation HTML401, 24 December 1999.

   [XPath10] J. Clark, and S. DeRose, Editors,
             "XML Path Language (XPath) Version 1.0".
             W3C Recommendation XPath10, 16 November 1999.

9  Author's Address

   Jon L. Boynton
   Produx House, Corp.
   19300 Nalle Rd.
   North Ft.Myers, FL 33917

   Phone 941 543 4491
   Email Comments to jon@datamessenger.com


Boynton                 Expires February 2002                 [page 13]