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&#233;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>
&#169;2004 <a href='http://www.w3.org/'><abbr title=
'World Wide Web Consortium'>W3C</abbr></a><sup>&#174;</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 &lt;object&gt;
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>