[xsl] Another XSL Structure/Template Problem...

Subject: [xsl] Another XSL Structure/Template Problem...
From: "John Liebermann" <ahsan_hussain@xxxxxxxxxxxxx>
Date: Sat, 23 Aug 2003 00:10:05 -0700
Attached are the XML and XSL files:

Everything works perfectly fine. I use a set of templates to generate a
tree. And another set of templates to put descriptions below the tree.

As you can see from the output HTML , Data Containers such as LookIn,
Options, IncludeInSearch and ServiceInfo are not hyper-links to any
description at the bottom. I would like them to be hyperlinks and also have
their descriptions at the bottom just like i have for all my other fields
such as searchFor, projectName, packageName etc etc. For this i tried
following the same format i used to HSString or HSInteger with mode="target"
thinking i could apply the same rules to put a description at the bottom
just like other fields but this doesn't work.

Another problem i have is in the tree itself. Somehow, my xsl is putting
descriptions of Data Containers e.g LookIn after its puts its name in the
tree. I am not able to get rid of these descriptions. I do not want any such
descriptions in the tree.

The best thing to do would be to load these files into Xselerator or any
other xsl editor and see the html output.

Any help or hints would be greatly appreciated.

Regards,

John

***********************
XML:
***********************

<HSContract contractCategory="2" contractName="FindWebServices"
contractType="1" expirationDate="Apr-23-2013" id="2_400_9735012853"
limitMaxConcurrentThreads="false" logEnabled="true" maxConcurrentThreads="2"
revision="2_45" runBatchInParallel="false" startDate="Apr-23-2003">

  <imagePath />

  <HSDataContainerType list="true" name="Inputs" required="true" revision=""
systype="true">

 		<HSString name="searchFor" required="true" xmlNodeType="1">
 			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ This is the search text that is used to find Web
services.]]>
  				</shortDescription>
  			</HSDocumentation>
 		</HSString>

 		<HSDataContainerType name="LookIn" optionalOrigin="true" revision="">
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The search can be restricted to a particular  project or
package on a NextAxiom server.
 						]]>
  				</shortDescription>
  			</HSDocumentation>

 		<HSString name="projectName" xmlNodeType="1">
  			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The full name of the NextAxiom project to search  in.  This
is an optional input.  Note that the possible choices for this input can be
retrieved by using a Web service that returns all project names on a
NextAxiom server.
  						]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSString>

 		<HSString name="packageName" xmlNodeType="1">
 			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The full path name of the NextAxiom package to search  in.
Packages are similar to 'folders' on a file system; they are used to group
web services into logical categories.  Packages can be nested to any depth.
The path separator for a packages is a period ('.').
							This is an optional input.  Note that the possible choices for this
input can be retrieved by using a Web service that returns all package names
for a given project on a NextAxiom server.
					]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSString>

	</HSDataContainerType>

	<HSDataContainerType name="Options" optionalOrigin="true" revision="">

 		<HSDocumentation>
 			<shortDescription>
 				<![CDATA[ Optional search options
  					]]>
  			</shortDescription>
  		</HSDocumentation>

 		<HSBoolean name="caseSensitive" xmlNodeType="1">
  			<DefaultValue>false</DefaultValue>
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ If the value is true, then the search is case-sensitive.  If
the value is false, then the search is case-insensitive.
  					]]>
				</shortDescription>
  			</HSDocumentation>
  		</HSBoolean>

  	</HSDataContainerType>

 	<HSDataContainerType name="IncludeInSearch" optionalOrigin="true"
