forked from jcgregorio/uri-templates
-
Notifications
You must be signed in to change notification settings - Fork 2
/
draft-gregorio-uritemplate-08-from-7.diff.html
1293 lines (1292 loc) · 289 KB
/
draft-gregorio-uritemplate-08-from-7.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
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!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: Darwin simak 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug 9 20:54:00 PDT 2011; root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64 -->
<!-- Using awk: /usr/local/bin/gawk: GNU Awk 3.1.8 -->
<!-- Using diff: /usr/bin/diff: diff (GNU diffutils) 2.8.1 -->
<!-- Using wdiff: /usr/local/bin/wdiff: wdiff (GNU wdiff) 0.6.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-07.txt - draft-gregorio-uritemplate-08.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-07.txt </th><th> </th><th> draft-gregorio-uritemplate-08.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</td><td> </td><td class="right">Network Working Group J. Gregorio</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 R. Fielding</td><td> </td><td class="right">Intended status: Standards Track R. Fielding</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">March 29, 2012</span> Adobe</td><td> </td><td class="rblock">Expires: <span class="insert">July 29, 2012 </span> Adobe</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> M. Hadley</td><td> </td><td class="right"> M. Hadley</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> MITRE</td><td> </td><td class="right"> MITRE</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> M. Nottingham</td><td> </td><td class="right"> M. Nottingham</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Rackspace</td><td> </td><td class="right"> Rackspace</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"> Salesforce.com</td><td> </td><td class="right"> Salesforce.com</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">Sep 26, 2011</span></td><td> </td><td class="rblock"> <span class="insert">Jan 26, 2012</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">7</span></td><td> </td><td class="rblock"> draft-gregorio-uritemplate-0<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">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 for describing a</td><td> </td><td class="right"> A URI Template is a compact sequence of characters for describing a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> range of Uniform Resource Identifiers through variable expansion.</td><td> </td><td class="right"> range of Uniform Resource Identifiers through variable expansion.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> This specification defines the URI Template syntax and the process</td><td> </td><td class="right"> This specification defines the URI Template syntax and the process</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> for expanding a URI Template into a URI reference, along with</td><td> </td><td class="right"> for expanding a URI Template into a URI reference, along with</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> guidelines for the use of URI Templates on the Internet.</td><td> </td><td class="right"> guidelines for the use of URI Templates on the Internet.</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"><span class="delete">Editorial Note (to be removed by RFC Editor)</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"> To provide feedback on this Internet-Draft, join the W3C URI mailing</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"> list (http://lists.w3.org/Archives/Public/uri/) [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="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">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"> This Internet-Draft is submitted in full conformance with the</td><td> </td><td class="right"> This Internet-Draft is submitted in full conformance with the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> provisions of BCP 78 and BCP 79.</td><td> </td><td class="right"> provisions of BCP 78 and 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). Note that other groups may also distribute</td><td> </td><td class="right"> Task Force (IETF). Note that other groups may also distribute</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> working documents as Internet-Drafts. The list of current Internet-</td><td> </td><td class="right"> working documents as Internet-Drafts. The list of current Internet-</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Drafts is at http://datatracker.ietf.org/drafts/current/.</td><td> </td><td class="right"> Drafts is at http://datatracker.ietf.org/drafts/current/.</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 draft documents valid for a maximum of six months</td><td> </td><td class="right"> Internet-Drafts are draft documents valid for a maximum of six months</td><td class="lineno" valign="top"></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><a name="diff0005" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> This Internet-Draft will expire on <span class="delete">March</span> 29, 2012.</td><td> </td><td class="rblock"> This Internet-Draft will expire on <span class="insert">July</span> 29, 2012.</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">Copyright Notice</td><td> </td><td class="right">Copyright Notice</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"> Copyright (c) <span class="delete">2011</span> IETF Trust and the persons identified as the</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"> Copyright (c) <span class="insert">2012</span> IETF Trust and the persons identified as the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> document authors. All rights reserved.</td><td> </td><td class="right"> document authors. All rights reserved.</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 BCP 78 and the IETF Trust's Legal</td><td> </td><td class="right"> This document is subject to BCP 78 and the IETF Trust's Legal</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Provisions Relating to IETF Documents</td><td> </td><td class="right"> Provisions Relating to IETF Documents</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> (http://trustee.ietf.org/license-info) in effect on the date of</td><td> </td><td class="right"> (http://trustee.ietf.org/license-info) in effect on the date of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> publication of this document. Please review these documents</td><td> </td><td class="right"> publication of this document. Please review these documents</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> carefully, as they describe your rights and restrictions with respect</td><td> </td><td class="right"> carefully, as they describe your rights and restrictions with respect</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> to this document. Code Components extracted from this document must</td><td> </td><td class="right"> to this document. Code Components extracted from this document must</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> include Simplified BSD License text as described in Section 4.e of</td><td> </td><td class="right"> include Simplified BSD License text as described in Section 4.e of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the Trust Legal Provisions and are provided without warranty as</td><td> </td><td class="right"> the Trust Legal Provisions and are provided without warranty as</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 2, line 34</em></th><th> </th><th><a name="part-r2" /><small>skipping to change at</small><em> page 2, line 29</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 1.5. Notational Conventions . . . . . . . . . . . . . . . . . . 11</td><td> </td><td class="right"> 1.5. Notational Conventions . . . . . . . . . . . . . . . . . . 11</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 1.6. Character Encoding and Unicode Normalization . . . . . . . 12</td><td> </td><td class="right"> 1.6. Character Encoding and Unicode Normalization . . . . . . . 12</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 2. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13</td><td> </td><td class="right"> 2. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 2.1. Literals . . . . . . . . . . . . . . . . . . . . . . . . . 13</td><td> </td><td class="right"> 2.1. Literals . . . . . . . . . . . . . . . . . . . . . . . . . 13</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 2.2. Expressions . . . . . . . . . . . . . . . . . . . . . . . 13</td><td> </td><td class="right"> 2.2. Expressions . . . . . . . . . . . . . . . . . . . . . . . 13</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 2.3. Variables . . . . . . . . . . . . . . . . . . . . . . . . 14</td><td> </td><td class="right"> 2.3. Variables . . . . . . . . . . . . . . . . . . . . . . . . 14</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 2.4. Value Modifiers . . . . . . . . . . . . . . . . . . . . . 15</td><td> </td><td class="right"> 2.4. Value Modifiers . . . . . . . . . . . . . . . . . . . . . 15</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 2.4.1. Prefix Values . . . . . . . . . . . . . . . . . . . . 15</td><td> </td><td class="right"> 2.4.1. Prefix Values . . . . . . . . . . . . . . . . . . . . 15</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 2.4.2. Composite Values . . . . . . . . . . . . . . . . . . . 16</td><td> </td><td class="right"> 2.4.2. Composite Values . . . . . . . . . . . . . . . . . . . 16</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 3. Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . 17</td><td> </td><td class="right"> 3. Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . 17</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"> 3.1. Literal Expansion . . . . . . . . . . . . . . . . . . . . 1<span class="delete">7</span></td><td> </td><td class="rblock"> 3.1. Literal Expansion . . . . . . . . . . . . . . . . . . . . 1<span class="insert">8</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> 3.2. Expression Expansion . . . . . . . . . . . . . . . . . . . 18</td><td> </td><td class="right"> 3.2. Expression Expansion . . . . . . . . . . . . . . . . . . . 18</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"> 3.2.1. Variable Expansion . . . . . . . . . . . . . . . . . . <span class="delete">18</span></td><td> </td><td class="rblock"> 3.2.1. Variable Expansion . . . . . . . . . . . . . . . . . . <span class="insert">19</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.2. Simple String Expansion: {var} . . . . . . . . . . . . <span class="delete">20</span></td><td> </td><td class="rblock"> 3.2.2. Simple String Expansion: {var} . . . . . . . . . . . . <span class="insert">21</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.3. Reserved expansion: {+var} . . . . . . . . . . . . . . <span class="delete">20</span></td><td> </td><td class="rblock"> 3.2.3. Reserved expansion: {+var} . . . . . . . . . . . . . . <span class="insert">22</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.4. Fragment expansion: {#var} . . . . . . . . . . . . . . <span class="delete">21</span></td><td> </td><td class="rblock"> 3.2.4. Fragment expansion: {#var} . . . . . . . . . . . . . . <span class="insert">23</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.5. Label expansion with dot-prefix: {.var} . . . . . . . <span class="delete">22</span></td><td> </td><td class="rblock"> 3.2.5. Label expansion with dot-prefix: {.var} . . . . . . . <span class="insert">24</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.6. Path segment expansion: {/var} . . . . . . . . . . . . <span class="delete">22</span></td><td> </td><td class="rblock"> 3.2.6. Path segment expansion: {/var} . . . . . . . . . . . . <span class="insert">24</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.7. Path-style parameter expansion: {;var} . . . . . . . . <span class="delete">23</span></td><td> </td><td class="rblock"> 3.2.7. Path-style parameter expansion: {;var} . . . . . . . . <span class="insert">25</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.8. Form-style query expansion: {?var} . . . . . . . . . . <span class="delete">24</span></td><td> </td><td class="rblock"> 3.2.8. Form-style query expansion: {?var} . . . . . . . . . . <span class="insert">26</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 3.2.9. Form-style query continuation: {&var} . . . . . . . . <span class="delete">24</span></td><td> </td><td class="rblock"> 3.2.9. Form-style query continuation: {&var} . . . . . . . . <span class="insert">26</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 4. Security Considerations . . . . . . . . . . . . . . . . . . . <span class="delete">25</span></td><td> </td><td class="rblock"> 4. Security Considerations . . . . . . . . . . . . . . . . . . . <span class="insert">27</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . <span class="delete">25</span></td><td> </td><td class="rblock"> 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . <span class="insert">28</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . <span class="delete">25</span></td><td> </td><td class="rblock"> 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . <span class="insert">28</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> 7. Normative References . . . . . . . . . . . . . . . . . . . . . <span class="delete">25</span></td><td> </td><td class="rblock"> 7. <span class="insert">References . . . . . . . . . . . . . . . . . . . . . . . . . . 28</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Appendix A. Implementation Hints . . . . . . . . . . . . . . . . <span class="delete">26</span></td><td> </td><td class="rblock"><span class="insert"> 7.1.</span> Normative References . . . . . . . . . . . . . . . . . . . <span class="insert">28</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . <span class="delete">29</span></td><td> </td><td class="rblock"><span class="insert"> 7.2. Informative References</span> . . <span class="insert">. . . . . . . . . . . . . . . . 29</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. Implementation Hints . . . . . . . . . . . . . . . . <span class="insert">29</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">32</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">1.1. Overview</td><td> </td><td class="right">1.1. Overview</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 Uniform Resource Identifier (URI) [RFC3986] is often used to</td><td> </td><td class="right"> A Uniform Resource Identifier (URI) [RFC3986] is often used to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> identify a specific resource within a common space of similar</td><td> </td><td class="right"> identify a specific resource within a common space of similar</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">resources.</span> For example, personal web spaces are often delegated</td><td> </td><td class="rblock"> <span class="insert">resources (informally, a "URI space").</span> For example, personal web</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> using a common pattern, such as</td><td> </td><td class="rblock"> spaces are often delegated using a common pattern, such as</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://example.com/~fred/</td><td> </td><td class="right"> http://example.com/~fred/</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://example.com/~mark/</td><td> </td><td class="right"> http://example.com/~mark/</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"> or a set of dictionary entries might be grouped in a hierarchy by the</td><td> </td><td class="right"> or a set of dictionary entries might be grouped in a hierarchy by the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> first letter of the term, as in</td><td> </td><td class="right"> first letter of the term, as in</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://example.com/dictionary/c/cat</td><td> </td><td class="right"> http://example.com/dictionary/c/cat</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://example.com/dictionary/d/dog</td><td> </td><td class="right"> http://example.com/dictionary/d/dog</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"> or a service interface might be invoked with various user input in a</td><td> </td><td class="right"> or a service interface might be invoked with various user input in a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> common pattern, as in</td><td> </td><td class="right"> common pattern, as in</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://example.com/search?q=cat&lang=en</td><td> </td><td class="right"> http://example.com/search?q=cat&lang=en</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://example.com/search?q=chien&lang=fr</td><td> </td><td class="right"> http://example.com/search?q=chien&lang=fr</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"></td><td> </td><td class="rblock"> <span class="insert">A URI Template is a compact sequence of characters for describing 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"> range of Uniform Resource Identifiers through variable 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"> </td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> URI Templates provide a mechanism for abstracting a space of resource</td><td> </td><td class="right"> URI Templates provide a mechanism for abstracting a space of resource</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> identifiers such that the variable parts can be easily identified and</td><td> </td><td class="right"> identifiers such that the variable parts can be easily identified and</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> described. URI templates can have many uses, including discovery of</td><td> </td><td class="right"> described. URI templates can have many uses, including discovery of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> available services, configuring resource mappings, defining computed</td><td> </td><td class="right"> available services, configuring resource mappings, defining computed</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> links, specifying interfaces, and other forms of programmatic</td><td> </td><td class="right"> links, specifying interfaces, and other forms of programmatic</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> interaction with resources. For example, the above resources could</td><td> </td><td class="right"> interaction with resources. For example, the above resources could</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> be described by the following URI templates:</td><td> </td><td class="right"> be described by the following URI templates:</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://example.com/~{username}/</td><td> </td><td class="right"> http://example.com/~{username}/</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> http://example.com/dictionary/{term:1}/{term}</td><td> </td><td class="right"> http://example.com/dictionary/{term:1}/{term}</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 4, line 50</em></th><th> </th><th><a name="part-r3" /><small>skipping to change at</small><em> page 5, line 4</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"> then the expansion of the above URI Template is</td><td> </td><td class="right"> then the expansion of the above 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/foo?query=mycelium&number=100</td><td> </td><td class="right"> http://www.example.com/foo?query=mycelium&number=100</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"> Alternatively, if 'query' is undefined, then the expansion would be</td><td> </td><td class="right"> Alternatively, if 'query' is undefined, then the expansion would be</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/foo?number=100</td><td> </td><td class="right"> http://www.example.com/foo?number=100</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"> or if both variables are undefined, then it would be</td><td> </td><td class="right"> or if both variables are undefined, then it would be</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"> </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"> http://www.example.com/foo</td><td> </td><td class="right"> http://www.example.com/foo</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"></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"> A URI Template may be provided in absolute form, as in the examples</td><td> </td><td class="right"> A URI Template may be provided in absolute form, as in the examples</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"> above, or in relative form. A template <span class="delete">MUST be</span> expanded before the</td><td> </td><td class="rblock"> above, or in relative form. A template <span class="insert">is</span> expanded before the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> resulting reference <span class="delete">can be</span> resolved from relative to absolute form.</td><td> </td><td class="rblock"> resulting reference <span class="insert">is</span> resolved from relative to absolute form.</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"> Although the URI syntax is used for the result, the template string</td><td> </td><td class="right"> Although the URI syntax is used for the result, the template string</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> is allowed to contain the broader set of characters that can be found</td><td> </td><td class="right"> is allowed to contain the broader set of characters that can be found</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> in IRI references [RFC3987]. A URI Template is therefore also an IRI</td><td> </td><td class="right"> in IRI references [RFC3987]. A URI Template is therefore also an IRI</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> template, and the result of template processing can be transformed to</td><td> </td><td class="right"> template, and the result of template processing can be transformed to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> an IRI by following the process defined in Section 3.2 of [RFC3987].</td><td> </td><td class="right"> an IRI by following the process defined in Section 3.2 of [RFC3987].</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. Levels and Expression Types</td><td> </td><td class="right">1.2. Levels and Expression Types</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 Templates are similar to a macro language with a fixed set of</td><td> </td><td class="right"> URI Templates are similar to a macro language with a fixed set of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> macro definitions: the expression type determines the expansion</td><td> </td><td class="right"> macro definitions: the expression type determines the expansion</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> process. The default expression type is simple string expansion,</td><td> </td><td class="right"> process. The default expression type is simple string expansion,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> wherein a single named variable is replaced by its value as a string</td><td> </td><td class="right"> wherein a single named variable is replaced by its value as a string</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"> after <span class="delete">UTF-8 encoding the characters and then</span> pct-encoding any <span class="delete">octets</span></td><td> </td><td class="rblock"> after pct-encoding any <span class="insert">characters</span> not in the <span class="insert">set of</span> unreserved <span class="insert">URI</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> that are</span> not in the unreserved <span class="delete">set.</span></td><td> </td><td class="rblock"><span class="insert"> characters (Section 1.5).</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"> Since most template processors implemented prior to this</td><td> </td><td class="right"> Since most template processors implemented prior to this</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> specification have only implemented the default expression type, we</td><td> </td><td class="right"> specification have only implemented the default expression type, we</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> refer to these as Level 1 templates.</td><td> </td><td class="right"> refer to these as Level 1 templates.</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"> | Level 1 examples, with variables having values of |</td><td> </td><td class="right"> | Level 1 examples, with variables having values of |</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"> | var := "value" |</td><td> </td><td class="right"> | var := "value" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | hello := "Hello World!" |</td><td> </td><td class="right"> | hello := "Hello World!" |</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 5, line 43</em></th><th> </th><th><a name="part-r4" /><small>skipping to change at</small><em> page 5, line 45</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"> | Op Expression Expansion |</td><td> </td><td class="right"> | Op Expression 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 class="lineno" valign="top"></td><td class="left"> | | Simple string expansion (Sec 3.2.2) |</td><td> </td><td class="right"> | | Simple string expansion (Sec 3.2.2) |</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"> | | {var} value |</td><td> </td><td class="right"> | | {var} value |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {hello} Hello%20World%21 |</td><td> </td><td class="right"> | | {hello} Hello%20World%21 |</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"> Level 2 templates add the plus ("+") operator, for expansion of</td><td> </td><td class="right"> Level 2 templates add the plus ("+") operator, for expansion of</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"> values that are allowed to include reserved <span class="delete">characters,</span> and the</td><td> </td><td class="rblock"> values that are allowed to include reserved <span class="insert">URI characters</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> crosshatch ("#") operator for expansion of fragment identifiers.</td><td> </td><td class="rblock"><span class="insert"> (Section 1.5),</span> and the crosshatch ("#") operator for expansion of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> fragment identifiers.</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"> | Level 2 examples, with variables having values of |</td><td> </td><td class="right"> | Level 2 examples, with variables having values of |</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"> | var := "value" |</td><td> </td><td class="right"> | var := "value" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | hello := "Hello World!" |</td><td> </td><td class="right"> | hello := "Hello World!" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | path := "/foo/bar" |</td><td> </td><td class="right"> | path := "/foo/bar" |</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"> | Op Expression Expansion |</td><td> </td><td class="right"> | Op Expression Expansion |</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 6, line 28</em></th><th> </th><th><a name="part-r5" /><small>skipping to change at</small><em> page 6, line 28</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {+hello} Hello%20World! |</td><td> </td><td class="right"> | | {+hello} Hello%20World! |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {+path}/here /foo/bar/here |</td><td> </td><td class="right"> | | {+path}/here /foo/bar/here |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | here?ref={+path} here?ref=/foo/bar |</td><td> </td><td class="right"> | | here?ref={+path} here?ref=/foo/bar |</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"> | # | Fragment expansion, crosshatch-prefixed (Sec 3.2.4) |</td><td> </td><td class="right"> | # | Fragment expansion, crosshatch-prefixed (Sec 3.2.4) |</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"> | | X{#var} X#value |</td><td> </td><td class="right"> | | X{#var} X#value |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | X{#hello} X#Hello%20World! |</td><td> </td><td class="right"> | | X{#hello} X#Hello%20World! |</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="diff0016" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Level 3 templates add more complex operators for <span class="delete">lists of comma-</span></td><td> </td><td class="rblock"> Level 3 templates <span class="insert">allow multiple variables per expression, each</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> separated values,</span> dot-prefixed labels, slash-prefixed path segments,</td><td> </td><td class="rblock"><span class="insert"> separated by a comma, and</span> add more complex operators for dot-prefixed</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> semicolon-prefixed path parameters, and the forms-style construction</td><td> </td><td class="rblock"> labels, slash-prefixed path segments, semicolon-prefixed path</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> of a query syntax consisting of name=value pairs that are separated</td><td> </td><td class="rblock"> parameters, and the forms-style construction of a query syntax</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> by an ampersand character.</td><td> </td><td class="rblock"> consisting of name=value pairs that are separated by an ampersand</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> character.</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"> | Level 3 examples, with variables having values of |</td><td> </td><td class="right"> | Level 3 examples, with variables having values of |</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"> | var := "value" |</td><td> </td><td class="right"> | var := "value" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | hello := "Hello World!" |</td><td> </td><td class="right"> | hello := "Hello World!" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | empty := "" |</td><td> </td><td class="right"> | empty := "" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | path := "/foo/bar" |</td><td> </td><td class="right"> | path := "/foo/bar" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | x := "1024" |</td><td> </td><td class="right"> | x := "1024" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | y := "768" |</td><td> </td><td class="right"> | y := "768" |</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 7, line 47</em></th><th> </th><th><a name="part-r6" /><small>skipping to change at</small><em> page 7, line 48</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {?x,y,empty} ?x=1024&y=768&empty= |</td><td> </td><td class="right"> | | {?x,y,empty} ?x=1024&y=768&empty= |</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"> | & | Form-style query continuation (Sec 3.2.9) |</td><td> </td><td class="right"> | & | Form-style query continuation (Sec 3.2.9) |</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"> | | ?fixed=yes{&x} ?fixed=yes&x=1024 |</td><td> </td><td class="right"> | | ?fixed=yes{&x} ?fixed=yes&x=1024 |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {&x,y,empty} &x=1024&y=768&empty= |</td><td> </td><td class="right"> | | {&x,y,empty} &x=1024&y=768&empty= |</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="diff0017" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Finally, Level 4 templates add <span class="delete">the ability to specify</span> value modifiers</td><td> </td><td class="rblock"> Finally, Level 4 templates add value modifiers as <span class="insert">an optional</span> suffix</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> as <span class="delete">a</span> suffix to <span class="delete">the</span> variable name. <span class="delete">The</span> prefix modifier (":")</td><td> </td><td class="rblock"> to <span class="insert">each</span> variable name. <span class="insert">A</span> prefix modifier (":") indicates that only a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> indicates that only a limited number of characters from the beginning</td><td> </td><td class="rblock"> limited number of characters from the beginning of the value are used</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> of the value are used by the <span class="delete">expansion. The</span> explode ("*") modifier</td><td> </td><td class="rblock"> by the <span class="insert">expansion (Section 2.4.1). An</span> explode ("*") modifier</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> indicates that the variable is to be treated as a composite value,</td><td> </td><td class="right"> indicates that the variable is to be treated as a composite value,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> consisting of either a list of names or an associative array of</td><td> </td><td class="right"> consisting of either a list of names or an associative array of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> (name, value) pairs, that is expanded as if each member were a</td><td> </td><td class="right"> (name, value) pairs, that is expanded as if each member were a</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"> separate variable.</td><td> </td><td class="rblock"> separate variable<span class="insert"> (Section 2.4.2)</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"> | Level 4 examples, with variables having values of |</td><td> </td><td class="right"> | Level 4 examples, with variables having values of |</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"> | var := "value" |</td><td> </td><td class="right"> | var := "value" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | hello := "Hello World!" |</td><td> </td><td class="right"> | hello := "Hello World!" |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | path := "/foo/bar" |</td><td> </td><td class="right"> | path := "/foo/bar" |</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"> | list := <span class="delete">[ "red", "green", "blue" ]</span> |</td><td> </td><td class="rblock"> | list := <span class="insert">("red", "green", "blue") </span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | keys := [("semi",";"),("dot","."),("comma",",")] |</td><td> </td><td class="right"> | keys := [("semi",";"),("dot","."),("comma",",")] |</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 Expression Expansion |</td><td> </td><td class="right"> | Op Expression 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 class="lineno" valign="top"></td><td class="left"> | | String expansion with value modifiers (Sec 3.2.2) |</td><td> </td><td class="right"> | | String expansion with value modifiers (Sec 3.2.2) |</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"> | | {var:3} val |</td><td> </td><td class="right"> | | {var:3} val |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {var:30} value |</td><td> </td><td class="right"> | | {var:30} value |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {list} red,green,blue |</td><td> </td><td class="right"> | | {list} red,green,blue |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {list*} red,green,blue |</td><td> </td><td class="right"> | | {list*} red,green,blue |</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 9, line 22</em></th><th> </th><th><a name="part-r7" /><small>skipping to change at</small><em> page 9, line 23</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {/list*} /red/green/blue |</td><td> </td><td class="right"> | | {/list*} /red/green/blue |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {/list*,path:4} /red/green/blue/%2Ffoo |</td><td> </td><td class="right"> | | {/list*,path:4} /red/green/blue/%2Ffoo |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {/keys} /semi,%3B,dot,.,comma,%2C |</td><td> </td><td class="right"> | | {/keys} /semi,%3B,dot,.,comma,%2C |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {/keys*} /semi=%3B/dot=./comma=%2C |</td><td> </td><td class="right"> | | {/keys*} /semi=%3B/dot=./comma=%2C |</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"> | ; | Path-style parameters, semicolon-prefixed (Sec 3.2.7) |</td><td> </td><td class="right"> | ; | Path-style parameters, semicolon-prefixed (Sec 3.2.7) |</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"> | | {;hello:5} ;hello=Hello |</td><td> </td><td class="right"> | | {;hello:5} ;hello=Hello |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {;list} ;list=red,green,blue |</td><td> </td><td class="right"> | | {;list} ;list=red,green,blue |</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"> | | {;list*} ;<span class="delete">red;green;blue </span> |</td><td> </td><td class="rblock"> | | {;list*} ;<span class="insert">list=red;list=green;list=blue</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {;keys} ;keys=semi,%3B,dot,.,comma,%2C |</td><td> </td><td class="right"> | | {;keys} ;keys=semi,%3B,dot,.,comma,%2C |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {;keys*} ;semi=%3B;dot=.;comma=%2C |</td><td> </td><td class="right"> | | {;keys*} ;semi=%3B;dot=.;comma=%2C |</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"> | ? | Form-style query, ampersand-separated (Sec 3.2.8) |</td><td> </td><td class="right"> | ? | Form-style query, ampersand-separated (Sec 3.2.8) |</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"> | | {?var:3} ?var=val |</td><td> </td><td class="right"> | | {?var:3} ?var=val |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {?list} ?list=red,green,blue |</td><td> </td><td class="right"> | | {?list} ?list=red,green,blue |</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"> | | {?list*} ?<span class="delete">red&green&blue </span> |</td><td> </td><td class="rblock"> | | {?list*} ?<span class="insert">list=red&list=green&list=blue</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {?keys} ?keys=semi,%3B,dot,.,comma,%2C |</td><td> </td><td class="right"> | | {?keys} ?keys=semi,%3B,dot,.,comma,%2C |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {?keys*} ?semi=%3B&dot=.&comma=%2C |</td><td> </td><td class="right"> | | {?keys*} ?semi=%3B&dot=.&comma=%2C |</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"> | & | Form-style query continuation (Sec 3.2.9) |</td><td> </td><td class="right"> | & | Form-style query continuation (Sec 3.2.9) |</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"> | | {&var:3} &var=val |</td><td> </td><td class="right"> | | {&var:3} &var=val |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {&list} &list=red,green,blue |</td><td> </td><td class="right"> | | {&list} &list=red,green,blue |</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"> | | {&list*} &<span class="delete">red&green&blue </span> |</td><td> </td><td class="rblock"> | | {&list*} &<span class="insert">list=red&list=green&list=blue</span> |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {&keys} &keys=semi,%3B,dot,.,comma,%2C |</td><td> </td><td class="right"> | | {&keys} &keys=semi,%3B,dot,.,comma,%2C |</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> | | {&keys*} &semi=%3B&dot=.&comma=%2C |</td><td> </td><td class="right"> | | {&keys*} &semi=%3B&dot=.&comma=%2C |</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 class="lineno" valign="top"></td><td class="left">1.3. Design Considerations</td><td> </td><td class="right">1.3. 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"> Mechanisms similar to URI Templates have been defined within several</td><td> </td><td class="right"> Mechanisms similar to URI Templates have been defined within several</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"> specifications, including <span class="delete">WSDL,</span> WADL and <span class="delete">OpenSearch.</span> This</td><td> </td><td class="rblock"> specifications, including <span class="insert">WSDL [WSDL],</span> WADL <span class="insert">[WADL]</span> and <span class="insert">OpenSearch</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> specification extends and formally defines the syntax so that URI</td><td> </td><td class="rblock"><span class="insert"> [OpenSearch].</span> This specification extends and formally defines the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Templates can be used consistently across multiple Internet</td><td> </td><td class="rblock"> syntax so that URI Templates can be used consistently across multiple</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> applications and within Internet message fields, while at the same</td><td> </td><td class="rblock"> Internet applications and within Internet message fields, while at</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> time retaining compatibility with those earlier definitions.</td><td> </td><td class="rblock"> the same time retaining compatibility with those earlier definitions.</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 expansion mechanism with the need for ease of</td><td> </td><td class="right"> need for a powerful expansion mechanism with the need for ease of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> implementation. The syntax is designed to be trivial to parse while</td><td> </td><td class="right"> implementation. The syntax is designed to be trivial to parse while</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> at the same time providing enough flexibility to express many common</td><td> </td><td class="right"> at the same time providing enough flexibility to express many common</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> template scenarios. Implementations are able to parse the template</td><td> </td><td class="right"> template scenarios. Implementations are able to parse the template</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> and perform the expansions in a single pass.</td><td> </td><td class="right"> and perform the expansions in a single pass.</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"> Templates are simple and readable when used with common examples</td><td> </td><td class="right"> Templates are simple and readable when used with common examples</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> because the single-character operators match the URI generic syntax</td><td> </td><td class="right"> because the single-character operators match the URI generic syntax</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 11, line 32</em></th><th> </th><th><a name="part-r8" /><small>skipping to change at</small><em> page 11, line 33</em></th><td></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"> 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 class="lineno" valign="top"></td><td class="left"> notation of [RFC5234]. The following ABNF rules are imported from</td><td> </td><td class="right"> notation of [RFC5234]. The following ABNF rules are imported from</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the normative references [RFC5234], [RFC3986], and [RFC3987].</td><td> </td><td class="right"> the normative references [RFC5234], [RFC3986], and [RFC3987].</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"> ALPHA = %x41-5A / %x61-7A ; A-Z / a-z</td><td> </td><td class="right"> ALPHA = %x41-5A / %x61-7A ; A-Z / a-z</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> DIGIT = %x30-39 ; 0-9</td><td> </td><td class="right"> DIGIT = %x30-39 ; 0-9</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"</td><td> </td><td class="right"> HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"</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"></td><td> </td><td class="rblock"><span class="insert"> ; case-insensitive</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"> pct-encoded = "%" HEXDIG HEXDIG</td><td> </td><td class="right"> pct-encoded = "%" HEXDIG HEXDIG</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"</td><td> </td><td class="right"> unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> reserved = gen-delims / sub-delims</td><td> </td><td class="right"> reserved = gen-delims / sub-delims</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"</td><td> </td><td class="right"> gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> sub-delims = "!" / "$" / "&" / "'" / "(" / ")"</td><td> </td><td class="right"> sub-delims = "!" / "$" / "&" / "'" / "(" / ")"</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"> ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF</td><td> </td><td class="right"> ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD</td><td> </td><td class="right"> / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD</td><td> </td><td class="right"> / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD</td><td> </td><td class="right"> / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD</td><td> </td><td class="right"> / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> / %xD0000-DFFFD / %xE1000-EFFFD</td><td> </td><td class="right"> / %xD0000-DFFFD / %xE1000-EFFFD</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"> iprivate = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD</td><td> </td><td class="right"> iprivate = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD</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.6. Character Encoding and Unicode Normalization</td><td> </td><td class="right">1.6. Character Encoding and Unicode Normalization</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="diff0025" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> This specification uses the terms <span class="delete">"character" and</span> "coded character</td><td> </td><td class="rblock"> This specification uses the terms <span class="insert">"character", "character encoding</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">set" in accordance with the definitions provided in [RFC2978],</span> and</td><td> </td><td class="rblock"><span class="insert"> scheme", "code point",</span> "coded character <span class="insert">set", "glyph", "non-ASCII",</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">"character encoding" in place of what [RFC2978] refers to</span> as <span class="delete">a</span></td><td> </td><td class="rblock"><span class="insert"> "normalization", "protocol element",</span> and <span class="insert">"regular expression"</span> as <span class="insert">they</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> "charset".</span></td><td> </td><td class="rblock"><span class="insert"> are defined in [RFC6365].</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 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) that are a superset of the US-ASCII coded</td><td> </td><td class="right"> integers (codepoints) that are a superset of the US-ASCII coded</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> character set [ASCII]. This specification defines terminal values as</td><td> </td><td class="right"> character set [ASCII]. This specification defines terminal values as</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"> code<span class="delete">points within the Unicode coded character set [UNIV4</span>].</td><td> </td><td class="rblock"> code<span class="insert"> points within the Unicode coded character set [UNIV6</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"> In spite of the syntax and template expansion process being defined</td><td> </td><td class="right"> In spite of the syntax and template expansion process being defined</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> in terms of Unicode codepoints, it should be understood that</td><td> </td><td class="right"> in terms of Unicode codepoints, it should be understood that</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> templates occur in practice as a sequence of characters in whatever</td><td> </td><td class="right"> templates occur in practice as a sequence of characters in whatever</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> form or encoding is suitable for the context in which they occur,</td><td> </td><td class="right"> form or encoding is suitable for the context in which they occur,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> whether that be octets embedded in a network protocol element or</td><td> </td><td class="right"> whether that be octets embedded in a network protocol element or</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"> <span class="delete">paint applied to</span> the side of a bus. This specification does not</td><td> </td><td class="rblock"> <span class="insert">glyphs painted on</span> the side of a bus. This specification does not</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> mandate any particular character encoding for mapping between URI</td><td> </td><td class="rblock"> mandate any particular character encoding <span class="insert">scheme</span> for mapping between</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Template characters and the octets used to store or transmit those</td><td> </td><td class="rblock"> URI Template characters and the octets used to store or transmit</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> characters. When a URI Template appears in a protocol element, the</td><td> </td><td class="rblock"> those characters. When a URI Template appears in a protocol element,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> character encoding is defined by that protocol; without such a</td><td> </td><td class="rblock"> the character encoding <span class="insert">scheme</span> is defined by that protocol; without</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> definition, a URI Template is assumed to be in the same character</td><td> </td><td class="rblock"> such a definition, a URI Template is assumed to be in the same</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> encoding as the surrounding text. It is only during the process of</td><td> </td><td class="rblock"> character encoding <span class="insert">scheme</span> as the surrounding text. It is only during</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> template expansion that a string of characters in a URI Template is</td><td> </td><td class="rblock"> the process of template expansion that a string of characters in a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> REQUIRED to be processed as a sequence of Unicode <span class="delete">codepoints.</span></td><td> </td><td class="rblock"> URI Template is REQUIRED to be processed as a sequence of Unicode</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">code points.</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"> The Unicode Standard [UNIV<span class="delete">4</span>] defines various equivalences between</td><td> </td><td class="rblock"> The Unicode Standard [UNIV<span class="insert">6</span>] defines various equivalences between</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> sequences of characters for various purposes. Unicode Standard Annex</td><td> </td><td class="right"> sequences of characters for various purposes. Unicode Standard Annex</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> #15 [UTR15] defines various Normalization Forms for these</td><td> </td><td class="right"> #15 [UTR15] defines various Normalization Forms for these</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> equivalences. The normalization form determines how to consistently</td><td> </td><td class="right"> equivalences. The normalization form determines how to consistently</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> encode equivalent strings. In theory, all URI processing</td><td> </td><td class="right"> encode equivalent strings. In theory, all URI processing</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> implementations, including template processors, should use the same</td><td> </td><td class="right"> implementations, including template processors, should use the same</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> normalization form for generating a URI reference. In practice, they</td><td> </td><td class="right"> normalization form for generating a URI reference. In practice, they</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> do not. If a value has been provided by the same server as the</td><td> </td><td class="right"> do not. If a value has been provided by the same server as the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> resource, then it can be assumed that the string is already in the</td><td> </td><td class="right"> resource, then it can be assumed that the string is already in the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> form expected by that server. If a value is provided by a user, such</td><td> </td><td class="right"> form expected by that server. If a value is provided by a user, such</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> as via a data-entry dialog, then the string SHOULD be normalized as</td><td> </td><td class="right"> as via a data-entry dialog, then the string SHOULD be normalized as</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-l9" /><small>skipping to change at</small><em> page 13, line 26</em></th><th> </th><th><a name="part-r9" /><small>skipping to change at</small><em> page 13, line 26</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> processor limited to lower level templates MAY exclude the ABNF rules</td><td> </td><td class="right"> processor limited to lower level templates MAY exclude the ABNF rules</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> applicable only to higher levels. However, it is RECOMMENDED that</td><td> </td><td class="right"> applicable only to higher levels. However, it is RECOMMENDED that</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> all parsers implement the full syntax such that unsupported levels</td><td> </td><td class="right"> all parsers implement the full syntax such that unsupported levels</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> can be properly identified as such to the end user.</td><td> </td><td class="right"> can be properly identified as such to the end user.</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.1. Literals</td><td> </td><td class="right">2.1. Literals</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 characters outside of expressions in a URI Template string are</td><td> </td><td class="right"> The characters outside of expressions in a URI Template string are</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> intended to be copied literally to the URI-reference if the character</td><td> </td><td class="right"> intended to be copied literally to the URI-reference if the character</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> is allowed in a URI (reserved / unreserved / pct-encoded) or, if not</td><td> </td><td class="right"> is allowed in a URI (reserved / unreserved / pct-encoded) or, if not</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"> allowed, copied to the URI-reference in <span class="delete">its</span> UTF-8 <span class="delete">pct-encoded form.</span></td><td> </td><td class="rblock"> allowed, copied to the URI-reference <span class="insert">as the sequence of pct-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"> triplets corresponding to that character's encoding</span> in UTF-8</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">[RFC3629].</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"> literals = %x21 / %x23-24 / %x26 / %x28-3B / %x3D / %x3F-5B</td><td> </td><td class="right"> literals = %x21 / %x23-24 / %x26 / %x28-3B / %x3D / %x3F-5B</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"> / %x5D<span class="delete">-</span>5F / %x61-7A / %x7E / ucschar / iprivate</td><td> </td><td class="rblock"> / %x5D<span class="insert"> / %x</span>5F / %x61-7A / %x7E / ucschar / iprivate</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> / pct-encoded</td><td> </td><td class="right"> / pct-encoded</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> ; any Unicode character except: CTL, SP,</td><td> </td><td class="right"> ; any Unicode character except: CTL, SP,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> ; DQUOTE, "'", "%" (aside from pct-encoded),</td><td> </td><td class="right"> ; DQUOTE, "'", "%" (aside from pct-encoded),</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">2.2. Expressions</td><td> </td><td class="right">2.2. Expressions</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 expressions are the parameterized parts of a URI Template.</td><td> </td><td class="right"> Template expressions are the parameterized parts of a URI Template.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Each expression contains an optional operator, which defines the</td><td> </td><td class="right"> Each expression contains an optional operator, which defines the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expression type and its corresponding expansion process, followed by</td><td> </td><td class="right"> expression type and its corresponding expansion process, followed by</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> a comma-separated list of variable specifiers (variable names and</td><td> </td><td class="right"> a comma-separated list of variable specifiers (variable names and</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> optional value modifiers). If no operator is provided, the</td><td> </td><td class="right"> optional value modifiers). If no operator is provided, the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expression defaults to simple variable expansion of unreserved</td><td> </td><td class="right"> expression defaults to simple variable expansion of unreserved</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> values.</td><td> </td><td class="right"> 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 class="lineno" valign="top"></td><td class="left"> expression = "{" [ operator ] variable-list "}"</td><td> </td><td class="right"> expression = "{" [ operator ] variable-list "}"</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"> operator = "+" / "#" <span class="delete">/</span> "." / "/" / ";" / "?" / "&"</td><td> </td><td class="rblock"> operator = <span class="insert">op-level2 / op-level3 / op-reserve</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">/ op-reserve</span></td><td> </td><td class="rblock"><span class="insert"> op-level2 =</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">op-level3 =</span> "." / "/" / ";" / "?" / "&"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> op-reserve = "=" / "," / "!" / "@" / "|"</td><td> </td><td class="right"> op-reserve = "=" / "," / "!" / "@" / "|"</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">; reserved for local use: "$" / "(" / ")"</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"> The operator characters have been chosen to reflect each of their</td><td> </td><td class="right"> The operator characters have been chosen to reflect each of their</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> roles as reserved characters in the URI generic syntax. The</td><td> </td><td class="right"> roles as reserved characters in the URI generic syntax. The</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> operators defined in Section 3 of this specification include:</td><td> </td><td class="right"> operators defined in Section 3 of this specification include:</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"> + Reserved character strings;</td><td> </td><td class="right"> + Reserved character strings;</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"> # Fragment identifiers prefixed by "#";</td><td> </td><td class="right"> # Fragment identifiers prefixed by "#";</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"> . Name labels or extensions prefixed by ".";</td><td> </td><td class="right"> . Name labels or extensions prefixed by ".";</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-l10" /><small>skipping to change at</small><em> page 14, line 27</em></th><th> </th><th><a name="part-r10" /><small>skipping to change at</small><em> page 14, line 29</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> name=value pairs separated by "&"; and,</td><td> </td><td class="right"> name=value pairs separated by "&"; and,</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"> & Continuation of query-style &name=value pairs within</td><td> </td><td class="right"> & Continuation of query-style &name=value pairs within</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> a literal query component.</td><td> </td><td class="right"> a literal query component.</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 operator characters equals ("="), comma (","), exclamation ("!"),</td><td> </td><td class="right"> The operator characters equals ("="), comma (","), exclamation ("!"),</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> at-sign ("@"), and pipe ("|") are reserved for future extensions.</td><td> </td><td class="right"> at-sign ("@"), and pipe ("|") are reserved for future extensions.</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 expression syntax specifically excludes use of the dollar ("$")</td><td> </td><td class="right"> The expression syntax specifically excludes use of the dollar ("$")</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> and parentheses ["(" and ")"] characters so that they remain</td><td> </td><td class="right"> and parentheses ["(" and ")"] characters so that they remain</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"> available for <span class="delete">local language extensions</span> outside the scope of this</td><td> </td><td class="rblock"> available for <span class="insert">use</span> outside the scope of this specification. <span class="insert">For</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> specification.</td><td> </td><td class="rblock"><span class="insert"> example, a macro language might use these characters to apply macro</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"> substitution to a string prior to that string being processed as 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"> URI Template.</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">2.3. Variables</td><td> </td><td class="right">2.3. 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"> After the operator (if any), each expression contains a list of one</td><td> </td><td class="right"> After the operator (if any), each expression contains a list of one</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> or more comma-separated variable specifiers (varspec). The variable</td><td> </td><td class="right"> or more comma-separated variable specifiers (varspec). The variable</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> names serve multiple purposes: documentation for what kinds of values</td><td> </td><td class="right"> names serve multiple purposes: documentation for what kinds of values</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> are expected, identifiers for associating values within a template</td><td> </td><td class="right"> are expected, identifiers for associating values within a template</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> processor, and the literal string to use for the name in name=value</td><td> </td><td class="right"> processor, and the literal string to use for the name in name=value</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expansions (aside from when exploding an associative array).</td><td> </td><td class="right"> expansions (aside from when exploding an associative array).</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"></td><td> </td><td class="rblock"> <span class="insert">Variable names are case-sensitive because the name might be expanded</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"> within a case-sensitive URI component.</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"> variable-list = varspec *( "," varspec )</td><td> </td><td class="right"> variable-list = varspec *( "," varspec )</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"> varspec = varname [ <span class="delete">modifier</span> ]</td><td> </td><td class="rblock"> varspec = varname [ <span class="insert">modifier-level4</span> ]</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> varname = varchar *( varchar <span class="delete">/ "."</span> )</td><td> </td><td class="rblock"> varname = varchar *( <span class="insert">["."]</span> varchar )</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> varchar = ALPHA / DIGIT / "_" / pct-encoded</td><td> </td><td class="right"> varchar = ALPHA / DIGIT / "_" / pct-encoded</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 varname MAY contain one or more pct-encoded triplets. These</td><td> </td><td class="right"> A varname MAY contain one or more pct-encoded triplets. These</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> triplets are considered an essential part of the variable name and</td><td> </td><td class="right"> triplets are considered an essential part of the variable name and</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> are not decoded during processing. A varname containing pct-encoded</td><td> </td><td class="right"> are not decoded during processing. A varname containing pct-encoded</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> characters is not the same variable as a varname with those same</td><td> </td><td class="right"> characters is not the same variable as a varname with those same</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> characters decoded. Applications that provide URI Templates are</td><td> </td><td class="right"> characters decoded. Applications that provide URI Templates are</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expected to be consistent in their use of pct-encoding within</td><td> </td><td class="right"> expected to be consistent in their use of pct-encoding within</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> variable names.</td><td> </td><td class="right"> variable names.</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"> An expression MAY reference variables that are unknown to the</td><td> </td><td class="right"> An expression MAY reference variables that are unknown to the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> template processor or whose value is set to a special "undefined"</td><td> </td><td class="right"> template processor or whose value is set to a special "undefined"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> value, such as undef or null. Such undefined variables are given</td><td> </td><td class="right"> value, such as undef or null. Such undefined variables are given</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"> special treatment by the expansion process.</td><td> </td><td class="rblock"> special treatment by the expansion process<span class="insert"> (Section 3.2.1)</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 value that is a string of length zero is not considered</td><td> </td><td class="right"> A variable value that is a string of length zero is not considered</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> undefined; it has the defined value of an empty string.</td><td> </td><td class="right"> undefined; it has the defined value of an 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="diff0037" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">A</span> variable may have a composite value in the form of a list of values</td><td> </td><td class="rblock"> <span class="insert">In Level 4 templates, a</span> variable may have a composite value in the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> or an associative array of (name, value) pairs. Such value types are</td><td> </td><td class="rblock"> form of a list of values or an associative array of (name, value)</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> not directly indicated by the template syntax, but do have an impact</td><td> </td><td class="rblock"> pairs. Such value types are not directly indicated by the template</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> on the expansion <span class="delete">process.</span> A <span class="delete">composite</span> value <span class="delete">with</span> zero <span class="delete">member values</span></td><td> </td><td class="rblock"> syntax, but do have an impact on the expansion <span class="insert">process</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> is considered <span class="delete">undefined.</span></td><td> </td><td class="rblock"><span class="insert"> (Section 3.2.1).</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 <span class="insert">variable defined as a list</span> value <span class="insert">is considered undefined 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"> list contains</span> zero <span class="insert">members. A variable defined as an associative</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"> array of (name, value) pairs</span> is considered <span class="insert">undefined if the array</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"> contains zero members or if all member names in the array are</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"> associated with undefined values.</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">2.4. Value Modifiers</td><td> </td><td class="right">2.4. Value Modifiers</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"> Each of the variables in a Level 4 template expression can have a</td><td> </td><td class="right"> Each of the variables in a Level 4 template expression can have a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> modifier indicating either that its expansion is limited to a prefix</td><td> </td><td class="right"> modifier indicating either that its expansion is limited to a prefix</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> of the variable's value string or that its expansion is exploded as a</td><td> </td><td class="right"> of the variable's value string or that its expansion is exploded as a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> composite value in the form of a value list or an associative array</td><td> </td><td class="right"> composite value in the form of a value list or an associative array</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> of (name, value) pairs.</td><td> </td><td class="right"> of (name, value) pairs.</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"> modifier<span class="delete"> </span> = prefix / explode</td><td> </td><td class="rblock"> modifier<span class="insert">-level4</span> = prefix / explode</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.4.1. Prefix Values</td><td> </td><td class="right">2.4.1. Prefix 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 class="lineno" valign="top"></td><td class="left"> A prefix modifier indicates that the variable expansion is limited to</td><td> </td><td class="right"> A prefix modifier indicates that the variable expansion is limited to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> a prefix of the variable's value string. Prefix modifiers are often</td><td> </td><td class="right"> a prefix of the variable's value string. Prefix modifiers are often</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> used to partition an identifier space hierarchically, as is common in</td><td> </td><td class="right"> used to partition an identifier space hierarchically, as is common in</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> reference indices and hash-based storage. It also serves to limit</td><td> </td><td class="right"> reference indices and hash-based storage. It also serves to limit</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the expanded value to a maximum number of characters. Prefix</td><td> </td><td class="right"> the expanded value to a maximum number of characters. Prefix</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> modifiers are not applicable to variables that have composite values.</td><td> </td><td class="right"> modifiers are not applicable to variables that have composite 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 class="lineno" valign="top"></td><td class="left"> prefix = ":" max-length</td><td> </td><td class="right"> prefix = ":" max-length</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"> max-length = %x31-39 <span class="delete">*DIGIT</span> ; positive integer</td><td> </td><td class="rblock"> max-length = %x31-39 <span class="insert">0*3DIGIT</span> ; positive integer <span class="insert">< 10000</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"> The max-length is a positive integer that refers to a maximum number</td><td> </td><td class="right"> The max-length is a positive integer that refers to a maximum number</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> of characters from the beginning of the variable's value as a Unicode</td><td> </td><td class="right"> of characters from the beginning of the variable's value as a Unicode</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> string. Note that this numbering is in characters, not octets, in</td><td> </td><td class="right"> string. Note that this numbering is in characters, not octets, in</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"> order to avoid splitting between the octets of a multi-octet <span class="delete">UTF-8</span></td><td> </td><td class="rblock"> order to avoid splitting between the octets of a multi-octet encoded</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> encoded character or within a pct-encoded triplet. If the max-length</td><td> </td><td class="rblock"> character or within a pct-encoded triplet. If the max-length is</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> is greater than the length of the variable's value, then the entire</td><td> </td><td class="rblock"> greater than the length of the variable's value, then the entire</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> value string is used.</td><td> </td><td class="right"> value string is 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"> For example,</td><td> </td><td class="right"> For example,</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 variable assignments</td><td> </td><td class="right"> Given the variable assignments</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"> var := "value"</td><td> </td><td class="right"> var := "value"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> semi := ";"</td><td> </td><td class="right"> semi := ";"</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"> Example Template Expansion</td><td> </td><td class="right"> Example Template 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 class="lineno" valign="top"></td><td class="left"> {var} value</td><td> </td><td class="right"> {var} value</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {var:20} value</td><td> </td><td class="right"> {var:20} value</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {var:3} val</td><td> </td><td class="right"> {var:3} val</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {semi} %3B</td><td> </td><td class="right"> {semi} %3B</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {semi:2} %3B</td><td> </td><td class="right"> {semi:2} %3B</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.4.2. Composite Values</td><td> </td><td class="right">2.4.2. Composite 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 class="lineno" valign="top"></td><td class="left"> An explode ("*") modifier indicates that the variable is to be</td><td> </td><td class="right"> An explode ("*") modifier indicates that the variable is to be</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"> treated as a composite value consisting of either a list of <span class="delete">nam</span>es or</td><td> </td><td class="rblock"> treated as a composite value consisting of either a list of <span class="insert">valu</span>es or</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> an associative array of (name, value) pairs. Hence, the expansion</td><td> </td><td class="right"> an associative array of (name, value) pairs. Hence, the expansion</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> process is applied to each member of the composite as if it were</td><td> </td><td class="right"> process is applied to each member of the composite as if it were</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> listed as a separate variable. This kind of variable specification</td><td> </td><td class="right"> listed as a separate variable. This kind of variable specification</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> is significantly less self-documenting than non-exploded variables,</td><td> </td><td class="right"> is significantly less self-documenting than non-exploded variables,</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> since there is less correspondence between the variable name and how</td><td> </td><td class="right"> since there is less correspondence between the variable name and how</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the URI reference appears after expansion.</td><td> </td><td class="right"> the URI reference appears after 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 class="lineno" valign="top"></td><td class="left"> explode = "*"</td><td> </td><td class="right"> explode = "*"</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"> Since URI Templates do not contain an indication of type or schema,</td><td> </td><td class="right"> Since URI Templates do not contain an indication of type or schema,</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-l11" /><small>skipping to change at</small><em> page 17, line 4</em></th><th> </th><th><a name="part-r11" /><small>skipping to change at</small><em> page 17, line 12</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> address might accept a hundred permutations on fields for address</td><td> </td><td class="right"> address might accept a hundred permutations on fields for address</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> input, including partial addresses (e.g., just the city or postal</td><td> </td><td class="right"> input, including partial addresses (e.g., just the city or postal</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> code). Such a resource could be described as a template with each</td><td> </td><td class="right"> code). Such a resource could be described as a template with each</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> and every address component listed in order, or with a far more</td><td> </td><td class="right"> and every address component listed in order, or with a far more</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> simple template that makes use of an explode modifier, as in</td><td> </td><td class="right"> simple template that makes use of an explode modifier, as in</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"> /mapper{?address*}</td><td> </td><td class="right"> /mapper{?address*}</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"> along with some context that defines what the variable named</td><td> </td><td class="right"> along with some context that defines what the variable named</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> "address" can include, such as by reference to some other standard</td><td> </td><td class="right"> "address" can include, such as by reference to some other standard</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"> for addressing (e.g., <span class="delete">UPU S42 or AS/NZS 4819:2003).</span> A recipient</td><td> </td><td class="rblock"> for addressing (e.g., <span class="insert">[UPU-S42]).</span> A recipient aware of the schema</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> aware of the schema can then provide appropriate expansions, such as:</td><td> </td><td class="rblock"> can then provide appropriate expansions, such as:</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"> /mapper?city=Newport%20Beach&state=CA</td><td> </td><td class="right"> /mapper?city=Newport%20Beach&state=CA</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 process for exploded variables is dependent on both the</td><td> </td><td class="right"> The expansion process for exploded variables is dependent on both the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> operator being used and whether the composite value is to be treated</td><td> </td><td class="right"> operator being used and whether the composite value is to be treated</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> as a list of values or as an associative array of (name, value)</td><td> </td><td class="right"> as a list of values or as an associative array of (name, value)</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> pairs. Structures are processed as if they are an associative array</td><td> </td><td class="right"> pairs. Structures are processed as if they are an associative array</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> with names corresponding to the fields in the structure definition</td><td> </td><td class="right"> with names corresponding to the fields in the structure definition</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> and "." separators used to indicate name hierarchy in substructures.</td><td> </td><td class="right"> and "." separators used to indicate name hierarchy in substructures.</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"></td><td> </td><td class="rblock"> <span class="insert">If a variable has a composite structure and only some of the fields</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 that structure have defined values, then only the defined pairs</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"> are present in the expansion. This can be useful for templates 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"> consist of a large number of potential query terms.</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"> An explode modifier applied to a list variable causes the 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"> to iterate over the list's member values. For path and query</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"> parameter expansions, each member value is paired with the variable's</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"> name as a (varname, value) pair. This allows path and query</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"> parameters to be repeated for multiple values, as in</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"> Given the variable assignments</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"> year := ("1965", "2000", "2012")</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"> dom := ("example", "com")</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 Template 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"></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"> find{?year*} find?year=1965&year=2000&year=2012</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"> www{.dom*} www.example.com</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">3. Expansion</td><td> </td><td class="right">3. 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 class="lineno" valign="top"></td><td class="left"> The process of URI Template expansion is to scan the template string</td><td> </td><td class="right"> The process of URI Template expansion is to scan the template string</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> from beginning to end, copying literal characters and replacing each</td><td> </td><td class="right"> from beginning to end, copying literal characters and replacing each</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expression with the result of applying the expression's operator to</td><td> </td><td class="right"> expression with the result of applying the expression's operator to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the value of each variable named in the expression. Each variable's</td><td> </td><td class="right"> the value of each variable named in the expression. Each variable's</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> value MUST be formed prior to template expansion.</td><td> </td><td class="right"> value MUST be formed prior to template 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 class="lineno" valign="top"></td><td class="left"> The requirements on expansion for each aspect of the URI Template</td><td> </td><td class="right"> The requirements on expansion for each aspect of the URI Template</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> grammar are defined in this section. A non-normative algorithm for</td><td> </td><td class="right"> grammar are defined in this section. A non-normative algorithm for</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the expansion process as a whole is provided in Appendix A.</td><td> </td><td class="right"> the expansion process as a whole is provided in Appendix A.</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="diff0044" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> If a template processor encounters <span class="delete">an error outside of an expression,</span></td><td> </td><td class="rblock"> If a template processor encounters a character sequence <span class="insert">outside an</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> such as</span> a character sequence that does not match the <URI-Template></td><td> </td><td class="rblock"><span class="insert"> expression</span> that does not match the <URI-Template> grammar, then</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> grammar, then processing of the template SHOULD cease, the <span class="delete">URI-</span></td><td> </td><td class="rblock"> processing of the template SHOULD cease, the <span class="insert">URI-reference</span> result</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> reference</span> result SHOULD contain the expanded part of the template</td><td> </td><td class="rblock"> SHOULD contain the expanded part of the template followed by the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> followed by the remainder unexpanded, and the location and type of</td><td> </td><td class="rblock"> remainder unexpanded, and the location and type of error SHOULD be</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> error SHOULD be indicated to the invoking application. If an error</td><td> </td><td class="rblock"> indicated to the invoking application.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> is encountered <span class="delete">inside</span> an expression, such as an operator or value</td><td> </td><td class="rblock"> </td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> modifier that <span class="delete">it</span> does not recognize or <span class="delete">cannot</span> support, then the</td><td> </td><td class="rblock"> If an error is encountered <span class="insert">in</span> an expression, such as an operator or</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> expression SHOULD be copied to the result unexpanded, processing of</td><td> </td><td class="rblock"> value modifier that <span class="insert">the template processor</span> does not recognize or <span class="insert">does</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> the remainder of the template SHOULD continue, and the location and</td><td> </td><td class="rblock"><span class="insert"> not yet</span> support, <span class="insert">or a character is found that is not allowed by the</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> type of error SHOULD be indicated to the invoking application. If an</td><td> </td><td class="rblock"><span class="insert"> <expression> grammar,</span> then the <span class="insert">unprocessed parts of the</span> expression</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> error occurs, the result returned might not be a valid URI reference;</td><td> </td><td class="rblock"> SHOULD be copied to the result unexpanded, processing of the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> it will be an incompletely expanded template string that is only</td><td> </td><td class="rblock"> remainder of the template SHOULD continue, and the location and type</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> intended for diagnostic use.</td><td> </td><td class="rblock"> of error SHOULD be indicated to the invoking application.</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"> If an error occurs, the result returned might not be a valid URI</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> reference; it will be an incompletely expanded template string that</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> is only intended for diagnostic use.</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">3.1. Literal Expansion</td><td> </td><td class="right">3.1. Literal 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 class="lineno" valign="top"></td><td class="left"> If the literal character is allowed anywhere in the URI syntax</td><td> </td><td class="right"> If the literal character is allowed anywhere in the URI syntax</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> (unreserved / reserved / pct-encoded ), then it is copied directly to</td><td> </td><td class="right"> (unreserved / reserved / pct-encoded ), then it is copied directly to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the result string. Otherwise, the pct-encoded equivalent of the</td><td> </td><td class="right"> the result string. Otherwise, the pct-encoded equivalent of the</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"> literal character is copied to the result string by encoding the</td><td> </td><td class="rblock"> literal character is copied to the result string by <span class="insert">first</span> encoding</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> character <span class="delete">in UTF-8 (a</span> sequence of <span class="delete">octets)</span> and then encoding each</td><td> </td><td class="rblock"> the character <span class="insert">as its</span> sequence of <span class="insert">octets in UTF-8</span> and then encoding</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> octet as a pct-encoded triplet.</td><td> </td><td class="rblock"> each <span class="insert">such</span> octet as a pct-encoded triplet.</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">3.2. Expression Expansion</td><td> </td><td class="right">3.2. Expression 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 class="lineno" valign="top"></td><td class="left"> Each expression is indicated by an opening brace ("{") character and</td><td> </td><td class="right"> Each expression is indicated by an opening brace ("{") character and</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"> continues until the next closing brace ("}"). <span class="delete">The</span> expression is</td><td> </td><td class="rblock"> continues until the next closing brace ("}"). <span class="insert">Expressions cannot be</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> expanded by determining <span class="delete">the</span> expression type and then following that</td><td> </td><td class="rblock"><span class="insert"> nested.</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> type's expansion process for each comma-separated varspec in the</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"> expression. Level 1 templates are limited to the default operator</td><td> </td><td class="rblock"><span class="insert"> An</span> expression is expanded by determining <span class="insert">its</span> expression type and then</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> (simple string value expansion) and a single variable per expression.</td><td> </td><td class="rblock"> following that type's expansion process for each comma-separated</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> Level 2 templates are limited to a single varspec per expression.</td><td> </td><td class="rblock"> varspec in the expression. Level 1 templates are limited to 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"> default operator (simple string value expansion) and a single</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> variable per expression. Level 2 templates are limited to a single</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> varspec per expression.</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 expression type is determined by looking at the first character</td><td> </td><td class="right"> The expression type is determined by looking at the first character</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> after the opening brace. If the character is an operator, then</td><td> </td><td class="right"> after the opening brace. If the character is an operator, then</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> remember the expression type associated with that operator for later</td><td> </td><td class="right"> remember the expression type associated with that operator for later</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expansion decisions and skip to the next character for the variable-</td><td> </td><td class="right"> expansion decisions and skip to the next character for the variable-</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> list. If the first character is not an operator, then the expression</td><td> </td><td class="right"> list. If the first character is not an operator, then the expression</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> type is simple string expansion and the first character is the</td><td> </td><td class="right"> type is simple string expansion and the first character is the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> beginning of the variable-list.</td><td> </td><td class="right"> beginning of the variable-list.</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 examples in the subsections below use the following definitions</td><td> </td><td class="right"> The examples in the subsections below use the following definitions</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> for variable values:</td><td> </td><td class="right"> for variable 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="diff0047" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> dom := <span class="delete">"example.com"</span></td><td> </td><td class="rblock"> <span class="insert">count := ("one", "two", "three")</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"> dom := <span class="insert">("example", "com")</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> dub := "me/too"</td><td> </td><td class="right"> dub := "me/too"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> hello := "Hello World!"</td><td> </td><td class="right"> hello := "Hello World!"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> half := "50%"</td><td> </td><td class="right"> half := "50%"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> var := "value"</td><td> </td><td class="right"> var := "value"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> who := "fred"</td><td> </td><td class="right"> who := "fred"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> base := "http://example.com/home/"</td><td> </td><td class="right"> base := "http://example.com/home/"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> path := "/foo/bar"</td><td> </td><td class="right"> path := "/foo/bar"</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"> list := <span class="delete">[ "red", "green", "blue" ]</span></td><td> </td><td class="rblock"> list := <span class="insert">("red", "green", "blue")</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> keys := [("semi",";"),("dot","."),("comma",",")]</td><td> </td><td class="right"> keys := [("semi",";"),("dot","."),("comma",",")]</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> v := "6"</td><td> </td><td class="right"> v := "6"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> x := "1024"</td><td> </td><td class="right"> x := "1024"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> y := "768"</td><td> </td><td class="right"> y := "768"</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> empty := ""</td><td> </td><td class="right"> empty := ""</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> empty_keys := []</td><td> </td><td class="right"> empty_keys := []</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> undef := null</td><td> </td><td class="right"> undef := null</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">3.2.1. Variable Expansion</td><td> </td><td class="right">3.2.1. Variable 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="diff0049" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> A variable that is undefined has no value and is ignored by the</td><td> </td><td class="rblock"> A variable that is undefined <span class="insert">(Section 2.3)</span> has no value and is</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> expansion process. <span class="delete">A variable defined as a list value is considered</span></td><td> </td><td class="rblock"> ignored by the expansion process. If all of the variables in an</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> undefined if the list contains zero members. A variable defined as</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"> an associative array of (name, value) pairs is considered undefined</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"> if the array contains zero members or if all member names in 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"> array have undefined values.</span> If all of the variables in an</td><td> </td><td class="rblock"></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expression are undefined, then the expression's expansion is the</td><td> </td><td class="right"> expression are undefined, then the expression's expansion is the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> empty string.</td><td> </td><td class="right"> 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 class="lineno" valign="top"></td><td class="left"> Variable expansion of a defined, non-empty value results in a</td><td> </td><td class="right"> Variable expansion of a defined, non-empty value results in a</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"> substring of allowed URI characters. <span class="delete">A</span> template processor <span class="delete">MUST</span></td><td> </td><td class="rblock"> substring of allowed URI characters. <span class="insert">As described in Section 1.6,</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> encode</span> the value string <span class="delete">as</span> UTF-8 and transform each octet that is not</td><td> </td><td class="rblock"><span class="insert"> the expansion process is defined in terms of Unicode code points in</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> in the allowed set into the corresponding <span class="delete">pct-encoded</span> triplet. The</td><td> </td><td class="rblock"><span class="insert"> order to ensure that non-ASCII characters are consistently pct-</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> allowed set depends on the expression type: reserved ("+") and</td><td> </td><td class="rblock"><span class="insert"> encoded in the resulting URI reference. One way for a</span> template</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> fragment ("#") expansions allow the set of characters in ( unreserved</td><td> </td><td class="rblock"> processor <span class="insert">to obtain a consistent expansion is to transcode</span> the value</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> / reserved / pct-encoded ) to be passed through without pct-encoding,</td><td> </td><td class="rblock"> string <span class="insert">to</span> UTF-8 <span class="insert">(if it is not already in UTF-8)</span> and <span class="insert">then</span> transform</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> whereas all other expression types allow only unreserved characters</td><td> </td><td class="rblock"> each octet that is not in the allowed set into the corresponding <span class="insert">pct-</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> to be passed through without pct-encoding. Note that the percent</td><td> </td><td class="rblock"><span class="insert"> encoded</span> triplet. <span class="insert">Another is to map directly from the value's native</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> character ("%") is only allowed as part of a pct-encoded triplet and</td><td> </td><td class="rblock"><span class="insert"> character encoding to the set of allowed URI characters, with any</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> only for reserved/fragment expansion: in all other cases, a value of</td><td> </td><td class="rblock"><span class="insert"> remaining disallowed characters mapping to the sequence of pct-</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> "%" MUST be <span class="delete">pct-encoded</span> as "%25" by variable expansion.</td><td> </td><td class="rblock"><span class="insert"> encoded triplets that correspond to the octet(s) of that character</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"> when encoded as UTF-8 [RFC3629].</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"> The allowed set <span class="insert">for a given expansion</span> depends on the expression type:</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> reserved ("+") and fragment ("#") expansions allow the set of</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> characters in <span class="insert">the union of</span> ( unreserved / reserved / pct-encoded ) to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> be passed through without pct-encoding, whereas all other expression</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> types allow only unreserved characters to be passed through without</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> pct-encoding. Note that the percent character ("%") is only allowed</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> as part of a pct-encoded triplet and only for reserved/fragment</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> expansion: in all other cases, a value <span class="insert">character</span> of "%" MUST be <span class="insert">pct-</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</span> as "%25" by variable 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 class="lineno" valign="top"></td><td class="left"> If a variable appears more than once in an expression or within</td><td> </td><td class="right"> If a variable appears more than once in an expression or within</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> multiple expressions of a URI Template, the value of that variable</td><td> </td><td class="right"> multiple expressions of a URI Template, the value of that variable</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> MUST remain static throughout the expansion process (i.e., the</td><td> </td><td class="right"> MUST remain static throughout the expansion process (i.e., the</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> variable must have the same value for the purpose of calculating each</td><td> </td><td class="right"> variable must have the same value for the purpose of calculating each</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expansion). However, if reserved characters or pct-encoded triplets</td><td> </td><td class="right"> expansion). However, if reserved characters or pct-encoded triplets</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> occur in the value, they will be pct-encoded by some expression types</td><td> </td><td class="right"> occur in the value, they will be pct-encoded by some expression types</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> and not by others.</td><td> </td><td class="right"> and not by others.</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"> For a variable that is a simple string value, expansion consists of</td><td> </td><td class="right"> For a variable that is a simple string value, expansion consists of</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"> appending the encoded value to the result string. <span class="delete">The</span> explode</td><td> </td><td class="rblock"> appending the encoded value to the result string. <span class="insert">An</span> explode</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> modifier has no effect. <span class="delete">The</span> prefix modifier limits the expansion to</td><td> </td><td class="rblock"> modifier has no effect. <span class="insert">A</span> prefix modifier limits the expansion to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the first max-length characters of the decoded value. If the value</td><td> </td><td class="right"> the first max-length characters of the decoded value. If the value</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"> contains <span class="delete">multibyte UTF-8,</span> care must be taken to avoid splitting the</td><td> </td><td class="rblock"> contains <span class="insert">multi-octet or pct-encoded characters,</span> care must be taken to</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> value in mid-character: count each Unicode <span class="delete">codepoint</span> as one</td><td> </td><td class="rblock"> avoid splitting the value in mid-character: count each Unicode <span class="insert">code</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> character.</td><td> </td><td class="rblock"><span class="insert"> point</span> as one character.</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"> For a variable that is <span class="delete">a list</span> of <span class="delete">values,</span> expansion consists of</td><td> </td><td class="rblock"> For a variable that is <span class="insert">an associative array, expansion depends on</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">concatenating the defined member string values, encoded as above,</span></td><td> </td><td class="rblock"><span class="insert"> both the expression type and the presence</span> of <span class="insert">an explode modifier. If</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> with</span> a <span class="delete">separator string inserted between those values.</span> If <span class="delete">no</span> explode</td><td> </td><td class="rblock"><span class="insert"> there is no explode modifier,</span> expansion consists of <span class="insert">appending</span> a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">modifier</span> is <span class="delete">given,</span> the <span class="delete">separator</span> string <span class="delete">is</span> a <span class="delete">comma (","). If an</span></td><td> </td><td class="rblock"> <span class="insert">comma-separated concatenation of each (name, value) pair that has a</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> explode modifier is given,</span> the separator string is defined <span class="delete">per</span></td><td> </td><td class="rblock"><span class="insert"> defined value.</span> If <span class="insert">there is an</span> explode <span class="insert">modifier, expansion consists</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> operator</span> by the following <span class="delete">table, where NUL is the default expression</span></td><td> </td><td class="rblock"><span class="insert"> of appending each pair that has a defined value as either</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> type:</span></td><td> </td><td class="rblock"><span class="insert"> "name=value" or, if the value</span> is the <span class="insert">empty</span> string <span class="insert">and the expression</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"> type does not indicate form-style parameters (i.e., not</span> a <span class="insert">"?" or "&"</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"> type), simply "name". Both name and value strings are encoded in</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">same way as simple string values. A</span> separator string is <span class="insert">appended</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"> between defined pairs according to the expression type, as</span> defined by</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> the following <span class="insert">table:</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">.-----------------------------------------------------------------.</span></td><td> </td><td class="rblock"> <span class="insert">Type Separator</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> | operator: NUL</span> + <span class="delete">. / ; ? & # |</span></td><td> </td><td class="rblock"><span class="insert"> "," (default)</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> | separator:</span> "," "," "." "/" ";" "&" "&" <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"> `-----------------------------------------------------------------'</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"></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">?</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><a name="diff0055" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> For a variable that is an <span class="delete">associative array,</span> expansion consists of a</td><td> </td><td class="rblock"> For a variable that is <span class="insert">a list of values, expansion depends on both</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">list</span> of <span class="delete">either "name,value" (without</span> explode <span class="delete">modifier)</span> or</td><td> </td><td class="rblock"><span class="insert"> the expression type and the presence of</span> an <span class="insert">explode modifier. If</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">"name=value" (with explode modifier) pairs, excluding any pairs for</span></td><td> </td><td class="rblock"><span class="insert"> there is no explode modifier, the</span> expansion consists of a <span class="insert">comma-</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> which</span> the <span class="delete">corresponding</span> value is <span class="delete">undefined,</span> with <span class="delete">a separator string</span></td><td> </td><td class="rblock"><span class="insert"> separated concatenation</span> of <span class="insert">the defined member string values. If</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"><span class="delete"> inserted between defined pairs. The separator string is defined in</span></td><td> </td><td class="rblock"><span class="insert"> there is an</span> explode <span class="insert">modifier and the expression type expands named</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> the <span class="delete">same way</span> as <span class="delete">for</span> list <span class="delete">variables above. Both the name and</span> value</td><td> </td><td class="rblock"><span class="insert"> parameters (";", "?",</span> or <span class="insert">"&"), then</span> the <span class="insert">list is expanded as if it</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> <span class="delete">strings are encoded in</span> the <span class="delete">same way</span> as <span class="delete">simple string values.</span></td><td> </td><td class="rblock"><span class="insert"> were an associative array in which each member</span> value is <span class="insert">paired</span> with</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"></td><td> </td><td class="rblock"> the <span class="insert">list's varname. Otherwise, the value will be expanded</span> as <span class="insert">if it</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"> were a</span> list <span class="insert">of separate variable values, each</span> value <span class="insert">separated by</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">expression type's associated separator</span> as <span class="insert">defined by the table above.</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 Template 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"></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"> {count} one,two,three</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"> {count*} one,two,three</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"> {/count} /one,two,three</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"> {/count*} /one/two/three</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"> {;count} ;count=one,two,three</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"> {;count*} ;count=one;count=two;count=three</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"> {?count} ?count=one,two,three</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"> {?count*} ?count=one&count=two&count=three</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"> {&count*} &count=one&count=two&count=three</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">3.2.2. Simple String Expansion: {var}</td><td> </td><td class="right">3.2.2. Simple String Expansion: {var}</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"> Simple string expansion is the default expression type when no</td><td> </td><td class="right"> Simple string expansion is the default expression type when no</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> operator is given.</td><td> </td><td class="right"> operator is given.</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"> For each defined variable in the variable-list, perform variable</td><td> </td><td class="right"> For each defined variable in the variable-list, perform variable</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> expansion, as defined in Section 3.2.1, with the allowed characters</td><td> </td><td class="right"> expansion, as defined in Section 3.2.1, with the allowed characters</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> being those in the unreserved set. If more than one variable has a</td><td> </td><td class="right"> being those in the unreserved set. If more than one variable has a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> defined value, append a comma (",") to the result string as a</td><td> </td><td class="right"> defined value, append a comma (",") to the result string as a</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-l12" /><small>skipping to change at</small><em> page 22, line 24</em></th><th> </th><th><a name="part-r12" /><small>skipping to change at</small><em> page 24, line 24</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> unreserved set.</td><td> </td><td class="right"> unreserved set.</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"> Since "." is in the unreserved set, a value that contains a "." has</td><td> </td><td class="right"> Since "." is in the unreserved set, a value that contains a "." has</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> the effect of adding multiple labels.</td><td> </td><td class="right"> the effect of adding multiple labels.</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"> Example Template Expansion</td><td> </td><td class="right"> Example Template 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 class="lineno" valign="top"></td><td class="left"> {.who} .fred</td><td> </td><td class="right"> {.who} .fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {.who,who} .fred.fred</td><td> </td><td class="right"> {.who,who} .fred.fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {.half,who} .50%25.fred</td><td> </td><td class="right"> {.half,who} .50%25.fred</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"> www{.dom<span class="delete">} </span> www.example.com</td><td> </td><td class="rblock"> www{.dom<span class="insert">*}</span> www.example.com</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.var} X.value</td><td> </td><td class="right"> X{.var} X.value</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.empty} X.</td><td> </td><td class="right"> X{.empty} X.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.undef} X</td><td> </td><td class="right"> X{.undef} X</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.var:3} X.val</td><td> </td><td class="right"> X{.var:3} X.val</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.list} X.red,green,blue</td><td> </td><td class="right"> X{.list} X.red,green,blue</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.list*} X.red.green.blue</td><td> </td><td class="right"> X{.list*} X.red.green.blue</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.keys} X.semi,%3B,dot,.,comma,%2C</td><td> </td><td class="right"> X{.keys} X.semi,%3B,dot,.,comma,%2C</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.keys*} X.semi=%3B.dot=..comma=%2C</td><td> </td><td class="right"> X{.keys*} X.semi=%3B.dot=..comma=%2C</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.empty_keys} X</td><td> </td><td class="right"> X{.empty_keys} X</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> X{.empty_keys*} X</td><td> </td><td class="right"> X{.empty_keys*} X</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-l13" /><small>skipping to change at</small><em> page 23, line 51</em></th><th> </th><th><a name="part-r13" /><small>skipping to change at</small><em> page 25, line 51</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;who} ;who=fred</td><td> </td><td class="right"> {;who} ;who=fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;half} ;half=50%25</td><td> </td><td class="right"> {;half} ;half=50%25</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;empty} ;empty</td><td> </td><td class="right"> {;empty} ;empty</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;v,empty,who} ;v=6;empty;who=fred</td><td> </td><td class="right"> {;v,empty,who} ;v=6;empty;who=fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;v,bar,who} ;v=6;who=fred</td><td> </td><td class="right"> {;v,bar,who} ;v=6;who=fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;x,y} ;x=1024;y=768</td><td> </td><td class="right"> {;x,y} ;x=1024;y=768</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;x,y,empty} ;x=1024;y=768;empty</td><td> </td><td class="right"> {;x,y,empty} ;x=1024;y=768;empty</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;x,y,undef} ;x=1024;y=768</td><td> </td><td class="right"> {;x,y,undef} ;x=1024;y=768</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;hello:5} ;hello=Hello</td><td> </td><td class="right"> {;hello:5} ;hello=Hello</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;list} ;list=red,green,blue</td><td> </td><td class="right"> {;list} ;list=red,green,blue</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"> {;list*} ;<span class="delete">red;green;</span>blue</td><td> </td><td class="rblock"> {;list*} ;<span class="insert">list=red;list=green;list=</span>blue</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;keys} ;keys=semi,%3B,dot,.,comma,%2C</td><td> </td><td class="right"> {;keys} ;keys=semi,%3B,dot,.,comma,%2C</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {;keys*} ;semi=%3B;dot=.;comma=%2C</td><td> </td><td class="right"> {;keys*} ;semi=%3B;dot=.;comma=%2C</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">3.2.8. Form-style query expansion: {?var}</td><td> </td><td class="right">3.2.8. Form-style query expansion: {?var}</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"> Form-style query expansion, as indicated by the question-mark ("?")</td><td> </td><td class="right"> Form-style query expansion, as indicated by the question-mark ("?")</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> operator in Level 3 and above templates, is useful for describing an</td><td> </td><td class="right"> operator in Level 3 and above templates, is useful for describing an</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> entire optional query component.</td><td> </td><td class="right"> entire optional query component.</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"> For each defined variable in the variable-list:</td><td> </td><td class="right"> For each defined variable in the variable-list:</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-l14" /><small>skipping to change at</small><em> page 24, line 31</em></th><th> </th><th><a name="part-r14" /><small>skipping to change at</small><em> page 26, line 31</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"> Example Template Expansion</td><td> </td><td class="right"> Example Template 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 class="lineno" valign="top"></td><td class="left"> {?who} ?who=fred</td><td> </td><td class="right"> {?who} ?who=fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?half} ?half=50%25</td><td> </td><td class="right"> {?half} ?half=50%25</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?x,y} ?x=1024&y=768</td><td> </td><td class="right"> {?x,y} ?x=1024&y=768</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?x,y,empty} ?x=1024&y=768&empty=</td><td> </td><td class="right"> {?x,y,empty} ?x=1024&y=768&empty=</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?x,y,undef} ?x=1024&y=768</td><td> </td><td class="right"> {?x,y,undef} ?x=1024&y=768</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?var:3} ?var=val</td><td> </td><td class="right"> {?var:3} ?var=val</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?list} ?list=red,green,blue</td><td> </td><td class="right"> {?list} ?list=red,green,blue</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"> {?list*} ?<span class="delete">red&green&</span>blue</td><td> </td><td class="rblock"> {?list*} ?<span class="insert">list=red&list=green&list=</span>blue</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?keys} ?keys=semi,%3B,dot,.,comma,%2C</td><td> </td><td class="right"> {?keys} ?keys=semi,%3B,dot,.,comma,%2C</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {?keys*} ?semi=%3B&dot=.&comma=%2C</td><td> </td><td class="right"> {?keys*} ?semi=%3B&dot=.&comma=%2C</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">3.2.9. Form-style query continuation: {&var}</td><td> </td><td class="right">3.2.9. Form-style query continuation: {&var}</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"> Form-style query continuation, as indicated by the ampersand ("&")</td><td> </td><td class="right"> Form-style query continuation, as indicated by the ampersand ("&")</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> operator in Level 3 and above templates, is useful for describing</td><td> </td><td class="right"> operator in Level 3 and above templates, is useful for describing</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> optional &name=value pairs in a template that already contains a</td><td> </td><td class="right"> optional &name=value pairs in a template that already contains a</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> literal query component with fixed parameters.</td><td> </td><td class="right"> literal query component with fixed parameters.</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-l15" /><small>skipping to change at</small><em> page 25, line 15</em></th><th> </th><th><a name="part-r15" /><small>skipping to change at</small><em> page 27, line 15</em></th><td></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> Example Template Expansion</td><td> </td><td class="right"> Example Template 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 class="lineno" valign="top"></td><td class="left"> {&who} &who=fred</td><td> </td><td class="right"> {&who} &who=fred</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {&half} &half=50%25</td><td> </td><td class="right"> {&half} &half=50%25</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> ?fixed=yes{&x} ?fixed=yes&x=1024</td><td> </td><td class="right"> ?fixed=yes{&x} ?fixed=yes&x=1024</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {&x,y,empty} &x=1024&y=768&empty=</td><td> </td><td class="right"> {&x,y,empty} &x=1024&y=768&empty=</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {&x,y,undef} &x=1024&y=768</td><td> </td><td class="right"> {&x,y,undef} &x=1024&y=768</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"> {&var:3} &var=val</td><td> </td><td class="right"> {&var:3} &var=val</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {&list} &list=red,green,blue</td><td> </td><td class="right"> {&list} &list=red,green,blue</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"> {&list*} &<span class="delete">red&green&</span>blue</td><td> </td><td class="rblock"> {&list*} &<span class="insert">list=red&list=green&list=</span>blue</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {&keys} &keys=semi,%3B,dot,.,comma,%2C</td><td> </td><td class="right"> {&keys} &keys=semi,%3B,dot,.,comma,%2C</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="left"> {&keys*} &semi=%3B&dot=.&comma=%2C</td><td> </td><td class="right"> {&keys*} &semi=%3B&dot=.&comma=%2C</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">4. Security Considerations</td><td> </td><td class="right">4. 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><a name="diff0060" /></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> A URI Template does not contain active or executable content. Other</td><td> </td><td class="rblock"> A URI Template does not contain active or executable content.</td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> security considerations are the same as those for URIs, as described</td><td> </td><td class="rblock"> <span class="insert">However, it might be possible to craft unanticipated URIs if an</span></td><td class="lineno" valign="top"></td></tr>
<tr><td class="lineno" valign="top"></td><td class="lblock"> in section 7 of [RFC3986].</td><td> </td><td class="rblock"><span class="insert"> attacker is given control over the template or over 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"> values within an expression that allows reserved characters in 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"> expansion. In either case, the security considerations are largely</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"> determined by who provides the template, who provides the values 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"> use for variables within the template, in what execution context 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"> expansion occurs (client or server), and where the resulting URIs are</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.</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"> This specification does not limit where URI Templates might be used.</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"> Current implementations exist within server-side development</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"> frameworks and within client-side javascript for computed links or</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"> forms.</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"> Within frameworks, templates usually act as guides for where data</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"> might occur within later (request-time) URIs in client requests.</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"> Hence, the security concerns are not in the templates themselves, but</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"> rather in how the server extracts and processes the user-provided</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"> data within a normal Web request.</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"> Within client-side implementations, a URI template has many of 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"> same properties as HTML forms, except limited to URI characters and</span></td><td class="lineno" valign="top"></td></tr>