XML to SVG with XSLT part I

  • : Function ereg() is deprecated in /homepages/26/d126321691/htdocs/latenightpc.com/includes/file.inc on line 893.
  • : Function ereg() is deprecated in /homepages/26/d126321691/htdocs/latenightpc.com/includes/file.inc on line 893.
  • : Function ereg() is deprecated in /homepages/26/d126321691/htdocs/latenightpc.com/includes/file.inc on line 893.
  • strict warning: Non-static method GalleryDataCache::put() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/embed.php on line 32.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 85.
  • : Assigning the return value of new by reference is deprecated in /homepages/26/d126321691/htdocs/g2svn/gallery2/bootstrap.inc on line 43.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 915.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::get() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 915.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 186.
  • : Assigning the return value of new by reference is deprecated in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 854.
  • strict warning: Non-static method GalleryEmbed::getEmbedPathByHttpRequest() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/embed.php on line 36.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 972.
  • strict warning: Non-static method GalleryUtilities::getRequestVariablesNoPrefix() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 1092.
  • strict warning: Non-static method GalleryUtilities::_getRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 289.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 874.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 878.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 293.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 708.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 714.
  • strict warning: Non-static method GalleryEmbed::init() should not be called statically in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/gallery/gallery_base.inc on line 131.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 94.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 42.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 43.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 44.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 45.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryModule.class on line 21.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 51.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryPlatform/UnixPlatform.class on line 21.
  • strict warning: Non-static method GalleryUtilities::isEmbedded() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/rewrite/classes/parsers/modrewrite/ModRewriteUrlGenerator.class on line 38.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 915.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::get() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 915.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 186.
  • strict warning: Non-static method GalleryCoreApi::getPluginParameter() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/rewrite/classes/parsers/modrewrite/ModRewriteUrlGenerator.class on line 40.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 299.
  • strict warning: Non-static method GalleryPluginHelper_simple::getParameter() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 301.
  • strict warning: Non-static method GalleryPluginHelper_simple::_fetchAllParameters() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 221.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 281.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::getFromDisk() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 286.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 273.
  • strict warning: Non-static method GalleryDataCache::getCachePath() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 280.
  • strict warning: Non-static method GalleryDataCache::getCacheTuple() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 438.
  • strict warning: Non-static method GalleryDataCache::put() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 290.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 85.
  • strict warning: Non-static method GalleryUtilities::getServerVar() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 357.
  • strict warning: Non-static method GalleryUtilities::getServerVar() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 358.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 1407.
  • strict warning: Non-static method GalleryUtilities::getServerVar() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 369.
  • strict warning: Non-static method GalleryUtilities::getServerVar() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 369.
  • strict warning: Non-static method GalleryUtilities::isEmbedded() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 381.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 915.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::get() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 915.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 186.
  • strict warning: Non-static method GalleryCoreApi::getPluginParameter() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 383.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 299.
  • strict warning: Non-static method GalleryPluginHelper_simple::getParameter() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 301.
  • strict warning: Non-static method GalleryPluginHelper_simple::_fetchAllParameters() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 221.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 281.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::getFromDisk() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 286.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 273.
  • strict warning: Non-static method GalleryDataCache::getCachePath() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 280.
  • strict warning: Non-static method GalleryDataCache::getCacheTuple() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 438.
  • strict warning: Non-static method GalleryDataCache::put() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 290.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 85.
  • strict warning: Non-static method GalleryCoreApi::getPluginParameter() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/rewrite/classes/RewriteUrlGenerator.class on line 73.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 299.
  • strict warning: Non-static method GalleryPluginHelper_simple::getParameter() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 301.
  • strict warning: Non-static method GalleryPluginHelper_simple::_fetchAllParameters() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 221.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 281.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::get() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 282.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 186.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 284.
  • strict warning: Non-static method GalleryUtilities::getRequestVariables() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GallerySession.class on line 200.
  • strict warning: Non-static method GalleryUtilities::_getRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 241.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 874.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 878.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 246.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 708.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 714.
  • strict warning: Non-static method GalleryUtilities::identifySearchEngine() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GallerySession.class on line 213.
  • strict warning: Non-static method GalleryUtilities::strToLower() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GallerySession.class on line 228.
  • strict warning: Non-static method GalleryUtilities::getServerVar() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GallerySession.class on line 1266.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 1407.
  • strict warning: Non-static method GalleryUtilities::getRemoteHostAddress() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GallerySession.class on line 1267.
  • strict warning: Non-static method GalleryUtilities::isTrustedProxy() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 1007.
  • strict warning: Non-static method GalleryUtilities::getRequestVariables() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 146.
  • strict warning: Non-static method GalleryUtilities::_getRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 242.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 874.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 878.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 246.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 708.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 714.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 148.
  • strict warning: Non-static method GalleryTranslator::getSupportedLanguageCode() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 150.
  • strict warning: Non-static method GalleryTranslator::getLanguageData() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryTranslator.class on line 414.
  • strict warning: Non-static method GalleryUtilities::strToUpper() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryTranslator.class on line 418.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 531.
  • strict warning: Non-static method GalleryUtilities::strToUpper() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryTranslator.class on line 418.
  • strict warning: Non-static method GalleryDataCache::put() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 103.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 85.
  • strict warning: Non-static method GalleryEmbed::isCompatibleWithEmbedApi() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 107.
  • strict warning: Non-static method GalleryEmbed::getApiVersion() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 61.
  • strict warning: Non-static method GalleryUtilities::isCompatibleWithApi() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 61.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 128.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryUtilities::getAllRequestVariables() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/rewrite/classes/RewriteUrlGenerator.class on line 91.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 274.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/rewrite/classes/RewriteUrlGenerator.class on line 101.
  • strict warning: call_user_func() expects parameter 1 to be a valid callback, non-static method RewriteSimpleHelper::loadItemIdFromPath() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/rewrite/classes/RewriteUrlGenerator.class on line 103.
  • strict warning: Non-static method GalleryUtilities::getRequestVariables() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/rewrite/classes/RewriteSimpleHelper.class on line 38.
  • strict warning: Non-static method GalleryUtilities::_getRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 242.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 874.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 878.
  • strict warning: Non-static method GalleryUtilities::_getRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 242.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 874.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 878.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 246.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 708.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 714.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 708.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 714.
  • strict warning: Non-static method GalleryUtilities::getRequestVariables() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 794.
  • strict warning: Non-static method GalleryUtilities::_getRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 241.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 874.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 878.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 246.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 708.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 714.
  • strict warning: Non-static method GalleryUtilities::getRequestVariables() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUrlGenerator.class on line 794.
  • strict warning: Non-static method GalleryUtilities::_getRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 241.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 874.
  • strict warning: Non-static method GalleryUtilities::_internalGetRequestVariable() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 878.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 246.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 708.
  • strict warning: Non-static method GalleryUtilities::sanitizeInputValues() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUtilities.class on line 714.
  • strict warning: Non-static method GalleryCoreApi::getAllFactoryImplementationIds() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 175.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 187.
  • strict warning: Non-static method GalleryFactoryHelper_simple::getAllImplementationIds() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 188.
  • strict warning: Non-static method GalleryFactoryHelper_simple::_getFactoryData() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryFactoryHelper_simple.class on line 213.
  • strict warning: Non-static method GalleryFactoryHelper_simple::_getSingleton() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryFactoryHelper_simple.class on line 63.
  • strict warning: Non-static method GalleryCoreApi::newFactoryInstanceById() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 182.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 174.
  • strict warning: Non-static method GalleryFactoryHelper_simple::newInstanceById() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 175.
  • strict warning: Non-static method GalleryFactoryHelper_simple::_getFactoryData() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryFactoryHelper_simple.class on line 191.
  • strict warning: Non-static method GalleryFactoryHelper_simple::_getSingleton() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryFactoryHelper_simple.class on line 63.
  • strict warning: Non-static method GalleryFactoryHelper_simple::newInstance() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryFactoryHelper_simple.class on line 201.
  • strict warning: Non-static method GalleryFactoryHelper_simple::_getFactoryData() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryFactoryHelper_simple.class on line 141.
  • strict warning: Non-static method GalleryFactoryHelper_simple::_getSingleton() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryFactoryHelper_simple.class on line 63.
  • strict warning: Non-static method GalleryCoreApi::getAnonymousUserId() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 199.
  • strict warning: Non-static method GalleryCoreApi::getPluginParameter() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 3078.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 300.
  • strict warning: Non-static method GalleryPluginHelper_simple::getParameter() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 302.
  • strict warning: Non-static method GalleryPluginHelper_simple::_fetchAllParameters() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 222.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 281.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::get() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryPluginHelper_simple.class on line 282.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 186.
  • strict warning: Non-static method GalleryCoreApi::loadEntitiesById() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/init.inc on line 204.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 2360.
  • strict warning: Non-static method GalleryEntityHelper_simple::loadEntitiesById() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 2361.
  • strict warning: Non-static method GalleryDataCache::containsKey() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryEntityHelper_simple.class on line 53.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 203.
  • strict warning: Non-static method GalleryDataCache::getFromDisk() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryEntityHelper_simple.class on line 56.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 273.
  • strict warning: Non-static method GalleryDataCache::getCachePath() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 280.
  • strict warning: Non-static method GalleryDataCache::getCacheTuple() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 405.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 287.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUser.class on line 21.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEntity.class on line 21.
  • strict warning: Declaration of GalleryUser::create() should be compatible with GalleryEntity::create() in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUser.class on line 42.
  • strict warning: Declaration of GalleryUser::save() should be compatible with GalleryEntity::save($postEvent = true, $setAclId = NULL) in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryUser.class on line 42.
  • strict warning: Non-static method GalleryDataCache::put() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryEntityHelper_simple.class on line 95.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 85.
  • strict warning: Non-static method GalleryUtilities::isA() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/helpers/GalleryEntityHelper_simple.class on line 118.
  • strict warning: Non-static method GalleryDataCache::put() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryEmbed.class on line 133.
  • strict warning: Non-static method GalleryDataCache::_getCache() should not be called statically in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryDataCache.class on line 85.
  • strict warning: Non-static method GalleryCoreApi::getMapEntry() should not be called statically in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/gallery/gallery_user.inc on line 616.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/Gallery.class on line 419.
  • : Assigning the return value of new by reference is deprecated in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryStorage.class on line 290.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryStorage.class on line 30.
  • warning: mysql_connect(): Unknown MySQL server host 'db251.perfora.net' (1) in /homepages/26/d126321691/htdocs/g2svn/gallery2/lib/adodb/drivers/adodb-mysql.inc.php on line 365.
  • strict warning: Non-static method GalleryCoreApi::error() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryStorage.class on line 239.
  • strict warning: Non-static method GalleryCoreApi::requireOnce() should not be called statically, assuming $this from incompatible context in /homepages/26/d126321691/htdocs/g2svn/gallery2/modules/core/classes/GalleryCoreApi.class on line 2861.
  • strict warning: Non-static method view::load() should not be called statically in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/views.module on line 823.
  • strict warning: Declaration of views_plugin_display::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/plugins/views_plugin_display.inc on line 1684.
  • strict warning: Declaration of views_plugin_display::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/plugins/views_plugin_display.inc on line 1684.
  • strict warning: Declaration of views_handler_argument::init() should be compatible with views_handler::init(&$view, $options) in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/handlers/views_handler_argument.inc on line 699.
  • strict warning: Declaration of views_handler_filter::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/handlers/views_handler_filter.inc on line 584.
  • strict warning: Declaration of views_handler_filter::options_submit() should be compatible with views_handler::options_submit($form, &$form_state) in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/handlers/views_handler_filter.inc on line 584.
  • strict warning: Declaration of views_plugin_row::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/plugins/views_plugin_row.inc on line 61.
  • strict warning: Declaration of views_plugin_row::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/plugins/views_plugin_row.inc on line 61.
  • strict warning: Non-static method view::load() should not be called statically in /homepages/26/d126321691/htdocs/latenightpc.com/sites/all/modules/views/views.module on line 823.

