magic_xml 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (287) hide show
  1. data/README +22 -0
  2. data/Rakefile +52 -0
  3. data/VERSION +1 -0
  4. data/doc/classes/Array.html +148 -0
  5. data/doc/classes/File.html +113 -0
  6. data/doc/classes/Hash.html +117 -0
  7. data/doc/classes/Patterns_all.html +145 -0
  8. data/doc/classes/Patterns_any.html +145 -0
  9. data/doc/classes/String.html +470 -0
  10. data/doc/classes/Symbol.html +145 -0
  11. data/doc/classes/XML.html +1881 -0
  12. data/doc/classes/XML_Comment.html +148 -0
  13. data/doc/classes/XML_PI.html +145 -0
  14. data/doc/classes/XML_Tests.html +1727 -0
  15. data/doc/files/magic_xml_rb.html +186 -0
  16. data/doc/files/simple_examples/xml_hello_f_rb.html +88 -0
  17. data/doc/files/simple_examples/xml_hello_m_rb.html +88 -0
  18. data/doc/files/simple_examples/xml_list_f_rb.html +88 -0
  19. data/doc/files/simple_examples/xml_list_m_rb.html +88 -0
  20. data/doc/files/tests_rb.html +94 -0
  21. data/doc/files/xquery_use_cases/parts/q1_rb.html +117 -0
  22. data/doc/files/xquery_use_cases/rdb/q10_rb.html +88 -0
  23. data/doc/files/xquery_use_cases/rdb/q11_rb.html +88 -0
  24. data/doc/files/xquery_use_cases/rdb/q12_rb.html +88 -0
  25. data/doc/files/xquery_use_cases/rdb/q13_rb.html +88 -0
  26. data/doc/files/xquery_use_cases/rdb/q14_rb.html +88 -0
  27. data/doc/files/xquery_use_cases/rdb/q15_rb.html +88 -0
  28. data/doc/files/xquery_use_cases/rdb/q16_rb.html +88 -0
  29. data/doc/files/xquery_use_cases/rdb/q17_rb.html +88 -0
  30. data/doc/files/xquery_use_cases/rdb/q18_rb.html +88 -0
  31. data/doc/files/xquery_use_cases/rdb/q1_rb.html +88 -0
  32. data/doc/files/xquery_use_cases/rdb/q2_rb.html +88 -0
  33. data/doc/files/xquery_use_cases/rdb/q3_rb.html +88 -0
  34. data/doc/files/xquery_use_cases/rdb/q4_rb.html +88 -0
  35. data/doc/files/xquery_use_cases/rdb/q5_rb.html +88 -0
  36. data/doc/files/xquery_use_cases/rdb/q6_rb.html +88 -0
  37. data/doc/files/xquery_use_cases/rdb/q7_rb.html +88 -0
  38. data/doc/files/xquery_use_cases/rdb/q8_rb.html +88 -0
  39. data/doc/files/xquery_use_cases/rdb/q9_rb.html +88 -0
  40. data/doc/files/xquery_use_cases/seq/q1_rb.html +88 -0
  41. data/doc/files/xquery_use_cases/seq/q2_rb.html +88 -0
  42. data/doc/files/xquery_use_cases/seq/q3_rb.html +88 -0
  43. data/doc/files/xquery_use_cases/seq/q4_rb.html +88 -0
  44. data/doc/files/xquery_use_cases/seq/q5_rb.html +88 -0
  45. data/doc/files/xquery_use_cases/sgml/q10_rb.html +88 -0
  46. data/doc/files/xquery_use_cases/sgml/q1_rb.html +88 -0
  47. data/doc/files/xquery_use_cases/sgml/q2_rb.html +88 -0
  48. data/doc/files/xquery_use_cases/sgml/q3_rb.html +88 -0
  49. data/doc/files/xquery_use_cases/sgml/q4_rb.html +88 -0
  50. data/doc/files/xquery_use_cases/sgml/q5_rb.html +88 -0
  51. data/doc/files/xquery_use_cases/sgml/q6_rb.html +88 -0
  52. data/doc/files/xquery_use_cases/sgml/q7_rb.html +88 -0
  53. data/doc/files/xquery_use_cases/sgml/q8a_rb.html +88 -0
  54. data/doc/files/xquery_use_cases/sgml/q8b_rb.html +88 -0
  55. data/doc/files/xquery_use_cases/sgml/q9_rb.html +88 -0
  56. data/doc/files/xquery_use_cases/solution_sizes_rb.html +88 -0
  57. data/doc/files/xquery_use_cases/string/q1_rb.html +88 -0
  58. data/doc/files/xquery_use_cases/string/q2_rb.html +93 -0
  59. data/doc/files/xquery_use_cases/string/q4_rb.html +88 -0
  60. data/doc/files/xquery_use_cases/string/q5_rb.html +88 -0
  61. data/doc/files/xquery_use_cases/test_driver_rb.html +92 -0
  62. data/doc/files/xquery_use_cases/tree/q1_rb.html +111 -0
  63. data/doc/files/xquery_use_cases/tree/q2_rb.html +88 -0
  64. data/doc/files/xquery_use_cases/tree/q3_rb.html +88 -0
  65. data/doc/files/xquery_use_cases/tree/q4_rb.html +88 -0
  66. data/doc/files/xquery_use_cases/tree/q5_rb.html +88 -0
  67. data/doc/files/xquery_use_cases/tree/q6_rb.html +113 -0
  68. data/doc/files/xquery_use_cases/xmp/q10_rb.html +88 -0
  69. data/doc/files/xquery_use_cases/xmp/q11_rb.html +88 -0
  70. data/doc/files/xquery_use_cases/xmp/q12_rb.html +88 -0
  71. data/doc/files/xquery_use_cases/xmp/q1_rb.html +88 -0
  72. data/doc/files/xquery_use_cases/xmp/q2_rb.html +88 -0
  73. data/doc/files/xquery_use_cases/xmp/q3_rb.html +88 -0
  74. data/doc/files/xquery_use_cases/xmp/q4_rb.html +88 -0
  75. data/doc/files/xquery_use_cases/xmp/q5_rb.html +92 -0
  76. data/doc/files/xquery_use_cases/xmp/q6_rb.html +88 -0
  77. data/doc/files/xquery_use_cases/xmp/q7_rb.html +88 -0
  78. data/doc/files/xquery_use_cases/xmp/q8_rb.html +88 -0
  79. data/doc/files/xquery_use_cases/xmp/q9_rb.html +88 -0
  80. data/doc/fr_class_index.html +56 -0
  81. data/doc/fr_file_index.html +110 -0
  82. data/doc/fr_method_index.html +159 -0
  83. data/doc/index.html +26 -0
  84. data/doc/rdoc-style.css +175 -0
  85. data/lib/magic_xml.rb +1400 -0
  86. data/simple_examples/README +14 -0
  87. data/simple_examples/xml_hello_f.rb +32 -0
  88. data/simple_examples/xml_hello_m.rb +32 -0
  89. data/simple_examples/xml_list_f.rb +36 -0
  90. data/simple_examples/xml_list_m.rb +36 -0
  91. data/test/helper.rb +9 -0
  92. data/test/test_magic_xml.rb +855 -0
  93. data/xquery_use_cases/README +17 -0
  94. data/xquery_use_cases/parts/README +12 -0
  95. data/xquery_use_cases/parts/partlist.xml +13 -0
  96. data/xquery_use_cases/parts/q1.out +16 -0
  97. data/xquery_use_cases/parts/q1.rb +38 -0
  98. data/xquery_use_cases/parts/q1.xquery +18 -0
  99. data/xquery_use_cases/rdb/README +50 -0
  100. data/xquery_use_cases/rdb/bids.xml +81 -0
  101. data/xquery_use_cases/rdb/items.xml +57 -0
  102. data/xquery_use_cases/rdb/q1.out +10 -0
  103. data/xquery_use_cases/rdb/q1.rb +31 -0
  104. data/xquery_use_cases/rdb/q1.xquery +14 -0
  105. data/xquery_use_cases/rdb/q10.out +27 -0
  106. data/xquery_use_cases/rdb/q10.rb +37 -0
  107. data/xquery_use_cases/rdb/q10.xquery +15 -0
  108. data/xquery_use_cases/rdb/q11.out +7 -0
  109. data/xquery_use_cases/rdb/q11.rb +38 -0
  110. data/xquery_use_cases/rdb/q11.xquery +15 -0
  111. data/xquery_use_cases/rdb/q12.out +12 -0
  112. data/xquery_use_cases/rdb/q12.rb +42 -0
  113. data/xquery_use_cases/rdb/q12.xquery +28 -0
  114. data/xquery_use_cases/rdb/q13.out +32 -0
  115. data/xquery_use_cases/rdb/q13.rb +45 -0
  116. data/xquery_use_cases/rdb/q13.xquery +15 -0
  117. data/xquery_use_cases/rdb/q14.out +14 -0
  118. data/xquery_use_cases/rdb/q14.rb +42 -0
  119. data/xquery_use_cases/rdb/q14.xquery +14 -0
  120. data/xquery_use_cases/rdb/q15.out +5 -0
  121. data/xquery_use_cases/rdb/q15.rb +31 -0
  122. data/xquery_use_cases/rdb/q15.xquery +9 -0
  123. data/xquery_use_cases/rdb/q16.out +35 -0
  124. data/xquery_use_cases/rdb/q16.rb +35 -0
  125. data/xquery_use_cases/rdb/q16.xquery +17 -0
  126. data/xquery_use_cases/rdb/q17.out +1 -0
  127. data/xquery_use_cases/rdb/q17.rb +35 -0
  128. data/xquery_use_cases/rdb/q17.xquery +11 -0
  129. data/xquery_use_cases/rdb/q18.out +32 -0
  130. data/xquery_use_cases/rdb/q18.rb +40 -0
  131. data/xquery_use_cases/rdb/q18.xquery +19 -0
  132. data/xquery_use_cases/rdb/q2.out +22 -0
  133. data/xquery_use_cases/rdb/q2.rb +36 -0
  134. data/xquery_use_cases/rdb/q2.xquery +14 -0
  135. data/xquery_use_cases/rdb/q3.out +8 -0
  136. data/xquery_use_cases/rdb/q3.rb +34 -0
  137. data/xquery_use_cases/rdb/q3.xquery +16 -0
  138. data/xquery_use_cases/rdb/q4.out +14 -0
  139. data/xquery_use_cases/rdb/q4.rb +31 -0
  140. data/xquery_use_cases/rdb/q4.xquery +11 -0
  141. data/xquery_use_cases/rdb/q5.out +12 -0
  142. data/xquery_use_cases/rdb/q5.rb +46 -0
  143. data/xquery_use_cases/rdb/q5.xquery +25 -0
  144. data/xquery_use_cases/rdb/q6.out +14 -0
  145. data/xquery_use_cases/rdb/q6.rb +38 -0
  146. data/xquery_use_cases/rdb/q6.xquery +15 -0
  147. data/xquery_use_cases/rdb/q7.out +1 -0
  148. data/xquery_use_cases/rdb/q7.rb +30 -0
  149. data/xquery_use_cases/rdb/q7.xquery +10 -0
  150. data/xquery_use_cases/rdb/q8.out +1 -0
  151. data/xquery_use_cases/rdb/q8.rb +23 -0
  152. data/xquery_use_cases/rdb/q8.xquery +8 -0
  153. data/xquery_use_cases/rdb/q9.out +22 -0
  154. data/xquery_use_cases/rdb/q9.rb +32 -0
  155. data/xquery_use_cases/rdb/q9.xquery +16 -0
  156. data/xquery_use_cases/rdb/users.xml +25 -0
  157. data/xquery_use_cases/seq/README +12 -0
  158. data/xquery_use_cases/seq/q1.out +1 -0
  159. data/xquery_use_cases/seq/q1.rb +25 -0
  160. data/xquery_use_cases/seq/q1.xquery +2 -0
  161. data/xquery_use_cases/seq/q2.out +2 -0
  162. data/xquery_use_cases/seq/q2.rb +25 -0
  163. data/xquery_use_cases/seq/q2.xquery +2 -0
  164. data/xquery_use_cases/seq/q3.out +2 -0
  165. data/xquery_use_cases/seq/q3.rb +26 -0
  166. data/xquery_use_cases/seq/q3.xquery +3 -0
  167. data/xquery_use_cases/seq/q4.out +0 -0
  168. data/xquery_use_cases/seq/q4.rb +27 -0
  169. data/xquery_use_cases/seq/q4.xquery +4 -0
  170. data/xquery_use_cases/seq/q5.out +5 -0
  171. data/xquery_use_cases/seq/q5.rb +29 -0
  172. data/xquery_use_cases/seq/q5.xquery +10 -0
  173. data/xquery_use_cases/seq/report1.xml +40 -0
  174. data/xquery_use_cases/sgml/README +53 -0
  175. data/xquery_use_cases/sgml/q1.out +44 -0
  176. data/xquery_use_cases/sgml/q1.rb +23 -0
  177. data/xquery_use_cases/sgml/q1.xquery +5 -0
  178. data/xquery_use_cases/sgml/q10.out +1 -0
  179. data/xquery_use_cases/sgml/q10.rb +28 -0
  180. data/xquery_use_cases/sgml/q10.xquery +7 -0
  181. data/xquery_use_cases/sgml/q2.out +26 -0
  182. data/xquery_use_cases/sgml/q2.rb +23 -0
  183. data/xquery_use_cases/sgml/q2.xquery +5 -0
  184. data/xquery_use_cases/sgml/q3.out +6 -0
  185. data/xquery_use_cases/sgml/q3.rb +28 -0
  186. data/xquery_use_cases/sgml/q3.xquery +7 -0
  187. data/xquery_use_cases/sgml/q4.out +4 -0
  188. data/xquery_use_cases/sgml/q4.rb +25 -0
  189. data/xquery_use_cases/sgml/q4.xquery +5 -0
  190. data/xquery_use_cases/sgml/q5.out +3 -0
  191. data/xquery_use_cases/sgml/q5.rb +23 -0
  192. data/xquery_use_cases/sgml/q5.xquery +5 -0
  193. data/xquery_use_cases/sgml/q6.out +1 -0
  194. data/xquery_use_cases/sgml/q6.rb +27 -0
  195. data/xquery_use_cases/sgml/q6.xquery +6 -0
  196. data/xquery_use_cases/sgml/q7.out +1 -0
  197. data/xquery_use_cases/sgml/q7.rb +27 -0
  198. data/xquery_use_cases/sgml/q7.xquery +7 -0
  199. data/xquery_use_cases/sgml/q8a.out +34 -0
  200. data/xquery_use_cases/sgml/q8a.rb +27 -0
  201. data/xquery_use_cases/sgml/q8a.xquery +5 -0
  202. data/xquery_use_cases/sgml/q8b.out +26 -0
  203. data/xquery_use_cases/sgml/q8b.rb +32 -0
  204. data/xquery_use_cases/sgml/q8b.xquery +5 -0
  205. data/xquery_use_cases/sgml/q9.out +9 -0
  206. data/xquery_use_cases/sgml/q9.rb +29 -0
  207. data/xquery_use_cases/sgml/q9.xquery +6 -0
  208. data/xquery_use_cases/sgml/sgml.xml +101 -0
  209. data/xquery_use_cases/solution_sizes.rb +48 -0
  210. data/xquery_use_cases/string/README +29 -0
  211. data/xquery_use_cases/string/company-data.xml +20 -0
  212. data/xquery_use_cases/string/q1.out +4 -0
  213. data/xquery_use_cases/string/q1.rb +25 -0
  214. data/xquery_use_cases/string/q1.xquery +1 -0
  215. data/xquery_use_cases/string/q2.out +13 -0
  216. data/xquery_use_cases/string/q2.rb +32 -0
  217. data/xquery_use_cases/string/q2.xquery +23 -0
  218. data/xquery_use_cases/string/q4.out +50 -0
  219. data/xquery_use_cases/string/q4.rb +34 -0
  220. data/xquery_use_cases/string/q4.xquery +14 -0
  221. data/xquery_use_cases/string/q5.out +12 -0
  222. data/xquery_use_cases/string/q5.rb +33 -0
  223. data/xquery_use_cases/string/q5.xquery +8 -0
  224. data/xquery_use_cases/string/string.xml +82 -0
  225. data/xquery_use_cases/test_driver.rb +60 -0
  226. data/xquery_use_cases/tree/README +23 -0
  227. data/xquery_use_cases/tree/book.xml +50 -0
  228. data/xquery_use_cases/tree/q1.out +23 -0
  229. data/xquery_use_cases/tree/q1.rb +31 -0
  230. data/xquery_use_cases/tree/q1.xquery +14 -0
  231. data/xquery_use_cases/tree/q2.out +11 -0
  232. data/xquery_use_cases/tree/q2.rb +27 -0
  233. data/xquery_use_cases/tree/q2.xquery +10 -0
  234. data/xquery_use_cases/tree/q3.out +2 -0
  235. data/xquery_use_cases/tree/q3.rb +26 -0
  236. data/xquery_use_cases/tree/q3.xquery +2 -0
  237. data/xquery_use_cases/tree/q4.out +1 -0
  238. data/xquery_use_cases/tree/q4.rb +23 -0
  239. data/xquery_use_cases/tree/q4.xquery +5 -0
  240. data/xquery_use_cases/tree/q5.out +9 -0
  241. data/xquery_use_cases/tree/q5.rb +30 -0
  242. data/xquery_use_cases/tree/q5.xquery +8 -0
  243. data/xquery_use_cases/tree/q6.out +30 -0
  244. data/xquery_use_cases/tree/q6.rb +35 -0
  245. data/xquery_use_cases/tree/q6.xquery +21 -0
  246. data/xquery_use_cases/xmp/README +41 -0
  247. data/xquery_use_cases/xmp/bib.xml +35 -0
  248. data/xquery_use_cases/xmp/books.xml +15 -0
  249. data/xquery_use_cases/xmp/prices.xml +32 -0
  250. data/xquery_use_cases/xmp/q1.out +8 -0
  251. data/xquery_use_cases/xmp/q1.rb +29 -0
  252. data/xquery_use_cases/xmp/q1.xquery +10 -0
  253. data/xquery_use_cases/xmp/q10.out +11 -0
  254. data/xquery_use_cases/xmp/q10.rb +36 -0
  255. data/xquery_use_cases/xmp/q10.xquery +11 -0
  256. data/xquery_use_cases/xmp/q11.out +35 -0
  257. data/xquery_use_cases/xmp/q11.rb +37 -0
  258. data/xquery_use_cases/xmp/q11.xquery +18 -0
  259. data/xquery_use_cases/xmp/q12.out +6 -0
  260. data/xquery_use_cases/xmp/q12.rb +35 -0
  261. data/xquery_use_cases/xmp/q12.xquery +20 -0
  262. data/xquery_use_cases/xmp/q2.out +37 -0
  263. data/xquery_use_cases/xmp/q2.rb +30 -0
  264. data/xquery_use_cases/xmp/q2.xquery +12 -0
  265. data/xquery_use_cases/xmp/q3.out +34 -0
  266. data/xquery_use_cases/xmp/q3.rb +27 -0
  267. data/xquery_use_cases/xmp/q3.xquery +10 -0
  268. data/xquery_use_cases/xmp/q4.out +31 -0
  269. data/xquery_use_cases/xmp/q4.rb +44 -0
  270. data/xquery_use_cases/xmp/q4.xquery +21 -0
  271. data/xquery_use_cases/xmp/q5.out +17 -0
  272. data/xquery_use_cases/xmp/q5.rb +38 -0
  273. data/xquery_use_cases/xmp/q5.xquery +13 -0
  274. data/xquery_use_cases/xmp/q6.out +28 -0
  275. data/xquery_use_cases/xmp/q6.rb +33 -0
  276. data/xquery_use_cases/xmp/q6.xquery +19 -0
  277. data/xquery_use_cases/xmp/q7.out +8 -0
  278. data/xquery_use_cases/xmp/q7.rb +30 -0
  279. data/xquery_use_cases/xmp/q7.xquery +12 -0
  280. data/xquery_use_cases/xmp/q8.out +7 -0
  281. data/xquery_use_cases/xmp/q8.rb +29 -0
  282. data/xquery_use_cases/xmp/q8.xquery +9 -0
  283. data/xquery_use_cases/xmp/q9.out +4 -0
  284. data/xquery_use_cases/xmp/q9.rb +29 -0
  285. data/xquery_use_cases/xmp/q9.xquery +7 -0
  286. data/xquery_use_cases/xmp/reviews.xml +24 -0
  287. metadata +342 -0
