aboutsummaryrefslogtreecommitdiff
path: root/xep-0071.xml
blob: ebfe2ce40b2086b83ff4e0d33b0e97551a17d50f (plain)
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
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE xep SYSTEM 'xep.dtd' [
  <!ENTITY % ents SYSTEM 'xep.ent'>
%ents;
]>
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
<xep>
<header>
  <title>XHTML-IM</title>
  <abstract>This specification defines an XHTML 1.0 Integration Set for use in exchanging instant messages that contain lightweight text markup. The protocol enables an XMPP entity to format a message using a small range of commonly-used HTML elements, attributes, and style properties that are suitable for use in instant messaging. The protocol also excludes HTML constructs that may introduce malware and other vulnerabilities (such as scripts and objects) for improved security.</abstract>
  &LEGALNOTICE;
  <number>0071</number>
  <status>Draft</status>
  <type>Standards Track</type>
  <sig>Standards</sig>
  <dependencies>
    <spec>XMPP Core</spec>
    <spec>XMPP IM</spec>
    <spec>XHTML 1.0</spec>
    <spec>Modularization of XHTML</spec>
    <spec>XEP-0030</spec>
  </dependencies>
  <supersedes/>
  <supersededby/>
  <shortname>xhtml-im</shortname>
  <schemaloc>
    <ns>wrapper namespace</ns>
    <url>http://www.xmpp.org/schemas/xhtml-im-wrapper.xsd</url>
  </schemaloc>
  <schemaloc>
    <ns>schema driver</ns>
    <url>http://www.xmpp.org/schemas/xhtml-im-driver.xsd</url>
  </schemaloc>
  <schemaloc>
    <ns>content model</ns>
    <url>http://www.xmpp.org/schemas/xhtml-im-model.xsd</url>
  </schemaloc>
  &stpeter;
  <revision>
    <version>1.5.2</version>
    <date>2017-10-12</date>
    <initials>jwi</initials>
    <remark><p>Clarify security considerations.</p></remark>
  </revision>
  <revision>
    <version>1.5.1</version>
    <date>2016-01-05</date>
    <initials>XEP Editor (mam)</initials>
    <remark><p>Update plain version of blockquote example to escape &lt;div/&gt; (Thijs Alkemade).</p></remark>
  </revision>
  <revision>
    <version>1.5</version>
    <date>2012-11-28</date>
    <initials>psa</initials>
    <remark><p>Addressed feedback received during Call for Experience: (1) generalized business rule about not adding XHTML rendering in the receiving client, (2) modified business rule about structure vs. style to recommend structural elements.</p></remark>
  </revision>
  <revision>
    <version>1.4</version>
    <date>2008-09-03</date>
    <initials>psa</initials>
    <remark><p>Encouraged support for several more structural elements from the text module (blockquote, cite, em, and strong); further clarified security considerations regarding fetching and presentation of images; modified several examples; clarified several points throughout the text.</p></remark>
  </revision>
  <revision>
    <version>1.3</version>
    <date>2007-08-29</date>
    <initials>psa</initials>
    <remark><p>Reorganized and further clarified security considerations regarding malicious objects, phishing, and presence leaks; added business rule about inclusion and processing of hyperlinks.</p></remark>
  </revision>
  <revision>
    <version>1.2</version>
    <date>2007-03-14</date>
    <initials>psa</initials>
    <remark><p>Clarified security considerations regarding images.</p></remark>
  </revision>
  <revision>
    <version>1.1</version>
    <date>2006-01-11</date>
    <initials>psa</initials>
    <remark><p>More clearly specified that XHTML-IM content is intended for use only within message stanzas, that it may be included in IQ stanzas (usage undefined) and that it may be included in presence stanzas (usage: formatted version of status); specified security consideration regarding hyperlinks.</p></remark>
  </revision>
  <revision>
    <version>1.0</version>
    <date>2004-09-29</date>
    <initials>psa</initials>
    <remark><p>Per a vote of the Jabber Council, advanced status to Draft.</p></remark>
  </revision>
  <revision>
    <version>0.19</version>
    <date>2004-09-27</date>
    <initials>psa</initials>
    <remark><p>Per list discussion, removed recommendation to preserve whitespace in XHTML bodies (instead, use of &lt;br/&gt; and non-breaking spaces is recommended); noted that nesting of elements is not recommended except within &lt;div/&gt; elements; and switched from padding-left to margin-left for indentation.</p></remark>
  </revision>
  <revision>
    <version>0.18</version>
    <date>2004-09-15</date>
    <initials>psa</initials>
    <remark><p>Added recommendation to preserve whitespace in XHTML bodies.</p></remark>
  </revision>
  <revision>
    <version>0.17</version>
    <date>2004-09-08</date>
    <initials>psa</initials>
    <remark><p>Simplified the recommended profiles based on list discussion; changed the examples accordingly.</p></remark>
  </revision>
  <revision>
    <version>0.16</version>
    <date>2004-08-30</date>
    <initials>psa</initials>
    <remark><p>Specified the scope of the proposal; clarified reasons for the choice of technology; clarified one business rule; corrected several typographical errors.</p></remark>
  </revision>
  <revision>
    <version>0.15</version>
    <date>2004-07-29</date>
    <initials>psa</initials>
    <remark><p>Based on W3C feedback, added content model and refactored the text to ensure separation between the XHTML 1.0 Integration Set itself and the XSF's recommended profile of the Integration Set; also split the requirements out from the Concepts and Approach section, added several more examples, and showed renderings of the examples.</p></remark>
  </revision>
  <revision>
    <version>0.14</version>
    <date>2004-05-19</date>
    <initials>psa</initials>
    <remark><p>Clarified relationship between wrapper element and XHTML content.</p></remark>
  </revision>
  <revision>
    <version>0.13</version>
    <date>2004-05-18</date>
    <initials>psa</initials>
    <remark><p>Initial version of XHTML modularization.</p></remark>
  </revision>
  <revision>
    <version>0.12</version>
    <date>2004-03-10</date>
    <initials>psa</initials>
    <remark><p>Clarified and corrected several points in the text; improved and added to the examples.</p></remark>
  </revision>
  <revision>
    <version>0.11</version>
    <date>2003-12-05</date>
    <initials>psa</initials>
    <remark><p>Defined XHTML 1.0 Integration Set conformance; removed schema pending work on XHTML modularization with W3C.</p></remark>
  </revision>
  <revision>
    <version>0.10</version>
    <date>2003-11-25</date>
    <initials>psa</initials>
    <remark><p>Cleaned up the schema; added W3C considerations.</p></remark>
  </revision>
  <revision>
    <version>0.9</version>
    <date>2003-09-30</date>
    <initials>psa</initials>
    <remark><p>Changed status to Deferred pending discussion with the W3C regarding XHTML modularization.</p></remark>
  </revision>
  <revision>
    <version>0.8</version>
    <date>2003-09-16</date>
    <initials>psa</initials>
    <remark><p>Changed MUST to SHOULD for support of the Style Attribute Module; clarified relationship of XHTML-IM schema to XHTML schema; slight text cleanup.</p></remark>
  </revision>
  <revision>
    <version>0.7</version>
    <date>2003-08-19</date>
    <initials>psa</initials>
    <remark><p>Added the &lt;code/&gt; element.</p></remark>
  </revision>
  <revision>
    <version>0.6</version>
    <date>2003-06-24</date>
    <initials>psa</initials>
    <remark><p>Made image support recommended (not mandatory); removed references to conversation threads; fixed some issues in the schema; made small editorial changes throughout.</p></remark>
  </revision>
  <revision>
    <version>0.5</version>
    <date>2003-04-29</date>
    <initials>psa</initials>
    <remark><p>Fixed the schema, made several small editorial changes.</p></remark>
  </revision>
  <revision>
    <version>0.4</version>
    <date>2003-02-20</date>
    <initials>psa</initials>
    <remark><p>Brought back several content-based elements; added preliminary schema.</p></remark>
  </revision>
  <revision>
    <version>0.3</version>
    <date>2003-02-19</date>
    <initials>psa</initials>
    <remark><p>Defined the attributes and style properties required by this document.</p></remark>
  </revision>
  <revision>
    <version>0.2</version>
    <date>2003-02-17</date>
    <initials>psa</initials>
    <remark><p>Described the requirements more fully; added additional restrictions above and beyond the standard XHTML 1.0 Modules; added disco examples.</p></remark>
  </revision>
  <revision>
    <version>0.1</version>
    <date>2003-02-16</date>
    <initials>psa</initials>
    <remark><p>Initial version.</p></remark>
  </revision>