revision="">
 		<HSDocumentation>
 			<shortDescription>
 				<![CDATA[ These inputs are used to restrict the search. They  are all
optional inputs, that default to 'true' if no value is supplied.
  					]]>
  			</shortDescription>
  		</HSDocumentation>

 		<HSBoolean name="serviceName" xmlNodeType="1">
  		<DefaultValue>true</DefaultValue>
 			<HSDocumentation>
				<shortDescription>
 					<![CDATA[ If this is true, then a web service must contain the search
text in it's name to pass the criteria.
  					]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSBoolean>
 		<HSBoolean name="documentation" xmlNodeType="1">
  			<DefaultValue>true</DefaultValue>
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ If this is true, then a web service must contain the search
text in it's documentation to pass the criteria.
  						]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSBoolean>
 		<HSBoolean name="keywords" xmlNodeType="1">
  			<DefaultValue>true</DefaultValue>
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ If this is true, then a web service must contain the search
text in one of it's keywords to pass the criteria.
  					]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSBoolean>
 		<HSBoolean name="serviceInputs" xmlNodeType="1">
  			<DefaultValue>true</DefaultValue>
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ If this is true, then a web service must contain the search
text in it's inputs to pass the criteria.
  					]]>
  				</shortDescription>
  			</HSDocumentation>
		</HSBoolean>
 		<HSBoolean name="serviceOutputs" xmlNodeType="1">
  			<DefaultValue>true</DefaultValue>
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ If this is true, then a web service must contain the search
text in it's outputs to pass the criteria.
  					]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSBoolean>

	</HSDataContainerType>
  </HSDataContainerType>


 <HSDataContainerType list="true" name="Outputs" required="true" revision=""
systype="true">

 	<HSDataContainerType id="274877906956" list="true" name="ServiceInfo"
optionalOrigin="true" revision="">
 		<HSDocumentation>
 			<shortDescription>
 				<![CDATA[ This is a list of information of each service that was found
by the search.
  				]]>
  			</shortDescription>
  		</HSDocumentation>

 		<HSString name="id" required="true" xmlNodeType="1">
 			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The unique NextAxiom identifier for the Web service.
 						]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSString>

 		<HSString name="name" required="true" xmlNodeType="1">
  			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The name of the Web service]]>
  				</shortDescription>
  			</HSDocumentation>
		</HSString>

 		<HSString name="shortDescription" xmlNodeType="1">
  			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The short decription documentation of the Web service
  					]]>
				</shortDescription>
			</HSDocumentation>
  		</HSString>

 		<HSString name="projectName" required="true" xmlNodeType="1">
  			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The name of the project where the Web service exists]]>
				</shortDescription>
			</HSDocumentation>
  		</HSString>

 		<HSString name="packageName" required="true" xmlNodeType="1">
  			<DefaultValue />
 			<HSDocumentation>
 				<shortDescription>
 					<![CDATA[ The full path name of the package where the Web service
exists]]>
  				</shortDescription>
  			</HSDocumentation>
  		</HSString>

  	</HSDataContainerType>
  </HSDataContainerType>

</HSContract>

****************************************************************
XSL:
***************************************************************

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

	<xsl:template match="HSContract">
		<html>
			<head>
				<title/>
			</head>
			<body>
				<font face="Arial">
				<p>
					<b>Service Name: </b>
					<xsl:value-of select="@contractName"/>
					<br />
					<b>Start Date: </b>
					<xsl:value-of select="@startDate"/>
					<br />
					<b>Expiration Date: </b>
					<xsl:value-of select="@expirationDate"/>
					<br />
				</p>
				<xsl:apply-templates select="HSDocumentation" />
				<!-- <keyword> is all taken care of in here -->
				<b>Search Keyword: </b>
				<br />
				<xsl:for-each select="keyword">
					<xsl:choose>
						<xsl:when test="normalize-space(text())=''">None
							<br />
						</xsl:when>
						<xsl:otherwise>
							<xsl:value-of select="text()"/>
							<br />
						</xsl:otherwise>
					</xsl:choose>
				</xsl:for-each>
				<br />
				<br />
				<!-- TEMPLATES FOR Tree Generation-->
				<xsl:apply-templates select="HSDataContainerType[@name='Inputs']" mode =
"treeGeneration"/>
				<xsl:apply-templates select="HSDataContainerType[@name='Outputs']"  mode
= "treeGeneration"/>
				<xsl:apply-templates select="HSDataContainerType[@name='Inputs']" mode =
"dataTypeDetail"/>
				<xsl:apply-templates select="HSDataContainerType[@name='Outputs']"  mode
= "dataTypeDetail"/>
				</font>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="HSDataContainerType[contains(@name, 'Inputs')]" mode =
