draft-gregorio-uritemplate-00.txt   draft-gregorio-uritemplate-01.txt 
Network Working Group J. Gregorio, Ed. Network Working Group J. Gregorio, Ed.
Internet-Draft individual Internet-Draft
Expires: May 1, 2007 M. Hadley, Ed. Intended status: Standards Track M. Hadley, Ed.
Sun Microsystems Expires: January 10, 2008 Sun Microsystems
M. Nottingham M. Nottingham, Ed.
individual
D. Orchard D. Orchard
BEA Systems, Inc. BEA Systems, Inc.
October 28, 2006 July 9, 2007
URI Template URI Template
draft-gregorio-uritemplate-00.txt draft-gregorio-uritemplate-01
Status of this Memo Status of this Memo
By submitting this Internet-Draft, each author represents that any By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79. aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 1, line 39 skipping to change at page 1, line 39
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on May 1, 2007. This Internet-Draft will expire on January 10, 2008.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (2006). Copyright (C) The IETF Trust (2007).
Abstract Abstract
URI Templates are strings that can be transformed into URIs after URI Templates are strings that can be transformed into URIs after
embedded variables are substituted. This document defines the embedded variables are substituted. This document defines the syntax
structure and syntax of URI Templates. and processing of URI Templates.
Editorial Note Editorial Note
To provide feedback on this Internet-Draft, join the W3C URI mailing To provide feedback on this Internet-Draft, join the W3C URI mailing
list (http://lists.w3.org/Archives/Public/uri/) [1]. list (http://lists.w3.org/Archives/Public/uri/) [1].
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Notational Conventions . . . . . . . . . . . . . . . . . . . . 3 2. Notational Conventions . . . . . . . . . . . . . . . . . . . . 3
3. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3. URI Template . . . . . . . . . . . . . . . . . . . . . . . . . 4
4. URI Template . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Template Variables . . . . . . . . . . . . . . . . . . . . 4
4.1 Template Variables . . . . . . . . . . . . . . . . . . . . 4 3.2. URI Template Substitution . . . . . . . . . . . . . . . . . 4
4.2 URI Template Substitution . . . . . . . . . . . . . . . . 4 3.3. Using URI Templates . . . . . . . . . . . . . . . . . . . . 5
4.3 Examples . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3.1. Examples . . . . . . . . . . . . . . . . . . . . . . . 5
5. Security Considerations . . . . . . . . . . . . . . . . . . . 6 4. Security Considerations . . . . . . . . . . . . . . . . . . . . 6
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 6
7. Normative References . . . . . . . . . . . . . . . . . . . . . 7 6. Normative References . . . . . . . . . . . . . . . . . . . . . 7
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 7 Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . . 7
A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 8 Appendix B. Revision History . . . . . . . . . . . . . . . . . . . 7
B. Revision History . . . . . . . . . . . . . . . . . . . . . . . 8 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 7
Intellectual Property and Copyright Statements . . . . . . . . 9 Intellectual Property and Copyright Statements . . . . . . . . . . 9
1. Introduction 1. Introduction
URI Templates are strings that contain embedded variables that are URI Templates are strings that contain embedded variables that are
transformed into URIs after embedded variables are substituted. This transformed into URIs after embedded variables are substituted.
document defines the structure and syntax of URI Templates.
URI Templates are useful when it's necessary to convey the structure This is useful when it's necessary to convey the structure of a URI
of a URI in a well-defined way. For example, documentation of an in a well-defined way. For example, documentation of an interface
interface exposed by a Web site might use a template to show people exposed by a Web site might use a template to show people how to find
how to find information about a user; information about a user;
http://www.example.com/users/{userid} http://www.example.com/users/{userid}
URI Templates can also be thought of as the basis of a machine- URI Templates can also be thought of as the basis of a machine-
readable forms language; by allowing clients to form their own readable forms language; by allowing clients to form their own
identifiers based on templates given to them by the URI's authority, identifiers based on templates given to them by the URI's authority,
it's possible to construct dynamic systems that use more of the URI it's possible to construct dynamic systems that use more of the URI
than traditional HTML forms are able to. For example, than traditional HTML forms are able to. For example,
http://www.example.org/products/{upc}/buyers?page={page_num} http://www.example.org/products/{upc}/buyers?page={page_num}
skipping to change at page 3, line 50 skipping to change at page 3, line 49
variables are available, how to convey them to clients, and what variables are available, how to convey them to clients, and what
their appropriate use is in that context. their appropriate use is in that context.
2. Notational Conventions 2. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
This specification uses the Augmented Backus-Naur Form (ABNF) This specification uses the Augmented Backus-Naur Form (ABNF)
notation of [RFC2234]. See [RFC3986] for reserved and unreserved notation of [RFC4234]. See [RFC3986] for the definitions of the URI-
productions. reference, reserved, and unreserved rules.
3. Motivation
URI Templates are useful in a number of scenarios including web
service documentation and application code. A standard syntax and
well-defined substitution rules will improve interop.
4. URI Template 3. URI Template
A URI Template is a sequence of characters that contains one or more A URI Template is a sequence of characters that contains one or more
embedded template variables Section 4.1. A URI Template becomes a embedded template variables, see Section 3.1. A URI Template becomes
URI when the template variables are substituted with the template a URI when the template variables are substituted with their values
variables string values, see Section 4.2. The following shows an (see Section 3.2). For example:
example URI Template:
http://example.com/widgets/{widget_id} http://example.com/widgets/{widget_id}
If the value of the widget_id variable is "xyzzy", the resulting URI If the value of the widget_id variable is "xyzzy", the resulting URI
after substitution is: after substitution is:
http://example.com/widgets/xyzzy http://example.com/widgets/xyzzy
4.1 Template Variables 3.1. Template Variables
Template variables are the parameterized components of a URI Template variables are the parameterized components of a URI
Template, their representation is described below. A template Template. A template variable MUST match the template-var rule.
variable MUST match the template-var production.
template-char = unreserved template-char = unreserved
template-name = 1*template-char template-name = 1*template-char
template-var = "{" template-name "}" template-var = "{" template-name "}"
4.2 URI Template Substitution 3.2. URI Template Substitution
Evaluating a URI Template consists of replacing each occurrence of a Evaluating a URI Template ("substitution") consists of replacing all
template variable with the string value of that variable. Obtaining template variables with their respective string values.
the string value of a template variable is an application-specific
process, this specification places no constraints on the mechanism
employed. Template variables MAY appear in a URI Template any number
of times.
If the value of a template variable would conflict with a reserved During substitution, the string value of a template variable MUST
character's purpose as a delimiter, then the conflicting data must be have any characters that do not match the reserved or unreserved
percent-encoded before substitution. That is, merely doing rote rules (i.e., those characters not legal in URIs without percent
substitution on template variables could result in the generation of encoding) percent-encoded, as per [RFC3986], section 2.1. Specific
an invalid URI for a particular scheme. Specifications that use URI applications of URI Templates MAY specify additional constraints and
Templates are expected to take this into consideration in how they encoding rules in addition to this.
use such templates.
When the values of any template variables have been substituted into Any number of template variables MAY appear in a URI Template; a
a URI template, the resulting string MUST match the URI-reference single template-name MAY appear multiple times.
production of RFC 3986 and MUST also match the productions for the
scheme in the final URI.
This specification presumes that the value of a template variable The result of substitution MUST match the URI-reference rule and
does not contain characters outside the allowed set for the SHOULD also match any known rules for the scheme of the resulting
component(s) of the URI that it parameterizes. URI.
4.3 Examples Typically, this is ensured by the definitions of the template
variables used. For example, they may specify that a variable's
value is not to contain certain characters, or that some characters
should be percent-encoded before substitution.
Given the following template names and values 3.3. Using URI Templates
Name Value Applications using URI Templates will typically need to specify a
------------------------------------------------------------ number of things, including;
a fred
b barney
c cheeseburger
20 this-is-spinal-tap
a~b none%20of%20the%20above
schema https
p quote=to+bo+or+not+to+be
e
q hullo#world
Note that the name 'wilma' has not been defined, and the value of 'e' o The template to use.
is the empty string. o What template variables are available.
o For each of the variables;
* What characters are allowed in the template's value.
* What encodings should be applied to the value before
substitutions.
* How to handle errors such as the output of substitution being
an invalid URI.
The following URI Templates will be expanded as shown: URI Template processors SHOULD allow applications to indicate that;
http://example.org/{a}/{b}/ o A variable's value is required to contain at least one character
http://example.org/fred/barney/ o A variable's value is required to match one of a set of supplied
options
o A variable's value is to have all reserved characters, as per
RFC3986, percent-escaped before substitution
http://example.org/{a}{b}/ Processors MAY make additional options available.
http://example.org/fredbarney/
3.3.1. Examples
Given the following template names and values:
+--------+--------------------------+
| Name | Value |
+--------+--------------------------+
| a | fred |
| b | barney |
| c | cheeseburger |
| d | one two three |
| e | 20% tricky |
| f | |
| 20 | this-is-spinal-tap |
| scheme | https |
| p | quote=to+be+or+not+to+be |
| q | hullo#world |
+--------+--------------------------+
Table 1
(Note that the name 'wilma' has not been defined, and the value of
'f' is the empty string.)
The following URI Templates will be expanded as shown:
http://example.org/page1#{a} http://example.org/page1#{a}
http://example.org/page1#fred http://example.org/page1#fred
{scheme}://{20}.example.org?date={wilma}&option={a} http://example.org/{a}/{b}/
https://this-is-spinal-tap.example.org?date=&option=fred http://example.org/fred/barney/
http://example.org/{a~b}
http://example.org/none%20of%20the%20above
http://example.org?{p} http://example.org/{a}{b}/
http://example.org?quote=to+bo+or+not+to+be http://example.org/fredbarney/
http://example.com/order/{c}/{c}/{c}/ http://example.com/order/{c}/{c}/{c}/
http://example.com/order/cheeseburger/cheeseburger/cheeseburger/ http://example.com/order/cheeseburger/cheeseburger/cheeseburger/
http://example.com/{q} http://example.org/{d}
http://example.com/hullo#world http://example.org/one%20two%20three
http://example.com/{e}/
http://example.com//
The following are examples of URI Template expansions that are not http://example.org/{e}
legal. http://example.org/20%25%20tricky
Name Value http://example.com/{f}/
------------------------------------------------------------ http://example.com//
a fred barney
b %
The following URI Templates are expanded with the given values and do {scheme}://{20}.example.org?date={wilma}&option={a}
not produce legal URIs. https://this-is-spinal-tap.example.org?date=&option=fred
http://example.org/{a} http://example.org?{p}
http://example.org/fred barney http://example.org?quote=to+be+or+not+to+be
http://example.org/{b}/ http://example.com/{q}
http://example.org/%/ http://example.com/hullo#world
5. Security Considerations 4. Security Considerations
A URI Template does not contain active or executable content. Other A URI Template does not contain active or executable content. Other
security considerations are the same as those for URIs, see section 7 security considerations are the same as those for URIs, see section 7
of RFC3986. of RFC3986.
6. IANA Considerations 5. IANA Considerations
In common with RFC3986, URI scheme names form a registered namespace In common with RFC3986, URI scheme names form a registered namespace
that is managed by IANA according to the procedures defined in that is managed by IANA according to the procedures defined in
[RFC2717]. No IANA actions are required by this document. [RFC4395]. No IANA actions are required by this document.
7. Normative References 6. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2717] Petke, R. and I. King, "Registration Procedures for URL
Scheme Names", BCP 35, RFC 2717, November 1999.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, January 2005. RFC 3986, January 2005.
[RFC4234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 4234, October 2005.
[RFC4395] Hansen, T., Hardie, T., and L. Masinter, "Guidelines and
Registration Procedures for New URI Schemes", BCP 115,
RFC 4395, February 2006.
[1] <http://lists.w3.org/Archives/Public/uri/> [1] <http://lists.w3.org/Archives/Public/uri/>
Appendix A. Contributors
The following people made significant contributions to this
specification: DeWitt Clinton and James Snell.
Appendix B. Revision History
01
00 - Initial Revision.
Authors' Addresses Authors' Addresses
Joe Gregorio (editor) Joe Gregorio (editor)
individual
Email: joe@bitworking.org Email: joe@bitworking.org
URI: http://bitworking.org/ URI: http://bitworking.org/
Marc Hadley (editor) Marc Hadley (editor)
Sun Microsystems Sun Microsystems
Email: Marc.Hadley@sun.com Email: Marc.Hadley@sun.com
URI: http://sun.com/ URI: http://sun.com/
Mark Nottingham Mark Nottingham (editor)
individual
Email: mnot@pobox.com Email: mnot@pobox.com
URI: http://mnot.net/ URI: http://mnot.net/
David Orchard David Orchard
BEA Systems, Inc. BEA Systems, Inc.
Email: dorchard@bea.com Email: dorchard@bea.com
URI: http://bea.com/ URI: http://bea.com/
Appendix A. Contributors Full Copyright Statement
The following people made significant contributions to this Copyright (C) The IETF Trust (2007).
specification: DeWitt Clinton and James Snell.
Appendix B. Revision History This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors
retain all their rights.
00 - Initial Revision. This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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.
Intellectual Property Statement Intellectual Property
The IETF takes no position regarding the validity or scope of any The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79. found in BCP 78 and BCP 79.
skipping to change at page 9, line 29 skipping to change at page 9, line 45
such proprietary rights by implementers or users of this such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr. http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at this standard. Please address the information to the IETF at
ietf-ipr@ietf.org. ietf-ipr@ietf.org.
The IETF has been notified of intellectual property rights claimed in
regard to some or all of the specification contained in this
document. For more information consult the online list of claimed
rights.
Disclaimer of Validity
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIM 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.
Copyright Statement
Copyright (C) The Internet Society (2006). This document is subject
to the rights, licenses and restrictions contained in BCP 78, and
except as set forth therein, the authors retain all their rights.
Acknowledgment Acknowledgment
Funding for the RFC Editor function is currently provided by the Funding for the RFC Editor function is provided by the IETF
Internet Society. Administrative Support Activity (IASA).
 End of changes. 50 change blocks. 
150 lines changed or deleted 149 lines changed or added

This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/