</header>
<section1 topic='Introduction' anchor='intro'>
  <p>This document defines methods for exchanging instant messages that contain lightweight text markup. In the context of this document, "lightweight text markup" is to be understood as a combination of minimal structural elements and presentational styles that can easily be rendered on a wide variety of devices without requiring a full rich-text rendering engine such as a web browser. Examples of lightweight text markup include basic text blocks (e.g., paragraphs and blockquotes), structural elements (e.g., emphasis and strength), lists, hyperlinks, image references, and font styles (e.g., sizes and colors).</p>
  <p>Note: This specification essentially defines a recommended set of XHTML elements and attributes for use in instant messaging by applying a series of "filters" to the wealth of XHTML features; however, developers of Jabber/XMPP clients mainly need to pay attention to the <link url='#profile-summary'>Summary of Recommendations</link> rather than the complexities of how the recommendations are derived.</p>
</section1>
<section1 topic='Choice of Technology' anchor='tech'>
  <p>In the past, there have existed several incompatible methods within the Jabber community for exchanging instant messages that contain lightweight text markup. The most notable such methods have included derivatives of &w3xhtml; as well as of &rtf;.</p>
  <p>Although it is sometimes easier for client developers to implement RTF support (this is especially true on certain Microsoft Windows operating systems), there are several reasons (consistent with the &xep0134;) for the &XSF; to avoid the use of RTF in developing a protocol for lightweight text markup. Specifically:</p>
  <ol>
    <li>RTF is not a structured vocabulary derived from SGML (as is &w3html;) or, more relevantly, from XML (as is XHTML 1.0).</li>
    <li>RTF is under the control of the Microsoft Corporation and thus is not an open standard maintained by a recognized standards development organization; therefore the XSF is unable to contribute to or influence its development if necessary, and any protocol the XSF developed using RTF would introduce unwanted dependencies.</li>
  </ol>
  <p>Conversely, there are several reasons to prefer XHTML for lightweight text markup:</p>
  <ol>
    <li>XHTML is a structured format that is defined as an application of &w3xml;, making it especially appropriate for sending over Jabber/XMPP, which is at root a technology for streaming XML (see &xmppcore;).</li>
    <li>XHTML is an open standard developed by the &W3C;, a recognized standards development organization.</li>
  </ol>
  <p>Therefore, this document defines support for lightweight text markup in the form of an XMPP extension that encapsulates content defined by an XHTML 1.0 Integration Set that we label "XHTML-IM". The remainder of this document discusses lightweight text markup in terms of XHTML 1.0 only and does not further consider RTF or other technologies.</p>
</section1>
<section1 topic='Requirements' anchor='reqs'>
  <p>HTML was originally designed for authoring and presenting stuctured documents on the World Wide Web, and was subsequently extended to handle more advanced functionality such as image maps and interactive forms. However, the requirements for publishing documents (or developing transactional websites) for presentation by dedicated XHTML user agents on traditional computers or small-screen devices are fundamentally different from the requirements for lightweight text markup of instant messages; for this reason, only a reduced set of XHTML features is needed for XHTML-IM. In particular:</p>
  <ol>
    <li><p>IM clients are not XHTML clients: their primary purpose is not to read pre-existing XHTML documents, but to read <em>and generate</em> relatively large numbers of fairly small instant messages.</p></li>
    <li><p>The underlying context for XHTML content in Jabber/XMPP instant messaging is provided not by a full XHTML document, but by an XML stream, and specifically by a message stanza within that stream. Thus the &lt;head/&gt; element and all its children are unnecessary. Only the &lt;body/&gt; element and some of its children are appropriate for use in instant messaging.</p></li>
    <li><p>The XHTML content that is read by one's IM client is normally generated on the fly by one's conversation partner (or, to be precise, by his or her IM client). Thus there is an inherent limit to the sophistication of the XHTML markup involved. Even in normal XHTML documents, fairly basic structural and rendering elements such as definition lists, abbreviations, addresses, and computer input handling (e.g., &lt;kbd/&gt; and &lt;var/&gt;) are relatively rare. There is little or no foreseeable need for such elements within the context of instant messaging.</p></li>
    <li><p>The foregoing is doubly true of more advanced markup such as tables, frames, and forms (however, there exists an XMPP extension that provides an instant messaging equivalent of the latter, as defined in &xep0004;).</p></li>
    <li><p>Although ad-hoc styles are useful for messaging (by means of the 'style' attribute), full support for &w3css; (defined by the &lt;style/&gt; element or a standalone .css file, and implemented via the 'class' attribute) would be overkill since many CSS1 properties (e.g., box, classification, and text properties) were developed especially for sophisticated page layout.</p></li>
    <li><p>Background images, audio, animated text, layers, applets, scripts, and other multimedia content types are unnecessary, especially given the existence of XMPP extensions such as &xep0096;, &xep0166;, and &xep0234;.</p></li>
    <li><p>Content transformations such as those defined by &w3xslt; must not be necessary in order for an instant messaging application to present lightweight text markup to an end user.</p></li>
  </ol>
  <p>As explained below, some of these requirements are addressed by the definition of the XHTML-IM Integration Set itself, while others are addressed by a recommended "profile" for that Integration Set in the context of instant messaging applications.</p>
</section1>
<section1 topic='Concepts and Approach' anchor='concepts'>
  <p>This document defines an adaptation of XHTML 1.0 (specifically, an XHTML 1.0 Integration Set) that makes it possible to provide lightweight text markup of instant messages (mainly for Jabber/XMPP instant messages, although the Integration Set defined herein could be used by other protocols). This pattern is familiar from email, wherein the HTML-formatted version of the message supplements but does not supersede the text-only version of the message. <note>The XHTML is merely an alternative version of the message body or bodies, and the semantic meaning is to be derived from the textual message body or bodies rather than the XHTML version.</note></p>
  <p>In Jabber/XMPP communications, the meaning (as opposed to markup) of the message MUST always be represented as best as possible in the normal &lt;body/&gt; child element or elements of the &MESSAGE; stanza qualified by the 'jabber:client' (or 'jabber:server') namespace. Lightweight text markup is then provided within an &lt;html/&gt; element qualified by the 'http://jabber.org/protocol/xhtml-im' namespace. <note>It might have been better to use an element name other than &lt;html/&gt; for the wrapper element; however, changing it would not be backwards-compatible with the older protocol and existing implementations.</note> However, this &lt;html/&gt; element is used solely as a "wrapper" for the XHTML content itself, which content is encapsulated via one or more &lt;body/&gt; elements qualified by the 'http://www.w3.org/1999/xhtml' namespace, along with appropriate child elements thereof.</p>
  <p>The following example illustrates this approach.</p>
  <example caption='A simple example'><![CDATA[
<message>
  <body>hi!</body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xmlns='http://www.w3.org/1999/xhtml'>
      <p style='font-weight:bold'>hi!</p>
    </body>
  </html>
</message>
]]></example>
  <p>Technically speaking, there are three aspects to the approach taken herein:</p>
  <ol>
    <li>Definition of the &lt;html/&gt; "wrapper" element, which functions as an XMPP extension within XMPP &lt;message/&gt; stanzas.</li>
    <li>Definition of the XHTML-IM Integration Set itself in terms of supported XHTML 1.0 modules, using the concepts defined in &w3xhtmlmod;.</li>
    <li>A recommended "profile" regarding the specific XHTML 1.0 elements and attributes to be supported from each XHTML 1.0 module.</li>
  </ol>
  <p>These three aspects are defined in the three document sections that follow.</p>
