Add streaming tests for intersect operator
authorMichael Kay <mike@saxonica.com>
Fri, 27 Mar 2015 12:09:07 +0000
changeset 866 6a6b8a0225ac
parent 865 a32e5dab7bdb
child 867 7956813ae249
Add streaming tests for intersect operator
catalog.xml
tests/strm/sx-IntersectExpr/_sx-IntersectExpr-test-set.xml
tests/strm/sx-IntersectExpr/sx-intersect-A.xsl
tests/strm/sx-IntersectExpr/sx-intersect-B.xsl
--- a/catalog.xml	Fri Mar 27 11:18:06 2015 +0000
+++ b/catalog.xml	Fri Mar 27 12:09:07 2015 +0000
@@ -243,6 +243,7 @@
       <test-set name="sx-GeneralComp-lt" file="tests/strm/sx-GeneralComp-lt/_sx-GeneralComp-lt-test-set.xml"/>
       <test-set name="sx-GeneralComp-ne" file="tests/strm/sx-GeneralComp-ne/_sx-GeneralComp-ne-test-set.xml"/>
       <test-set name="sx-IfExpr" file="tests/strm/sx-IfExpr/_sx-IfExpr-test-set.xml"/>
+      <test-set name="sx-IntersectExpr" file="tests/strm/sx-IntersectExpr/_sx-IntersectExpr-test-set.xml"/>
       <test-set name="sx-InstanceofExpr" file="tests/strm/sx-InstanceofExpr/_sx-InstanceofExpr-test-set.xml"/>
       <test-set name="sx-MapExpr" file="tests/strm/sx-MapExpr/_sx-MapExpr-test-set.xml"/>
       <test-set name="sx-TreatExpr" file="tests/strm/sx-TreatExpr/_sx-TreatExpr-test-set.xml"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/strm/sx-IntersectExpr/_sx-IntersectExpr-test-set.xml	Fri Mar 27 12:09:07 2015 +0000
