123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- <?xml version="1.0" encoding="UTF-8"?>
- <?xml-stylesheet type="text/xsl" ?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:fo="http://www.w3.org/1999/XSL/Format"
- xmlns:str="http://www.ora.com/XSLTCookbook/namespaces/strings"
- xmlns="http://developer.cognos.com/schemas/report/1/"
- xmlns:v4="http://developer.cognos.com/schemas/report/1/"
- exclude-result-prefixes="xsl fo str v4">
- <xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="yes"/>
-
- <xsl:template match=" node() | @* | comment() | processing-instruction()">
- <xsl:copy>
- <xsl:apply-templates select="node() | @*"/>
- </xsl:copy>
- </xsl:template>
-
- <xsl:variable name="MSQ5" select="'Master_Section_Query5'"/>
-
-
-
-
- <xsl:template match="v4:BIQuery[ @name = $MSQ5 ]">
- <xsl:copy>
- <xsl:apply-templates select="@*"/>
-
- <xsl:for-each select="*">
- <xsl:choose>
-
- <xsl:when test="local-name()='cube'">
- <xsl:copy>
- <xsl:apply-templates select="@*"/>
-
-
- <xsl:variable name="factListExists" select="v4:factList"/>
-
- <xsl:variable name="cubechildren" select="./*"/>
- <xsl:for-each select="$cubechildren">
- <xsl:choose>
-
- <xsl:when test="local-name()='factList'">
- <xsl:copy>
- <xsl:apply-templates select="@*"/>
- <xsl:apply-templates select="*"/>
- <xsl:call-template name="processExpressions"/>
- <xsl:call-template name="processQueryItemRef"/>
- </xsl:copy>
- </xsl:when>
-
- <xsl:when test="local-name()='dimension'">
- <xsl:if test="count($factListExists) > 0">
- <xsl:copy>
- <xsl:apply-templates select="@*"/>
- <xsl:apply-templates select="node() | comment() | processing-instruction()"/>
- </xsl:copy>
- </xsl:if>
- <xsl:if test="count($factListExists) = 0">
- <xsl:copy>
- <xsl:apply-templates select="@*"/>
-
- <xsl:variable name="levels" select="v4:level"/>
- <xsl:for-each select="$levels">
- <xsl:choose>
- <xsl:when test="position() < count($levels)">
- <xsl:copy-of select="."/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy>
- <xsl:apply-templates select="node() | @* | comment() | processing-instruction()"/>
- <xsl:call-template name="processExpressions"/>
- <xsl:call-template name="processQueryItemRef"/>
- </xsl:copy>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- </xsl:copy>
- </xsl:if>
-
- </xsl:when>
-
-
- <xsl:otherwise>
- <xsl:apply-templates select="."/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
-
- </xsl:copy>
- </xsl:when>
-
-
- <xsl:when test="local-name()='tabularModel'">
- <xsl:copy>
-
-
- <xsl:apply-templates select="node() | @* | comment() | processing-instruction()"/>
-
-
- <xsl:call-template name="processExpressions">
- <xsl:with-param name="nodename" select="'tabularModel'"/>
- </xsl:call-template>
-
- <xsl:call-template name="processQueryItemRef">
- <xsl:with-param name="nodename" select="'tabularModel'"/>
- </xsl:call-template>
- </xsl:copy>
- </xsl:when>
-
-
- <xsl:otherwise>
- <xsl:copy>
- <xsl:apply-templates select="node() | @* | comment() | processing-instruction()"/>
- </xsl:copy>
- </xsl:otherwise>
-
- </xsl:choose>
- </xsl:for-each>
-
- </xsl:copy>
- </xsl:template>
-
-
- <xsl:template name="processQueryItemRef">
- <xsl:param name="nodename" select="'factList'"/>
-
- <xsl:variable name="queryItemRefs" select="//v4:layout//*[ @refQuery = $MSQ5 ]//v4:queryItemRef"/>
- <xsl:for-each select="$queryItemRefs">
-
- <xsl:if test="count(./ancestor::*[@refQuery]) = 1">
-
-
- <xsl:variable name="curpos" select="position()"/>
- <xsl:variable name="refItem" select="@refItem"/>
- <xsl:variable name="existed">
- <xsl:for-each select="$queryItemRefs">
- <xsl:if test="position() < $curpos">
- <xsl:if test="count(./ancestor::*[@refQuery]) = 1 and @refItem = $refItem">
- <xsl:value-of select="'1'"/>
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
- </xsl:variable>
-
- <xsl:if test="not (contains($existed, '1'))">
-
- <xsl:if test="$nodename = 'factList'">
- <xsl:call-template name="findFactList">
- <xsl:with-param name="queryname" select="@refItem"/>
- </xsl:call-template>
- </xsl:if>
-
- <xsl:if test="$nodename = 'tabularModel'">
- <xsl:call-template name="findDataItem">
- <xsl:with-param name="queryname" select="@refItem"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
- </xsl:template>
-
- <xsl:template name="processExpressions">
- <xsl:param name="nodename" select="'factList'"/>
-
- <xsl:variable name="expressions" select="//v4:layout//*[ @refQuery = $MSQ5 ]//v4:expression"/>
- <xsl:for-each select="$expressions">
- <xsl:if test="count(./ancestor::*[@refQuery]) = 1">
- <xsl:call-template name="processExpression">
- <xsl:with-param name="nodename" select="$nodename"/>
- <xsl:with-param name="expression" select="."/>
- <xsl:with-param name="expressions" select="$expressions"/>
- <xsl:with-param name="curpos" select="position()"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:for-each>
- </xsl:template>
-
- <xsl:template name="processExpression">
- <xsl:param name="nodename" select="'factList'"/>
- <xsl:param name="expression"/>
- <xsl:param name="expressions"/>
- <xsl:param name="curpos" select="1"/>
-
- <xsl:variable name="qiName" select="substring-after(substring-before($expression, ']'), '[')"/>
- <xsl:if test="string-length($qiName) > 0 and $qiName != ''">
-
- <xsl:variable name="existed">
- <xsl:for-each select="$expressions">
- <xsl:if test="position() < $curpos">
- <xsl:if test="count(./ancestor::*[@refQuery]) = 1 and contains(./text(), concat('[',$qiName,']'))">
- <xsl:value-of select="'1'"/>
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
- <xsl:if test="contains( substring-before($expressions[$curpos]/text(),$expression), concat('[',$qiName,']'))">
- <xsl:value-of select="'1'"/>
- </xsl:if>
- </xsl:variable>
- <xsl:if test="not (contains( $existed, '1'))">
- <xsl:if test="$nodename = 'factList'">
-
- <xsl:call-template name="findFactList">
- <xsl:with-param name="queryname" select="$qiName"/>
- </xsl:call-template>
- </xsl:if>
- <xsl:if test="$nodename = 'tabularModel'">
-
- <xsl:call-template name="findDataItem">
- <xsl:with-param name="queryname" select="$qiName"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <xsl:if test="contains(substring-after($expression, ']'), '[')">
-
- <xsl:call-template name="processExpression">
- <xsl:with-param name="nodename" select="'factList'"/>
- <xsl:with-param name="expression" select="substring-after($expression, ']')"/>
- <xsl:with-param name="expressions"/>
- <xsl:with-param name="curpos" select="$curpos"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="findFactList">
- <xsl:param name="queryname"/>
- <xsl:variable name="item" select="//v4:BIQuery//v4:cube//v4:item[ @refItem = $queryname ]"/>
- <xsl:if test="count($item) > 0">
- <xsl:variable name="parentquery" select="$item/ancestor::v4:BIQuery[ @name = $MSQ5 ]"/>
- <xsl:if test="count($parentquery) = 0">
- <xsl:copy-of select="$item[1]"/>
- </xsl:if>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="findDataItem">
- <xsl:param name="queryname"/>
- <xsl:variable name="item" select="//v4:BIQuery//v4:tabularModel/v4:dataItem[ @name = $queryname ]"/>
- <xsl:if test="count($item) > 0">
- <xsl:variable name="parentquery" select="$item/ancestor::v4:BIQuery[ @name = $MSQ5 ]"/>
- <xsl:if test="count($parentquery) = 0">
- <xsl:copy-of select="$item[1]"/>
- </xsl:if>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="v4:pageSet/v4:page">
-
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:choose>
- <xsl:when test="@refQuery">
-
- </xsl:when>
- <xsl:when test="ancestor::v4:pageSet/@refQuery">
-
- <xsl:attribute name="refQuery"><xsl:value-of select="ancestor::v4:pageSet/@refQuery"/></xsl:attribute>
- </xsl:when>
- <xsl:when test=".//v4:queryItemRef[count(ancestor::v4:*/@refQuery) = 0] or .//v4:expression[count(ancestor::v4:*/@refQuery) = 0]">
-
-
- <xsl:variable name="bestQuery"><xsl:call-template name="findBestQuery"/></xsl:variable>
- <xsl:if test="$bestQuery != ''">
- <xsl:attribute name="refQuery"><xsl:value-of select="$bestQuery"/></xsl:attribute>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
-
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:apply-templates/>
- </xsl:copy>
- </xsl:template>
-
- <xsl:template match="v4:promptPageList/v4:page">
-
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:choose>
- <xsl:when test="@refQuery">
-
- </xsl:when>
- <xsl:when test=".//v4:queryItemRef[count(ancestor::v4:*/@refQuery) = 0] or .//v4:expression[count(ancestor::v4:*/@refQuery) = 0]">
-
- <xsl:variable name="bestQuery"><xsl:call-template name="findBestQuery">
- <xsl:with-param name="queryList" select=".//v4:*/@refQuery"/>
- </xsl:call-template></xsl:variable>
- <xsl:if test="$bestQuery != ''">
- <xsl:attribute name="refQuery"><xsl:value-of select="$bestQuery"/></xsl:attribute>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
-
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:apply-templates/>
- </xsl:copy>
- </xsl:template>
-
- <xsl:template name="findBestQuery">
-
- <xsl:param name="queryList" select="ancestor::v4:pageSet//v4:*/@refQuery"/>
-
- <xsl:param name="queryItemRefs" select=".//v4:queryItemRef[count(ancestor::v4:*/@refQuery) = 0]/@refItem"/>
-
- <xsl:param name="expressions" select=".//v4:expression[count(ancestor::v4:*/@refQuery) = 0]"/>
-
-
- <xsl:if test="$queryList">
-
- <xsl:variable name="exprItemRefs">
- <xsl:call-template name="extractExprItemRefs">
- <xsl:with-param name="expressions" select="$expressions"/>
- </xsl:call-template>
- </xsl:variable>
-
-
-
-
- <xsl:call-template name="TestBestQuery">
- <xsl:with-param name="queryList" select="$queryList"/>
- <xsl:with-param name="queryItemRefs" select="$queryItemRefs"/>
- <xsl:with-param name="exprItemRefs" select="$exprItemRefs"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="TestBestQuery">
- <xsl:param name="queryList"/>
- <xsl:param name="queryItemRefs"/>
- <xsl:param name="exprItemRefs"/>
- <xsl:param name="bestQuery"/>
- <xsl:param name="bestQueryCount" select="0"/>
- <xsl:param name="queryIndex" select="1"/>
-
- <xsl:choose>
- <xsl:when test="$queryIndex <= count($queryList)">
-
-
- <xsl:variable name="myQueryName" select="string($queryList[$queryIndex])"/>
-
- <xsl:variable name="myQueryCount">
- <xsl:call-template name="countQueryItems">
- <xsl:with-param name="myQueryItems" select="//v4:BIQuery[@name=$myQueryName]/v4:cube//v4:*[local-name() = 'item' or 'dataItem' = local-name()]"/>
- <xsl:with-param name="queryItemRefs" select="$queryItemRefs"/>
- <xsl:with-param name="exprItemRefs" select="$exprItemRefs"/>
- </xsl:call-template>
- </xsl:variable>
-
-
-
-
-
-
-
- <xsl:choose>
- <xsl:when test="$bestQueryCount < $myQueryCount">
-
-
- <xsl:call-template name="TestBestQuery">
- <xsl:with-param name="bestQuery" select="$myQueryName"/>
- <xsl:with-param name="bestQueryCount" select="$myQueryCount"/>
- <xsl:with-param name="queryIndex" select="$queryIndex +1"/>
- <xsl:with-param name="queryList" select="$queryList"/>
- <xsl:with-param name="queryItemRefs" select="$queryItemRefs"/>
- <xsl:with-param name="exprItemRefs" select="$exprItemRefs"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="$queryIndex < count($queryList)">
-
- <xsl:call-template name="TestBestQuery">
- <xsl:with-param name="queryList" select="$queryList"/>
- <xsl:with-param name="queryItemRefs" select="$queryItemRefs"/>
- <xsl:with-param name="exprItemRefs" select="$exprItemRefs"/>
- <xsl:with-param name="bestQuery" select="$bestQuery"/>
- <xsl:with-param name="bestQueryCount" select="$bestQueryCount"/>
- <xsl:with-param name="queryIndex" select="$queryIndex +1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
-
- <xsl:value-of select="$bestQuery"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
-
- <xsl:value-of select="$bestQuery"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="extractExprItemRefs">
- <xsl:param name="exprItemRefs"/>
- <xsl:param name="expressions"/>
- <xsl:param name="exprIndex" select="1"/>
-
- <xsl:choose>
- <xsl:when test="$exprIndex <= count($expressions)">
-
- <xsl:variable name="myExprItemRefs">
-
- <xsl:call-template name="getExprItemRefs">
- <xsl:with-param name="expression" select="$expressions[$exprIndex]"/>
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:call-template name="extractExprItemRefs">
- <xsl:with-param name="exprItemRefs" select="concat($exprItemRefs, $myExprItemRefs)"/>
- <xsl:with-param name="expressions" select="$expressions"/>
- <xsl:with-param name="exprIndex" select="$exprIndex +1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
-
- <xsl:value-of select="$exprItemRefs"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="getExprItemRefs">
- <xsl:param name="myItemRefs"/>
- <xsl:param name="expression"/>
-
- <xsl:choose>
- <xsl:when test="contains($expression,'[')">
-
- <xsl:variable name="qiName" select="substring-after(substring-before($expression, ']'), '[')"/>
-
- <xsl:call-template name="getExprItemRefs">
- <xsl:with-param name="myItemRefs" select="concat($myItemRefs,'[',$qiName,']; ')"/>
- <xsl:with-param name="expression" select="substring-after($expression,']')"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
-
- <xsl:value-of select="$myItemRefs"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template name="countQueryItems">
- <xsl:param name="myQueryItems"/>
- <xsl:param name="queryItemRefs"/>
- <xsl:param name="exprItemRefs"/>
- <xsl:param name="queryItemCount" select="0"/>
- <xsl:param name="queryItemIndex" select="1"/>
-
- <xsl:choose>
- <xsl:when test="$queryItemIndex <= count($myQueryItems)">
-
- <xsl:variable name="myItem" select="$myQueryItems[$queryItemIndex]"/>
- <xsl:variable name="myItemName">
- <xsl:choose>
- <xsl:when test="$myItem/@name"><xsl:value-of select="$myItem/@name"/></xsl:when>
- <xsl:when test="$myItem/@alias"><xsl:value-of select="$myItem/@alias"/></xsl:when>
- <xsl:when test="$myItem/@refItem"><xsl:value-of select="$myItem/@refItem"/></xsl:when>
- <xsl:otherwise></xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="myCount">
- <xsl:choose>
- <xsl:when test="$myItemName = $queryItemRefs">1</xsl:when>
- <xsl:when test="contains($exprItemRefs, concat('[',$myItemName,']; '))">1</xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
-
- <xsl:call-template name="countQueryItems">
- <xsl:with-param name="myQueryItems" select="$myQueryItems"/>
- <xsl:with-param name="queryItemRefs" select="$queryItemRefs"/>
- <xsl:with-param name="exprItemRefs" select="$exprItemRefs"/>
- <xsl:with-param name="queryItemCount" select="$queryItemCount + $myCount"/>
- <xsl:with-param name="queryItemIndex" select="$queryItemIndex +1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
-
- <xsl:value-of select="$queryItemCount"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- </xsl:stylesheet>
|