</section1>
<section1 topic='Wrapper Element' anchor='wrapper'>
  <p>The root element for including XHTML content within XMPP stanzas is &lt;html/&gt;. This element is qualified by the 'http://jabber.org/protocol/xhtml-im' namespace. From the perspective of XMPP, the wrapper element functions as an XMPP extension element; from the perspective of XHTML, it functions as a wrapper for XHTML 1.0 content qualified by the 'http://www.w3.org/1999/xhtml' namespace. Such XHTML content MUST be contained in one or more &lt;body/&gt; elements qualified by the 'http://www.w3.org/1999/xhtml' namespace and MUST conform to the XHTML-IM Integration Set defined in the following section. If more than one &lt;body/&gt; element is included in the &lt;html/&gt; wrapper element, each &lt;body/&gt; element MUST possess an 'xml:lang' attribute with a distinct value, where the value of that attribute MUST adhere to the rules defined in &rfc5646;. A formal definition of the &lt;html/&gt; element is provided in the <link url="#schemas-wrapper">XHTML-IM Wrapper Schema</link>.</p>
  <p>The XHTML &lt;body/&gt; element is not to be confused with the XMPP &lt;body/&gt; element, which is a child of a &MESSAGE; stanza and is qualified by the 'jabber:client' or 'jabber:server' namespace as described in &xmppim;. The &lt;html/&gt; wrapper element is intended for inclusion only as a direct child element of the XMPP &MESSAGE; stanza and only in order to specify a marked-up version of the message &BODY; element or elements, but MAY be included elsewhere in accordance with the "extended namespace" rules defined in the <cite>XMPP IM</cite> specification.</p>
  <p>Until and unless (1) additional integration sets are defined and (2) mechanisms are specified for discovering or negotiating which integration sets are supported, the XHTML markup contained within the &lt;html/&gt; wrapper element:</p>
  <ol>
    <li>MUST NOT include elements and attributes that are not part of the XHTML-IM Integration Set defined in Section 6 of this document; any such elements and attributes MUST be ignored if received.</li>
    <li>SHOULD NOT include elements and attributes that are not part of the recommended profile of the XHTML-IM Integration Set defined in Section 7 of this document; any such elements and attributes SHOULD be ignored if received.</li>
  </ol>
  <p>Note: In the foregoing restrictions, the meaning of "ignore" is defined by the conformance requirements of <cite>Modularization of XHTML</cite>, as summarized in the <link url="#w3c-conformance">User Agent Conformance</link> section of this document).</p>
</section1>
<section1 topic='XHTML-IM Integration Set' anchor='def'>
  <p>This section defines an XHTML 1.0 Integration Set for use in the context of instant messaging. Given its intended usage, we label it "XHTML-IM".</p>
  <p><cite>Modularization of XHTML</cite> provides the ability to formally define subsets of XHTML 1.0 via the concept of "modularization" (which may be familiar from &w3xhtmlbasic;). Many of the defined modules are not necessary or useful in the context of instant messaging, and in the context of Jabber/XMPP instant messaging specifically some modules have been superseded by well-defined XMPP extensions. This document specifies that XHTML-IM shall be based on the following XHTML 1.0 modules:</p>
  <ul>
    <li>Core Modules
      <ul>
        <li>Structure Module</li>
        <li>Text Module</li>
        <li>Hypertext Module</li>
        <li>List Module</li>
      </ul>
    </li>
    <li>Image Module</li>
    <li>Style Attribute Module</li>
  </ul>
  <p><cite>Modularization of XHTML</cite> defines many additional modules, such as Table Modules, Form Modules, Object Modules, and Frame Modules. None of these modules is part of the XHTML-IM Integration Set. If support for such modules is desired, it MUST be defined in a separate and distinct integration set.</p>
  <section2 topic='Structure Module Definition' anchor='def-structure'>
    <p>The Structure Module is defined as including the following elements and attributes: <note>The 'style' attribute is specified herein where appropriate because the Style Attribute Module is included in the definition of the XHTML-IM Integration Set, whereas the event-related attributes (e.g., 'onclick') are not specified because the Implicit Events Module is not included.</note></p>
    <table caption='Defined Structure Module Elements and Attributes'>
      <tr><th>Element</th><th>Attributes</th></tr>
      <tr><td>&lt;body/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;head/&gt;</td><td>profile</td></tr>
      <tr><td>&lt;html/&gt;</td><td>version</td></tr>
      <tr><td>&lt;title/&gt;</td><td></td></tr>
    </table>
  </section2>
  <section2 topic='Text Module Definition' anchor='def-text'>
    <p>The Text Module is defined as including the following elements and attributes:</p>
    <table caption='Defined Text Module Elements and Attributes'>
      <tr><th>Element</th><th>Attributes</th></tr>
      <tr><td>&lt;abbr/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;acronym/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;address/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;blockquote/&gt;</td><td>class, id, title; style; cite</td></tr>
      <tr><td>&lt;br/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;cite/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;code/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;dfn/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;div/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;em/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;h1/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;h2/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;h3/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;h4/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;h5/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;h6/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;kbd/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;p/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;pre/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;q/&gt;</td><td>class, id, title; style; cite</td></tr>
      <tr><td>&lt;samp/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;span/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;strong/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;var/&gt;</td><td>class, id, title; style</td></tr>
    </table>
  </section2>
  <section2 topic='Hypertext Module Definition' anchor='def-hypertext'>
    <p>The Hypertext Module is defined as including the &lt;a/&gt; element only:</p>
    <table caption='Defined Hypertext Module Elements and Attributes'>
      <tr><th>Element</th><th>Attributes</th></tr>
      <tr><td>&lt;a/&gt;</td><td>class, id, title; style; accesskey, charset, href, hreflang, rel, rev, tabindex, type</td></tr>
    </table>
  </section2>
  <section2 topic='List Module Definition' anchor='def-list'>
    <p>The List Module is defined as including the following elements and attributes:</p>
    <table caption='Defined List Module Elements and Attributes'>
      <tr><th>Element</th><th>Attributes</th></tr>
      <tr><td>&lt;dl/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;dt/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;dd/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;ol/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;ul/&gt;</td><td>class, id, title; style</td></tr>
      <tr><td>&lt;li/&gt;</td><td>class, id, title; style</td></tr>
    </table>
  </section2>
  <section2 topic='Image Module Definition' anchor='def-image'>
    <p>The Image Module is defined as including the &lt;img/&gt; element only:</p>
    <table caption='Defined Image Module Elements and Attributes'>
      <tr><th>Element</th><th>Attributes</th></tr>
      <tr><td>&lt;img/&gt;</td><td>class, id, title; style; alt, height, longdesc, src, width</td></tr>
    </table>
  </section2>
  <section2 topic='Style Attribute Module Definition' anchor='def-style'>
    <p>The Style Attribute Module is defined as including the style attribute only, as included in the preceding definition tables.</p>
  </section2>
