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

Re: Ideal XML Site tree layout

Subject: Re: Ideal XML Site tree layout
From: "Emmanuil Batsis (Manos)" <mbatsis@xxxxxxxxxxx>
Date: Wed, 21 Apr 2004 10:47:09 +0300
t123.name
Although what you are after is not clear to me, Apache Cocoon's sitemap may be very interesting to you (as a study or solution).

hth,

Manos

John Hamman wrote:
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: 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



-- Manos Batsis

    _  __    __                    __
   / |/ /__ / /____ __ _ ___ _____/ /_
  /    / -_) __(_-</  ' Y _ `/ __/ __/
 /_/|_/\__/\__/___/_/_/_|_,_/_/  \__/


http://www.netsmart.gr mailto:mbatsisSPAM_TRAP@xxxxxxxxxxx tel:+302103240940 http://forte.netsmart.gr/foaf/manos_foaf.rdf

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.