xsl-list
[Top] [All Lists]

RE: [xsl] sorting (again)

2007-11-29 10:39:19
Make your first (primary) sort key be a boolean value - false if this is the
DictionaryModelDescriptor node, true if it is not. 

In XSLT 2.0 if <xsl:sort select="..."> returns a boolean, it will sort false
before true. XSLT 1.0 will convert the boolean to a string - so "false"
still comes before "true". 

Michael Kay
http://www.saxonica.com/

-----Original Message-----
From: Davis Ford [mailto:davisford(_at_)gmail(_dot_)com] 
Sent: 29 November 2007 17:10
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>