You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by sg...@apache.org on 2021/10/03 20:34:44 UTC

[freemarker-generator] 01/02: FREEMARKER-195 [freemarker-generator] Update the FTL sample files

This is an automated email from the ASF dual-hosted git repository.

sgoeschl pushed a commit to branch FREEMARKER-195
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git

commit 2fdcb09641f4d8399e297ad42656a2ee08b1d46d
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Sun Oct 3 22:30:45 2021 +0200

    FREEMARKER-195 [freemarker-generator] Update the FTL sample files
---
 freemarker-generator-cli/CHANGELOG.md              |  4 +--
 .../src/app/examples/data/ftl/nginx/nginx.conf.ftl |  2 +-
 .../templates/accesslog/combined-access.ftl        |  2 +-
 .../templates/csv/csv/gatling-user-credentials.ftl |  2 +-
 .../app/examples/templates/csv/fo/transactions.ftl |  2 +-
 .../app/examples/templates/csv/fo/transform.ftl    |  2 +-
 .../examples/templates/csv/html/transactions.ftl   |  2 +-
 .../src/app/examples/templates/csv/md/filter.ftl   |  2 +-
 .../src/app/examples/templates/csv/shell/curl.ftl  |  2 +-
 .../app/examples/templates/dataframe/example.ftl   |  2 +-
 .../examples/templates/dataframe/html/print.ftl    |  2 +-
 .../src/app/examples/templates/datasources.ftl     |  6 ++---
 .../src/app/examples/templates/demo.ftl            | 10 ++++----
 .../app/examples/templates/excel/csv/custom.ftl    |  2 +-
 .../templates/excel/dataframe/transform.ftl        |  2 +-
 .../examples/templates/html/csv/dependencies.ftl   |  2 +-
 .../app/examples/templates/html/txt/licence.ftl    |  2 +-
 .../templates/json/csv/swagger-endpoints.ftl       |  2 +-
 .../templates/json/dataframe/github-users.ftl      |  2 +-
 .../examples/templates/json/md/github-users.ftl    |  2 +-
 .../templates/logs/csv/serverlog-to-csv.ftl        |  2 +-
 .../templates/properties/csv/locker-test-users.ftl |  2 +-
 .../app/examples/templates/tsv/fo/transactions.ftl |  2 +-
 .../app/examples/templates/xml/txt/recipients.ftl  |  2 +-
 .../app/examples/templates/yaml/txt/transform.ftl  |  2 +-
 .../src/app/scripts/run-examples.bat               | 12 ++++-----
 .../src/app/scripts/run-examples.sh                | 12 ++++-----
 .../src/app/templates/freemarker-generator/cat.ftl |  2 +-
 .../freemarker-generator/csv/csv/transform.ftl     |  2 +-
 .../freemarker-generator/csv/html/transform.ftl    |  2 +-
 .../freemarker-generator/csv/md/transform.ftl      |  2 +-
 .../freemarker-generator/excel/csv/transform.ftl   |  2 +-
 .../freemarker-generator/excel/html/transform.ftl  |  2 +-
 .../freemarker-generator/excel/md/transform.ftl    |  2 +-
 .../app/templates/freemarker-generator/info.ftl    |  2 +-
 .../freemarker-generator/json/yaml/transform.ftl   |  2 +-
 .../freemarker-generator/yaml/json/transform.ftl   |  2 +-
 .../src/site/markdown/cli/concepts/data-sources.md | 14 +++++-----
 .../site/markdown/cli/usage/parsing-with-grok.md   |  4 +--
 .../site/markdown/cli/usage/running-examples.md    | 30 +++++++++++-----------
 .../site/markdown/cli/usage/using-dataframes.md    |  6 ++---
 .../freemarker/generator/cli/ExamplesTest.java     | 12 ++++-----
 .../src/test/templates/echo.ftl                    |  2 +-
 .../src/test/templates/manual.ftl                  |  8 +++---
 .../src/test/templates/tools/csv.ftl               |  2 +-
 45 files changed, 93 insertions(+), 93 deletions(-)

diff --git a/freemarker-generator-cli/CHANGELOG.md b/freemarker-generator-cli/CHANGELOG.md
index 7e3ccbc..d74ca0e 100644
--- a/freemarker-generator-cli/CHANGELOG.md
+++ b/freemarker-generator-cli/CHANGELOG.md
@@ -4,11 +4,11 @@ All notable changes to this project will be documented in this file. We try to a
 
 ## 0.2.0-SNAPSHOT
 
-## 0.1.0-SNAPSHOT (unreleased)
-
 ### Changed
 * [FREEMARKER-195] Improve exposure of DataSources using TemplateHashModelEx2
 
+## 0.1.0-SNAPSHOT (unreleased)
+
 ### Added
 * Use `-Xverify:none -XX:TieredStopAtLevel=1` to improve startup time of CLI
 * [FREEMARKER-188] Support an output "generation" mode to create an output for each `DataSource`
diff --git a/freemarker-generator-cli/src/app/examples/data/ftl/nginx/nginx.conf.ftl b/freemarker-generator-cli/src/app/examples/data/ftl/nginx/nginx.conf.ftl
index 3cbf310..d74b193 100644
--- a/freemarker-generator-cli/src/app/examples/data/ftl/nginx/nginx.conf.ftl
+++ b/freemarker-generator-cli/src/app/examples/data/ftl/nginx/nginx.conf.ftl
@@ -1,4 +1,4 @@
-<#assign env = tools.properties.parse(dataSources?values[0])>
+<#assign env = tools.properties.parse(dataSources[0])>
 
 server {
   listen 80;
diff --git a/freemarker-generator-cli/src/app/examples/templates/accesslog/combined-access.ftl b/freemarker-generator-cli/src/app/examples/templates/accesslog/combined-access.ftl
index 944a826..28f7f71 100644
--- a/freemarker-generator-cli/src/app/examples/templates/accesslog/combined-access.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/accesslog/combined-access.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#assign grok = tools.grok.create("%{COMBINEDAPACHELOG}")>
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign lines = dataSource.getLineIterator()>
 
 <#compress>
diff --git a/freemarker-generator-cli/src/app/examples/templates/csv/csv/gatling-user-credentials.ftl b/freemarker-generator-cli/src/app/examples/templates/csv/csv/gatling-user-credentials.ftl
index aae83f4..46d505b 100644
--- a/freemarker-generator-cli/src/app/examples/templates/csv/csv/gatling-user-credentials.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/csv/csv/gatling-user-credentials.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign cvsFormat = tools.csv.formats.DEFAULT.withDelimiter(';')>
 <#assign csvParser = tools.csv.parse(dataSource, cvsFormat)>
 <#assign csvRecords = csvParser.records>
diff --git a/freemarker-generator-cli/src/app/examples/templates/csv/fo/transactions.ftl b/freemarker-generator-cli/src/app/examples/templates/csv/fo/transactions.ftl
index 9a513ca..089790f 100644
--- a/freemarker-generator-cli/src/app/examples/templates/csv/fo/transactions.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/csv/fo/transactions.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign name = dataSource.name>
 <#assign cvsFormat = tools.csv.formats.DEFAULT.withDelimiter('\t').withHeader()>
 <#assign csvParser = tools.csv.parse(dataSource, cvsFormat)>
diff --git a/freemarker-generator-cli/src/app/examples/templates/csv/fo/transform.ftl b/freemarker-generator-cli/src/app/examples/templates/csv/fo/transform.ftl
index 7e77af2..8f49b72 100644
--- a/freemarker-generator-cli/src/app/examples/templates/csv/fo/transform.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/csv/fo/transform.ftl
@@ -17,7 +17,7 @@
 -->
 <#assign csvFormatName = CVS_IN_FORMAT!"DEFAULT">
 <#assign cvsFormat = tools.csv.formats[csvFormatName].withHeader()>
-<#assign csvParser = tools.csv.parse(dataSources?values[0], cvsFormat)>
+<#assign csvParser = tools.csv.parse(dataSources[0], cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/src/app/examples/templates/csv/html/transactions.ftl b/freemarker-generator-cli/src/app/examples/templates/csv/html/transactions.ftl
index 030cd82..c2eaa05 100644
--- a/freemarker-generator-cli/src/app/examples/templates/csv/html/transactions.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/csv/html/transactions.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign name = dataSource.name>
 <#assign cvsFormat = tools.csv.formats.DEFAULT.withDelimiter('\t').withHeader()>
 <#assign csvParser = tools.csv.parse(dataSource, cvsFormat)>
diff --git a/freemarker-generator-cli/src/app/examples/templates/csv/md/filter.ftl b/freemarker-generator-cli/src/app/examples/templates/csv/md/filter.ftl
index 49beb57..acec8b3 100644
--- a/freemarker-generator-cli/src/app/examples/templates/csv/md/filter.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/csv/md/filter.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign parser = parser(dataSource)>
 <#assign headers = parser.getHeaderNames()>
 <#assign column = tools.system.getParameter("column")>
diff --git a/freemarker-generator-cli/src/app/examples/templates/csv/shell/curl.ftl b/freemarker-generator-cli/src/app/examples/templates/csv/shell/curl.ftl
index 114dd4f..4a18ecf 100644
--- a/freemarker-generator-cli/src/app/examples/templates/csv/shell/curl.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/csv/shell/curl.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#assign cvsFormat = tools.csv.formats.DEFAULT.withHeader()>
-<#assign csvParser = tools.csv.parse(dataSources?values[0], cvsFormat)>
+<#assign csvParser = tools.csv.parse(dataSources[0], cvsFormat)>
 <#assign records = csvParser.records>
 <#assign csvMap = tools.csv.toMap(records, "disposer")>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/src/app/examples/templates/dataframe/example.ftl b/freemarker-generator-cli/src/app/examples/templates/dataframe/example.ftl
index 3b154ea..7cbf309 100644
--- a/freemarker-generator-cli/src/app/examples/templates/dataframe/example.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/dataframe/example.ftl
@@ -14,7 +14,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign csvParser = tools.csv.parse(dataSource, tools.csv.formats.DATAFRAME)>
 <#assign users = tools.dataframe.fromCSVParser(csvParser)>
 
diff --git a/freemarker-generator-cli/src/app/examples/templates/dataframe/html/print.ftl b/freemarker-generator-cli/src/app/examples/templates/dataframe/html/print.ftl
index 3ae73c8..82343b8 100644
--- a/freemarker-generator-cli/src/app/examples/templates/dataframe/html/print.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/dataframe/html/print.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#assign cvsFormat = tools.csv.formats.DEFAULT.withHeader().withDelimiter(';')>
-<#assign csvParser = tools.csv.parse(dataSources?values[0], cvsFormat)>
+<#assign csvParser = tools.csv.parse(dataSources[0], cvsFormat)>
 <#assign dataFrame = tools.dataframe.toDataFrame(csvParser)>
 <#--------------------------------------------------------------------------->
 <!DOCTYPE html>
diff --git a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
index ec02a83..57445ce 100644
--- a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
@@ -42,7 +42,7 @@ Iterate Over DataSources as Map
 
 Iterate Over DataSources as Values
 ==============================================================================
-<#list dataSources?values as dataSource>
+<#list dataSources as dataSource>
     dataSource[${dataSource?index}] => ${dataSource.uri}<#lt>
 </#list>
 
@@ -69,13 +69,13 @@ Iterate Over DataSources Using Wildcard Search
 </#if>
 
 <#if dataSources?has_content>
-    <#list dataSources?values as dataSource>
+    <#list dataSources as dataSource>
         [#${dataSource?counter}] - ${dataSource.name}
         ==============================================================================
 
         Invoke Arbitrary Methods On DataSource
         ---------------------------------------------------------------------------
-        <#assign dataSource=dataSources?values?first>
+        <#assign dataSource=dataSources?first>
         Name                : ${dataSource.name}
         Nr of lines         : ${dataSource.lines?size}
         Content Type        : ${dataSource.contentType}
diff --git a/freemarker-generator-cli/src/app/examples/templates/demo.ftl b/freemarker-generator-cli/src/app/examples/templates/demo.ftl
index 879fb3f..ff4f3e2 100644
--- a/freemarker-generator-cli/src/app/examples/templates/demo.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/demo.ftl
@@ -48,7 +48,7 @@ java.math.RoundingMode#UP: ${tools.freemarker.enums["java.math.RoundingMode"].UP
 6) Display list of data sources
 ---------------------------------------------------------------------------
 List all data sources:
-<#list dataSources?values as dataSource>
+<#list dataSources as dataSource>
 - Document: name=${dataSource.name} uri=${dataSource.uri} length=${dataSource.length} charset=${dataSource.charset}
 </#list>
 
@@ -89,22 +89,22 @@ Get the number of data sources:
 - ${dataSources?size}
 <#if dataSources?has_content>
 Get the first data source:
-- ${dataSources?values[0].name!"No data sources provided"}
+- ${dataSources[0].name!"No data sources provided"}
 </#if>
 Get all documents as map:
 <#list dataSources as name, ds>
 - ${name} => ${ds.mimeType}
 </#list>
 List all data sources containing "test" in the name
-<#list dataSources?values?filter(ds -> ds.match("name", "*test*")) as ds>
+<#list dataSources?filter(ds -> ds.match("name", "*test*")) as ds>
 - ${ds.name}
 </#list>
 List all data sources having "json" extension
-<#list dataSources?values?filter(ds -> ds.match("extension", "json")) as ds>
+<#list dataSources?filter(ds -> ds.match("extension", "json")) as ds>
 - ${ds.name}
 </#list>
 List all data sources having "src/test/data/properties" in their file path
-<#list dataSources?values?filter(ds -> ds.match("filePath", "*/src/test/data/properties")) as ds>
+<#list dataSources?filter(ds -> ds.match("filePath", "*/src/test/data/properties")) as ds>
 - ${ds.name}
 </#list>
 
diff --git a/freemarker-generator-cli/src/app/examples/templates/excel/csv/custom.ftl b/freemarker-generator-cli/src/app/examples/templates/excel/csv/custom.ftl
index 1e2bd06..59ca407 100644
--- a/freemarker-generator-cli/src/app/examples/templates/excel/csv/custom.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/excel/csv/custom.ftl
@@ -18,7 +18,7 @@
 <#assign format = CSV_TARGET_FORMAT!"DEFAULT">
 <#assign salt = tools.system.parameters.salt!"salt">
 <#-- Parse the first data source & sheet of the Excel document -->
-<#assign workbook = tools.excel.parse(dataSources?values[0])>
+<#assign workbook = tools.excel.parse(dataSources[0])>
 <#assign sheet = tools.excel.getSheets(workbook)[0]>
 <#assign records = tools.excel.toTable(sheet)>
 <#-- Setup CSVPrinter  -->
diff --git a/freemarker-generator-cli/src/app/examples/templates/excel/dataframe/transform.ftl b/freemarker-generator-cli/src/app/examples/templates/excel/dataframe/transform.ftl
index 5b24903..bd5252c 100644
--- a/freemarker-generator-cli/src/app/examples/templates/excel/dataframe/transform.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/excel/dataframe/transform.ftl
@@ -14,7 +14,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign workbook = tools.excel.parse(dataSource)>
 <#list tools.excel.getSheets(workbook) as sheet>
     <#assign table = tools.excel.toTable(sheet)>
diff --git a/freemarker-generator-cli/src/app/examples/templates/html/csv/dependencies.ftl b/freemarker-generator-cli/src/app/examples/templates/html/csv/dependencies.ftl
index 51fe17e..4c2e2de 100644
--- a/freemarker-generator-cli/src/app/examples/templates/html/csv/dependencies.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/html/csv/dependencies.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign name = dataSource.name>
 <#assign html = tools.jsoup.parse(dataSource)>
 
diff --git a/freemarker-generator-cli/src/app/examples/templates/html/txt/licence.ftl b/freemarker-generator-cli/src/app/examples/templates/html/txt/licence.ftl
index 2807493..d503011 100644
--- a/freemarker-generator-cli/src/app/examples/templates/html/txt/licence.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/html/txt/licence.ftl
@@ -17,7 +17,7 @@
 <#--
 FreeMarker template to create a LICENCE file.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign html = tools.jsoup.parse(dataSource)>
 <#assign dataframe = tools.dataframe.create()
     .addStringColumn("GroupId")
diff --git a/freemarker-generator-cli/src/app/examples/templates/json/csv/swagger-endpoints.ftl b/freemarker-generator-cli/src/app/examples/templates/json/csv/swagger-endpoints.ftl
index 6ab4ce2..a70286c 100644
--- a/freemarker-generator-cli/src/app/examples/templates/json/csv/swagger-endpoints.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/json/csv/swagger-endpoints.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign map = tools.gson.parse(dataSources?values[0])>
+<#assign map = tools.gson.parse(dataSources[0])>
 <#assign basePath = map.basePath!"/">
 <#assign paths = map.paths!{}>
 
diff --git a/freemarker-generator-cli/src/app/examples/templates/json/dataframe/github-users.ftl b/freemarker-generator-cli/src/app/examples/templates/json/dataframe/github-users.ftl
index 480f59a..49c21c2 100644
--- a/freemarker-generator-cli/src/app/examples/templates/json/dataframe/github-users.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/json/dataframe/github-users.ftl
@@ -15,6 +15,6 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<#assign json = tools.gson.parse(dataSources?values[0])>
+<#assign json = tools.gson.parse(dataSources[0])>
 <#assign dataframe = tools.dataframe.fromMaps(json)>
 ${tools.dataframe.print(dataframe)}
diff --git a/freemarker-generator-cli/src/app/examples/templates/json/md/github-users.ftl b/freemarker-generator-cli/src/app/examples/templates/json/md/github-users.ftl
index a83d07b..39b37a2 100644
--- a/freemarker-generator-cli/src/app/examples/templates/json/md/github-users.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/json/md/github-users.ftl
@@ -15,7 +15,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<#assign json = tools.jsonpath.parse(dataSources?values[0])>
+<#assign json = tools.jsonpath.parse(dataSources[0])>
 <#assign users = json.read("$[*]")>
 <#--------------------------------------------------------------------------->
 # GitHub Users
diff --git a/freemarker-generator-cli/src/app/examples/templates/logs/csv/serverlog-to-csv.ftl b/freemarker-generator-cli/src/app/examples/templates/logs/csv/serverlog-to-csv.ftl
index 544975f..d53e24f 100644
--- a/freemarker-generator-cli/src/app/examples/templates/logs/csv/serverlog-to-csv.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/logs/csv/serverlog-to-csv.ftl
@@ -35,7 +35,7 @@
 <#compress>
     TIMESTAMP;MILLIS
     <#if dataSources?has_content>
-        <#list dataSources?values as dataSource>
+        <#list dataSources as dataSource>
             <#list dataSource.getLineIterator() as line>
                 <#assign parts = grok.match(line).capture()>
                 <#if parts?has_content>
diff --git a/freemarker-generator-cli/src/app/examples/templates/properties/csv/locker-test-users.ftl b/freemarker-generator-cli/src/app/examples/templates/properties/csv/locker-test-users.ftl
index 8e01dac..32dd5d6 100644
--- a/freemarker-generator-cli/src/app/examples/templates/properties/csv/locker-test-users.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/properties/csv/locker-test-users.ftl
@@ -17,7 +17,7 @@
 -->
 <#compress>
     TENANT,SITE,USER_ID,DISPOSER_ID,PASSWORD,SMS_OTP,NAME,DESCRIPTION
-    <#list dataSources?values as dataSource>
+    <#list dataSources as dataSource>
         <#assign properties = tools.properties.parse(dataSource)>
         <#assign environments = properties.ENVIRONMENTS!"">
         <#assign tenant = extractTenant(environments)>
diff --git a/freemarker-generator-cli/src/app/examples/templates/tsv/fo/transactions.ftl b/freemarker-generator-cli/src/app/examples/templates/tsv/fo/transactions.ftl
index 5beefc3..46a89de 100644
--- a/freemarker-generator-cli/src/app/examples/templates/tsv/fo/transactions.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/tsv/fo/transactions.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#assign cvsFormat = tools.csv.formats.TDF.withHeader()>
-<#assign csvParser = tools.csv.parse(dataSources?values[0], cvsFormat)>
+<#assign csvParser = tools.csv.parse(dataSources[0], cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/src/app/examples/templates/xml/txt/recipients.ftl b/freemarker-generator-cli/src/app/examples/templates/xml/txt/recipients.ftl
index b67e8e7..83bf4e5 100644
--- a/freemarker-generator-cli/src/app/examples/templates/xml/txt/recipients.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/xml/txt/recipients.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign xml = tools.xml.parse(dataSources?values[0])>
+<#assign xml = tools.xml.parse(dataSources[0])>
 <#list xml.recipients.person as recipient>
 To: ${recipient.name}
 ${recipient.address}
diff --git a/freemarker-generator-cli/src/app/examples/templates/yaml/txt/transform.ftl b/freemarker-generator-cli/src/app/examples/templates/yaml/txt/transform.ftl
index ebcf525..1e13504 100644
--- a/freemarker-generator-cli/src/app/examples/templates/yaml/txt/transform.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/yaml/txt/transform.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign map = tools.yaml.parse(dataSources?values[0])>
+<#assign map = tools.yaml.parse(dataSources[0])>
 <#--------------------------------------------------------------------------->
 <#compress>
 <@print map 1/>
diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.bat b/freemarker-generator-cli/src/app/scripts/run-examples.bat
index 7adcb91..2b6211b 100644
--- a/freemarker-generator-cli/src/app/scripts/run-examples.bat
+++ b/freemarker-generator-cli/src/app/scripts/run-examples.bat
@@ -51,12 +51,12 @@ REM =========================================================================
 REM Interactive Mode
 REM =========================================================================
 
-%FREEMARKER_CMD% -i '${tools.jsonpath.parse(dataSources?values[0]).read("""$.info.title""")}' examples\data\json\swagger-spec.json > target\out\interactive-json.txt
-%FREEMARKER_CMD% -i '${tools.xml.parse(dataSources?values[0])["""recipients/person[1]/name"""]}' examples\data\xml\recipients.xml > target\out\interactive-xml.txt
-%FREEMARKER_CMD% -i '${tools.jsoup.parse(dataSources?values[0]).select("""a""")[0]}' examples\data\html\dependencies.html > target\out\interactive-html.txt
-%FREEMARKER_CMD% -i '${tools.gson.toJson(tools.yaml.parse(dataSources?values[0]))}' examples\data\yaml\swagger-spec.yaml > target\out\interactive-swagger.json
-%FREEMARKER_CMD% -i '${tools.yaml.toYaml(tools.gson.parse(dataSources?values[0]))}' examples\data\json\swagger-spec.json > target\out\interactive-swagger.yaml
-%FREEMARKER_CMD% -i '${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources?values[0])))}' examples\data\json\github-users.json > target\out\interactive-dataframe.txt
+%FREEMARKER_CMD% -i '${tools.jsonpath.parse(dataSources[0]).read("""$.info.title""")}' examples\data\json\swagger-spec.json > target\out\interactive-json.txt
+%FREEMARKER_CMD% -i '${tools.xml.parse(dataSources[0])["""recipients/person[1]/name"""]}' examples\data\xml\recipients.xml > target\out\interactive-xml.txt
+%FREEMARKER_CMD% -i '${tools.jsoup.parse(dataSources[0]).select("""a""")[0]}' examples\data\html\dependencies.html > target\out\interactive-html.txt
+%FREEMARKER_CMD% -i '${tools.gson.toJson(tools.yaml.parse(dataSources[0]))}' examples\data\yaml\swagger-spec.yaml > target\out\interactive-swagger.json
+%FREEMARKER_CMD% -i '${tools.yaml.toYaml(tools.gson.parse(dataSources[0]))}' examples\data\json\swagger-spec.json > target\out\interactive-swagger.yaml
+%FREEMARKER_CMD% -i '${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources[0])))}' examples\data\json\github-users.json > target\out\interactive-dataframe.txt
 
 REM =========================================================================
 REM CSV
diff --git a/freemarker-generator-cli/src/app/scripts/run-examples.sh b/freemarker-generator-cli/src/app/scripts/run-examples.sh
index 5298eaf..63302fd 100755
--- a/freemarker-generator-cli/src/app/scripts/run-examples.sh
+++ b/freemarker-generator-cli/src/app/scripts/run-examples.sh
@@ -56,12 +56,12 @@ $FREEMARKER_CMD -t examples/templates/datasources.ftl -s https://xkcd.com/info.0
 # Interactive Mode
 #############################################################################
 
-$FREEMARKER_CMD -i '${tools.jsonpath.parse(dataSources?values[0]).read("$.info.title")}' examples/data/json/swagger-spec.json > target/out/interactive-json.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
-$FREEMARKER_CMD -i '${tools.xml.parse(dataSources?values[0])["recipients/person[1]/name"]}' examples/data/xml/recipients.xml > target/out/interactive-xml.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
-$FREEMARKER_CMD -i '${tools.jsoup.parse(dataSources?values[0]).select("a")[0]}' examples/data/html/dependencies.html > target/out/interactive-html.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
-$FREEMARKER_CMD -i '${tools.gson.toJson(tools.yaml.parse(dataSources?values[0]))}' examples/data/yaml/swagger-spec.yaml > target/out/interactive-swagger.json || { echo >&2 "Test failed.  Aborting."; exit 1; }
-$FREEMARKER_CMD -i '${tools.yaml.toYaml(tools.gson.parse(dataSources?values[0]))}' examples/data/json/swagger-spec.json > target/out/interactive-swagger.yaml || { echo >&2 "Test failed.  Aborting."; exit 1; }
-$FREEMARKER_CMD -i '${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources?values[0])))}' examples/data/json/github-users.json > target/out/interactive-dataframe.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+$FREEMARKER_CMD -i '${tools.jsonpath.parse(dataSources[0]).read("$.info.title")}' examples/data/json/swagger-spec.json > target/out/interactive-json.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+$FREEMARKER_CMD -i '${tools.xml.parse(dataSources[0])["recipients/person[1]/name"]}' examples/data/xml/recipients.xml > target/out/interactive-xml.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+$FREEMARKER_CMD -i '${tools.jsoup.parse(dataSources[0]).select("a")[0]}' examples/data/html/dependencies.html > target/out/interactive-html.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
+$FREEMARKER_CMD -i '${tools.gson.toJson(tools.yaml.parse(dataSources[0]))}' examples/data/yaml/swagger-spec.yaml > target/out/interactive-swagger.json || { echo >&2 "Test failed.  Aborting."; exit 1; }
+$FREEMARKER_CMD -i '${tools.yaml.toYaml(tools.gson.parse(dataSources[0]))}' examples/data/json/swagger-spec.json > target/out/interactive-swagger.yaml || { echo >&2 "Test failed.  Aborting."; exit 1; }
+$FREEMARKER_CMD -i '${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources[0])))}' examples/data/json/github-users.json > target/out/interactive-dataframe.txt || { echo >&2 "Test failed.  Aborting."; exit 1; }
 
 #############################################################################
 # CSV
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/cat.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/cat.ftl
index cdbe0fa..f4f82e8 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/cat.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/cat.ftl
@@ -14,7 +14,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#list dataSources?values as dataSource>
+<#list dataSources as dataSource>
 <#list dataSource.lineIterator as line>
 ${line}
 </#list>
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/csv/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/csv/transform.ftl
index 3941c4c..c999235 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/csv/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/csv/transform.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#import "/freemarker-generator/lib/commons-csv.ftl" as csv />
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign csvParser = tools.csv.parse(dataSource, csv.sourceFormat())>
 <#assign csvTargetFormat = csv.targetFormat()>
 <#assign csvPrinter = tools.csv.printer(csvTargetFormat)>
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/html/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/html/transform.ftl
index d027672..e39a76d 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/html/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/html/transform.ftl
@@ -16,7 +16,7 @@
   under the License.
 -->
 <#import "/freemarker-generator/lib/commons-csv.ftl" as csv />
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign csvParser = tools.csv.parse(dataSource, csv.sourceFormat())>
 <#assign csvHeaders = csvParser.getHeaderNames()>
 <#--------------------------------------------------------------------------->
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/md/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/md/transform.ftl
index 6929b31..edd8b3e 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/md/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/csv/md/transform.ftl
@@ -15,7 +15,7 @@
   under the License.
 -->
 <#import "/freemarker-generator/lib/commons-csv.ftl" as csv />
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign csvParser = tools.csv.parse(dataSource, csv.sourceFormat())>
 <#assign headers = (csvParser.getHeaderMap()!{})?keys>
 <#assign records = csvParser.records>
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/csv/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/csv/transform.ftl
index 18179f4..22dec59 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/csv/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/csv/transform.ftl
@@ -17,7 +17,7 @@
 -->
 <#-- Parse the first data source & sheet of the Excel document -->
 <#import "/freemarker-generator/lib/commons-csv.ftl" as csv />
-<#assign workbook = tools.excel.parse(dataSources?values[0])>
+<#assign workbook = tools.excel.parse(dataSources[0])>
 <#assign sheet = tools.excel.getSheets(workbook)[0]>
 <#assign records = tools.excel.toTable(sheet)>
 <#-- Setup CSVPrinter  -->
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/html/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/html/transform.ftl
index 7564751..e1e9409 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/html/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/html/transform.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign name = dataSource.name>
 <#assign workbook = tools.excel.parse(dataSource)>
 <#assign date = .now?iso_utc>
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/md/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/md/transform.ftl
index e3fb970..a0e13b7 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/md/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/excel/md/transform.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign name = dataSource.name>
 <#assign workbook = tools.excel.parse(dataSource)>
 <#assign date = .now?iso_utc>
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
index 05eff21..85d41f7 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
@@ -50,7 +50,7 @@ FreeMarker Generator Data Model
 FreeMarker Generator Data Sources
 ==============================================================================
 <#if dataSources?has_content>
-<#list dataSources?values as dataSource>
+<#list dataSources as dataSource>
 
 DataSource #${dataSource?counter}
 ------------------------------------------------------------------------------
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/json/yaml/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/json/yaml/transform.ftl
index 6e48945..d5b32f9 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/json/yaml/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/json/yaml/transform.ftl
@@ -14,4 +14,4 @@
   specific language governing permissions and limitations
   under the License.
 -->
-${tools.yaml.toYaml(tools.gson.parse(dataSources?values[0]))}
\ No newline at end of file
+${tools.yaml.toYaml(tools.gson.parse(dataSources[0]))}
\ No newline at end of file
diff --git a/freemarker-generator-cli/src/app/templates/freemarker-generator/yaml/json/transform.ftl b/freemarker-generator-cli/src/app/templates/freemarker-generator/yaml/json/transform.ftl
index 81a704a..d0f0581 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/yaml/json/transform.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/yaml/json/transform.ftl
@@ -14,4 +14,4 @@
   specific language governing permissions and limitations
   under the License.
 -->
-${tools.gson.toJson(tools.yaml.parse(dataSources?values[0]))}
\ No newline at end of file
+${tools.gson.toJson(tools.yaml.parse(dataSources[0]))}
\ No newline at end of file
diff --git a/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md b/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md
index 2e0ba54..2a7d01e 100644
--- a/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md
+++ b/freemarker-generator-cli/src/site/markdown/cli/concepts/data-sources.md
@@ -98,7 +98,7 @@ URI : system:///stdin
 
 After loading one or more `DataSource` they are accessible as `dataSource` map in the FreeMarker model
 
-* `dataSources?values[0]` or `dataSources?values?first` selects the first data source
+* `dataSources[0]` or `dataSources?first` selects the first data source
 * `dataSources["user.csv"]` selects the data source with the name "user.csv"
 
 ### Iterating Over DataSources
@@ -122,7 +122,7 @@ ${dataSources?size}
 </#list>
 
 <#-- Iterate over a list of data sources -->
-<#list dataSources?values as dataSource>
+<#list dataSources as dataSource>
 - [#${dataSource?counter}]: name=${dataSource.name}
 </#list>
 ```
@@ -134,22 +134,22 @@ selection of data sources (using Apache Commons IO wild-card matching)
 
 ```
 <#-- List all data sources containing "test" in the name -->
-<#list dataSources?values?filter(ds -> ds.match("name", "*test*")) as ds>
+<#list dataSources?filter(ds -> ds.match("name", "*test*")) as ds>
 - ${ds.name}
 </#list>
 
 <#-- List all data sources having "json" extension -->
-<#list dataSources?values?filter(ds -> ds.match("extension", "json")) as ds>
+<#list dataSources?filter(ds -> ds.match("extension", "json")) as ds>
 - ${ds.name}
 </#list>
 
 <#-- List all data sources having "src/test/data/properties" in their file path -->
-<#list dataSources?values?filter(ds -> ds.match("filePath", "*/src/test/data/properties")) as ds>
+<#list dataSources?filter(ds -> ds.match("filePath", "*/src/test/data/properties")) as ds>
 - ${ds.name}
 </#list>
 
 <#-- List all data sources of a group -->
-<#list dataSources?values?filter(ds -> ds.match("group", "default")) as ds>
+<#list dataSources?filter(ds -> ds.match("group", "default")) as ds>
 - ${ds.name}
 </#list>
 
@@ -163,7 +163,7 @@ In most cases the data source will be passed to a tool, but there are some usefu
 Invoke Arbitrary Methods On DataSource
 ---------------------------------------------------------------------------
 <#if dataSources?has_content>
-<#assign dataSource=dataSources?values?first>
+<#assign dataSource=dataSources?first>
 Name            : ${dataSource.name}
 Nr of lines     : ${dataSource.lines?size}
 Content Type    : ${dataSource.contentType}
diff --git a/freemarker-generator-cli/src/site/markdown/cli/usage/parsing-with-grok.md b/freemarker-generator-cli/src/site/markdown/cli/usage/parsing-with-grok.md
index 5cbadda..7f4404c 100644
--- a/freemarker-generator-cli/src/site/markdown/cli/usage/parsing-with-grok.md
+++ b/freemarker-generator-cli/src/site/markdown/cli/usage/parsing-with-grok.md
@@ -33,7 +33,7 @@ using the following FreeMarker template
 ```text
 <#ftl output_format="plainText" strip_whitespace=true>
 <#assign grok = tools.grok.create("%{COMBINEDAPACHELOG}")>
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign lines = dataSource.getLineIterator()>
 
 <#compress>
@@ -93,7 +93,7 @@ In technical terms the FTL
 <#compress>
     TIMESTAMP;MILLIS
     <#if dataSources?has_content>
-        <#list dataSources?values as dataSource>
+        <#list dataSources as dataSource>
             <#list dataSource.getLineIterator() as line>
                 <#assign parts = grok.match(line).capture()>
                 <#if parts?has_content>
diff --git a/freemarker-generator-cli/src/site/markdown/cli/usage/running-examples.md b/freemarker-generator-cli/src/site/markdown/cli/usage/running-examples.md
index e4cc875..9b686a2 100644
--- a/freemarker-generator-cli/src/site/markdown/cli/usage/running-examples.md
+++ b/freemarker-generator-cli/src/site/markdown/cli/usage/running-examples.md
@@ -92,7 +92,7 @@ Below you see the Apache FreeMarker Template
 
 ```text
 <#ftl output_format="plainText" >
-<#assign json = tools.jsonpath.parse(dataSources?values[0])>
+<#assign json = tools.jsonpath.parse(dataSources[0])>
 <#assign users = json.read("$[*]")>
 <#--------------------------------------------------------------------------->
 # GitHub Users
@@ -130,7 +130,7 @@ The FreeMarker template is shown below
 ```text
 <#ftl output_format="plainText">
 <#assign cvsFormat = tools.csv.formats["DEFAULT"].withHeader()>
-<#assign csvParser = tools.csv.parse(dataSources?values[0], cvsFormat)>
+<#assign csvParser = tools.csv.parse(dataSources[0], cvsFormat)>
 <#assign csvHeaders = csvParser.getHeaderMap()?keys>
 <#assign csvRecords = csvParser.records>
 <#--------------------------------------------------------------------------->
@@ -167,7 +167,7 @@ using the following template
 
 ```text
 <#ftl output_format="plainText" >
-<#assign xml = tools.xml.parse(dataSources?values[0])>
+<#assign xml = tools.xml.parse(dataSources[0])>
 <#list xml.recipients.person as recipient>
 To: ${recipient.name}
 ${recipient.address}
@@ -214,7 +214,7 @@ One day I was asked a to prepare a CSV files containing REST endpoints described
 
 ```text
 <#ftl output_format="plainText" strip_text="true">
-<#assign json = tools.jsonpath.parse(dataSources?values[0])>
+<#assign json = tools.jsonpath.parse(dataSources[0])>
 <#assign basePath = json.read("$.basePath")>
 <#assign paths = json.read("$.paths")>
 
@@ -276,7 +276,7 @@ The provided FTL transforms an Excel into a HTML document supporting multiple Ex
 
 ```text
 <#ftl output_format="HTML" >
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign name = dataSource.name>
 <#assign workbook = tools.excel.parse(dataSource)>
 <#assign date = .now?iso_utc>
@@ -402,7 +402,7 @@ For a POC (proof of concept) I created a sample transformation from CSV to XML-F
 
 ```text
 <#ftl output_format="XML" >
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign name = dataSource.name>
 <#assign cvsFormat = tools.csv.formats.DEFAULT.withDelimiter('\t').withHeader()>
 <#assign csvParser = tools.csv.parse(dataSource, cvsFormat)>
@@ -523,7 +523,7 @@ Recently I got the rather unusual question how to determine the list of dependen
 
 ```text
 <#ftl output_format="plainText" strip_text="true">
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign html = tools.jsoup.parse(dataSource)>
 
 <#compress>
@@ -598,7 +598,7 @@ and the final FTL is found below
 ```text
 <#ftl output_format="plainText">
 <#assign cvsFormat = tools.csv.formats["DEFAULT"].withHeader()>
-<#assign csvParser = tools.csv.parse(dataSources?values[0], cvsFormat)>
+<#assign csvParser = tools.csv.parse(dataSources[0], cvsFormat)>
 <#assign records = csvParser.records>
 <#assign csvMap = tools.csv.toMap(records, "disposer")>
 <#--------------------------------------------------------------------------->
@@ -713,16 +713,16 @@ Sometime you need to apply a CSS, JSON or XPath query in ad ad-hoc way without i
 > bin/freemarker-generator -i 'Hello ${tools.system.envs["USER"]}'; echo
 Hello sgoeschl
 
-> bin/freemarker-generator -i '${tools.jsonpath.parse(dataSources?values[0]).read("$.info.title")}' examples/data/json/swagger-spec.json; echo
+> bin/freemarker-generator -i '${tools.jsonpath.parse(dataSources[0]).read("$.info.title")}' examples/data/json/swagger-spec.json; echo
 Swagger Petstore
 
-> bin/freemarker-generator -i 'Post Title : ${tools.jsonpath.parse(dataSources?values[0]).read("$.title")}' https://jsonplaceholder.typicode.com/posts/2; echo
+> bin/freemarker-generator -i 'Post Title : ${tools.jsonpath.parse(dataSources[0]).read("$.title")}' https://jsonplaceholder.typicode.com/posts/2; echo
 Post Title : qui est esse
 
-> bin/freemarker-generator -i '${tools.xml.parse(dataSources?values[0])["recipients/person[1]/name"]}' examples/data/xml/recipients.xml; echo
+> bin/freemarker-generator -i '${tools.xml.parse(dataSources[0])["recipients/person[1]/name"]}' examples/data/xml/recipients.xml; echo
 John Smith
 
-> bin/freemarker-generator -i '${tools.jsoup.parse(dataSources?values[0]).select("a")[0]}' examples/data/html/dependencies.html; echo
+> bin/freemarker-generator -i '${tools.jsoup.parse(dataSources[0]).select("a")[0]}' examples/data/html/dependencies.html; echo
 <a href="${project.url}" title="FreeMarker Generator">FreeMarker Generator</a>
 
 > freemarker-generator -i '<#list tools.system.envs as name,value>${name} ==> ${value}${"\n"}</#list>'
@@ -749,7 +749,7 @@ and Apache FreeMarker template
 
 ```text
 <#ftl output_format="plainText" strip_text="true">
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign parser = parser(dataSource)>
 <#assign headers = parser.getHeaderNames()>
 <#assign column = tools.system.getParameter("column")>
@@ -835,11 +835,11 @@ Sometimes we simply need to transform a JSON into an equivalent YAML or the othe
 
 ```
 > freemarker-generator -t freemarker-generator/yaml/json/transform.ftl examples/data/yaml/swagger-spec.yaml 
-> freemarker-generator -i '${tools.gson.toJson(tools.yaml.parse(dataSources?values[0]))}' examples/data/yaml/swagger-spec.yaml
+> freemarker-generator -i '${tools.gson.toJson(tools.yaml.parse(dataSources[0]))}' examples/data/yaml/swagger-spec.yaml
 > freemarker-generator -i '${tools.gson.toJson(yaml)}' -m yaml=examples/data/yaml/swagger-spec.yaml
 
 > freemarker-generator -t freemarker-generator/json/yaml/transform.ftl examples/data/json/swagger-spec.json
-> freemarker-generator -i '${tools.yaml.toYaml(tools.gson.parse(dataSources?values[0]))}' examples/data/json/swagger-spec.json
+> freemarker-generator -i '${tools.yaml.toYaml(tools.gson.parse(dataSources[0]))}' examples/data/json/swagger-spec.json
 > freemarker-generator -i '${tools.yaml.toYaml(json)}' -m json=examples/data/json/swagger-spec.json
 ```
 
diff --git a/freemarker-generator-cli/src/site/markdown/cli/usage/using-dataframes.md b/freemarker-generator-cli/src/site/markdown/cli/usage/using-dataframes.md
index 9fbf9d2..8866983 100644
--- a/freemarker-generator-cli/src/site/markdown/cli/usage/using-dataframes.md
+++ b/freemarker-generator-cli/src/site/markdown/cli/usage/using-dataframes.md
@@ -30,7 +30,7 @@ Meier;30;Germany
 and create a `DateFrame` using the following code snippet
 
 ```
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign csvParser = tools.csv.parse(dataSource, tools.csv.formats["DATAFRAME"])>
 <#assign users = tools.dataframe.fromCSVParser(csvParser)>
 ```
@@ -162,7 +162,7 @@ it is a list of maps hence we invoke `tools.dataframe.fromMaps()
 
 ```
 freemarker-generator \
--i '${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources?values[0])))}' \
+-i '${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources[0])))}' \
 examples/data/json/github-users.json
 
 ┌────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┐
@@ -189,7 +189,7 @@ examples/data/json/github-users.json
 Let's transform an Excel Sheet to a `DataFrame` being printed using the following template
 
 ```
-<#assign dataSource = dataSources?values[0]>
+<#assign dataSource = dataSources[0]>
 <#assign workbook = tools.excel.parse(dataSource)>
 <#list tools.excel.getSheets(workbook) as sheet>
     <#assign table = tools.excel.toTable(sheet)>
diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
index 7bbe810..d8eb993 100644
--- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
+++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
@@ -126,14 +126,14 @@ public class ExamplesTest extends AbstractMainTest {
 
     @Test
     public void shouldRunInteractiveTemplateExamples() throws IOException {
-        assertValid(execute("-i ${tools.jsonpath.parse(dataSources?values[0]).read(\"$.info.title\")} src/app/examples/data/json/swagger-spec.json"));
-        assertValid(execute("-i ${tools.xml.parse(dataSources?values[0])[\"recipients/person[1]/name\"]} src/app/examples/data/xml/recipients.xml"));
-        assertValid(execute("-i ${tools.jsoup.parse(dataSources?values[0]).select(\"a\")[0]} src/app/examples/data/html/dependencies.html"));
-        assertValid(execute("-i ${tools.gson.toJson(tools.yaml.parse(dataSources?values[0]))} src/app/examples/data/yaml/swagger-spec.yaml"));
+        assertValid(execute("-i ${tools.jsonpath.parse(dataSources[0]).read(\"$.info.title\")} src/app/examples/data/json/swagger-spec.json"));
+        assertValid(execute("-i ${tools.xml.parse(dataSources[0])[\"recipients/person[1]/name\"]} src/app/examples/data/xml/recipients.xml"));
+        assertValid(execute("-i ${tools.jsoup.parse(dataSources[0]).select(\"a\")[0]} src/app/examples/data/html/dependencies.html"));
+        assertValid(execute("-i ${tools.gson.toJson(tools.yaml.parse(dataSources[0]))} src/app/examples/data/yaml/swagger-spec.yaml"));
         assertValid(execute("-i ${tools.gson.toJson(yaml)} -m yaml=src/app/examples/data/yaml/swagger-spec.yaml"));
-        assertValid(execute("-i ${tools.yaml.toYaml(tools.gson.parse(dataSources?values[0]))} src/app/examples/data/json/swagger-spec.json"));
+        assertValid(execute("-i ${tools.yaml.toYaml(tools.gson.parse(dataSources[0]))} src/app/examples/data/json/swagger-spec.json"));
         assertValid(execute("-i ${tools.yaml.toYaml(json)} -m json=src/app/examples/data/json/swagger-spec.json"));
-        assertValid(execute("-i ${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources?values[0])))} src/app/examples/data/json/github-users.json"));
+        assertValid(execute("-i ${tools.dataframe.print(tools.dataframe.fromMaps(tools.gson.parse(dataSources[0])))} src/app/examples/data/json/github-users.json"));
     }
 
     @Test
diff --git a/freemarker-generator-cli/src/test/templates/echo.ftl b/freemarker-generator-cli/src/test/templates/echo.ftl
index 38627f4..56c0b56 100644
--- a/freemarker-generator-cli/src/test/templates/echo.ftl
+++ b/freemarker-generator-cli/src/test/templates/echo.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#list dataSources?values as ds>
+<#list dataSources as ds>
 ${ds.name}, ${ds.uri}
 =============================================================================
 ${ds.text}
diff --git a/freemarker-generator-cli/src/test/templates/manual.ftl b/freemarker-generator-cli/src/test/templates/manual.ftl
index c1112be..1e6f5ac 100644
--- a/freemarker-generator-cli/src/test/templates/manual.ftl
+++ b/freemarker-generator-cli/src/test/templates/manual.ftl
@@ -22,8 +22,8 @@ Nr. of Documents: ${dataSources?size}
 
 Use FTL Array-style Access
 ==============================================================================
-${dataSources?values[0].toString()}
-${dataSources?values?first.toString()}
+${dataSources[0].toString()}
+${dataSources?first.toString()}
 
 Get Document Names As Keys
 ==============================================================================
@@ -38,13 +38,13 @@ Iterate Over Names & DataSources
 </#list>
 
 <#if dataSources?has_content>
-    <#list dataSources?values as dataSource>
+    <#list dataSources as dataSource>
 [#${dataSource?counter}] - ${dataSource.name}
 ==============================================================================
 
 Invoke Arbitrary Methods On DataSource
 ---------------------------------------------------------------------------
-<#assign dataSource=dataSources?values?first>
+<#assign dataSource=dataSources?first>
 Name            : ${dataSource.name}
 Nr of lines     : ${dataSource.lines?size}
 Content Type    : ${dataSource.contentType}
diff --git a/freemarker-generator-cli/src/test/templates/tools/csv.ftl b/freemarker-generator-cli/src/test/templates/tools/csv.ftl
index 25dfb3b..07c4f43 100644
--- a/freemarker-generator-cli/src/test/templates/tools/csv.ftl
+++ b/freemarker-generator-cli/src/test/templates/tools/csv.ftl
@@ -15,7 +15,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<#assign records = tools.csv.parse(dataSources?values[0], CSVFormat.DEFAULT.withHeader()).records>
+<#assign records = tools.csv.parse(dataSources[0], CSVFormat.DEFAULT.withHeader()).records>
 
 tools.csv.toMap(name)
 =============================================================================