@@ -0,0 +1,609 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<test-set xmlns="http://www.w3.org/2012/10/xslt-test-catalog" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="sx-intersectExpr">
+   <description>intersect expression function with streaming</description>
+   
+   <environment name="sx-intersect-A">
+     <stylesheet file="sx-intersect-A.xsl"/>
+   </environment>
+   
+   <environment name="sx-intersect-B">
+     <stylesheet file="sx-intersect-B.xsl"/>
+   </environment>
+   
+   <dependencies>
+      <spec value="XSLT30+"/>
+      <feature value="streaming"/>
+   </dependencies>
+   
+   <test-case name="sx-intersect-002">
+      <description>Streaming intersect expression - grounded operand</description>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-002"/>
+      </test>
+      <result>
+        <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-010">
+      <description>Streaming intersect expression - striding operand, inspection usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding leading-lone-slash PathExpr fn:count</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-010"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-011">
+      <description>Streaming intersect expression - striding operand, absorption usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding leading-lone-slash PathExpr fn:sum</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-011"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-012">
+      <description>Streaming intersect expression - striding operand, transmission usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding motionless-predicate fn:position PathExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-012"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-013">
+      <description>Streaming intersect expression - striding operand, focus-setting usage</description>
+      <keywords>ParenthesizedExpr mixed-posture AdditiveExpr ContextItemExpr striding leading-lone-slash PathExpr SimpleMapExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-013"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-014">
+      <description>Streaming intersect expression - striding operand, focus-controlled usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash AxisStep striding PathExpr positional-predicate SimpleMapExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-014"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-015">
+      <description>Streaming intersect expression - striding operand, focus-setting usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding PathExpr AdditiveExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-015"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-016">
+      <description>Streaming intersect expression - striding operand, focus-controlled usage</description>
+      <keywords>ParenthesizedExpr mixed-posture xsl:for-each striding AxisStep PathExpr positional-predicate leading-lone-slash</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-016"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-017">
+      <description>Streaming intersect expression - striding operand, focus-setting usage for inspection action</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding PathExpr positional-predicate SimpleMapExpr fn:name</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-017"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-018">
+      <description>Streaming intersect expression - striding operand, apply-templates usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding xsl:apply-templates PathExpr positional-predicate</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-018"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-020">
+      <description>Streaming intersect expression - crawling operand, inspection usage</description>
+      <keywords>ParenthesizedExpr mixed-posture xsl:copy-of fn:count crawling PathExpr leading-double-slash</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-020"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-021">
+      <description>Streaming intersect expression - crawling operand, absorption usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash text-nodes childless-nodes striding-then-crawling fn:count PathExpr positional-predicate</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-021"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-022">
+      <description>Streaming intersect expression - crawling operand, transmission usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding-then-crawling leading-lone-slash fn:position PathExpr positional-predicate</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-022"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-023">
+      <description>Streaming intersect expression - crawling operand, focus-setting usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-double-slash childless-nodes text-nodes AdditiveExpr PathExpr crawling SimpleMapExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-023"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-030">
+      <description>Streaming intersect expression - climbing operand, inspection usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding-then-climbing fn:name leading-lone-slash PathExpr positional-predicate SimpleMapExpr ancestor-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-030"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>      
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-031">
+      <description>Streaming intersect expression - climbing operand, inspection usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding-then-climbing fn:name PathExpr SimpleMapExpr ancestor-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-031"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>   
+   </test-case> 
+   
+   <test-case name="sx-intersect-032">
+      <description>Streaming intersect expression - climbing operand, absorption usage</description>
+      <keywords>ParenthesizedExpr mixed-posture climbing-then-climbing attribute-axis PathExpr positional-predicate ancestor-axis leading-lone-slash</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-032"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-033">
+      <description>Streaming intersect expression - climbing operand, absorption usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture climbing-then-climbing leading-lone-slash PathExpr ancestor-or-self-axis climbing</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-033"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-034">
+      <description>Streaming intersect expression - climbing operand, absorption usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture climbing-then-climbing leading-lone-slash PathExpr ancestor-or-self-axis climbing</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-034"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-035">
+      <description>Streaming intersect expression - climbing operand, absorption usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture crawling-then-climbing leading-double-slash attribute-axis PathExpr ancestor-or-self-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-035"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-036">
+      <description>Streaming intersect expression - two potentially consuming operands (bug 27668)</description>
+      <keywords>ParenthesizedExpr mixed-posture crawling-then-climbing leading-double-slash attribute-axis PathExpr ancestor-or-self-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-A"/>
+      <test>
+         <initial-template name="r-036"/>
+      </test>
+      <result>
+         <all-of>
+           <assert>/out/v[1] = ''</assert>
+           <assert>/out/v[2] = ''</assert>
+           <assert>/out/v[3] = ''</assert>
+         </all-of>
+      </result>
+   </test-case>  
+
+
+   
+   <test-case name="sx-intersect-102">
+      <description>intersect expression (streaming arg 2) - grounded operand</description>
+      <keywords>leading-lone-slash striding-then-grounded fn:copy-of PathExpr ParenthesizedExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-002"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-110">
+      <description>intersect expression (streaming arg 2) - striding operand, inspection usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding leading-lone-slash PathExpr fn:count</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-010"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-111">
+      <description>intersect expression (streaming arg 2) - striding operand, absorption usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding leading-lone-slash PathExpr fn:sum</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-011"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-112">
+      <description>intersect expression (streaming arg 2) - striding operand, transmission usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding motionless-predicate fn:position PathExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-012"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-113">
+      <description>intersect expression (streaming arg 2) - striding operand, focus-setting usage</description>
+      <keywords>ParenthesizedExpr mixed-posture AdditiveExpr ContextItemExpr striding leading-lone-slash PathExpr SimpleMapExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-013"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-114">
+      <description>intersect expression (streaming arg 2) - striding operand, focus-controlled usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash AxisStep striding PathExpr positional-predicate SimpleMapExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-014"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-115">
+      <description>intersect expression (streaming arg 2) - striding operand, focus-setting usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding PathExpr AdditiveExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-015"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-116">
+      <description>intersect expression (streaming arg 2) - striding operand, focus-controlled usage</description>
+      <keywords>ParenthesizedExpr mixed-posture xsl:for-each striding AxisStep PathExpr positional-predicate leading-lone-slash</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-016"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-117">
+      <description>intersect expression (streaming arg 2) - striding operand, focus-setting usage for inspection action</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding PathExpr positional-predicate SimpleMapExpr fn:name</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-017"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-118">
+      <description>intersect expression (streaming arg 2) - striding operand, apply-templates usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding xsl:apply-templates PathExpr positional-predicate</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-018"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-120">
+      <description>intersect expression (streaming arg 2) - crawling operand, inspection usage</description>
+      <keywords>ParenthesizedExpr mixed-posture xsl:copy-of fn:count crawling PathExpr leading-double-slash</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-020"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-121">
+      <description>intersect expression (streaming arg 2) - crawling operand, absorption usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash text-nodes childless-nodes striding-then-crawling fn:count PathExpr positional-predicate</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-021"/>
+      </test>
+      <result>
+         <assert>/out = "0"</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-122">
+      <description>intersect expression (streaming arg 2) - crawling operand, transmission usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding-then-crawling leading-lone-slash fn:position PathExpr positional-predicate</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-022"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-123">
+      <description>intersect expression (streaming arg 2) - crawling operand, focus-setting usage</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-double-slash childless-nodes text-nodes AdditiveExpr PathExpr crawling SimpleMapExpr</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-023"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-130">
+      <description>intersect expression (streaming arg 2) - climbing operand, inspection usage</description>
+      <keywords>ParenthesizedExpr mixed-posture striding-then-climbing fn:name leading-lone-slash PathExpr positional-predicate SimpleMapExpr ancestor-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-030"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>  
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-131">
+      <description>intersect expression (streaming arg 2) - climbing operand, inspection usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture leading-lone-slash striding-then-climbing fn:name PathExpr SimpleMapExpr ancestor-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-031"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-132">
+      <description>intersect expression (streaming arg 2) - climbing operand, absorption usage</description>
+      <keywords>ParenthesizedExpr mixed-posture climbing-then-climbing attribute-axis PathExpr positional-predicate ancestor-axis leading-lone-slash</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-032"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>   
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-133">
+      <description>intersect expression (streaming arg 2) - climbing operand, absorption usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture climbing-then-climbing leading-lone-slash PathExpr ancestor-or-self-axis climbing</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-033"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-134">
+      <description>intersect expression (streaming arg 2) - climbing operand, absorption usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture climbing-then-climbing leading-lone-slash PathExpr ancestor-or-self-axis climbing</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-034"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>
+   
+   <test-case name="sx-intersect-135">
+      <description>intersect expression (streaming arg 2) - climbing operand, absorption usage, removal of duplicates</description>
+      <keywords>ParenthesizedExpr mixed-posture crawling-then-climbing leading-double-slash attribute-axis PathExpr ancestor-or-self-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-035"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case>  
+
+   <test-case name="sx-intersect-136">
+      <description>Streaming intersect expression - two potentially consuming operands (bug 27668)</description>
+      <keywords>ParenthesizedExpr mixed-posture crawling-then-climbing leading-double-slash attribute-axis PathExpr ancestor-or-self-axis</keywords>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-036"/>
+      </test>
+      <result>
+         <all-of>
+           <assert>/out/v[1] = ('')</assert>
+           <assert>/out/v[2] = ('')</assert>
+           <assert>/out/v[3] = ('')</assert>
+         </all-of>
+      </result>
+   </test-case>  
+   
+   <test-case name="sx-intersect-137">
+      <description>Streaming intersect expression - intersect of motionless/climbing references to ancestor nodes</description>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-037"/>
+      </test>
+      <result>
+         <assert-xml><![CDATA[<out><v>MMP</v><v>P</v><v>P</v><v>P</v><v>H</v><v>P</v></out>]]></assert-xml>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-138">
+      <description>Streaming intersect expression - intersect of motionless and consuming striding nodes</description>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-038"/>
+      </test>
+      <result>
+         <assert>empty(/out/node())</assert>
+      </result>
+   </test-case> 
+   
+   <test-case name="sx-intersect-139">
+      <description>Streaming intersect expression - intersect of motionless and consuming striding nodes</description>
+      <created by="Michael Kay" on="2015-03-26"/>
+      <environment ref="sx-intersect-B"/>
+      <test>
+         <initial-template name="r-039"/>
+      </test>
+      <result>
+         <assert-xml><![CDATA[<out>ITEM</out>]]></assert-xml>
+      </result>
+   </test-case>   
+
+</test-set>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/strm/sx-IntersectExpr/sx-intersect-A.xsl	Fri Mar 27 12:09:07 2015 +0000
@@ -0,0 +1,239 @@
+<xsl:stylesheet version="3.0" 
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    exclude-result-prefixes="map xs">
+    
+    <xsl:variable name="RUN" select="true()" static="yes"/>
+    <xsl:strip-space elements="*"/>
+    
+    <xsl:variable name="insertion" as="element()*">
+      <a>A</a>
+      <b>B</b>
+    </xsl:variable>
+    
+    <xsl:variable name="numeric-insertion" as="element()*">
+      <a>11</a>
+      <b>22</b>
+    </xsl:variable>
+    
+    <!-- Streaming intersect operator: grounded operand -->
+    
+    <xsl:template name="r-002" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="(copy-of(/BOOKLIST/BOOKS/ITEM/PRICE) intersect  $insertion)"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, inspection usage -->
+    
+    <xsl:template name="r-010" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="count((/BOOKLIST/BOOKS/ITEM/PRICE intersect  $insertion))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, absorption usage -->
+    
+    <xsl:template name="r-011" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="sum((/BOOKLIST/BOOKS/ITEM/PRICE intersect  $numeric-insertion))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, transmission usage -->
+    
+    <xsl:template name="r-012" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="(/BOOKLIST/BOOKS/ITEM/PRICE intersect  $insertion)[position() mod 2 = 0]"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, focus-setting usage -->
+    
+    <xsl:template name="r-013" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="(/BOOKLIST/BOOKS/ITEM/PRICE intersect  $numeric-insertion) ! (.+1)"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, focus-controlled usage -->
+    
+    <xsl:template name="r-014" use-when="true() or $RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="/BOOKLIST/BOOKS/ITEM[1] ! (* intersect  $insertion)"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, focus-setting usage -->
+    
+    <xsl:template name="r-015" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="(/BOOKLIST/BOOKS/ITEM/PRICE intersect  $numeric-insertion)">
+            <xsl:value-of select=".+1 || ' '"/>
+          </xsl:for-each>  
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, focus-controlled usage -->
+    
+    <xsl:template name="r-016" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="/BOOKLIST/BOOKS/ITEM[1]">
+            <xsl:copy-of select="(* intersect $insertion)"/>
+          </xsl:for-each>  
+        </out>
+      </xsl:stream>
+    </xsl:template>    
+    
+    <!-- Streaming intersect operator: striding operand, focus-setting usage for inspection action -->
+    
+    <xsl:template name="r-017" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="(/BOOKLIST/BOOKS/ITEM[1]/* intersect  $insertion) ! contains(name(), 'E')"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, apply-templates usage -->
+    
+    <xsl:template name="r-018" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:apply-templates select="(/BOOKLIST/BOOKS/ITEM[1]/* intersect $insertion)" mode="r-018-mode"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <xsl:mode name="r-018-mode" streamable="yes" on-no-match="deep-skip"/>
+    <xsl:template match="ITEM/*" mode="r-018-mode"><xsl:value-of select="."/></xsl:template>
+    
+    <!-- Streaming intersect operator: crawling operand, inspection usage -->
+    
+    <xsl:template name="r-020" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="count((//PRICE intersect  $insertion))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template> 
+    
+    <!-- Streaming intersect operator: crawling operand, absorption usage -->
+    
+    <xsl:template name="r-021" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="count((/BOOKLIST/BOOKS/ITEM[1]//text() intersect  $insertion))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: crawling operand, transmission usage -->
+    
+    <xsl:template name="r-022" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="(/BOOKLIST/BOOKS/ITEM[1]//text() intersect  $insertion)[position() lt 4]"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: crawling operand, focus-setting usage -->
+    
+    <xsl:template name="r-023" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="(//PRICE/text() intersect  $numeric-insertion) ! (.+1)"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: climbing operand, inspection usage -->
+    
+    <xsl:template name="r-030" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="(/BOOKLIST/BOOKS/ITEM[1]/PRICE/ancestor::* intersect  $insertion) ! name()"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: climbing operand, inspection usage, removal of duplicates -->
+    
+    <xsl:template name="r-031" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="(/BOOKLIST/BOOKS/ITEM/PRICE/ancestor::* intersect  $insertion) ! name()"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: climbing operand, absorption usage -->
+    
+    <xsl:template name="r-032" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="(/BOOKLIST/BOOKS/ITEM[1]/PRICE/ancestor::*/@* intersect  $insertion)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: climbing operand, absorption usage -->
+    
+    <xsl:template name="r-033" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="(/BOOKLIST/BOOKS/ITEM/ancestor-or-self::*/@CAT intersect $insertion)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: climbing operand, absorption usage, removal of duplicates -->
+    
+    <xsl:template name="r-034" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="(/BOOKLIST/BOOKS/ITEM/PRICE/ancestor-or-self::*/@CAT intersect  $insertion)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: climbing operand, absorption usage, removal of duplicates -->
+    
+    <xsl:template name="r-035" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="(//PRICE/ancestor-or-self::*/@* intersect  $insertion)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>  
+    
+    <!-- Streaming intersect operator: striding operand, transmission usage (bug 27668) -->
+    
+    <xsl:template name="r-036" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="/*/CATEGORIES/CATEGORY">
+            <v><xsl:value-of select="@CODE intersect @DESC"/></v>
+          </xsl:for-each>
+        </out>
+      </xsl:stream>
+    </xsl:template>               
+    
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/strm/sx-IntersectExpr/sx-intersect-B.xsl	Fri Mar 27 12:09:07 2015 +0000
@@ -0,0 +1,277 @@
+<xsl:stylesheet version="3.0" 
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    exclude-result-prefixes="map xs">
+    
+    <xsl:variable name="RUN" select="true()" static="yes"/>
+    <xsl:strip-space elements="*"/>
+    
+    <xsl:variable name="insertion" as="element()*">
+      <a>A</a>
+      <b>B</b>
+    </xsl:variable>
+    
+    <xsl:variable name="numeric-insertion" as="element()*">
+      <a>11</a>
+      <b>22</b>
+    </xsl:variable>
+    
+    <!-- intersect expression (streaming arg 2): grounded operand -->
+    
+    <xsl:template name="r-002" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="($insertion intersect  copy-of(/BOOKLIST/BOOKS/ITEM/PRICE))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, inspection usage -->
+    
+    <xsl:template name="r-010" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="count(($insertion intersect  /BOOKLIST/BOOKS/ITEM/PRICE))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, absorption usage -->
+    
+    <xsl:template name="r-011" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="sum(($numeric-insertion intersect /BOOKLIST/BOOKS/ITEM/PRICE))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, transmission usage -->
+    
+    <xsl:template name="r-012" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="($insertion intersect  /BOOKLIST/BOOKS/ITEM/PRICE)[position() mod 2 = 0]"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, focus-setting usage -->
+    
+    <xsl:template name="r-013" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="($numeric-insertion intersect /BOOKLIST/BOOKS/ITEM/PRICE) ! (.+1)"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, focus-controlled usage -->
+    
+    <xsl:template name="r-014" use-when="true() or $RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="/BOOKLIST/BOOKS/ITEM[1] ! ($insertion intersect  *)"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, focus-setting usage -->
+    
+    <xsl:template name="r-015" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="($numeric-insertion intersect /BOOKLIST/BOOKS/ITEM/PRICE)">
+            <xsl:value-of select=".+1 || ' '"/>
+          </xsl:for-each>  
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, focus-controlled usage -->
+    
+    <xsl:template name="r-016" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="/BOOKLIST/BOOKS/ITEM[1]">
+            <xsl:copy-of select="($insertion intersect *)"/>
+          </xsl:for-each>  
+        </out>
+      </xsl:stream>
+    </xsl:template>    
+    
+    <!-- intersect expression (streaming arg 2): striding operand, focus-setting usage for inspection action -->
+    
+    <xsl:template name="r-017" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="($insertion intersect /BOOKLIST/BOOKS/ITEM[1]/*) ! contains(name(), 'E')"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): striding operand, apply-templates usage -->
+    
+    <xsl:template name="r-018" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:apply-templates select="($insertion intersect /BOOKLIST/BOOKS/ITEM[1]/*)" mode="r-018-mode"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <xsl:mode name="r-018-mode" streamable="yes" on-no-match="deep-skip"/>
+    <xsl:template match="ITEM/*" mode="r-018-mode"><xsl:value-of select="."/></xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): crawling operand, inspection usage -->
+    
+    <xsl:template name="r-020" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="count(($insertion intersect //PRICE))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template> 
+    
+    <!-- intersect expression (streaming arg 2): crawling operand, absorption usage -->
+    
+    <xsl:template name="r-021" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="count(($insertion intersect /BOOKLIST/BOOKS/ITEM[1]//text()))"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): crawling operand, transmission usage -->
+    
+    <xsl:template name="r-022" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="($insertion intersect /BOOKLIST/BOOKS/ITEM[1]//text())[position() lt 4]"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): crawling operand, focus-setting usage -->
+    
+    <xsl:template name="r-023" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="($numeric-insertion intersect //PRICE/text()) ! (.+1)"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): climbing operand, inspection usage -->
+    
+    <xsl:template name="r-030" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="($insertion intersect /BOOKLIST/BOOKS/ITEM[1]/PRICE/ancestor::*) ! name()"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): climbing operand, inspection usage, removal of duplicates -->
+    
+    <xsl:template name="r-031" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:copy-of select="($insertion intersect  /BOOKLIST/BOOKS/ITEM/PRICE/ancestor::*) ! name()"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): climbing operand, absorption usage -->
+    
+    <xsl:template name="r-032" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="($insertion intersect /BOOKLIST/BOOKS/ITEM[1]/PRICE/ancestor::*/@*)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): climbing operand, absorption usage -->
+    
+    <xsl:template name="r-033" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="($insertion intersect /BOOKLIST/BOOKS/ITEM/ancestor-or-self::*/@CAT)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): climbing operand, absorption usage, removal of duplicates -->
+    
+    <xsl:template name="r-034" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="($insertion intersect /BOOKLIST/BOOKS/ITEM/PRICE/ancestor-or-self::*/@CAT)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- intersect expression (streaming arg 2): climbing operand, absorption usage, removal of duplicates -->
+    
+    <xsl:template name="r-035" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:value-of select="($insertion intersect //PRICE/ancestor-or-self::*/@*)" separator="|"/>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: striding operand, transmission usage  -->
+    
+    <xsl:template name="r-036" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="/*/CATEGORIES/CATEGORY">
+            <v><xsl:value-of select="@DESC intersect @CODE"/></v>
+          </xsl:for-each>
+        </out>
+      </xsl:stream>
+    </xsl:template>  
+    
+    <!-- Streaming intersect operator: two climbing/motionless operands both comprising streamed nodes -->
+    
+    <xsl:template name="r-037" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="outermost(//WEIGHT)">
+            <v><xsl:value-of select="ancestor-or-self::*/@CAT intersect ../@*"/></v>
+          </xsl:for-each>
+        </out>
+      </xsl:stream>
+    </xsl:template>
+    
+    <!-- Streaming intersect operator: a motionless and a striding operand both comprising streamed nodes -->
+    
+    <xsl:template name="r-038" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="/*/BOOKS/ITEM[1]">
+            <xsl:value-of select="(. intersect *) ! local-name()"/>
+          </xsl:for-each>
+        </out>
+      </xsl:stream>
+    </xsl:template>   
+    
+    <!-- Streaming intersect operator: a motionless and a striding operand both comprising streamed nodes -->
+    
+    <xsl:template name="r-039" use-when="$RUN">
+      <xsl:stream href="../docs/books.xml">
+        <out>
+          <xsl:for-each select="/*/BOOKS/ITEM[1]">
+            <xsl:value-of select="(. | .) ! local-name()"/>
+          </xsl:for-each>
+        </out>
+      </xsl:stream>
+    </xsl:template>   
+    
+                  
+    
+</xsl:stylesheet>
\ No newline at end of file