xsl-list
[Top] [All Lists]

RE: [xsl] NMTOKENS and xsl:key

2007-01-07 17:52:49
You don't say whether this is a schema-aware stylesheet. If it is, then the
type xs:NMTOKENS will be recognized, the typed value of @target will be a
sequence of tokens, and 

<xsl:key match="item" use="@target"/>

will index the value of each token.

If it's not schema-aware then you need to split the value "by hand":

<xsl:key match="item" use="tokenize(@target, '\s+')"/> 

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

-----Original Message-----
From: Houghton,Andrew [mailto:houghtoa(_at_)oclc(_dot_)org] 
Sent: 07 January 2007 22:58
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] NMTOKENS and xsl:key


I'm hoping someone on the list might be able to provide some 
insight in how I might address the following issue.  I'm 
using Saxon 8.8 and XSL 2.0 for developing a transform.  The 
source document looks something like:

<document>
  <section>
    <item target="abc def ghi"/>
    <item target="foo bar"/>
    <item target="abc bar"/>
    <item target="def foo"/>
  </section>
  <section>
    <item target="abc"/>
    <item target="foo"/>
    <item target="ghi bar"/>
  </section>
</document>

The <section> and <item> elements are repeatable and the 
target attribute is an NMTOKEN list.

Since the source document is quite large, I was hoping to use 
xsl:key to index each token value in the item's target 
attribute so I could query for all the items that might 
contain a particular token value, e.g., "foo".

However, looking at xsl:key it seems to me that it will only 
index the entire NMTOKEN list as a single value.  What I'm 
trying to accomplish when I query for the token value "foo", 
is that I want xsl:key to return the following node
list:

  /document/section[1]/item[2]
  /document/section[1]/item[4]
  /document/section[2]/item[2]

correspondingly if I query for "abc" I want xsl:key to be 
able to return the following node list:

  /document/section[1]/item[1]
  /document/section[1]/item[3]
  /document/section[2]/item[1]

does anybody know of anyway I can get xsl:key to index each 
token in the NMTOKEN list for the target attribute?  I 
realize I could write an XPath expression, but continually 
iterating over a large document looking for different token 
values would be extremely slow which is one of the main 
reason why I was looking at using xsl:key.

Can you think of any alternate solutions to the problem.

BTW, the tokens in the list are *not* known in advance to the 
transform.


Thanks, Andy.

--~------------------------------------------------------------------
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>