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

Semantics of xsl:key (MSXML4 broken?)

Subject: Semantics of xsl:key (MSXML4 broken?)
From: Bill Cohagan <bill.cohagan@xxxxxxxxxxxxx>
Date: Fri, 14 Jun 2002 11:04:59 -0500
 Semantics of xsl:key (MSXML4 broken?)
I've got an xsl:key definition that works fine on Saxon 6.5.2, works on
Xalan, but does not work on MSXML4SP1. In fact the original XSLT code
actually caused MSXML to crash although the "testcase" version just doesn't
work properly.

The problem I'm trying to solve is to take an XML representation of a
relational many-to-many relationship and define a SINGLE xsl:key that will
map from one side of the relationship to the other.  The testcase uses
Authors and Books, so I want to be able to define a key that when given an
authorid will produce the set of corresponding Book elements. (Obviously in
the real world we'd also like to go the other way, but for testcase purposes
I'll just deal with one direction.)

Our solution uses an "unusual" use attribute on the xsl:key definition, but
if you interpret the spec the way I do then it ought to work just fine.
Apparently the Saxon and Xalan authors *do* interpret the spec the way I do
on this issue. 

I've had a brief interchange with a MS person on one of their MSDN
"moderated" groups, but he seemed to think that our approach should NOT
work, that the use attribute was somehow restricted to *relative* path
expression. In any case he vanished before addressing any of my questions to
him as to why he and/or MS believed this to be the case.

What I'm looking for is some confirmation that the code *ought* to work (as
it in fact does in Saxon/Xalan) - or some cogent argument as to why it
should not; i.e., an explanation of how the spec disallows this sort of
thing.

Anyway, here's the testcase code, first the XML, then the XSL, and finally
the results, expected and actual.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>XML>>>>>>>>>>>>>>>>>>>>>>
<testcase>
  <Authors>
    <Author authorid = "1" name = "author 1"/>
    <Author authorid = "2" name = "author 2"/>
    <Author authorid = "3" name = "author 3"/>
  </Authors>
  <Books>
    <Book bookid = "a" name = "book a"/>
    <Book bookid = "b" name = "book b"/>
    <Book bookid = "c" name = "book c"/>
  </Books>
  <BooksAuthors>
    <BookAuthor bookauthorid = "x" bookid = "a" authorid = "1"/>
    <BookAuthor bookauthorid = "y" bookid = "a" authorid = "2"/>
    <BookAuthor bookauthorid = "z" bookid = "b" authorid = "1"/>
    <BookAuthor bookauthorid = "w" bookid = "b" authorid = "3"/>
  </BooksAuthors>
</testcase>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>XSL>>>>>>>>>>>>>>>>>>>>>>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" omit-xml-declaration="yes" indent = "yes"/>

  <xsl:key name = 'test' match = 'Book' use =
"/testcase/BooksAuthors/BookAuthor[@bookid = current()/@bookid]/@authorid"/>

  <xsl:template match = "/">
    <TESTRESULT>
      <xsl:for-each select = "key('test','1')">
        <xsl:copy-of select = "."/>
      </xsl:for-each>
    </TESTRESULT>
  </xsl:template>
</xsl:stylesheet>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SAXON RESULT>>>>>>>>>>>>>
<TESTRESULT>
   <Book bookid="a" name="book a"/>
   <Book bookid="b" name="book b"/>
</TESTRESULT>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>MSXML4 RESULT>>>>>>>>>>>>
<TESTRESULT>
</TESTRESULT>

Thanks in advance,
 Bill  bill@xxxxxxxxxxxxxxxxxxxxx

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.