forked from jcgregorio/uri-templates
-
Notifications
You must be signed in to change notification settings - Fork 2
/
draft-gregorio-uritemplate-03-from-2.diff.html
807 lines (806 loc) · 165 KB
/
draft-gregorio-uritemplate-03-from-2.diff.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by rfcdiff 1.34: rfcdiff -->
<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional" > -->
<!-- System: Linux gregorio.sfo.corp.google.com 2.6.18.5-gg26workstation-mixed64-32 #1 SMP Mon Feb 11 16:45:49 PST 2008 x86_64 GNU/Linux -->
<!-- Using awk: /usr/bin/gawk: GNU Awk 3.1.5 -->
<!-- Using diff: /usr/bin/diff: diff (GNU diffutils) 2.8.1 -->
<!-- Using wdiff: /usr/bin/wdiff: GNU wdiff 0.5 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>Diff: draft-gregorio-uritemplate-02.txt - draft-gregorio-uritemplate-03.txt</title>
<style type="text/css">
body { margin: 0.4ex; margin-right: auto; }
tr { }
td { white-space: pre; font-family: monospace; vertical-align: top; font-size: 0.86em;}
th { font-size: 0.86em; }
.small { font-size: 0.6em; font-style: italic; font-family: Verdana, Helvetica, sans-serif; }
.left { background-color: #EEE; }
.right { background-color: #FFF; }
.diff { background-color: #CCF; }
.lblock { background-color: #BFB; }
.rblock { background-color: #FF8; }
.insert { background-color: #8FF; }
.delete { background-color: #ACF; }
.void { background-color: #FFB; }
.cont { background-color: #EEE; }
.linebr { background-color: #AAA; }
.lineno { color: red; background-color: #FFF; font-size: 0.7em; text-align: right; padding: 0 2px; }
.elipsis{ background-color: #AAA; }
.left .cont { background-color: #DDD; }
.right .cont { background-color: #EEE; }
.lblock .cont { background-color: #9D9; }
.rblock .cont { background-color: #DD6; }
.insert .cont { background-color: #0DD; }
.delete .cont { background-color: #8AD; }
.stats, .stats td, .stats th { background-color: #EEE; padding: 2px 0; }
</style>
</head>
<body >
<table border="0" cellpadding="0" cellspacing="0">
<tr bgcolor="orange"><th></th><th> draft-gregorio-uritemplate-02.txt </th><th> </th><th> draft-gregorio-uritemplate-03.txt </th><th></th></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Network Working Group J. Gregorio, Ed.</td><td> </td><td class="right">Network Working Group J. Gregorio, Ed.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Internet-Draft Google</td><td> </td><td class="right">Internet-Draft Google</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Intended status: Standards Track M. Hadley, Ed.</td><td> </td><td class="right">Intended status: Standards Track M. Hadley, Ed.</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0001" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock">Expires: <span class="delete">May 29, 2008 </span> Sun Microsystems</td><td> </td><td class="rblock">Expires: <span class="insert">September 27, 2008</span> Sun Microsystems</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> M. Nottingham, Ed.</td><td> </td><td class="right"> M. Nottingham, Ed.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> D. Orchard</td><td> </td><td class="right"> D. Orchard</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> BEA Systems, Inc.</td><td> </td><td class="right"> BEA Systems, Inc.</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0002" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">Nov 26, 2007</span></td><td> </td><td class="rblock"> <span class="insert">Mar 26, 2008</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> URI Template</td><td> </td><td class="right"> URI Template</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0003" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> draft-gregorio-uritemplate-0<span class="delete">2</span></td><td> </td><td class="rblock"> draft-gregorio-uritemplate-0<span class="insert">3</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Status of this Memo</td><td> </td><td class="right">Status of this Memo</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> By submitting this Internet-Draft, each author represents that any</td><td> </td><td class="right"> By submitting this Internet-Draft, each author represents that any</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> applicable patent or other IPR claims of which he or she is aware</td><td> </td><td class="right"> applicable patent or other IPR claims of which he or she is aware</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> have been or will be disclosed, and any of which he or she becomes</td><td> </td><td class="right"> have been or will be disclosed, and any of which he or she becomes</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> aware will be disclosed, in accordance with Section 6 of BCP 79.</td><td> </td><td class="right"> aware will be disclosed, in accordance with Section 6 of BCP 79.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Internet-Drafts are working documents of the Internet Engineering</td><td> </td><td class="right"> Internet-Drafts are working documents of the Internet Engineering</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Task Force (IETF), its areas, and its working groups. Note that</td><td> </td><td class="right"> Task Force (IETF), its areas, and its working groups. Note that</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno"></td></tr>
<tr bgcolor="gray" ><td></td><th><a name="part-l2" /><small>skipping to change at</small><em> page 1, line 39</em></th><th> </th><th><a name="part-r2" /><small>skipping to change at</small><em> page 1, line 39</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> and may be updated, replaced, or obsoleted by other documents at any</td><td> </td><td class="right"> and may be updated, replaced, or obsoleted by other documents at any</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> time. It is inappropriate to use Internet-Drafts as reference</td><td> </td><td class="right"> time. It is inappropriate to use Internet-Drafts as reference</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> material or to cite them other than as "work in progress."</td><td> </td><td class="right"> material or to cite them other than as "work in progress."</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The list of current Internet-Drafts can be accessed at</td><td> </td><td class="right"> The list of current Internet-Drafts can be accessed at</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://www.ietf.org/ietf/1id-abstracts.txt.</td><td> </td><td class="right"> http://www.ietf.org/ietf/1id-abstracts.txt.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The list of Internet-Draft Shadow Directories can be accessed at</td><td> </td><td class="right"> The list of Internet-Draft Shadow Directories can be accessed at</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://www.ietf.org/shadow.html.</td><td> </td><td class="right"> http://www.ietf.org/shadow.html.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0004" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> This Internet-Draft will expire on <span class="delete">May 29,</span> 2008.</td><td> </td><td class="rblock"> This Internet-Draft will expire on <span class="insert">September 27,</span> 2008.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> </td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">Copyright Notice</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"></span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Copyright (C) The IETF Trust (2007).</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Abstract</td><td> </td><td class="right">Abstract</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> A URI Template is a compact sequence of characters used for the</td><td> </td><td class="right"> A URI Template is a compact sequence of characters used for the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> construction of URIs. This specification defines the URI Template</td><td> </td><td class="right"> construction of URIs. This specification defines the URI Template</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> syntax and the process for expanding a URI Template into a URI, along</td><td> </td><td class="right"> syntax and the process for expanding a URI Template into a URI, along</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> with guidelines and security considerations for the use of URI</td><td> </td><td class="right"> with guidelines and security considerations for the use of URI</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Templates on the Internet. The URI Template syntax allows for the</td><td> </td><td class="right"> Templates on the Internet. The URI Template syntax allows for the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> construction of strings that are a superset of URIs, allowing an</td><td> </td><td class="right"> construction of strings that are a superset of URIs, allowing an</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> implementation to process any URI Template without knowing the</td><td> </td><td class="right"> implementation to process any URI Template without knowing the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno"></td></tr>
<tr bgcolor="gray" ><td></td><th><a name="part-l3" /><small>skipping to change at</small><em> page 2, line 20</em></th><th> </th><th><a name="part-r3" /><small>skipping to change at</small><em> page 2, line 16</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Editorial Note</td><td> </td><td class="right">Editorial Note</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> To provide feedback on this Internet-Draft, join the W3C URI mailing</td><td> </td><td class="right"> To provide feedback on this Internet-Draft, join the W3C URI mailing</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> list (http://lists.w3.org/Archives/Public/uri/) [1].</td><td> </td><td class="right"> list (http://lists.w3.org/Archives/Public/uri/) [1].</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Table of Contents</td><td> </td><td class="right">Table of Contents</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3</td><td> </td><td class="right"> 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3</td><td> </td><td class="right"> 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 1.2. Design Considerations . . . . . . . . . . . . . . . . . . 4</td><td> </td><td class="right"> 1.2. Design Considerations . . . . . . . . . . . . . . . . . . 4</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0005" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 1.3. Notational Conventions . . . . . . . . . . . . . . . . . . 4</td><td> </td><td class="rblock"> 1.3. <span class="insert">Applicability . . . . . . . . . . . . . . . . . . . . . . 4</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 2. Characters . . . . . . . . . . . . . . . . . . . . . . . . . . <span class="delete">4</span></td><td> </td><td class="rblock"><span class="insert"> 1.4.</span> Notational Conventions . . . . . . . . . . . . . . . . . . 4</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3. URI Template . . . . . . . . . . . . . . . . . . . . . . . . . 5</td><td> </td><td class="rblock"> 2. Characters . . . . . . . . . . . . . . . . . . . . . . . . . . <span class="insert">5</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">3.1.</span> Variables . . . . . . . . . . . . . . . . . . . . . . . . 5</td><td> </td><td class="rblock"> 3. <span class="insert">Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">3.2.</span> Template Expansions . . . . . . . . . . . . . . . . . . . 6</td><td> </td><td class="rblock"><span class="insert"> 4.</span> URI Template . . . . . . . . . . . . . . . . . . . . . . . . . 5</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">3.3.</span> URI Template Substitution . . . . . . . . . . . . . . . . <span class="delete">6</span></td><td> </td><td class="rblock"> <span class="insert">4.1.</span> Variables . . . . . . . . . . . . . . . . . . . . . . . . 5</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 3.3.1.</span> The 'opt' operator . . . . . . . . . . . . . . . . . . <span class="delete">7</span></td><td> </td><td class="rblock"> <span class="insert">4.2.</span> Template Expansions . . . . . . . . . . . . . . . . . . . 6</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 3.3.2.</span> The 'neg' operator . . . . . . . . . . . . . . . . . . <span class="delete">7</span></td><td> </td><td class="rblock"> <span class="insert">4.3. Error Handling . . . . . . . . . . . . . . . . . . . . . . 6</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 3.3.3.</span> The 'prefix' operator . . . . . . . . . . . . . . . . <span class="delete">7</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.</span> URI Template Substitution . . . . . . . . . . . . . . . . <span class="insert">7</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 3.3.4.</span> The <span class="delete">'append'</span> operator . . . . . . . . . . . . . . . . <span class="delete">7</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.1. ('var') substitution . . . . . . . . . . . . . . . . . 8</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 3.3.5.</span> The 'join' operator . . . . . . . . . . . . . . . . . <span class="delete">7</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.2.</span> The 'opt' operator . . . . . . . . . . . . . . . . . . <span class="insert">8</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 3.3.6.</span> The <span class="delete">'listjoin'</span> operator . . . . . . . . . . . . . . . <span class="delete">7</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.3.</span> The 'neg' operator . . . . . . . . . . . . . . . . . . <span class="insert">8</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 3.4.</span> Examples . . . . . . . . . . . . . . . . . . . . . . . . . <span class="delete">8</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.4.</span> The 'prefix' operator . . . . . . . . . . . . . . . . <span class="insert">9</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 4.</span> Security Considerations . . . . . . . . . . . . . . . . . . . <span class="delete">10</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.5.</span> The <span class="insert">'suffix'</span> operator . . . . . . . . . . . . . . . . <span class="insert">9</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 5.</span> IANA Considerations . . . . . . . . . . . . . . . . . . . . . <span class="delete">10</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.6.</span> The 'join' operator . . . . . . . . . . . . . . . . . <span class="insert">9</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 6.</span> Appendix A - Parsing URI Template Expansions . . . . . . . . . <span class="delete">10</span></td><td> </td><td class="rblock"><span class="insert"> 4.4.7.</span> The <span class="insert">'list'</span> operator . . . . . . . . . . . . . . . <span class="insert">. . 10</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 7.</span> Normative References . . . . . . . . . . . . . . . . . . . . . <span class="delete">11</span></td><td> </td><td class="rblock"><span class="insert"> 4.5.</span> Examples . . . . . . . . . . . . . . . . . . . . . . . . . <span class="insert">11</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . <span class="delete">11</span></td><td> </td><td class="rblock"><span class="insert"> 5.</span> Security Considerations . . . . . . . . . . . . . . . . . . . <span class="insert">12</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Appendix B. Revision History . . . . . . . . . . . . . . . . . . <span class="delete">12</span></td><td> </td><td class="rblock"><span class="insert"> 6.</span> IANA Considerations . . . . . . . . . . . . . . . . . . . . . <span class="insert">12</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . <span class="delete">12</span></td><td> </td><td class="rblock"><span class="insert"> 7.</span> Appendix A - Parsing URI Template Expansions . . . . . . . . . <span class="insert">13</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Intellectual Property and Copyright Statements . . . . . . . . . . <span class="delete">13</span></td><td> </td><td class="rblock"><span class="insert"> 8.</span> Normative References . . . . . . . . . . . . . . . . . . . . . <span class="insert">13</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . <span class="insert">14</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> Appendix B. Revision History . . . . . . . . . . . . . . . . . . <span class="insert">14</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . <span class="insert">15</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> Intellectual Property and Copyright Statements . . . . . . . . . . <span class="insert">16</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">1. Introduction</td><td> </td><td class="right">1. Introduction</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> A URI Template provides a simple and extensible format for URI</td><td> </td><td class="right"> A URI Template provides a simple and extensible format for URI</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> construction. A URI Template is a string that contains embedded</td><td> </td><td class="right"> construction. A URI Template is a string that contains embedded</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expansions, text marked off in matching braces ('{', '}'), that</td><td> </td><td class="right"> expansions, text marked off in matching braces ('{', '}'), that</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> denotes a part of the string that is to be substituted by a template</td><td> </td><td class="right"> denotes a part of the string that is to be substituted by a template</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> processor to produce a URI. A URI Template is transformed into a URI</td><td> </td><td class="right"> processor to produce a URI. A URI Template is transformed into a URI</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> by substituting the expansions with their calculated value.</td><td> </td><td class="right"> by substituting the expansions with their calculated value.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno"></td></tr>
<tr bgcolor="gray" ><td></td><th><a name="part-l4" /><small>skipping to change at</small><em> page 3, line 35</em></th><th> </th><th><a name="part-r4" /><small>skipping to change at</small><em> page 3, line 35</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> A URI Template allows a structural description of URIs while allowing</td><td> </td><td class="right"> A URI Template allows a structural description of URIs while allowing</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> a consumer of the template to construct a final URI by providing the</td><td> </td><td class="right"> a consumer of the template to construct a final URI by providing the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> values of the expansion variables. For example, given the following</td><td> </td><td class="right"> values of the expansion variables. For example, given the following</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> URI Template:</td><td> </td><td class="right"> URI Template:</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://www.example.com/users/{userid}</td><td> </td><td class="right"> http://www.example.com/users/{userid}</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> And the following variable value</td><td> </td><td class="right"> And the following variable value</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0006" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> userid := <span class="delete">fred</span></td><td> </td><td class="rblock"> userid := <span class="insert">"fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The expansion of the URI Template is:</td><td> </td><td class="right"> The expansion of the URI Template is:</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://www.example.com/users/fred</td><td> </td><td class="right"> http://www.example.com/users/fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0007" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">URI Templates can be used as a machine-readable forms language. By</span></td><td> </td><td class="rblock"> <span class="insert">Here is an example</span> that <span class="insert">constructs a query from multiple variables:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> allowing clients to form their own identifiers based on templates</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> given to them by the URI's authority it's possible to construct</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> dynamic systems</span> that <span class="delete">use more of the URI than traditional HTML forms.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> For example:</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0008" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> http://www.example.<span class="delete">org/products/{upc}/buyers?page={page_num</span>}</td><td> </td><td class="rblock"> http://www.example.<span class="insert">com/?{-join|&|query,number</span>}</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0009" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">URI Templates can also be used to compose URI-centric protocols</span></td><td> </td><td class="rblock"> <span class="insert">And</span> the <span class="insert">following variables</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> without impinging on authorities' control of their URI space. For</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> example, there are many emerging conventions for passing around login</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> information between sites using URIs. Forcing people to use a well-</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> known query parameter isn't good practice, but using URI Templates</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> allows different sites to specify local ways of conveying</span> the <span class="delete">same</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> information:</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0010" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://auth.example.com/userauth;{return-uri}</span></td><td> </td><td class="rblock"> <span class="insert">query := "mycelium"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> number := 100</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0011" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://login.example.org/login?back={return-uri}</span></td><td> </td><td class="rblock"> <span class="insert">The expansion of the URI Template is:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> http://www.example.com/?query=mycelium&number=100</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> The template expansion describes in a machine readable manner how the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> URI is to be constructed.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> http://www.example.com/?{-join|&|query,number}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> \____________________/</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> |</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> |</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Join 'var=value' for each variable</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> in ['query', 'number'] with '&'.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">1.2. Design Considerations</td><td> </td><td class="right">1.2. Design Considerations</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The URI Template syntax has been designed to carefully balance the</td><td> </td><td class="right"> The URI Template syntax has been designed to carefully balance the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> need for a powerful substitution mechanism with ease of</td><td> </td><td class="right"> need for a powerful substitution mechanism with ease of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> implementation and security. The syntax is designed to be easy to</td><td> </td><td class="right"> implementation and security. The syntax is designed to be easy to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> parse while at the same time providing enough flexibility to express</td><td> </td><td class="right"> parse while at the same time providing enough flexibility to express</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0012" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> many common templating scenarios. <span class="delete">On the balance, the template</span></td><td> </td><td class="rblock"> many common templating scenarios.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> processing is not Turing complete, thus avoiding a number of security</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> issues, ala the billion-laughs attack of XML DTDs.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Another consideration was to keep the syntax and processing in-line</td><td> </td><td class="right"> Another consideration was to keep the syntax and processing in-line</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> with the pre-existing templating schemes present in OpenSearch, WSDL</td><td> </td><td class="right"> with the pre-existing templating schemes present in OpenSearch, WSDL</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> and WADL.</td><td> </td><td class="right"> and WADL.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The final design consideration was control over the placement of</td><td> </td><td class="right"> The final design consideration was control over the placement of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> reserved characters in the URI generated from a URI Template. The</td><td> </td><td class="right"> reserved characters in the URI generated from a URI Template. The</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> reserved characters in a URI Template can only appear in the non-</td><td> </td><td class="right"> reserved characters in a URI Template can only appear in the non-</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expansion text, or in the argument to an operator, both locations are</td><td> </td><td class="right"> expansion text, or in the argument to an operator, both locations are</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> dictated by the URI Template author. Given the percent-encoding</td><td> </td><td class="right"> dictated by the URI Template author. Given the percent-encoding</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> rules for variable values this means that the source of all</td><td> </td><td class="right"> rules for variable values this means that the source of all</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> structure, i.e reserved characters, in a URI generated from a URI</td><td> </td><td class="right"> structure, i.e reserved characters, in a URI generated from a URI</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Template is decided by the URI Template author.</td><td> </td><td class="right"> Template is decided by the URI Template author.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0013" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock">1.3. Notational Conventions</td><td> </td><td class="rblock">1.3. <span class="insert">Applicability</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> While URI Templates use a notation that is similar to some URI path</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> matching notations in web frameworks, URI Templates were not designed</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> for that use case, nor are they appropriate for that purpose. URI</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Templates are not URIs, they do not identify an abstract or physical</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> resource, they are not to be treated like URIs, nor should not be</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> used in places where a URI would be expected.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">1.4.</span> Notational Conventions</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> This specification uses the Augmented Backus-Naur Form (ABNF)</td><td> </td><td class="right"> This specification uses the Augmented Backus-Naur Form (ABNF)</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0014" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> notation of [RFC<span class="delete">4</span>234], including the following core ABNF syntax rules</td><td> </td><td class="rblock"> notation of [RFC<span class="insert">5</span>234], including the following core ABNF syntax rules</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> defined by that specification: ALPHA (letters) and DIGIT (decimal</td><td> </td><td class="right"> defined by that specification: ALPHA (letters) and DIGIT (decimal</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> digits). See [RFC3986] for the definitions of the URI-reference,</td><td> </td><td class="right"> digits). See [RFC3986] for the definitions of the URI-reference,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> percent-encoded, reserved, and unreserved rules.</td><td> </td><td class="right"> percent-encoded, reserved, and unreserved rules.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",</td><td> </td><td class="right"> The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this</td><td> </td><td class="right"> "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> document are to be interpreted as described in [RFC2119].</td><td> </td><td class="right"> document are to be interpreted as described in [RFC2119].</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">2. Characters</td><td> </td><td class="right">2. Characters</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno"></td></tr>
<tr bgcolor="gray" ><td></td><th><a name="part-l5" /><small>skipping to change at</small><em> page 5, line 20</em></th><th> </th><th><a name="part-r5" /><small>skipping to change at</small><em> page 5, line 29</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> character encoding as the surrounding text.</td><td> </td><td class="right"> character encoding as the surrounding text.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The ABNF notation defines its terminal values to be non-negative</td><td> </td><td class="right"> The ABNF notation defines its terminal values to be non-negative</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> integers (codepoints) based on the US-ASCII coded character set</td><td> </td><td class="right"> integers (codepoints) based on the US-ASCII coded character set</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [ASCII]. Because a URI is a sequence of characters, we must invert</td><td> </td><td class="right"> [ASCII]. Because a URI is a sequence of characters, we must invert</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> that relation in order to understand the URI syntax. Therefore, the</td><td> </td><td class="right"> that relation in order to understand the URI syntax. Therefore, the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> integer values used by the ABNF must be mapped back to their</td><td> </td><td class="right"> integer values used by the ABNF must be mapped back to their</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> corresponding characters via US-ASCII in order to complete the syntax</td><td> </td><td class="right"> corresponding characters via US-ASCII in order to complete the syntax</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> rules.</td><td> </td><td class="right"> rules.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0015" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock">3. <span class="delete">URI Template</span></td><td> </td><td class="rblock">3. <span class="insert">Terminology</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0016" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> A URI Template is a sequence of characters that contains <span class="delete">one or more</span></td><td> </td><td class="rblock"> <span class="insert">o template processor - A program or library that converts a URI</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> embedded template expansions, see Section <span class="delete">3.2.</span> Each expansion</td><td> </td><td class="rblock"><span class="insert"> Template into a URI.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> references one or more variables whose values are used <span class="delete">in</span> when</td><td> </td><td class="rblock"><span class="insert"> o template expansion - The text between '{' and '}', including the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> enclosing brackets.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4. URI Template</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> </td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> A URI Template is a sequence of characters that contains <span class="insert">any number</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> of</span> embedded template expansions, see Section <span class="insert">4.2.</span> Each expansion</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> references one or more variables whose values are used when</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> determining the substition value for an expansion. A URI Template</td><td> </td><td class="right"> determining the substition value for an expansion. A URI Template</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0017" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> becomes a URI when the template expansions are substituted with their</td><td> </td><td class="rblock"> becomes a URI when <span class="insert">all</span> the template expansions are substituted with</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> values (see Section <span class="delete">3.3).</span> The generated URI will be a <span class="delete">URI-reference,</span></td><td> </td><td class="rblock"> their values (see Section <span class="insert">4.4).</span> The generated URI will be a <span class="insert">URI-</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> i.e. either an absolute URI or a relative reference.</td><td> </td><td class="rblock"><span class="insert"> reference,</span> i.e. either an absolute URI or a relative reference.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0018" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3</span>.1. Variables</td><td> </td><td class="rblock"><span class="insert">4</span>.1. Variables</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0019" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">The value of every non-list variable, and the individual values in</span></td><td> </td><td class="rblock"> <span class="insert">Every</span> variable <span class="insert">is either a Unicode</span> string <span class="insert">or a list</span> of <span class="insert">Unicode</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> list variables, must come from ( unreserved / pct-encoded ). For</span></td><td> </td><td class="rblock"><span class="insert"> strings.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> variable <span class="delete">values that are strings that have characters outside that</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> range, the entire</span> string <span class="delete">must be converted into UTF-8 [RFC3629], and</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> then every octet of the UTF-8 string that falls outside</span> of <span class="delete">(</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> unreserved / pct-encoded ) MUST be percent-encoded, as per [RFC3986],</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> section 2.1.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0020" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">This does not imply</span> that <span class="delete">every variable value can be decoded</span> into <span class="delete">a</span></td><td> </td><td class="rblock"> <span class="insert">A template expansion MAY reference variables</span> that <span class="insert">are unknown to the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Unicode string. For example, a</span> variable <span class="delete">value may be a binary blob</span></td><td> </td><td class="rblock"><span class="insert"> template processor. Those variables are 'undefined' and template</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> that <span class="delete">has been percent-encoded before being passed into the</span> template</td><td> </td><td class="rblock"><span class="insert"> expansion takes</span> into <span class="insert">consideration 'undefined' variables.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">processor.</span></td><td> </td><td class="rblock"><span class="insert"> Conversely, every</span> variable that <span class="insert">he</span> template <span class="insert">processor knows about is</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> considered 'defined'.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0021" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">The Unicode Standard [UNIV4] defines various equivalences between</span></td><td> </td><td class="rblock"> <span class="insert">A variable that contains a string</span> of <span class="insert">length zero MUST NOT be</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> sequences</span> of <span class="delete">characters for various purposes. Unicode Standard Annex</span></td><td> </td><td class="rblock"><span class="insert"> considered 'undefined'</span> by <span class="insert">the template processor. A list variable</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> #15 [UTR15] defines various Normalization Forms for these</span></td><td> </td><td class="rblock"><span class="insert"> that contains no members,</span> that <span class="insert">is of zero length, MUST NOT be</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> equivalences, in particular Normalization Form C (NFC, Canonical</span></td><td> </td><td class="rblock"><span class="insert"> considered 'undefined' by the template processor.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Decomposition, followed by Canonical Composition) and Normalization</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Form KC (NFKC, Compatibility Decomposition, followed</span> by <span class="delete">Canonical</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Composition). Since different Normalized Forms unicode strings will</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> have different UTF-8 represenations it is RECOMMEDED</span> that <span class="delete">unicode</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> strings use Normalized Form NFC.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0022" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">The meaning of 'defined' for a variable is progamming language and</span></td><td> </td><td class="rblock"> <span class="insert">Beyond</span> the scope of this specification is the allowable programming</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> library specific and beyond the scope of this specification. Also</span></td><td> </td><td class="rblock"> constructs that can be used for a list <span class="insert">variable.</span> For example, a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> beyond</span> the scope of this specification is the allowable programming</td><td> </td><td class="rblock"> Python implementation might allow only built-in list types, or it may</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> constructs that can be used for a list <span class="delete">variable used in the</span></td><td> </td><td class="rblock"> allow any iterable to be used as the source for a list variable.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> 'listjoin' operator.</span> For example, a Python implementation might</td><td> </td><td class="rblock"> </td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> allow only built-in list types, or it may allow any iterable to be</td><td> </td><td class="rblock"> <span class="insert">Some variables may be supplied with default values. The default</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> used as the source for a list variable.</td><td> </td><td class="rblock"><span class="insert"> value must comde from ( unreserved / pct-encoded ). Note that there</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> is no notation for supplying default values to list variables.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> A variable may appear in more than one expansion in a URI Template.</td><td> </td><td class="right"> A variable may appear in more than one expansion in a URI Template.</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0023" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> The value used for that variable <span class="delete">must</span> remain the same for every</td><td> </td><td class="rblock"> The value used for that variable <span class="insert">MUST</span> remain the same for every</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> template expansion when converting a URI Template into a URI.</td><td> </td><td class="right"> template expansion when converting a URI Template into a URI.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0024" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3</span>.2. Template Expansions</td><td> </td><td class="rblock"><span class="insert">4</span>.2. Template Expansions</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Template expansions are the parameterized components of a URI</td><td> </td><td class="right"> Template expansions are the parameterized components of a URI</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Template. A template expansion MUST match the 'expansion' rule.</td><td> </td><td class="right"> Template. A template expansion MUST match the 'expansion' rule.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> op = 1*ALPHA</td><td> </td><td class="right"> op = 1*ALPHA</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> arg = *(reserved / unreserved / pct-encoded)</td><td> </td><td class="right"> arg = *(reserved / unreserved / pct-encoded)</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0025" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> var = varname [ <span class="delete">'='</span> vardefault ]</td><td> </td><td class="rblock"> var = varname [ <span class="insert">"="</span> vardefault ]</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> vars = var [ *("," var) ]</td><td> </td><td class="right"> vars = var [ *("," var) ]</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> varname = (ALPHA / DIGIT)*(ALPHA / DIGIT / "." / "_" / "-" )</td><td> </td><td class="right"> varname = (ALPHA / DIGIT)*(ALPHA / DIGIT / "." / "_" / "-" )</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> vardefault = *(unreserved / pct-encoded)</td><td> </td><td class="right"> vardefault = *(unreserved / pct-encoded)</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> operator = "-" op "|" arg "|" vars</td><td> </td><td class="right"> operator = "-" op "|" arg "|" vars</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expansion = "{" ( var / operator ) "}"</td><td> </td><td class="right"> expansion = "{" ( var / operator ) "}"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0026" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.3.</span> URI Template Substitution</td><td> </td><td class="rblock"><span class="insert">4.3. Error Handling</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> During template substitution error conditions may arise. The exact</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> circumstances for those errors are described in Section 4.4. When an</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> error occurs the template processor MUST NOT return a URI. It is</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> language specific and beyond the scope of this document how the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> template processor signals that an error has occured and that a URI</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> will not be generated from the template.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4.4.</span> URI Template Substitution</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Template substitution is the process of turning a URI Template into a</td><td> </td><td class="right"> Template substitution is the process of turning a URI Template into a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> URI given definitions for the variables used in the template.</td><td> </td><td class="right"> URI given definitions for the variables used in the template.</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0027" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Substitution replaces each expansion with its calculated value.</td><td> </td><td class="rblock"> Substitution replaces each expansion with its calculated value. <span class="insert">A</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> template processor take two inputs, a URI Template and a set of</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> variables, and returns a URI-reference.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0028" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">Every expansion consists of either a</span> variable <span class="delete">('var') or an operator</span></td><td> </td><td class="rblock"> <span class="insert">Before substitution the template processor MUST convert every</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> expression. In</span> a <span class="delete">variable ('var') expansion, if</span> the <span class="delete">variable is</span></td><td> </td><td class="rblock"> variable <span class="insert">value into</span> a <span class="insert">sequence of characters in ( unreserved / pct-</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> defined</span> and <span class="delete">non-empty</span> then <span class="delete">substitute</span> the <span class="delete">value</span> of the <span class="delete">variable,</span></td><td> </td><td class="rblock"><span class="insert"> encoded ). The template processor does that using</span> the <span class="insert">following</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> otherwise substitute the default value. If no default</span> value is <span class="delete">given</span></td><td> </td><td class="rblock"><span class="insert"> algorithm: The template processor normalizes the string using NFKC,</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> then substitute with</span> the <span class="delete">empty string.</span></td><td> </td><td class="rblock"><span class="insert"> converts it to UTF-8 [RFC3629],</span> and then <span class="insert">every octet of</span> the <span class="insert">UTF-8</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> string that falls outside</span> of <span class="insert">( unreserved ) MUST be percent-encoded,</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> as per [RFC3986], section 2.1. For variables that are lists,</span> the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> <span class="insert">above algorithm is applied to each</span> value <span class="insert">in the list.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> The Unicode Standard [UNIV4] defines various equivalences between</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> sequences of characters for various purposes. Unicode Standard Annex</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> #15 [UTR15] defines various Normalization Forms for these</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> equivalences, in particular Normalization Form KC (NFKC,</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Compatibility Decomposition, followed by Canonical Composition).</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Since different Normalized Forms unicode strings will have different</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> UTF-8 represenations the only way to guarantee that template</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> processors will produce the same URI</span> is <span class="insert">to require a common</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Normalized Form.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Requiring that all characters outside of ( unreserved ) be percent</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> encoded means that the only characters outside of ( unreserved ) that</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> will appear in the generated URI-reference will come from outside the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> template expansions in the URI Template or from the argument of a</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> template expansion. This means that the designer of the URI Template</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> determines the placement of reserved characters in the resulting URI,</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> and thus the structure of</span> the <span class="insert">resulting generated URI-reference.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> If the expansion is an operator then the substitution value is</td><td> </td><td class="right"> If the expansion is an operator then the substitution value is</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> determined by the given operator. Each operator works only on the</td><td> </td><td class="right"> determined by the given operator. Each operator works only on the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> variables that are defined within their expansion.</td><td> </td><td class="right"> variables that are defined within their expansion.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0029" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.3.1.</span> The <span class="delete">'opt' operator</span></td><td> </td><td class="rblock"> The <span class="insert">result of substitution MUST match the URI-reference rule and</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> SHOULD also match any known rules for the scheme of the resulting</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> URI.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0030" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> If <span class="delete">the one or more of the variables are defined and non-empty</span> then</td><td> </td><td class="rblock"> If <span class="insert">a template processor encounters an operator that it does not</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">substitute</span> the <span class="delete">value</span> of <span class="delete">'arg', otherwise substitute the empty string.</span></td><td> </td><td class="rblock"><span class="insert"> understand</span> then <span class="insert">it MUST fail and MUST NOT produce a URI from</span> the <span class="insert">URI</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Template. The list</span> of <span class="insert">operators that a template processor knows is</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> not constrained by this specification, that is, later specifications</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> may add new operators.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0031" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.3.2. The 'neg'</span> operator</td><td> </td><td class="rblock"> <span class="insert">Every expansion consists of either a variable ('var') or an</span> operator</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> <span class="insert">expression ('operator'), and the rules for how to expand each of</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> these is given below. For every expansion a template MUST have at</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> least one variable name in the template expansion. It is an error if</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> no variables are supplied. All of the variables supplied to a</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> template expansion MAY be undefined and the expansion rules below</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> specify how to process the template expansion in that situation.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0032" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">If all</span> of the <span class="delete">variables are un-defined</span> or empty then substitute the</td><td> </td><td class="rblock"><span class="insert">4.4.1. ('var') substitution</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> In a variable ('var') expansion, if the variable is defined then</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> substitute the value</span> of the <span class="insert">variable, otherwise substitute the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> default value. If no default value is given then substitute with the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> empty string.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Example:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> foo := "fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{foo}" -> "fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{bar=wilma}" -> "wilma"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{baz}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4.4.2. The 'opt' operator</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> If each variable is undefined or an empty list then substitute the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> empty string, otherwise substitute the value of 'arg'.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Example:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> foo := "fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-opt|[email protected]|foo}" -> "[email protected]"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-opt|[email protected]|bar}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4.4.3. The 'neg' operator</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> If each variable is undefined</span> or <span class="insert">an</span> empty <span class="insert">list</span> then substitute the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> value of arg, otherwise substitute the empty string.</td><td> </td><td class="right"> value of arg, otherwise substitute the empty string.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0033" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.3.3. The 'prefix' operator</span></td><td> </td><td class="rblock"><span class="insert"> Example:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0034" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">The prefix operator MUST only have one variable in its expansion. If</span></td><td> </td><td class="rblock"> <span class="insert">foo := "fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> the variable is defined and non-empty then substitute the value of</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> arg followed by the value of the variable, otherwise substitute the</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> empty string.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0035" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.3.4. The 'append' operator</span></td><td> </td><td class="rblock"> <span class="insert">"{-neg|[email protected]|foo}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-neg|[email protected]|bar}" -> "[email protected]"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0036" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> The <span class="delete">append</span> operator <span class="delete">MUST only have one variable in its expansion. If</span></td><td> </td><td class="rblock"><span class="insert">4.4.4.</span> The <span class="insert">'prefix'</span> operator</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> the variable is defined and non-empty then substitute the value of</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> the variable followed by the value of arg, otherwise substitute the</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> empty string.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0037" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.3.5.</span> The <span class="delete">'join'</span> operator</td><td> </td><td class="rblock"> The <span class="insert">prefix</span> operator <span class="insert">MUST only have one variable in its expansion.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> More than one variable is an error condition. If the variable is</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> undefined or an empty list then substitute the empty string. If the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> variable is a defined non-list then substitute the value of arg</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> preceeded by the value of the variable. If the variable is a defined</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> list then substitute the concatenation of every list value preceeded</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> by the arg.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0038" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">For each variable that is defined and non-empty create a keyvalue</span></td><td> </td><td class="rblock"> <span class="insert">Example:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> string that is the concatenation of the variable name, "=", and the</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> variable value. Concatenate more than one keyvalue string with</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> intervening values of arg to create the substitution value.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0039" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.3.6.</span> The <span class="delete">'listjoin'</span> operator</td><td> </td><td class="rblock"> <span class="insert">foo := "fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> bar := ["fee", "fi", "fo", "fum"]</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> baz := []</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-prefix|/|foo}" -> "/fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-prefix|/|bar}" -> "/fee/fi/fo/fum"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-prefix|/|baz}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-prefix|/|qux}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4.4.5.</span> The <span class="insert">'suffix' operator</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> The prefix operator MUST only have one variable in its expansion.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> More than one variable is an error condition. If the variable is</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> undefined or an empty list then substitute the empty string. If the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> variable is a defined non-list then substitute the value of arg</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> followed by the value of the variable. If the variable is a defined</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> list then substitute the concatenation of every list value followed</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> by the arg.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Example:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> foo := "fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> bar := ["fee", "fi", "fo", "fum"]</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> baz := []</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-suffix|/|foo}" -> "fred/"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-suffix|/|bar}" -> "fee/fi/fo/fum/"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-suffix|/|baz}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-suffix|/|qux}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4.4.6. The 'join' operator</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Supplying a list variable to the join operator is an error. For each</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> variable that is defined and non-empty create a keyvalue string that</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> is the concatenation of the variable name, "=", and the variable</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> value. Concatenate more than one keyvalue string with intervening</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> values of arg to create the substitution value. The order of</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> variables MUST be preserved during substitution.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Example:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> foo := "fred"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> bar := "barney"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> baz := ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-join|&|foo,bar,baz,qux}" -> "foo=fred&bar=barney&baz="</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-join|&|bar}" -> "bar=barney"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-join|&|qux}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4.4.7. The 'list'</span> operator</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The listjoin operator MUST have only one variable in its expansion</td><td> </td><td class="right"> The listjoin operator MUST have only one variable in its expansion</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0040" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> and that variable must be a list. If the list is non-empty then</td><td> </td><td class="rblock"> and that variable must be a list. <span class="insert">More than one variable is an</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> substitute the concatenation of all the list members with <span class="delete">intevening</span></td><td> </td><td class="rblock"><span class="insert"> error.</span> If the list is non-empty then substitute the concatenation of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> values of arg.</td><td> </td><td class="rblock"> all the list members with <span class="insert">intervening</span> values of arg. <span class="insert">If the list is</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> empty or the variable is undefined them substitute the empty string.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0041" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">The result of substitution MUST match the URI-reference rule and</span></td><td> </td><td class="rblock"> <span class="insert">Example:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> SHOULD also match any known rules for the scheme of the resulting</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> URI.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0042" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">3.4.</span> Examples</td><td> </td><td class="rblock"> <span class="insert">foo := ["fred", "barney", "wilma"]</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> bar := ["a", "", "c"]</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> baz := ["betty"]</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> qux := []</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-list|/|foo}" -> "fred/barney/wilma"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-list|/|bar}" -> "a//c"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-list|/|baz}" -> "betty"</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-list|/|qux}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> "{-list|/|corge}" -> ""</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"></span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert">4.5.</span> Examples</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Given the following template variable names and values:</td><td> </td><td class="right"> Given the following template variable names and values:</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0043" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete"> +----------+</span>--------------------+</td><td> </td><td class="rblock"> <span class="insert">+---------+--------------</span>--------------------+</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | Name | Value |</td><td> </td><td class="right"> | Name | Value |</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0044" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">+----------+--------------------+</span></td><td> </td><td class="rblock"> <span class="insert">+---------+----------------------------------+</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> | a</span> | foo |</td><td> </td><td class="rblock"> | foo | <span class="insert">\u03d3</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">b</span> | bar |</td><td> </td><td class="rblock"> | bar | <span class="insert">fred |</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">data</span> | 10,20,30 |</td><td> </td><td class="rblock"> | <span class="insert">baz</span> | 10,20,30 |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">points</span> | <span class="delete">["10","20", "30"]</span> |</td><td> </td><td class="rblock"> | <span class="insert">qux</span> | <span class="insert">["10","20","30"]</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">list0</span> | [] |</td><td> </td><td class="rblock"> | <span class="insert">corge</span> | [] |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">str0</span> | |</td><td> </td><td class="rblock"> | <span class="insert">grault</span> | |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">reserved</span> | <span class="delete">:/?#[]@!$&'()*+,;=</span> |</td><td> </td><td class="rblock"> | <span class="insert">garply</span> | <span class="insert">a/b/c</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">u</span> | <span class="delete">\u2654\u2655</span> |</td><td> </td><td class="rblock"> | <span class="insert">waldo</span> | <span class="insert">ben & jerrys</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> | <span class="delete">a_b</span> | <span class="delete">baz</span> |</td><td> </td><td class="rblock"> | <span class="insert">fred</span> | <span class="insert">["fred", "", "wilma"] |</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">+----------+--------------------+</span></td><td> </td><td class="rblock"><span class="insert"> | plugh | ["\u017F\u0307", "\u0073\u0307"] |</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> | 1-a_b.c | 200</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> <span class="insert">+---------+----------------------------------+</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Table 1</td><td> </td><td class="right"> Table 1</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0045" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> The <span class="delete">name</span> 'foo' has not been defined, the value of <span class="delete">'str0'</span> is the empty</td><td> </td><td class="rblock"> The <span class="insert">variable</span> 'foo' <span class="insert">is the unicode character GREEK UPSILON WITH ACUTE</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">string, and both list0</span> and <span class="delete">points</span> are lists. <span class="delete">The variable 'u' is a</span></td><td> </td><td class="rblock"><span class="insert"> AND HOOK SYMBOL. This character was chosen because it is one of only</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> string of two unicode characters, the WHITE CHESS KING (0x2654) and</span></td><td> </td><td class="rblock"><span class="insert"> three characters that has a different normal form for each of the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> the WHITE CHESS QUEEN (0x2655).</span></td><td> </td><td class="rblock"><span class="insert"> four normalization forms (NFC, NFD, NFKC, NFKD). The name 'xyzzy'</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> has not been defined, the value of <span class="insert">'grault'</span> is the empty <span class="insert">string. The</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> variables qux, corge, fred,</span> and <span class="insert">plugh</span> are lists.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The following URI Templates will be expanded as shown:</td><td> </td><td class="right"> The following URI Templates will be expanded as shown:</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> ----</td><td> </td><td class="right"> ----</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0046" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/?q={a}</span></td><td> </td><td class="rblock"> <span class="insert">http://example.org/?q={bar}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/?q=foo</span></td><td> </td><td class="rblock"><span class="insert"> http://example.org/?q=fred</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"></span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/{foo}</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"></span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> relative/{reserved}/</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> relative/%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D/</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"></span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/{foo=fred}</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/fred</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"></span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/{foo=%25}/</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/%25/</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0047" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> /{<span class="delete">-prefix|#|foo</span>}</td><td> </td><td class="rblock"> /{<span class="insert">xyzzy</span>}</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> /</td><td> </td><td class="right"> /</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0048" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">./{-prefix|#|str0}</span></td><td> </td><td class="rblock"> <span class="insert">http://example.org/?{-join|&|foo,bar,xyzzy,baz}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> ./</span></td><td> </td><td class="rblock"><span class="insert"> http://example.org/?foo=%CE%8E&bar=fred&baz=10%2C20%2C30</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0049" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">/{-append|/|a}{-opt|data|points}{-neg|@|a}{-prefix|#|b}</span></td><td> </td><td class="rblock"> <span class="insert">http://example.org/?d={-list|,|qux}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> /foo/data#bar</span></td><td> </td><td class="rblock"><span class="insert"> http://example.org/?d=10,20,30</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0050" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/q={u}</span></td><td> </td><td class="rblock"> <span class="insert">http://example.org/?d={-list|&d=|qux}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/q=%E2%99%94%E2%99%95</span></td><td> </td><td class="rblock"><span class="insert"> http://example.org/?d=10&d=20&d=30</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0051" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/?{-join|&|a,data}</span></td><td> </td><td class="rblock"> <span class="insert">http://example.org/{bar}{bar}/{garply}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/?a=foo&data=10%2C20%2C30</span></td><td> </td><td class="rblock"><span class="insert"> http://example.org/fredfred/a%2Fb%2Fc</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0052" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/?d={-listjoin|,|points}&{-join|&|a,b}</span></td><td> </td><td class="rblock"> <span class="insert">http://example.org/{bar}{-prefix|/|fred}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/?d=10,20,30&a=foo&b=bar</span></td><td> </td><td class="rblock"><span class="insert"> http://example.org/fred/fred//wilma</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0053" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/?d={-listjoin|,|list0}&{-join|&|foo}</span></td><td> </td><td class="rblock"> <span class="insert">{-neg|:|corge}{-suffix|:|plugh}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/?d=&</span></td><td> </td><td class="rblock"><span class="insert"> :%E1%B9%A1:%E1%B9%A1:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0054" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/?d={-listjoin|&d=|points}</span></td><td> </td><td class="rblock"> <span class="insert">../{waldo}/</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/?d=10&d=20&d=30</span></td><td> </td><td class="rblock"><span class="insert"> ../ben%20%26%20jerrys/</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0055" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/{a}{b}/{a_b}</span></td><td> </td><td class="rblock"> <span class="insert">telnet:192.0.2.16{-opt|:80|grault}</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/foobar/baz</span></td><td> </td><td class="rblock"><span class="insert"> telnet:192.0.2.16:80</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0056" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">http://example.org/{a}{-prefix|/-/|a}/</span></td><td> </td><td class="rblock"> <span class="insert">:{1-a_b.c}:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> http://example.org/foo/-/foo/</span></td><td> </td><td class="rblock"><span class="insert"> :200:</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> ----</td><td> </td><td class="right"> ----</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0057" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">4</span>. Security Considerations</td><td> </td><td class="rblock"><span class="insert">5</span>. Security Considerations</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> A URI Template does not contain active or executable content. Other</td><td> </td><td class="right"> A URI Template does not contain active or executable content. Other</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> security considerations are the same as those for URIs, see section 7</td><td> </td><td class="right"> security considerations are the same as those for URIs, see section 7</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> of RFC3986.</td><td> </td><td class="right"> of RFC3986.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0058" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">5</span>. IANA Considerations</td><td> </td><td class="rblock"><span class="insert">6</span>. IANA Considerations</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> In common with RFC3986, URI scheme names form a registered namespace</td><td> </td><td class="right"> In common with RFC3986, URI scheme names form a registered namespace</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> that is managed by IANA according to the procedures defined in</td><td> </td><td class="right"> that is managed by IANA according to the procedures defined in</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [RFC4395]. No IANA actions are required by this document.</td><td> </td><td class="right"> [RFC4395]. No IANA actions are required by this document.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0059" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">6</span>. Appendix A - Parsing URI Template Expansions</td><td> </td><td class="rblock"><span class="insert">7</span>. Appendix A - Parsing URI Template Expansions</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Parsing a valid URI Template expansion does not require building a</td><td> </td><td class="right"> Parsing a valid URI Template expansion does not require building a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> parser from the given ABNF. Instead, the set of allowed characters</td><td> </td><td class="right"> parser from the given ABNF. Instead, the set of allowed characters</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> in each part of URI Template expansion has been chosen to avoid</td><td> </td><td class="right"> in each part of URI Template expansion has been chosen to avoid</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> complex parsing, and breaking an expansion into its component parts</td><td> </td><td class="right"> complex parsing, and breaking an expansion into its component parts</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> can be achieved by a series of splits of the character string.</td><td> </td><td class="right"> can be achieved by a series of splits of the character string.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Here is example Python code that parses a URI Template expansion and</td><td> </td><td class="right"> Here is example Python code that parses a URI Template expansion and</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> returns the operator, argument, and variables as a tuple. The</td><td> </td><td class="right"> returns the operator, argument, and variables as a tuple. The</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> variables are returned as a dictionary of variable names mapped to</td><td> </td><td class="right"> variables are returned as a dictionary of variable names mapped to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno"></td></tr>
<tr bgcolor="gray" ><td></td><th><a name="part-l6" /><small>skipping to change at</small><em> page 11, line 10</em></th><th> </th><th><a name="part-r6" /><small>skipping to change at</small><em> page 13, line 44</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> return (op, arg, variables)</td><td> </td><td class="right"> return (op, arg, variables)</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> And here is an example of the parse_expansion() function being used.</td><td> </td><td class="right"> And here is an example of the parse_expansion() function being used.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> >>> parse_expansion("-join|&|a,b,c=1")</td><td> </td><td class="right"> >>> parse_expansion("-join|&|a,b,c=1")</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> ('join', '&', {'a': None, 'c': '1', 'b': None})</td><td> </td><td class="right"> ('join', '&', {'a': None, 'c': '1', 'b': None})</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> >>> parse_expansion("c=1")</td><td> </td><td class="right"> >>> parse_expansion("c=1")</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> (None, None, {'c': '1'})</td><td> </td><td class="right"> (None, None, {'c': '1'})</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0060" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">7</span>. Normative References</td><td> </td><td class="rblock"><span class="insert">8</span>. Normative References</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [ASCII] American National Standards Institute, "Coded Character</td><td> </td><td class="right"> [ASCII] American National Standards Institute, "Coded Character</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Set - 7-bit American Standard Code for Information</td><td> </td><td class="right"> Set - 7-bit American Standard Code for Information</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Interchange", ANSI X3.4, 1986.</td><td> </td><td class="right"> Interchange", ANSI X3.4, 1986.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate</td><td> </td><td class="right"> [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Requirement Levels", BCP 14, RFC 2119, March 1997.</td><td> </td><td class="right"> Requirement Levels", BCP 14, RFC 2119, March 1997.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [RFC2978] Freed, N. and J. Postel, "IANA Charset Registration</td><td> </td><td class="right"> [RFC2978] Freed, N. and J. Postel, "IANA Charset Registration</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Procedures", BCP 19, RFC 2978, October 2000.</td><td> </td><td class="right"> Procedures", BCP 19, RFC 2978, October 2000.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO</td><td> </td><td class="right"> [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 10646", STD 63, RFC 3629, November 2003.</td><td> </td><td class="right"> 10646", STD 63, RFC 3629, November 2003.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform</td><td> </td><td class="right"> [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Resource Identifier (URI): Generic Syntax", STD 66,</td><td> </td><td class="right"> Resource Identifier (URI): Generic Syntax", STD 66,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> RFC 3986, January 2005.</td><td> </td><td class="right"> RFC 3986, January 2005.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0061" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">[RFC4234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Specifications: ABNF", RFC 4234, October 2005.</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> </td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [RFC4395] Hansen, T., Hardie, T., and L. Masinter, "Guidelines and</td><td> </td><td class="right"> [RFC4395] Hansen, T., Hardie, T., and L. Masinter, "Guidelines and</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Registration Procedures for New URI Schemes", BCP 115,</td><td> </td><td class="right"> Registration Procedures for New URI Schemes", BCP 115,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> RFC 4395, February 2006.</td><td> </td><td class="right"> RFC 4395, February 2006.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0062" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> <span class="insert">[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Specifications: ABNF", STD 68, RFC 5234, January 2008.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> </td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [UNIV4] The Unicode Consortium, "The Unicode Standard, Version</td><td> </td><td class="right"> [UNIV4] The Unicode Consortium, "The Unicode Standard, Version</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 4.0.1, defined by: The Unicode Standard, Version 4.0</td><td> </td><td class="right"> 4.0.1, defined by: The Unicode Standard, Version 4.0</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> (Reading, MA, Addison-Wesley, 2003. ISBN 0-321-18578-1),</td><td> </td><td class="right"> (Reading, MA, Addison-Wesley, 2003. ISBN 0-321-18578-1),</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> as amended by Unicode 4.0.1</td><td> </td><td class="right"> as amended by Unicode 4.0.1</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> (http://www.unicode.org/versions/Unicode4.0.1/)",</td><td> </td><td class="right"> (http://www.unicode.org/versions/Unicode4.0.1/)",</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> March 2004.</td><td> </td><td class="right"> March 2004.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [UTR15] Davis, M. and M. Duerst, "Unicode Normalization Forms",</td><td> </td><td class="right"> [UTR15] Davis, M. and M. Duerst, "Unicode Normalization Forms",</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Unicode Standard Annex # 15, April 2003.</td><td> </td><td class="right"> Unicode Standard Annex # 15, April 2003.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [1] <http://lists.w3.org/Archives/Public/uri/></td><td> </td><td class="right"> [1] <http://lists.w3.org/Archives/Public/uri/></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Appendix A. Contributors</td><td> </td><td class="right">Appendix A. Contributors</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The following people made significant contributions to this</td><td> </td><td class="right"> The following people made significant contributions to this</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0063" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> specification: DeWitt <span class="delete">Clinton</span> and James Snell.</td><td> </td><td class="rblock"> specification: <span class="insert">Michaeljohn Clement,</span> DeWitt <span class="insert">Clinton, John Cowan, James</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> H. Manger,</span> and James Snell.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Appendix B. Revision History</td><td> </td><td class="right">Appendix B. Revision History</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0064" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> <span class="insert">03 - Added more examples. Introduced error conditions and defined</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> their handling. Changed listjoin to list. Changed -append to</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> -suffix, and allowed -prefix and -suffix to accept list variables.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"><span class="insert"> Clarified the handling of unicode.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> </td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 02 - Added operators and came up with coherent percent-encoding and</td><td> </td><td class="right"> 02 - Added operators and came up with coherent percent-encoding and</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> reserved character story. Added large examples section which is</td><td> </td><td class="right"> reserved character story. Added large examples section which is</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> extracted and tested against the implementation.</td><td> </td><td class="right"> extracted and tested against the implementation.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 01</td><td> </td><td class="right"> 01</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 00 - Initial Revision.</td><td> </td><td class="right"> 00 - Initial Revision.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Authors' Addresses</td><td> </td><td class="right">Authors' Addresses</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno"></td></tr>
<tr bgcolor="gray" ><td></td><th><a name="part-l7" /><small>skipping to change at</small><em> page 13, line 7</em></th><th> </th><th><a name="part-r7" /><small>skipping to change at</small><em> page 16, line 7</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> URI: http://mnot.net/</td><td> </td><td class="right"> URI: http://mnot.net/</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> David Orchard</td><td> </td><td class="right"> David Orchard</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> BEA Systems, Inc.</td><td> </td><td class="right"> BEA Systems, Inc.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Email: [email protected]</td><td> </td><td class="right"> Email: [email protected]</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> URI: http://bea.com/</td><td> </td><td class="right"> URI: http://bea.com/</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left">Full Copyright Statement</td><td> </td><td class="right">Full Copyright Statement</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0065" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Copyright (C) The IETF Trust (200<span class="delete">7</span>).</td><td> </td><td class="rblock"> Copyright (C) The IETF Trust (200<span class="insert">8</span>).</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> This document is subject to the rights, licenses and restrictions</td><td> </td><td class="right"> This document is subject to the rights, licenses and restrictions</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> contained in BCP 78, and except as set forth therein, the authors</td><td> </td><td class="right"> contained in BCP 78, and except as set forth therein, the authors</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> retain all their rights.</td><td> </td><td class="right"> retain all their rights.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> This document and the information contained herein are provided on an</td><td> </td><td class="right"> This document and the information contained herein are provided on an</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS</td><td> </td><td class="right"> "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND</td><td> </td><td class="right"> OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS</td><td> </td><td class="right"> THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF</td><td> </td><td class="right"> OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno"></td></tr>
<tr bgcolor="gray" ><td></td><th><a name="part-l8" /><small>skipping to change at</small><em> page 13, line 44</em></th><th> </th><th><a name="part-r8" /><small>skipping to change at</small><em> line 695</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> attempt made to obtain a general license or permission for the use of</td><td> </td><td class="right"> attempt made to obtain a general license or permission for the use of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> such proprietary rights by implementers or users of this</td><td> </td><td class="right"> such proprietary rights by implementers or users of this</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> specification can be obtained from the IETF on-line IPR repository at</td><td> </td><td class="right"> specification can be obtained from the IETF on-line IPR repository at</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://www.ietf.org/ipr.</td><td> </td><td class="right"> http://www.ietf.org/ipr.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"></td><td> </td><td class="right"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> The IETF invites any interested party to bring to its attention any</td><td> </td><td class="right"> The IETF invites any interested party to bring to its attention any</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> copyrights, patents or patent applications, or other proprietary</td><td> </td><td class="right"> copyrights, patents or patent applications, or other proprietary</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> rights that may cover technology that may be required to implement</td><td> </td><td class="right"> rights that may cover technology that may be required to implement</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> this standard. Please address the information to the IETF at</td><td> </td><td class="right"> this standard. Please address the information to the IETF at</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> [email protected].</td><td> </td><td class="right"> [email protected].</td><td class="lineno" valign="top"></td></tr>
<tr><td><a name="diff0066" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> </td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete">Acknowledgment</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"></span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Funding for the RFC Editor function is provided by the IETF</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> Administrative Support Activity (IASA).</span></td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td></td><td class="left"></td><td> </td><td class="right"></td><td></td></tr>
<tr bgcolor="gray"><th colspan="5" align="center"><a name="end"> End of changes. 66 change blocks. </a></th></tr>
<tr class="stats"><td></td><th><i>181 lines changed or deleted</i></th><th><i> </i></th><th><i>316 lines changed or added</i></th><td></td></tr>
<tr><td colspan="5" align="center" class="small"><br/>This html diff was produced by rfcdiff 1.34. The latest version is available from <a href="http://www.tools.ietf.org/tools/rfcdiff/" >http://tools.ietf.org/tools/rfcdiff/</a> </td></tr>
</table>
</body>
</html>