"treeGeneration">
		<img src="dcopenicon.gif">
			<a href="#in">
				<b>
					<xsl:value-of select="@name"/>
				</b>
			</a>
		</img>
		<div style="margin-left: 3em;">
			<xsl:apply-templates select="*"/>
		</div>
	</xsl:template>

	<xsl:template match="HSDataContainerType[contains(@name, 'Inputs')]" mode =
"dataTypeDetail">
		<br />
		<b>
			<a name="in">Inputs Descriptions</a>
		</b>
		<br />
		<br />
		<xsl:apply-templates select="*" mode="target" />
	</xsl:template>

	<xsl:template match="HSDataContainerType[contains(@name, 'Outputs')]" mode
= "treeGeneration">
		<img src="dcopenicon.gif">
			<a href="#out">
				<b>
					<xsl:value-of select="@name"/>
				</b>
			</a>
		</img>
		<div style="margin-left: 3em;">
			<xsl:apply-templates select="*"/>
		</div>
	</xsl:template>

	<xsl:template match="HSDataContainerType[contains(@name, 'Outputs')]" mode
= "dataTypeDetail">
		<br />
		<b>
			<a name="out">Outputs Descriptions</a>
		</b>
		<br />
		<br />
		<xsl:apply-templates select="*" mode="target" />
	</xsl:template>


	<xsl:template match="HSDataContainerType">
		<b>
			<img src="dcopenicon.gif">
				<xsl:value-of select="@name"/>
			</img>
			<br />
		</b>
		<div style="margin-left: 3em;">
			<xsl:apply-templates select="*"/>
		</div>
	</xsl:template>

	<xsl:template match="HSString">
		<img src="texticon.gif">
			<a href="#{generate-id(.)}">
				<xsl:value-of select="@name" />
			</a>
			<br />
		</img>
	</xsl:template>

	<xsl:template match="HSString" mode="target">
		<img src="texticon.gif">
			<a name="{generate-id(.)}">
				<b>
					<xsl:comment>Accessing the parent nodes...</xsl:comment>
					<xsl:for-each select="ancestor::*">
						<xsl:choose>
							<xsl:when test="contains(@name, 'Inputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Outputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Settings')"></xsl:when>
							<xsl:otherwise>
								<xsl:if test="not(position()='1')">
									<xsl:value-of select="@name" />/
								</xsl:if>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:for-each>
					<xsl:value-of select="@name" />
				</b>
			</a>
		</img>
		<br />
		<!-- Handle HSDocumentation inside a dataContainer in here -->
		<xsl:text>Description: </xsl:text>
		<xsl:choose>
			<xsl:when test="normalize-space(HSDocumentation) = ''">
				None
				<br />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="HSDocumentation" />
				<br />
			</xsl:otherwise>
		</xsl:choose>
		<xsl:text>Required: </xsl:text>
		<xsl:choose>
			<xsl:when test="contains(@required, 'true')">
				Yes
				<br />
			</xsl:when>
			<!-- if optional, then default value exists or doesn't exist-->
			<xsl:otherwise>No
				<br />
				Default Value:
				<!--if default tag has some value, display otherwise say "No Default
