Re: [xsl] Ideal XML Site tree layout

Subject: Re: [xsl] Ideal XML Site tree layout
From: "Jeffrey Moss" <jeff@xxxxxxxxxxxx>
Date: Tue, 20 Apr 2004 15:37:15 -0600
http://www.binarycloud.com

I think this is what you're looking for. I personally maintain my own
"sitemap" file that turns into a "sitemap.html", and I use it for some other
things like navigation menus, page grouping/sequencing, but that is more
suited to my needs and shouldn't be very hard for you to implement.

-Jeff

----- Original Message ----- 
From: "John Hamman" <John@xxxxxxxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Tuesday, April 20, 2004 2:50 PM
Subject: [xsl] Ideal XML Site tree layout


> I ask this in xsl because I need a xml file that will list an entire
> (enterprise size) site in one file and be easily sorted via xsl.
> Do anyone have any ideas on a good framework for this?
> john
>
> -----Original Message-----
> From: Robert Koberg [mailto:rob@xxxxxxxxxx]
> Sent: Sunday, April 18, 2004 10:15 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Dmoz xml structure sort
>
> Hi,
>
> I think you are on the right track, but I would suggest changing your
> schema a bit. I would organize your topics hierarchically and have a
> unique ID and a name (names are more likely to have duplicates)
> attribute, like:
>
> <topic id="t123" name="Base">
>    <Title local="en-US">Home</Title>
>    <topic id="t234" name="General_Information">
>      <topic id="t345" name="About_us">
>
>      </
>      <topic id="t346" name="Contact_us">
>
>      </
>    </
> </
>
> With this structure you will be able to many more things than you have
> probably thought of at this point and you do not need to list the
> //narrow elements because they are now there. This means you can move
> things around and you wont' have to edit your topics config.
>
> Now, on to some XSL:
>
> First thing to do is create a top level key:
>
> <xsl:key name="topics" match="topic" use="@id"/>
>
> Then I usually pass the 'focus' id into the transformation as a
> parameter, so if you can do that you can get your focus topic in a top
> level variable:
>
> <xsl:variable
>    name="focus_topic"
>    select="key('topics', $focus_topic_id)"/>
>
> <xsl:variable
>    name="focus_parent"
>    select="key('topics', $focus_parent_id)"/>
>
> Then you can use this variable throughout your transformation to find
> your topic context. You can ensure you always have valid links by first
> going to the linked topic nodeset and then traveling up and down the
> topic hierarchy to find the path. Say you want to create a nav thingy -
> you can do it like so:
>
> <xsl:template match="/">
>    <html>
>      <xsl:call-template name="head"/>
>      <body>
>        <div id="pageBody">
>          <xsl:call-template name="banner"/>
>
>          <div id="navColumn">
>
>            <xsl:apply-templates
>              select="$focus_parent/*"
>              mode="navigation"/>
>
>          </div>
>
>          <div id="contentWrapper">
>            <xsl:appl
>          <xsl:call-template name="footer"/>
>        </div>
>      </body>
>    </html>
> </xsl:template>
>
>
> <!-- match the children of the focus parent-->
> <xsl:template match="*" mode="navigation">
>
>    <xsl:variable name="href">
>      <xsl:call-template name="topic_path_builder"/>
>    </
>
>    <xsl:choose>
>      <xsl:when test="not(@id=$focus_topic_id)">
>        <div>
>          <a href="{$href}">
>            <xsl:value-of select="@label"/>
>          </a>
>        </div>
>      </
>      <xsl:otherwise>
>        <div class="selected">
>          <a href="{$href}">
>            <xsl:value-of select="@label"/>
>          </a>
>        </div>
>      </
>    </
> </
>
> <xsl:template name="topic_path_builder">
>    <xsl:call-template name="ancestor_path"/>
>    <xsl:text>/</xsl:text>
>    <xsl:value-of select="@name"/>
> </xsl:template>
>
> <!-- root relative paths,
> you could do document relative paths too-->
>
> <xsl:template name="ancestor_path">
>    <xsl:for-each select="ancestor::*">
>      <xsl:text>/</xsl:text>
>      <xsl:value-of select="@name"/>
>    </xsl:for-each>
> </xsl:template>
>
> make sense?
>
> best,
> -Rob
>
>
>
> John Hamman wrote:
>
> > Hi all.
> > I have a navigational site tree xml page similar to Dmoz.org.
> > And its made up like this below. I am new to xpath and am having
problems
> > finding a solution to this.
> >
> > My file looks similar to this.
> >
> > <Topic id="Base">
> > <tag catid="1"/>
> > <Title local="en-US">Home</Title>
> > <narrow resource="Base/General_Information"/>
> > <narrow resource="Base/StudentLife"/>
> > <narrow resource="Base/Missions"/>
> > <narrow resource="Base/Community"/>
> > <narrow resource="Base/Academics"/>
> > <narrow resource="Base/News"/>
> > </Topic>
> > <Topic id="Base/General_Information">
> > <tag catid="2"/>
> > <Title local="en-US">General Information</Title>
> > <narrow
> > resource="Base/General_Information/About_us"/>
> > <narrow
> > resource="Base/General_Information/Contact_us"/>
> > <narrow
> > resource="Base/General_Information/Directors_Letter"/>
> > <narrow
> > resource="Base/General_Information/History"/>
> > <narrow
> > resource="Base/General_Information/What_We_Beleive"/>
> > <narrow
> > resource="Base/General_Information/Staff_Directory"/>
> > </Topic>
> > <Topic id="Base/General_Information/About_us">
> > <tag catid="8"/>
> > <Title local="en-US">About Us</Title>
> > </Topic>
> > <Topic id="Base/General_Information/Contact_us">
> > <tag catid="9"/>
> > <Title local="en-US">Contact Us</Title>
> > </Topic>
> > ...
> > ...
> > ...
> >
> >
> > And I want to acheave results like this if I had a dynamic variable like
> > "Base/General_Information/About_us"
> >
> > <Topic id="Base/General_Information/About_us">
> > <tag catid="8"/>
> > <Title local="en-US">About Us</Title>
> > </Topic>
> > <Topic id="Base/General_Information/Contact_us">
> > <tag catid="9"/>
> > <Title local="en-US">Contact Us</Title>
> > </Topic>
> > <Topic id="Base/General_Information/Directors_Letter">
> > <tag catid="10"/>
> > <Title local="en-US">Letter From the
> > Director</Title>
> > </Topic>
> > <Topic id="Base/General_Information/History">
> > <tag catid="11"/>
> > <Title local="en-US">History</Title>
> > </Topic>
> > <Topic id="Base/General_Information/What_We_Beleive">
> > <tag catid="12"/>
> > <Title local="en-US">What We Beleive</Title>
> > </Topic>
> > <Topic id="Base/General_Information/Staff_Directory">
> > <tag catid="13"/>
> > <Title local="en-US">Staff Directory</Title>
> > </Topic>
> >
> > Can someone point me in the right direction?
> > john

Current Thread