wait.xts 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: ps
  5. (C) Copyright IBM Corp. 2005, 2011
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <!--
  9. Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  10. Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  11. -->
  12. <xts:morphlet xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/portal.xml, messages/portalRL.xml">
  13. <!--
  14. ===============================================================================================
  15. request -
  16. ===============================================================================================
  17. -->
  18. <xts:block id="request" mode="interpret" processor="XSLT" type="exec">
  19. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  20. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  21. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  22. xmlns:rs="http://developer.cognos.com/schemas/reportService/1"
  23. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  24. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  25. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  26. xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  27. xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope"
  28. SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  29. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt">
  30. <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
  31. <xsl:key name="env-param" match="/root/env/param" use="@name"/>
  32. <xsl:template match="/">
  33. <xts:sequence>
  34. <xts:append>
  35. <response>
  36. <send:request provider="warp" option="xml-multipart" outputHeader="true" responseEnvelope="true" affinity=".absolute">
  37. <xsl:element name="{key('env-param', 'method')}" namespace="http://developer.cognos.com/schemas/reportService/1">
  38. <conversation xsi:type="bus:asynchRequest">
  39. <xts:transform name="XMLDecode">
  40. <xsl:value-of select="xtsext:web64decode(string(xtsext:cafaction('sign_unwrap', string(key('env-param','web64conversation')))), true())"/>
  41. </xts:transform>
  42. </conversation>
  43. <parameterValues xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="bus:parameterValue[]"/>
  44. <options xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="bus:option[]"/>
  45. </xsl:element>
  46. </send:request>
  47. </response>
  48. </xts:append>
  49. <xts:append>
  50. <encodedTracking>
  51. <xts:function name="web64encode">
  52. <xts:param name="source">
  53. <xts:transform name="XMLEncode">
  54. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Header']/*[local-name()='biBusHeader']/*[local-name() = 'tracking']"/>
  55. </xts:transform>
  56. </xts:param>
  57. <xts:param name="compress">true</xts:param>
  58. </xts:function>
  59. </encodedTracking>
  60. <encodedUIConversation>
  61. <xts:function name="web64encode">
  62. <xts:param name="source">
  63. <xts:transform name="XMLEncode">
  64. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Body']/*/*[local-name()='result']/*[local-name()='primaryRequest']"/>
  65. </xts:transform>
  66. </xts:param>
  67. <xts:param name="compress">true</xts:param>
  68. </xts:function>
  69. </encodedUIConversation>
  70. <encodedConversation>
  71. <xts:function name="web64encode">
  72. <xts:param name="source">
  73. <xts:transform name="XMLEncode">
  74. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Body']/*/*[local-name()='result']/*[local-name()='primaryRequest']/*"/>
  75. </xts:transform>
  76. </xts:param>
  77. <xts:param name="compress">true</xts:param>
  78. </xts:function>
  79. </encodedConversation>
  80. <conversationStatus>
  81. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Body']/*/*[local-name()='result']/*[local-name()='details']/*[local-name()='item']/*[local-name()='status']"/>
  82. </conversationStatus>
  83. <resultStatus>
  84. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Body']/*/*[local-name()='result']/*[local-name()='status']"/>
  85. </resultStatus>
  86. <parametersReady>
  87. <xsl:choose>
  88. <xsl:when test="/root/command/*/getParametersRequest">
  89. <xts:queryNode select="/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item' and contains(@*[local-name()='type'], 'asynchDetailParameters')]"/>
  90. </xsl:when>
  91. <xsl:otherwise>
  92. <xts:queryNode select="/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item' and contains(@*[local-name()='type'], 'asynchDetailParameterValues')]"/>
  93. </xsl:otherwise>
  94. </xsl:choose>
  95. </parametersReady>
  96. </xts:append>
  97. </xts:sequence>
  98. </xsl:template>
  99. </xsl:stylesheet>
  100. </xts:block>
  101. <!--
  102. ===============================================================================================
  103. getOutput -
  104. ===============================================================================================
  105. -->
  106. <xts:block id="getOutput" mode="interpret" processor="XSLT" type="exec"
  107. dependency="request"
  108. condition=".[/root/conversationStatus='responseReady']"
  109. mandatory="false">
  110. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  111. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  112. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  113. xmlns:rs="http://developer.cognos.com/schemas/reportService/1"
  114. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  115. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  116. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  117. xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  118. xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope"
  119. SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  120. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt">
  121. <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
  122. <xsl:key name="env-param" match="/root/env/param" use="@name"/>
  123. <xsl:template match="/">
  124. <xts:sequence>
  125. <xts:replace select="/root/response">
  126. <response>
  127. <send:request provider="warp" option="xml-multipart" outputHeader="true" responseEnvelope="true" affinity=".absolute">
  128. <rs:getOutput>
  129. <conversation xsi:type="bus:asynchRequest">
  130. <xts:transform name="XMLDecode">
  131. <xsl:value-of select="xtsext:web64decode(string(xtsext:cafaction('sign_unwrap', string(key('env-param','web64conversation')))), true())"/>
  132. </xts:transform>
  133. </conversation>
  134. <parameterValues xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="bus:parameterValue[]"/>
  135. <options xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="bus:option[]"/>
  136. </rs:getOutput>
  137. </send:request>
  138. </response>
  139. </xts:replace>
  140. <xts:delete select="/root/*[contains(' encodedTracking encodedConversation encodedUIConversation conversationStatus resultStatus ', concat(' ', local-name(),' '))]"/>
  141. <xts:append>
  142. <encodedTracking>
  143. <xts:function name="web64encode">
  144. <xts:param name="source">
  145. <xts:transform name="XMLEncode">
  146. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Header']/*[local-name()='biBusHeader']/*[local-name() = 'tracking']"/>
  147. </xts:transform>
  148. </xts:param>
  149. <xts:param name="compress">true</xts:param>
  150. </xts:function>
  151. </encodedTracking>
  152. <encodedConversation>
  153. <xts:function name="web64encode">
  154. <xts:param name="source">
  155. <xts:transform name="XMLEncode">
  156. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='getOutputResponse']/*[local-name()='result']/*[local-name()='primaryRequest']/*"/>
  157. </xts:transform>
  158. </xts:param>
  159. <xts:param name="compress">true</xts:param>
  160. </xts:function>
  161. </encodedConversation>
  162. <encodedUIConversation>
  163. <xts:function name="web64encode">
  164. <xts:param name="source">
  165. <xts:transform name="XMLEncode">
  166. <xts:queryNode select="/root/response/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='getOutputResponse']/*[local-name()='result']/*[local-name()='primaryRequest']"/>
  167. </xts:transform>
  168. </xts:param>
  169. <xts:param name="compress">true</xts:param>
  170. </xts:function>
  171. </encodedUIConversation>
  172. <conversationStatus>
  173. <xts:queryNode select="/root/response/*/*/*[local-name()='getOutputResponse']/*[local-name()='result']/*[local-name()='details']/*[local-name()='item']/*[local-name()='status']"/>
  174. </conversationStatus>
  175. <resultStatus>
  176. <xts:queryNode select="/root/response/*/*/*[local-name()='getOutputResponse']/*[local-name()='result']/*[local-name()='status']"/>
  177. </resultStatus>
  178. <parametersReady>
  179. <xsl:choose>
  180. <xsl:when test="/root/command/*/getParametersRequest">
  181. <xts:queryNode select="/root/response/*/*/*[local-name()='getOutputResponse']/*[local-name()='result']/*[local-name()='details']/*[local-name()='item' and contains(@*[local-name()='type'], 'asynchDetailParameters')]"/>
  182. </xsl:when>
  183. <xsl:otherwise>
  184. <xts:queryNode select="/root/response/*/*/*[local-name()= 'getOutputResponse']/*[local-name()='result']/*[local-name()='details']/*[local-name()='item' and contains(@*[local-name()='type'], 'asynchDetailParameterValues')]"/>
  185. </xsl:otherwise>
  186. </xsl:choose>
  187. </parametersReady>
  188. </xts:append>
  189. </xts:sequence>
  190. </xsl:template>
  191. </xsl:stylesheet>
  192. </xts:block>
  193. <!--
  194. ===============================================================================================
  195. render-no-prompts -
  196. ===============================================================================================
  197. IMPORTANT NOTE: This block is not executed for now: this means that the noPromptsMessage page is never shown after
  198. the wait page.
  199. This is done in order to replicate the behaviour in bluesea where the previous condition statement always returns false
  200. due to an issue with dom4j 1.0.
  201. A defect is/will be logged in order to support the display of the promptsMessage page
  202. -->
  203. <xts:block id="render-no-prompts" type="exec" mode="output" processor="XSLT" dependency="getOutput release-conversation"
  204. mimeType="text/html" contentId="noPromptsMessage" partId="1"
  205. path="/portal/iPrompting/page-parts/noPrompts.xslt"
  206. condition=".[false]"
  207. mandatory="false">
  208. <xts:logicsheet path="logicsheets/portal.xsl"/>
  209. <xts:logicsheet path="logicsheets/presentation/dialog/framework.xsl"/>
  210. <xts:logicsheet path="logicsheets/presentation/dialog/presentation.xsl"/>
  211. <xts:logicsheet path="logicsheets/presentation/layout.xsl"/>
  212. <xts:logicsheet path="logicsheets/presentation/touch_up.xslt"/>
  213. </xts:block>
  214. <!--
  215. ===============================================================================================
  216. wait - This block generates the contents of the wait page
  217. ===============================================================================================
  218. -->
  219. <xts:block id="waitPage" type="exec" mode="output" processor="XSLT" dependency="getOutput release-conversation"
  220. mimeType="text/html" contentId="waitPage" partId="1"
  221. path="/portal/iPrompting/page-parts/wait.xslt"
  222. condition=".[contains(' working stillWorking ', concat(' ', /root/resultStatus, ' '))]"
  223. mandatory="false">
  224. <xts:logicsheet path="logicsheets/portal.xsl"/>
  225. <xts:logicsheet path="logicsheets/presentation/dialog/presentation.xsl"/>
  226. <xts:logicsheet path="logicsheets/presentation/touch_up.xslt"/>
  227. </xts:block>
  228. <!--
  229. ===============================================================================================
  230. head - This block generates the HTML <head> tag.
  231. ===============================================================================================
  232. -->
  233. <xts:block id="head" type="exec" mode="output" processor="XSLT" dependency="getOutput release-conversation"
  234. mimeType="text/html" contentId="head" partId="1"
  235. path="/portal/iPrompting/page-parts/head.xslt"
  236. condition=".[/root/conversationStatus='prompting' or (/root/parametersReady != '' and ((/root/resultStatus='conversationComplete' or /root/resultStatus='complete') and not(/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item']/*[local-name()='status']='prompting') )and /root/command/*/*[local-name()='callFinish']='true') or contains(' working stillWorking ', concat(' ', /root/resultStatus, ' '))]"
  237. mandatory="false">
  238. <xts:logicsheet path="logicsheets/portal.xsl"/>
  239. <xts:logicsheet path="portal/iPrompting/logicsheets/common.xslt"/>
  240. <xts:logicsheet path="logicsheets/presentation/main/presentation.xsl"/>
  241. </xts:block>
  242. <!--
  243. ===============================================================================================
  244. bottomRow - This block generates the bottom row of the main table.
  245. ===============================================================================================
  246. -->
  247. <xts:block id="bottomRow" type="exec" mode="output" processor="XSLT" dependency="getOutput render-parameters"
  248. mimeType="text/html" contentId="bottomRow" partId="1"
  249. path="/portal/iPrompting/page-parts/tail.xslt"
  250. condition=".[/root/conversationStatus='prompting' or (((/root/resultStatus='conversationComplete' or /root/resultStatus='complete') and not(/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item']/*[local-name()='status']='prompting')) and /root/parametersReady != '' and /root/command/*/*[local-name()='callFinish']='true') or contains(' working stillWorking ', concat(' ', /root/resultStatus, ' '))]"
  251. mandatory="false">
  252. <xts:logicsheet path="logicsheets/portal.xsl"/>
  253. </xts:block>
  254. <!--
  255. ===============================================================================================
  256. render-page - Main page rendering block. Combines the "content" blocks generated in the blocks
  257. above with the report itself which is returned in a multi-part message from
  258. report server.
  259. ===============================================================================================
  260. -->
  261. <xts:block id="render-page" type="exec" mode="interpret" processor="XSLT"
  262. dependency="head bottomRow waitPage render-no-prompts render-parameters"
  263. path="/portal/iPrompting/page-parts/page.xslt"
  264. condition=".[/root/conversationStatus='prompting' or (((/root/resultStatus='conversationComplete' or /root/resultStatus='complete') and not(/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item']/*[local-name()='status']='prompting')) and /root/parametersReady != '' and /root/command/*/*[local-name()='callFinish']='true') or contains(' working stillWorking ', concat(' ', /root/resultStatus, ' '))]"
  265. mandatory="false">
  266. <xts:logicsheet path="logicsheets/portal.xsl"/>
  267. <xts:logicsheet path="logicsheets/presentation/main/framework.xsl"/>
  268. <xts:logicsheet path="logicsheets/presentation/main/presentation.xsl"/>
  269. </xts:block>
  270. <!--
  271. ===============================================================================================
  272. release conversation -
  273. ===============================================================================================
  274. -->
  275. <xts:block id="release-conversation" dependency="getOutput" type="exec" mode="interpret" processor="XSLT" condition=".[(string(/root/resultStatus)='conversationComplete' or string(/root/resultStatus)='complete') and not(/root/response/*/*/*/*/*[local-name() = 'details']/*/*[local-name()='status'] = 'prompting') and /root/env/param[@name='web64conversation']]" mandatory="false">
  276. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  277. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  278. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  279. xmlns:rs="http://developer.cognos.com/schemas/reportService/1"
  280. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  281. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  282. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  283. xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  284. xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope"
  285. SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  286. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt">
  287. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  288. <xsl:key name="env-param" match="/root/env/param" use="@name"/>
  289. <xsl:template match="/">
  290. <xts:sequence>
  291. <xts:append>
  292. <releaseConversation>
  293. <send:request provider="warp" option="xml-multipart" outputHeader="true" responseEnvelope="true" affinity=".absolute">
  294. <xsl:element name="release" namespace="http://developer.cognos.com/schemas/reportService/1">
  295. <conversation xsi:type="bus:asynchRequest">
  296. <xts:transform name="XMLDecode">
  297. <xsl:value-of select="xtsext:web64decode(string(xtsext:cafaction('sign_unwrap', string(key('env-param','web64conversation')))), true())"/>
  298. </xts:transform>
  299. </conversation>
  300. </xsl:element>
  301. </send:request>
  302. </releaseConversation>
  303. </xts:append>
  304. </xts:sequence>
  305. </xsl:template>
  306. </xsl:stylesheet>
  307. </xts:block>
  308. <!--
  309. ===============================================================================================
  310. render-parameters -
  311. ===============================================================================================
  312. -->
  313. <xts:block id="render-parameters" dependency="getOutput release-conversation" type="exec" mode="interpret" processor="XSLT" condition=".[(/root/resultStatus='conversationComplete' or /root/resultStatus='complete') and /root/parametersReady/*]" mandatory="false">
  314. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:prompt="http://developer.cognos.com/schemas/xts/portal/iPrompting/1/" xmlns:xos="http://developer.cognos.com/schemas/xts/output/" exclude-result-prefixes="xsl bus">
  315. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  316. <!-- Ouptut a response containing the parameter values -->
  317. <xsl:template match="/root">
  318. <xsl:variable name="forwardResponse">
  319. <prompt:forwardResponse>
  320. <xsl:choose>
  321. <xsl:when test="/root/command/*/getParametersRequest">
  322. <xsl:copy-of select="/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item' and contains(@xsi:type, 'asynchDetailParameters')]/*"/>
  323. </xsl:when>
  324. <xsl:when test="/root/env/param[@name='execMethod'] and /root/env/param[@name='execMethod']='metadata' and /root/command/*/metaDataRequest">
  325. <xsl:if test="/root/env/param[@name='startScopeAt'] or /root/env/param[@name='startBMItemAt'] or /root/env/param[starts-with(@name,'startDataItemAt_')]">
  326. <metadataResponse>
  327. <xsl:if test="string(/root/response/*/*/*[contains(local-name(),'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item']/*[local-name()='metadata']) != ''">
  328. <xts:transform name="XMLDecode">
  329. <xsl:value-of select="/root/response/*/*/*[contains(local-name(),'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item']/*[local-name()='metadata']"/>
  330. </xts:transform>
  331. </xsl:if>
  332. </metadataResponse>
  333. </xsl:if>
  334. </xsl:when>
  335. <xsl:otherwise>
  336. <parameters>
  337. <xsl:if test="/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item' and contains(@xsi:type, 'asynchDetailParameterValues')]">
  338. <xts:transform src="transforms/portal/parameters/post-WARP-process.xslt" processor="XSLT">
  339. <xsl:copy-of select="/root/response/*/*/*[contains(local-name(), 'Response')]/*[local-name()='result']/*[local-name()='details']/*[local-name()='item' and contains(@xsi:type, 'asynchDetailParameterValues')]"/>
  340. </xts:transform>
  341. </xsl:if>
  342. </parameters>
  343. </xsl:otherwise>
  344. </xsl:choose>
  345. </prompt:forwardResponse>
  346. </xsl:variable>
  347. <xsl:choose>
  348. <!-- pack the response and unpack it in Finish -->
  349. <xsl:when test="/root/command/*/*[local-name()='callFinish']='true'">
  350. <xts:sequence>
  351. <xts:append>
  352. <encodedParameters>
  353. <xts:function name="web64encode">
  354. <xts:param name="source">
  355. <xts:transform name="XMLEncode">
  356. <xsl:copy-of select="$forwardResponse"/>
  357. </xts:transform>
  358. </xts:param>
  359. <xts:param name="compress">true</xts:param>
  360. </xts:function>
  361. </encodedParameters>
  362. </xts:append>
  363. </xts:sequence>
  364. </xsl:when>
  365. <xsl:otherwise>
  366. <xts:sequence>
  367. <xts:append select="/root/output">
  368. <xos:part>
  369. <xos:entityHeader>
  370. <xos:param name="Content-Type">text/xml; charset=utf-8</xos:param>
  371. </xos:entityHeader>
  372. <xos:entityBody>
  373. <xsl:copy-of select="$forwardResponse"/>
  374. </xos:entityBody>
  375. </xos:part>
  376. </xts:append>
  377. </xts:sequence>
  378. </xsl:otherwise>
  379. </xsl:choose>
  380. </xsl:template>
  381. </xsl:stylesheet>
  382. </xts:block>
  383. </xts:morphlet>