Value"-->
				<xsl:choose>
					<xsl:when test="normalize-space(DefaultValue) = ''">
						None
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="DefaultValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:choose>
			<xsl:when test="contains(@restrictType, '1')">
				<!-- if restrictType = 1 then display restrictions-->
   				Only the following values are allowed:
				<xsl:for-each select="restrictedValue">
					<xsl:value-of select="text()" />&#160;
				</xsl:for-each>
				<br />
			</xsl:when>
			<xsl:when test="contains(@restrictType, '2')">
				<xsl:for-each select="restrictedValue">
					<xsl:if test="(position() = 1) and text()">
    					Min Number of Characters:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 1) and not(text())">
    					Min Number of Characters: None
						<br/>
					</xsl:if>
					<xsl:if test="(position() = 2) and text()">
    					Max Number of Characters:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 2) and not(text())">
    					Max Number of Characters: None
						<br />
					</xsl:if>
				</xsl:for-each>
			</xsl:when>
			<xsl:when test="contains(@restrictType, '3')">
				<!-- if restrictType = 3 then say 'Pattern Allowed:' value-->
				<xsl:text>The value must match the following pattern: </xsl:text>
				<xsl:choose>
					<!-- <xsl:when test="normalize-space(text()) = ''"> -->
					<xsl:when test="restrictedValue[.='']">
						<xsl:text>None</xsl:text>
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="restrictedValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
			Value Restrictions: None
				<br />
			</xsl:otherwise>
		</xsl:choose>
		<br />
	</xsl:template>


	<xsl:template match="HSDouble">
		<img src="decimalicon.gif">
			<a href="#{generate-id(.)}">
				<xsl:value-of select="@name" />
			</a>
			<br />
		</img>
	</xsl:template>
	<xsl:template match="HSDouble" mode="target">
		<img src="decimalicon.gif">
			<a name="{generate-id(.)}">
				<b>
					<xsl:comment>Accessing the parent nodes...</xsl:comment>
					<xsl:for-each select="ancestor::*">
						<xsl:choose>
							<xsl:when test="contains(@name, 'Inputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Outputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Settings')"></xsl:when>
							<xsl:otherwise>
								<xsl:if test="not(position()='1')">
									<xsl:value-of select="@name" />/
								</xsl:if>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:for-each>
					<xsl:value-of select="@name" />
				</b>
			</a>
		</img>
		<br />
		<!-- Handle HSDocumentation in here -->
		<xsl:text>Description: </xsl:text>
		<xsl:choose>
			<xsl:when test="normalize-space(HSDocumentation) = ''">
				None
				<br />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="HSDocumentation" />
				<br />
			</xsl:otherwise>
		</xsl:choose>

		Required:
		<xsl:choose>
			<xsl:when test="contains(@required, 'true')">
				Yes
				<br />
			</xsl:when>
			<!-- if optional, then default value exists or doesn't exist-->
			<xsl:otherwise>No
				<br />
				Default Value:
				<!--if default tag has some value, display otherwise say "No Default
Value"-->
				<xsl:choose>
					<xsl:when test="normalize-space(DefaultValue) = ''">
						None
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="DefaultValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:choose>
			<xsl:when test="contains(@restrictType, '1')">
				<!-- if restrictType = 1 then display restrictions-->
   				Only the following values are allowed:
				<xsl:for-each select="restrictedValue">
					<xsl:value-of select="text()" />;
				</xsl:for-each>
				<br />
			</xsl:when>
			<xsl:when test="contains(@restrictType, '2')">
				<xsl:for-each select="restrictedValue">
					<xsl:if test="(position() = 1) and text()">
    					Min Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 1) and not(text())">
    					Min Value Allowed: None
						<br/>
					</xsl:if>
					<xsl:if test="(position() = 2) and text()">
    					Max Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 2) and not(text())">
    					Max Value Allowed: None
						<br />
					</xsl:if>
				</xsl:for-each>
			</xsl:when>
			<xsl:when test="contains(@restrictType, '3')">
				<!-- if restrictType = 3 then say 'Pattern Allowed:' value-->
				<xsl:text>The value must match the following pattern: </xsl:text>
				<xsl:choose>
					<!-- <xsl:when test="normalize-space(text()) = ''"> -->
					<xsl:when test="restrictedValue[.='']">
						<xsl:text>None</xsl:text>
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="restrictedValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
			Value Restrictions: None
				<br />
			</xsl:otherwise>
		</xsl:choose>
		<br />
	</xsl:template>
	<xsl:template match="HSInteger">
		<img src="integericon.gif">
			<a href="#{generate-id(.)}">
				<xsl:value-of select="@name" />
			</a>
			<br />
		</img>
	</xsl:template>
	<xsl:template match="HSInteger" mode="target">
		<img src="integericon.gif">
			<a name="{generate-id(.)}">
				<b>
					<xsl:comment>Accessing the parent nodes...</xsl:comment>
					<xsl:for-each select="ancestor::*">
						<xsl:choose>
							<xsl:when test="contains(@name, 'Inputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Outputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Settings')"></xsl:when>
							<xsl:otherwise>
								<xsl:if test="not(position()='1')">
									<xsl:value-of select="@name" />/
								</xsl:if>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:for-each>
					<xsl:value-of select="@name" />
				</b>
			</a>
		</img>
		<br />
		<!-- Handle HSDocumentation in here -->
		<xsl:text>Description: </xsl:text>
		<xsl:choose>
			<xsl:when test="normalize-space(HSDocumentation) = ''">
				None
				<br />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="HSDocumentation" />
				<br />
			</xsl:otherwise>
		</xsl:choose>

		Required:
		<xsl:choose>
			<xsl:when test="contains(@required, 'true')">
				Yes
				<br />
			</xsl:when>
			<!-- if optional, then default value exists or doesn't exist-->
			<xsl:otherwise>No
				<br />
				Default Value:
				<!--if default tag has some value, display otherwise say "No Default
