buildframework/helium/sf/java/sysdef/demo/data/sf/os/buildtools/bldsystemtools/sysdeftools/lib/joinsysdef-module.xsl
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     1
<?xml version="1.0"?>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     2
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     3
 	xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     4
<!--Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     5
	All rights reserved.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     6
	This component and the accompanying materials are made available
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     7
	under the terms of the License "Eclipse Public License v1.0"
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     8
	which accompanies this distribution, and is available
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
     9
	at the URL "http://www.eclipse.org/legal/epl-v10.html".
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    10
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    11
	Initial Contributors:
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    12
	Nokia Corporation - initial contribution.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    13
	Contributors:
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    14
	Description:
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    15
	XSLT module which contains the logic to join a system definition file
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    16
-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    17
	<!-- save SF namespace as a constant to avoid the risk of typos-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    18
 <xsl:variable name="defaultns">http://www.symbian.org/system-definition</xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    19
 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    20
<!-- create a stand-alone sysdef from a linked set of fragments -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    21
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    22
<xsl:template match="/*" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    23
	<xsl:param name="filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    24
	<xsl:message terminate="yes">ERROR: Cannot process this document<xsl:if test="$filename !=''"> (<xsl:value-of select="$filename"/>)</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    25
		<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    26
			<xsl:when test="self::SystemDefinition/@schema">. Unrecognised syntax schema="<xsl:value-of select="@schema"/>"</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    27
			<xsl:when test="self::SystemDefinition">. Missing schema</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    28
			<xsl:otherwise>. Invalid file type: <xsl:value-of select="name()"/></xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    29
		</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    30
	</xsl:message>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    31
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    32
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    33
<!-- anything in schemas 3.0.x won't add new functional attributes that need processing here, just blindly copy them-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    34
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    35
<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.') and count(*)=1]" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    36
	<xsl:param name="origin" select="/.."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    37
	<xsl:param name="root"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    38
	<xsl:param name="filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    39
	<xsl:param name="namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    40
	<xsl:param name="data" select="/.."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    41
	<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    42
		<xsl:when test="$origin">	<!-- this sysdef fragment was linked from a parent sysdef -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    43
			<xsl:for-each select="*"> <!-- can be only one -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    44
				<xsl:variable name="upid"><xsl:apply-templates select="$origin/@id" mode="my-id"/></xsl:variable>		<!-- namespaceless ID of this in parent doc -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    45
				<xsl:variable name="id"><xsl:apply-templates select="@id" mode="my-id"/></xsl:variable>						<!-- namespaceless ID of this here -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    46
				<xsl:variable name="upns"><xsl:apply-templates select="$origin/@id" mode="my-namespace"/></xsl:variable>	<!-- ID's namespace in parent doc -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    47
				<xsl:variable name="ns"><xsl:apply-templates select="@id" mode="my-namespace"/></xsl:variable>	<!-- ID's namespace -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    48
				<xsl:if test="$id!=$upid or $ns!=$upns">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    49
					<xsl:message terminate="yes">ERROR: Linked ID "<xsl:value-of select="$id"/>" (<xsl:value-of select="$ns"/>) must match linking document "<xsl:value-of select="$upid"/>" (<xsl:value-of select="$upns"/>)</xsl:message>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    50
				</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    51
				<!-- copy any attributes not already defined (parent doc overrides child doc)-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    52
				<xsl:for-each select="@*">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    53
					<xsl:variable name="n" select="name()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    54
					<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    55
						<xsl:when test="$n='id'"/> <!-- never copy this, always set -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    56
						<xsl:when test="$origin/@*[name()=$n]"> <!-- don't copy if already set -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    57
							<xsl:message>Note: Cannot set "<xsl:value-of select="$n"/>", already set on <xsl:value-of select="$origin/@id"/>. Ignoring linked value</xsl:message>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    58
						</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    59
						<xsl:when test="$n='before' or $n='replace'">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    60
							<!-- ensure ns is correct (if any future attribtues will ever use an ID, process it here too)-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    61
							<xsl:apply-templates select="." mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    62
								<xsl:with-param name="namespaces" select="$namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    63
							</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    64
						</xsl:when> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    65
						<xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise> <!-- just copy anything else -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    66
					</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    67
				</xsl:for-each>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    68
				<xsl:copy-of select="../namespace::*[not(.=$namespaces)]"/> <!-- set any namespaces not already set (they should all alreayd be, but some XSLT processors are quirky) -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    69
			 	<xsl:apply-templates select="$data" mode="overlay-attributes">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    70
					<xsl:with-param name="item" select="current()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    71
				</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    72
				<xsl:variable name="content">									
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    73
					<xsl:apply-templates select="*|comment()" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    74
						<xsl:with-param name="root" select="$root"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    75
						<xsl:with-param name="filename" select="$filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    76
						<xsl:with-param name="data" select="$data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    77
						<xsl:with-param name="namespaces" select="$namespaces | ../namespace::*[not(.=$namespaces)]"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    78
					</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    79
				</xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    80
				<xsl:apply-templates select="." mode="is-content-filtered"> <!-- optionally add filtered="yes" if some content has been removed -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    81
					<xsl:with-param name="content" select="$content"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    82
				</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    83
			 	<xsl:apply-templates select="$data" mode="overlay-meta">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    84
					<xsl:with-param name="item" select="current()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    85
				</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    86
				<xsl:copy-of select="$content"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    87
			</xsl:for-each>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    88
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    89
		<xsl:when test="function-available('exslt:node-set')"> <!-- this is the root element of a root sysdef -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    90
			<!--try to put all namespaces in root element -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    91
			<xsl:variable name="nss">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    92
				<!-- contains node set of namespaces to add to root element.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    93
					May panic if there are too many single-letter namespaces and this can't create a new one -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    94
				<xsl:call-template name="needed-namespaces">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    95
					<xsl:with-param name="foundns">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    96
						<xsl:apply-templates select="//*[(self::component or self::collection or self::package or self::layer) and @href]" mode="scan-for-namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    97
					</xsl:with-param>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    98
				</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
    99
			</xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   100
			<xsl:variable name="ns" select="@id-namespace | namespace::* | exslt:node-set($nss)/*"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   101
			<xsl:copy><xsl:copy-of select="@*[name()!='schema']"/><xsl:call-template name="set-schema"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   102
				<xsl:apply-templates select="self::*[not(@id-namespace)]" mode="add-id-ns"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   103
				<xsl:for-each select="exslt:node-set($nss)/*"> <!-- add namespace definitions -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   104
					<xsl:attribute name="xmlns:{name()}">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   105
						<xsl:value-of select="."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   106
					</xsl:attribute>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   107
				</xsl:for-each>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   108
				<!-- no need to call is-content-filtered, it never will be from this element --> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   109
				<xsl:apply-templates select="*|comment()" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   110
					<xsl:with-param name="namespaces" select="$ns"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   111
					<xsl:with-param name="root" select="$root"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   112
					<xsl:with-param name="data" select="$data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   113
					<xsl:with-param name="filename" select="$filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   114
				</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   115
			</xsl:copy>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   116
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   117
		<xsl:otherwise> <!-- can't handle node-set() so put the namespaces in the document instead of the root element-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   118
			<xsl:variable name="ns" select="@id-namespace | namespace::*"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   119
			<xsl:copy><xsl:copy-of select="@*[name()!='schema']"/><xsl:call-template name="set-schema"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   120
				<!-- no need to call is-content-filtered, it never will be from this element -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   121
				<xsl:apply-templates select="*|comment()" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   122
					<xsl:with-param name="namespaces" select="$ns"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   123
					<xsl:with-param name="root" select="$root"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   124
					<xsl:with-param name="data" select="$data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   125
					<xsl:with-param name="filename" select="$filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   126
				</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   127
			</xsl:copy>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   128
		</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   129
	</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   130
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   131
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   132
<xsl:template match="*" mode="scan-for-namespaces"/> <!-- just in case of errors, consider replacing by terminate -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   133
<xsl:template match="*[@href and not(self::meta)]" mode="scan-for-namespaces">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   134
	<!-- produce a list of namespace-prefix namespace pairs separated by newlines, in reverse order found in documents 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   135
		reverse order so we can try to use the first namespace prefix defined if it's available-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   136
	<xsl:variable name="linked" select="document(@href,.)/*"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   137
	<xsl:for-each select="$linked">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   138
		<xsl:apply-templates select="//*[(self::component or self::collection or self::package or self::layer) and @href]" mode="scan-for-namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   139
		<xsl:for-each select="//namespace::* | @id-namespace">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   140
			<xsl:value-of select="concat(name(),' ',.,'&#xa;')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   141
		</xsl:for-each>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   142
	</xsl:for-each>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   143
	<xsl:if test="not($linked)">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   144
	<xsl:message>Note: The link to <xsl:value-of select="@href"/> from <xsl:value-of select="concat(name(),' ',@id)"/> could not be resolved. Perhaps there's an error in the XML?</xsl:message>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   145
	</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   146
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   147
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   148
<xsl:template name="needed-namespaces">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   149
	<xsl:param name="foundns"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   150
	<xsl:param name="usedpre"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   151
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   152
	<xsl:if test="$foundns!=''">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   153
		<xsl:variable name="line" select="substring-before($foundns,'&#xa;')"/> <!-- always has trailing newline -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   154
		<xsl:variable name="name" select="substring-after($line,' ')"/> <!-- namespace prefix -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   155
		<xsl:variable name="remainder" select="substring-after($foundns,'&#xa;')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   156
		<xsl:variable name="newprefix">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   157
			<xsl:if test="not(contains(concat('&#xa;',$remainder),concat('&#xa;',$line,'&#xa;'))) and
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   158
				not(//namespace::*[.=$name] or @id-namespace[.=$name] or (not(@id-namespace) and $defaultns=$name))">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   159
						<xsl:apply-templates select="." mode="ns-prefix">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   160
							<xsl:with-param name="ns" select="$name"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   161
							<xsl:with-param name="pre" select="substring-before($line,' ')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   162
							<xsl:with-param name="dontuse" select="$usedpre"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   163
						</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   164
			</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   165
		</xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   166
		<xsl:if test="$newprefix!=''">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   167
			<!-- can treat this as if it were a namespace node -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   168
			<xsl:element name="{$newprefix}">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   169
				<xsl:value-of select="$name"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   170
			</xsl:element>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   171
		</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   172
		<xsl:if test="$remainder!=''">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   173
			<xsl:call-template name="needed-namespaces">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   174
				<xsl:with-param name="foundns" select="$remainder"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   175
				<xsl:with-param name="usedpre" select="concat($usedpre,' ',$newprefix,' ')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   176
			</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   177
		</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   178
	</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   179
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   180
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   181
<xsl:template match="/SystemDefinition" mode="ns-prefix">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   182
	<!-- should be able to replace this with mechanism that uses the XSLT processor's own ability to generate namespaces -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   183
	<xsl:param name="ns"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   184
	<xsl:param name="pre"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   185
	<xsl:param name="dontuse"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   186
	<xsl:param name="chars">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</xsl:param>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   187
	<xsl:variable name="name" select="substring(substring-after($ns,'http://www.'),1,1)"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   188
	<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   189
		<xsl:when test="$pre!='' and $pre!='id-namespace' and not(//namespace::*[name()=$pre]) and not(contains($dontuse,concat(' ',$pre,' ')))">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   190
			<xsl:value-of select="$pre"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   191
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   192
		<xsl:when test="$ns='' and $chars=''">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   193
			<xsl:message terminate="yes">ERROR: Cannot create namespace prefix for downstream default namespace in <xsl:value-of select="*/@id"/></xsl:message>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   194
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   195
		<xsl:when test="$name!='' and not(contains($dontuse,concat(' ',$name,' ')))"><xsl:value-of select="$name"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   196
		<xsl:when test="namespace::*[name()=substring($chars,1,1)] or contains($dontuse,concat(' ',substring($chars,1,1),' '))">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   197
			<xsl:apply-templates mode="ns-prefix">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   198
				<xsl:with-param name="chars" select="substring($chars,2)"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   199
			</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   200
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   201
		<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   202
			<xsl:value-of select="substring($chars,1,1)"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   203
		</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   204
	</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   205
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   206
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   207
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   208
<!-- schema handling -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   209
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   210
<xsl:template name="set-schema">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   211
<xsl:attribute name="schema">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   212
	<xsl:apply-templates mode="my-schema" select="/SystemDefinition"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   213
</xsl:attribute>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   214
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   215
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   216
<xsl:template name="compare-versions"><xsl:param name="v1"/><xsl:param name="v2"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   217
			<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   218
				<xsl:when test="$v1=$v2"><xsl:value-of select="$v1"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   219
				<xsl:when test="substring-before($v1,'.') &gt; substring-before($v2,'.')"><xsl:value-of select="$v1"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   220
				<xsl:when test="substring-before($v1,'.') &lt; substring-before($v2,'.')"><xsl:value-of select="$v2"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   221
				<xsl:when test="substring-before(substring-after($v1,'.'),'.') &gt; substring-before(substring-after($v2,'.'),'.')"><xsl:value-of select="$v1"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   222
				<xsl:when test="substring-before(substring-after($v1,'.'),'.') &lt; substring-before(substring-after($v2,'.'),'.')"><xsl:value-of select="$v2"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   223
				<xsl:when test="substring-after(substring-after($v1,'.'),'.') &gt; substring-after(substring-after($v2,'.'),'.')"><xsl:value-of select="$v1"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   224
				<xsl:when test="substring-after(substring-after($v1,'.'),'.') &lt; substring-after(substring-after($v2,'.'),'.')"><xsl:value-of select="$v2"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   225
				<xsl:otherwise><xsl:value-of select="$v1"/></xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   226
			</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   227
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   228
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   229
<xsl:template name="compare-version-list"><xsl:param name="list"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   230
	<xsl:variable name="cur" select="substring-before($list,' ')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   231
	<xsl:variable name="remaining" select="substring-after($list,' ')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   232
	<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   233
		<xsl:when test="$remaining=''"><xsl:value-of select="$cur"/></xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   234
		<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   235
			<xsl:variable name="nextbig">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   236
				<xsl:call-template name="compare-version-list">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   237
					<xsl:with-param name="list" select="$remaining"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   238
				</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   239
			</xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   240
			<xsl:call-template name="compare-versions">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   241
				<xsl:with-param name="v1" select="$cur"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   242
				<xsl:with-param name="v2" select="$nextbig"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   243
			</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   244
		</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   245
	</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   246
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   247
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   248
<xsl:template match="/SystemDefinition" mode="my-schema"><xsl:param name="biggest" select="@schema"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   249
	<xsl:variable name="linked" select="//*[(self::component or self::collection or self::package or self::layer) and @href]"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   250
	<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   251
		<xsl:when test="not($linked)"> <!-- no need to go further -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   252
			<xsl:call-template name="compare-versions">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   253
				<xsl:with-param name="v1" select="@schema"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   254
				<xsl:with-param name="v2" select="$biggest"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   255
			</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   256
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   257
		<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   258
				<xsl:call-template name="compare-version-list">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   259
					<xsl:with-param name="list">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   260
						<xsl:for-each select="$linked">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   261
						<xsl:call-template name="compare-versions">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   262
							<xsl:with-param name="v1">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   263
								<xsl:apply-templates mode="my-schema" select="document(@href,.)/*"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   264
							</xsl:with-param>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   265
							<xsl:with-param name="v2" select="$biggest"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   266
						</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   267
						<xsl:text> </xsl:text>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   268
					</xsl:for-each>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   269
				</xsl:with-param>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   270
				</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   271
		</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   272
	</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   273
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   274
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   275
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   276
<xsl:template match="unit" mode="join">	<xsl:param name="root"/><xsl:param name="filename"/><xsl:param name="data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   277
	 <xsl:variable name="display">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   278
	 	<xsl:apply-templates select="$data" mode="filter">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   279
			<xsl:with-param name="item" select="current()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   280
		</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   281
	 </xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   282
	 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   283
	 <xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->	 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   284
		<xsl:element name="{name()}">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   285
			<xsl:apply-templates select="@*" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   286
				<xsl:with-param name="root" select="$root"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   287
				<xsl:with-param name="filename" select="$filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   288
			</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   289
		</xsl:element>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   290
	</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   291
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   292
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   293
<!-- override mode="meta" to translate metadata sections. By default, include -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   294
<xsl:template match="meta" priority="2" mode="join"><xsl:param name="data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   295
	 <xsl:variable name="display">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   296
	 	<xsl:apply-templates select="$data" mode="filter">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   297
			<xsl:with-param name="item" select="current()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   298
		</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   299
	 </xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   300
	 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   301
	<xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->	
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   302
		<xsl:apply-templates select="." mode="meta"> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   303
			<xsl:with-param name="display" select="$display"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   304
			<xsl:with-param name="data" select="$data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   305
		</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   306
	</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   307
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   308
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   309
<xsl:template match="meta[@rel='link-mapping']" priority="3" mode="join"/> <!--these are only used in the joining process, so remove from output -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   310
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   311
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   312
<xsl:template match="*" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   313
	<xsl:param name="root"/><xsl:param name="filename"/><xsl:param name="namespaces"/><xsl:param name="data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   314
	<!-- get attribtues from overlay -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   315
	<!-- test for presence, if filtered out, just return -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   316
	<!-- test for children, if it has some, but they're filtered out, either return or leave as empty, dependening on filter rule
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   317
		if had items and now has none, options:
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   318
			still has meta: keep / delete
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   319
			still has comments: keep / delete 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   320
	 -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   321
	 <xsl:variable name="display">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   322
	 	<xsl:apply-templates select="$data" mode="filter">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   323
			<xsl:with-param name="item" select="current()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   324
		</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   325
	 </xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   326
	 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   327
	 <xsl:if test="$display != 'hide' "> <!-- if hide, remove completely from the output-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   328
		 <xsl:variable name="href">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   329
		 	<xsl:apply-templates select="." mode="link">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   330
				<xsl:with-param name="data" select="$data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   331
			</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   332
		 </xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   333
	 		 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   334
		<xsl:element name="{name()}"> <!-- use this instead of <copy> so xalan doesn't add extra wrong namespaces -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   335
			<xsl:apply-templates select="@*" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   336
				<xsl:with-param name="namespaces" select="$namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   337
			</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   338
			<xsl:if test="$display != '' ">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   339
				<!-- custom attribute to indicate how this is to be represented. Blank indicates normal, hide removes from the output (see above), anything else is put in the attribute --> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   340
				<xsl:attribute name="display"><xsl:value-of select="$display"/></xsl:attribute>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   341
			</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   342
		 	<xsl:apply-templates select="$data" mode="overlay-attributes">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   343
				<xsl:with-param name="item" select="current()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   344
			</xsl:apply-templates>			
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   345
			<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   346
				<xsl:when test="$href !='' ">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   347
					<xsl:variable name="prefixmap" select="ancestor::SystemDefinition/*/meta[@rel='link-mapping']/map-prefix[starts-with($href,@link)]"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   348
					<xsl:variable name="origin" select="."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   349
					<xsl:apply-templates select="document($href,.)/*" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   350
						<xsl:with-param name="origin" select="$origin"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   351
						<xsl:with-param name="data" select="$data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   352
						<xsl:with-param name="namespaces" select="$namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   353
						<xsl:with-param name="filename">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   354
							<xsl:call-template name="joinpath">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   355
								<xsl:with-param name="file" select="$filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   356
								<xsl:with-param name="rel">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   357
									<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   358
										<xsl:when test="$prefixmap">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   359
											<xsl:value-of select="$prefixmap/@to"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   360
											<xsl:value-of select="substring-after($href,$prefixmap/@link)"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   361
										</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   362
										<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   363
											<xsl:value-of select="$href"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   364
										</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   365
									</xsl:choose>								
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   366
								 </xsl:with-param>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   367
							</xsl:call-template>					
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   368
						</xsl:with-param>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   369
						<xsl:with-param name="root">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   370
							<xsl:value-of select="$root"/>/<xsl:call-template name="lastbefore">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   371
								<xsl:with-param name="string" select="$href"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   372
							</xsl:call-template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   373
						</xsl:with-param>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   374
					</xsl:apply-templates> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   375
				</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   376
				<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   377
					<xsl:variable name="content">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   378
						<xsl:apply-templates select="*|comment()" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   379
							<xsl:with-param name="root" select="$root"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   380
							<xsl:with-param name="filename" select="$filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   381
							<xsl:with-param name="namespaces" select="$namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   382
							<xsl:with-param name="data" select="$data"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   383
						</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   384
					</xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   385
					<xsl:apply-templates select="." mode="is-content-filtered"> <!-- add filtered="yes" if some content has been removed -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   386
						<xsl:with-param name="content" select="$content"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   387
					</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   388
				 	<xsl:apply-templates select="$data" mode="overlay-meta">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   389
						<xsl:with-param name="item" select="current()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   390
					</xsl:apply-templates>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   391
					<xsl:copy-of select="$content"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   392
				</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   393
			</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   394
		</xsl:element>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   395
	</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   396
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   397
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   398
<!-- By default, do nothing. Can override template to add filtered="yes" if need to track what's a placeholder and what's been filtered 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   399
	implement with param name="content"
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   400
-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   401
<xsl:template mode="is-content-filtered" match="*" priority="-2"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   402
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   403
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   404
<xsl:template match="@mrp[starts-with(.,'/')] | @bldFile[starts-with(.,'/')] | @base[starts-with(.,'/')]" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   405
	<xsl:copy-of select="."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   406
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   407
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   408
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   409
<xsl:template match="@mrp|@bldFile|@base" mode="join">	<xsl:param name="root"/><xsl:param name="filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   410
	<xsl:attribute name="{name()}">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   411
		<xsl:call-template name="joinpath">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   412
			<xsl:with-param name="file" select="$filename"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   413
			<xsl:with-param name="rel" select="."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   414
		</xsl:call-template>	
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   415
	</xsl:attribute>	
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   416
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   417
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   418
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   419
<xsl:template match="@href" mode="join"/> <!--never copy this into the generated doc, that's the whole point of this module -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   420
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   421
<xsl:template match="@*" mode="my-namespace"> <!-- the namespace of an ID -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   422
	<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   423
		<xsl:when test="contains(.,':')">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   424
			<xsl:value-of select="ancestor::*/namespace::*[name()=substring-before(current(),':')]"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   425
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   426
		<xsl:when test="/SystemDefinition/@id-namespace">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   427
			<xsl:value-of select="/SystemDefinition/@id-namespace"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   428
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   429
		<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   430
			<xsl:value-of select="$defaultns"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   431
		</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   432
	</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   433
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   434
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   435
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   436
<xsl:template match="@*" mode="my-id"> <!-- the ID with namespace prefix removed -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   437
	<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   438
		<xsl:when test="contains(.,':')">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   439
			<xsl:value-of select="substring-after(.,':')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   440
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   441
		<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   442
			<xsl:value-of select="."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   443
		</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   444
	</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   445
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   446
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   447
<xsl:template match="*" mode="err-path">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   448
<xsl:if test="../@id">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   449
	<xsl:apply-templates select=".." mode="err-path"/>/</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   450
<xsl:value-of select="@id"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   451
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   452
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   453
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   454
<xsl:template match="@id|@before|@replace" mode="join">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   455
	<xsl:param name="namespaces"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   456
	<!-- this will change the namespace prefixes for all IDs to match the root document -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   457
	<xsl:variable name="ns">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   458
		<xsl:apply-templates select="." mode="my-namespace"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   459
	</xsl:variable>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   460
	<xsl:if test="$ns=''">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   461
		<xsl:message terminate="yes">ERROR: Could not find namespace for <xsl:value-of select="name()"/> "<xsl:value-of select="."/>" in <xsl:apply-templates select="../.." mode="err-path"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   462
		<xsl:text>&#xa;</xsl:text>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   463
		</xsl:message>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   464
	</xsl:if>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   465
	<xsl:variable name="prefix" select="name($namespaces[.=$ns])"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   466
	<xsl:attribute name="{name()}">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   467
	<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   468
		<xsl:when test="$prefix = 'id-namespace' or  (not($namespaces[name()='id-namespace']) and $ns=$defaultns)"/> <!-- it's the default namespace, no prefix -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   469
		<xsl:when test="$prefix='' and contains(.,':')">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   470
			<!-- complex: copy id and copy namespace (namespace should be copied already)-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   471
			<xsl:value-of select="."/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   472
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   473
		<xsl:when test="$prefix='' and $ns=$defaultns"/> <!-- no prefix and it's the default --> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   474
		<xsl:when test="$prefix!=''">			<!-- just change the prefix -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   475
			<xsl:value-of select="concat($prefix,':')"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   476
		</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   477
		<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   478
		<xsl:message terminate="yes">ERROR: Joining error in resolving namespace for <xsl:value-of select="name()"/> "<xsl:value-of select="."/>" in <xsl:apply-templates select="../.." mode="err-path"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   479
		<xsl:text>&#xa;</xsl:text></xsl:message>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   480
		</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   481
	</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   482
		<xsl:apply-templates select="." mode="my-id"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   483
	</xsl:attribute>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   484
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   485
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   486
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   487
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   488
<xsl:template match="@*|comment()" mode="join"><xsl:copy-of select="."/></xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   489
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   490
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   491
<xsl:include href="path-module.xsl"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   492
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   493
<!-- overridable templates follow -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   494
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   495
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   496
<xsl:template match="*" mode="filter" priority="-9"/> <!-- by default show --> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   497
<xsl:template match="*" mode="overlay-attributes" priority="-9"/> <!-- by default do nothing --> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   498
<xsl:template match="*" mode="overlay-meta" priority="-9"/> <!-- by default do nothing --> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   499
<xsl:template match="/SystemDefinition" mode="add-id-ns" priority="-9"/> <!-- some tools may have an easier job if this were always present, but, by default, assume it can just stay implied -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   500
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   501
<xsl:template match="*" mode="link" priority="-1"> <!-- can be overriden to allow custom changes to href values --> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   502
<xsl:value-of select="@href"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   503
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   504
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   505
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   506
<xsl:template match="*" mode="meta" priority="-9"><xsl:param name="data"/><xsl:param name="display"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   507
	<xsl:element name="{name()}">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   508
		<xsl:copy-of select="@*[name()!='href']"/> <!-- copy all attributes as is, always drop href -->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   509
		<xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   510
			<xsl:when test="$display='local' and @href and contains(@href,':') and not(starts-with(@href,'file:'))">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   511
				<!-- non-local URL: only want local URLs, so keep href as is-->
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   512
				<xsl:copy-of select="@href"/> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   513
			</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   514
			<xsl:when test="@href">
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   515
				<xsl:copy-of select="document(@href,.)/*"/> 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   516
			</xsl:when>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   517
			<xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   518
				<xsl:copy-of select="*|comment()"/>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   519
			</xsl:otherwise>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   520
		</xsl:choose>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   521
	</xsl:element>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   522
</xsl:template>
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   523
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   524
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents:
diff changeset
   525
</xsl:stylesheet>