@@ -23,8 +23,7 @@ the `YAML 1.2 version specification`_.
23
23
24
24
.. tip ::
25
25
26
- Learn more about the Yaml component in the
27
- :doc: `/components/yaml/yaml_format ` article.
26
+ Learn more about :ref: `YAML specifications <yaml-format >`.
28
27
29
28
Installation
30
29
------------
@@ -448,14 +447,336 @@ Add the ``--format`` option to get the output in JSON format:
448
447
YAML files. This may for example be useful for recognizing deprecations of
449
448
contents of YAML files during automated tests.
450
449
451
- Learn More
452
- ----------
450
+ .. _yaml-format :
453
451
454
- .. toctree ::
455
- :maxdepth: 1
456
- :glob:
452
+ .. index ::
453
+ single: Yaml; YAML Format
454
+
455
+ The YAML Format
456
+ ---------------
457
+
458
+ Scalars
459
+ ~~~~~~~
460
+
461
+ The syntax for scalars is similar to the PHP syntax.
462
+
463
+ Strings
464
+ .......
465
+
466
+ Strings in YAML can be wrapped both in single and double quotes. In some cases,
467
+ they can also be unquoted:
468
+
469
+ .. code-block :: yaml
470
+
471
+ A string in YAML
472
+
473
+ ' A single-quoted string in YAML'
474
+
475
+ " A double-quoted string in YAML"
476
+
477
+ Quoted styles are useful when a string starts or end with one or more relevant
478
+ spaces, because unquoted strings are trimmed on both end when parsing their
479
+ contents. Quotes are required when the string contains special or reserved characters.
480
+
481
+ When using single-quoted strings, any single quote ``' `` inside its contents
482
+ must be doubled to escape it:
483
+
484
+ .. code-block :: yaml
485
+
486
+ ' A single quote '' inside a single-quoted string'
487
+
488
+ Strings containing any of the following characters must be quoted. Although you
489
+ can use double quotes, for these characters it is more convenient to use single
490
+ quotes, which avoids having to escape any backslash ``\ ``:
491
+
492
+ * ``: ``, ``{ ``, ``} ``, ``[ ``, ``] ``, ``, ``, ``& ``, ``* ``, ``# ``, ``? ``, ``| ``,
493
+ ``- ``, ``< ``, ``> ``, ``= ``, ``! ``, ``% ``, ``@ ``, ``` ``
494
+
495
+ The double-quoted style provides a way to express arbitrary strings, by
496
+ using ``\ `` to escape characters and sequences. For instance, it is very useful
497
+ when you need to embed a ``\n `` or a Unicode character in a string.
498
+
499
+ .. code-block :: yaml
500
+
501
+ " A double-quoted string in YAML\n "
502
+
503
+ If the string contains any of the following control characters, it must be
504
+ escaped with double quotes:
505
+
506
+ * ``\0 ``, ``\x01 ``, ``\x02 ``, ``\x03 ``, ``\x04 ``, ``\x05 ``, ``\x06 ``, ``\a ``,
507
+ ``\b ``, ``\t ``, ``\n ``, ``\v ``, ``\f ``, ``\r ``, ``\x0e ``, ``\x0f ``, ``\x10 ``,
508
+ ``\x11 ``, ``\x12 ``, ``\x13 ``, ``\x14 ``, ``\x15 ``, ``\x16 ``, ``\x17 ``, ``\x18 ``,
509
+ ``\x19 ``, ``\x1a ``, ``\e ``, ``\x1c ``, ``\x1d ``, ``\x1e ``, ``\x1f ``, ``\N ``,
510
+ ``\_ ``, ``\L ``, ``\P ``
511
+
512
+ Finally, there are other cases when the strings must be quoted, no matter if
513
+ you're using single or double quotes:
514
+
515
+ * When the string is ``true `` or ``false `` (otherwise, it would be treated as a
516
+ boolean value);
517
+ * When the string is ``null `` or ``~ `` (otherwise, it would be considered as a
518
+ ``null `` value);
519
+ * When the string looks like a number, such as integers (e.g. ``2 ``, ``14 ``, etc.),
520
+ floats (e.g. ``2.6 ``, ``14.9 ``) and exponential numbers (e.g. ``12e7 ``, etc.)
521
+ (otherwise, it would be treated as a numeric value);
522
+ * When the string looks like a date (e.g. ``2014-12-31 ``) (otherwise it would be
523
+ automatically converted into a Unix timestamp).
524
+
525
+ When a string contains line breaks, you can use the literal style, indicated
526
+ by the pipe (``| ``), to indicate that the string will span several lines. In
527
+ literals, newlines are preserved:
528
+
529
+ .. code-block :: yaml
530
+
531
+ |
532
+ \/ /| |\/| |
533
+ / / | | | |__
534
+
535
+ Alternatively, strings can be written with the folded style, denoted by ``> ``,
536
+ where each line break is replaced by a space:
537
+
538
+ .. code-block :: yaml
539
+
540
+ >
541
+ This is a very long sentence
542
+ that spans several lines in the YAML.
543
+
544
+ # This will be parsed as follows: (notice the trailing \n)
545
+ # "This is a very long sentence that spans several lines in the YAML.\n"
546
+
547
+ >-
548
+ This is a very long sentence
549
+ that spans several lines in the YAML.
550
+
551
+ # This will be parsed as follows: (without a trailing \n)
552
+ # "This is a very long sentence that spans several lines in the YAML."
553
+
554
+ .. note ::
555
+
556
+ Notice the two spaces before each line in the previous examples. They
557
+ won't appear in the resulting PHP strings.
558
+
559
+ Numbers
560
+ .......
561
+
562
+ .. code-block :: yaml
563
+
564
+ # an integer
565
+ 12
566
+
567
+ .. code-block :: yaml
568
+
569
+ # an octal
570
+ 0o14
571
+
572
+ .. code-block :: yaml
573
+
574
+ # an hexadecimal
575
+ 0xC
576
+
577
+ .. code-block :: yaml
578
+
579
+ # a float
580
+ 13.4
581
+
582
+ .. code-block :: yaml
583
+
584
+ # an exponential number
585
+ 1.2e+34
586
+
587
+ .. code-block :: yaml
588
+
589
+ # infinity
590
+ .inf
591
+
592
+ Nulls
593
+ .....
594
+
595
+ Nulls in YAML can be expressed with ``null `` or ``~ ``.
596
+
597
+ Booleans
598
+ ........
599
+
600
+ Booleans in YAML are expressed with ``true `` and ``false ``.
601
+
602
+ Dates
603
+ .....
604
+
605
+ YAML uses the `ISO-8601 `_ standard to express dates:
606
+
607
+ .. code-block :: yaml
608
+
609
+ 2001-12-14T21:59:43.10-05:00
610
+
611
+ .. code-block :: yaml
612
+
613
+ # simple date
614
+ 2002-12-14
615
+
616
+ .. _yaml-format-collections :
617
+
618
+ Collections
619
+ ~~~~~~~~~~~
620
+
621
+ A YAML file is rarely used to describe a simple scalar. Most of the time, it
622
+ describes a collection. YAML collections can be a sequence (indexed arrays in PHP)
623
+ or a mapping of elements (associative arrays in PHP).
624
+
625
+ Sequences use a dash followed by a space:
626
+
627
+ .. code-block :: yaml
628
+
629
+ - PHP
630
+ - Perl
631
+ - Python
632
+
633
+ The previous YAML file is equivalent to the following PHP code::
634
+
635
+ ['PHP', 'Perl', 'Python'];
636
+
637
+ Mappings use a colon followed by a space (``: `` ) to mark each key/value pair:
638
+
639
+ .. code-block :: yaml
640
+
641
+ PHP : 5.2
642
+ MySQL : 5.1
643
+ Apache : 2.2.20
644
+
645
+ which is equivalent to this PHP code::
646
+
647
+ ['PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20'];
648
+
649
+ .. note ::
650
+
651
+ In a mapping, a key can be any valid scalar.
652
+
653
+ The number of spaces between the colon and the value does not matter:
654
+
655
+ .. code-block :: yaml
656
+
657
+ PHP : 5.2
658
+ MySQL : 5.1
659
+ Apache : 2.2.20
660
+
661
+ YAML uses indentation with one or more spaces to describe nested collections:
662
+
663
+ .. code-block :: yaml
664
+
665
+ ' symfony 1.0 ' :
666
+ PHP : 5.0
667
+ Propel : 1.2
668
+ ' symfony 1.2 ' :
669
+ PHP : 5.2
670
+ Propel : 1.3
671
+
672
+ The above YAML is equivalent to the following PHP code::
673
+
674
+ [
675
+ 'symfony 1.0' => [
676
+ 'PHP' => 5.0,
677
+ 'Propel' => 1.2,
678
+ ],
679
+ 'symfony 1.2' => [
680
+ 'PHP' => 5.2,
681
+ 'Propel' => 1.3,
682
+ ],
683
+ ];
684
+
685
+ There is one important thing you need to remember when using indentation in a
686
+ YAML file: *Indentation must be done with one or more spaces, but never with
687
+ tabulators *.
688
+
689
+ You can nest sequences and mappings as you like:
690
+
691
+ .. code-block :: yaml
692
+
693
+ ' Chapter 1 ' :
694
+ - Introduction
695
+ - Event Types
696
+ ' Chapter 2 ' :
697
+ - Introduction
698
+ - Helpers
699
+
700
+ YAML can also use flow styles for collections, using explicit indicators
701
+ rather than indentation to denote scope.
702
+
703
+ A sequence can be written as a comma separated list within square brackets
704
+ (``[] ``):
705
+
706
+ .. code-block :: yaml
707
+
708
+ [PHP, Perl, Python]
709
+
710
+ A mapping can be written as a comma separated list of key/values within curly
711
+ braces (``{} ``):
712
+
713
+ .. code-block :: yaml
714
+
715
+ { PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }
716
+
717
+ You can mix and match styles to achieve a better readability:
718
+
719
+ .. code-block :: yaml
720
+
721
+ ' Chapter 1 ' : [Introduction, Event Types]
722
+ ' Chapter 2 ' : [Introduction, Helpers]
723
+
724
+ .. code-block :: yaml
725
+
726
+ ' symfony 1.0 ' : { PHP: 5.0, Propel: 1.2 }
727
+ ' symfony 1.2 ' : { PHP: 5.2, Propel: 1.3 }
728
+
729
+ Comments
730
+ ~~~~~~~~
731
+
732
+ Comments can be added in YAML by prefixing them with a hash mark (``# ``):
733
+
734
+ .. code-block :: yaml
735
+
736
+ # Comment on a line
737
+ " symfony 1.0 " : { PHP: 5.0, Propel: 1.2 } # Comment at the end of a line
738
+ " symfony 1.2 " : { PHP: 5.2, Propel: 1.3 }
739
+
740
+ .. note ::
741
+
742
+ Comments are ignored by the YAML parser and do not need to be indented
743
+ according to the current level of nesting in a collection.
744
+
745
+ Explicit Typing
746
+ ~~~~~~~~~~~~~~~
747
+
748
+ The YAML specification defines some tags to set the type of any data explicitly:
749
+
750
+ .. code-block :: yaml
457
751
458
- yaml/*
752
+ data :
753
+ # this value is parsed as a string (it's not transformed into a DateTime)
754
+ start_date : !!str 2002-12-14
755
+
756
+ # this value is parsed as a float number (it will be 3.0 instead of 3)
757
+ price : !!float 3
758
+
759
+ # this value is parsed as binary data encoded in base64
760
+ picture : !!binary |
761
+ R0lGODlhDAAMAIQAAP//9/X
762
+ 17unp5WZmZgAAAOfn515eXv
763
+ Pz7Y6OjuDg4J+fn5OTk6enp
764
+ 56enmleECcgggoBADs=
765
+
766
+ Unsupported YAML Features
767
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
768
+
769
+ The following YAML features are not supported by the Symfony Yaml component:
770
+
771
+ * Multi-documents (``--- `` and ``... `` markers);
772
+ * Complex mapping keys and complex values starting with ``? ``;
773
+ * Tagged values as keys;
774
+ * The following tags and types: ``!!set ``, ``!!omap ``, ``!!pairs ``, ``!!seq ``,
775
+ ``!!bool ``, ``!!int ``, ``!!merge ``, ``!!null ``, ``!!timestamp ``, ``!!value ``, ``!!yaml ``;
776
+ * Tags (``TAG `` directive; example: ``%TAG ! tag:example.com,2000:app/ ``)
777
+ and tag references (example: ``!<tag:example.com,2000:app/foo> ``);
778
+ * Using sequence-like syntax for mapping elements (example: ``{foo, bar} ``; use
779
+ ``{foo: ~, bar: ~} `` instead).
459
780
460
781
.. _`YAML` : https://yaml.org/
461
782
.. _`YAML 1.2 version specification` : https://yaml.org/spec/1.2/spec.html
0 commit comments