xsl-list
[Top] [All Lists]

Re: Release Date vs. Highlight Until Date

2004-09-20 17:36:38
Thanks for your suggestions.  I am not sure the CMS vendor supports XSL 2.0. 
After looking more at the system I think I'll implement an XSL extension to
retrieve sysdate instead of passing it everywhere I need it.  I've been
digging deeper and found that the dates are stored as yyyyMMddTHHmmss, which I
don't think is xs:datetime format but should be pretty easy to parse/sort, or
convert to another format for parsing/sorting.  

Therefore, since a single XML document contains both the IA and the content, I
think I can do something like (half code, half psuedo-code):

<xsl:variable name="sysdate" select="me:function" />

Is it possible to write a single XPath query that merges the equivalent of the
two XPath queries below (excuse my attempt at syntax) such that an
xsl:for-each with that as select will first process the elements matching the
first condition, then those matching the second condition?  

//item[(_at_)highlight_date &lt; $sysdate]

//item

Also, to ensure I don't get the same record twice, do I just reverse the first
condition in the second condition?  Something like:

//item[(_at_)highlight_date &lt; $sysdate]

//item[(_at_)highlight_date &gt;= $sysdate]

I think that for performance I wouldn't want this combined query to return
more than 5 records.  It seems like this would have to do with position(), but
that can only apply before the sort, and I want the 5 records after sort.  Any
suggestions?  maybe a recursive function?  anyway, I have to consider
alternatives for performance.

Then within the xsl:for-each I need to sort such that those records matched by
the highlight_date query appear first - any suggestions there?

Now you can can all see how lost I am.

Thanks again,

   -John

On Mon, 20 Sep 2004 21:08:26 -0300, Jan Limpens wrote
john, 

xslt version 1 does not support type checking, everything is more or
less just text. so doing date parsing is kind of tedious, still
possible (depending on how complex the check is). you probably could
pass the current date as a parameter to the xsltransformer and let 
the stylesheet do the checking using regular expression and alike. 
or, if the date is stored in the xs:datetime format, an alphabetic 
sort will do, then you will need to select only the first 5 
elements. (if it´s based on novelty)

maybe you will think about letting .net decide weather a xml file
qualifies for the main page or not and pass the result (the n 
selected filenames) as a parameter to the xslt file, which then just 
'dumbly' transforms.

another possibility is to use a xslt 2.0 transformer (saxon) but the
.net implementation is still very at its beginning and IMHO the .net
transformer is currently more user friendly and stable.

just my 55

--
jan

On Mon, 20 Sep 2004 19:15:18 -0400, xsl-list <xsl-list(_at_)jpw3(_dot_)com> 
wrote:
Hi,

I am new to the list and XSL in general, so I apologize if this is the wrong
forum for this question.  I am also simplifying my problem as much as
possible.  I am also still at a pretty high level, looking more into the
concepts than the code.  While I would appreciate code examples, simple
suggestions of what tokens I should research or URLs with further 
information
would also be appreciated.  I am working with a CMS that stores both the
information architecture (like a directory structure) and content (like XML
files inside the directories) as XML which is transformed using XSL to HTML
for distribution to browsers.  If what I'm trying to do becomes too
complicated for XML I can use pure .NET code, but I'm wondering what XSL
solutions might be possible.

Each news record has a "release date" value.  I am not sure of the format 
but
hopefully my code could handle multiple formats, or if there is a standard 
for
date formatting in XML maybe the CMS uses that.  On a main page I need to 
list
the latest 5 article titles based on this "release date", with links to the
article content.  That would seem like a simple sort with some kind of break
condition after 5 loops (though I'm not even sure how to do that), but the
complication is that each record also has a "highlight until" date; if the
current system date is before the "highlight until" date, those highlighted
records need to appear at the top of the list, which should still be
constrained to 5 articles.

It seems that XSL doesn't inherently know what date it is, so either my CMS
vendor should already be passing that or I need to figure out how to pass 
this
as a parameter to my XSL.  I'm also not finding many web references to this
specific kind of date logic.  Based on these I'm wondering if a .NET 
component
is the right way to go, but since the data is already in XML I think I would
prefer XSL if possible/not too complicated.

Any assistance would be greatly appreciated.

Thanks,

   -John