[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Unexpected sort order on a multi sort

Subject: RE: Unexpected sort order on a multi sort
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Thu, 21 Aug 2003 23:23:38 +0100
xsl sort select
> I am sure I am missing an obvious one here,

Yep. xsl:sort data-type="number". 

Michael Kay

 but I am getting 
> unexpected output, based on the sort order.  I stripped my 
> XML down to the bare minimum here for an example.
> 
> Output
> SUBJECTS, Exp Var.Pos 172, Exp Var.Pos 202, Exp Var.Pos 236, 
> Exp Var.Pos 316, Exp Var.Pos 68 PA126746586, C/G, C/C, G/A, T/T, G/G
> 
> Expected the last variant to be the first based on sorting, 
> since <position> element is a number, shouldn't it be 68, 
> 172, 202, 236, 316?
> 
> Do I have a strange typo?  I added the number() function as a 
> last stab, but I was getting the same results without it?  
> What did I miss!
> 
> 
> Short XML DOC
> <?xml version="1.0" encoding="UTF-8"?>
> <pharmgkb xmlns="http://www.pharmgkb.org/schema/" 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xsi:schemaLocation="http://www.pharmgkb.org/schema/ 
> http://www.pharmgkb.org/schema/root.xsd">
> 	<gene pharmgkbId="PA117">
> 		<referenceSequence>
> 			
> <dnaSequence>ccagTAAGCGCCCTCCTAATCCCCGCAGCGCCACC</dnaSequence>
> 			<experiment>
> 				<sampleSetXref 
> resource="PharmGKB">PA128747821</sampleSetXref>
> 				<genotypesInSubject>
> 					<subjectXref 
> resource="PharmGKB">PA126746586</subjectXref>
> 					<pcrResult>
> 						<assayXref 
> resource="local">21</assayXref>
> 						
> <sequencedBothStrands>true</sequencedBothStrands>
> 						<variant>
> 							
> <position>202</position>
> 							
> <firstAllele>C</firstAllele>
> 							
> <secondAllele>C</secondAllele>
> 						</variant>
> 						<variant>
> 							
> <position>68</position>
> 							
> <firstAllele>G</firstAllele>
> 							
> <secondAllele>G</secondAllele>
> 						</variant>
> 						<variant>
> 							
> <position>172</position>
> 							
> <firstAllele>C</firstAllele>
> 							
> <secondAllele>G</secondAllele>
> 						</variant>
> 						<variant>
> 							
> <position>236</position>
> 							
> <firstAllele>G</firstAllele>
> 							
> <secondAllele>A</secondAllele>
> 						</variant>
> 						<variant>
> 							
> <position>316</position>
> 							
> <firstAllele>T</firstAllele>
> 							
> <secondAllele>T</secondAllele>
> 						</variant>
> 					</pcrResult>
> 				</genotypesInSubject>
> 			</experiment>
> 		</referenceSequence>
> 	</gene>
> </pharmgkb>
> 
> XSL
> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> xmlns:n1="http://www.pharmgkb.org/schema/" 
> xmlns:sch="http://www.ascc.net/xml/schematron" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> 	<xsl:output method="text" indent="yes"/>
> 	<!--index all the subject elements in doc by value of 
> subjectXref-->
> 	<xsl:key name="subject-key" match="//n1:subjectXref" use="."/>
> 	<xsl:template match="/">
> 		<!--get unique subjects -->
> 		<xsl:variable name="unique-subjects" 
> select="//n1:subjectXref[generate-id(.)=generate-id(key('subje
> ct-key', .))]"/>
> 		<!--loop on unique subjects-->
> 		<xsl:for-each select="$unique-subjects">
> 			<!--sort the subjects -->
> 			<xsl:sort select="."/>
> 			<xsl:if test="position()=1" >
> 				<xsl:call-template 
> name="procSubjectHeader"/>
> 			</xsl:if>
> 			<xsl:call-template name="procSubject"/>
> 		</xsl:for-each>
> 	</xsl:template>
> 	
> 	<xsl:template name="procSubjectHeader">
> 		<xsl:variable name="subjectID" select="."/>
> 		<!--Column name for the subjects -->
> 		<xsl:text>SUBJECTS</xsl:text>
> 		<!--get list of all variants for the subject -->
> 		<xsl:variable name="subject-variants" 
> select="//n1:variant[../../n1:subjectXref=$subjectID]"/>
> 		<xsl:for-each select="$subject-variants">
> 			<!--Sort on all variants on experiment-->
> 			<xsl:sort select="../../.."/>
> 			<!--Sort on all variant position-->
> 			<xsl:sort select="number(n1:position)"/>
> 			<xsl:call-template name="procVariantHeader"/>
> 		</xsl:for-each>
> 		<!-- Output carriage return after all subject 
> variants are printed-->
> 		<xsl:text>&#xA;</xsl:text>
> 	</xsl:template>
> 	
> 	<xsl:template name="procSubject">
> 		<xsl:variable name="subjectID" select="."/>
> 		<xsl:value-of select="$subjectID"/>
> 		<!--get list of all variants for the subject -->
> 		<xsl:variable name="subject-variants" 
> select="//n1:variant[../../n1:subjectXref=$subjectID]"/>
> 		<xsl:for-each select="$subject-variants">
> 			<!--Sort on all variants on experiment-->
> 			<xsl:sort select="../../.."/>
> 			<!--Sort on all variant position-->
> 			<xsl:sort select="n1:position"/>
> 			<xsl:call-template name="procVariant">
> 				<!--xsl:with-param 
> name="variant" select="."/-->
> 			</xsl:call-template>
> 		</xsl:for-each>
> 		<!-- Output carriage return after all subject 
> variants are printed-->
> 		<xsl:text>&#xA;</xsl:text>
> 	</xsl:template>
> 	
> 	<xsl:template name="procVariantHeader">
> 		<xsl:text>, Exp Var.Pos </xsl:text>
> 		<xsl:value-of select="n1:position"/>
> 	</xsl:template>		
> 
> 	<xsl:template name="procVariant">
> 		<xsl:value-of select="concat(', 
> ',n1:firstAllele,'/',n1:secondAllele)"/>
> 	</xsl:template>		
> 	
> </xsl:stylesheet>
> 
> 
> Thanks,
> 
> -mat
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.