@@ -0,0 +1,17 @@
1
+ W3C XML Query Use Cases contains the following use cases:
2
+ 1. Use Case "XMP": Experiences and Exemplars
3
+ 2. Use Case "TREE": Queries that preserve hierarchy
4
+ 3. Use Case "SEQ" - Queries based on Sequence
5
+ 4. Use Case "R" - Access to Relational Data
6
+ 5. Use Case "SGML": Standard Generalized Markup Language
7
+ 6. Use Case "STRING": String Search
8
+ 7. Use Case "NS" - Queries Using Namespaces
9
+ 8. Use Case "PARTS" - Recursive Parts Explosion
10
+ 9. Use Case "STRONG" - queries that exploit strongly typed data
11
+
12
+ Use cases 7 and 9 are not supported as they would require
13
+ special support for XML namespaces and XML Schema,
14
+ both of which are outside of scope of magic/xml.
15
+
16
+ Of the rest 1, 2, 3, 4, 5, 6, 8 are coded.
17
+
@@ -0,0 +1,12 @@
1
+ Use Case "PARTS" - Recursive Parts Explosion
2
+ from XML Query Use Cases.
3
+
4
+ http://www.w3.org/TR/xquery-use-cases/#parts
5
+
6
+ Q1 - Convert the sample document from "partlist"
7
+ format to "parttree" format (see DTD section
8
+ for definitions). In the result document,
9
+ part containment is represented by containment
10
+ of one <part> element inside another. Each part
11
+ that is not part of any other part should appear
12
+ as a separate top-level element in the output document.
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <partlist>
3
+ <part partid="0" name="car"/>
4
+ <part partid="1" partof="0" name="engine"/>
5
+ <part partid="2" partof="0" name="door"/>
6
+ <part partid="3" partof="1" name="piston"/>
7
+ <part partid="4" partof="2" name="window"/>
8
+ <part partid="5" partof="2" name="lock"/>
9
+ <part partid="10" name="skateboard"/>
10
+ <part partid="11" partof="10" name="board"/>
11
+ <part partid="12" partof="10" name="wheel"/>
12
+ <part partid="20" name="canoe"/>
13
+ </partlist>
@@ -0,0 +1,16 @@
1
+ <parttree>
2
+ <part partid="0" name="car">
3
+ <part partid="1" name="engine">
4
+ <part partid="3" name="piston"/>
5
+ </part>
6
+ <part partid="2" name="door">
7
+ <part partid="4" name="window"/>
8
+ <part partid="5" name="lock"/>
9
+ </part>
10
+ </part>
11
+ <part partid="10" name="skateboard">
12
+ <part partid="11" name="board"/>
13
+ <part partid="12" name="wheel"/>
14
+ </part>
15
+ <part partid="20" name="canoe"/>
16
+ </parttree>
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby -I../.. -rmagic_xml
2
+ #Copyright (c) 2006-2007 Tomasz Wegrzanowski <Tomasz.Wegrzanowski@gmail.com>
3
+ #
4
+ #Permission is hereby granted, free of charge, to any person obtaining a
5
+ #copy of this software and associated documentation files (the "Software"),
6
+ #to deal in the Software without restriction, including without limitation
7
+ #the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
+ #and/or sell copies of the Software, and to permit persons to whom the
9
+ #Software is furnished to do so, subject to the following conditions:
10
+ #
11
+ #The above copyright notice and this permission notice shall be included in
12
+ #all copies or substantial portions of the Software.
13
+ #
14
+ #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ #IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ #FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
+ #THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
+ #OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
+ #ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
+ #DEALINGS IN THE SOFTWARE.
21
+
22
+
23
+ def parts_of(parts, partid)
24
+ res = []
25
+ parts.each{|p|
26
+ if p[:partof] == partid
27
+ a = p.attrs.dup
28
+ a.delete :partof
29
+ res << xml(:part, a, parts_of(parts, p[:partid]))
30
+ end
31
+ }
32
+ res
33
+ end
34
+
35
+ XML.parttree! {
36
+ parts = XML.load('partlist.xml').children(:part)
37
+ add! parts_of(parts, nil)
38
+ }
@@ -0,0 +1,18 @@
1
+ declare function local:one_level($p as element()) as element()
2
+ {
3
+ <part partid="{ $p/@partid }"
4
+ name="{ $p/@name }" >
5
+ {
6
+ for $s in doc("partlist.xml")//part
7
+ where $s/@partof = $p/@partid
8
+ return local:one_level($s)
9
+ }
10
+ </part>
11
+ };
12
+
13
+ <parttree>
14
+ {
15
+ for $p in doc("partlist.xml")//part[empty(@partof)]
16
+ return local:one_level($p)
17
+ }
18
+ </parttree>
@@ -0,0 +1,50 @@
1
+ from XML Query Use Cases.
2
+
3
+ Source: http://www.w3.org/TR/xquery-use-cases/#rdb
4
+
5
+
6
+ Q1 - List the item number and description of all bicycles that
7
+ currently have an auction in progress, ordered by item number.
8
+ Q2 - For all bicycles, list the item number, description,
9
+ and highest bid (if any), ordered by item number.
10
+ Q3 - Find cases where a user with a rating worse
11
+ (alphabetically, greater) than "C" is offering an item
12
+ with a reserve price of more than 1000.
13
+ Q4 - List item numbers and descriptions of items that have no bids.
14
+ For bicycle(s) offered by Tom Jones that have received a bid,
15
+ list the item number, description, highest bid, and name
16
+ of the highest bidder, ordered by item number.
17
+ Q6 - For each item whose highest bid is more than twice its
18
+ reserve price, list the item number, description,
19
+ reserve price, and highest bid.
20
+ Q7 - Find the highest bid ever made for a bicycle or tricycle.
21
+ Q8 - How many items were actioned (auction ended) in March 1999?
22
+ Q9 - List the number of items auctioned each month in 1999 for
23
+ which data is available, ordered by month.
24
+ Q10 - For each item that has received a bid, list the item
25
+ number, the highest bid, and the name of the highest
26
+ bidder, ordered by item number.
27
+ Q11 - List the item number and description of the item(s)
28
+ that received the highest bid ever recorded, and the
29
+ amount of that bid.
30
+ Q12 - List the item number and description of the item(s)
31
+ that received the largest number of bids, and the
32
+ number of bids it (or they) received.
33
+ Q13 - For each user who has placed a bid, give the userid,
34
+ name, number of bids, and average bid, in order by userid.
35
+ Q14 - List item numbers and average bids for items that have
36
+ received three or more bids, in descending order by average bid.
37
+ Q15 - List names of users who have placed multiple bids of
38
+ at least $100 each.
39
+ Q16 - List all registered users in order by userid; for each user,
40
+ include the userid, name, and an indication of whether the
41
+ user is active (has at least one bid on record) or inactive
42
+ (has no bid on record).
43
+ Q17 - List the names of users, if any, who have bid on every item.
44
+ Q18 - List all users in alphabetic order by name. For each user,
45
+ include descriptions of all the items (if any) that were
46
+ bid on by that user, in alphabetic order.
47
+
48
+ Note to Q1: This solution assumes that the current date is 1999-01-31.
49
+
50
+ Note: many XQuery solutions have start_date/end_date vs. start_day/end_day bug
@@ -0,0 +1,81 @@
1
+ <bids>
2
+ <bid_tuple>
3
+ <userid>U02</userid>
4
+ <itemno>1001</itemno>
5
+ <bid>35</bid>
6
+ <bid_date>1999-01-07</bid_date></bid_tuple>
7
+ <bid_tuple>
8
+ <userid>U04</userid>
9
+ <itemno>1001</itemno>
10
+ <bid>40</bid>
11
+ <bid_date>1999-01-08</bid_date></bid_tuple>
12
+ <bid_tuple>
13
+ <userid>U02</userid>
14
+ <itemno>1001</itemno>
15
+ <bid>45</bid>
16
+ <bid_date>1999-01-11</bid_date></bid_tuple>
17
+ <bid_tuple>
18
+ <userid>U04</userid>
19
+ <itemno>1001</itemno>
20
+ <bid>50</bid>
21
+ <bid_date>1999-01-13</bid_date></bid_tuple>
22
+ <bid_tuple>
23
+ <userid>U02</userid>
24
+ <itemno>1001</itemno>
25
+ <bid>55</bid>
26
+ <bid_date>1999-01-15</bid_date></bid_tuple>
27
+ <bid_tuple>
28
+ <userid>U01</userid>
29
+ <itemno>1002</itemno>
30
+ <bid>400</bid>
31
+ <bid_date>1999-02-14</bid_date></bid_tuple>
32
+ <bid_tuple>
33
+ <userid>U02</userid>
34
+ <itemno>1002</itemno>
35
+ <bid>600</bid>
36
+ <bid_date>1999-02-16</bid_date></bid_tuple>
37
+ <bid_tuple>
38
+ <userid>U03</userid>
39
+ <itemno>1002</itemno>
40
+ <bid>800</bid>
41
+ <bid_date>1999-02-17</bid_date></bid_tuple>
42
+ <bid_tuple>
43
+ <userid>U04</userid>
44
+ <itemno>1002</itemno>
45
+ <bid>1000</bid>
46
+ <bid_date>1999-02-25</bid_date></bid_tuple>
47
+ <bid_tuple>
48
+ <userid>U02</userid>
49
+ <itemno>1002</itemno>
50
+ <bid>1200</bid>
51
+ <bid_date>1999-03-02</bid_date></bid_tuple>
52
+ <bid_tuple>
53
+ <userid>U04</userid>
54
+ <itemno>1003</itemno>
55
+ <bid>15</bid>
56
+ <bid_date>1999-01-22</bid_date></bid_tuple>
57
+ <bid_tuple>
58
+ <userid>U05</userid>
59
+ <itemno>1003</itemno>
60
+ <bid>20</bid>
61
+ <bid_date>1999-02-03</bid_date></bid_tuple>
62
+ <bid_tuple>
63
+ <userid>U01</userid>
64
+ <itemno>1004</itemno>
65
+ <bid>40</bid>
66
+ <bid_date>1999-03-05</bid_date></bid_tuple>
67
+ <bid_tuple>
68
+ <userid>U03</userid>
69
+ <itemno>1007</itemno>
70
+ <bid>175</bid>
71
+ <bid_date>1999-01-25</bid_date></bid_tuple>
72
+ <bid_tuple>
73
+ <userid>U05</userid>
74
+ <itemno>1007</itemno>
75
+ <bid>200</bid>
76
+ <bid_date>1999-02-08</bid_date></bid_tuple>
77
+ <bid_tuple>
78
+ <userid>U04</userid>
79
+ <itemno>1007</itemno>
80
+ <bid>225</bid>
81
+ <bid_date>1999-02-12</bid_date></bid_tuple></bids>
@@ -0,0 +1,57 @@
1
+ <items>
2
+ <item_tuple>
3
+ <itemno>1001</itemno>
4
+ <description>Red Bicycle</description>
5
+ <offered_by>U01</offered_by>
6
+ <start_day>1999-01-05</start_day>
7
+ <end_day>1999-01-20</end_day>
8
+ <reserve_price>40</reserve_price></item_tuple>
9
+ <item_tuple>
10
+ <itemno>1002</itemno>
11
+ <description>Motorcycle</description>
12
+ <offered_by>U02</offered_by>
13
+ <start_day>1999-02-11</start_day>
14
+ <end_day>1999-03-15</end_day>
15
+ <reserve_price>500</reserve_price></item_tuple>
16
+ <item_tuple>
17
+ <itemno>1003</itemno>
18
+ <description>Old Bicycle</description>
19
+ <offered_by>U02</offered_by>
20
+ <start_day>1999-01-10</start_day>
21
+ <end_day>1999-02-20</end_day>
22
+ <reserve_price>25</reserve_price></item_tuple>
23
+ <item_tuple>
24
+ <itemno>1004</itemno>
25
+ <description>Tricycle</description>
26
+ <offered_by>U01</offered_by>
27
+ <start_day>1999-02-25</start_day>
28
+ <end_day>1999-03-08</end_day>
29
+ <reserve_price>15</reserve_price></item_tuple>
30
+ <item_tuple>
31
+ <itemno>1005</itemno>
32
+ <description>Tennis Racket</description>
33
+ <offered_by>U03</offered_by>
34
+ <start_day>1999-03-19</start_day>
35
+ <end_day>1999-04-30</end_day>
36
+ <reserve_price>20</reserve_price></item_tuple>
37
+ <item_tuple>
38
+ <itemno>1006</itemno>
39
+ <description>Helicopter</description>
40
+ <offered_by>U03</offered_by>
41
+ <start_day>1999-05-05</start_day>
42
+ <end_day>1999-05-25</end_day>
43
+ <reserve_price>50000</reserve_price></item_tuple>
44
+ <item_tuple>
45
+ <itemno>1007</itemno>
46
+ <description>Racing Bicycle</description>
47
+ <offered_by>U04</offered_by>
48
+ <start_day>1999-01-20</start_day>
49
+ <end_day>1999-02-20</end_day>
50
+ <reserve_price>200</reserve_price></item_tuple>
51
+ <item_tuple>
52
+ <itemno>1008</itemno>
53
+ <description>Broken Bicycle</description>
54
+ <offered_by>U01</offered_by>
55
+ <start_day>1999-02-05</start_day>
56
+ <end_day>1999-03-06</end_day>
57
+ <reserve_price>25</reserve_price></item_tuple></items>
@@ -0,0 +1,10 @@
1
+ <result>
2
+ <item_tuple>
3
+ <itemno>1003</itemno>
4
+ <description>Old Bicycle</description>
5
+ </item_tuple>
6
+ <item_tuple>
7
+ <itemno>1007</itemno>
8
+ <description>Racing Bicycle</description>
9
+ </item_tuple>
10
+ </result>
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/ruby -I../.. -rmagic_xml
2
+ #Copyright (c) 2006-2007 Tomasz Wegrzanowski <Tomasz.Wegrzanowski@gmail.com>
3
+ #
4
+ #Permission is hereby granted, free of charge, to any person obtaining a
5
+ #copy of this software and associated documentation files (the "Software"),
6
+ #to deal in the Software without restriction, including without limitation
7
+ #the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
+ #and/or sell copies of the Software, and to permit persons to whom the
9
+ #Software is furnished to do so, subject to the following conditions:
10
+ #
11
+ #The above copyright notice and this permission notice shall be included in
12
+ #all copies or substantial portions of the Software.
13
+ #
14
+ #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ #IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ #FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
+ #THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
+ #OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
+ #ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
+ #DEALINGS IN THE SOFTWARE.
21
+
22
+
23
+ current_day = "1999-01-31"
24
+
25
+ items = XML.load('items.xml').sort_by{|i| i[:@itemno].to_i}
26
+ XML.result! {
27
+ items.each(XML) {|i|
28
+ next unless current_day.between?(i[:@start_day], i[:@end_day]) and i[:@description] =~ /Bicycle/
29
+ item_tuple!(i.children(:itemno), i.children(:description))
30
+ }
31
+ }
@@ -0,0 +1,14 @@
1
+ <result>
2
+ {
3
+ for $i in doc("items.xml")//item_tuple
4
+ where $i/start_date <= current-date()
5
+ and $i/end_date >= current-date()
6
+ and contains($i/description, "Bicycle")
7
+ order by $i/itemno
8
+ return
9
+ <item_tuple>
10
+ { $i/itemno }
11
+ { $i/description }
12
+ </item_tuple>
13
+ }
14
+ </result>
@@ -0,0 +1,27 @@
1
+ <result>
2
+ <high_bid>
3
+ <itemno>1001</itemno>
4
+ <bid>55</bid>
5
+ <bidder>Mary Doe</bidder>
6
+ </high_bid>
7
+ <high_bid>
8
+ <itemno>1002</itemno>
9
+ <bid>1200</bid>
10
+ <bidder>Mary Doe</bidder>
11
+ </high_bid>
12
+ <high_bid>
13
+ <itemno>1003</itemno>
14
+ <bid>20</bid>
15
+ <bidder>Jack Sprat</bidder>
16
+ </high_bid>
17
+ <high_bid>
18
+ <itemno>1004</itemno>
19
+ <bid>40</bid>
20
+ <bidder>Tom Jones</bidder>
21
+ </high_bid>
22
+ <high_bid>
23
+ <itemno>1007</itemno>
24
+ <bid>225</bid>
25
+ <bidder>Roger Smith</bidder>
26
+ </high_bid>
27
+ </result>
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/ruby -I../.. -rmagic_xml
2
+ #Copyright (c) 2006-2007 Tomasz Wegrzanowski <Tomasz.Wegrzanowski@gmail.com>
3
+ #
4
+ #Permission is hereby granted, free of charge, to any person obtaining a
5
+ #copy of this software and associated documentation files (the "Software"),
6
+ #to deal in the Software without restriction, including without limitation
7
+ #the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
+ #and/or sell copies of the Software, and to permit persons to whom the
9
+ #Software is furnished to do so, subject to the following conditions:
10
+ #
11
+ #The above copyright notice and this permission notice shall be included in
12
+ #all copies or substantial portions of the Software.
13
+ #
14
+ #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ #IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ #FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
+ #THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
+ #OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
+ #ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
+ #DEALINGS IN THE SOFTWARE.
21
+
22
+
23
+ users = XML.load('users.xml')
24
+ bids = XML.load('bids.xml').sort_by{|b| b[:@itemno].to_i}
25
+
26
+ XML.result! {
27
+ bids.each{|highbid|
28
+ next if bids.any?{|b| b[:@itemno] == highbid[:@itemno] and b[:@bid].to_i > highbid[:@bid].to_i}
29
+ users.children({:@userid => highbid[:@userid]}){|user|
30
+ high_bid! {
31
+ add! highbid.child(:itemno)
32
+ add! highbid.child(:bid)
33
+ bidder! user[:@name]
34
+ }
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,15 @@
1
+ <result>
2
+ {
3
+ for $highbid in doc("bids.xml")//bid_tuple,
4
+ $user in doc("users.xml")//user_tuple
5
+ where $user/userid = $highbid/userid
6
+ and $highbid/bid = max(doc("bids.xml")//bid_tuple[itemno=$highbid/itemno]/bid)
7
+ order by $highbid/itemno
8
+ return
9
+ <high_bid>
10
+ { $highbid/itemno }
11
+ { $highbid/bid }
12
+ <bidder>{ $user/name/text() }</bidder>
13
+ </high_bid>
14
+ }
15
+ </result>
@@ -0,0 +1,7 @@
1
+ <result>
2
+ <expensive_item>
3
+ <itemno>1002</itemno>
4
+ <description>Motorcycle</description>
5
+ <high_bid>1200</high_bid>
6
+ </expensive_item>
7
+ </result>
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby -I../.. -rmagic_xml
2
+ #Copyright (c) 2006-2007 Tomasz Wegrzanowski <Tomasz.Wegrzanowski@gmail.com>
3
+ #
4
+ #Permission is hereby granted, free of charge, to any person obtaining a
5
+ #copy of this software and associated documentation files (the "Software"),
6
+ #to deal in the Software without restriction, including without limitation
7
+ #the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
+ #and/or sell copies of the Software, and to permit persons to whom the
9
+ #Software is furnished to do so, subject to the following conditions:
10
+ #
11
+ #The above copyright notice and this permission notice shall be included in
12
+ #all copies or substantial portions of the Software.
13
+ #
14
+ #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ #IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ #FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
+ #THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
+ #OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
+ #ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
+ #DEALINGS IN THE SOFTWARE.
21
+
22
+
23
+ items = XML.load('items.xml')
24
+ bids = XML.load('bids.xml')
25
+
26
+ highbid = bids.children.children(:bid).map{|b| b.text.to_i}.max.to_s
27
+
28
+ XML.result! {
29
+ items.each(XML){|item|
30
+ bids.each({:@itemno => item[:@itemno], :@bid => highbid}) {|b|
31
+ expensive_item! {
32
+ add! item.child(:itemno)
33
+ add! item.child(:description)
34
+ high_bid! highbid
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,15 @@
1
+ let $highbid := max(doc("bids.xml")//bid_tuple/bid)
2
+ return
3
+ <result>
4
+ {
5
+ for $item in doc("items.xml")//item_tuple,
6
+ $b in doc("bids.xml")//bid_tuple[itemno = $item/itemno]
7
+ where $b/bid = $highbid
8
+ return
9
+ <expensive_item>
10
+ { $item/itemno }
11
+ { $item/description }
12
+ <high_bid>{ $highbid }</high_bid>
13
+ </expensive_item>
14
+ }
15
+ </result>
@@ -0,0 +1,12 @@
1
+ <result>
2
+ <popular_item>
3
+ <itemno>1001</itemno>
4
+ <description>Red Bicycle</description>
5
+ <bid_count>5</bid_count>
6
+ </popular_item>
7
+ <popular_item>
8
+ <itemno>1002</itemno>
9
+ <description>Motorcycle</description>
10
+ <bid_count>5</bid_count>
11
+ </popular_item>
12
+ </result>
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby -I../.. -rmagic_xml
2
+ #Copyright (c) 2006-2007 Tomasz Wegrzanowski <Tomasz.Wegrzanowski@gmail.com>
3
+ #
4
+ #Permission is hereby granted, free of charge, to any person obtaining a
5
+ #copy of this software and associated documentation files (the "Software"),
6
+ #to deal in the Software without restriction, including without limitation
7
+ #the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
+ #and/or sell copies of the Software, and to permit persons to whom the
9
+ #Software is furnished to do so, subject to the following conditions:
10
+ #
11
+ #The above copyright notice and this permission notice shall be included in
12
+ #all copies or substantial portions of the Software.
13
+ #
14
+ #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ #IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ #FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
+ #THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
+ #OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
+ #ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
+ #DEALINGS IN THE SOFTWARE.
21
+
22
+
23
+ items = XML.load('items.xml')
24
+ bids = XML.load('bids.xml').children(:bid_tuple)
25
+
26
+ # XML should work as a Hash key !
27
+ XML.result! {
28
+ bids_per_item = Hash.new([])
29
+ bids.each{|bid|
30
+ bids_per_item[bid[:@itemno]] += [bid]
31
+ }
32
+ max_bid_count = bids_per_item.map{|k,v| v.size}.max
33
+
34
+ items.each(XML){|item|
35
+ next unless bids_per_item[item[:@itemno]].size == max_bid_count
36
+ popular_item! {
37
+ add! item.child(:itemno)
38
+ add! item.child(:description)
39
+ bid_count! max_bid_count
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,28 @@
1
+ declare function local:bid_summary()
2
+ as element()*
3
+ {
4
+ for $i in distinct-values(doc("bids.xml")//itemno)
5
+ let $b := doc("bids.xml")//bid_tuple[itemno = $i]
6
+ return
7
+ <bid_count>
8
+ <itemno>{ $i }</itemno>
9
+ <nbids>{ count($b) }</nbids>
10
+ </bid_count>
11
+ };
12
+
13
+ <result>
14
+ {
15
+ let $bid_counts := local:bid_summary(),
16
+ $maxbids := max($bid_counts/nbids),
17
+ $maxitemnos := $bid_counts[nbids = $maxbids]
18
+ for $item in doc("items.xml")//item_tuple,
19
+ $bc in $bid_counts
20
+ where $bc/nbids = $maxbids and $item/itemno = $bc/itemno
21
+ return
22
+ <popular_item>
23
+ { $item/itemno }
24
+ { $item/description }
25
+ <bid_count>{ $bc/nbids/text() }</bid_count>
26
+ </popular_item>
27
+ }
28
+ </result>
@@ -0,0 +1,32 @@
1
+ <result>
2
+ <bidder>
3
+ <userid>U01</userid>
4
+ <name>Tom Jones</name>
5
+ <bidcount>2</bidcount>
6
+ <avgbid>220</avgbid>
7
+ </bidder>
8
+ <bidder>
9
+ <userid>U02</userid>
10
+ <name>Mary Doe</name>
11
+ <bidcount>5</bidcount>
12
+ <avgbid>387</avgbid>
13
+ </bidder>
14
+ <bidder>
15
+ <userid>U03</userid>
16
+ <name>Dee Linquent</name>
17
+ <bidcount>2</bidcount>
18
+ <avgbid>487.5</avgbid>
19
+ </bidder>
20
+ <bidder>
21
+ <userid>U04</userid>
22
+ <name>Roger Smith</name>
23
+ <bidcount>5</bidcount>
24
+ <avgbid>266</avgbid>
25
+ </bidder>
26
+ <bidder>
27
+ <userid>U05</userid>
28
+ <name>Jack Sprat</name>
29
+ <bidcount>2</bidcount>
30
+ <avgbid>110</avgbid>
31
+ </bidder>
32
+ </result>