Value"-->
				<xsl:choose>
					<xsl:when test="normalize-space(DefaultValue) = ''">
						None
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="DefaultValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:choose>
			<xsl:when test="contains(@restrictType, '1')">
				<!-- if restrictType = 1 then display restrictions-->
   				Only the following values are allowed:
				<xsl:for-each select="restrictedValue">
					<xsl:value-of select="text()" />;
				</xsl:for-each>
				<br />
			</xsl:when>
			<xsl:when test="contains(@restrictType, '2')">
				<xsl:for-each select="restrictedValue">
					<xsl:if test="(position() = 1) and text()">
    					Min Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 1) and not(text())">
    					Min Value Allowed: None
						<br/>
					</xsl:if>
					<xsl:if test="(position() = 2) and text()">
    					Max Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 2) and not(text())">
    					Max Value Allowed: None
						<br />
					</xsl:if>
				</xsl:for-each>
			</xsl:when>
			<xsl:when test="contains(@restrictType, '3')">
				<!-- if restrictType = 3 then say 'Pattern Allowed:' value-->
				<xsl:text>The value must match the following pattern: </xsl:text>
				<xsl:choose>
					<!-- <xsl:when test="normalize-space(text()) = ''"> -->
					<xsl:when test="restrictedValue[.='']">
						<xsl:text>None</xsl:text>
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="restrictedValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
			Value Restrictions: None
				<br />
			</xsl:otherwise>
		</xsl:choose>
		<br />
	</xsl:template>
	<xsl:template match="HSBinary">
		<img src="binaryicon.gif">
			<a href="#{generate-id(.)}">
				<xsl:value-of select="@name" />
			</a>
			<br />
		</img>
	</xsl:template>
	<xsl:template match="HSBinary" mode="target">
		<img src="binaryicon.gif">
			<a name="{generate-id(.)}">
				<b>
					<xsl:comment>Accessing the parent nodes...</xsl:comment>
					<xsl:for-each select="ancestor::*">
						<xsl:choose>
							<xsl:when test="contains(@name, 'Inputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Outputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Settings')"></xsl:when>
							<xsl:otherwise>
								<xsl:if test="not(position()='1')">
									<xsl:value-of select="@name" />/
								</xsl:if>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:for-each>
					<xsl:value-of select="@name" />
				</b>
			</a>
		</img>
		<br />
		<!-- Handle HSDocumentation in here -->
		<xsl:text>Description: </xsl:text>
		<xsl:choose>
			<xsl:when test="normalize-space(HSDocumentation) = ''">
				None
				<br />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="HSDocumentation" />
				<br />
			</xsl:otherwise>
		</xsl:choose>

		Required:
		<xsl:choose>
			<xsl:when test="contains(@required, 'true')">
				Yes
				<br />
			</xsl:when>
			<!-- if optional, then default value exists or doesn't exist-->
			<xsl:otherwise>No
				<br />
				Default Value:
				<!--if default tag has some value, display otherwise say "No Default
