{data 'name'} ... {/data} reads its content as data and keeps it under that name; it prints nothing. A later {name} ... {/name} iterates it like any page array - fields, properties, the handling options (sort, where, first ...) - and so do data='name' on another tag, {data:name}, {tree} and the lookup pipe.

Formats

The format is recognised from the content itself:

When the start does not tell, type='csv' (or another format) says it. A one-line name of a file in the application's _data/ directory reads that file.

Other forms

Without content, a second parameter is the source: {data 'steps', '1..5'}. A value from a field there is data, never template: a field holding a parenthesised list is refused, since its elements would run as expressions. With the name on the closing tag - {data} ... {/data 'name'} - the content is rendered first and the result read as data, so fields and tags inside it are resolved.

Content with braces - JSON objects - is read as written: a JSON object in the content is not taken for a tag. Under the strict syntax check a {data} without a name is an error, and so is a name that is already a built-in or application tag, since {name} would never reach the store.