diff flys-artifacts/contrib/inline-dc-attribute.xsl @ 5499:43bf4976dd24

Add XSL transformation that replaces <dc:attribute> with their shortened inline notation.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 28 Mar 2013 15:12:26 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/contrib/inline-dc-attribute.xsl	Thu Mar 28 15:12:26 2013 +0100
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    inline-dc-attribute.xsl
+    =======================
+    Transforms datacage templates from:
+
+        <foo>
+          <dc:element name="bar" value="${baz}"/>
+          <dc:element name="bla" value="${blub}-${urgs}"/>
+        </foo>
+
+    to:
+
+        <foo bar="{$bar} bla="{$blub}-{$urgs}/>
+-->
+<xsl:stylesheet version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:dc="http://www.intevation.org/2011/Datacage">
+
+  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
+
+  <xsl:template name="string-replace-all">
+    <xsl:param name="text"/>
+    <xsl:param name="replace"/>
+    <xsl:param name="by"/>
+    <xsl:choose>
+      <xsl:when test="contains($text, $replace)">
+        <xsl:value-of select="substring-before($text,$replace)"/>
+        <xsl:value-of select="$by"/>
+        <xsl:call-template name="string-replace-all">
+          <xsl:with-param name="text" select="substring-after($text,$replace)"/>
+          <xsl:with-param name="replace" select="$replace"/>
+          <xsl:with-param name="by" select="$by"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$text"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template
+    match="node()[count(dc:attribute) &gt; 0 and namespace-uri() != 'http://www.intevation.org/2011/Datacage']">
+    <xsl:copy>
+      <xsl:for-each select="./dc:attribute">
+        <xsl:attribute name="{@name}">
+          <xsl:call-template name="string-replace-all">
+            <xsl:with-param name="text" select="@value"/>
+            <xsl:with-param name="replace">${</xsl:with-param>
+            <xsl:with-param name="by">{$</xsl:with-param>
+          </xsl:call-template>
+        </xsl:attribute>
+      </xsl:for-each>
+      <xsl:apply-templates select="@*|node()" mode="ignore-text"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="dc:attribute|text()" mode="ignore-text"/>
+  <xsl:template match="@*|node()" mode="ignore-text">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="@*|node()">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+</xsl:stylesheet>

http://dive4elements.wald.intevation.org