Value"-->
				<xsl:choose>
					<xsl:when test="normalize-space(DefaultValue) = ''">
						None
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="DefaultValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:choose>
			<xsl:when test="contains(@restrictType, '1')">
				<!-- if restrictType = 1 then display restrictions-->
   				Only the following values are allowed:
				<xsl:for-each select="restrictedValue">
					<xsl:value-of select="text()" />;
				</xsl:for-each>
				<br />
			</xsl:when>
			<xsl:when test="contains(@restrictType, '2')">
				<xsl:for-each select="restrictedValue">
					<xsl:if test="(position() = 1) and text()">
    					Min Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 1) and not(text())">
    					Min Value Allowed: None
						<br/>
					</xsl:if>
					<xsl:if test="(position() = 2) and text()">
    					Max Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 2) and not(text())">
    					Max Value Allowed: None
						<br />
					</xsl:if>
				</xsl:for-each>
			</xsl:when>
			<xsl:when test="contains(@restrictType, '3')">
				<!-- if restrictType = 3 then say 'Pattern Allowed:' value-->
				<xsl:text>The value must match the following pattern: </xsl:text>
				<xsl:choose>
					<!-- <xsl:when test="normalize-space(text()) = ''"> -->
					<xsl:when test="restrictedValue[.='']">
						<xsl:text>None</xsl:text>
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="restrictedValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>Binary Encoding:
				<xsl:choose>
					<xsl:when test="contains(@binaryEncoding, '0')">
					base64
						<br />
					</xsl:when>
					<xsl:otherwise>
					Hex
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		<br />
	</xsl:template>
	<xsl:template match="HSDate">
		<img src="dateicon.gif">
			<a href="#{generate-id(.)}">
				<xsl:value-of select="@name" />
			</a>
			<br />
		</img>
	</xsl:template>
	<xsl:template match="HSDate" mode="target">
		<img src="dateicon.gif">
			<a name="{generate-id(.)}">
				<b>
					<xsl:comment>Accessing the parent nodes...</xsl:comment>
					<xsl:for-each select="ancestor::*">
						<xsl:choose>
							<xsl:when test="contains(@name, 'Inputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Outputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Settings')"></xsl:when>
							<xsl:otherwise>
								<xsl:if test="not(position()='1')">
									<xsl:value-of select="@name" />/
								</xsl:if>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:for-each>
					<xsl:value-of select="@name" />
				</b>
			</a>
		</img>
		<br />
		<!-- Handle HSDocumentation in here -->
		<xsl:text>Description: </xsl:text>
		<xsl:choose>
			<xsl:when test="normalize-space(HSDocumentation) = ''">
				None
				<br />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="HSDocumentation" />
				<br />
			</xsl:otherwise>
		</xsl:choose>

		Required:
		<xsl:choose>
			<xsl:when test="contains(@required, 'true')">
				Yes
				<br />
			</xsl:when>
			<!-- if optional, then default value exists or doesn't exist-->
			<xsl:otherwise>No
				<br />
				Default Value:
				<!--if default tag has some value, display otherwise say "No Default
Value"-->
				<xsl:choose>
					<xsl:when test="normalize-space(DefaultValue) = ''">
						None
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="DefaultValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:choose>
			<xsl:when test="contains(@restrictType, '1')">
				<!-- if restrictType = 1 then display restrictions-->
   				Only the following values are allowed:
				<xsl:for-each select="restrictedValue">
					<xsl:value-of select="text()" />;
				</xsl:for-each>
				<br />
			</xsl:when>
			<xsl:when test="contains(@restrictType, '2')">
				<xsl:for-each select="restrictedValue">
					<xsl:if test="(position() = 1) and text()">
    					Min Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 1) and not(text())">
    					Min Value Allowed: None
						<br/>
					</xsl:if>
					<xsl:if test="(position() = 2) and text()">
    					Max Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 2) and not(text())">
    					Max Value Allowed: None
						<br />
					</xsl:if>
				</xsl:for-each>
			</xsl:when>
			<xsl:when test="contains(@restrictType, '3')">
				<!-- if restrictType = 3 then say 'Pattern Allowed:' value-->
				<xsl:text>The value must match the following pattern: </xsl:text>
				<xsl:choose>
					<!-- <xsl:when test="normalize-space(text()) = ''"> -->
					<xsl:when test="restrictedValue[.='']">
						<xsl:text>None</xsl:text>
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="restrictedValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
			Value Restrictions: None
				<br />
			</xsl:otherwise>
		</xsl:choose>
		<br />
	</xsl:template>
	<xsl:template match="HSBoolean">
		<img src="truefalseicon.gif">
			<a href="#{generate-id(.)}">
				<xsl:value-of select="@name" />
			</a>
			<br />
		</img>
	</xsl:template>
	<xsl:template match="HSBoolean" mode="target">
		<img src="truefalseicon.gif">
			<a name="{generate-id(.)}">
				<b>
					<xsl:comment>Accessing the parent nodes...</xsl:comment>
					<xsl:for-each select="ancestor::*">
						<xsl:choose>
							<xsl:when test="contains(@name, 'Inputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Outputs')"></xsl:when>
							<xsl:when test="contains(@name, 'Settings')"></xsl:when>
							<xsl:otherwise>
								<xsl:if test="not(position()='1')">
									<xsl:value-of select="@name" />/
								</xsl:if>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:for-each>
					<xsl:value-of select="@name" />
				</b>
			</a>
		</img>
		<br />
		<!-- Handle HSDocumentation in here -->
		<xsl:text>Description: </xsl:text>
		<xsl:choose>
			<xsl:when test="normalize-space(HSDocumentation) = ''">
				None
				<br />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="HSDocumentation" />
				<br />
			</xsl:otherwise>
		</xsl:choose>

		Required:
		<xsl:choose>
			<xsl:when test="contains(@required, 'true')">
				Yes
				<br />
			</xsl:when>
			<!-- if optional, then default value exists or doesn't exist-->
			<xsl:otherwise>No
				<br />
				Default Value:
				<!--if default tag has some value, display otherwise say "No Default