</section1>
<section1 topic='Recommended Profile' anchor='profile'>
  <p>Even within the restricted set of modules specified as defining the XHTML-IM Integration Set (see preceding section), some elements and attributes are inappropriate or unnecessary for the purpose of instant messaging; although such elements and attributes MAY be included in accordance with the XHTML-IM Integration Set, further recommended restrictions regarding which elements and attributes to include in XHTML content are specified below.</p>
  <section2 topic='Structure Module Profile' anchor='profile-structure'>
    <p>The intent of the protocol defined herein is to support lightweight text markup of XMPP message bodies only. Therefore the &lt;head/&gt;, &lt;html/&gt;, and &lt;title/&gt; elements SHOULD NOT be generated by a compliant implementation, and SHOULD be ignored if received (where the meaning of "ignore" is defined by the conformance requirements of <cite>Modularization of XHTML</cite>, as summarized in the <link url="#w3c-conformance">User Agent Conformance</link> section of this document). However, the &lt;body/&gt; element is REQUIRED, since it is the root element for all XHTML-IM content.</p>
  </section2>
  <section2 topic='Text Module Profile' anchor='profile-text'>
    <p>Not all of the Text Module elements are appropriate in the context of instant messaging, since the XHTML content that one views is generated by one's conversation partner in what is often a rapid-fire conversation thread. Only the following elements are RECOMMENDED in XHTML-IM:</p>
    <ul>
      <li>&lt;blockquote/&gt;</li>
      <li>&lt;br/&gt;</li>
      <li>&lt;cite/&gt;</li>
      <li>&lt;em/&gt;</li>
      <li>&lt;p/&gt;</li>
      <li>&lt;span/&gt;</li>
      <li>&lt;strong/&gt;</li>
    </ul>
    <p>The other Text Module elements MAY be generated by a compliant implementation but MAY be ignored if received (where the meaning of "ignore" is defined by the conformance requirements of <cite>Modularization of XHTML</cite>, as summarized in the <link url="#w3c-conformance">User Agent Conformance</link> section of this document).</p>
  </section2>
  <section2 topic='Hypertext Module Profile' anchor='profile-hypertext'>
    <p>The only recommended attributes of the &lt;a/&gt; element are specified in the <link url="#profile-attributes">Recommended Attributes</link> section of this document.</p>
  </section2>
  <section2 topic='List Module Profile' anchor='profile-list'>
    <p>Because it is unlikely that an instant messaging user would generate a definition list, only ordered and unordered lists are RECOMMENDED. Definition lists SHOULD NOT be generated by a compliant implementation, and SHOULD be ignored if received (where the meaning of "ignore" is defined by the conformance requirements of <cite>Modularization of XHTML</cite>, as summarized in the <link url="#w3c-conformance">User Agent Conformance</link> section of this document).</p>
  </section2>
  <section2 topic='Image Module Profile' anchor='profile-image'>
    <p>The only recommended attributes of the &lt;img/&gt; element are specified in the <link url="#profile-attributes">Recommended Attributes</link> section of this document.</p>
    <p>The XHTML specification allows a "data:" URL &rfc2397; as the value of the 'src' attribute. This is NOT RECOMMENDED for use in XHTML-IM, because it can significantly increase the size of the message stanza and XMPP is not optimized for large stanzas. If the image data is small (less than 8 kilobytes), clients MAY use &xep0231; in coordination with XHTML-IM; if the image data is large, the value of the 'src' SHOULD be a pointer to an externally available file for the image (or the sender SHOULD use a dedicated file transfer method such as &xep0047; or &xep0065;).</p>
    <p>For security reasons or because of display constraints, a compliant client MAY choose to display 'alt' text only, not the image itself (for details, see the <link url='#security-code'>Malicious Objects</link> section of this document).</p>
  </section2>
  <section2 topic='Style Attribute Module Profile' anchor='profile-style'>
    <p>This module MUST be supported in XHTML-IM if possible; although clients written for certain platforms (e.g., console clients, mobile phones, and handheld computers) or for certain classes of users (e.g., text-to-speech clients) might not be able to support all of the recommended styles directly, they SHOULD attempt to emulate or translate the defined style properties into text or other presentation styles that are appropriate for the platform or user base in question.</p>
    <p>A full list of recommended style properties is provided below.</p>
    <section3 topic='Recommended Style Properties' anchor='profile-style-properties'>
      <p><cite>CSS1</cite> defines 42 "atomic" style properties (which are categorized into font, color and background, text, box, and classification properties) as well as 11 "shorthand" properties ("font", "background", "margin", "padding", "border-width", "border-top", "border-right", "border-bottom", "border-left", "border", and "list-style"). Many of these properties are not appropriate for use in text-based instant messaging, for one or more of the following reasons:</p>
      <ol>
        <li>The property applies to or depends on the inclusion of images other than those handled by the XHTML Image Module (e.g., the "background-image", "background-repeat", "background-attachment", "background-position", and "list-style-image"  properties).</li>
        <li>The property is intended for advanced document layout (e.g., the "line-height" property and most of the box properties, with the exception of "margin-left", which is useful for indenting text, and "margin-right", which can be useful when dealing with images).</li>
        <li>The property is unnecessary since it can be emulated via user input or recommended XHTML stuctural elements (e.g., the "text-transform" property can be emulated by the user's keystrokes or use of the caps lock key)</li>
        <li>The property is otherwise unlikely to ever be used in the context of rapid-fire conversations (e.g., the "font-variant", "word-spacing", "letter-spacing", and "list-style-position" properties).</li>
        <li>The property is a shorthand property but some of the properties it includes are not appropriate for instant messaging applications according to the foregoing considerations (in fact this applies to all of the shorthand properties).</li>
      </ol>
      <p>Unfortunately, <cite>CSS1</cite> does not include mechanisms for defining profiles thereof (as does XHTML 1.0 in the form of XHTML Modularization). While there exist reduced sets of CSS2, these introduce more complexity than is desirable in the context of XHTML-IM. Therefore we simply provide a list of recommended CSS1 style properties.</p>
      <p>XHTML-IM stipulates that only the following style properties are RECOMMENDED:</p>
      <ul>
        <li>background-color</li>
        <li>color</li>
        <li>font-family</li>
        <li>font-size</li>
        <li>font-style</li>
        <li>font-weight</li>
        <li>margin-left</li>
        <li>margin-right</li>
        <li>text-align</li>
        <li>text-decoration</li>
      </ul>
      <p>Although a compliant implementation MAY generate or process other style properties defined in CSS1, such behavior is NOT RECOMMENDED by this document.</p>
    </section3>
  </section2>
  <section2 topic='Recommended Attributes' anchor='profile-attributes'>
    <section3 topic='Common Attributes' anchor='profile-attributes-common'>
      <p>Section 5.1 of <cite>Modularization of XHTML</cite> describes several "common" attribute collections: a "Core" collection ('class', 'id', 'title'), an "I18N" collection ('xml:lang', not shown below since it is implied in XML), an "Events" collection (not included in the XHTML-IM Integration Set because the Intrinsic Events Module is not selected), and a "Style" collection ('style'). The following table summarizes the recommended profile of these common attributes within the XHTML 1.0 content itself:</p>
      <table caption='Recommended Usage of Common Attributes'>
        <tr><th>Attribute</th><th>Usage</th><th>Reason</th></tr>
        <tr>
          <td>class</td>
          <td>NOT RECOMMENDED</td>
          <td>External stylesheets (which 'class' would typically reference) are not recommended.</td>
        </tr>
        <tr>
          <td>id</td>
          <td>NOT RECOMMENDED</td>
          <td>Internal links and message fragments are not recommended in IM content, nor are external stylesheets (which also make use of the 'id' attribute).</td>
        </tr>
        <tr>
          <td>title</td>
          <td>NOT RECOMMENDED</td>
          <td>Granting of titles to elements in IM content seems unnecessary.</td>
        </tr>
        <tr>
          <td>style</td>
          <td>REQUIRED</td>
          <td>The 'style' attribute is required since it is the vehicle for presentational styles.</td>
        </tr>
        <tr>
          <td>xml:lang</td>
          <td>NOT RECOMMENDED</td>
          <td>Differentiation of language identification SHOULD occur at the level of the &lt;body/&gt; element only.</td>
        </tr>
      </table>
    </section3>
    <section3 topic='Specialized Attributes' anchor='profile-attributes-special'>
      <p>Beyond the "common" attributes, certain elements within the modules selected for the XHTML-IM Integration Set are allowed to possess other attributes, such as eight attributes for the &lt;a/&gt; element and five attributes for the &lt;img/&gt; element. The recommended profile for such attributes is provided in the following table:</p>
      <table caption='Recommended Usage of Specialized Attributes'>
        <tr><th>Element Scope</th><th>Attribute</th><th>Usage</th></tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>accesskey</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>charset</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>href</td>
          <td>REQUIRED</td>
        </tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>hreflang</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>rel</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>rev</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>tabindex</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;a/&gt;</td>
          <td>type</td>
          <td>RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;cite/&gt;</td>
          <td>uri</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;img/&gt;</td>
          <td>alt</td>
          <td>REQUIRED</td>
        </tr>
        <tr>
          <td>&lt;img/&gt;</td>
          <td>height</td>
          <td>RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;img/&gt;</td>
          <td>longdesc</td>
          <td>NOT RECOMMENDED</td>
        </tr>
        <tr>
          <td>&lt;img/&gt;</td>
          <td>src</td>
          <td>REQUIRED</td>
        </tr>
        <tr>
          <td>&lt;img/&gt;</td>
          <td>width</td>
          <td>RECOMMENDED</td>
        </tr>
      </table>
    </section3>
    <section3 topic='Other Attributes' anchor='profile-attributes-other'>
      <p>Other XHTML 1.0 attributes SHOULD NOT be generated by a compliant implementation, and SHOULD be ignored if received (where the meaning of "ignore" is defined by the conformance requirements of <cite>Modularization of XHTML</cite>, as summarized in the <link url="#w3c-conformance">User Agent Conformance</link> section of this document).</p>
    </section3>
  </section2>
  <section2 topic='Summary of Recommendations' anchor='profile-summary'>
    <p>The following table summarizes the elements and attributes that are recommended within the XHTML-IM Integration Set.</p>
    <table caption='Recommended Elements and Attributes'>
      <tr>
        <th>Element</th>
        <th>Attributes</th>
      </tr>
      <tr>
        <td>&lt;a/&gt;</td>
        <td>href, style, type</td>
      </tr>
      <tr>
        <td>&lt;blockquote/&gt;</td>
        <td>style</td>
      </tr>
      <tr>
        <td>&lt;body/&gt;</td>
        <td>style, xml:lang <note>When contained within the &lt;html xmlns='http://jabber.org/protocol/xhtml-im'&gt; element, a &lt;body/&gt; element is qualified by the 'http://www.w3.org/1999/xhtml' namespace; naturally, this is a namespace declaration rather than an attribute per se, and therefore is not mentioned in the attribute enumeration.</note></td>
      </tr>
      <tr>
        <td>&lt;br/&gt;</td>
        <td>-none-</td>
      </tr>
      <tr>
        <td>&lt;cite/&gt;</td>
        <td>style</td>
      </tr>
      <tr>
        <td>&lt;em/&gt;</td>
        <td>-none-</td>
      </tr>
      <tr>
        <td>&lt;img/&gt;</td>
        <td>alt, height, src, style, width</td>
      </tr>
      <tr>
        <td>&lt;li/&gt;</td>
        <td>style</td>
      </tr>
      <tr>
        <td>&lt;ol/&gt;</td>
        <td>style</td>
      </tr>
      <tr>
        <td>&lt;p/&gt;</td>
        <td>style</td>
      </tr>
      <tr>
        <td>&lt;span/&gt;</td>
        <td>style</td>
      </tr>
      <tr>
        <td>&lt;strong/&gt;</td>
        <td>-none-</td>
      </tr>
      <tr>
        <td>&lt;ul/&gt;</td>
        <td>style</td>
      </tr>
    </table>
    <p>Any other elements and attributes defined in the XHTML 1.0 modules that are included in the XHTML-IM Integration Set SHOULD NOT be generated by a compliant implementation, and SHOULD be ignored if received (where the meaning of "ignore" is defined by the conformance requirements of <cite>Modularization of XHTML</cite>, as summarized in the <link url="#w3c-conformance">User Agent Conformance</link> section of this document).</p>
  </section2>
</section1>
<section1 topic='Business Rules' anchor='bizrules'>
  <p>The following rules apply to the generation and processing of XHTML content by Jabber clients or other XMPP entities.</p>
  <ol>
    <li><p>XHTML-IM content is designed to provide a formatted version of the XML character data provided in the &BODY; of an XMPP &MESSAGE; stanza; if such content is included in an XMPP message, the &lt;html/&gt; element MUST be a direct child of the &MESSAGE; stanza and the XHTML-IM content MUST be understood as a formatted version of the message body. XHTML-IM content MAY be included within XMPP &IQ; stanzas (or children thereof), but any such usage is undefined. In order to preserve bandwidth, XHTML-IM content SHOULD NOT be included within XMPP &PRESENCE; stanzas; however, if it is so included, the &lt;html/&gt; element MUST be a direct child of the &PRESENCE; stanza and the XHTML-IM content MUST be understood as a formatted version of the XML character data provided in the &STATUS; element.</p></li>
    <li><p>The sending client MUST ensure that, if XHTML content is sent, its meaning is the same as that of the plaintext version, and that the two versions differ only in markup rather than meaning.</p></li>
    <li><p>XHTML-IM is a reduced set of <cite>XHTML 1.0</cite> and thus also of <cite>XML 1.0</cite>. Therefore all opening tags MUST be completed by inclusion of an appropriate closing tag.</p></li>
    <li><p><cite>XMPP Core</cite> specifies that an XMPP &MESSAGE; MAY contain more than one &lt;body/&gt; child as long as each &lt;body/&gt; possesses an 'xml:lang' attribute with a distinct value. In order to ensure correct internationalization, if an XMPP &MESSAGE; stanza contains more than one &lt;body/&gt; child and is also sent as XHTML-IM, the &lt;html/&gt; element SHOULD also contain more than one &lt;body/&gt; child, with one such element for each &lt;body/&gt; child of the &MESSAGE; stanza (distinguished by an appropriate 'xml:lang' attribute).</p></li>
    <li><p>Section 11.1 of <cite>XMPP Core</cite> stipulates that character entities other than the five general entities defined in Section 4.6 of the XML specification (i.e., &amp;lt;, &amp;gt;, &amp;amp;, &amp;apos;, and &amp;quot;) MUST NOT be sent over an XML stream. Therefore implementations of XHTML-IM MUST NOT include predefined XHTML 1.0 entities such as &amp;nbsp; -- instead, implementations MUST use the equivalent character references as specified in Section 4.1 of the XML specification (even in non-obvious places such as URIs that are included in the 'href' attribute).</p></li>
    <li><p>For elements and attributes qualified by the 'http://www.w3.org/1999/xhtml' namespace, user agent conformance is guided by the requirements defined in <cite>Modularization of XHTML</cite>; for details, refer to the <link url="#w3c-conformance">User Agent Conformance</link> section of this document.</p></li>
    <li><p>Where strictly presentational style are desired (e.g., colored text), it might be necessary to use 'style' attributes (e.g., &lt;span style='font-color: green'&gt;this is green&lt;/span&gt;). However, where possible it is instead RECOMMENDED to use appropriate structural elements (e.g., &lt;strong/&gt; and &lt;blockquote/&gt; instead of, say, style='font-weight: bold' or style='margin-left: 5%').</p></li>
    <li><p>Nesting of block structural elements (&lt;p/&gt;) and list elements (&lt;dl/&gt;, &lt;ol/&gt;, &lt;ul/&gt;) is NOT RECOMMENDED, except within &lt;div/&gt; elements.</p></li>
    <li><p>It is RECOMMENDED for implementations to replace line breaks with the &lt;br/&gt; element and to replace significant whitepace with the appropriate number of non-breaking spaces (via the NO-BREAK SPACE character or its equivalent), where "significant whitespace" means whitespace that makes some material difference (e.g., one or more spaces at the beginning of a line or more than one space anywhere else within a line), not "normal" whitespace separating words or punctuation.</p></li>
    <li><p>When rendering XHTML-IM content, a receiving user agent MUST NOT render as XHTML any text that was not structured by the sending user agent using XHTML elements and attributes; if the sender wishes text to be structured (e.g., for certain words to be emphasized or for URIs to be linked), the sending user agent MUST represent the text using the appropriate XHTML elements and attributes.</p></li>
  </ol>
</section1>
<section1 topic='Examples' anchor='examples'>
  <p>The following examples provide an insight into the inclusion of XHTML content in XMPP &MESSAGE; stanzas but are by no means exhaustive or definitive.</p>
  <p>(Note: The examples might not render correctly in all web browsers, since not all web browsers comply fully with the XHTML 1.0 and CSS1 standards. Markup in the examples may include line breaks for readability. Example renderings are shown with a colored background to set them off from the rest of the text.)</p>
  <example caption='Emphasis, font colors, strength'><![CDATA[
<message>
  <body>Wow, I&apos;m green with envy!</body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xmlns='http://www.w3.org/1999/xhtml'>
      <p style='font-size:large'>
        <em>Wow</em>, I&apos;m <span style='color:green'>green</span>
        with <strong>envy</strong>!
      </p>
    </body>
  </html>
</message>
]]></example>
  <p>This could be rendered as follows:</p>
  <div class='example'>
    <p style='font-size: large'><em>Wow</em>, I&apos;m <span style='color:green'>green</span> with <strong>envy</strong>!</p>
  </div>
  <example caption='Blockquote, cite'><![CDATA[
<message>
  <body>As Emerson said in his essay Self-Reliance:

     &quot;A foolish consistency is the hobgoblin of little minds.&quot;
  </body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xmlns='http://www.w3.org/1999/xhtml'>
      <p>As Emerson said in his essay <cite>Self-Reliance</cite>:</p>
      <blockquote>
        &quot;A foolish consistency is the hobgoblin of little minds.&quot;
      </blockquote>
    </body>
  </html>
</message>
]]></example>
  <p>This could be rendered as follows:</p>
  <div class='example'>
    <p>As Emerson said in his essay <cite>Self-Reliance</cite>:</p>
    <blockquote>
      &quot;A foolish consistency is the hobgoblin of little minds.&quot;
    </blockquote>
  </div>
  <example caption='An image and a hyperlink'><![CDATA[
<message>
  <body>Hey, are you licensed to Jabber?

  http://www.xmpp.org/images/psa-license.jpg
  </body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xmlns='http://www.w3.org/1999/xhtml'>
      <p>Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>?</p>
      <p><img src='http://www.xmpp.org/images/psa-license.jpg'
              alt='A License to Jabber'
              height='261'
              width='537'/></p>
    </body>
  </html>
</message>
]]></example>
  <p>This could be rendered as follows:</p>
  <div class='indent'>
    <p>Hey, are you licensed to <link url='http://www.jabber.org/'>Jabber</link>?</p>
    <p><img src='data:image/jpeg;base64,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' alt='A License to Jabber' height='261' width='537'/></p>
  </div>
  <p>Note the large size of the image. Including the 'height' and 'width' attributes is therefore quite friendly, since it gives the receiving application hints as to whether the image is too large to fit into the current interface (naturally, these are hints only and cannot necessarily be relied upon in determining the size of the image).</p>
  <p>Rendering the 'alt' value rather than the image would yield something like the following:</p>
  <div class='example'>
    <p>Hey, are you licensed to <link url='http://www.jabber.org/'>Jabber</link>?</p>
    <p>IMG: "A License to Jabber"</p>
  </div>
  <example caption='Two lists'><![CDATA[
<message>
  <body>Here&apos;s my .plan for today:
  1. Add the following examples to XEP-0071:
     - ordered and unordered lists
     - more styles (e.g., indentation)
  2. Kick back and relax
  </body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xmlns='http://www.w3.org/1999/xhtml'>
      <p>Here&apos;s my .plan for today:</p>
      <ol>
        <li>Add the following examples to XEP-0071:
          <ul>
            <li>ordered and unordered lists</li>
            <li>more styles (e.g., indentation)</li>
          </ul>
        </li>
        <li>Kick back and relax</li>
      </ol>
    </body>
  </html>
</message>
]]></example>
  <p>This could be rendered as follows:</p>
  <div class='example'>
    <p>Here&apos;s my .plan for today:</p>
    <ol>
      <li>Add the following examples to XEP-0071:
        <ul>
          <li>ordered and unordered lists</li>
          <li>more styles (e.g., indentation)</li>
        </ul>
      </li>
      <li>Kick back and relax</li>
    </ol>
  </div>
  <example caption='Quoted text'><![CDATA[
<message>
  <body>
You wrote:

   I think we have consensus on the following:

   1. Remove &lt;div/&gt;
   2. Nesting is not recommended
   3. Don't preserve whitespace

   Yes, no, maybe?

That seems fine to me.
  </body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xmlns='http://www.w3.org/1999/xhtml'>
      <p>You wrote:</p>
      <blockquote>
        <p>I think we have consensus on the following:</p>
        <ol>
          <li>Remove &lt;div/&gt;</li>
          <li>Nesting is not recommended</li>
          <li>Don't preserve whitespace</li>
        </ol>
        <p>Yes, no, maybe?</p>
      </blockquote>
      <p>That seems fine to me.</p>
    </body>
  </html>
</message>
]]></example>
  <p>Although quoting received messages is relatively uncommon in IM, it does happen. This could be rendered as follows:</p>
  <div class='example'>
      <p>You wrote:</p>
      <div style='margin-left: 5%'>
        <p>I think we have consensus on the following:</p>
        <ol>
          <li>Remove &lt;div/&gt;</li>
          <li>Nesting is not recommended</li>
          <li>Don't preserve whitespace</li>
        </ol>
        <p>Yes, no, maybe?</p>
      </div>
      <p>That seems fine to me.</p>
  </div>
  <example caption='Multiple bodies'><![CDATA[
<message>
  <body xml:lang='en-US'>awesome!</body>
  <body xml:lang='de-DE'>ausgezeichnet!</body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xml:lang='en-US' xmlns='http://www.w3.org/1999/xhtml'>
      <p><strong>awesome!</strong></p>
    </body>
    <body xml:lang='de-DE' xmlns='http://www.w3.org/1999/xhtml'>
      <p><strong>ausgezeichnet!</strong></p>
    </body>
  </html>
</message>
]]></example>
  <p>How multiple bodies would best be rendered will depend on the user agent and relevant application. For example, a specialized Jabber client that is used in foreign language instruction might show two languages side by side, whereas a dedicated IM client might show content only in a human user's preferred language as captured in the client configuration.</p>
  <example caption='Unrecognized Elements and Attributes'><![CDATA[
<message>
  <body>
    The XHTML user agent conformance requirements say to ignore
    elements and attributes you don't understand, to wit:

      4. If a user agent encounters an element it does
         not recognize, it must continue to process the
         children of that element. If the content is text,
         the text must be presented to the user.

      5. If a user agent encounters an attribute it does
         not recognize, it must ignore the entire attribute
         specification (i.e., the attribute and its value).
  </body>
  <html xmlns='http://jabber.org/protocol/xhtml-im'>
    <body xmlns='http://www.w3.org/1999/xhtml'>
      <p>The <acronym>XHTML</acronym> user agent conformance
         requirements say to ignore elements and attributes
         you don't understand, to wit:</p>
      <ol type='1' start='4'>
        <li><p>
          If a user agent encounters an element it does
          not recognize, it must continue to process the
          children of that element. If the content is text,
          the text must be presented to the user.
        </p></li>
        <li><p>
          If a user agent encounters an attribute it does
          not recognize, it must ignore the entire attribute
          specification (i.e., the attribute and its value).
        </p></li>
      </ol>
    </body>
  </html>
</message>
]]></example>
  <p>Let us assume that the recipient's user agent recognizes neither the &lt;acronym/&gt; element (which is discouraged in XHTML-IM) nor the 'type' and 'start' attributes of the &lt;ol/&gt; element (which, after all, were deprecated in HTML 4.0), and that it does not render nested elements (e.g., the &lt;p/&gt; elements within the &lt;li/&gt; elements); in this case, it could render the content as follows (note that the element value is shown as text and the attribute value is not rendered):</p>
  <div class='example'>
    <p>The <acronym>XHTML</acronym> user agent conformance requirements say to ignore elements and attributes you don't understand, to wit:</p>
    <ol>
      <li>If a user agent encounters an element it does not recognize, it must continue to process the children of that element. If the content is text, the text must be presented to the user.</li>
      <li>If a user agent encounters an attribute it does not recognize, it must ignore the entire attribute specification (i.e., the attribute and its value).</li>
    </ol>
  </div>
</section1>
<section1 topic='Discovering Support for XHTML-IM' anchor='discovery'>
  <p>This section describes methods for discovering whether a Jabber client or other XMPP entity supports the protocol defined herein.</p>
  <section2 topic='Explicit Discovery' anchor='discovery-explicit'>
    <p>The primary means of discovering support for XHTML-IM is &xep0030; (or the dynamic profile of service discovery defined in &xep0115;).</p>
    <example caption='Seeking to Discover XHTML-IM Support'><![CDATA[
<iq type='get'
    from='juliet@shakespeare.lit/balcony'
    to='romeo@shakespeare.lit/orchard'
    id='disco1'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
]]></example>
    <p>If the queried entity supports XHTML-IM, it MUST return a &lt;feature/&gt; element with a 'var' attribute set to a value of "http://jabber.org/protocol/xhtml-im" in the IQ result.</p>
    <example caption='Contact Returns Disco Info Results'><![CDATA[
<iq type='result'
    from='romeo@shakespeare.lit/orchard'
    to='juliet@shakespeare.lit/balcony'
    id='disco1'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    ...
    <feature var='http://jabber.org/protocol/xhtml-im'/>
    ...
  </query>
</iq>
]]></example>
    <p>Naturally, support can also be discovered via the dynamic, presence-based profile of service discovery defined in &xep0115;.</p>
  </section2>
  <section2 topic='Implicit Discovery' anchor='discovery-implicit'>
    <p>A Jabber user's client MAY send XML &MESSAGE; stanzas containing XHTML-IM extensions without first discovering if the conversation partner's client supports XHTML-IM. If the user's client sends a message that includes XHTML-IM markup and the conversation partner's client replies to that message but does not include XHTML-IM markup, the user's client SHOULD NOT continue sending XHTML-IM markup.</p>
  </section2>
</section1>
<section1 topic='Security Considerations' anchor='security'>
  <section2 topic='Malicious Objects' anchor='security-code'>
    <p>While scripts, applets, binary objects and other potentially executable code is excluded from the profiles used in XHTML-IM, malicious entities still may inject those and thus exploit entities which rely on this exclusion. Entities thus MUST assume that inbound XHTML-IM may be mailicious and MUST sanitize it according to the profile used, by ignoring elements and removing attributes as needed.</p>
    <p>To further reduce the risk of such exposure, an implementation MAY choose to:</p>
    <ul>
      <li>Not make hyperlinks clickable</li>
      <li>Not fetch or present images but instead show only the 'alt' text.</li>
    </ul>
    <p>In addition, an implementation MUST make it possible for a user to prevent the automatic fetching and presentation of images (rather than leave it up to the implementation).</p>
  </section2>
  <section2 topic='Phishing' anchor='security-phishing'>
    <p>To reduce the risk of phishing attacks <note>Phishing has been defined by the Financial Services Technology Consortium Counter-Phishing Initiative as "a broadly launched social engineering attack in which an electronic identity is misrepresented in an attempt to trick individuals into revealing personal credentials that can be used fraudulently against them".</note>, an implementation MAY choose to:</p>
    <ul>
      <li>Display the value of the XHTML 'href' attribute instead of the XML character data of the &lt;a/&gt; element.</li>
      <li>Display the value of XHTML 'href' attribute in addition to the XML character data of the &lt;a/&gt; element if the two values do not match.</li>
    </ul>
  </section2>
  <section2 topic='Presence Leaks' anchor='security-presence'>
    <p>The network availability of the receiver may be revealed if the receiver's client automatically loads images or the receiver clicks a link included in a message. Therefore an implementation MAY choose to:</p>
    <ul>
      <li>Not fetch images offered by senders that are not authorized to view the receiver's presence.</li>
      <li>Warn the receiver before allowing the user to visit a URI provided by the sender.</li>
    </ul>
  </section2>
</section1>
<section1 topic='W3C Considerations' anchor='w3c'>
  <p>The usage of XHTML 1.0 defined herein meets the requirements for XHTML 1.0 Integration Set document type conformance as defined in Section 3 ("Conformance Definition") of <cite>Modularization of XHTML</cite>.</p>
  <section2 topic='Document Type Name' anchor='w3c-doctype'>
    <p>The Formal Public Identifier (FPI) for the XHTML-IM document type definition is:</p>
    <code><![CDATA[
-//JSF//DTD Instant Messaging with XHTML//EN
]]></code>
    <p>The fields of this FPI are as follows:</p>
    <ol>
      <li>The leading field is "-", which indicates that this is a privately-defined resource.</li>
      <li>The second field is "JSF" (an abbreviation for Jabber Software Foundation, the former name for the &XSF;), which identifies the organization that maintains the named item.</li>
      <li>The third field contains two constructs:
        <ol>
          <li>The public text class is "DTD", which adheres to ISO 8879 Clause 10.2.2.1.</li>
          <li>The public text description is "Instant Messaging with XHTML", which contains but does not begin with the string "XHTML" (as recommended for an XHTML 1.0 Integration Set).</li>
        </ol>
      </li>
      <li>The fourth field is "EN", which identifies the language (English) in which the item is defined.</li>
    </ol>
  </section2>
  <section2 topic='User Agent Conformance' anchor='w3c-conformance'>
    <p>A user agent that implements this specification MUST conform to Section 3.5 ("XHTML Family User Agent Conformance") of <cite>Modularization of XHTML</cite>. Many of the requirements defined therein are already met by Jabber clients simply because they already include XML parsers.</p>
    <p>However, "ignore" has a special meaning in XHTML modularization (different from its meaning in XMPP). Specifically, criteria 4 through 6 of Section 3.5 of <cite>Modularization of XHTML</cite> state:</p>
    <ol type='1' start='4'>
      <li>
        <p><em>W3C TEXT:</em> If a user agent encounters an element it does not recognize, it must continue to process the children of that element. If the content is text, the text must be presented to the user.</p>
        <p><em>XSF COMMENT:</em> This behavior is different from that defined by <cite>XMPP Core</cite>, and in the context of XHTML-IM implementations applies only to XML elements qualified by the 'http://www.w3.org/1999/xhtml' namespace as defined herein. This criterion MUST be applied to all XHTML 1.0 elements except those explicitly included in XHTML-IM as described in the <link url="#def">XHTML-IM Integration Set</link> and <link url='#profile'>Recommended Profile</link> sections of this document. Therefore, an XHTML-IM implementation MUST process all XHTML 1.0 child elements of the XHTML-IM &lt;html/&gt; element even if such child elements are not included in the XHTML 1.0 Integration Set defined herein, and MUST present to the recipient the XML character data contained in such child elements.</p>
      </li>
      <li>
        <p><em>W3C TEXT:</em> If a user agent encounters an attribute it does not recognize, it must ignore the entire attribute specification (i.e., the attribute and its value).</p>
        <p><em>XSF COMMENT:</em> This criterion MUST be applied to all XHTML 1.0 attributes except those explicitly included in XHTML-IM as described in the <link url="#def">XHTML-IM Integration Set</link> and <link url='#profile'>Recommended Profile</link> sections of this document. Therefore, an XHTML-IM implementation MUST ignore all attributes of elements qualified by the 'http://www.w3.org/1999/xhtml' namespace if such attributes are not explicitly included in the XHTML 1.0 Integration Set defined herein.</p>
      </li>
      <li>
        <p><em>W3C TEXT:</em> If a user agent encounters an attribute value it doesn't recognize, it must use the default attribute value.</p>
        <p><em>XSF COMMENT:</em> Since not one of the attributes included in XHTML-IM has a default value defined for it in <cite>XHTML 1.0</cite>, in practice this criterion does not apply to XHTML-IM implementations.</p>
      </li>
    </ol>
  </section2>
  <section2 topic='XHTML Modularization' anchor='w3c-modularization'>
    <p>For information regarding XHTML modularization in XML schema for the XHTML 1.0 Integration Set defined in this specification, refer to the <link url="#schemas-driver">Schema Driver</link> section of this document.</p>
  </section2>
  <section2 topic='W3C Review' anchor='w3c-review'>
    <p>The XHTML 1.0 Integration Set defined herein has been reviewed informally by an editor of the <cite>XHTML Modularization in XML Schema</cite> specification but has not undergone formal review by the W3C. Before the XHTML-IM specification proceeds to a status of Final within the standards process of the XMPP Standards Foundation, the &COUNCIL; is encouraged to pursue a formal review through communication with the Hypertext Coordination Group within the W3C.</p>
  </section2>
  <section2 topic='XHTML Versioning' anchor='w3c-versions'>
    <p>The W3C is actively working on &w3xhtml2; and may produce additional versions of XHTML in the future. This specification addresses XHTML 1.0 only, but it may be superseded or supplemented in the future by a XMPP Extension Protocol specification that defines methods for encapsulating XHTML 2.0 content in XMPP.</p>
  </section2>
</section1>
<section1 topic='IANA Considerations' anchor='iana'>
  <p>This document requires no interaction with &IANA;.</p>
</section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
  <section2 topic='Protocol Namespaces' anchor='registrar-ns'>
    <p>The &REGISTRAR; includes 'http://jabber.org/protocol/xhtml-im' in its registry of protocol namespaces.</p>
  </section2>
</section1>
<section1 topic='XML Schemas' anchor='schemas'>
  <section2 topic='XHTML-IM Wrapper' anchor='schemas-wrapper'>
    <p>The following schema defines the XMPP extension element that serves as a wrapper for XHTML content.</p>
    <code><![CDATA[
<?xml version='1.0' encoding='UTF-8'?>

<xs:schema
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    xmlns:xhtml='http://www.w3.org/1999/xhtml'
    targetNamespace='http://jabber.org/protocol/xhtml-im'
    xmlns='http://jabber.org/protocol/xhtml-im'
    elementFormDefault='qualified'>

  <xs:import namespace='http://www.w3.org/1999/xhtml'
             schemaLocation='http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd'/>

  <xs:annotation>
    <xs:documentation>

      This schema defines the <html/> element qualified by
      the 'http://jabber.org/protocol/xhtml-im' namespace.
      The only allowable child is a <body/> element qualified
      by the 'http://www.w3.org/1999/xhtml' namespace. Refer
      to the XHTML-IM schema driver for the definition of the
      XHTML 1.0 Integration Set.

      Full documentation of this Integration Set is contained in
      "XEP-0071: XHTML-IM", a specification published by the
      XMPP Standards Foundation.

         http://www.xmpp.org/extensions/xep-0071.html

    </xs:documentation>
    <xs:documentation source="http://www.xmpp.org/extensions/xep-0071.html"/>
  </xs:annotation>

  <xs:element name='html'>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref='xhtml:body'
                    minOccurs='0'
                    maxOccurs='unbounded'/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>
]]></code>
  </section2>
  <section2 topic='XHTML-IM Schema Driver' anchor='schemas-driver'>
    <p>The following schema defines the modularization schema driver for XHTML-IM.</p>
    <code><![CDATA[
<?xml version='1.0' encoding='UTF-8'?>

<xs:schema
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    targetNamespace='http://www.w3.org/1999/xhtml'
    xmlns='http://www.w3.org/1999/xhtml'
    elementFormDefault='qualified'>

  <xs:annotation>
    <xs:documentation>

      This is the XML Schema driver for XHTML-IM, an XHTML 1.0
      Integration Set for use in exchanging marked-up instant
      messages between entities that conform to the Extensible
      Messaging and Presence Protocol (XMPP). This Integration
      Set includes a subset of the modules defined for XHTML 1.0
      but does not redefine any existing modules, nor does it
      define any new modules. Specifically, it includes the
      following modules only:

         - Structure
         - Text
         - Hypertext
         - List
         - Image
         - Style Attribute

      The Formal Public Identifier (FPI) for this Integration
      Set is:

         -//JSF//DTD Instant Messaging with XHTML//EN

      Full documentation of this Integration Set is contained in
      "XEP-0071: XHTML-IM", a specification published by the
      XMPP Standards Foundation, which is available at the
      following URL:

         http://www.xmpp.org/extensions/xep-0071.html

    </xs:documentation>
    <xs:documentation source="http://www.xmpp.org/extensions/xep-0071.html"/>
  </xs:annotation>

  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-blkphras-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-blkstruct-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-hypertext-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-image-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-inlphras-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-inlstruct-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-inlstyle-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-list-1.xsd"/>
  <xs:include
      schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-struct-1.xsd"/>

</xs:schema>
]]></code>
  </section2>
  <section2 topic='XHTML-IM Content Model' anchor='schemas-model'>
    <p>The following schema defines the content model for XHTML-IM.</p>
    <code><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3.org/1999/xhtml"
           xmlns="http://www.w3.org/1999/xhtml">

  <xs:annotation>
    <xs:documentation>

      This is the XML Schema module of named XHTML 1.0 content models
      for XHTML-IM, an XHTML 1.0 Integration Set for use in exchanging
      marked-up instant messages between entities that conform to
      the Extensible Messaging and Presence Protocol (XMPP). This
      Integration Set includes a subset of the modules defined for
      XHTML 1.0 but does not redefine any existing modules, nor
      does it define any new modules. Specifically, it includes the
      following modules only:

         - Structure
         - Text
         - Hypertext
         - List
         - Image
         - Style Attribute

      Therefore XHTML-IM uses the following content models:

          Block.mix;            Block-like elements, e.g., paragraphs
          Flow.mix;             Any block or inline elements
          Inline.mix;           Character-level elements
          InlineNoAnchor.class; Anchor element
          InlinePre.mix;        Pre element

      XHTML-IM also uses the following Attribute Groups:

           Core.extra.attrib
           I18n.extra.attrib
           Common.extra

      Full documentation of this Integration Set is contained in
      "XEP-0071: XHTML-IM", a specification published by the
      XMPP Standards Foundation.

         http://www.xmpp.org/extensions/xep-0071.html

    </xs:documentation>
    <xs:documentation source="http://www.xmpp.org/extensions/xep-0071.html"/>
  </xs:annotation>

  <!-- BEGIN ATTRIBUTE GROUPS -->

  <xs:attributeGroup name="Core.extra.attrib"/>
  <xs:attributeGroup name="I18n.extra.attrib"/>
  <xs:attributeGroup name="Common.extra">
    <xs:attributeGroup ref="style.attrib"/>
  </xs:attributeGroup>

  <!-- END ATTRIBUTE GROUPS -->

  <!-- BEGIN HYPERTEXT MODULE "PRIMITIVES" -->

  <xs:group name="Anchor.class">
    <xs:sequence>
      <xs:element ref="a"/>
    </xs:sequence>
  </xs:group>

  <!-- END HYPERTEXT MODULE "PRIMITIVES" -->

  <!-- BEGIN IMAGE MODULE "PRIMITIVES" -->

  <xs:group name="Image.class">
    <xs:choice>
      <xs:element ref="img"/>
    </xs:choice>
  </xs:group>

  <!-- END IMAGE MODULE "PRIMITIVES" -->

  <!-- BEGIN LIST MODULE "PRIMITIVES" -->

  <xs:group name="List.class">
    <xs:choice>
      <xs:element ref="ul"/>
      <xs:element ref="ol"/>
      <xs:element ref="dl"/>
    </xs:choice>
  </xs:group>

  <!-- END LIST MODULE "PRIMITIVES" -->

  <!-- BEGIN TEXT MODULE "PRIMITIVES" -->

  <xs:group name="BlkPhras.class">
    <xs:choice>
      <xs:element ref="address"/>
      <xs:element ref="blockquote"/>
      <xs:element ref="pre"/>
    </xs:choice>
  </xs:group>

  <xs:group name="BlkStruct.class">
    <xs:choice>
      <xs:element ref="div"/>
      <xs:element ref="p"/>
    </xs:choice>
  </xs:group>

  <xs:group name="Heading.class">
    <xs:choice>
      <xs:element ref="h1"/>
      <xs:element ref="h2"/>
      <xs:element ref="h3"/>
      <xs:element ref="h4"/>
      <xs:element ref="h5"/>
      <xs:element ref="h6"/>
    </xs:choice>
  </xs:group>

  <xs:group name="InlPhras.class">
    <xs:choice>
      <xs:element ref="abbr"/>
      <xs:element ref="acronym"/>
      <xs:element ref="cite"/>
      <xs:element ref="code"/>
      <xs:element ref="dfn"/>
      <xs:element ref="em"/>
      <xs:element ref="kbd"/>
      <xs:element ref="q"/>
      <xs:element ref="samp"/>
      <xs:element ref="strong"/>
      <xs:element ref="var"/>
    </xs:choice>
  </xs:group>

  <xs:group name="InlStruct.class">
    <xs:choice>
      <xs:element ref="br"/>
      <xs:element ref="span"/>
    </xs:choice>
  </xs:group>

  <!-- END TEXT MODULE "PRIMITIVES" -->

  <!-- BEGIN BLOCK COMBINATIONS -->

  <xs:group name="Block.class">
    <xs:choice>
      <xs:group ref="BlkPhras.class"/>
      <xs:group ref="BlkStruct.class"/>
    </xs:choice>
  </xs:group>

  <!-- END BLOCK COMBINATIONS -->

  <!-- BEGIN INLINE COMBINATIONS -->

  <!-- Any inline content -->
  <xs:group name="Inline.class">
    <xs:choice>
      <xs:group ref="Anchor.class"/>
      <xs:group ref="Image.class"/>
      <xs:group ref="InlPhras.class"/>
      <xs:group ref="InlStruct.class"/>
    </xs:choice>
  </xs:group>

  <!-- Inline content contained in a hyperlink -->
  <xs:group name="InlNoAnchor.class">
    <xs:choice>
      <xs:group ref="Image.class"/>
      <xs:group ref="InlStruct.class"/>
      <xs:group ref="InlPhras.class"/>
    </xs:choice>
  </xs:group>

  <!-- END INLINE COMBINATIONS -->

  <!-- BEGIN TOP-LEVEL MIXES -->

  <xs:group name="Block.mix">
    <xs:choice>
      <xs:group ref="Block.class"/>
      <xs:group ref="Heading.class"/>
      <xs:group ref="List.class"/>
    </xs:choice>
  </xs:group>

  <xs:group name="Flow.mix">
    <xs:choice>
      <xs:group ref="Block.class"/>
      <xs:group ref="Heading.class"/>
      <xs:group ref="Inline.class"/>
      <xs:group ref="List.class"/>
    </xs:choice>
  </xs:group>

  <xs:group name="Inline.mix">
    <xs:choice>
      <xs:group ref="Inline.class"/>
    </xs:choice>
  </xs:group>

  <xs:group name="InlNoAnchor.mix">
    <xs:choice>
      <xs:group ref="InlNoAnchor.class"/>
    </xs:choice>
  </xs:group>

  <xs:group name="InlinePre.mix">
    <xs:choice>
      <xs:group ref="Anchor.class"/>
      <xs:group ref="InlPhras.class"/>
      <xs:group ref="InlStruct.class"/>
    </xs:choice>
  </xs:group>

  <!-- END TOP-LEVEL MIXES -->

</xs:schema>
]]></code>
  </section2>
</section1>
<section1 topic='Acknowledgements' anchor='ack'>
  <p>This specification formalizes and extends earlier work by Jeremie Miller and Julian Missig on XHTML formatting of Jabber messages. Many thanks to Shane McCarron for his assistance regarding XHTML modularization and conformance issues. Thanks also to contributors on the discussion list of the XSF's &SSIG; for their feedback and suggestions.</p>
</section1>
</xep>