Re: [Uri-review] Request for review

"Roy T. Fielding" <> Thu, 06 July 2006 04:33 UTC

Received: from [] ( by with esmtp (Exim 4.43) id 1FyLYX-0003y6-97; Thu, 06 Jul 2006 00:33:37 -0400
Received: from [] ( by with esmtp (Exim 4.43) id 1FyLYW-0003y1-F1 for; Thu, 06 Jul 2006 00:33:36 -0400
Received: from ([] by with esmtp (Exim 4.43) id 1FyJ4v-0001CF-H0 for; Wed, 05 Jul 2006 21:54:53 -0400
Received: from ([]) by with esmtp (Exim 4.43) id 1FyJ3O-0002fh-7y for; Wed, 05 Jul 2006 21:53:20 -0400
Received: from ([] helo=[]) by with esmtpa (Exim 4.52) id 1FyJ3f-0006kp-Lk; Wed, 05 Jul 2006 18:53:35 -0700
In-Reply-To: <>
References: <>
Mime-Version: 1.0 (Apple Message framework v752.2)
Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed
Message-Id: <>
Content-Transfer-Encoding: 7bit
From: "Roy T. Fielding" <>
Subject: Re: [Uri-review] Request for review
Date: Wed, 5 Jul 2006 18:53:08 -0700
To: Andrey Shur <>
X-Mailer: Apple Mail (2.752.2)
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname -
X-AntiAbuse: Original Domain -
X-AntiAbuse: Originator/Caller UID/GID - [0 0] / [47 12]
X-AntiAbuse: Sender Address Domain -
X-Spam-Score: -2.6 (--)
X-Scan-Signature: 0ff9c467ad7f19c2a6d058acd7faaec8
Cc: Mark Baker <>, "John Calhoon \(LCA\)" <>, TedHardie <>, "" <>, Jerry Dunietz <>, Gregg Brown <>
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Proposed URI Schemes <>
List-Unsubscribe: <>, <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>

On Jul 5, 2006, at 5:45 PM, Andrey Shur wrote:
> On 7/5/2006, Roy T. Fielding wrote:
>> This entire design space was covered by the discussions regarding  
>> (encapsulating packages of HTML + inline resources via email)  
>> almost ten
>> years ago, and the same techniques apply here.  The packaging format
>> needs to contain a catalog table of "package part" --> "real URI" and
>> treat the package itself as a local cache.  All references to  
>> those URIs
>> are resolved by the package manager to the part given in the catalog.
> This is also the case for the packaging technology Microsoft is  
> coming up with. Saying this I assume that a catalog table does not  
> necessarily needs to be persisted in actual bits within the  
> package. It could be virtual as long as it is well-defined. The  
> "pack:" Uri schema establishes unambiguous rules for "package part"  
> --> "real Uri" table.

No, that is the opposite of a catalog.  The purpose of an embedded  
is to create an environment in which all the parts should be interpreted
regardless of how they were obtained.  For example, an archive that
represents a complete tree of resources at a given time X can be browsed
just like the original.  In addition, the package format defines another
set of URIs, which can be relative to the base URI of the package (e.g.,
"./part1"), to form a virtual identifier space wherein each part is
treated as an individual resource with its own media type (e.g.,
"text/html").  All of this can be defined by the media type
specification(s) for the package format.

In contrast, creating a new identifier for "pack" duplicates all of URI
space and ties the identifier to a specific media type.  Placing  
within the URI is wrong because it makes references brittle and  
future extensibility. What happens, for example, when the pack format is
changed?  Do you deploy yet another URI scheme for the new format?

>> Each part has a defined base URI, usually its original URI at the  
>> time
>> the package was generated.  The individual parts do not need to be
>> altered in any way (a requirement for digital sigs).  It also defines
>> a set of new URIs by treating the individual part names as  
>> hierarchical
>> identifiers within the package (i.e., a folder containing those  
>> parts).
>> The above design is implemented in the media type handler for the
>> package type by inserting a local cache handler and associating each
>> part with its corresponding base URI.  Any browser supporting the
>> package
>> type (internally or via plug-in) will require special code to do so,
>> regardless of how references are handled.  The rest of the browser is
>> generic, and the package can be served from any source.
> The substantial feature of the packaging technology is its purpose  
> to be the framework for multiple media types. It is already the  
> foundation for MS Office 2007 files, and Windows .XPS files.  
> Microsoft has solid plans to extend the line of media-types based  
> on this packaging within and outside of the company.

There is nothing preventing multiple media types (profiles) from  
being based
on a single packaging definition.  There are many media types based  
on XML.
It doesn't change the design at all.

> Therefore we made a special effort to move the packaging addressing  
> model outside of the particular media type(s) handling. That is why  
> we picked URI schema as a mechanism we can support across the open  
> family of package-based media types.

The "addressing model" is URIs.  If you define a special "pack" URI,  
you are creating an addressing mechanism specific to one media type.
If you do what I explained, all URI schemes will work fine.

> More information on this can be found in MSDN article at http:// 
> dnlong/html/opcadmdl.asp

Yeah, I know, and you will have to throw out that work and start over.
Microsoft will be embarrassed again if they ship an implementation of
a proprietary URI scheme that directly contradicts the Web architecture.

>> Creating a "pack" media-type-specific URI that encapsulates all other
>> URIs is a terrible idea, especially when it merely applies media-type
>> instructions on how a browser should handle embedded resources.
>> It would invert the current relation between identifiers and media
>> types,
>> which is a gross violation of web architecture.  I will never  
>> implement
>> such a beast.
> I'm a bit confused by the term "terrible idea" you've used to  
> denote the "pack" Uri. In fact when the "pack" Uri is supported,  
> browser navigates to the part without knowing the mime-type of the  
> package file. Part does not appear as an embedded resource for the  
> browser, but rather as a regular resource identified by a Uri. The  
> mime-type of the part is returned to caller, so browser can run the  
> appropriate media type handler for the part.

The browser can't "navigate to the part" without knowing the media type
of the package or having an intermediary to do so for them.  If the  
must receive the entire package prior to obtaining the part, then it  
know the package media type and its own implementation will be doing
the "navigating" within the package.  If some intermediary, such as an
HTTP server, is doing the "navigating" within each package and simply
providing an identifier for each part, then the browser is going to be
using the URI scheme for that intermediary -- not pack.  The latter is
what Mark was describing for "http" URIs.

> Clearly the pattern of the "pack" Uri, implied by its purpose to be  
> the foundation of the addressing model for the family of package- 
> based media types, is to some extent unusual. We have done a lot of  
> usability and security analysis before coming up with the current  
> design. If you have in mind scenarios which make the "pack" Uri  
> experience "terrible", please let us know.

As I said, review the MHTML discussions of ten years ago.  I am sure  
are archived somewhere.  The scenario you describe is not "unusual"  
at all.
The same applies to all compound document formats.  What is unusual  
is the
suggested solution of a "pack" URI that inverts the entire addressing
space to satisfy a single media type.  That simply isn't done because it
is contrary to the way the Web has been designed to work.


Roy T. Fielding                            <>
Chief Scientist, Day Software              <>

Uri-review mailing list