123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed Materials - Property of IBM
- IBM Cognos Products: ans
- (C) Copyright IBM Corp. 2005, 2010
- US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- -->
- <!--
- * Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
- * Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
- *
- *
- *
- * This stylesheet generates a most update Analysis High Level Specification (HLS)
- * from a beta version.
- *
- -->
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" xmlns:exsl="http://exslt.org/common" xmlns:xalan="http://xml.apache.org/xalan" xmlns:java="http://xml.apache.org/xalan/java" extension-element-prefixes="xalan date exsl" exclude-result-prefixes="xalan java date exsl">
- <xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="yes"/>
- <!--global variables-->
- <xsl:variable name="schema0.1" select="number(0.1)"/>
- <xsl:variable name="schema0.101" select="number(0.101)"/>
- <xsl:variable name="schema0.102" select="number(0.102)"/>
- <xsl:variable name="schema0.103" select="number(0.103)"/>
- <xsl:variable name="schema0.104" select="number(0.104)"/>
- <xsl:variable name="schema0.105" select="number(0.105)"/>
- <xsl:variable name="schema0.106" select="number(0.106)"/>
- <xsl:variable name="schema0.107" select="number(0.107)"/>
- <xsl:variable name="schema0.108" select="number(0.108)"/>
- <xsl:variable name="schema0.109" select="number(0.109)"/>
- <xsl:variable name="schema1.0" select="number(1.0)"/>
- <xsl:variable name="schema1.1" select="number(1.1)"/>
- <xsl:variable name="currentSchema" select="number(1.1)"/>
- <xsl:variable name="reportSchema">
- <xsl:value-of select="number(//analysisReport/attribute::schemaVersion)"/>
- </xsl:variable>
- <xsl:template match="/PersistHLS">
- <!-- Once a point of time we had PersistHLS as the fake root.
- New report should have analysisReport as the root.
- Here we make sure the fake root is removed during upgrade-->
- <xsl:apply-templates select="analysisReport"/>
- </xsl:template>
- <xsl:template match="analysisReport">
- <xsl:choose>
- <xsl:when test="$reportSchema < $currentSchema">
- <xsl:element name="analysisReport">
- <xsl:copy-of select="@*"/>
- <xsl:attribute name="schemaVersion"><xsl:value-of select="$currentSchema"/></xsl:attribute>
- <xsl:comment>upgrade from version
- <xsl:value-of select="$reportSchema"/>
- </xsl:comment>
- <xsl:if test="not(subtotalEnablementOptions)">
- <!--
- Prior to 0.106 we did not have subtotalEnablementOptions. The default behavior for remainderMode was
- subtract as opposed to null. The default behavior for filterExcludedEnabled was true as opposed to false.
- -->
- <xsl:element name="subtotalEnablementOptions">
- <xsl:attribute name="filterExcludedEnabled">true</xsl:attribute>
- <xsl:attribute name="filterIncludedEnabled">true</xsl:attribute>
- <xsl:attribute name="remainderEnabled">true</xsl:attribute>
- <xsl:attribute name="subtotalVisibleEnabled">false</xsl:attribute>
- <xsl:attribute name="summaryEnabled">true</xsl:attribute>
- <xsl:attribute name="visibleMembersEnabled">true</xsl:attribute>
- <xsl:attribute name="remainderMode">subtract</xsl:attribute>
- </xsl:element>
- </xsl:if>
- <!--
- Convert the 8.1 suppression to work order 2567 suppression. Test for each variant separately
- -->
- <xsl:if test="filterSet/zeroSuppress">
- <xsl:if test="not(otherOptions)">
- <xsl:element name="otherOptions">
- <xsl:attribute name="treatZerosAsNullsForSuppression">true</xsl:attribute>
- <xsl:attribute name="suppressionState"><xsl:value-of select="/analysisReport/filterSet/zeroSuppress/@state"/></xsl:attribute>
- </xsl:element>
- </xsl:if>
- <xsl:apply-templates>
- <xsl:with-param name="suppressionStateName">suppressionState</xsl:with-param>
- <xsl:with-param name="suppressionStateValue" select="/analysisReport/filterSet/zeroSuppress/@state"/>
- <xsl:with-param name="treatmentName">treatZerosAsNullsForSuppression</xsl:with-param>
- <xsl:with-param name="treatmentValue">true</xsl:with-param>
- </xsl:apply-templates>
- </xsl:if>
- <xsl:if test="(filterSet/nullSuppress) and not (filterSet/zeroSuppress)">
- <xsl:if test="not(otherOptions)">
- <xsl:element name="otherOptions">
- <xsl:attribute name="treatZerosAsNullsForSuppression">false</xsl:attribute>
- <xsl:attribute name="suppressionState"><xsl:value-of select="/analysisReport/filterSet/nullSuppress/@state"/></xsl:attribute>
- </xsl:element>
- </xsl:if>
- <xsl:apply-templates>
- <xsl:with-param name="suppressionStateName">suppressionState</xsl:with-param>
- <xsl:with-param name="suppressionStateValue" select="/analysisReport/filterSet/nullSuppress/@state"/>
- <xsl:with-param name="treatmentName">treatZerosAsNullsForSuppression</xsl:with-param>
- <xsl:with-param name="treatmentValue">true</xsl:with-param>
- </xsl:apply-templates>
- </xsl:if>
- <xsl:if test="not(filterSet/nullSuppress) and not (filterSet/zeroSuppress)">
- <xsl:choose>
- <xsl:when test="not(otherOptions)">
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates>
- <xsl:with-param name="treatmentName">treatZerosAsNullsForSuppression</xsl:with-param>
- <xsl:with-param name="treatmentValue" select="/analysisReport/otherOptions/@treatZerosAsNullForSparsityRemoval"/>
- <xsl:with-param name="suppressionStateName">suppressionState</xsl:with-param>
- <xsl:with-param name="suppressionStateValue">none</xsl:with-param>
- </xsl:apply-templates>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy-of select="."/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <xsl:template match="otherOptions">
- <xsl:param name="suppressionStateName"/>
- <xsl:param name="suppressionStateValue"/>
- <xsl:param name="treatmentName"/>
- <xsl:param name="treatmentValue"/>
- <xsl:element name="otherOptions">
- <xsl:choose>
- <xsl:when test="@treatZerosAsNullsForSparsityRemoval">
- <xsl:attribute name="{$suppressionStateName}"><xsl:value-of select="$suppressionStateValue"/></xsl:attribute>
- <xsl:attribute name="treatZerosAsNullsForSuppression"><xsl:value-of select="@treatZerosAsNullsForSparsityRemoval"/></xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="{$suppressionStateName}"><xsl:value-of select="$suppressionStateValue"/></xsl:attribute>
- <xsl:attribute name="{$treatmentName}"><xsl:value-of select="$treatmentValue"/></xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:template>
- <!--remove old zero and null suppress. should be upgraded by this point.-->
- <xsl:template match="filterSet/zeroSuppress">
- </xsl:template>
- <xsl:template match="filterSet/nullSuppress">
- </xsl:template>
- <xsl:template match="subtotalEnablementOptions">
- <xsl:element name="subtotalEnablementOptions">
- <xsl:if test="not(@remainderMode) or not(@remaindermode)">
- <xsl:attribute name="remainderMode">subtract</xsl:attribute>
- </xsl:if>
- <xsl:apply-templates select="@*"/>
- </xsl:element>
- </xsl:template>
- <xsl:template match="measureSortSpec|topBottomFilter">
- <xsl:element name="{name()}">
- <xsl:copy-of select="@*"/>
- <xsl:choose>
- <xsl:when test="$reportSchema < $schema0.101">
- <xsl:variable name="v_locked">
- <xsl:value-of select="ancestor::*/properties/@locked"/>
- </xsl:variable>
- <xsl:element name="scope">
- <xsl:choose>
- <xsl:when test="context">
- <xsl:element name="memberExprs">
- <xsl:copy-of select="context/*"/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <!-- add <defaultMemberContext> for not locked block -->
- <xsl:if test="$v_locked != 'true'">
- <xsl:element name="memberExprs">
- <xsl:element name="defaultMemberContext"/>
- </xsl:element>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:choose>
- <xsl:when test="measure">
- <xsl:element name="measureExpr">
- <xsl:copy-of select="measure"/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="calcRef">
- <xsl:element name="measureExpr">
- <xsl:copy-of select="calcRef"/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="measureExpr">
- <xsl:element name="measure">default</xsl:element>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:template>
- <xsl:template match="scope">
- <xsl:variable name="v_locked">
- <xsl:value-of select="ancestor::*/properties/@locked"/>
- </xsl:variable>
- <!-- For analysis before 0.104, we didn't distinguish empty and default member context.
- So we need to upgrade those analysis to use default context for any non-locked block. From 0.104, we
- will write out <defaultMemberContext> for default context and empty for empty context. -->
- <xsl:choose>
- <xsl:when test="$v_locked != 'true' and $reportSchema < $schema0.104">
- <xsl:element name="{name()}">
- <xsl:copy-of select="@*"/>
- <xsl:if test="not(memberExprs)">
- <xsl:element name="memberExprs">
- <xsl:element name="defaultMemberContext"/>
- </xsl:element>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy-of select="."/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <xsl:template match="scatterchartoptions">
- <!-- Scatter charts are no longer supported. -->
- </xsl:template>
- <xsl:template match="childrenOfMeasureBlock/hiddenItems/members">
- <!-- change <members> to <measures>, and <member> to <measure> -->
- <xsl:element name="measures">
- <xsl:for-each select="./member">
- <xsl:element name="measure">
- <xsl:value-of select="."/>
- </xsl:element>
- </xsl:for-each>
- </xsl:element>
- </xsl:template>
- <xsl:template match="attributes/members">
- <!-- Change <attributes><members><member> to <attributes><attribute> -->
- <xsl:for-each select="./member">
- <xsl:element name="attribute">
- <xsl:value-of select="."/>
- </xsl:element>
- </xsl:for-each>
- </xsl:template>
- <xsl:template match="ci[@type='context']">
- <!-- we should remove any default context for locked block -->
- <xsl:variable name="v_locked">
- <xsl:value-of select="ancestor::*/properties/@locked"/>
- </xsl:variable>
- <xsl:variable name="v_value" select="."/>
- <xsl:if test="$v_locked != 'true' or $v_value != 'default'">
- <xsl:copy-of select="."/>
- </xsl:if>
- </xsl:template>
- <xsl:template match="childrenOfBlock|childrenOfMeasureBlock|depthBlock|nestedBlock|levelBlock|namedSetBlock|v5Block|memberBlock">
- <xsl:element name="{name()}">
- <xsl:copy-of select="@*"/>
- <xsl:if test="name() != 'memberBlock'">
- <xsl:if test="not(properties)">
- <xsl:element name="properties">
- <xsl:attribute name="remainderMode">subtract</xsl:attribute>
- </xsl:element>
- </xsl:if>
- </xsl:if>
- <xsl:if test="name() != 'childrenOfMeasureBlock'">
- <xsl:if test="not(subtotals)">
- <xsl:element name="subtotals">
- <xsl:attribute name="excluded">true</xsl:attribute>
- </xsl:element>
- </xsl:if>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- <xsl:template match="childrenOfBlock/properties|childrenOfMeasureBlock/properties|depthBlock/properties|nestedBlock/properties|levelBlock/properties|namedSetBlock/properties|v5Block/properties">
- <xsl:element name="{name()}">
- <xsl:if test="not(@remainderMode) or not(@remaindermode)">
- <xsl:attribute name="remainderMode">subtract</xsl:attribute>
- </xsl:if>
- <xsl:apply-templates select="@*"/>
- </xsl:element>
- </xsl:template>
- <xsl:template match="childrenOfBlock/subtotals|memberBlock/subtotals|depthBlock/subtotals|nestedBlock/subtotals|levelBlock/subtotals|namedSetBlock/subtotals|v5Block/subtotals">
- <xsl:element name="{name()}">
- <xsl:if test="not(@excluded)">
- <xsl:attribute name="excluded">true</xsl:attribute>
- </xsl:if>
- <xsl:apply-templates select="@*"/>
- </xsl:element>
- </xsl:template>
- <xsl:template match="reportOptions/pageBreaks">
- <xsl:variable name="section" select="./@*[name() = 'section']"/>
- <xsl:element name="{name()}">
- <xsl:for-each select="@*">
- <xsl:if test="name() != 'section'">
- <xsl:copy-of select="."/>
- </xsl:if>
- </xsl:for-each>
- <xsl:if test="$section">
- <xsl:element name="sectionFilterId">
- <xsl:attribute name="value"><xsl:choose><xsl:when test="starts-with($section, 'uuid:')"><xsl:value-of select="concat('x', substring($section, 6))"/></xsl:when><xsl:otherwise><xsl:value-of select="$section"/></xsl:otherwise></xsl:choose></xsl:attribute>
- </xsl:element>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- <!--
- Old reports (< 0.109) did not have an axisExpr element between the rows|columns
- element and the expression elements. In that case we need to add an
- axisExpr element.
- The original upgrade (0.109 - 1.0) rule did NOT check to see if we already had an
- axisExpr element so subsequent upgrades added superflous axisExpr
- elements. If see those we have to skip/delete them.
- NOTE: THE ORDER OF THESE TEMPLATES IS IMPORTANT.
- -->
- <xsl:template match="dataMatrix/rows/axisExpr|dataMatrix/columns/axisExpr">
- <xsl:choose>
- <xsl:when test="axisExpr">
- <!-- Yikes we have nested axisExprs. Ignore the nested one and process it's children. -->
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="axisExpr">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <xsl:template match="dataMatrix/rows|dataMatrix/columns">
- <!-- We need to add an axisExpr -->
- <xsl:element name="{name()}">
- <xsl:choose>
- <xsl:when test="not(axisExpr)">
- <xsl:element name="axisExpr">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:template>
- <!--
- Interim upgrade from 0.103-0.106
- We want attributes to be consistently named, capitalized, etc
- -->
- <xsl:template match="subtotalEnablementOptions/@filterexcludedenabled">
- <xsl:attribute name="filterExcludedEnabled"><xsl:value-of select="../@filterexcludedenabled"/></xsl:attribute>
- </xsl:template>
- <xsl:template match="subtotalEnablementOptions/@filterincludedenabled">
- <xsl:attribute name="filterIncludedEnabled"><xsl:value-of select="../@filterincludedenabled"/></xsl:attribute>
- </xsl:template>
- <xsl:template match="subtotalEnablementOptions/@remainderenabled">
- <xsl:attribute name="remainderEnabled"><xsl:value-of select="../@remainderenabled"/></xsl:attribute>
- </xsl:template>
- <xsl:template match="subtotalEnablementOptions/@subtotalvisibleenabled">
- <xsl:attribute name="subtotalVisibleEnabled"><xsl:value-of select="../@subtotalvisibleenabled"/></xsl:attribute>
- </xsl:template>
- <xsl:template match="subtotalEnablementOptions/@summaryenabled">
- <xsl:attribute name="summaryEnabled"><xsl:value-of select="../@summaryenabled"/></xsl:attribute>
- </xsl:template>
- <xsl:template match="subtotalEnablementOptions/@visiblemembersenabled">
- <xsl:attribute name="visibleMembersEnabled"><xsl:value-of select="../@visiblemembersenabled"/></xsl:attribute>
- </xsl:template>
- <xsl:template match="subtotalEnablementOptions/@remaindermode">
- <xsl:attribute name="remainderMode"><xsl:value-of select="../@remaindermode"/></xsl:attribute>
- </xsl:template>
- <xsl:template match="properties/@remaindermode">
- <xsl:attribute name="remainderMode"><xsl:value-of select="../@remaindermode"/></xsl:attribute>
- </xsl:template>
- <!-- Copy anything that is unmatched over to output. -->
- <xsl:template match="@*|node()">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()"/>
- </xsl:copy>
- </xsl:template>
- </xsl:stylesheet>
|