In pursuit of useful applications of SVG, I've become interested in using XSL transforms to turn data stored as XML into an SVG representation. I found a good starting article at A List Apart and it pointed to a great reference by Paul Grosso and Norman Walsh. These might be dated now, but I found them helpful starting points.

On to my example. We're going to need some data. I had a look at StatsCan and found a report on population by sex and age group. I would have liked to get some more complete raw data, but it appears to cost a few bucks, so I'll make do. I believe there are ways to scrape the data out of the table with just XSLT, but since this is a learning experience for me, I decided to skip that step by just pulling the numbers out by hand and creating an XML file with a text editor.
The results of my effort look a little like this:

<?xml version="1.0" encoding='UTF-8'?>
<populationbyageandsex>
<recordbyagegroup>
<agegroup>0-4</agegroup>
<kpersons>1695.9</kpersons>
<kmalepersons>868.0</kmalepersons>
<kfemalepersons>827.9</kfemalepersons>
</recordbyagegroup>
...
<recordbyagegroup>
<agegroup>90 and over</agegroup>
<kpersons>162.7</kpersons>
<kmalepersons>42.6</kmalepersons>
<kfemalepersons>120.1</kfemalepersons>
</recordbyagegroup>
</populationbyageandsex>

The root node is called "populationbyageandsex" and each record (or row of data) is kept in a "recordbyagegroup". Between the open and close tags for "recordbyagegroup" are the fields for that record. Each field has a unique name and the content (between the open and close tags) of the element is the value of the field. The format is something I just made up for this example, XML is nice that way.