Value"-->
				<xsl:choose>
					<xsl:when test="normalize-space(DefaultValue) = ''">
						None
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="DefaultValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:choose>
			<xsl:when test="contains(@restrictType, '1')">
				<!-- if restrictType = 1 then display restrictions-->
   				Only the following values are allowed:
				<xsl:for-each select="restrictedValue">
					<xsl:value-of select="text()" />;
				</xsl:for-each>
				<br />
			</xsl:when>
			<xsl:when test="contains(@restrictType, '2')">
				<xsl:for-each select="restrictedValue">
					<xsl:if test="(position() = 1) and text()">
    					Min Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 1) and not(text())">
    					Min Value Allowed: None
						<br/>
					</xsl:if>
					<xsl:if test="(position() = 2) and text()">
    					Max Value Allowed:
						<xsl:value-of select="text()"/>
						<br />
					</xsl:if>
					<xsl:if test="(position() = 2) and not(text())">
    					Max Value Allowed: None
						<br />
					</xsl:if>
				</xsl:for-each>
			</xsl:when>
			<xsl:when test="contains(@restrictType, '3')">
				<!-- if restrictType = 3 then say 'Pattern Allowed:' value-->
				<xsl:text>The value must match the following pattern: </xsl:text>
				<xsl:choose>
					<!-- <xsl:when test="normalize-space(text()) = ''"> -->
					<xsl:when test="restrictedValue[.='']">
						<xsl:text>None</xsl:text>
						<br />
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="restrictedValue" />
						<br />
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
			Value Restrictions: None
				<br />
			</xsl:otherwise>
		</xsl:choose>
		<br />
	</xsl:template>

	<!-- This doesn't mess up HSDocumentation inside of a DataContainer or a
Field-->
	<xsl:template match="HSContract/HSDocumentation">
		<b>Short Description: </b>
		<br />
		<xsl:choose>
			<xsl:when test="normalize-space(shortDescription) = ''">
			None
				<br />
				<br />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="shortDescription" />
				<br />
				<br />
			</xsl:otherwise>
		</xsl:choose>
		<b>Long Description:</b>
		<br />
		<xsl:if test="normalize-space(descriptionSection)=''">
		None
			<br />
		</xsl:if>
		<xsl:for-each select="descriptionSection">
			<xsl:choose>
				<xsl:when test="@title!=''">
					<b>
						<font size="-1.5">
							<xsl:value-of select="@title" />
						</font>
					</b>
					<br />
					<xsl:if test="text()!=''">
						<font size="-1.5">
							<xsl:value-of select="text()" />
						</font>
						<br />
					</xsl:if>
					<xsl:if test="normalize-space(text())=''">
						<font size="-1.5">
							None
						</font>
						<br />
					</xsl:if>
				</xsl:when>
				<xsl:otherwise>
				None
				</xsl:otherwise>
			</xsl:choose>
		</xsl:for-each>
		<br />
	</xsl:template>
</xsl:stylesheet>



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread