-changed xsl to wrap quotes around fields 'only' when a comma is present
authorCherian Mathew <c.mathew@bgbm.org>
Fri, 2 Mar 2012 15:13:15 +0000 (15:13 +0000)
committerCherian Mathew <c.mathew@bgbm.org>
Fri, 2 Mar 2012 15:13:15 +0000 (15:13 +0000)
-changed occurrence id path to taxon occurrence id

DataCleaning/xml/gbifResponse_to_csv.xsl

index 7b0923fff034a88a5c028fb6a310703a3e91707f..91abf66ed5a5568c0cccff1d02f112091096af43 100755 (executable)
@@ -29,7 +29,8 @@
     <xsl:text> </xsl:text>\r
   </xsl:variable>\r
 \r
-  <xsl:template name="string-replace-all">\r
+\r
+  <xsl:template name="escape-quotes">\r
   <xsl:param name="text"/>\r
   <xsl:param name="replace"/>\r
   <xsl:param name="by"/>\r
@@ -37,7 +38,7 @@
     <xsl:when test="contains($text,$replace)">\r
       <xsl:value-of select="substring-before($text,$replace)"/>\r
       <xsl:value-of select="$by"/>\r
-      <xsl:call-template name="string-replace-all">\r
+      <xsl:call-template name="escape-quotes">\r
         <xsl:with-param name="text" select="substring-after($text,$replace)"/>\r
         <xsl:with-param name="replace" select="$replace"/>\r
         <xsl:with-param name="by" select="$by"/>\r
   </xsl:choose>\r
 </xsl:template>\r
 \r
+<xsl:template name="wrap-when-comma">\r
+  <xsl:param name="unwrappedtext"/>\r
+  <xsl:param name="delimiter"/>\r
+  <xsl:choose>\r
+    <xsl:when test="contains($unwrappedtext,$delimiter)">      \r
+    <xsl:text>"</xsl:text>\r
+    <xsl:call-template name="escape-quotes">\r
+      <xsl:with-param name="text" select="$unwrappedtext"/>\r
+      <xsl:with-param name="replace" select="'&quot;'"/>\r
+      <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+    </xsl:call-template>      \r
+    <xsl:text>"</xsl:text>\r
+  </xsl:when>\r
+  <xsl:otherwise>\r
+    <xsl:value-of select="$unwrappedtext"/>   \r
+  </xsl:otherwise>\r
+  </xsl:choose>\r
+</xsl:template>\r
+\r
   <xsl:template match="/"> \r
   <xsl:apply-templates select="//tax:TaxonOccurrence"/>        \r
 </xsl:template>\r
 \r
 <xsl:template match="tax:TaxonOccurrence">    \r
 \r
-<xsl:text>"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:TaxonName/tax2:authorship/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:TaxonName/tax2:authorship/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:genusPart/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:genusPart/text()"/>   \r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
     \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infragenericEpithet/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infragenericEpithet/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:specificEpithet/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:specificEpithet/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infraspecificEpithet/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infraspecificEpithet/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:nameComplete/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:nameComplete/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:uninomial/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:uninomial/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxonName/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxonName/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/@gbifKey/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>  \r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="@gbifKey"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
 <xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:decimalLatitude/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:decimalLatitude/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
 \r
 <xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:decimalLongitude/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:decimalLongitude/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
 \r
-<xsl:text>,"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:earliestDateCollected/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:earliestDateCollected/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:latestDateCollected/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:latestDateCollected/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>",</xsl:text>\r
-<xsl:value-of select="tax:coordinateUncertaintyInMeters/text()"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:coordinateUncertaintyInMeters/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
 \r
-<xsl:text>,"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:country/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:country/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:collector/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:collector/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:fieldNotes/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:fieldNotes/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:locality/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:locality/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>",</xsl:text>\r
-<xsl:value-of select="tax:maximumDepthInMeters/text()"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:maximumDepthInMeters/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
 \r
 <xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:maximumElevationInMeters/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:maximumElevationInMeters/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
 \r
 <xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:minimumDepthInMeters/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:minimumDepthInMeters/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
 \r
 <xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:minimumElevationInMeters/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:minimumElevationInMeters/text()"/>\r
+  <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
 \r
-<xsl:text>,"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="tax:value/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="tax:value/text()"/>   \r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="../../../../gbif:name/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="../../../../gbif:name/text()"/>   \r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="../../gbif:name/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="../../gbif:name/text()"/>   \r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="../../gbif:rights/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="../../gbif:rights/text()"/>   \r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
-  <xsl:with-param name="text" select="../../gbif:citation/text()"/>\r
-  <xsl:with-param name="replace" select="'&quot;'"/>\r
-  <xsl:with-param name="by" select="'&quot;&quot;'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+  <xsl:with-param name="unwrappedtext" select="../../gbif:citation/text()"/>   \r
+  <xsl:with-param name="delimiter" select="','"/>\r
 </xsl:call-template>\r
 \r
 <xsl:value-of select="$newline"/>   \r