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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
|
Network Working Group E. Guttman
Request for Comments: 2609 C. Perkins
Updates: 2165 J. Kempf
Category: Standards Track Sun Microsystems
June 1999
Service Templates and Service: Schemes
Status of This Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1999). All Rights Reserved.
Abstract
The "service:" URL scheme name is used to define URLs (called
"service: URLs" in this document) that are primarily intended to be
used by the Service Location Protocol in order to distribute service
access information. These schemes provide an extensible framework
for client-based network software to obtain configuration information
required to make use of network services. When registering a
service: URL, the URL is accompanied by a set of well-defined
attributes which define the service. These attributes convey
configuration information to client software, or service
characteristics meaningful to end users.
This document describes a formal procedure for defining and
standardizing new service types and attributes for use with the
"service:" scheme. The formal descriptions of service types and
attributes are templates that are human and machine understandable.
They SHOULD be used by administrative tools to parse service
registration information and by client applications to provide
localized translations of service attribute strings.
Guttman, et al. Standards Track [Page 1]
^L
RFC 2609 Service Templates and URLs June 1999
Table of Contents
1. Introduction 2
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . 3
1.2. Service Location Protocol . . . . . . . . . . . . . . 5
1.2.1. Compatibility with SLPv1 . . . . . . . . . . . 5
2. Service URL Syntax and Semantics 5
2.1. Service URL Syntax . . . . . . . . . . . . . . . . . 5
2.2. Service URL Semantics . . . . . . . . . . . . . . . . 8
2.3. Use of service: URLs . . . . . . . . . . . . . . . . 9
2.4. Specifying the Service Type-Specific URL Syntax. . . . 10
2.5. Accommodating Abstract Service Types . . . . . . . . 10
2.5.1. Advertising Abstract Service Types . . . . . . 11
3. Syntax and Semantics of Service Type Specifications 12
3.1. Syntax of Service Type Templates . . . . . . . . . . 12
3.2. Semantics of Service Type Templates. . . . . . . . . . 15
3.2.1. Definition of a Service Template . . . . . . . 15
3.2.2. Service Type . . . . . . . . . . . . . . . . . 16
3.2.3. Version Number . . . . . . . . . . . . . . . . 16
3.2.4. Description . . . . . . . . . . . . . . . . . 16
3.2.5. Syntax of the Service Type-specific URL Part . 17
3.2.6. Attribute Definition . . . . . . . . . . . . 17
4. A Process For Standardizing New Service Types 21
5. IANA Considerations 22
6. Internationalization Considerations 24
6.1. Language Identification and Translation. . . . . . . . 24
7. Security Considerations 25
A. Service Template Examples 26
A.1. FOO . . . . . . . . . . . . . . . . . .. . . . . . . . 26
A.2. Abstract Service Type: Net-Transducer . . . . . . . . 28
A.3. Concrete Service Type: Net-Transducer:Thermometer . . 29
A.4. service: URLs and SLP . . . . . . . . . . . . . . . . 30
B. Acknowledgments 30
C. References 31
D. Authors' Addresses 32
E. Full Copyright Statement 33
1. Introduction
This document describes a URL scheme, called service: URL, which
defines network access information for network services using a
formal notation. In addition it describes how to define a set of
attributes to associate with a service: URL. These attributes will
allow end users and programs to select between network services of
the same type that have different capabilities. The attributes are
defined in a template document that is readable by people and
machines.
Guttman, et al. Standards Track [Page 2]
^L
RFC 2609 Service Templates and URLs June 1999
A client uses attributes to select a particular service. Service
selection occurs by obtaining the service: URL that offers the right
configuration for the client. Service type templates define the
syntax of service: URLs for a particular service type, as well as the
attributes which accompany a service: URL in a service registration.
Templates are used for the following distinct purposes:
1. Standardization
The template is reviewed before it is standardized. Once it is
standardized, all versions of the template are archived by IANA.
2. Service Registration
Servers making use of the Service Location Protocol [10] register
themselves and their attributes. They use the templates to
generate the service registrations. In registering, the service
must use the specified values for its attributes.
3. Client presentation of Service Information
Client applications may display service information. The
template provides type information and explanatory text which may
be helpful in producing user interfaces.
4. Internationalization
Entities with access to the template for a given service type in
two different languages may translate between the two languages.
A service may register itself in more than one language using
templates, though it has been configured by an operator who
registered service attributes in a single language.
All grammar encoding follows the Augmented BNF (ABNF) [8] for syntax
specifications.
1.1. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [6].
Guttman, et al. Standards Track [Page 3]
^L
RFC 2609 Service Templates and URLs June 1999
The following terminology is used for describing service: URLs.
service scheme
A URL scheme whose name starts with the string "service:" and
is followed by the service type name, constructed according to
the rules in this document.
service: URL
A URL constructed according to the service scheme definition.
It typically provides at least the following: The name of an
access protocol, and an address locating this service. The
service: URL may include url path information specific to the
type of service, as well as attribute information encoded
according to the URL grammar. The service: URL is used by the
Service Location Protocol to register and discover the location
of services. It may be used by other protocols and in
documents as well.
service type
A name identifying the semantics by which the remainder of the
service: URL is to be understood. It may denote either a
particular network protocol, or an abstract service associated
with a variety of protocols. If the service type denotes a
particular protocol, then the service type name SHOULD either
be assigned the name of a particular well known port [2] by
convention or be the Assigned Numbers name for the service [1].
abstract service type
A service type name which is associated with a variety of
different protocols. An example is given in Section A.
Section 2 discusses various ways that abstract types can be
accommodated.
service registration
A service: URL and optionally a set of attributes comprise a
service registration. This registration is made by or on
behalf of a given service. The URL syntax and attributes must
conform to the service template for the registered service.
service template
A formal description of the service attributes and service
scheme associated with a particular service type.
Guttman, et al. Standards Track [Page 4]
^L
RFC 2609 Service Templates and URLs June 1999
1.2. Service Location Protocol
The Service Location Protocol version 2 [10] allows service: URLs to
be registered and discovered, though service: URLs may be also used
in other contexts.
Client applications discover service registrations by issuing queries
for services of a particular type, specifying the attributes of the
service: URLs to return. Clients retrieve the attributes of a
particular service by supplying its service: URL. Attributes for all
service registrations of a particular type can also be retrieved.
Services may register themselves, or registrations may be made on
their behalf. These registrations contain a service: URL, and
possibly attributes and digital signatures.
1.2.1. Compatibility with SLPv1
This document adopts the encoding conventions of SLPv2.
Compatibility with SLPv1 [[15]] is possible, if the following
conventions are observed:
1. Abstract service types must not be used. SLPv2 specifies the
use of Service URLs with abstract service types. SLPv1 does not
support them. Thus, a service template which is to serve both
SLPv1 and SLPv2 must not use abstract service types.
2. The syntax for representing opaque values in this document is
consistent with SLPv2. The syntax must be converted for use with
SLPv1. Instead of a sequence of "\FF" then "\" HEXDIG HEXDIG for
each byte in the opaque value, SLPv1 uses radix-64 notation.
3. Escape characters are significantly differently in SLPv1 and
SLPv2. Instead of using escaped byte notation for escaped
characters, SLPv1 uses the HTML convention `&' `#' 1*DIGIT `;'.
2. Service URL Syntax and Semantics
This section describes the syntax and semantics of service: URLs.
2.1. Service URL Syntax
The syntax of the service: URL MUST conform to an 'absolute URI' as
defined by [5]. The syntax of a service: URL differs enough from a
'generic URI' that it is best to treat it as an opaque URI unless a
specific parser for the service: URL is available.
Guttman, et al. Standards Track [Page 5]
^L
RFC 2609 Service Templates and URLs June 1999
All service: URLs have the same syntax up to the 'url-part' The
syntax for a service URL depends on the service type following the
service scheme. All service: URLs have a service access point
portion, indicating the address of the service to access.
The syntax for the <sap> field depends upon the service type
definition. The <sap> field is the service access point, and
describes how to access the service. In addition, although both
upper case and lower case characters are recognized in the <service-
type> field for convenience, the name is case-folded into lower case.
Service types are therefore not distinguished on the basis of case,
so, for example, "http" and "HTTP" designate the same service type.
This is consistent with general URL practice, as outlined in [5].
The ABNF for a service: URL is:
service: URL = "service:" service-type ":" sap
service-type = abstract-type ":" url-scheme / concrete-type
abstract-type = type-name [ "." naming-auth ]
concrete-type = protocol [ "." naming-auth ]
type-name = resname
naming-auth = resname
url-scheme = resname
; A recognized URL scheme name, standardized
; either through common practice or through
; approval of a standards body.
resname = ALPHA [ 1*(ALPHA / DIGIT / "+" / "-") ]
sap = site [url-part]
site = ipsite / atsite / ipxsite
ipsite = "//" [ [ user "@" ] hostport ]
hostport = host [ ":" port ]
host = hostname / hostnumber
hostname = *( domainlabel "." ) toplabel
alphanum = ALPHA / DIGIT
domainlabel = alphanum / alphanum *[alphanum / "-"] alphanum
toplabel = ALPHA / ALPHA *[ alphanum / "-" ] alphanum
hostnumber = ipv4-number
ipv4-number = 1*3DIGIT 3("." 1*3DIGIT)
port = 1*DIGIT
; A port number must be included if the
; protocol field does not have an IANA
; assigned port number.
user = *[ uchar / ";" / "+" / "&" / "=" ]
ipxsite = "/ipx/" ipx-net ":" ipx-node ":" ipx-socket
ipx-net = 8 HEXDIGIT
ipx-node = 12 HEXDIGIT
ipx-socket = 4 HEXDIGIT
atsite = "/at/" at-object ":" at-type "" at-zone
Guttman, et al. Standards Track [Page 6]
^L
RFC 2609 Service Templates and URLs June 1999
at-object = 1*31apple-char
at-type = 1*31apple-char
at-zone = 1*31apple-char
apple-char = ALPHA / DIGIT / safe / escaped
= ; AppleAscii [7] values that are not
= ; from the restricted range must be escaped.
= ; NOTE: The escaped values do NOT correspond
= ; to UTF-8 values here: They are AppleAscii
= ; bytes.
url-part = [ url-path ] [ attr-list ]
url-path = 1 * ( "/" *xchar )
; Each service type must define its
; own syntax consistent
; with [5].
attr-list = 1 * ( ";" attr-asgn )
attr-asgn = attr-id / attr-id "=" attr-value
safe = "$" / "-" / "_" / "." / "~"
extra = "!" / "*" / "'" / "(" / ")" / "," / "+"
uchar = unreserved / escaped
xchar = unreserved / reserved / escaped
escaped = 1*(`\' HEXDIG HEXDIG)
reserved = ";" / "/" / "?" / ":" / "@" / "&" / "=" / "+"
unreserved = ALPHA / DIGIT / safe / extra
IPX addresses [14] are composed of a network, node and socket number.
The IPX network number is a four-byte number, in network order and
expressed in hexadecimal, that signifies an IPX subnet. The node
element represents a network interface card. It is a six-byte
number, expressed in hexadecimal, that is usually the same as the
node ID of the interface card. The socket element represents a
specific service access point, given an IPX network and node. IPX
sockets are analogous to TCP/IP ports, and are not to be confused
with Berkeley sockets.
AppleTalk addresses [9] are composed of an object, type and zone.
The object is a human readable string. The type is an identifier,
not intended for human readability. The zone refers to the AppleTalk
Zone name, which is also human readable. The characters composing
these names are drawn from the AppleAscii character set [7]. Thus,
they do not equate to escaped ASCII or UTF-8 characters. The
characters "=" and "*" are reserved and may not be included in the
names even in binary form.
In cases besides the AppleTalk grammar, some characters must be
escaped before use. To escape any character, precede the two digits
indicating its ASCII value by '%'.
Guttman, et al. Standards Track [Page 7]
^L
RFC 2609 Service Templates and URLs June 1999
2.2. Service URL Semantics
The service scheme-specific information following the "service:" URL
scheme identifier provides information necessary to access the
service. As described in the previous subsection, the form of a
service: URL is as follows:
service: URL = "service:" service-type ":" site url-path
where <site> has one of the following forms could refer to an
<ipsite>, <ipxsite> or <atsite> if the service URL locates to an IP,
IPX or AppleTalk service access point, respectively.
As discussed in Section 1, the <service-type> can be either a
concrete protocol name, or an abstract type name.
The <ipsite> field is typically either a domain name (DNS) or an IP
network protocol address for the service, and possibly a port number.
Note that use of DNS hostnames is preferred for ease of renumbering.
The <site> field can be null if other information in the service URL
or service attributes is sufficient to use the service.
The <sap> field allows more information to be provided (by way of
<url-path> and <attr-list>) that can uniquely locate the service or
resource if the <site> is not sufficient for that purpose. For IP
addresses, the <site> field begins with "//". Other address families
supported are IPX [14] and AppleTalk [9].
An <attr-list> field appears at the end of the <url-part> field, but
is never required to exist in any service location registration.
The <attr-list> field is composed of a list of semicolon (";")
separated attribute assignments of the form:
attr-id "=" attr-value
or for keyword attributes:
attr-id
Attributes are part of service: URLs when the attributes are required
to access a particular service. For instance, an ACAP [13] service
might require that the client authenticate with it through Kerberos.
Including an attribute in the service registration allows the ACAP
client to make use of the correct SASL [11] authentication mechanism.
The ACAP server's registration might look like:
service:acap://some.where.net;authentication=KERBEROSV4
Guttman, et al. Standards Track [Page 8]
^L
RFC 2609 Service Templates and URLs June 1999
Note that there can be other attributes of an ACAP server which are
not appropriate to include in the URL. For instance, the list of
users who have access to the server is useful for selecting an ACAP
server, but is not required for a client to use the registered
service.
Attributes associated with the service: URL are not typically
included in the service: URL. They are stored and retrieved using
other mechanisms. The service: URL is uniquely identified with a
particular service agent or resource, and is used when registering or
requesting the attribute information. The Service Location Protocol
specifies how such information is registered by network services and
obtained by client software.
2.3. Use of service: URLs
The service: URL is intended to allow arbitrary client/server and
peer to peer systems to make use of a standardized dynamic service
access point discovery mechanism.
It is intended that service: URLs be selected according to the
suitability of associated attributes. A client application can
obtain the URLs of several services of the same type and distinguish
the most preferable among them by means of their attributes. The
client uses the service: URL to communicate directly to a service.
Attributes are specified with a formal service template syntax
described in Section 3. If a service: URL registration includes
attributes, the registering agent SHOULD also keep track of the
attributes which characterize the service.
Registrations can be checked against the formal attribute
specification defined in the template by the client or agent
representing the client. Service registration are typically done
using the Service Location Protocol [10] (SLP). SLP provides a
mechanism for service: URLs to be obtained dynamically, according to
the service's attributes.
It is also possible to obtain service: URLs from documents and using
other protocols. In this case, the URL may not be accompanied by the
service attributes. The context in which the URL appears should make
it clear, if possible, when the service is appropriate to use. For
example, in a mail message, a service might be recommended for use
when the user is in a branch office. Or, an HTML document might
include a service: URL as a pointer to a service, describing in text
what the service does and who is authorized to use it.
Guttman, et al. Standards Track [Page 9]
^L
RFC 2609 Service Templates and URLs June 1999
2.4. Specifying the Service Type-Specific URL Syntax
When a service type is specified, the specification includes the
definition of the syntax for all URLs that are registered by services
of that particular type. For instance, the "lpr" service type may be
defined with service: URLs in the following form:
service:printer:lpr://<address of printer>/<queue name>
The section of the URL after the address of the printer:
"/" <queue name>
is specific to the lpr service type and corresponds to the <url-path>
field of the general service: URL syntax. This part is specified
when the lpr service type is specified.
2.5. Accommodating Abstract Service Types
An abstract service type is a service type that can be implemented by
a variety of different service agents.
In order to register a service: URL for an abstract service type the
'abstract-type' grammar rule described in section 3.1 is used. This
will result in a URL which includes enough information to use the
service, namely, the protocol, address and path information. Unlike
'concrete' service: URLs, however, the service type is not enough to
determine the service access. Rather, an abstract service type
denotes a class of service types. The following subsection discusses
this point in more detail.
Concrete service templates inherit all attributes defined in the
abstract service template from which the concrete service template
was derived. Attribute defined in the abstract service template MUST
not be defined in the concrete service template as well. This
simplifies interpretation of templates.
For example, if an abstract service template for service type '
Abstract' defines an attribute FOO, all concrete service templates
derived from the abstract service template, such as '
Abstract:Concrete' will implicitly include the definition of
attribute FOO. This derived template MUST NOT redefine FOO, according
to the rule above.
A further example is described in Section A.
Guttman, et al. Standards Track [Page 10]
^L
RFC 2609 Service Templates and URLs June 1999
2.5.1. Advertising Abstract Service Types
Some services may make use of several protocols that are in common
use and are distinct services in their own right. In these cases an
abstract service type is appropriate. What is essential is that all
the required information for the service is clearly defined.
For example, suppose a network service is being developed for
dynamically loading device drivers. The client requires the
following three pieces of information before it can successfully load
and instantiate the driver:
1. The protocol used to load the driver code, for example, "ftp",
"http" or "tftp"
2. A pathname identifying where the driver code is located, for
example "/systemhost/drivers/diskdrivers.drv",
3. The name of the driver, for example, "scsi".
The temptation is to form the first two items into a URL and embed
that into a service: URL. As an example which should be avoided,
service:ftp:/x3.bean.org/drivers/diskdrivers.drv;driver=scsi
is a service: URL which seems to indicate where to obtain the driver.
Rather, an abstract service-type SHOULD be used. The service type is
not "ftp", as the example indicates. Rather, it is "device-drivers".
The service: URL that should be used, consistent with the rules in
section [6], is the following:
service:device-drivers:ftp://x3.bean.org/drivers/diskdrivers.drv;
driver=scsi;platform=sys3.2-rs3000
Other URLs for the same service using other protocols are also
supported, as in:
service:device-drivers:tftp://x2.bean.org/vol3/disk/drivers.drv;
driver=scsi;platform=sys3.2-rs3000
service:device-drivers:http://www.bean.org/drivers/drivpak.drv;
driver=scsi;platform=sys3.2-rs3000
Using SLP, a search for the service type "device-drivers" may return
all of the three URLs listed above. The client selects the most
appropriate access protocol for the desired resource.
Guttman, et al. Standards Track [Page 11]
^L
RFC 2609 Service Templates and URLs June 1999
The fundamental requirement is that the abstract service type MUST be
well specified. This requirement is imposed so that program code or
human users have enough information to access the service. In every
case, a well-specified abstract type will include either an access
protocol and a network address where the service is available, or an
embedded URL for a standardized URL scheme that describes how to
access the service. In the example above, there are three further
requirements: A URL path is included for access protocols indicating
the document to download, and two attributes are included to
characterize the driver.
3. Syntax and Semantics of Service Type Specifications
Service type specifications are documents in a formal syntax defining
properties important to service registration. These properties are:
1. General information on the service type specification itself,
2. The syntax of the service type-specific part of the service URL,
3. The definition of attributes associated with a service.
The service type specification document is the service type template.
The following subsections describe the syntax and semantics of
service type templates.
3.1. Syntax of Service Type Templates
Service template documents are encoded in a simple form. They may be
translated into any language or character set, but the template used
for standardization MUST be encoded in the 0x00-0x7F subrange of
UTF-8 [16] (which corresponds to ASCII character encoding) and be in
English.
A template document begins with a block of text assigning values to
five document identification items. The five identification items
can appear in any order within the block, but conventionally the
"template-type" item, which assigns the service type name, occurs at
the very top of the document in order to provide context for the rest
of the document. The attribute definition item occurs after the
document identification items.
All items end with a blank line. The reserved characters are ";",
"%", "=", ",", "#", LF, and CR. Reserved characters MUST be escaped.
The escape sequence is the same as described in [5].
Guttman, et al. Standards Track [Page 12]
^L
RFC 2609 Service Templates and URLs June 1999
The service template is encoded in a UTF-8 character set, but
submitted as a part of an work in progress, which is encoded in ASCII
characters. All characters which are outside of the ASCII range MUST
be escaped using the `\' HEXDIG HEXDIG syntax. For example, the
letter e accent aigue would be represented as "\c3\a9".
Unfortunately, this will detract from the readability of the service
template in the service template submission. Hopefully some public
domain tools will emerge for translating escaped UTF-8 characters
into humanly readable ones.
Values in value lists are separated by commas. A value list is
terminated by a newline not preceded by a comma. If the newline is
preceded by a comma, the value list is interpreted to continue onto
the next line.
Attribute identifiers, attribute type names, and flags are all case
insensitive. For ease of presentation, upper and lower case
characters can be used to represent these in the template document.
Newlines are significant in the grammar. They delimit one item from
another, as well as separating parts of items internally.
String values are considered to be a sequence of non-whitespace
tokens potentially with embedded whitespace, separated from each
other by whitespace. Commas delimit lists of strings. String values
are trimmed so as to reduce any sequence of white space interior to a
string to a single white space. Preceding or trailing white space is
removed. For example:
" some value , another example "
is trimmed to
"some value" and "another example".
Note that there can be no ambiguity in string tokenization because
values in value lists are separated by a comma. String tokens are
not delimited by double quotes (") as is usually the case with
programming languages.
Attribute tags and values are useful for directory look-up. In this
case, decoding of character escapes and trimming white space MUST be
performed before string matching. In addition, string matching
SHOULD be case insensitive.
Guttman, et al. Standards Track [Page 13]
^L
RFC 2609 Service Templates and URLs June 1999
Templates obey the following ABNF [8] grammar:
template = tem-attrs attr-defs
tem-attrs = schemetype schemevers schemetext schemeurl
schemetype = "template-type=" scheme term
schemevers = "template-version=" version-no term
schemetext = "template-description=" newline desc term
schemeurl = "template-url-syntax=" newline url-bnf term
url-bnf = *[ com-chars ]
; An ABNF describing the <url-path> production
; in the service: URL grammar of Section 2.1.
scheme = service-type [ "." naming-auth ]
service-type = scheme-name
naming-auth = scheme-name
scheme-name = ALPHA [1*schemechar] [ "." 1*schemechar ]
schemechar = ALPHA / DIGIT / "-" / "+" /
version-no = 1*DIGIT "." 1*DIGIT
langtag = 1*8ALPHA ["-" 1*8ALPHA]
; See [3]
desc = *[ com-chars ]
; A block of free-form text for reading by
; people describing the service in a short,
; informative manner.
term = newline newline
attr-defs = *( attr-def / keydef )
attr-def = id "=" attrtail
keydef = id "=" "keyword" newline [help-text] newline
attrtail = type flags newline [value-list] [help-text]
[value-list] newline
id = 1*attrchar
type = "string" / "integer" / "boolean" / "opaque"
flags = ["m"/"M"] ["l"/"L"] ["o"/"O"] ["x"/"X"]
value-list = value newline / value "," value-list /
value "," newline value-list
help-text = 1*( "#" help-line )
; A block of free-form text for reading by
; people describing the attribute and
; its values.
help-line = *[ com-chars ] newline
attrchar = schemechar / ":" / "_" / "$" / "~" / "@" / "." /
"|" / "<" / ">" / "*" / "&"
value = string / integer / boolean / opaque
string = safe-char *[safe-char / white-sp] safe-char
integer = [ "+" | "-" ] 1*DIGIT
boolean = "true" / "false"
opaque = "\FF" 1*( "\" HEXDIG HEXDIG)
; Each byte of opaque value is hex encoded.
; The format corresponds to [10].
Guttman, et al. Standards Track [Page 14]
^L
RFC 2609 Service Templates and URLs June 1999
; Newlines are ignored in decoding opaque
; values.
com-chars = safe-char / white-sp / "," / ";"/ "%"
safe-char = attrchar / escaped / " " / "!" / '"' / "'" /
"|" / "(" / ")" / "+" / "-" / "." / ":" /
"=" / "?" / "[" / "]" / "{" / "/" / "{" /
"$"
; All UTF-8 printable characters are
; included except ",", "%", ";", and "#".
escaped = 1*(`\' HEXDIG HEXDIG)
white-sp = SPACE / HT
newline = CR / ( CR LF )
3.2. Semantics of Service Type Templates
The service type template defines the service attributes and service:
URL syntax for a particular service type. The attribute definition
includes the attribute type, default values, allowed values and other
information.
Note that the 'template-type', 'template-version', 'template-
description' and 'template-url-syntax' have all been defined as
attributes. These attributes MAY accompany any service registration
using SLPv2.
3.2.1. Definition of a Service Template
There are four items included in the service template. The semantics
of each item is summarized below.
- template-type
The scheme name of the service scheme. The scheme name consists
of the service type name and an optional naming authority name,
separated from the service type name by a period. See 3.2.2 for
the conventions governing service type names.
- template-version
The version number of the service type specification.
- template-description
A description of the service suitable for inclusion in text read
by people.
Guttman, et al. Standards Track [Page 15]
^L
RFC 2609 Service Templates and URLs June 1999
- template-url-syntax
The syntax of the service type-specific URL part of the service:
URL.
- attribute definitions
A collection of zero or more definitions for attributes
associated with the service in service registrations.
Each of the following subsections deals with one of these items.
3.2.2. Service Type
The service scheme consists of the service type name and an optional
naming authority name separated from the service type name by a
period. The service scheme is a string that is appended to the '
service:' URL scheme identifier, and is the value of the "template-
type" item in the template document. If the naming authority name is
absent it is assumed to be IANA.
3.2.3. Version Number
The version number of the service type template is the value of the
"template-version" item. A draft proposal starts at 0.0, and the
minor number increments once per revision. A standardized template
starts at 1.0. Additions of optional attributes add one to the minor
number, and additions of required attributes, changes of definition,
or removal of attributes add one to the major number. The intent is
that an old service template still accurately, if incompletely,
defines the attributes of a service registration if the template only
differs from the registration in its minor version. See Section 4
for more detail on how to use the template-version attribute.
3.2.4. Description
The description is a block of text readable by people in the language
of the template and is the value of the "template-description" item.
It should be sufficient to identify the service to human readers and
provide a short, informative description of what the service does.
If the service type corresponds to a particular protocol, the
protocol specification must be cited here. The protocol need not be
a standardized protocol. The template might refer to a proprietary
specification, and refer the reader of the template to a contact
person for further information.
Guttman, et al. Standards Track [Page 16]
^L
RFC 2609 Service Templates and URLs June 1999
3.2.5. Syntax of the Service Type-specific URL Part
The syntax of the service type-specific part of the service: URL is
provided in the template document as the value of the "template-url-
syntax" item. The <url-path> field of the service: URL is designed
to provide additional information to locate a service when the
<addr-spec> field is not sufficient. The <url-path> field
distinguishes URLs of a particular service type from those of another
service type. For instance, in the case of the lpr service type, the
<url-path> may be defined so that it must include the queue name, but
other service types may not require this information.
The syntax for the <url-path> field MUST accompany the definition of
a new service type, unless the URL scheme has already been
standardized and is not a service: URL. The syntax is included in the
template document as an ABNF [8] following the rules for URL syntax
described in [5]. There is no requirement for a service scheme to
support a <url-path>. The <url-path> field can be very simple, or
even omitted. If the URL scheme has already been standardized, the
"template-url-syntax" item SHOULD include a reference to the
appropriate standardization documents. Abstract service types may
defer this field to the template documents describing their concrete
instances.
3.2.6. Attribute Definition
The bulk of the template is typically devoted to defining service
type-specific attributes. An attribute definition precisely
specifies the attribute's type, other restrictions on the attribute
(whether it is multi-valued, optional, etc), some text readable by
people describing the attribute, and lists of default and allowed
values. The only required information is the attribute's type, the
rest are optional. Registration, deregistration and the use of
attributes in queries can be accomplished using the Service Location
Protocol [10] or other means, and discussion of this is beyond the
scope of the document.
Attributes are used to convey information about a given service for
purposes of differentiating different services of the same type.
They convey information to be used in the selection of a particular
service to establish communicate with, either through a program
offering a human interface or programmatically. Attributes can be
encoded in different character sets and in different languages. The
procedure for doing this is described in Section 6.
An attribute definition begins with the specification of the
attribute's identifier and ends with a single empty line. Attributes
definitions have five components (in order of appearance in a
Guttman, et al. Standards Track [Page 17]
^L
RFC 2609 Service Templates and URLs June 1999
definition):
1. An attribute identifier which acts as the name of the attribute,
2. Attribute descriptors (type and flags),
3. An optional list of values which are assigned to the attribute by
default,
4. An optional block of text readable by people providing a short,
informative description of the attribute,
5. An optional list of allowed values which restrict the value or
values the attribute can take on.
3.2.6.1. The Attribute Identifier
An attribute definition starts with the specification of the
attribute's identifier. The attribute's identifier functions as the
name of the attribute. Note that the characters used to compose an
attribute identifier are restricted to those characters considered
unrestricted for inclusion in a URL according to [5]. The reason is
that services can display prominent attributes in their service: URL
registrations. Each attribute identifier must be unique in the
template. Since identifiers are case folded, upper case and lower
case characters are the same.
3.2.6.2. The Attribute Type
Attributes can have one of five different types: string, integer,
boolean, opaque, or keyword. The attribute's type specification is
separated from the attribute's identifier by an equal sign ("=") and
follows the equal sign on the same line. The string, signed integer,
and boolean types have the standard programming language or database
semantics. Integers are restricted to those signed values that can
be represented in 32 bits. The character set used to represent
strings is not specified at the time the template is defined, but
rather is determined by the service registration. Booleans have the
standard syntax. Opaques are byte escaped values that can be used to
represent any other kind of data. Keywords are attributes that have
no characteristics other than their existence (and possibly the
descriptive text in their definition).
Keyword and boolean attributes impose restrictions on the following
parts of the attribute definition. Keyword attribute definitions
MUST have no flag information following the type definition, nor any
default or allowed values list. Boolean attributes are single value
only, i.e., multi-valued boolean attributes are not allowed.
Guttman, et al. Standards Track [Page 18]
^L
RFC 2609 Service Templates and URLs June 1999
3.2.6.3. Attribute Flags
Flags determine other characteristics of an attribute. With the
exception of keyword attributes, which may not have any flags, flags
follow the attribute type on the same line as the attribute
identifier, and are separated from each other by whitespace. Flags
may appear in any order after the attribute type. Other information
must not follow the flags, and only one flag identifier of a
particular flag type is allowed per attribute definition.
The semantics of the flags are as follows:
- o or O
Indicates that the attribute is optional. If this flag is
missing, the attribute is required in every service registration.
- m or M
Indicates that the attribute can take on multiple values. If
this flag is present, every value in a multi-valued attribute
has the same type as the type specified in the type part of the
attribute definition. Boolean attributes must not include this
flag.
- l or L
Indicates that attribute is literal, i.e. is not meant to be
translated into other languages. If this flag is present, the
attribute is not considered to be readable by people and should
not be translated when the template is translated. See Section 6
for more information about translation.
- x or X
Indicates that clients SHOULD include the indicated attribute
in requests for services. Neglecting to include this attribute
will not sufficiently differentiate the service. If services are
obtained without selecting this attribute they will quite likely
be useless to the client.
The values for multivalued attributes are an unordered set.
Deletions of individual values from a multivalued attribute are not
supported, and deletion of the attribute causes the entire set of
values to be removed.
Guttman, et al. Standards Track [Page 19]
^L
RFC 2609 Service Templates and URLs June 1999
3.2.6.4. Default Value or List
If the attribute definition includes a default value or, in the case
of multivalued attributes, a default values list, it begins on the
second line of the attribute definition and continues over the
following lines until a line ends without a comma. As a consequence,
newlines cannot be embedded in values unless escaped. See Section
2.1.
Particular attribute types and definitions restrict the default
values list. Keyword attributes must not have a list of defaults.
If an optional attribute's definition has an allowed values list,
then a default value or list is not optional but required. The
motivation for this is that defining an attribute with an allowed
values list is meant to restrict the values the attribute can take
on, and requiring a default value or list assures that the default
value is a member of the given set of allowed values.
The default value or list indicates what values the attribute is
given if no values are assigned to the attribute when a service is
registered. If an optional attribute's definition includes no
default value or list, the following defaults are assigned:
1. String values are assigned the empty string,
2. Integer values are assigned zero,
3. Boolean values are assigned false,
4. Opaque values are assigned a byte array containing no values,
5. Multi-valued attributes are initialized with a single value.
For purposes of translating nonliteral attributes, the default values
list is taken to be an ordered set, and translations MUST maintain
that order.
3.2.6.5. Descriptive Text
Immediately after the default values list, if any, a block of
descriptive text SHOULD be included in the attribute definition.
This text is meant to be readable by people, and should include a
short, informative description of the attribute. It may also provide
additional information, such as a description of the allowed values.
This text is primarily designed for display by interactive browsing
tools. The descriptive text is set off from the surrounding
definition by a crosshatch character ("#") at the beginning of the
line. The text should not, however, be treated as a comment by
Guttman, et al. Standards Track [Page 20]
^L
RFC 2609 Service Templates and URLs June 1999
parsing and other tools, since it is an integral part of the
attribute definition. Within the block of descriptive text, the text
is transferred verbatim, including indentation and line breaks, so
any formatting is preserved.
3.2.6.6. Allowed Values List
Finally, the attribute definition concludes with an optional allowed
values list. The allowed values list, if any, follows the
descriptive text, or, if the descriptive text is absent, the initial
values list. The syntax of the allowed values list is identical to
that of the initial values list. The allowed values list is also
terminated by a line that does not end in a comma. If the allowed
values list is present, assignment to attributes is restricted to
members of the list.
As with the default values list, the allowed values list is also
considered to be an ordered set for purposes of translation.
3.2.6.7. Conclusion of An Attribute Definition
An attribute definition concludes with a single empty line.
4. A Process For Standardizing New Service Types
New service types can be suggested simply by providing a service type
template and a short description about how to use the service. The
template MUST have its "template-version" template attribute set to
0.0.
MAJOR revision numbers come before the '.', MINOR revision numbers
come after the '.'.
The minor version number increments once with each change until it
achieves 1.0. There is no guarantee any version of the service
template is backward compatible before it reaches 1.0.
Once a service template has reached 1.0, the definition is "frozen"
for that version. New templates must be defined, of course, to
refine that definition, but the following rules must be followed:
A MINOR revision number signifies the introduction of a compatible
change. A MAJOR revision number signifies the introduction of an
incompatible change. This is formalized by the following rules:
- Any new optional attribute defined for the template increases
the minor version number by one. All other attributes for the
version must continue to be supported as before. A client which
Guttman, et al. Standards Track [Page 21]
^L
RFC 2609 Service Templates and URLs June 1999
supports 1.x can still use later versions of 1.y (where x<y) as
it ignores attributes it doesn't know about.
- Adding a required attribute, removing support for an attribute
or changing definition of an attribute requires changing the
major version number of a service template. A client application
may be unable to make use of this information, or it may need
to obtain the most recent service template to help the user
interpret the service information.
The template is submitted to a special mailing list, see section 5.
This document must include a 'template begins here' and 'template
ends here' marking, in text, so that it is trivial to cut and paste
the template from the submission.
The list will be available at svrloc-list@iana.org. Ideally, experts
in the implementation and deployment of the particular protocol are
consulted so as to add or delete attributes or change their
definition to make the template as useful as possible. The mailing
list will be maintained even when the SVRLOC WG goes dormant for the
purpose of discussing service templates.
All published versions of the template must be available on-line,
including obsolete ones.
Once consensus is achieved, the template should be reissued with
possible corrections, having its Version number set to 1.0.
Templates with version numbers below 1.0 are not submitted to the
IANA. From that point onwards, templates are submitted. See Section
5 for details on how templates are submitted to an IANA registry of
templates.
5. IANA Considerations
It is the responsibility of the IESG (e.g., Applications Area
director) to appoint a Designated Expert (see [12].) Anyone may ask
for clarification of a service template. This is to solicit input
from the concerned community. It is up to the appointed reviewer to
determine whether clarification requests are satisfied. It is the
reviewer's responsibility to see that all reasonable clarification
requests are met before the template is submitted for inclusion in
the IANA registry.
When the reviewer has determined that the template submission is
ready, he or she will submit the template to the IANA for inclusion
in a registry. Mailing list participants supply input to the process
but do not make the decision whether to accept a service template.
Guttman, et al. Standards Track [Page 22]
^L
RFC 2609 Service Templates and URLs June 1999
If a dispute arises over the decisions made by the reviewer, the
matter may be appealed according to normal IETF procedure as
described for the Standards Track process.
The IANA will maintain a mail forwarding alias for the work of this
list, so that "svrloc-list@iana.org" points to a mail server supplied
by a volunteer organization.
The service template submission MUST be of the form:
Name of submitter:
Language of service template:
Security Considerations:
Template Text:
----------------------template begins here-----------------------
. . .
-----------------------template ends here------------------------
The service template file has a naming convention:
<service-type> "." <version-no> "." <langtag>
Each of these fields are defined in Section 2. They correspond to
the values of the template fields "type", "template-version". The
files for the example templates in this document (see Section A) are
called:
"foo.0.0.en",
"Net-Transducer.0.0.en",
"Net-Transducer:Thermometer.0.0.de" and
"Net-Transducer:Thermomoter.0.0.en".
The reviewer will ensure that the template submission to IANA has the
correct form and required fields.
No service type template will be accepted for inclusion in the
service template registry unless the submission includes a security
considerations section and contact information for the template
document author.
The IANA will maintain a registry containing both the service type
templates, and the template description document containing the
service type template, including all previous versions. The IANA
will receive notice to include a service template in the registry
by email from the reviewer. This message will include the service
template itself, which is to be registered.
Guttman, et al. Standards Track [Page 23]
^L
RFC 2609 Service Templates and URLs June 1999
Neither the reviewer nor the IANA will take any position on claims of
copyright or trademark issues with regard to templates.
6. Internationalization Considerations
The service: URL must be encoded using the rules set forth in [5].
The character set encoding is limited to specific ranges within the
US-ASCII character set [4].
The template is encoded in UTF-8 characters.
6.1. Language Identification and Translation
The language used in attribute strings should be identified supplying
a Language Tag [3] in the Service Template submission (see Section
5).
A program can translate a service registration from one language to
another provided it has both the template of the language for the
registration and the template of the desired target language. All
standardized attributes are in the same order in both templates. All
non-arbitrary strings, including the descriptive help text, is
directly translatable from one language to another. Non-literal
attribute definitions, attribute identifiers, attribute type names,
attribute flags, and the boolean constants "true" and "false" are
never translated. Translation of attribute identifiers is prohibited
because, as with domain names, they can potentially be part of a
service: URL and therefore their character set is restricted. In
addition, as with variable identifiers in programming languages, they
could become embedded into program code.
All strings used in attribute values are assumed translatable unless
explicitly defined as being literal, so that best effort translation
(see below) does not modify strings which are meant to be interpreted
by a program, not a person.
An example of a translated service template is included in Section A.
There are two ways to go about translation: standardization and best
effort.
When the service type is standardized, more than one document can be
submitted for review. One service type description is approved as a
master, so that when a service type template is updated in one
language, all the translations (at least eventually) reflect the same
semantics.
Guttman, et al. Standards Track [Page 24]
^L
RFC 2609 Service Templates and URLs June 1999
If no document exists describing the standard translation of the
service type, a 'best effort' translation for strings should be done.
7. Security Considerations
Service type templates provide information that is used to interpret
information obtained by the Service Location Protocol. If these
templates are modified or false templates are distributed, services
may not correctly register themselves, or clients might not be able
to interpret service information.
The service: URLs themselves specify the service access point and
protocol for a particular service type. These service: URLs could be
distributed and indicate the location of a service other than that
normally want to used. The Service Location Protocol [10]
distributes service: URLs and has an authentication mechanism that
allows service: URLs of registered services to be signed and for the
signatures to be verified by clients.
Each Service Template will include a security considerations section
which will describe security issues with using the service scheme for
the specific Service Type.
Guttman, et al. Standards Track [Page 25]
^L
RFC 2609 Service Templates and URLs June 1999
A. Service Template Examples
The text in the template example sections is to be taken as being a
single file. They are completely fictitious (ie. the examples do
not represent real services).
The FOO example shows how to use service templates for an application
that has very few attributes. Clients request the FOO server where
their user data is located by including their user name as the value
of the user attribute.
The Net-Transducer example shows how abstract service types are
defined and how a corresponding concrete instance is defined. A
system might support any of several NetTransducer services. Here we
give only one concrete instance of the abstract type.
It is not necessary to register concrete templates for an abstract
service type if the abstract service type template is completely
clear as to what possible values can be used as a concrete type, and
what their interpretation is.
A.1. FOO
The FOO service template submission example follows:
Name of submitter: "Erik Guttman" <Erik.Guttman@sun.com>
Language of service template: en
Security Considerations:
If the USER and GROUPS attributes are included a
possibility exists that the list of identities for users or groups
can be discovered. This information would otherwise be difficult
to discover.
Template Text:
-------------------------template begins here-----------------------
template-type=FOO
template-version=0.0
template-description=
The FOO service URL provides the location of an FOO service.
template-url-syntax=
url-path= ; There is no URL path defined for a FOO URL.
users= string M L O
# The list of all users which the FOO server supports.
Guttman, et al. Standards Track [Page 26]
^L
RFC 2609 Service Templates and URLs June 1999
groups= string M L O
# The list of all groups which the FOO server supports.
--------------------------template ends here------------------------
This template could be internationalized by registering another
version, say in German:
Name of submitter: "Erik Guttman" <Erik.Guttman@sun.com>
Language of service template: de
Security Considerations:
Wenn die USER und GROUPS Eigenschaften inbegriffen sind,
besteht die Moeglichkeit, dass die Liste der Identitaeten
von Benutzern oder Gruppen endeckt werden kann. Diese
Information wurde unter anderen Umstaenden schwierig zu
entdecken sein.
Template Text:
-------------------------template begins here-----------------------
template-type=FOO
template-version=0.0
template-description=
Der FOO Service URL zeigt die Stelle von einem Foo Service an.
template-url-syntax=
url-path= ; Es gibt keinen fuer den FOO URL definierten Pfad.
users= string M L O
# Die Liste aller Users, die der FOO Server unterstuetzt.
groups= string M L O
# Die Liste aller Gruppen, die der FOO Server unterstuetzt.
--------------------------template ends here------------------------
Note that the attribute tags are not translated. If translations
are desired, the suggested convention for doing so is to define a
separate attribute called localize-<tag> for each attribute tag which
is to be localized. This will aid in displaying the attribute tags
in a human interface.
For example, in this case above, the following two attributes could
be defined:
localize-users= string
Benutzer
localize-groups= string
Guttman, et al. Standards Track [Page 27]
^L
RFC 2609 Service Templates and URLs June 1999
Gruppen
The attributes (in SLPv2 attribute list format) for a service
registration of a FOO service based on this template, in German,
could be:
(users=Hans,Fritz),(groups=Verwaltung,Finanzbuchhaltung),
(template-type=FOO),(template-version=0.0),(template-description=
Der FOO Service URL zeigt die Stelle von einem Foo Service an.),
(template-url-syntax= \OD url-path= ; Es gibt kein fuer den FOO
URL definiert Pfad. \OD),(localize-users=Benutzer),
(localize-groups=Gruppen)
Anyone obtaining these attributes could display "Benutzer=Hans,Fritz"
in a human interface using the included information. Note that the
template attributes have been included in this registration. This is
OPTIONAL, but makes it possible to discover which template was used
to register the service.
A.2. Abstract Service Type: Net-Transducer
An example submission of an abstract service type template is:
Name of submitter: "Erik Guttman" <Erik.Guttman@sun.com>
Language of service template: en
Security Considerations:
See the security considerations of the concrete service types.
Template Text:
-------------------------template begins here-----------------------
template-type=Net-Transducer
template-version=0.0
template-description=
This is an abstract service type. The purpose of the Net-
Transducer service type is to organize into a single category
all network enabled Transducers which have certain properties.
template-url-syntax=
url-path= ; Depends on the concrete service type.
; See these templates.
sample-units= string L
# The units of sample that the Transducer provides, for instance
# C (degrees Celsius), V (Volts), kg (Kilograms), etc.
sample-resolution= string L
Guttman, et al. Standards Track [Page 28]
^L
RFC 2609 Service Templates and URLs June 1999
# The resolution of the Transducer. For instance, 10^-3 means
# that the Transducer has resolution to 0.001 unit.
sample-rate= integer L
# The speed at which samples are obtained per second. For
# instance 1000 means that one sample is obtained every millisecond.
--------------------------template ends here------------------------
A.3. Concrete Service Type: Net-Transducer:Thermometer
This is another service template submission example, supplying a
concrete service type corresponding to the abstract template above.
Name of submitter: "Erik Guttman" <Erik.Guttman@sun.com>
Language of service template: en
Security Considerations:
There is no authentication of the Transducer output. Thus,
the Thermometer output could easily be spoofed.
Template Text:
-------------------------template begins here-----------------------
template-type=service:Net-Transducer:Thermometer
template-version=0.0
template-description=
The Thermometer is a Net-Transducer capable of reading temperature.
The data is read by opening a TCP connection to one of the ports
in the service URL and reading an ASCII string until an NULL
character is encountered. The client may continue reading data at
no faster than the sample-rate, or close the connection.
template-url-syntax=
url-path = "ports=" ports-list
port-list = port / port "," ports
port = 1*DIGIT
; See the Service URL <port> production rule.
; These are the ports connections can be made on.
location-description=string
# The location where the Thermometer is located.
operator=string O
# The operator to contact to have the Thermometer serviced.
--------------------------template ends here------------------------
Guttman, et al. Standards Track [Page 29]
^L
RFC 2609 Service Templates and URLs June 1999
A.4. service: URLs and SLP
A user with an FOO enabled calendar application should not be
bothered with knowing the address of their FOO server. The calendar
client program can use SLP to obtain the FOO service: URL
automatically, say 'service:foo://server1.nosuch.org', by issuing a
Service Request. In the event that this FOO server failed, the
Calendar client can issue the same service request again to find the
backup FOO server, say 'service:foo://server2.nosuch.org'. In both
cases, the service: URL conforms to the FOO service template as do
the associated attributes (user and group.)
A network thermometer based on the above template could be advertised
with the SLPv2 attribute list:
URL = service:net-transducer:thermometer://v33.test/ports=3211
Attributes = (location-description=Missile bay 32),
(operator=Joe Agent), (sample-units=C),
(sample-resolution=10^-1),(sample-rate=10),
(template-type=service:net-transducer:thermometer),
(template-version=0.0),(template-description=
The Thermometer is a Net-Transducer capable of reading temperature.
The data is read by opening a TCP connection to one of the ports
in the service URL and reading an ASCII string until an NULL
character is encountered. The client may continue reading data at
no faster than the sample-rate, or close the connection.),
(template-url-syntax= \0D "ports=" port-list \OD
port-list = port / port "," ports \OD
port = 1*DIGIT \OD
; See the Service URL <port> production rule. \OD
; These are the ports connections can be made on.\OD)
This might be very useful for a technician who wanted to find a
Thermometers in Missile bay 32, for example.
Note that the template attributes are advertised. The
template-url-syntax value requires explicit escaped CR characters so
that the ABNF syntax is correct.
B. Acknowledgments
Thanks to Michael Day and Leland Wallace for assisting with the IPX
and AppleTalk address syntax portions. Ryan Moats provided valuable
feedback throughout the writing of this document.
Guttman, et al. Standards Track [Page 30]
^L
RFC 2609 Service Templates and URLs June 1999
C. References
[1] Protocol and service names, October 1994.
ftp://ftp.isi.edu/in-notes/iana/assignments/service-names.
[2] Port numbers, July 1997.
ftp://ftp.isi.edu/in-notes/iana/assignments/port-numbers.
[3] Alvestrand, H., "Tags for the Identification of Languages",
RFC 1766, March 1995.
[4] ANSI. Coded Character Set -- 7-bit American Standard code for
Information Interchange. X3.4-1986, 1986.
[5] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform
Resource Identifiers (URI): Generic Syntax", RFC 2396,
August 1998.
[6] Bradner, S., "Key Words for Use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[7] Apple Computer. Inside Macintosh. Addison-Wesley, 1993.
[8] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[9] S. Gursharan, R. Andrews, and A. Oppenheimer. Inside AppleTalk.
Addison-Wesley, 1990.
[10] Guttman, E., Perkins, C., Veizades, J. and M. Day, "Service
Location Protocol Version 2", RFC 2608, June 1999.
[11] Myers, J., "Simple Authentication and Security Layer (SASL)",
RFC 2222, October 1997.
[12] Narten, T. and H. Alvestrand, "Guidelines for Writing
an IANA Considerations Section in RFCs, BCP 26, RFC 2434,
October 1998
[13] Newman C. and J. Myers, "ACAP -- Application Configuration
Access Protocol", RFC 2244, November 1997.
[14] Inc Novell. IPX RIP and SAP Router Specification. Part Number
107-000029-001, Version 1.30, May 1996.
[15] Veizades, J., Guttman, E., Perkins, C. and S. Kaplan, "Service
Location Protocol", RFC 2165, July 1997.
Guttman, et al. Standards Track [Page 31]
^L
RFC 2609 Service Templates and URLs June 1999
[16] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
RFC 2279, January 1998.
D. Authors' Addresses
Questions about this memo can be directed to:
Erik Guttman
Sun Microsystems
Bahnstr. 2
74915 Waibstadt
Germany
Phone: +49 7263 911484
Fax: +1 650 786 5992
EMail: erik.guttman@sun.com
Charles E. Perkins
Sun Microsystems
15 Network Circle
Menlo Park, CA 94303
USA
Phone: +1 650 786 6464
Fas: +1 650 786 6445
EMail: cperkins@sun.com
James Kempf
Sun Microsystems
15 Network Circle
Menlo Park, CA 94303
USA
Phone: +1 650 786 5890
Fax: +1 650 786 6445
EMail: james.kempf@sun.com
Guttman, et al. Standards Track [Page 32]
^L
RFC 2609 Service Templates and URLs June 1999
E. Full Copyright Statement
Copyright (C) The Internet Society (1999). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
Guttman, et al. Standards Track [Page 33]
^L
|