The next step was to write the XSL transformations that would understand the data well enough to create a chart in SVG.

At first I didn't understand that XSLT is a complete programming language (it may not have been at points in the past, but that's what it is now). I also didn't realize that XSLT is designed for transforming one flavour of XML to another. I guess I was just pretty confused by the whole thing (that's not to say that I'm not still a little muddy on the subject).

Here's what the XSLT looks like now that it works:

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

<xsl:output method="xml"
omit-xml-declaration = "no"
indent="yes"
version="1.0"
doctype-system = "-//W3C//DTD SVG 1.0//EN"
doctype-public = "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
/>

<xsl:template match="/populationbyageandsex">
<svg viewBox="0 0 3000 2000" xmlns:svg="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:apply-templates select="recordbyagegroup"/>
</svg>
</xsl:template>

<xsl:template match="recordbyagegroup">
<xsl:call-template name="plot-line">
<xsl:with-param name="length" select="kpersons"/>
<xsl:with-param name="position" select="position()"/>
<xsl:with-param name="label" select="agegroup"/>
</xsl:call-template>
</xsl:template>

<!-- length is the length of the bar for this data value -->
<!-- position is ordinal value of this data point in the data set -->
<!-- label is the text used to describe the data set -->
<xsl:template name="plot-line">
<xsl:param name="label"/>
<xsl:param name="length"/>
<xsl:param name="position"/>
<xsl:element name = "polyline" >
<xsl:attribute name="points"> 10,<xsl:value-of select="$position * 100"/>,<xsl:value-of select="$length"/>,<xsl:value-of select="$position * 100"/> </xsl:attribute>
<xsl:attribute name="fill"> none </xsl:attribute>
<xsl:attribute name="stroke"> black </xsl:attribute>
<xsl:attribute name="stroke-width"> 30 </xsl:attribute>
</xsl:element>
<xsl:element name = "text" >
<xsl:attribute name="x"> <xsl:value-of select="$length + 10"/> </xsl:attribute>
<xsl:attribute name="y"> <xsl:value-of select="$position * 100 + 20"/> </xsl:attribute>
<xsl:attribute name="font-size"> 40 </xsl:attribute>
<xsl:attribute name="stroke"> red </xsl:attribute>
<xsl:attribute name="stroke-width"> 1 </xsl:attribute>
<xsl:value-of select="$label"/>
</xsl:element>

