Skip to main content

YAML Tags

YAML Tags​

YAML Tags are simple identifiers used to represent information about the type of native data structures.

YAML tags can be used in three ways:

  • to set a custom URI (universal resource indicator), which custom URI is used for reference.
  • to set local tags. The scope of local tag is only within the YAML file.
  • to set the data type of a variable.

Set a Custom URI (Universal Resource Indicator)​

In YAML, custom URIs must be defined before the beginning of the document i.e. before the three dashes (---).

This can be done using the following syntax:

%TAG ! tag:prefix

where:

  • %TAG is a directive
  • ! starts the tag
  • prefix is a string that respect the tag: URI scheme

For example:

%TAG ! tag:custom-uri
---
server: Linux-Server
datacenter:
location: new-york
zones: 12
points: 34
roles:
- backup
note

%TAG is never used in practice.

Instead, everyone uses the two special tag handles:

  • The primary tag handle is !, which by default expands to !. So !bar just resolves to !bar, a local tag, specific to the document and not expected to be unique.
  • The secondary tag handle is !!, which by default expands to tag:yaml.org,2002:, the prefix YAML uses for its own built-in types. So !!bar resolves to tag:yaml.org,2002:bar, and the tag for a string would more commonly be written as !!str

Set a Local Tag​

For declaring a local tag in YAML add the exclamation mark (!) and prefix to the value in the key-value pair.

name: ! local-tag-name value
note

Local tags are not URIs, and they are not expected to be globally unique.

For example:

%TAG ! tag:custom-uri
---
server: Linux-Server
datacenter:
location: ! LOC new-york # local tag
zones: 12
points: 34
roles:
- backup

Set Datatype using YAML Tag​

You can also use a tag to change the reading functionality of the YAML parser in order to specify a datatype.

This is done by typing two exclamation marks !! followed by the name of the datatype.

For example, we want to specify the zip as a string:

house:
road: "main road"
city: "Big City"
zip: !!str 12345
floor: 4
note

This can be done with any datatype. See other type in YAML Datatypes Chapter