Code

Add new rearranged /dom directory
[inkscape.git] / src / dom / work / xpathtests.cpp
1 /**\r
2  * Phoebe DOM Implementation.\r
3  *\r
4  * This is a C++ approximation of the W3C DOM model, which follows\r
5  * fairly closely the specifications in the various .idl files, copies of\r
6  * which are provided for reference.  Most important is this one:\r
7  *\r
8  * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html\r
9  *\r
10  * Authors:\r
11  *   Bob Jamison\r
12  *\r
13  * Copyright (C) 2005 Bob Jamison\r
14  *\r
15  *  This library is free software; you can redistribute it and/or\r
16  *  modify it under the terms of the GNU Lesser General Public\r
17  *  License as published by the Free Software Foundation; either\r
18  *  version 2.1 of the License, or (at your option) any later version.\r
19  *\r
20  *  This library is distributed in the hope that it will be useful,\r
21  *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
22  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
23  *  Lesser General Public License for more details.\r
24  *\r
25  *  You should have received a copy of the GNU Lesser General Public\r
26  *  License along with this library; if not, write to the Free Software\r
27  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
28  */\r
29 \r
30 \r
31 \r
32 typedef struct\r
33 {\r
34     char *xpathStr;\r
35     char *desc;\r
36     char *xml;\r
37 } XpathTest;\r
38 \r
39 XpathTest xpathTests[] =\r
40 {\r
41 \r
42 {\r
43 "/AAA",\r
44 "Select the root element AAA",\r
45 "     <AAA>"\r
46 "          <BBB/>"\r
47 "          <CCC/>"\r
48 "          <BBB/>"\r
49 "          <BBB/>"\r
50 "          <DDD>"\r
51 "               <BBB/>"\r
52 "          </DDD>"\r
53 "          <CCC/>"\r
54 "     </AAA>"\r
55 },\r
56 \r
57 {\r
58 "/AAA/CCC",\r
59 "Select all elements CCC which are children of the root element AAA",\r
60 "     <AAA>"\r
61 "          <BBB/>"\r
62 "          <CCC/>"\r
63 "          <BBB/>"\r
64 "          <BBB/>"\r
65 "          <DDD>"\r
66 "               <BBB/>"\r
67 "          </DDD>"\r
68 "          <CCC/>"\r
69 "     </AAA>"\r
70 },\r
71 \r
72 {\r
73 "/AAA/DDD/BBB",\r
74 "Select all elements BBB which are children of DDD which are children of the root element AAA",\r
75 "     <AAA>"\r
76 "          <BBB/>"\r
77 "          <CCC/>"\r
78 "          <BBB/>"\r
79 "          <BBB/>"\r
80 "          <DDD>"\r
81 "               <BBB/>"\r
82 "          </DDD>"\r
83 "          <CCC/>"\r
84 "     </AAA>"\r
85 "//BBB",\r
86 },\r
87 \r
88 {\r
89 "Select all elements BBB",\r
90 "     <AAA>"\r
91 "          <BBB/>"\r
92 "          <CCC/>"\r
93 "          <BBB/>"\r
94 "          <DDD>"\r
95 "               <BBB/>"\r
96 "          </DDD>"\r
97 "          <CCC>"\r
98 "               <DDD>"\r
99 "                    <BBB/>"\r
100 "                    <BBB/>"\r
101 "               </DDD>"\r
102 "          </CCC>"\r
103 "     </AAA>"\r
104 },\r
105 \r
106 {\r
107 "//DDD/BBB",\r
108 "Select all elements BBB which are children of DDD",\r
109 "     <AAA>"\r
110 "          <BBB/>"\r
111 "          <CCC/>"\r
112 "          <BBB/>"\r
113 "          <DDD>"\r
114 "               <BBB/>"\r
115 "          </DDD>"\r
116 "          <CCC>"\r
117 "               <DDD>"\r
118 "                    <BBB/>"\r
119 "                    <BBB/>"\r
120 "               </DDD>"\r
121 "          </CCC>"\r
122 "     </AAA>"\r
123 },\r
124 \r
125 {\r
126 "/AAA/CCC/DDD/*",\r
127 "Select all elements enclosed by elements /AAA/CCC/DDD",\r
128 "     <AAA>"\r
129 "          <XXX>"\r
130 "               <DDD>"\r
131 "                    <BBB/>"\r
132 "                    <BBB/>"\r
133 "                    <EEE/>"\r
134 "                    <FFF/>"\r
135 "               </DDD>"\r
136 "          </XXX>"\r
137 "          <CCC>"\r
138 "               <DDD>"\r
139 "                    <BBB/>"\r
140 "                    <BBB/>"\r
141 "                    <EEE/>"\r
142 "                    <FFF/>"\r
143 "               </DDD>"\r
144 "          </CCC>"\r
145 "          <CCC>"\r
146 "               <BBB>"\r
147 "                    <BBB>"\r
148 "                         <BBB/>"\r
149 "                    </BBB>"\r
150 "               </BBB>"\r
151 "          </CCC>"\r
152 "     </AAA>"\r
153 },\r
154 \r
155 {\r
156 "/*/*/*/BBB",\r
157 "Select all elements BBB which have 3 ancestors",\r
158 "     <AAA>"\r
159 "          <XXX>"\r
160 "               <DDD>"\r
161 "                    <BBB/>"\r
162 "                    <BBB/>"\r
163 "                    <EEE/>"\r
164 "                    <FFF/>"\r
165 "               </DDD>"\r
166 "          </XXX>"\r
167 "          <CCC>"\r
168 "               <DDD>"\r
169 "                    <BBB/>"\r
170 "                    <BBB/>"\r
171 "                    <EEE/>"\r
172 "                    <FFF/>"\r
173 "               </DDD>"\r
174 "          </CCC>"\r
175 "          <CCC>"\r
176 "               <BBB>"\r
177 "                    <BBB>"\r
178 "                         <BBB/>"\r
179 "                    </BBB>"\r
180 "               </BBB>"\r
181 "          </CCC>"\r
182 "     </AAA>"\r
183 },\r
184 \r
185 {\r
186 "//*",\r
187 "Select all elements",\r
188 "     <AAA>"\r
189 "          <XXX>"\r
190 "               <DDD>"\r
191 "                    <BBB/>"\r
192 "                    <BBB/>"\r
193 "                    <EEE/>"\r
194 "                    <FFF/>"\r
195 "               </DDD>"\r
196 "          </XXX>"\r
197 "          <CCC>"\r
198 "               <DDD>"\r
199 "                    <BBB/>"\r
200 "                    <BBB/>"\r
201 "                    <EEE/>"\r
202 "                    <FFF/>"\r
203 "               </DDD>"\r
204 "          </CCC>"\r
205 "          <CCC>"\r
206 "               <BBB>"\r
207 "                    <BBB>"\r
208 "                         <BBB/>"\r
209 "                    </BBB>"\r
210 "               </BBB>"\r
211 "          </CCC>"\r
212 "     </AAA>"\r
213 },\r
214 \r
215 {\r
216 "/AAA/BBB[1]",\r
217 "Select the first BBB child of element AAA",\r
218 "     <AAA>"\r
219 "          <BBB/>"\r
220 "          <BBB/>"\r
221 "          <BBB/>"\r
222 "          <BBB/>"\r
223 "     </AAA>"\r
224 },\r
225 \r
226 {\r
227 "/AAA/BBB[last()]",\r
228 "Select the last BBB child of element AAA",\r
229 "     <AAA>"\r
230 "          <BBB/>"\r
231 "          <BBB/>"\r
232 "          <BBB/>"\r
233 "          <BBB/>"\r
234 "     </AAA>"\r
235 },\r
236 \r
237 {\r
238 "//@id",\r
239 "Select all attributes @id",\r
240 "     <AAA>"\r
241 "          <BBB id = 'b1'/>"\r
242 "          <BBB id = 'b2'/>"\r
243 "          <BBB name = 'bbb'/>"\r
244 "          <BBB/>"\r
245 "     </AAA>"\r
246 },\r
247 \r
248 {\r
249 "//BBB[@id]",\r
250 "Select BBB elements which have attribute id",\r
251 "     <AAA>"\r
252 "          <BBB id = 'b1'/>"\r
253 "          <BBB id = 'b2'/>"\r
254 "          <BBB name = 'bbb'/>"\r
255 "          <BBB/>"\r
256 "     </AAA>"\r
257 },\r
258 \r
259 {\r
260 "//BBB[@name]",\r
261 "Select BBB elements which have attribute name",\r
262 "     <AAA>"\r
263 "          <BBB id = 'b1'/>"\r
264 "          <BBB id = 'b2'/>"\r
265 "          <BBB name = 'bbb'/>"\r
266 "          <BBB/>"\r
267 "     </AAA>"\r
268 },\r
269 \r
270 {\r
271 "//BBB[@*]",\r
272 "Select BBB elements which have any attribute",\r
273 "     <AAA>"\r
274 "          <BBB id = 'b1'/>"\r
275 "          <BBB id = 'b2'/>"\r
276 "          <BBB name = 'bbb'/>"\r
277 "          <BBB/>"\r
278 "     </AAA>"\r
279 },\r
280 \r
281 {\r
282 "//BBB[not(@*)]",\r
283 "Select BBB elements without an attribute",\r
284 "     <AAA>"\r
285 "          <BBB id = 'b1'/>"\r
286 "          <BBB id = 'b2'/>"\r
287 "          <BBB name = 'bbb'/>"\r
288 "          <BBB/>"\r
289 "     </AAA>"\r
290 },\r
291 \r
292 {\r
293 "//BBB[@id='b1']",\r
294 "Select BBB elements which have attribute id with value b1",\r
295 "     <AAA>"\r
296 "          <BBB id = 'b1'/>"\r
297 "          <BBB name = ' bbb '/>"\r
298 "          <BBB name = 'bbb'/>"\r
299 "     </AAA>"\r
300 },\r
301 \r
302 {\r
303 "//BBB[@name='bbb']",\r
304 "Select BBB elements which have attribute name with value 'bbb'",\r
305 "     <AAA>"\r
306 "          <BBB id = 'b1'/>"\r
307 "          <BBB name = ' bbb '/>"\r
308 "          <BBB name = 'bbb'/>"\r
309 "     </AAA>"\r
310 },\r
311 \r
312 {\r
313 "//BBB[normalize-space(@name)='bbb']",\r
314 "Select BBB elements which have attribute name with value bbb, leading and trailing spaces are removed before comparison",\r
315 "     <AAA>"\r
316 "          <BBB id = 'b1'/>"\r
317 "          <BBB name = ' bbb '/>"\r
318 "          <BBB name = 'bbb'/>"\r
319 "     </AAA>"\r
320 },\r
321 \r
322 {\r
323 "//*[count(BBB)=2]",\r
324 "Select elements which have two children BBB",\r
325 "     <AAA>"\r
326 "          <CCC>"\r
327 "               <BBB/>"\r
328 "               <BBB/>"\r
329 "               <BBB/>"\r
330 "          </CCC>"\r
331 "          <DDD>"\r
332 "               <BBB/>"\r
333 "               <BBB/>"\r
334 "          </DDD>"\r
335 "          <EEE>"\r
336 "               <CCC/>"\r
337 "               <DDD/>"\r
338 "          </EEE>"\r
339 "     </AAA>"\r
340 },\r
341 \r
342 {\r
343 "//*[count(*)=2]",\r
344 "Select elements which have 2 children",\r
345 "     <AAA>"\r
346 "          <CCC>"\r
347 "               <BBB/>"\r
348 "               <BBB/>"\r
349 "               <BBB/>"\r
350 "          </CCC>"\r
351 "          <DDD>"\r
352 "               <BBB/>"\r
353 "               <BBB/>"\r
354 "          </DDD>"\r
355 "          <EEE>"\r
356 "               <CCC/>"\r
357 "               <DDD/>"\r
358 "          </EEE>"\r
359 "     </AAA>"\r
360 },\r
361 \r
362 {\r
363 "//*[count(*)=3]",\r
364 "Select elements which have 3 children",\r
365 "     <AAA>"\r
366 "          <CCC>"\r
367 "               <BBB/>"\r
368 "               <BBB/>"\r
369 "               <BBB/>"\r
370 "          </CCC>"\r
371 "          <DDD>"\r
372 "               <BBB/>"\r
373 "               <BBB/>"\r
374 "          </DDD>"\r
375 "          <EEE>"\r
376 "               <CCC/>"\r
377 "               <DDD/>"\r
378 "          </EEE>"\r
379 "     </AAA>"\r
380 },\r
381 \r
382 {\r
383 "//*[name()='BBB']",\r
384 "Select all elements with name BBB, equivalent with //BBB",\r
385 "     <AAA>"\r
386 "          <BCC>"\r
387 "               <BBB/>"\r
388 "               <BBB/>"\r
389 "               <BBB/>"\r
390 "          </BCC>"\r
391 "          <DDB>"\r
392 "               <BBB/>"\r
393 "               <BBB/>"\r
394 "          </DDB>"\r
395 "          <BEC>"\r
396 "               <CCC/>"\r
397 "               <DBD/>"\r
398 "          </BEC>"\r
399 "     </AAA>"\r
400 },\r
401 \r
402 {\r
403 "//*[starts-with(name(),'B')]",\r
404 "Select all elements name of which starts with letter B",\r
405 "     <AAA>"\r
406 "          <BCC>"\r
407 "               <BBB/>"\r
408 "               <BBB/>"\r
409 "               <BBB/>"\r
410 "          </BCC>"\r
411 "          <DDB>"\r
412 "               <BBB/>"\r
413 "               <BBB/>"\r
414 "          </DDB>"\r
415 "          <BEC>"\r
416 "               <CCC/>"\r
417 "               <DBD/>"\r
418 "          </BEC>"\r
419 "     </AAA>"\r
420 },\r
421 \r
422 {\r
423 "//*[contains(name(),'C')]",\r
424 "Select all elements name of which contain letter C",\r
425 "     <AAA>"\r
426 "          <BCC>"\r
427 "               <BBB/>"\r
428 "               <BBB/>"\r
429 "               <BBB/>"\r
430 "          </BCC>"\r
431 "          <DDB>"\r
432 "               <BBB/>"\r
433 "               <BBB/>"\r
434 "          </DDB>"\r
435 "          <BEC>"\r
436 "               <CCC/>"\r
437 "               <DBD/>"\r
438 "          </BEC>"\r
439 "     </AAA>"\r
440 },\r
441 \r
442 {\r
443 "//*[string-length(name()) = 3]",\r
444 "Select elements with three-letter name",\r
445 "     <AAA>"\r
446 "          <Q/>"\r
447 "          <SSSS/>"\r
448 "          <BB/>"\r
449 "          <CCC/>"\r
450 "          <DDDDDDDD/>"\r
451 "          <EEEE/>"\r
452 "     </AAA>"\r
453 },\r
454 \r
455 {\r
456 "//*[string-length(name()) < 3]",\r
457 "Select elements name of which has one or two characters",\r
458 "     <AAA>"\r
459 "          <Q/>"\r
460 "          <SSSS/>"\r
461 "          <BB/>"\r
462 "          <CCC/>"\r
463 "          <DDDDDDDD/>"\r
464 "          <EEEE/>"\r
465 "     </AAA>"\r
466 },\r
467 \r
468 {\r
469 "//*[string-length(name()) > 3]",\r
470 "Select elements with name longer than three characters",\r
471 "     <AAA>"\r
472 "          <Q/>"\r
473 "          <SSSS/>"\r
474 "          <BB/>"\r
475 "          <CCC/>"\r
476 "          <DDDDDDDD/>"\r
477 "          <EEEE/>"\r
478 "     </AAA>"\r
479 },\r
480 \r
481 {\r
482 "//CCC | //BBB",\r
483 "Select all elements CCC and BBB",\r
484 "     <AAA>"\r
485 "          <BBB/>"\r
486 "          <CCC/>"\r
487 "          <DDD>"\r
488 "               <CCC/>"\r
489 "          </DDD>"\r
490 "          <EEE/>"\r
491 "     </AAA>"\r
492 },\r
493 \r
494 {\r
495 "/AAA/EEE | //BBB",\r
496 "Select all elements BBB and elements EEE which are children of root element AAA",\r
497 "     <AAA>"\r
498 "          <BBB/>"\r
499 "          <CCC/>"\r
500 "          <DDD>"\r
501 "               <CCC/>"\r
502 "          </DDD>"\r
503 "          <EEE/>"\r
504 "     </AAA>"\r
505 },\r
506 \r
507 {\r
508 "/AAA/EEE | //DDD/CCC | /AAA | //BBB",\r
509 "Number of combinations is not restricted",\r
510 "     <AAA>"\r
511 "          <BBB/>"\r
512 "          <CCC/>"\r
513 "          <DDD>"\r
514 "               <CCC/>"\r
515 "          </DDD>"\r
516 "          <EEE/>"\r
517 "     </AAA>"\r
518 },\r
519 \r
520 {\r
521 "/AAA",\r
522 "Equivalent of /child::AAA",\r
523 "     <AAA>"\r
524 "          <BBB/>"\r
525 "          <CCC/>"\r
526 "     </AAA>"\r
527 },\r
528 \r
529 {\r
530 "/child::AAA",\r
531 "Equivalent of /AAA",\r
532 "     <AAA>"\r
533 "          <BBB/>"\r
534 "          <CCC/>"\r
535 "     </AAA>"\r
536 },\r
537 \r
538 {\r
539 "/AAA/BBB",\r
540 "Equivalent of /child::AAA/child::BBB",\r
541 "     <AAA>"\r
542 "          <BBB/>"\r
543 "          <CCC/>"\r
544 "     </AAA>"\r
545 },\r
546 \r
547 {\r
548 "/child::AAA/child::BBB",\r
549 "Equivalent of /AAA/BBB",\r
550 "     <AAA>"\r
551 "          <BBB/>"\r
552 "          <CCC/>"\r
553 "     </AAA>"\r
554 },\r
555 \r
556 {\r
557 "/child::AAA/BBB",\r
558 "Both possibilities can be combined",\r
559 "     <AAA>"\r
560 "          <BBB/>"\r
561 "          <CCC/>"\r
562 "     </AAA>"\r
563 },\r
564 \r
565 {\r
566 "/descendant::*",\r
567 "Select all descendants of document root and therefore all elements",\r
568 "     <AAA>"\r
569 "          <BBB>"\r
570 "               <DDD>"\r
571 "                    <CCC>"\r
572 "                         <DDD/>"\r
573 "                         <EEE/>"\r
574 "                    </CCC>"\r
575 "               </DDD>"\r
576 "          </BBB>"\r
577 "          <CCC>"\r
578 "               <DDD>"\r
579 "                    <EEE>"\r
580 "                         <DDD>"\r
581 "                              <FFF/>"\r
582 "                         </DDD>"\r
583 "                    </EEE>"\r
584 "               </DDD>"\r
585 "          </CCC>"\r
586 "     </AAA>"\r
587 },\r
588 \r
589 {\r
590 "/AAA/BBB/descendant::*",\r
591 "Select all descendants of /AAA/BBB",\r
592 "     <AAA>"\r
593 "          <BBB>"\r
594 "               <DDD>"\r
595 "                    <CCC>"\r
596 "                         <DDD/>"\r
597 "                         <EEE/>"\r
598 "                    </CCC>"\r
599 "               </DDD>"\r
600 "          </BBB>"\r
601 "          <CCC>"\r
602 "               <DDD>"\r
603 "                    <EEE>"\r
604 "                         <DDD>"\r
605 "                              <FFF/>"\r
606 "                         </DDD>"\r
607 "                    </EEE>"\r
608 "               </DDD>"\r
609 "          </CCC>"\r
610 "     </AAA>"\r
611 },\r
612 \r
613 {\r
614 "//CCC/descendant::*",\r
615 "Select all elements which have CCC among its ancestors",\r
616 "     <AAA>"\r
617 "          <BBB>"\r
618 "               <DDD>"\r
619 "                    <CCC>"\r
620 "                         <DDD/>"\r
621 "                         <EEE/>"\r
622 "                    </CCC>"\r
623 "               </DDD>"\r
624 "          </BBB>"\r
625 "          <CCC>"\r
626 "               <DDD>"\r
627 "                    <EEE>"\r
628 "                         <DDD>"\r
629 "                              <FFF/>"\r
630 "                         </DDD>"\r
631 "                    </EEE>"\r
632 "               </DDD>"\r
633 "          </CCC>"\r
634 "     </AAA>"\r
635 },\r
636 \r
637 {\r
638 "//CCC/descendant::DDD",\r
639 "Select elements DDD which have CCC among its ancestors",\r
640 "     <AAA>"\r
641 "          <BBB>"\r
642 "               <DDD>"\r
643 "                    <CCC>"\r
644 "                         <DDD/>"\r
645 "                         <EEE/>"\r
646 "                    </CCC>"\r
647 "               </DDD>"\r
648 "          </BBB>"\r
649 "          <CCC>"\r
650 "               <DDD>"\r
651 "                    <EEE>"\r
652 "                         <DDD>"\r
653 "                              <FFF/>"\r
654 "                         </DDD>"\r
655 "                    </EEE>"\r
656 "               </DDD>"\r
657 "          </CCC>"\r
658 "     </AAA>"\r
659 },\r
660 \r
661 {\r
662 "//DDD/parent::*",\r
663 "Select all parents of DDD element",\r
664 "     <AAA>"\r
665 "          <BBB>"\r
666 "               <DDD>"\r
667 "                    <CCC>"\r
668 "                         <DDD/>"\r
669 "                         <EEE/>"\r
670 "                    </CCC>"\r
671 "               </DDD>"\r
672 "          </BBB>"\r
673 "          <CCC>"\r
674 "               <DDD>"\r
675 "                    <EEE>"\r
676 "                         <DDD>"\r
677 "                              <FFF/>"\r
678 "                         </DDD>"\r
679 "                    </EEE>"\r
680 "               </DDD>"\r
681 "          </CCC>"\r
682 "     </AAA>"\r
683 },\r
684 \r
685 {\r
686 "/AAA/BBB/DDD/CCC/EEE/ancestor::*",\r
687 "Select all elements given in this absolute path",\r
688 "     <AAA>"\r
689 "          <BBB>"\r
690 "               <DDD>"\r
691 "                    <CCC>"\r
692 "                         <DDD/>"\r
693 "                         <EEE/>"\r
694 "                    </CCC>"\r
695 "               </DDD>"\r
696 "          </BBB>"\r
697 "          <CCC>"\r
698 "               <DDD>"\r
699 "                    <EEE>"\r
700 "                         <DDD>"\r
701 "                              <FFF/>"\r
702 "                         </DDD>"\r
703 "                    </EEE>"\r
704 "               </DDD>"\r
705 "          </CCC>"\r
706 "     </AAA>"\r
707 },\r
708 \r
709 {\r
710 "//FFF/ancestor::*",\r
711 "Select ancestors of FFF element",\r
712 "     <AAA>"\r
713 "          <BBB>"\r
714 "               <DDD>"\r
715 "                    <CCC>"\r
716 "                         <DDD/>"\r
717 "                         <EEE/>"\r
718 "                    </CCC>"\r
719 "               </DDD>"\r
720 "          </BBB>"\r
721 "          <CCC>"\r
722 "               <DDD>"\r
723 "                    <EEE>"\r
724 "                         <DDD>"\r
725 "                              <FFF/>"\r
726 "                         </DDD>"\r
727 "                    </EEE>"\r
728 "               </DDD>"\r
729 "          </CCC>"\r
730 "     </AAA>"\r
731 },\r
732 \r
733 {\r
734 "/AAA/BBB/following-sibling::*",\r
735 "The following-sibling axis contains all the following siblings of the context node.",\r
736 "     <AAA>"\r
737 "          <BBB>"\r
738 "               <CCC/>"\r
739 "               <DDD/>"\r
740 "          </BBB>"\r
741 "          <XXX>"\r
742 "               <DDD>"\r
743 "                    <EEE/>"\r
744 "                    <DDD/>"\r
745 "                    <CCC/>"\r
746 "                    <FFF/>"\r
747 "                    <FFF>"\r
748 "                         <GGG/>"\r
749 "                    </FFF>"\r
750 "               </DDD>"\r
751 "          </XXX>"\r
752 "          <CCC>"\r
753 "               <DDD/>"\r
754 "          </CCC>"\r
755 "     </AAA>"\r
756 },\r
757 \r
758 {\r
759 "//CCC/following-sibling::*",\r
760 "The following-sibling axis contains all the following siblings of the context node.",\r
761 "     <AAA>"\r
762 "          <BBB>"\r
763 "               <CCC/>"\r
764 "               <DDD/>"\r
765 "          </BBB>"\r
766 "          <XXX>"\r
767 "               <DDD>"\r
768 "                    <EEE/>"\r
769 "                    <DDD/>"\r
770 "                    <CCC/>"\r
771 "                    <FFF/>"\r
772 "                    <FFF>"\r
773 "                         <GGG/>"\r
774 "                    </FFF>"\r
775 "               </DDD>"\r
776 "          </XXX>"\r
777 "          <CCC>"\r
778 "               <DDD/>"\r
779 "          </CCC>"\r
780 "     </AAA>"\r
781 },\r
782 \r
783 {\r
784 "/AAA/XXX/preceding-sibling::*",\r
785 "The preceding-sibling axis contains all the preceding siblings of the context node.",\r
786 "     <AAA>"\r
787 "          <BBB>"\r
788 "               <CCC/>"\r
789 "               <DDD/>"\r
790 "          </BBB>"\r
791 "          <XXX>"\r
792 "               <DDD>"\r
793 "                    <EEE/>"\r
794 "                    <DDD/>"\r
795 "                    <CCC/>"\r
796 "                    <FFF/>"\r
797 "                    <FFF>"\r
798 "                         <GGG/>"\r
799 "                    </FFF>"\r
800 "               </DDD>"\r
801 "          </XXX>"\r
802 "          <CCC>"\r
803 "               <DDD/>"\r
804 "          </CCC>"\r
805 "     </AAA>"\r
806 },\r
807 \r
808 {\r
809 "//CCC/preceding-sibling::*",\r
810 "     <AAA>"\r
811 "          <BBB>"\r
812 "               <CCC/>"\r
813 "               <DDD/>"\r
814 "          </BBB>"\r
815 "          <XXX>"\r
816 "               <DDD>"\r
817 "                    <EEE/>"\r
818 "                    <DDD/>"\r
819 "                    <CCC/>"\r
820 "                    <FFF/>"\r
821 "                    <FFF>"\r
822 "                         <GGG/>"\r
823 "                    </FFF>"\r
824 "               </DDD>"\r
825 "          </XXX>"\r
826 "          <CCC>"\r
827 "               <DDD/>"\r
828 "          </CCC>"\r
829 "     </AAA>"\r
830 },\r
831 \r
832 {\r
833 "/AAA/XXX/following::*",\r
834 "Description",\r
835 "     <AAA>"\r
836 "          <BBB>"\r
837 "               <CCC/>"\r
838 "               <ZZZ>"\r
839 "                    <DDD/>"\r
840 "                    <DDD>"\r
841 "                         <EEE/>"\r
842 "                    </DDD>"\r
843 "               </ZZZ>"\r
844 "               <FFF>"\r
845 "                    <GGG/>"\r
846 "               </FFF>"\r
847 "          </BBB>"\r
848 "          <XXX>"\r
849 "               <DDD>"\r
850 "                    <EEE/>"\r
851 "                    <DDD/>"\r
852 "                    <CCC/>"\r
853 "                    <FFF/>"\r
854 "                    <FFF>"\r
855 "                         <GGG/>"\r
856 "                    </FFF>"\r
857 "               </DDD>"\r
858 "          </XXX>"\r
859 "          <CCC>"\r
860 "               <DDD/>"\r
861 "          </CCC>"\r
862 "     </AAA>"\r
863 },\r
864 \r
865 {\r
866 "//ZZZ/following::*",\r
867 "Description",\r
868 "     <AAA>"\r
869 "          <BBB>"\r
870 "               <CCC/>"\r
871 "               <ZZZ>"\r
872 "                    <DDD/>"\r
873 "                    <DDD>"\r
874 "                         <EEE/>"\r
875 "                    </DDD>"\r
876 "               </ZZZ>"\r
877 "               <FFF>"\r
878 "                    <GGG/>"\r
879 "               </FFF>"\r
880 "          </BBB>"\r
881 "          <XXX>"\r
882 "               <DDD>"\r
883 "                    <EEE/>"\r
884 "                    <DDD/>"\r
885 "                    <CCC/>"\r
886 "                    <FFF/>"\r
887 "                    <FFF>"\r
888 "                         <GGG/>"\r
889 "                    </FFF>"\r
890 "               </DDD>"\r
891 "          </XXX>"\r
892 "          <CCC>"\r
893 "               <DDD/>"\r
894 "          </CCC>"\r
895 "     </AAA>"\r
896 },\r
897 \r
898 {\r
899 "/AAA/XXX/preceding::*",\r
900 "Description",\r
901 "     <AAA>"\r
902 "          <BBB>"\r
903 "               <CCC/>"\r
904 "               <ZZZ>"\r
905 "                    <DDD/>"\r
906 "               </ZZZ>"\r
907 "          </BBB>"\r
908 "          <XXX>"\r
909 "               <DDD>"\r
910 "                    <EEE/>"\r
911 "                    <DDD/>"\r
912 "                    <CCC/>"\r
913 "                    <FFF/>"\r
914 "                    <FFF>"\r
915 "                         <GGG/>"\r
916 "                    </FFF>"\r
917 "               </DDD>"\r
918 "          </XXX>"\r
919 "          <CCC>"\r
920 "               <DDD/>"\r
921 "          </CCC>"\r
922 "     </AAA>"\r
923 },\r
924 \r
925 {\r
926 "//GGG/preceding::*",\r
927 "Description",\r
928 "     <AAA>"\r
929 "          <BBB>"\r
930 "               <CCC/>"\r
931 "               <ZZZ>"\r
932 "                    <DDD/>"\r
933 "               </ZZZ>"\r
934 "          </BBB>"\r
935 "          <XXX>"\r
936 "               <DDD>"\r
937 "                    <EEE/>"\r
938 "                    <DDD/>"\r
939 "                    <CCC/>"\r
940 "                    <FFF/>"\r
941 "                    <FFF>"\r
942 "                         <GGG/>"\r
943 "                    </FFF>"\r
944 "               </DDD>"\r
945 "          </XXX>"\r
946 "          <CCC>"\r
947 "               <DDD/>"\r
948 "          </CCC>"\r
949 "     </AAA>"\r
950 },\r
951 \r
952 {\r
953 "/AAA/XXX/descendant-or-self::*",\r
954 "Description",\r
955 "     <AAA>"\r
956 "          <BBB>"\r
957 "               <CCC/>"\r
958 "               <ZZZ>"\r
959 "                    <DDD/>"\r
960 "               </ZZZ>"\r
961 "          </BBB>"\r
962 "          <XXX>"\r
963 "               <DDD>"\r
964 "                    <EEE/>"\r
965 "                    <DDD/>"\r
966 "                    <CCC/>"\r
967 "                    <FFF/>"\r
968 "                    <FFF>"\r
969 "                         <GGG/>"\r
970 "                    </FFF>"\r
971 "               </DDD>"\r
972 "          </XXX>"\r
973 "          <CCC>"\r
974 "               <DDD/>"\r
975 "          </CCC>"\r
976 "     </AAA>"\r
977 },\r
978 \r
979 {\r
980 "//CCC/descendant-or-self::*",\r
981 "Description",\r
982 "     <AAA>"\r
983 "          <BBB>"\r
984 "               <CCC/>"\r
985 "               <ZZZ>"\r
986 "                    <DDD/>"\r
987 "               </ZZZ>"\r
988 "          </BBB>"\r
989 "          <XXX>"\r
990 "               <DDD>"\r
991 "                    <EEE/>"\r
992 "                    <DDD/>"\r
993 "                    <CCC/>"\r
994 "                    <FFF/>"\r
995 "                    <FFF>"\r
996 "                         <GGG/>"\r
997 "                    </FFF>"\r
998 "               </DDD>"\r
999 "          </XXX>"\r
1000 "          <CCC>"\r
1001 "               <DDD/>"\r
1002 "          </CCC>"\r
1003 "     </AAA>"\r
1004 },\r
1005 \r
1006 {\r
1007 "/AAA/XXX/DDD/EEE/ancestor-or-self::*",\r
1008 "Description",\r
1009 "     <AAA>"\r
1010 "          <BBB>"\r
1011 "               <CCC/>"\r
1012 "               <ZZZ>"\r
1013 "                    <DDD/>"\r
1014 "               </ZZZ>"\r
1015 "          </BBB>"\r
1016 "          <XXX>"\r
1017 "               <DDD>"\r
1018 "                    <EEE/>"\r
1019 "                    <DDD/>"\r
1020 "                    <CCC/>"\r
1021 "                    <FFF/>"\r
1022 "                    <FFF>"\r
1023 "                         <GGG/>"\r
1024 "                    </FFF>"\r
1025 "               </DDD>"\r
1026 "          </XXX>"\r
1027 "          <CCC>"\r
1028 "               <DDD/>"\r
1029 "          </CCC>"\r
1030 "     </AAA>"\r
1031 },\r
1032 \r
1033 {\r
1034 "//GGG/ancestor-or-self::*",\r
1035 "Description",\r
1036 "     <AAA>"\r
1037 "          <BBB>"\r
1038 "               <CCC/>"\r
1039 "               <ZZZ>"\r
1040 "                    <DDD/>"\r
1041 "               </ZZZ>"\r
1042 "          </BBB>"\r
1043 "          <XXX>"\r
1044 "               <DDD>"\r
1045 "                    <EEE/>"\r
1046 "                    <DDD/>"\r
1047 "                    <CCC/>"\r
1048 "                    <FFF/>"\r
1049 "                    <FFF>"\r
1050 "                         <GGG/>"\r
1051 "                    </FFF>"\r
1052 "               </DDD>"\r
1053 "          </XXX>"\r
1054 "          <CCC>"\r
1055 "               <DDD/>"\r
1056 "          </CCC>"\r
1057 "     </AAA>"\r
1058 },\r
1059 \r
1060 {\r
1061 "//GGG/ancestor::*",\r
1062 "Description",\r
1063 "     <AAA>"\r
1064 "          <BBB>"\r
1065 "               <CCC/>"\r
1066 "               <ZZZ/>"\r
1067 "          </BBB>"\r
1068 "          <XXX>"\r
1069 "               <DDD>"\r
1070 "                    <EEE/>"\r
1071 "                    <FFF>"\r
1072 "                         <HHH/>"\r
1073 "                         <GGG>"\r
1074 "                              <JJJ>"\r
1075 "                                   <QQQ/>"\r
1076 "                              </JJJ>"\r
1077 "                              <JJJ/>"\r
1078 "                         </GGG>"\r
1079 "                         <HHH/>"\r
1080 "                    </FFF>"\r
1081 "               </DDD>"\r
1082 "          </XXX>"\r
1083 "          <CCC>"\r
1084 "               <DDD/>"\r
1085 "          </CCC>"\r
1086 "     </AAA>"\r
1087 },\r
1088 \r
1089 {\r
1090 "//GGG/descendant::*",\r
1091 "Description",\r
1092 "     <AAA>"\r
1093 "          <BBB>"\r
1094 "               <CCC/>"\r
1095 "               <ZZZ/>"\r
1096 "          </BBB>"\r
1097 "          <XXX>"\r
1098 "               <DDD>"\r
1099 "                    <EEE/>"\r
1100 "                    <FFF>"\r
1101 "                         <HHH/>"\r
1102 "                         <GGG>"\r
1103 "                              <JJJ>"\r
1104 "                                   <QQQ/>"\r
1105 "                              </JJJ>"\r
1106 "                              <JJJ/>"\r
1107 "                         </GGG>"\r
1108 "                         <HHH/>"\r
1109 "                    </FFF>"\r
1110 "               </DDD>"\r
1111 "          </XXX>"\r
1112 "          <CCC>"\r
1113 "               <DDD/>"\r
1114 "          </CCC>"\r
1115 "     </AAA>"\r
1116 },\r
1117 \r
1118 {\r
1119 "//GGG/following::*",\r
1120 "Description",\r
1121 "     <AAA>"\r
1122 "          <BBB>"\r
1123 "               <CCC/>"\r
1124 "               <ZZZ/>"\r
1125 "          </BBB>"\r
1126 "          <XXX>"\r
1127 "               <DDD>"\r
1128 "                    <EEE/>"\r
1129 "                    <FFF>"\r
1130 "                         <HHH/>"\r
1131 "                         <GGG>"\r
1132 "                              <JJJ>"\r
1133 "                                   <QQQ/>"\r
1134 "                              </JJJ>"\r
1135 "                              <JJJ/>"\r
1136 "                         </GGG>"\r
1137 "                         <HHH/>"\r
1138 "                    </FFF>"\r
1139 "               </DDD>"\r
1140 "          </XXX>"\r
1141 "          <CCC>"\r
1142 "               <DDD/>"\r
1143 "          </CCC>"\r
1144 "     </AAA>"\r
1145 },\r
1146 \r
1147 {\r
1148 "//GGG/preceding::*",\r
1149 "Description",\r
1150 "     <AAA>"\r
1151 "          <BBB>"\r
1152 "               <CCC/>"\r
1153 "               <ZZZ/>"\r
1154 "          </BBB>"\r
1155 "          <XXX>"\r
1156 "               <DDD>"\r
1157 "                    <EEE/>"\r
1158 "                    <FFF>"\r
1159 "                         <HHH/>"\r
1160 "                         <GGG>"\r
1161 "                              <JJJ>"\r
1162 "                                   <QQQ/>"\r
1163 "                              </JJJ>"\r
1164 "                              <JJJ/>"\r
1165 "                         </GGG>"\r
1166 "                         <HHH/>"\r
1167 "                    </FFF>"\r
1168 "               </DDD>"\r
1169 "          </XXX>"\r
1170 "          <CCC>"\r
1171 "               <DDD/>"\r
1172 "          </CCC>"\r
1173 "     </AAA>"\r
1174 },\r
1175 \r
1176 {\r
1177 "//GGG/self::*",\r
1178 "Description",\r
1179 "     <AAA>"\r
1180 "          <BBB>"\r
1181 "               <CCC/>"\r
1182 "               <ZZZ/>"\r
1183 "          </BBB>"\r
1184 "          <XXX>"\r
1185 "               <DDD>"\r
1186 "                    <EEE/>"\r
1187 "                    <FFF>"\r
1188 "                         <HHH/>"\r
1189 "                         <GGG>"\r
1190 "                              <JJJ>"\r
1191 "                                   <QQQ/>"\r
1192 "                              </JJJ>"\r
1193 "                              <JJJ/>"\r
1194 "                         </GGG>"\r
1195 "                         <HHH/>"\r
1196 "                    </FFF>"\r
1197 "               </DDD>"\r
1198 "          </XXX>"\r
1199 "          <CCC>"\r
1200 "               <DDD/>"\r
1201 "          </CCC>"\r
1202 "     </AAA>"\r
1203 },\r
1204 \r
1205 {\r
1206 "//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*",\r
1207 "description",\r
1208 "     <AAA>"\r
1209 "          <BBB>"\r
1210 "               <CCC/>"\r
1211 "               <ZZZ/>"\r
1212 "          </BBB>"\r
1213 "          <XXX>"\r
1214 "               <DDD>"\r
1215 "                    <EEE/>"\r
1216 "                    <FFF>"\r
1217 "                         <HHH/>"\r
1218 "                         <GGG>"\r
1219 "                              <JJJ>"\r
1220 "                                   <QQQ/>"\r
1221 "                              </JJJ>"\r
1222 "                              <JJJ/>"\r
1223 "                         </GGG>"\r
1224 "                         <HHH/>"\r
1225 "                    </FFF>"\r
1226 "               </DDD>"\r
1227 "          </XXX>"\r
1228 "          <CCC>"\r
1229 "               <DDD/>"\r
1230 "          </CCC>"\r
1231 "     </AAA>"\r
1232 },\r
1233 \r
1234 {\r
1235 "//BBB[position() mod 2 = 0 ]",\r
1236 "Select even BBB elements",\r
1237 "     <AAA>"\r
1238 "          <BBB/>"\r
1239 "          <BBB/>"\r
1240 "          <BBB/>"\r
1241 "          <BBB/>"\r
1242 "          <BBB/>"\r
1243 "          <BBB/>"\r
1244 "          <BBB/>"\r
1245 "          <BBB/>"\r
1246 "          <CCC/>"\r
1247 "          <CCC/>"\r
1248 "          <CCC/>"\r
1249 "     </AAA>"\r
1250 },\r
1251 \r
1252 {\r
1253 "//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]",\r
1254 "Select middle BBB element(s)",\r
1255 "     <AAA>"\r
1256 "          <BBB/>"\r
1257 "          <BBB/>"\r
1258 "          <BBB/>"\r
1259 "          <BBB/>"\r
1260 "          <BBB/>"\r
1261 "          <BBB/>"\r
1262 "          <BBB/>"\r
1263 "          <BBB/>"\r
1264 "          <CCC/>"\r
1265 "          <CCC/>"\r
1266 "          <CCC/>"\r
1267 "     </AAA>"\r
1268 },\r
1269 \r
1270 {\r
1271 "//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]",\r
1272 "Select middle CCC element(s)",\r
1273 "     <AAA>"\r
1274 "          <BBB/>"\r
1275 "          <BBB/>"\r
1276 "          <BBB/>"\r
1277 "          <BBB/>"\r
1278 "          <BBB/>"\r
1279 "          <BBB/>"\r
1280 "          <BBB/>"\r
1281 "          <BBB/>"\r
1282 "          <CCC/>"\r
1283 "          <CCC/>"\r
1284 "          <CCC/>"\r
1285 "     </AAA>"\r
1286 }\r
1287 \r
1288 }; //end\r
1289 \r
1290 \r