</xsl:template>

</xsl:stylesheet>

Look at the template called "plot-line" in the code. A template in XSLT seems to work a whole lot like a function in other programming languages. It's called using the xsl:call-template element and the parameters are each passed in a xsl:with-param tag. The named parameters show up in the template using xsl:param elements.

The xsl:value-of element does all the substitution in my example (there may be other and better ways, but I don't know them yet). The select attribute of the value-of tag can refer to several expressions. A tag in the current node like the places that use select="kpersons". A function from XPath like select="position()" (this gets the ordinal of the current node in a collection). A formula like select="$position * 100". Note that I did a bad thing here - I named a parameter "position" and I filled its value from the position() function. I realize this can be a little confusing, I'll fix it later. In the formula case, $position refers to the parameter position from the xsl:param name="position" line.

The plot-line template produces one line of the chart and a text label for it. It does this with the xsl:element tag. This tag inserts an element into the output. The attributes of the element are nested with xsl:attribute tags. There's not really too much more to it once you know that, but I'll go over some more details later. Oh, here's the SVG - you'll need an SVG viewer to display it.

Can't view SVG? There's an explanation of how to view SVG on SVGBasics.com.

4
Your rating: None Average: 4 (1 vote)

There's an XPath2/XSLT2 version of the tutorial now too, which I hope will be equally useful as folks move to the new technologies.

Hi there! Thanks for the pointer, I take it you mean the slides from your presentation at Extreme Markup Languages in Montréal. I think I prefer your older tutorial only because of my background. Once I have a better grasp of XML, I expect I'll get more out of your newer tutorial. Thanks for taking the time to come read.
Nice pictures from Las Vegas btw (the Red Rocks Canyon is my favourite).

[...] I&#8217;ve been thinking of doing something like this for awhile: render my web statistics in on-the-fly SVG graphs via some XSLT. Rob did something like this way back when he first started his blog. I know Mint has the powerful &#8220;Fresh View&#8221; pepper that uses SVG to display its data visually. Andrew Gregory has had his home-brewed solution for a little while now. But this one just came up in Technorati, it includes the 3 small files you need to tweak. Fun &#8220;milk carton&#8221; WordPress template, too. [...]

Its possible to simplify this a bit, e.g, by replacing the whole

though I'm not sure about your syntax there, shouldn't that be

style="font-size: 40pt; stroke:red; stroke-width: 1"

?

Shaun, you're right. I could have written something a lot shorter there. You can put the text element in with all its attributes and the XSLT parser will just copy it over. (This is one of my first XSLT experiments and I didn't know that then)