Re: [xsl] sorting (again)

Subject: Re: [xsl] sorting (again)
From: "Davis Ford" <davisford@xxxxxxxxx>
Date: Thu, 29 Nov 2007 12:43:38 -0500
Thanks all...this list is a huge help!

Incidentally, the last two you proposed do work, Scott.  The first
does not.  I've updated the template as follows:

	<xsl:template match="@*|node()">
  		<xsl:copy>
			<xsl:copy-of select="@*"/>
			<!-- copy all attributes before applying templates to children only -->
			<xsl:apply-templates select="node()">
				<!--<xsl:sort select="- number(name() = 'DictionaryModelDescriptor')"/>-->
				<xsl:sort select="- boolean(self::DictionaryModelDescriptor)"/>
				<xsl:sort select="@typeName"/>
      				<xsl:sort select="name(.)"/>
      				<xsl:sort />
    			</xsl:apply-templates>
  		</xsl:copy>
	</xsl:template>

On Nov 29, 2007 12:36 PM, Scott Trenda <Scott.Trenda@xxxxxxxx> wrote:
> Hey Davis,
>
> The reason that your first try isn't working is because <xsl:sort
> select="DictionaryModelDescriptor"/> looks down the child:: axis for an
> element named "DictionaryModelDescriptor", when you actually want it to
> look down the self:: axis for that element. I think any of the following
> would work (you'll have to try them out):
>
> <xsl:sort select="self::DictionaryModelDescriptor"/>
> <xsl:sort select="- number(name() = 'DictionaryModelDescriptor')"/>
> <xsl:sort select="- boolean(self::DictionaryModelDescriptor)"/>
>
> The unary negop is there to avoid specifying order="descending"; I'm not
> quite sure if the last two would need data-type="number" or not. There
> may be other shortcuts that work more concisely, and these may need some
> tweaking to work just right. Be sure to let us know what worked the best
> in the end, ok?
>
> ~ Scott
>
>
>
> -----Original Message-----
> From: Davis Ford [mailto:davisford@xxxxxxxxx]
> Sent: Thursday, November 29, 2007 11:10 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] sorting (again)
>
> Hi, one more sorting question.
>
> Given the XML pasted below...I'm using the following transform to sort
> it canonically.  However, I need the "DictionaryModelDescriptor" node
> to always be the first node, and then the rest are sorted canonically.
>  I tried this, but it does not do what I want.
>
>   <xsl:template match="@*|node()">
>       <xsl:copy>
>         <xsl:apply-templates select="@*|node()">
>           <xsl:sort select="DictionaryModelDescriptor"/>
>           <xsl:sort select="@typeName"/>
>           <xsl:sort select="name(.)"/>
>           <xsl:sort />
>         </xsl:apply-templates>
>       </xsl:copy>
>   </xsl:template>
>
> This one puts it at the top, but now I have a duplicate in the middle
>
>   <xsl:template match="@*|node()">
>       <xsl:copy>
>       <xsl:apply-templates select="DictionaryModelDescriptor"/>
>       <xsl:apply-templates select="@*|node()">
>         <xsl:sort select="@typeName"/>
>         <xsl:sort select="name(.)"/>
>         <xsl:sort />
>       </xsl:apply-templates>
>       </xsl:copy>
>   </xsl:template>
> How can I "move" the DictionaryModelDescriptor node to the top after
> sorting?
>
> Thanks in advance,
> Davis
>
> XML ->
>
> <?xml version="1.0" encoding="UTF-8"?>
> <DictionaryModel>
>     <DictionaryModelDescriptor about="modelName1/modelVersion1">
>         <modelName>modelName1</modelName>
>         <modelVersion>modelVersion1</modelVersion>
>     </DictionaryModelDescriptor>
>     <DictionaryParts>
>         <DictionaryPart abstract="false" typeName="part.full1">
>             <children/>
>             <parents/>
>             <DictionaryProperties/>
>             <feature>feature.empty3</feature>
>             <maxCardinality>2</maxCardinality>
>             <minCardinality>1</minCardinality>
>             <parentComposition>feature.empty2</parentComposition>
>             <role>role</role>
>             <sequence>1</sequence>
>         </DictionaryPart>
>         <DictionaryPart abstract="false" typeName="part.full5">
>             <children/>
>             <parents/>
>             <DictionaryProperties/>
>             <feature>feature.empty13</feature>
>             <maxCardinality>2</maxCardinality>
>             <minCardinality>1</minCardinality>
>             <parentComposition>feature.empty12</parentComposition>
>             <role>role</role>
>             <sequence>1</sequence>
>         </DictionaryPart>
>     </DictionaryParts>
>     <DictionaryAssociations>
>         <DictionaryAssociation abstract="false"
> typeName="association.empty1">
>             <children/>
>             <parents/>
>             <DictionaryProperties/>
>         </DictionaryAssociation>
>         <DictionaryAssociation
> compositionType="BIDIRECTIONAL_ASSOCIATION" abstract="false"
> typeName="association.full2">
>             <children/>
>             <parents/>
>             <DictionaryProperties>
>
> <DictionaryProperty>simple.property.empty4</DictionaryProperty>
>
> <DictionaryProperty>composite.property.empty4</DictionaryProperty>
>             </DictionaryProperties>
>             <sourcePart>part.full2</sourcePart>
>             <targetPart>part.full3</targetPart>
>             <resolverStrategy>resolver.strategy</resolverStrategy>
>         </DictionaryAssociation>
>     </DictionaryAssociations>
>     <DictionaryFeatures>
>         <DictionaryFeature composite="false" abstract="false"
> typeName="feature.empty1">
>             <children/>
>             <parents/>
>             <DictionaryProperties/>
>             <associations/>
>             <parentComposites/>
>             <parts/>
>         </DictionaryFeature>
>         <DictionaryFeature composite="true" compositionType="SEQUENCE"
> abstract="true" typeName="feature.full8">
>             <children>
>                 <child>feature.empty9</child>
>             </children>
>             <parents/>
>             <DictionaryProperties>
>
> <DictionaryProperty>composite.property.empty5</DictionaryProperty>
>
> <DictionaryProperty>simple.property.empty5</DictionaryProperty>
>             </DictionaryProperties>
>             <associations>
>                 <association>association.empty3</association>
>                 <association>association.empty4</association>
>             </associations>
>             <parentComposites>
>                 <parentComposite>feature.empty10</parentComposite>
>             </parentComposites>
>             <parts>
>                 <part>part.empty4</part>
>             </parts>
>             <code>code</code>
>         </DictionaryFeature>
>     </DictionaryFeatures>
>     <DictionaryPropertyNodes>
>         <DictionaryPropertyNode abstract="false"
> typeName="property.node.empty1">
>             <children/>
>             <parents/>
>             <DictionaryProperties/>
>         </DictionaryPropertyNode>
>         <DictionaryPropertyNode abstract="false"
> typeName="property.node.full3">
>             <children>
>                 <child>property.node.empty4</child>
>             </children>
>             <parents>
>                 <parent>property.node.empty5</parent>
>             </parents>
>             <DictionaryProperties>
>
> <DictionaryProperty>composite.property.empty11</DictionaryProperty>
>
> <DictionaryProperty>simple.property.empty8</DictionaryProperty>
>             </DictionaryProperties>
>         </DictionaryPropertyNode>
>     </DictionaryPropertyNodes>
>     <DictionaryProperties>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="CompositeDictionaryProperty" propertyType="COMPOSITE_ROOT"
> inherited="false" typeName="composite.property.empty1">
>             <maxCardinality>2147483647</maxCardinality>
>             <minCardinality>-2147483648</minCardinality>
>             <children/>
>         </DictionaryProperty>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="CompositeDictionaryProperty" propertyType="COMPOSITE_ROOT"
> inherited="false" typeName="composite.property.empty2">
>             <maxCardinality>2147483647</maxCardinality>
>             <minCardinality>-2147483648</minCardinality>
>             <children/>
>         </DictionaryProperty>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="CompositeDictionaryProperty" propertyType="COMPOSITE_ROOT"
> inherited="false" typeName="composite.property.empty3">
>             <maxCardinality>2147483647</maxCardinality>
>             <minCardinality>-2147483648</minCardinality>
>             <children/>
>         </DictionaryProperty>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="CompositeDictionaryProperty" propertyType="COMPOSITE_CHILD"
> inherited="true" typeName="composite.property.full6">
>             <code>code</code>
>             <maxCardinality>3</maxCardinality>
>             <minCardinality>2</minCardinality>
>             <parentObject>feature.empty14</parentObject>
>             <parentProperty>composite.property.empty8</parentProperty>
>             <rootProperty>composite.property.empty7</rootProperty>
>             <children>
>                 <child>simple.property.empty6</child>
>             </children>
>             <propertyNode>property.node.empty2</propertyNode>
>         </DictionaryProperty>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="SimpleDictionaryProperty" propertyType="SIMPLE_ROOT"
> inherited="false" typeName="simple.property.empty1">
>             <maxCardinality>2147483647</maxCardinality>
>             <minCardinality>-2147483648</minCardinality>
>         </DictionaryProperty>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="SimpleDictionaryProperty" propertyType="SIMPLE_ROOT"
> inherited="false" typeName="simple.property.empty2">
>             <maxCardinality>2147483647</maxCardinality>
>             <minCardinality>-2147483648</minCardinality>
>         </DictionaryProperty>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="SimpleDictionaryProperty" propertyType="SIMPLE_ROOT"
> inherited="false" typeName="simple.property.empty3">
>             <maxCardinality>2147483647</maxCardinality>
>             <minCardinality>-2147483648</minCardinality>
>         </DictionaryProperty>
>         <DictionaryProperty
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:type="SimpleDictionaryProperty" propertyType="SIMPLE_CHILD"
> inherited="true" typeName="simple.property.full7">
>             <code>code</code>
>             <maxCardinality>2</maxCardinality>
>             <minCardinality>1</minCardinality>
>             <parentObject>feature.empty16</parentObject>
>             <parentProperty>composite.property.empty9</parentProperty>
>             <rootProperty>composite.property.empty10</rootProperty>
>             <defaultValue>default-value</defaultValue>
>
> <dictionaryFeatureRange>feature.range2</dictionaryFeatureRange>
>             <referentFeature>feature.empty17</referentFeature>
>             <dictionaryValueRange>value.range1</dictionaryValueRange>
>             <valueTypeName>value-type-name</valueTypeName>
>         </DictionaryProperty>
>     </DictionaryProperties>
>     <DictionaryFeatureRanges>
>         <DictionaryFeatureRange typeName="feature.range1">
>             <DictionaryFeatures>
>                 <DictionaryFeature>feature.empty11</DictionaryFeature>
>             </DictionaryFeatures>
>         </DictionaryFeatureRange>
>     </DictionaryFeatureRanges>
>     <DictionaryValueRanges>
>         <DictionaryValueRange typeName="value.range2">
>             <DictionaryRangeItems>
>                 <DictionaryRangeItem>range.item3</DictionaryRangeItem>
>             </DictionaryRangeItems>
>             <valueTypeName>value-type-name</valueTypeName>
>         </DictionaryValueRange>
>     </DictionaryValueRanges>
>     <DictionaryRangeItems>
>         <DictionaryRangeItem typeName="range.item2">
>             <value>4</value>
>         </DictionaryRangeItem>
>     </DictionaryRangeItems>
>     <DictionaryValueTypeNames>
>         <DictionaryValueTypeName>a value type
> name</DictionaryValueTypeName>
>
> <DictionaryValueTypeName>value-type-name</DictionaryValueTypeName>
>     </DictionaryValueTypeNames>
> </DictionaryModel>
>
>



-- 
Zeno Consulting, Inc.
http://www.zenoconsulting.biz
248.894.4922 phone
313.884.2977 fax

Current Thread