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>