1*b1cdbd2cSJim Jagielski<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 2*b1cdbd2cSJim Jagielski<!--*********************************************************** 3*b1cdbd2cSJim Jagielski * 4*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 5*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 6*b1cdbd2cSJim Jagielski * distributed with this work for additional information 7*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 8*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 9*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 10*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 11*b1cdbd2cSJim Jagielski * 12*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 13*b1cdbd2cSJim Jagielski * 14*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 15*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 16*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 18*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 19*b1cdbd2cSJim Jagielski * under the License. 20*b1cdbd2cSJim Jagielski * 21*b1cdbd2cSJim Jagielski ***********************************************************--> 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 26*b1cdbd2cSJim Jagielski xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 27*b1cdbd2cSJim Jagielski xmlns:xs="http://www.w3.org/2001/XMLSchema" 28*b1cdbd2cSJim Jagielski xmlns:oor="http://openoffice.org/2001/registry" 29*b1cdbd2cSJim Jagielski xmlns:install="http://openoffice.org/2004/installation" 30*b1cdbd2cSJim Jagielski exclude-result-prefixes="install"> 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski<!-- Get the correct format --> 33*b1cdbd2cSJim Jagielski<xsl:output method="xml" indent="yes" encoding="UTF-8"/> 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski<!--************************** PARAMETER ******************************** --> 36*b1cdbd2cSJim Jagielski<xsl:param name="locale"/> 37*b1cdbd2cSJim Jagielski<xsl:param name="module"/> 38*b1cdbd2cSJim Jagielski<xsl:param name="xcs"/> 39*b1cdbd2cSJim Jagielski<xsl:param name="schemaRoot">.</xsl:param> 40*b1cdbd2cSJim Jagielski<xsl:param name="fallback-locale">en-US</xsl:param> 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski<xsl:variable name="schemaRootURL"> 43*b1cdbd2cSJim Jagielski <xsl:value-of select="$schemaRoot"/> 44*b1cdbd2cSJim Jagielski</xsl:variable> 45*b1cdbd2cSJim Jagielski<xsl:variable name="schemaURL"> 46*b1cdbd2cSJim Jagielski <xsl:value-of select="$xcs"/> 47*b1cdbd2cSJim Jagielski</xsl:variable> 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski<!--************************** TEMPLATES ******************************** --> 50*b1cdbd2cSJim Jagielski<!-- ensure that at least root is available --> 51*b1cdbd2cSJim Jagielski <xsl:template match="/oor:component-data"> 52*b1cdbd2cSJim Jagielski <xsl:copy> 53*b1cdbd2cSJim Jagielski <xsl:choose> 54*b1cdbd2cSJim Jagielski <xsl:when test="string-length($locale)"> 55*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*" mode="locale"/> 56*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "node|prop" mode="locale"/> 57*b1cdbd2cSJim Jagielski </xsl:when> 58*b1cdbd2cSJim Jagielski <xsl:otherwise> 59*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*"/> 60*b1cdbd2cSJim Jagielski <xsl:for-each select="node|prop"> 61*b1cdbd2cSJim Jagielski <xsl:variable name="component-schema" select="document($schemaURL)/oor:component-schema"/> 62*b1cdbd2cSJim Jagielski <xsl:apply-templates select="."> 63*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 64*b1cdbd2cSJim Jagielski <xsl:with-param name="context" select="$component-schema/component/*[@oor:name = current()/@oor:name]"/> 65*b1cdbd2cSJim Jagielski <xsl:with-param name="find-module" select="$module"/> 66*b1cdbd2cSJim Jagielski </xsl:apply-templates> 67*b1cdbd2cSJim Jagielski </xsl:for-each> 68*b1cdbd2cSJim Jagielski </xsl:otherwise> 69*b1cdbd2cSJim Jagielski </xsl:choose> 70*b1cdbd2cSJim Jagielski </xsl:copy> 71*b1cdbd2cSJim Jagielski </xsl:template> 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski<!-- locale dependent data --> 74*b1cdbd2cSJim Jagielski <xsl:template match="node|prop" mode = "locale"> 75*b1cdbd2cSJim Jagielski <xsl:choose> 76*b1cdbd2cSJim Jagielski <xsl:when test="$locale=$fallback-locale"> 77*b1cdbd2cSJim Jagielski <xsl:if test="descendant::value[@xml:lang=$locale]/../value[not (@xml:lang)]"> 78*b1cdbd2cSJim Jagielski <xsl:copy> 79*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*" mode="locale"/> 80*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "node|prop|value" mode = "locale"/> 81*b1cdbd2cSJim Jagielski </xsl:copy> 82*b1cdbd2cSJim Jagielski </xsl:if> 83*b1cdbd2cSJim Jagielski </xsl:when> 84*b1cdbd2cSJim Jagielski <xsl:otherwise> 85*b1cdbd2cSJim Jagielski <xsl:if test="descendant::value[@xml:lang = $locale]"> 86*b1cdbd2cSJim Jagielski <xsl:copy> 87*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*" mode="locale"/> 88*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "node|prop|value" mode = "locale"/> 89*b1cdbd2cSJim Jagielski </xsl:copy> 90*b1cdbd2cSJim Jagielski </xsl:if> 91*b1cdbd2cSJim Jagielski </xsl:otherwise> 92*b1cdbd2cSJim Jagielski </xsl:choose> 93*b1cdbd2cSJim Jagielski </xsl:template> 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski <xsl:template match="value" mode="locale"> 96*b1cdbd2cSJim Jagielski <xsl:if test="@xml:lang=$locale and not(@install:module)"> 97*b1cdbd2cSJim Jagielski <xsl:copy> 98*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*" mode="locale"/> 99*b1cdbd2cSJim Jagielski <xsl:copy-of select="node()"/> 100*b1cdbd2cSJim Jagielski </xsl:copy> 101*b1cdbd2cSJim Jagielski </xsl:if> 102*b1cdbd2cSJim Jagielski </xsl:template> 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski <xsl:template match = "@*" mode="locale"> 105*b1cdbd2cSJim Jagielski <xsl:copy/> 106*b1cdbd2cSJim Jagielski </xsl:template> 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski <!-- suppress all merge instructions --> 109*b1cdbd2cSJim Jagielski <xsl:template match = "@oor:op" mode="locale"/> 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski <!-- suppress all module markers --> 112*b1cdbd2cSJim Jagielski <xsl:template match = "@install:module" mode="locale"/> 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski<!-- locale independent data --> 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski <!-- handle template references --> 117*b1cdbd2cSJim Jagielski <xsl:template name="copy-resolve-template"> 118*b1cdbd2cSJim Jagielski <xsl:param name = "node-type"/> 119*b1cdbd2cSJim Jagielski <xsl:param name = "schema-type"/> 120*b1cdbd2cSJim Jagielski <xsl:param name = "component-schema"/> 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski <xsl:choose> 123*b1cdbd2cSJim Jagielski <xsl:when test="$schema-type='node-ref'"> 124*b1cdbd2cSJim Jagielski <xsl:apply-templates select="."> 125*b1cdbd2cSJim Jagielski <xsl:with-param name="context" select="$component-schema/templates/*[@oor:name = $node-type]"/> 126*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 127*b1cdbd2cSJim Jagielski </xsl:apply-templates> 128*b1cdbd2cSJim Jagielski </xsl:when> 129*b1cdbd2cSJim Jagielski <xsl:when test="$schema-type='set'"> 130*b1cdbd2cSJim Jagielski <xsl:copy> 131*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*" /> 132*b1cdbd2cSJim Jagielski <xsl:for-each select="node|prop"> 133*b1cdbd2cSJim Jagielski <xsl:apply-templates select="."> 134*b1cdbd2cSJim Jagielski <xsl:with-param name="context" select="$component-schema/templates/*[@oor:name = $node-type]"/> 135*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 136*b1cdbd2cSJim Jagielski </xsl:apply-templates> 137*b1cdbd2cSJim Jagielski </xsl:for-each> 138*b1cdbd2cSJim Jagielski </xsl:copy> 139*b1cdbd2cSJim Jagielski </xsl:when> 140*b1cdbd2cSJim Jagielski <xsl:otherwise> 141*b1cdbd2cSJim Jagielski <xsl:message terminate="yes">ERROR: The schema element for a <xsl:value-of select="$schema-type"/> 142*b1cdbd2cSJim Jagielski should not have a node-type. 143*b1cdbd2cSJim Jagielski </xsl:message> 144*b1cdbd2cSJim Jagielski </xsl:otherwise> 145*b1cdbd2cSJim Jagielski </xsl:choose> 146*b1cdbd2cSJim Jagielski </xsl:template> 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski <xsl:template name="copy-node"> 149*b1cdbd2cSJim Jagielski <xsl:param name = "context"/> 150*b1cdbd2cSJim Jagielski <xsl:param name = "component-schema"/> 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski <xsl:choose> 153*b1cdbd2cSJim Jagielski <!-- look for matching templates in other components --> 154*b1cdbd2cSJim Jagielski <xsl:when test="$context/@oor:node-type and $context/@oor:component"> 155*b1cdbd2cSJim Jagielski <xsl:variable name="fileURL"> 156*b1cdbd2cSJim Jagielski <xsl:call-template name="composeFileURL"> 157*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 158*b1cdbd2cSJim Jagielski <xsl:with-param name="componentName"><xsl:value-of select="$context/@oor:component"/></xsl:with-param> 159*b1cdbd2cSJim Jagielski </xsl:call-template> 160*b1cdbd2cSJim Jagielski </xsl:variable> 161*b1cdbd2cSJim Jagielski <xsl:call-template name="copy-resolve-template"> 162*b1cdbd2cSJim Jagielski <xsl:with-param name="node-type" select="$context/@oor:node-type"/> 163*b1cdbd2cSJim Jagielski <xsl:with-param name="schema-type" select="local-name($context)"/> 164*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="document($fileURL)/oor:component-schema"/> 165*b1cdbd2cSJim Jagielski </xsl:call-template> 166*b1cdbd2cSJim Jagielski </xsl:when> 167*b1cdbd2cSJim Jagielski <!-- look for matching templates within the same component --> 168*b1cdbd2cSJim Jagielski <xsl:when test="$context/@oor:node-type"> 169*b1cdbd2cSJim Jagielski <xsl:call-template name="copy-resolve-template"> 170*b1cdbd2cSJim Jagielski <xsl:with-param name="node-type" select="$context/@oor:node-type"/> 171*b1cdbd2cSJim Jagielski <xsl:with-param name="schema-type" select="local-name($context)"/> 172*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 173*b1cdbd2cSJim Jagielski </xsl:call-template> 174*b1cdbd2cSJim Jagielski </xsl:when> 175*b1cdbd2cSJim Jagielski <xsl:otherwise> 176*b1cdbd2cSJim Jagielski <xsl:copy> 177*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*" /> 178*b1cdbd2cSJim Jagielski <xsl:for-each select="node|prop"> 179*b1cdbd2cSJim Jagielski <xsl:apply-templates select="."> 180*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 181*b1cdbd2cSJim Jagielski <xsl:with-param name="context" select="$context/*[@oor:name = current()/@oor:name]"/> 182*b1cdbd2cSJim Jagielski </xsl:apply-templates> 183*b1cdbd2cSJim Jagielski </xsl:for-each> 184*b1cdbd2cSJim Jagielski </xsl:copy> 185*b1cdbd2cSJim Jagielski </xsl:otherwise> 186*b1cdbd2cSJim Jagielski </xsl:choose> 187*b1cdbd2cSJim Jagielski </xsl:template> 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski <xsl:template match="node"> 190*b1cdbd2cSJim Jagielski <xsl:param name = "context"/> 191*b1cdbd2cSJim Jagielski <xsl:param name = "component-schema"/> 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski <xsl:variable name="applicable-values" select="descendant::value[not (@xml:lang) or (@xml:lang=$fallback-locale) or (@install:module=$module)]"/> 194*b1cdbd2cSJim Jagielski <xsl:variable name="substantive-nodes" select="descendant-or-self::*[(@oor:finalized='true') or (@oor:mandatory='true') or (@oor:op!='modify')]"/> 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski <xsl:choose> 197*b1cdbd2cSJim Jagielski <!-- go ahead, if we are in the active module --> 198*b1cdbd2cSJim Jagielski <xsl:when test="ancestor-or-self::*/@install:module=$module"> 199*b1cdbd2cSJim Jagielski <xsl:if test="$applicable-values | $substantive-nodes"> 200*b1cdbd2cSJim Jagielski <xsl:call-template name="copy-node"> 201*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 202*b1cdbd2cSJim Jagielski <xsl:with-param name="context" select="$context"/> 203*b1cdbd2cSJim Jagielski </xsl:call-template> 204*b1cdbd2cSJim Jagielski </xsl:if> 205*b1cdbd2cSJim Jagielski </xsl:when> 206*b1cdbd2cSJim Jagielski <!-- strip data from wrong module --> 207*b1cdbd2cSJim Jagielski <xsl:when test="ancestor-or-self::*/@install:module"/> 208*b1cdbd2cSJim Jagielski <!-- looking for module --> 209*b1cdbd2cSJim Jagielski <xsl:when test="$module"> 210*b1cdbd2cSJim Jagielski <xsl:if test="($applicable-values | $substantive-nodes)/ancestor-or-self::*/@install:module=$module"> 211*b1cdbd2cSJim Jagielski <xsl:call-template name="copy-node"> 212*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 213*b1cdbd2cSJim Jagielski <xsl:with-param name="context" select="$context"/> 214*b1cdbd2cSJim Jagielski </xsl:call-template> 215*b1cdbd2cSJim Jagielski </xsl:if> 216*b1cdbd2cSJim Jagielski </xsl:when> 217*b1cdbd2cSJim Jagielski <!-- copying non-module data --> 218*b1cdbd2cSJim Jagielski <xsl:otherwise> 219*b1cdbd2cSJim Jagielski <xsl:if test="($applicable-values | $substantive-nodes)[not(ancestor-or-self::*/@install:module)]"> 220*b1cdbd2cSJim Jagielski <xsl:call-template name="copy-node"> 221*b1cdbd2cSJim Jagielski <xsl:with-param name="component-schema" select="$component-schema"/> 222*b1cdbd2cSJim Jagielski <xsl:with-param name="context" select="$context"/> 223*b1cdbd2cSJim Jagielski </xsl:call-template> 224*b1cdbd2cSJim Jagielski </xsl:if> 225*b1cdbd2cSJim Jagielski </xsl:otherwise> 226*b1cdbd2cSJim Jagielski </xsl:choose> 227*b1cdbd2cSJim Jagielski </xsl:template> 228*b1cdbd2cSJim Jagielski 229*b1cdbd2cSJim Jagielski <xsl:template match="prop"> 230*b1cdbd2cSJim Jagielski <xsl:param name = "context"/> 231*b1cdbd2cSJim Jagielski <xsl:choose> 232*b1cdbd2cSJim Jagielski <xsl:when test="$module and not((ancestor-or-self::* | child::value)/@install:module=$module)"/> 233*b1cdbd2cSJim Jagielski <xsl:when test="not($module) and ancestor-or-self::*/@install:module"/> 234*b1cdbd2cSJim Jagielski <xsl:when test="not ($context) or @oor:finalized='true' or @oor:op!='modify'"> 235*b1cdbd2cSJim Jagielski <xsl:copy> 236*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*"/> 237*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "value"/> 238*b1cdbd2cSJim Jagielski </xsl:copy> 239*b1cdbd2cSJim Jagielski </xsl:when> 240*b1cdbd2cSJim Jagielski <xsl:when test="value[not (@xml:lang) or @install:module]"> 241*b1cdbd2cSJim Jagielski <xsl:if test="value[not(@install:module) or @install:module=$module]"> 242*b1cdbd2cSJim Jagielski <!-- copy locale independent values only, if the values differ --> 243*b1cdbd2cSJim Jagielski <xsl:variable name="isRedundant"> 244*b1cdbd2cSJim Jagielski <xsl:call-template name="isRedundant"> 245*b1cdbd2cSJim Jagielski <xsl:with-param name="schemaval" select="$context/value"/> 246*b1cdbd2cSJim Jagielski <xsl:with-param name="dataval" select="value[(not(@xml:lang) or @install:module) and (not(@install:module) or @install:module=$module)]"/> 247*b1cdbd2cSJim Jagielski </xsl:call-template> 248*b1cdbd2cSJim Jagielski </xsl:variable> 249*b1cdbd2cSJim Jagielski <xsl:if test="$isRedundant ='false'"> 250*b1cdbd2cSJim Jagielski <xsl:copy> 251*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*"/> 252*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "value"/> 253*b1cdbd2cSJim Jagielski </xsl:copy> 254*b1cdbd2cSJim Jagielski </xsl:if> 255*b1cdbd2cSJim Jagielski </xsl:if> 256*b1cdbd2cSJim Jagielski </xsl:when> 257*b1cdbd2cSJim Jagielski <xsl:otherwise> 258*b1cdbd2cSJim Jagielski <xsl:copy> 259*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*"/> 260*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "value" mode="fallback-locale"/> 261*b1cdbd2cSJim Jagielski </xsl:copy> 262*b1cdbd2cSJim Jagielski </xsl:otherwise> 263*b1cdbd2cSJim Jagielski </xsl:choose> 264*b1cdbd2cSJim Jagielski </xsl:template> 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski <xsl:template match="value"> 267*b1cdbd2cSJim Jagielski <xsl:choose> 268*b1cdbd2cSJim Jagielski <xsl:when test="@xml:lang and not(@install:module)"/> 269*b1cdbd2cSJim Jagielski <xsl:when test="$module and not(ancestor-or-self::*/@install:module=$module)"/> 270*b1cdbd2cSJim Jagielski <xsl:when test="not($module) and ancestor-or-self::*/@install:module"/> 271*b1cdbd2cSJim Jagielski <xsl:otherwise> 272*b1cdbd2cSJim Jagielski <xsl:copy> 273*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*"/> 274*b1cdbd2cSJim Jagielski <xsl:copy-of select="node()"/> 275*b1cdbd2cSJim Jagielski </xsl:copy> 276*b1cdbd2cSJim Jagielski </xsl:otherwise> 277*b1cdbd2cSJim Jagielski </xsl:choose> 278*b1cdbd2cSJim Jagielski </xsl:template> 279*b1cdbd2cSJim Jagielski 280*b1cdbd2cSJim Jagielski <xsl:template match="value" mode="fallback-locale"> 281*b1cdbd2cSJim Jagielski <xsl:if test="@xml:lang=$fallback-locale and not(@install:module)"> 282*b1cdbd2cSJim Jagielski <xsl:copy> 283*b1cdbd2cSJim Jagielski <xsl:apply-templates select = "@*"/> 284*b1cdbd2cSJim Jagielski <xsl:copy-of select="node()"/> 285*b1cdbd2cSJim Jagielski </xsl:copy> 286*b1cdbd2cSJim Jagielski </xsl:if> 287*b1cdbd2cSJim Jagielski </xsl:template> 288*b1cdbd2cSJim Jagielski 289*b1cdbd2cSJim Jagielski <xsl:template match = "@*"> 290*b1cdbd2cSJim Jagielski <xsl:copy/> 291*b1cdbd2cSJim Jagielski </xsl:template> 292*b1cdbd2cSJim Jagielski 293*b1cdbd2cSJim Jagielski <!-- suppress all merge instructions, that are out-of-module --> 294*b1cdbd2cSJim Jagielski <xsl:template match = "@oor:op"> 295*b1cdbd2cSJim Jagielski <xsl:if test="not($module) or ancestor::*/@install:module"> 296*b1cdbd2cSJim Jagielski <xsl:copy/> 297*b1cdbd2cSJim Jagielski </xsl:if> 298*b1cdbd2cSJim Jagielski </xsl:template> 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski <!-- suppress all module markers --> 301*b1cdbd2cSJim Jagielski <xsl:template match = "@install:module"/> 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski<!-- compares two values --> 304*b1cdbd2cSJim Jagielski <xsl:template name="isRedundant"> 305*b1cdbd2cSJim Jagielski <xsl:param name = "schemaval"/> 306*b1cdbd2cSJim Jagielski <xsl:param name = "dataval"/> 307*b1cdbd2cSJim Jagielski <xsl:choose> 308*b1cdbd2cSJim Jagielski <xsl:when test="not ($dataval)"> 309*b1cdbd2cSJim Jagielski <xsl:value-of select="true()"/> 310*b1cdbd2cSJim Jagielski </xsl:when> 311*b1cdbd2cSJim Jagielski <xsl:when test="$dataval/@oor:external"> 312*b1cdbd2cSJim Jagielski <xsl:value-of select="false()"/> 313*b1cdbd2cSJim Jagielski </xsl:when> 314*b1cdbd2cSJim Jagielski <xsl:when test="not ($schemaval)"> 315*b1cdbd2cSJim Jagielski <xsl:choose> 316*b1cdbd2cSJim Jagielski <xsl:when test="$dataval/@xsi:nil='true'"> 317*b1cdbd2cSJim Jagielski <xsl:value-of select="true()"/> 318*b1cdbd2cSJim Jagielski </xsl:when> 319*b1cdbd2cSJim Jagielski <xsl:otherwise> 320*b1cdbd2cSJim Jagielski <xsl:value-of select="false()"/> 321*b1cdbd2cSJim Jagielski </xsl:otherwise> 322*b1cdbd2cSJim Jagielski </xsl:choose> 323*b1cdbd2cSJim Jagielski </xsl:when> 324*b1cdbd2cSJim Jagielski <xsl:when test="$schemaval != $dataval"> 325*b1cdbd2cSJim Jagielski <xsl:value-of select="false()"/> 326*b1cdbd2cSJim Jagielski </xsl:when> 327*b1cdbd2cSJim Jagielski <xsl:otherwise> 328*b1cdbd2cSJim Jagielski <xsl:value-of select="true()"/> 329*b1cdbd2cSJim Jagielski </xsl:otherwise> 330*b1cdbd2cSJim Jagielski </xsl:choose> 331*b1cdbd2cSJim Jagielski </xsl:template> 332*b1cdbd2cSJim Jagielski 333*b1cdbd2cSJim Jagielski <xsl:template name="composeFileURL"> 334*b1cdbd2cSJim Jagielski <xsl:param name="componentName"/> 335*b1cdbd2cSJim Jagielski <xsl:variable name="fileURL"> 336*b1cdbd2cSJim Jagielski <xsl:value-of select="$schemaRootURL"/>/<xsl:value-of select="translate($componentName,'.','/')"/><xsl:text>.xcs</xsl:text> 337*b1cdbd2cSJim Jagielski </xsl:variable> 338*b1cdbd2cSJim Jagielski <xsl:value-of select="$fileURL"/> 339*b1cdbd2cSJim Jagielski </xsl:template> 340*b1cdbd2cSJim Jagielski 341*b1cdbd2cSJim Jagielski</xsl:transform> 342