NOTE-DOM-Requirements-20040226
64.5 KB
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
Generated: Thu Feb 19 16:51:04 EST 2004 jfouffa.w3.org
-->
<html lang='en-US' xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Document Object Model (DOM) Requirements</title>
<link rel='stylesheet' type='text/css' href='./spec.css' />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel='stylesheet' type='text/css' href=
'http://www.w3.org/StyleSheets/TR/W3C-WG-NOTE.css' />
<link rel='author' href='mailto:www-dom@w3.org' />
<link rel='help' href='http://www.w3.org/DOM/' />
</head>
<body>
<a id='Overview' name='Overview'></a>
<div class='head'>
<p><a href='http://www.w3.org/'><img height='48' width='72' alt=
'W3C' src='http://www.w3.org/Icons/w3c_home' /></a></p>
<h1 id='Overview-title'>Document Object Model (DOM)
Requirements</h1>
<!-- NOTE-DOM-Requirements-20040219 -->
<h2 id='Overview-W3C-doctype'>W3C Working Group Note 26 February
2004</h2>
<dl>
<dt>This version:</dt>
<dd><a href=
'http://www.w3.org/TR/2004/NOTE-DOM-Requirements-20040226'>http://www.w3.org/TR/2004/NOTE-DOM-Requirements-20040226</a></dd>
<dt>Latest version:</dt>
<dd><a href=
'http://www.w3.org/TR/DOM-Requirements'>http://www.w3.org/TR/DOM-Requirements</a></dd>
<dt>Previous version:</dt>
<dd><a href=
'http://www.w3.org/TR/2001/WD-DOM-Requirements-20010419'>http://www.w3.org/TR/2001/WD-DOM-Requirements-20010419</a></dd>
</dl>
<dl>
<dt>Editors:</dt>
<dd>Ben Chang, <i>Oracle</i></dd>
<dd>Philippe Le Hégaret, <i>W3C</i></dd>
<dd>Arnaud Le Hors, <i>IBM</i></dd>
<dd>Ray Whitmer, <i>Invited Expert, chair</i></dd>
<dd>Mike Champion, <i>Software AG (until 2003)</i></dd>
<dd>Tom Pixley, <i>Netscape Communications Corporation (until July
2002)</i></dd>
<dd>Joe Kesselman, <i>IBM (until 2001)</i></dd>
<dd>Andy Heninger, <i>IBM (until 2001)</i></dd>
<dd>Angel Diaz, <i>IBM (until 2001)</i></dd>
<dd>James Davidson, <i>Sun (until June 2000)</i></dd>
<dd>Lauren Wood, <i>SoftQuad Software Inc. (until November
2000)</i></dd>
<dd>Jared Sorensen, <i>Novell, Inc. (until January 1999)</i></dd>
</dl>
<p class='copyright'><a href=
'http://www.w3.org/Consortium/Legal/ipr-notice#Copyright'>Copyright</a>
©2004 <a href='http://www.w3.org/'><abbr title=
'World Wide Web Consortium'>W3C</abbr></a><sup>®</sup>
(<a href='http://www.csail.mit.edu/'><abbr title=
'Massachusetts Institute of Technology'>MIT</abbr></a>, <a href=
'http://www.ercim.org/'><abbr title=
'European Research Consortium for Informatics and Mathematics'>ERCIM</abbr></a>,
<a href='http://www.keio.ac.jp/'>Keio</a>), All Rights Reserved.
W3C <a href=
'http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer'>liability</a>,
<a href=
'http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks'>trademark</a>,
<a href=
'http://www.w3.org/Consortium/Legal/copyright-documents'>document
use</a> and <a href=
'http://www.w3.org/Consortium/Legal/copyright-software'>software
licensing</a> rules apply.</p>
</div>
<hr title='separator from header' />
<h2 id='Overview-abstract'>Abstract</h2>
<div class='abstract'>
<p>This document contains the requirements for the Document Object
Model, a platform- and language-neutral interface that allows
programs and scripts to dynamically access and update the content,
structure and style of documents. The Document Object Model
provides a standard set of objects for representing HTML and XML
documents, a standard model of how these objects can be combined,
and a standard interface for accessing and manipulating them.
Vendors can support the DOM as an interface to their proprietary
data structures and APIs, and content authors can write to the
standard DOM interfaces rather than product-specific APIs, thus
increasing interoperability on the Web.</p>
</div>
<h2 id='Overview-status'>Status of this document</h2>
<div class='status'>
<p><em>This section describes the status of this document at the
time of its publication. Other documents may supersede this
document. A list of current W3C publications and the latest
revision of this technical report can be found in the <a href=
'http://www.w3.org/TR/'>W3C technical reports index</a> at
http://www.w3.org/TR/.</em></p>
<p>This document is a Working Group Note of the requirements of the
Document Object Model. Comments on this document are to be sent to
the public mailing list <a href=
'mailto:www-dom@w3.org'>www-dom@w3.org</a>. An archive is available
at <a href=
'http://lists.w3.org/Archives/Public/www-dom/'>http://lists.w3.org/Archives/Public/www-dom/</a>.
A list of <a href='http://www.w3.org/2001/10/23-DOMOpenList'>open
issues</a> has been published on 23 October 2001. Note that W3C is
not committed to work on the open issues.</p>
<p>Publication as a Working Group Note does not imply endorsement
by the W3C Membership. This is a draft document and may be updated,
replaced or obsoleted by other documents at any time.</p>
<p>This document has been produced as part of the <a href=
'http://www.w3.org/DOM/Activity.html'>W3C DOM Activity</a>. The
authors of this document are the DOM Working Group members.</p>
<p>Patent disclosures relevant to this specification may be found
on the DOM Working Group's <a href=
'http://www.w3.org/2002/08/02-DOM-Disclosures.html'>patent
disclosure page</a>.</p>
</div>
<a id='table-of-contents' name='table-of-contents'></a>
<div class='div1'><a name='table-of-contents-contents' id=
"table-of-contents-contents"></a>
<h1 id='table-of-contents-contents-h1' class='div1'>Table of
Contents</h1>
<ul class='toc'>
<li class='tocline2'><a class='tocxref' href=
'#table-of-contents'>Table of Contents</a></li>
</ul>
<ul class='toc'>
<li class='tocline2'><a class='tocxref' href=
'#general-requirements'>Chapter 1: General requirements</a>
<ul class='toc'>
<li class='tocline3'><a class='tocxref' href=
'#general-requirements-core'>1.1 Basic requirements</a></li>
<li class='tocline3'><a class='tocxref' href=
'#general-requirements-error'>1.2 Error Reporting</a></li>
</ul>
</li>
<li class='tocline2'><a class='tocxref' href=
'#dom-level-1-requirements'>Chapter 2: DOM Level 1 Requirements</a>
<ul class='toc'>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-1-requirements-Structure'>2.1 Structure Navigation</a>
<ul class='toc'>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-1-requirements-structure-general'>2.1.1 General
Requirements</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-1-requirements-structure-html'>2.1.2 HTML
Requirements</a></li>
</ul>
</li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-1-requirements-DocumentManipulation'>2.2 Document
Manipulation</a></li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-1-requirements-ContentManipulation'>2.3 Content
Manipulation</a></li>
</ul>
</li>
<li class='tocline2'><a class='tocxref' href=
'#dom-level-2-requirements'>Chapter 3: DOM Level 2 Requirements</a>
<ul class='toc'>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-2-requirements-level2-eventmodel'>3.1 Event
Model</a></li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-2-requirements-level2-stylesheet'>3.2 Stylesheet Object
Model</a></li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-2-requirements-level2-range'>3.3 Range model</a></li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-2-requirements-level2-traversal'>3.4 Traversal
model</a></li>
</ul>
</li>
<li class='tocline2'><a class='tocxref' href=
'#dom-level-3-requirements'>Chapter 4: DOM Level 3 Requirements</a>
<ul class='toc'>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-3-requirements-level3-core'>4.1 Core
Requirements</a></li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-Events-Requirements'>4.2 Level 3
Events Requirements</a>
<ul class='toc'>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-Events-Requirements-eventGrouping'>
4.2.1 EventListener grouping</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-Events-Requirements-keyEvents'>4.2.2
Key event set</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-Events-Requirements-inputEvent'>4.2.3
Input event set</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-Events-Requirements-deviceIndependent'>
4.2.4 Device independent event set</a></li>
</ul>
</li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-3-requirements-level3-CM'>4.3 Content Models and
Validation Use Cases and Requirements</a></li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-LS-Requirements'>4.4 Load and
Save Requirements</a>
<ul class='toc'>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-LS-General-Requirements'>4.4.1
General Requirements</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-LS-Load-Requirements'>4.4.2 Load
Requirements</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-LS-XML-Writer-Requirments'>4.4.3
XML Writer Requirements</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-LS-Other-Requirements'>4.4.4
Other Items Under Consideration</a></li>
</ul>
</li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-3-requirements-Level-3-Embedded'>4.5 Embedded DOM
Requirements</a>
<ul class='toc'>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-EDOM-Abstract'>4.5.1 Abstract</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-EDOM-Introduction'>4.5.2
Introduction</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-EDOM-UseCases'>4.5.3 Use Cases</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-EDOM-Scenarios'>4.5.4 Implementation
Scenarios</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-EDOM-Requirements'>4.5.5
Requirements</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-EDOM-knownQuestions'>4.5.6 Known
Questions</a></li>
</ul>
</li>
<li class='tocline3'><a class='tocxref' href=
'#dom-level-3-requirements-level3-xpath'>4.6 XPath DOM Draft
Requirements</a>
<ul class='toc'>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-xpath-abstract'>4.6.1 Abstract</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-xpath-introduction'>4.6.2
Introduction</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-xpath-requirements'>4.6.3
Requirements</a></li>
<li class='tocline4'><a class='tocxref' href=
'#dom-level-3-requirements-xpath-issues'>4.6.4 Known
Questions</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<!-- div1 contents -->
<a id='general-requirements' name='general-requirements'></a>
<div class='div1'><a name='general-requirements-General' id=
"general-requirements-General"></a>
<h1 id='general-requirements-General-h1' class='div1'>1. General
requirements</h1>
<div class='div2'><a name='general-requirements-core' id=
"general-requirements-core"></a>
<h2 id='general-requirements-core-h2' class='div2'>1.1 Basic
requirements</h2>
<ol>
<li>References to XML and HTML documents generally denote the
physical files that contain structural markup.</li>
<li>Where possible, the Level of the DOM in which the requirements
are met is noted.</li>
</ol>
<p>Listed below are the general requirements of the Document Object
Model.</p>
<ol>
<li>The Object Model is language neutral and platform
independent.</li>
<li>There will be a core DOM that is applicable to HTML, CSS and
XML documents.</li>
<li>The Object Model can be used to construct and deconstruct the
document.</li>
<li>The Object Model will not preclude use by either agents
external to the document content, or scripts embedded within the
document.</li>
<li>Consistent naming conventions must be used through all levels
of the Object Model.</li>
<li>A visual UI component will not be required for a conforming
implementation of the Object Model.</li>
<li>The specific HTML, CSS or XML document object models will be
driven by the underlying constructs of those languages.</li>
<li>It must be possible to read in a document and write out a
structurally isomorphic document.</li>
<li>The Object Model will not expose the user to problems with
security, validity, or privacy.</li>
<li>The Object Model will not preclude other mechanisms for
manipulating documents.</li>
</ol>
</div>
<!-- div2 core -->
<div class='div2'><a name='general-requirements-error' id=
"general-requirements-error"></a>
<h2 id='general-requirements-error-h2' class='div2'>1.2 Error
Reporting</h2>
<ol>
<li>Error reporting will be primarily via return values. Exceptions
will be raised on unrecoverable conditions.</li>
<li>The DOM will provide a document-wide reporting mechanism.
<em>[After Level 1]</em></li>
<li>The DOM error state can be queried. <em>[After Level
1]</em></li>
</ol>
</div>
<!-- div2 error --></div>
<!-- div1 General -->
<a id='dom-level-1-requirements' name=
'dom-level-1-requirements'></a>
<div class='div1'><a name='dom-level-1-requirements-Level1' id=
"dom-level-1-requirements-Level1"></a>
<h1 id='dom-level-1-requirements-Level1-h1' class='div1'>2. DOM
Level 1 Requirements</h1>
<div class='div2'><a name='dom-level-1-requirements-Structure' id=
"dom-level-1-requirements-Structure"></a>
<h2 id='dom-level-1-requirements-Structure-h2' class='div2'>2.1
Structure Navigation</h2>
<p>This refers to the navigation around a document, such as finding
the parent of a given element, or what children elements a given
parent element contains.</p>
<div class='div3'><a name=
'dom-level-1-requirements-structure-general' id=
"dom-level-1-requirements-structure-general"></a>
<h3 id='dom-level-1-requirements-structure-general-h3' class=
'div3'>2.1.1 General Requirements</h3>
<ol>
<li>All document content, including elements and attributes, will
be programmatically accessible and manipulable.</li>
<li>Navigation from any element to any other element will be
possible.</li>
<li>There will be a way to uniquely and reproducibly enumerate the
structure of static documents.</li>
<li>There will be a way to query for elements and attributes.
<em>[After Level 1]</em></li>
<li>Basic low-level functions (get first, get next, etc.) will be
provided, along with convenience functions that build upon them,
but have a consistent access method.</li>
</ol>
</div>
<!-- div3 structure-general -->
<div class='div3'><a name='dom-level-1-requirements-structure-html'
id="dom-level-1-requirements-structure-html"></a>
<h3 id='dom-level-1-requirements-structure-html-h3' class='div3'>
2.1.2 HTML Requirements</h3>
<p>These are specific to HTML document.</p>
<ol>
<li>All elements that are defined in the HTML 4.0 specification are
exposed. User agents may expose other elements using similar
interfaces.</li>
<li>Unknown tags and attributes are exposed.</li>
<li>Implied elements are exposed even if not explicitly defined in
the document (e.g., HTML, HEAD, BODY).</li>
</ol>
</div>
<!-- div3 structure-html --></div>
<!-- div2 Structure -->
<div class='div2'><a name=
'dom-level-1-requirements-DocumentManipulation' id=
"dom-level-1-requirements-DocumentManipulation"></a>
<h2 id='dom-level-1-requirements-DocumentManipulation-h2' class=
'div2'>2.2 Document Manipulation</h2>
<ol>
<li>There will be a way to add, remove and change elements and/or
tags in the document structure.</li>
<li>There will be a way to add, remove and change attributes in the
document structure.</li>
<li>Operations (or a combination of operations) must restore
consistency before they return.</li>
<li>A valid static document acted upon by the DOM will deliver a
consistent reproducible document structure.</li>
</ol>
</div>
<!-- div2 DocumentManipulation -->
<div class='div2'><a name=
'dom-level-1-requirements-ContentManipulation' id=
"dom-level-1-requirements-ContentManipulation"></a>
<h2 id='dom-level-1-requirements-ContentManipulation-h2' class=
'div2'>2.3 Content Manipulation</h2>
<ol>
<li>There will be a way to determine the containing element from
any text part of the document.</li>
<li>There will be a way to manipulate (add, change, delete)
content.</li>
<li>There will be a way to navigate content.</li>
</ol>
</div>
<!-- div2 ContentManipulation --></div>
<!-- div1 Level1 -->
<a id='dom-level-2-requirements' name=
'dom-level-2-requirements'></a>
<div class='div1'><a name='dom-level-2-requirements-Level2' id=
"dom-level-2-requirements-Level2"></a>
<h1 id='dom-level-2-requirements-Level2-h1' class='div1'>3. DOM
Level 2 Requirements</h1>
<div class='div2'><a name=
'dom-level-2-requirements-level2-eventmodel' id=
"dom-level-2-requirements-level2-eventmodel"></a>
<h2 id='dom-level-2-requirements-level2-eventmodel-h2' class=
'div2'>3.1 Event Model</h2>
<p>The event model must be rich enough to create completely
interactive documents. This requires the ability to respond to any
user action that may occur on the document. Therefore, many of
these requirements only apply if a UI component is involved.</p>
<ol>
<li>All elements will be capable of generating events.</li>
<li>There will be user interface events, mutation events, and
logical events.</li>
<li>The event delivery mechanism will allow for overriding of
default behavior.</li>
<li>The event model will provide a mechanism by which events for
specific elements may be received by an ancestor in the DOM
hierarchy.</li>
<li>Events may be synchronous.</li>
<li>Events will be defined in a platform independent and language
neutral way.</li>
<li>There will be an interface for binding to events.</li>
</ol>
</div>
<!-- div2 level2-eventmodel -->
<div class='div2'><a name=
'dom-level-2-requirements-level2-stylesheet' id=
"dom-level-2-requirements-level2-stylesheet"></a>
<h2 id='dom-level-2-requirements-level2-stylesheet-h2' class=
'div2'>3.2 Stylesheet Object Model</h2>
<p>Cascading Style Sheets (CSS) is one model for manipulating the
style of the document. The Stylesheet Object Model exposes the
ability to create, modify, and associate CSS style sheets with the
document. The stylesheet model will be extensible to other
stylesheet formats in the future.</p>
<ol>
<li>All style sheets will be represented in the object model.</li>
<li>There will be a CSS stylesheet model. The CSS object model will
be defined as part of a stylesheet embedding model, where the core
part of the model may be applicable to other style languages.</li>
<li>Selectors, rules and properties of individual style sheets can
be added, removed and changed.</li>
<li>All elements of a CSS style can be added, removed, and changed
in the object model. This includes but is not limited to:
<ol>
<li>linked style sheets</li>
<li>imported style sheets</li>
<li>alternative style sheets</li>
<li>CSS pseudo-classes and CSS pseudo-elements</li>
<li>contextual selectors</li>
<li>inline styles</li>
<li>all properties as defined in the CSS specification, including
but not limited to font properties, colors, backgrounds, and box
properties.</li>
</ol>
</li>
</ol>
</div>
<!-- div2 level2-stylesheet -->
<div class='div2'><a name='dom-level-2-requirements-level2-range'
id="dom-level-2-requirements-level2-range"></a>
<h2 id='dom-level-2-requirements-level2-range-h2' class='div2'>3.3
Range model</h2>
<dl>
<dt>Linear view</dt>
<dd>allows querying and editing functionality based on a range of
text rather than a subtree of Nodes.</dd>
<dt>Live</dt>
<dd>edits on the range modify the underlying tree</dd>
<dt>Low Level</dt>
<dd>no parser, no relationship to user agent, no convenience
methods or range comparison methods (these would be part of the
SmartRange interface)</dd>
</dl>
<p>The DOM Range API should support the following types of
operations on ranges:</p>
<ul>
<li>Creating a Range object</li>
<li>Extracting text from a Range (with or without markup)</li>
<li>Inserting, Deleting text inside the Range</li>
<li>Inserting, Deleting document structure inside the Range</li>
</ul>
</div>
<!-- div2 level2-range -->
<div class='div2'><a name=
'dom-level-2-requirements-level2-traversal' id=
"dom-level-2-requirements-level2-traversal"></a>
<h2 id='dom-level-2-requirements-level2-traversal-h2' class='div2'>
3.4 Traversal model</h2>
<p>The DOM Traversal API should be able to see a filtered view
without comments or entity references, and to have an iterator
robust under mutation.</p>
</div>
<!-- div2 level2-traversal --></div>
<!-- div1 Level2 -->
<a id='dom-level-3-requirements' name=
'dom-level-3-requirements'></a>
<div class='div1'><a name='dom-level-3-requirements-Level3' id=
"dom-level-3-requirements-Level3"></a>
<h1 id='dom-level-3-requirements-Level3-h1' class='div1'>4. DOM
Level 3 Requirements</h1>
<div class='div2'><a name='dom-level-3-requirements-level3-core'
id="dom-level-3-requirements-level3-core"></a>
<h2 id='dom-level-3-requirements-level3-core-h2' class='div2'>4.1
Core Requirements</h2>
<p>Here are the items that will be addressed:</p>
<ul>
<li>getting the text content as a single DOMString from a section
of a document.</li>
<li>moving (not copying!) a node from one document to another. DOM
Level 2 provides an importNode method that copies a node from one
document to another, it would be useful to have a way of simply
moving a node, even though in some cases, such as across
implementations, it may fail.</li>
<li>node ordering. Is this node before that one in document order?
Although this can be done on top of the DOM Level 2, having it as
part of the DOM would provide for possible optimisations.</li>
<li>whitespace in element content (a.k.a. "ignorable whitespace").
Does this Text node only contain whitespace in element
content?</li>
<li>exposing the XML and Text declarations.</li>
<li>exposing the base URI of a node (part of the XML Infoset)</li>
<li>node identity. Is this object the same node as that one?</li>
<li>namespace lookup. DOM Level 2 is based on an early binding
model and the implementation does not provide any lookup
mechanism.</li>
<li>namespace fixup. DOM Level 2 is based on an early binding model
and the implementation does not fix the namespace declarations as
nodes are moved around or inserted.</li>
<li>bootstrapping a DOM in Java. How does one get a hand on a
DOMImplementation class?</li>
<li>provide for readonly DOMs.</li>
<li>allow methods to raise other exceptions. So that for instance
insertBefore can fail because of a DTD pb.</li>
</ul>
<p>Here are other items that will be considered:</p>
<ul>
<li>a way to turn off error checking, so that better performance
can be achieved, such as when the DOM is built from a parser which
already performs error checking.</li>
<li>a way to attach some user data to a node.</li>
<li>node equality and hashcode</li>
<li>getElementsByAttributeValue.</li>
<li>a way to allow text documents</li>
</ul>
</div>
<!-- div2 level3-core -->
<div class='div2'><a name=
'dom-level-3-requirements-Level-3-Events-Requirements' id=
"dom-level-3-requirements-Level-3-Events-Requirements"></a>
<h2 id='dom-level-3-requirements-Level-3-Events-Requirements-h2'
class='div2'>4.2 Level 3 Events Requirements</h2>
<p>The DOM Level 3 Events specification will attempt to address
some of the remaining issues from the DOM Level 2 Event
specification as well as a couple or requested enhancements to the
model. It will not attempt to redesign the model nor will attempt
to define any additional event models.</p>
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-Events-Requirements-eventGrouping'
id=
"dom-level-3-requirements-Level-3-Events-Requirements-eventGrouping">
</a>
<h3 id=
'dom-level-3-requirements-Level-3-Events-Requirements-eventGrouping-h3'
class='div3'>4.2.1 EventListener grouping</h3>
<p>The specification must define a technique for registering
<code>EventListener</code>s in groups. These groups will then have
specified behavior in which attempts to modify the flow of an event
will be restricted and affected only the group to which the
<code>EventListener</code> in question belongs.</p>
<p>It is also required that whatever technique is specified to
accomplish this purpose be compatible with the existing DOM Level 2
Event model and any <code>EventListener</code>s registered using
DOM Level 2 Event model methods.</p>
</div>
<!-- div3 Level-3-Events-Requirements-eventGrouping -->
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-Events-Requirements-keyEvents'
id="dom-level-3-requirements-Level-3-Events-Requirements-keyEvents">
</a>
<h3 id=
'dom-level-3-requirements-Level-3-Events-Requirements-keyEvents-h3'
class='div3'>4.2.2 Key event set</h3>
<p>The specification must define a set of key events to handle
keyboard input. This key event set must be fully
internationalizable. It is hoped that this key event set will be
compatible with existing key event sets used in current systems
however this is not a requirement.</p>
</div>
<!-- div3 Level-3-Events-Requirements-keyEvents -->
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-Events-Requirements-inputEvent'
id=
"dom-level-3-requirements-Level-3-Events-Requirements-inputEvent"></a>
<h3 id=
'dom-level-3-requirements-Level-3-Events-Requirements-inputEvent-h3'
class='div3'>4.2.3 Input event set</h3>
<p>The specification should attempt to define a set of input events
to handle IME based keyboard input. It is expected that this
requirement will depend heavily on any key event set defined by the
specification.</p>
</div>
<!-- div3 Level-3-Events-Requirements-inputEvent -->
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-Events-Requirements-deviceIndependent'
id=
"dom-level-3-requirements-Level-3-Events-Requirements-deviceIndependent">
</a>
<h3 id=
'dom-level-3-requirements-Level-3-Events-Requirements-deviceIndependent-h3'
class='div3'>4.2.4 Device independent event set</h3>
<p>The specification must define a device independent event set.
This event set should allow notification of typical user
interaction with a document without requiring the use of either
mouse events or key events.</p>
<div style='color: red'>(<i><b>ED:</b></i> The following
requirements come from the <a class='normative' href=
'http://www.w3.org/WAI/PF/Group/DOM/dom3-req.htm'>DOM 3
Requirements and View Use Cases</a> (member-only link) from the WAI-PF Working Group.
)</div>
<p>Each Document View must provide a Device Independent UI Event
Model.</p>
<p>The following events are not present in the DOM Level 2
specification. Those related to selection should be picked up when
a selection model is included:</p>
<dl>
<dt>gainselection</dt>
<dd>The gainselection event occurs when a node or part of it is
selected (unlike the HTML event select, it can be applied to any
element, not just HTML FORM controls). For each selected node a
gainselection event, which can be handled locally or through
bubbling by a root node selection handler, is generated.
<ul>
<li>Bubbles: Yes</li>
<li>Cancelable: No</li>
<li>Context Info: range</li>
</ul>
</dd>
<dt>loseselection</dt>
<dd>The loseselection event occurs when a node or part of it is
deselected, for example because the user selects something else.
<ul>
<li>Bubbles: Yes</li>
<li>Cancelable: No</li>
<li>Context Info: range</li>
</ul>
</dd>
<dt>key</dt>
<dd>Key input may not be keyboard specific.</dd>
<dt>pointermove</dt>
<dd>Input may be a stylus rather than a mouse</dd>
</dl>
</div>
<!-- div3 Level-3-Events-Requirements-deviceIndependent --></div>
<!-- div2 Level-3-Events-Requirements -->
<div class='div2'><a name='dom-level-3-requirements-level3-CM' id=
"dom-level-3-requirements-level3-CM"></a>
<h2 id='dom-level-3-requirements-level3-CM-h2' class='div2'>4.3
Content Models and Validation Use Cases and Requirements</h2>
<p>The content model referenced in these use cases/requirements is
an abstraction and does not refer to DTDs or XML Schemas or any
transformations between the two.</p>
<p>For the CM-editing and document-editing worlds, the following
use cases and requirements are common to both and could be labeled
as the "Validation and Other Common Functionality" section:</p>
<p>Use Cases:</p>
<ol>
<li>CU1. Modify an existing content model.</li>
<li>CU2. Associating a content model (external and/or internal)
with a document, or changing the current association.</li>
<li>CU3. Using the same external content model with several
documents, without having to reload it.</li>
<li>CU4. Create a new content model.</li>
</ol>
<p>Requirements:</p>
<ol>
<li>CR1. Validate against the content model.</li>
<li>CR2. Retrieve information from content model.</li>
<li>CR3. Load an existing content model, perhaps independently from
a document.</li>
<li>CR4. Being able to determine if a document has a content model
associated with it.</li>
<li>CR5. Create a new content model object.</li>
<li>CR6. Associate a CM with a document and make it the active
CM.</li>
</ol>
<p>Specific to the CM-editing world, the following are use cases
and requirements and could be labeled as the "CM-editing"
section:</p>
<p>Use Cases:</p>
<ol>
<li>CMU1. Clone/map all or parts of an existing content model to a
new or existing content model.</li>
<li>CMU2. Save a content model in a separate file. For example, a
DTD can be broken up into reusable pieces, which are then brought
in via entity references, these can then be saved in a separate
file.</li>
<li>CMU3. Partial content model checking. For example, only certain
portions of the content model need be validated.</li>
</ol>
<p>Requirements:</p>
<ol>
<li>CMR1. View and modify all parts of the content model.</li>
<li>CMR2. Validate the content model itself. For example, if an
element/attribute is inserted incorrectly into the content
model.</li>
<li>CMR3. Serialize the content model.</li>
<li>CMR4. Clone all or parts of an existing content model.</li>
<li>CMR5. Validate portions of the XML document against the content
model.</li>
</ol>
<p>Specific to the document-editing world, the following are use
cases and requirements and could be labeled as the
"Document-editing" section:</p>
<p>Use Cases:</p>
<ol>
<li>DU1. For editing documents with an associated content model,
provide the assistance necessary so that valid documents can be
modified and remain valid.</li>
<li>DU2. For editing documents with an associated content model,
provide the assistance necessary to transform an invalid document
into a valid one.</li>
</ol>
<p>Requirements:</p>
<ol>
<li>DR1. Being able to determine if the document is not
well-formed, and if not, be given enough assistance to locate the
error.</li>
<li>DR2. Being able to determine if the document is not namespace
well-formed, and if not, be given enough assistance to locate the
error.</li>
<li>DR3. Being able to determine if the document is not valid with
respect to its associated content model, and if not, give enough
assistance to locate the error.</li>
<li>DR4. Being able to determine if specific modifications to a
document would make it become invalid.</li>
<li>DR5. Retrieve information from all content model. For example,
getting a list of all the defined element names for document
editing purposes.</li>
</ol>
<p>General Issues:</p>
<ol>
<li>I1. Namespace issues associated with the content model. To
address namespaces, a <code>isNamespaceAware</code> attribute to
the generic CM object has been added to help applications determine
if qualified names are important. Note that this should not be
interpreted as helping identify what the underlying content model
is. A MathML example to show how namespaced documents will be
validated will be added later.</li>
<li>I2. Multiple CMs being associated with a XML document. For
validation, this could: 1) result in an exception; 2) a merged
content model for the document to be validated against; 3) each
content model for the document to be validated against separately.
In this chapter, we have gone for the third choice, allowing the
user to specify which content model to be active and allowing them
to keep adding content models to a list associated with the
document.</li>
<li>I3. Content model being able to handle more datatypes than
strings. Currently, this functionality is not available and should
be dealt with in the future.</li>
<li>I4. Round-trippability for include/ignore statements and other
constructs such as parameter entities, e.g., "macro-like"
constructs, will not be supported since no data representation
exists to support these constructs without having to re-parse
them.</li>
<li>I5. Basic interface for a common error handler both CM and
Load/Save. Agreement has been to utilize user-registered callbacks
but other details to be worked out.</li>
</ol>
</div>
<!-- div2 level3-CM -->
<div class='div2'><a name=
'dom-level-3-requirements-Level-3-LS-Requirements' id=
"dom-level-3-requirements-Level-3-LS-Requirements"></a>
<h2 id='dom-level-3-requirements-Level-3-LS-Requirements-h2' class=
'div2'>4.4 Load and Save Requirements</h2>
<p>DOM Level 3 will provide an API for loading XML source documents
into a DOM representation and for saving a DOM representation as a
XML document.</p>
<p>Some environments, such as the Java platform or COM, have their
own ways to persist objects to streams and to restore them. There
is no direct relationship between these mechanisms and the DOM
load/save mechanism. This specification defines how to serialize
documents only to and from XML format.</p>
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-LS-General-Requirements' id=
"dom-level-3-requirements-Level-3-LS-General-Requirements"></a>
<h3 id=
'dom-level-3-requirements-Level-3-LS-General-Requirements-h3'
class='div3'>4.4.1 General Requirements</h3>
<p>Requirements that apply to both loading and saving
documents.</p>
<div class='div4'><a name='dom-level-3-requirements-s-4.4.1.1' id=
"dom-level-3-requirements-s-4.4.1.1"></a>
<h4 id='dom-level-3-requirements-s-4.4.1.1-h4' class='div4'>4.4.1.1
Document Sources</h4>
<p>Documents must be able to be parsed from and saved to the
following sources:</p>
<ul>
<li>Input and Output Streams</li>
<li>URIs</li>
<li>Files</li>
</ul>
<p>Note that Input and Output streams take care of the in memory
case. One point of caution is that a stream doesn't allow a base
URI to be defined against which all relative URIs in the document
are resolved.</p>
</div>
<!-- div4 s-4.4.1.1 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.1.2' id=
"dom-level-3-requirements-s-4.4.1.2"></a>
<h4 id='dom-level-3-requirements-s-4.4.1.2-h4' class='div4'>4.4.1.2
Content Model Loading</h4>
<p>While creating a new document using the DOM API, a mechanism
must be provided to specify that the new document uses a
pre-existing Content Model and to cause that Content Model to be
loaded.</p>
<p>Note that while DOM Level 2 creation can specify a Content Model
when creating a document (public and system IDs for the external
subset, and a string for the subset), DOM Level 2 implementations
do not process the Content Model's content. For DOM Level 3, the
Content Model's content must be read.</p>
</div>
<!-- div4 s-4.4.1.2 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.1.3' id=
"dom-level-3-requirements-s-4.4.1.3"></a>
<h4 id='dom-level-3-requirements-s-4.4.1.3-h4' class='div4'>4.4.1.3
Content Model Reuse</h4>
<p>When processing a series of documents, all of which use the same
Content Model, implementations should be able to reuse the already
parsed and loaded Content Model rather than reparsing it again for
each new document.</p>
<p>This feature may not have an explicit DOM API associated with
it, but it does require that nothing in this section, or the
Content Model section, of this specification block it or make it
difficult to implement.</p>
</div>
<!-- div4 s-4.4.1.3 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.1.4' id=
"dom-level-3-requirements-s-4.4.1.4"></a>
<h4 id='dom-level-3-requirements-s-4.4.1.4-h4' class='div4'>4.4.1.4
Entity Resolution</h4>
<p>Some means is required to allow applications to map public and
system IDs to the correct document. This facility should provide
sufficient capability to allow the implementation of catalogs, but
providing catalogs themselves is not a requirement. In addition XML
Base needs to be addressed.</p>
</div>
<!-- div4 s-4.4.1.4 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.1.5' id=
"dom-level-3-requirements-s-4.4.1.5"></a>
<h4 id='dom-level-3-requirements-s-4.4.1.5-h4' class='div4'>4.4.1.5
Error Reporting</h4>
<p>Loading a document can cause the generation of errors
including:</p>
<ul>
<li>I/O Errors, such as the inability to find or open the specified
document.<br />
XML well formedness errors.<br />
Validity errors</li>
</ul>
<p>Saving a document can cause the generation of errors
including:</p>
<ul>
<li>I/O Errors, such as the inability to write to a specified
stream, URL, or file.<br />
Improper constructs, such as '--' in comments, in the DOM that
cannot be represented as well formed XML.</li>
</ul>
<p>This section, as well as the DOM Level 3 Content Model section
should use a common error reporting mechanism. Well-formedness and
validity checking are in the domain of the Content Model section,
even though they may be commonly generated in response to an
application asking that a document be loaded.</p>
</div>
<!-- div4 s-4.4.1.5 --></div>
<!-- div3 Level-3-LS-General-Requirements -->
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-LS-Load-Requirements' id=
"dom-level-3-requirements-Level-3-LS-Load-Requirements"></a>
<h3 id='dom-level-3-requirements-Level-3-LS-Load-Requirements-h3'
class='div3'>4.4.2 Load Requirements</h3>
<p>The following requirements apply to loading documents.</p>
<div class='div4'><a name='dom-level-3-requirements-s-4.4.2.1' id=
"dom-level-3-requirements-s-4.4.2.1"></a>
<h4 id='dom-level-3-requirements-s-4.4.2.1-h4' class='div4'>4.4.2.1
Parser Properties and Options</h4>
<p>Parsers may have properties or options that can be set by
applications. Examples include:</p>
<ul>
<li>Expansion of entity references.</li>
<li>Creation of entity ref nodes.</li>
<li>Handling of white space in element content.</li>
<li>Enabling of namespace handling.</li>
<li>Enabling of content model validation.</li>
</ul>
<p>A mechanism to set properties, query the state of properties,
and to query the set of properties supported by a particular DOM
implementation is required.</p>
</div>
<!-- div4 s-4.4.2.1 --></div>
<!-- div3 Level-3-LS-Load-Requirements -->
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-LS-XML-Writer-Requirments' id=
"dom-level-3-requirements-Level-3-LS-XML-Writer-Requirments"></a>
<h3 id=
'dom-level-3-requirements-Level-3-LS-XML-Writer-Requirments-h3'
class='div3'>4.4.3 XML Writer Requirements</h3>
<p>The fundamental requirement is to write a DOM document as XML
source. All information to be serialized should be available via
the normal DOM API.</p>
<div class='div4'><a name='dom-level-3-requirements-s-4.4.3.1' id=
"dom-level-3-requirements-s-4.4.3.1"></a>
<h4 id='dom-level-3-requirements-s-4.4.3.1-h4' class='div4'>4.4.3.1
XML Writer Properties and Options</h4>
<p>There are several options that can be defined when saving an XML
document. Some of these are:</p>
<ul>
<li>Saving to Canonical XML format.</li>
<li>Pretty Printing.</li>
<li>Specify the encoding in which a document is written.</li>
<li>How and when to use character entities.</li>
<li>Namespace prefix handling.</li>
<li>Saving of Content Models.</li>
<li>Handling of external entities.</li>
</ul>
</div>
<!-- div4 s-4.4.3.1 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.3.2' id=
"dom-level-3-requirements-s-4.4.3.2"></a>
<h4 id='dom-level-3-requirements-s-4.4.3.2-h4' class='div4'>4.4.3.2
Content Model Saving</h4>
<p>Requirement from the Content Model group.</p>
</div>
<!-- div4 s-4.4.3.2 --></div>
<!-- div3 Level-3-LS-XML-Writer-Requirments -->
<div class='div3'><a name=
'dom-level-3-requirements-Level-3-LS-Other-Requirements' id=
"dom-level-3-requirements-Level-3-LS-Other-Requirements"></a>
<h3 id='dom-level-3-requirements-Level-3-LS-Other-Requirements-h3'
class='div3'>4.4.4 Other Items Under Consideration</h3>
<p>The following items are not committed to, but are under
consideration. Public feedback on these items is especially
requested.</p>
<div class='div4'><a name='dom-level-3-requirements-s-4.4.4.1' id=
"dom-level-3-requirements-s-4.4.4.1"></a>
<h4 id='dom-level-3-requirements-s-4.4.4.1-h4' class='div4'>4.4.4.1
Incremental and/or Concurrent Parsing</h4>
<p>Provide the ability for a thread that requested the loading of a
document to continue execution without blocking while the document
is being loaded. This would require some sort of notification or
completion event when the loading process was done.</p>
<p>Provide the ability to examine the partial DOM representation
before it has been fully loaded.</p>
<p>In one form, a document may be loaded asynchronously while a DOM
based application is accessing the document. In another form, the
application may explicitly ask for the next incremental portion of
a document to be loaded.</p>
</div>
<!-- div4 s-4.4.4.1 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.4.2' id=
"dom-level-3-requirements-s-4.4.4.2"></a>
<h4 id='dom-level-3-requirements-s-4.4.4.2-h4' class='div4'>4.4.4.2
Filtered Save</h4>
<p>Provide the capability to write out only a part of a document.
May be able to leverage TreeWalkers, or the Filters associated with
TreeWalkers, or Ranges as a means of specifying the portion of the
document to be written.</p>
</div>
<!-- div4 s-4.4.4.2 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.4.3' id=
"dom-level-3-requirements-s-4.4.4.3"></a>
<h4 id='dom-level-3-requirements-s-4.4.4.3-h4' class='div4'>4.4.4.3
Document Fragments</h4>
<p>Document fragments, as specified by the XML Fragment
specification, should be able to be loaded. This is useful to
applications that only need to process some part of a large
document. Because the DOM is typically implemented as an in-memory
representation of a document, fully loading large documents can
require large amounts of memory.</p>
<p>XPath should also be considered as a way to identify XML
Document fragments to load.</p>
</div>
<!-- div4 s-4.4.4.3 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.4.4.4' id=
"dom-level-3-requirements-s-4.4.4.4"></a>
<h4 id='dom-level-3-requirements-s-4.4.4.4-h4' class='div4'>4.4.4.4
Document Fragments in Context of Existing DOM</h4>
<p>Document fragments, as specified by the XML Fragment
specification, should be able to be loaded into the context of an
existing document at a point specified by a node position, or
perhaps a range. This is a separate feature than simply loading
document fragments as a new Node.</p>
</div>
<!-- div4 s-4.4.4.4 --></div>
<!-- div3 Level-3-LS-Other-Requirements --></div>
<!-- div2 Level-3-LS-Requirements -->
<div class='div2'><a name=
'dom-level-3-requirements-Level-3-Embedded' id=
"dom-level-3-requirements-Level-3-Embedded"></a>
<h2 id='dom-level-3-requirements-Level-3-Embedded-h2' class='div2'>
4.5 Embedded DOM Requirements</h2>
<div class='div3'><a name='dom-level-3-requirements-EDOM-Abstract'
id="dom-level-3-requirements-EDOM-Abstract"></a>
<h3 id='dom-level-3-requirements-EDOM-Abstract-h3' class='div3'>
4.5.1 Abstract</h3>
<p>This document discusses the requirements and framework for using
multiple implementations of DOM or DOM-based APIs designed for a
particular markup language within a single standard DOM
application. Up until now, the Document Object Model design has
been concerned with defining an API to an entire XML document,
where all methods and attributes in the API apply equally to the
entire document and it is assumed that only one implementation of
the DOM is needed by an application.</p>
<p>With the advent of markup languages such as <a class='normative'
href='http://www.w3.org/TR/SVG'>Scalable Vector Graphics</a> and
the <a class='normative' href=
'http://www.w3.org/TR/MathML2'>Mathematical Markup Language</a>, it
has become obvious that this simple model no longer applies. It is
quite possible to have documents which embed some MathML or SVG
markup, where a DOM application might reasonably expect to be able
to use the specialized MathML or SVG DOM-based APIs. Similarly,
many DOM applications are being designed to "glue" together two
systems that both implement the DOM, and need some standard
mechanism to assist in making the multiple implementations
interoperate.</p>
<p>A module of Level 3 DOM, which we shall refer to by the
shorthand name "EDOM", will address this issue.</p>
</div>
<!-- div3 EDOM-Abstract -->
<div class='div3'><a name=
'dom-level-3-requirements-EDOM-Introduction' id=
"dom-level-3-requirements-EDOM-Introduction"></a>
<h3 id='dom-level-3-requirements-EDOM-Introduction-h3' class=
'div3'>4.5.2 Introduction</h3>
<p>As new XML vocabularies are developed, those defining the
vocabularies are beginning to define specialized APIs for
manipulating XML instances of those vocabularies by extending the
DOM to provide interfaces and methods that perform operations
frequently needed their users. For example, the MathML and SVG
groups are developing DOM extensions to allow users to manipulate
instances of these vocabularies using semantics appropriate to
images and mathematics (respectively) as well as the generic DOM
"tree" semantics. Instances of SVG or MathML are often embedded in
XML documents conforming to a different schema such as XHTML or
DocBook. While the XML Namespaces Recommendation provides a
mechanism for integrating these documents at the syntax level, it
has become clear that the DOM Level 2 Recommendation is not rich
enough to cover all the issues that have been encountered in having
these different DOM implementations be used together in a single
application. The Embedded DOM module deals with the requirements
brought about by embedding fragments written according to a
specific markup language (the <em>embedded</em> component) in a
document where the rest of the markup is not written according to
that specific markup language (the <em>host</em> document). It does
not deal with fragments embedded by reference or linking.</p>
<p>We are seeing at least two implementation scenarios in which DOM
components can be embedded in a host DOM. One extreme might be
called the "monolithic" scenario in which a single product (e.g.
the Mozilla browser) implements both the generic host DOM and the
specialized embedded DOM. The embedded DOM still has a different
<code>DOMImplementation</code> object than the host because it will
support a different feature set, although it is quite likely that
the embedded and host DOMs will use compatible classes or data
structures. At the other extreme, the embedded DOM reflects a
completely different implementation, perhaps from an entirely
different vendor, e.g. an Adobe SVG component plugged into the
SoftQuad editor.</p>
<p>The general objective of the EDOM ET is to define whatever
mechanisms are required in order to make documents that are
actually handled by two or more DOM implementations work together
as seamlessly and compatibly as possible under various
implementation scenarios. Ideally, a DOM application writer should
see the entire document as a coherent unit, with certain Nodes that
are actually handled by embedded DOMs simply having more
specialized capabilities. It is not clear at this point whether
this is achievable for all scenarios, but our goal is to make it
seamless for applications that do not care about the differences,
and to make it possible for applications that do care about the
differences to discover which DOM handles embedded nodes, be
informed of where the boundaries are, and to use that
implementation to its fullest extent.</p>
<p>Achieving these objective may entail clarifications to the
wording of the DOM specification, new interfaces or methods on
existing interfaces, revised requirements for the Load/Save module
so that the multiple DOMs are built and linked together at parse
time, or some combination of these.</p>
</div>
<!-- div3 EDOM-Introduction -->
<div class='div3'><a name='dom-level-3-requirements-EDOM-UseCases'
id="dom-level-3-requirements-EDOM-UseCases"></a>
<h3 id='dom-level-3-requirements-EDOM-UseCases-h3' class='div3'>
4.5.3 Use Cases</h3>
<p>We will consider the following use cases when assessing proposed
requirements and in designing the DOM extensions to support
embedded DOMs. All assume that some DOM Level 3 methods have been
called to link the various DOM implementations together so that DOM
boundaries can be detected and handled.</p>
<div class='div4'><a name='dom-level-3-requirements-s-4.5.3.1' id=
"dom-level-3-requirements-s-4.5.3.1"></a>
<h4 id='dom-level-3-requirements-s-4.5.3.1-h4' class='div4'>4.5.3.1
Navigation from host to embedded DOM</h4>
<p>A DOM application running on the host DOM implementation may
need to access information controlled by the embedded DOM, e.g. to
serialize the entire document.</p>
</div>
<!-- div4 s-4.5.3.1 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.5.3.2' id=
"dom-level-3-requirements-s-4.5.3.2"></a>
<h4 id='dom-level-3-requirements-s-4.5.3.2-h4' class='div4'>4.5.3.2
Navigation from embedded DOM to host</h4>
<p>A DOM application running on the embedded DOM implementation may
need to access information controlled by the host DOM, e.g. to
query a style attribute, namespace declaration, etc.</p>
</div>
<!-- div4 s-4.5.3.2 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.5.3.3' id=
"dom-level-3-requirements-s-4.5.3.3"></a>
<h4 id='dom-level-3-requirements-s-4.5.3.3-h4' class='div4'>4.5.3.3
Event capture and bubbling across Host DOM/Embedded DOM
boundary</h4>
<p>A DOM application may need to detect and process events
irrespective of whether they occur in a host or embedded DOM.</p>
</div>
<!-- div4 s-4.5.3.3 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.5.3.4' id=
"dom-level-3-requirements-s-4.5.3.4"></a>
<h4 id='dom-level-3-requirements-s-4.5.3.4-h4' class='div4'>4.5.3.4
Seamless view of host, embedded DOMs</h4>
<p>It may be acceptable for DOM Level 3 applications to use
additional APIs to detect host/embedded DOM boundaries and to
navigate across them. Nevertheless, it would be far better for
users if ordinary node navigation operations, validation,
iterators/treewalkers, and event propagation worked seamlessly
across DOM boundaries.</p>
</div>
<!-- div4 s-4.5.3.4 -->
<div class='div4'><a name='dom-level-3-requirements-s-4.5.3.5' id=
"dom-level-3-requirements-s-4.5.3.5"></a>
<h4 id='dom-level-3-requirements-s-4.5.3.5-h4' class='div4'>4.5.3.5
Notification of document changes across Host/Embedded boundary</h4>
<p>A DOM application may need to be aware of changes to the
document tree irrespective of whether they were initiated in a host
or embedded DOM.</p>
</div>
<!-- div4 s-4.5.3.5 --></div>
<!-- div3 EDOM-UseCases -->
<div class='div3'><a name='dom-level-3-requirements-EDOM-Scenarios'
id="dom-level-3-requirements-EDOM-Scenarios"></a>
<h3 id='dom-level-3-requirements-EDOM-Scenarios-h3' class='div3'>
4.5.4 Implementation Scenarios</h3>
<p>We have prepared the following grid to clarify the different
scenarios under which a standard for defining how an embedded DOM
interoperates with a host DOM could be implemented, and what this
means for the application programmer using the DOM interfaces.</p>
<p>One axis of the grid reflects the different architectures in
which one DOM can be imbedded in another. The alternatives we are
considering include:</p>
<ul>
<li>Monolithic - The host DOM and the embedded DOM are implemented
by the same code. The host/embedded distinction exists mainly to
reflect the different features of nodes at different levels.
Examples of this would appear to include Mozilla's support for
MathML and SVG, IE5's support for VML, and Amaya's support for
MathML.</li>
<li>Dynamic Subclass - Some proprietary mechanism such as Microsoft
"binary behaviors" or Netscape's XBL is used to construct embedded
DOM subtrees trees that appear to be subclasses (for DOM purposes)
of the host DOM nodes. In a Java environment, a user could
dynamically subclass another implementation.</li>
<li>Wrapper - The host and embedded DOMs are completely separate
implementations that are woven together to provide support for a
different subtrees of a single document. Since there is no
subclassing mechanism to redirect implementation-level methods to
the proper code, we envision "wrapper" classes that could implement
the EDOM functionality by redirecting operations on "foreign" nodes
to the standard DOM interfaces rather than the implementation
classes.</li>
</ul>
<ul>
<li>Data Island - Two DOM implementations that are really separate
documents, conceptually different and having no hierarchical
relationship that can be inferred. An example would be a Microsoft
XML data island inside an HTML document. <em>This is essentially a
non-use case, presented simply to identify it and contrast it with
scenarios that we do envision supporting.</em></li>
</ul>
<p>The other axis reflects the properties or features of the DOM
API that could be preserved across the host / embedded border. The
features under consideration include:</p>
<ul>
<li>Awareness - Can the user query the host DOM about the identity
and location of embedded DOMs? This implies that there is some way
to get an opaque handle that the DOM doesn't know what to do with,
but the application programmer may, at the boundary between a host
DOM and embedded DOM.</li>
<li>Boundary-aware navigation - Is it possible -- perhaps by
calling a new API method -- for an application programmer to
navigate from a host DOM node into an embedded DOM node, and from
an embedded DOM node into the host DOM that embeds it? In other
words, there is a "semi-permeable barrier" between the host and
embedded DOMs and an API with which to cross it.</li>
<li>Seamlessness- Can an application programmer navigate across the
host/embedded boundary without being aware it exists? Do properties
such as IDs, unique identifiers, timings, etc. appear to work
seamlessly across embedded DOM boundaries?</li>
<li>Event propagation - Do DOM events bubble and be captured across
embedded DOM boundaries?</li>
<li>CSS Inheritance- Do CSS properties on the host DOM pass down to
the embedded DOM?</li>
</ul>
<p>The Embedded DOM plans to support the following use cases
derived from this grid:</p>
<table border='1'>
<tr>
<td bgcolor='#CFCFCF' rowspan='1' colspan='1'></td>
<td bgcolor='#CFCFCF' rowspan='1' colspan='1'>
<b>Monolithic</b></td>
<td bgcolor='#CFCFCF' rowspan='1' colspan='1'><b>Dynamic</b></td>
<td bgcolor='#CFCFCF' rowspan='1' colspan='1'><b>Wrappers</b></td>
<td bgcolor='#CFCFCF' rowspan='1' colspan='1'><b>Data
Island</b></td>
</tr>
<tr>
<td valign='top' rowspan='1' colspan='1'>Awareness</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Maybe</td>
</tr>
<tr>
<td valign='top' rowspan='1' colspan='1'>Boundary Navigation</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Maybe</td>
</tr>
<tr>
<td valign='top' rowspan='1' colspan='1'>Seamlessness</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Maybe</td>
<td valign='top' rowspan='1' colspan='1'>No</td>
</tr>
<tr>
<td valign='top' rowspan='1' colspan='1'>Event Propagation</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Yes</td>
<td valign='top' rowspan='1' colspan='1'>Maybe</td>
<td valign='top' rowspan='1' colspan='1'>No</td>
</tr>
<tr>
<td valign='top' rowspan='1' colspan='1'>CSS Inheritance</td>
<td valign='top' rowspan='1' colspan='1'>Maybe</td>
<td valign='top' rowspan='1' colspan='1'>Maybe</td>
<td valign='top' rowspan='1' colspan='1'>Maybe</td>
<td valign='top' rowspan='1' colspan='1'>No</td>
</tr>
</table>
</div>
<!-- div3 EDOM-Scenarios -->
<div class='div3'><a name=
'dom-level-3-requirements-EDOM-Requirements' id=
"dom-level-3-requirements-EDOM-Requirements"></a>
<h3 id='dom-level-3-requirements-EDOM-Requirements-h3' class=
'div3'>4.5.5 Requirements</h3>
<ol>
<li>The EDOM MUST specify an object model that describes the
relationship between host DOM nodes and embedded DOM nodes, as well
as an API or other mechanism with which those relationships can be
specified. This object model MUST co-exist gracefully with the DOM
Level 3 Content Model interfaces and work with validation
operations.<br />
The EDOM MAY specify a mechanism -- such as options in the
Load/Save interfaces -- so that the association between Elements
and embedded DOMs is automatically produced when a document is
loaded.<br />
The EDOM NEED NOT specify the actual mechanism by which the
application actually loads a plug-in.</li>
<li>The EDOM MUST clarify the relationship between the
ownerDocument property of Nodes in an embedded DOM, the top-level
node in an Embedded DOM, and the Document interface. The standard
DOM object model and API may need to accommodate or even preclude
the situation in which elements inside some embedded markup may
have a different "owner document" and "dom implementation" values
than those at another level of the hierarchy. So far the DOM WG has
recommended that there only ever be one ownerDocument, which is the
same for all nodes.</li>
<li>For the "monolithic" and "dynamic subclassing" implementation
scenarios, the EDOM MUST specify a mechanism so that an embedded
DOM and a host DOM become aware of each other and support all of
the use cases described above.</li>
<li>For the "wrapper" implementation scenario, the EDOM MUST
specify a mechanism so that an embedded DOM and a host DOM become
aware of each other and that the boundary between them can be
crossed by an application. It would be desirable for this boundary
crossing to be "seamless", and for events and CSS properties to
propagate automatically across the boundary.</li>
</ol>
</div>
<!-- div3 EDOM-Requirements -->
<div class='div3'><a name=
'dom-level-3-requirements-EDOM-knownQuestions' id=
"dom-level-3-requirements-EDOM-knownQuestions"></a>
<h3 id='dom-level-3-requirements-EDOM-knownQuestions-h3' class=
'div3'>4.5.6 Known Questions</h3>
<p>Ranges are probably out of scope for the EDOM, anyone
disagree?</p>
<p>Do we want to support both a procedural mechanism and a
non-procedural mechanism (something like the HTML <object>
tag) to specify the relationship between the host and embedded
DOM?</p>
<div style='color: red'>(<i><b>ED:</b></i> The rest of this section
is a bit of a grab bag for ideas we will have to consider when it
comes time to work on the actual specification that meets these
requirements. )</div>
<p>Do we have two DOM trees, one for the generic DOM, and one for
the specialized DOM? (The sentiment at the Redwood Shores F2F was
"no").</p>
<p>How do you know when to hand control over to embedded DOM? Does
getChildNodes() and getParentNode() throw a new exception?</p>
<p>What sort of node should the top-level embedded node be? If it
is a special node that is a "document" in some sense but a child of
another in other senses, that would help. But it does need to be an
element rather than a document, so that the ownerDocument is
consistent throughout the complete document, including the embedded
fragment.</p>
<p>How do you get a handle to a DOMImplementation object without a
Document object ... we may need to solve the bootstrapping
problem.</p>
<p>The embedded DOM API needs to add something like a
createMyTopLevelElement from a Core DOM element, or maybe from a
string. The string method, while not as elegant, is more likely to
work across different languages and platforms.</p>
<p>What happens if a node from the embedded DOM tree is moved
outside the embedded DOM tree? Is this possible?</p>
<p>What about recursive embedded DOMs? Including the case where
XHTML is within SVG is within XHTML.</p>
</div>
<!-- div3 EDOM-knownQuestions --></div>
<!-- div2 Level-3-Embedded -->
<div class='div2'><a name='dom-level-3-requirements-level3-xpath'
id="dom-level-3-requirements-level3-xpath"></a>
<h2 id='dom-level-3-requirements-level3-xpath-h2' class='div2'>4.6
XPath DOM Draft Requirements</h2>
<div class='div3'><a name='dom-level-3-requirements-xpath-abstract'
id="dom-level-3-requirements-xpath-abstract"></a>
<h3 id='dom-level-3-requirements-xpath-abstract-h3' class='div3'>
4.6.1 Abstract</h3>
<p>There is a widely-perceived need to offer a vendor-neutral way
to use XPath expressions to select matching nodes in a DOM
document. A module of DOM, which we shall refer to by the shorthand
name "XPATH", will address this issue.</p>
</div>
<!-- div3 xpath-abstract -->
<div class='div3'><a name=
'dom-level-3-requirements-xpath-introduction' id=
"dom-level-3-requirements-xpath-introduction"></a>
<h3 id='dom-level-3-requirements-xpath-introduction-h3' class=
'div3'>4.6.2 Introduction</h3>
<p>Levels 1 and 2 of the DOM has some functionality to allow
specific nodes to be located without the user having to navigate
through the DOM tree, notably <code>getElementsByTagName</code> and
<code>getElementById</code>. The Working Group's intention was to
add these very limited APIs as a stop-gap until an XML-aware
"query" language was available. While not by any means a complete
XML query language, <a class='normative' href=
'http://lists.w3.org/Archives/Public/www-dom-xpath/'><em>XPath</em></a>
does provide a syntax for locating XML content by value and has
been a W3C Recommendation since November, 1999. Various DOM
implementations support APIs that allow one or more nodes to be
located via an XPath expression, and there have been a number of
calls from the user community to incorporate this capability into
the DOM Level 3 Recommendation.</p>
<p>A semi-public mailing list was established in early 2000 to
solicit input and advice (the <a class='normative' href=
'http://lists.w3.org/Archives/Public/www-dom-xpath/'>archives</a>
can be viewed at
http://lists.w3.org/Archives/Public/www-dom-xpath). The comments on
this list tended to push for a quite complete XPath API rather than
the quite limited interfaces provided by existing DOM
implementations. Since this is out of scope for the DOM WG, efforts
were made to find another W3C Working Group to take on this
requirement. Those efforts have not been successful.</p>
<p>Thus, it falls to the DOM WG to define a simple but effective
API for DOM that provides a basis for writing interoperable DOM
applications that use XPath expressions rather than tree navigation
to locate nodes matching simple search criteria.</p>
</div>
<!-- div3 xpath-introduction -->
<div class='div3'><a name=
'dom-level-3-requirements-xpath-requirements' id=
"dom-level-3-requirements-xpath-requirements"></a>
<h3 id='dom-level-3-requirements-xpath-requirements-h3' class=
'div3'>4.6.3 Requirements</h3>
<ol>
<li>The DOM XPATH module MUST provide one or more methods to allow
a set of nodes matching an XPath expression to be identified.</li>
<li>The DOM XPATH module MUST provide a mechanism so that the
namespace context of the XPath expression can be specified, that
is, so that any namespace prefixes in the XPath expression can be
resolved.</li>
<li>The DOM XPATH module MUST use the same data model as XPath
itself. There are some subtle differences between the XPath data
model and the DOM data model (e.g., the ownerDocument vs parentNode
property to describe the Element containing an Attribute, the
absence of CDATA marked sections in the XPath model, etc.). Since a
combined XPath/XSLT/XQuery data model will be defined in the XPath
2.0 timeframe, it may not be possible to define a DOM XPATH module
until the XPath 2.0 data model is reasonably stable. In any event,
the XPATH DOM must be defined in close coordination with the other
working groups addressing this issue.</li>
<li>The DOM XPATH interfaces SHOULD be based as much as possible on
the ideas and experiences of DOM implementers that have added XPath
extensions.</li>
<li>The DOM XPATH interfaces SHOULD NOT return a "live" object, but
should return a list or iterator that will either reflect a
snapshot of the DOM tree at the moment the XPath query was
evaluated or will become invalidated if changes to the DOM tree
could affect its contents.</li>
</ol>
</div>
<!-- div3 xpath-requirements -->
<div class='div3'><a name='dom-level-3-requirements-xpath-issues'
id="dom-level-3-requirements-xpath-issues"></a>
<h3 id='dom-level-3-requirements-xpath-issues-h3' class='div3'>
4.6.4 Known Questions</h3>
<ol>
<li>It is an open issue whether the DOM WG should wait for the
XPath 2.0 data model to emerge, or whether some interim solution
for the XPath 1.0 data model (mapped onto the DOM data model) is
preferable.</li>
<li>T he obvious place to put an XPath method is on the Node
interface, but we presumably do not want to make this required for
DOM compliance. (We suspect that the XPath module would be
implemented primarily by vendors already implementing XSLT, and
could be quite burdensome for other developers to support).</li>
<li>Do we want to put any requirements on the type of object
returned by an XPath locator? NodeLists are "live", which could
cause problems for implementers. NodeIterators are perhaps more
appropriate, but are not supported by existing XPath extensions to
the DOM.</li>
<li>What about other contextual factors besides namespaces? Do we
want to allow variables and non-standard functions to be defined to
the XPath engine?</li>
</ol>
</div>
<!-- div3 xpath-issues --></div>
<!-- div2 level3-xpath --></div>
<!-- div1 Level3 -->
</body>
</html>