Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

Define and use function

File: Data.xml <?xml version="1.0"?> <parts>   <part id="p10" idref="p20"/>   <part id="p20" idref="p30 p40"/>   <part id="p30"/>   <part id="p40" idref="p10"/> </parts> File: Transform.xml <?xml version="1.0"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   xmlns:graph="http://wrox.com/569090/graph"   xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">   <xsl:function name="graph:refers" as="xs:boolean">     <xsl:param name="links" as="node()" />     <xsl:param name="A" as="node()" />     <xsl:param name="B" as="node()" />     <xsl:variable name="direct" as="node()*">       <xsl:apply-templates select="$links">         <xsl:with-param name="from" select="$A" />       </xsl:apply-templates>     </xsl:variable>     <xsl:sequence       select="if (exists($direct intersect $B)) then true()                          else if (some $C in $direct                                    satisfies graph:refers($links, $C, $B)) then true()                          else false()" />   </xsl:function> </xsl:transform>