- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Sun, 12 Apr 2009 19:40:46 +0000
- To: "public-rdf-dawg-comments@w3.org" <public-rdf-dawg-comments@w3.org>
[forwarded as per message request]
-----Original Message-----
From: jena-dev@yahoogroups.com [mailto:jena-dev@yahoogroups.com] On Behalf Of stephen.allen@ymail.com
Sent: 02 April 2009 20:55
To: jena-dev@yahoogroups.com
Subject: [jena-dev] SPARQL XML to HTML XSL Performance Bug (Joseki)
Hi,
I've discovered a performance bug in the xml-to-html.xsl stylesheet in Joseki. This XSL is used to transform SPARQL result queries into XHTML for display in a browser. The bug does not have much affect on small result sets (10's of results), but has a pretty significant effect for larger result sets (1000's of results).
The bug occurs when the XSL is iterating over the bindings in each <result> tag. The variables are selected using the xpath expression "//res:head/res:variable", which forces a search over all of the nodes in the document to find a match for "res:head/res:variable". This is quite slow as it scales with the size of the document.
Since the SPARQL XML result format specifies that the "res:head" elements is on the "res:sparql" element which is directly on the root, we can replace the previous xpath expression with "/res:sparql/res:head/res:variable" and gain a significant speed increase (no need to search the entire document).
Just as a single data point, I am seeing the rendering time in Firefox for a modest 3,000 entity result set drop from 40 seconds to 5 seconds with the fix.
I've attached a patch for this bug in Joseki, however this bug seems to be pretty wide-spread, and I've seen it in all versions of this XSL, including the one in the "W3C SPARQL Query Results XML Format" Recommendation [4]. Does anyone on this list know who to contact about this? or can forward the patch on the the appropriate person?
Here is a non-exhaustive list of some of the locations I've identified this bug [1], [2], [3], [4].
Best Regards,
Stephen Allen
BBN Technologies
[1] http://joseki.cvs.sourceforge.net/viewvc/joseki/Joseki3/ResultSet/xml-to-html.xsl
[2] http://joseki.cvs.sourceforge.net/viewvc/joseki/Joseki3/ResultSet/result2-to-html.xsl
[3] http://www.sparql.org/xml-to-html.xsl
[4] http://www.w3.org/TR/rdf-sparql-XMLres/result-to-html.xsl
Patch Follows:
--- C:\Temp\tmp\Joseki3\ResultSet\xml-to-html.xsl.orig 2006-02-24 06:10:35.000000000 -0400
+++ C:\Temp\tmp\Joseki3\ResultSet\xml-to-html.xsl 2009-04-02 15:48:06.000000000 -0400
@@ -91,13 +91,13 @@
</table>
</div>
</xsl:template>
<xsl:template match="res:result">
<xsl:variable name="current" select="."/>
- <xsl:for-each select="//res:head/res:variable">
+ <xsl:for-each select="/res:sparql/res:head/res:variable">
<xsl:variable name="name" select="@name"/>
<td>
<xsl:choose>
<xsl:when test="$current/res:binding[@name=$name]">
<!-- apply template for the correct value type (bnode, uri, literal) -->
<xsl:apply-templates select="$current/res:binding[@name=$name]"/>
------------------------------------
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/jena-dev/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/jena-dev/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:jena-dev-digest@yahoogroups.com
mailto:jena-dev-fullfeatured@yahoogroups.com
<*> To unsubscribe from this group, send an email to:
jena-dev-unsubscribe@yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
Received on Sunday, 12 April 2009 19:43:15 UTC