Blame | Last modification | View Log | Download
--- %YAML:1.0test: Sequence of scalarsspec: 2.1yaml: |- Mark McGwire- Sammy Sosa- Ken Griffeyphp: |array('Mark McGwire', 'Sammy Sosa', 'Ken Griffey')---test: Mapping of scalars to scalarsspec: 2.2yaml: |hr: 65avg: 0.278rbi: 147php: |array('hr' => 65, 'avg' => 0.278, 'rbi' => 147)---test: Mapping of scalars to sequencesspec: 2.3yaml: |american:- Boston Red Sox- Detroit Tigers- New York Yankeesnational:- New York Mets- Chicago Cubs- Atlanta Bravesphp: |array('american' =>array( 'Boston Red Sox', 'Detroit Tigers','New York Yankees' ),'national' =>array( 'New York Mets', 'Chicago Cubs','Atlanta Braves' ))---test: Sequence of mappingsspec: 2.4yaml: |-name: Mark McGwirehr: 65avg: 0.278-name: Sammy Sosahr: 63avg: 0.288php: |array(array('name' => 'Mark McGwire', 'hr' => 65, 'avg' => 0.278),array('name' => 'Sammy Sosa', 'hr' => 63, 'avg' => 0.288))---test: Legacy A5todo: truespec: legacy_A5yaml: |?- New York Yankees- Atlanta Braves:- 2001-07-02- 2001-08-12- 2001-08-14?- Detroit Tigers- Chicago Cubs:- 2001-07-23perl-busted: >YAML.pm will be able to emulate this behavior soon. In this regardit may be somewhat more correct than Python's native behaviour whichcan only use tuples as mapping keys. PyYAML will also need to figureout some clever way to roundtrip structured keys.python: |[{('New York Yankees', 'Atlanta Braves'):[yaml.timestamp('2001-07-02'),yaml.timestamp('2001-08-12'),yaml.timestamp('2001-08-14')],('Detroit Tigers', 'Chicago Cubs'):[yaml.timestamp('2001-07-23')]}]ruby: |{[ 'New York Yankees', 'Atlanta Braves' ] =>[ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ],[ 'Detroit Tigers', 'Chicago Cubs' ] =>[ Date.new( 2001, 7, 23 ) ]}syck: |struct test_node seq1[] = {{ T_STR, 0, "New York Yankees" },{ T_STR, 0, "Atlanta Braves" },end_node};struct test_node seq2[] = {{ T_STR, 0, "2001-07-02" },{ T_STR, 0, "2001-08-12" },{ T_STR, 0, "2001-08-14" },end_node};struct test_node seq3[] = {{ T_STR, 0, "Detroit Tigers" },{ T_STR, 0, "Chicago Cubs" },end_node};struct test_node seq4[] = {{ T_STR, 0, "2001-07-23" },end_node};struct test_node map[] = {{ T_SEQ, 0, 0, seq1 },{ T_SEQ, 0, 0, seq2 },{ T_SEQ, 0, 0, seq3 },{ T_SEQ, 0, 0, seq4 },end_node};struct test_node stream[] = {{ T_MAP, 0, 0, map },end_node};---test: Sequence of sequencesspec: 2.5yaml: |- [ name , hr , avg ]- [ Mark McGwire , 65 , 0.278 ]- [ Sammy Sosa , 63 , 0.288 ]php: |array(array( 'name', 'hr', 'avg' ),array( 'Mark McGwire', 65, 0.278 ),array( 'Sammy Sosa', 63, 0.288 ))---test: Mapping of mappingstodo: truespec: 2.6yaml: |Mark McGwire: {hr: 65, avg: 0.278}Sammy Sosa: {hr: 63,avg: 0.288}php: |array('Mark McGwire' =>array( 'hr' => 65, 'avg' => 0.278 ),'Sammy Sosa' =>array( 'hr' => 63, 'avg' => 0.288 ))---test: Two documents in a stream each with a leading commenttodo: truespec: 2.7yaml: |# Ranking of 1998 home runs---- Mark McGwire- Sammy Sosa- Ken Griffey# Team ranking---- Chicago Cubs- St Louis Cardinalsruby: |y = YAML::Stream.newy.add( [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ] )y.add( [ 'Chicago Cubs', 'St Louis Cardinals' ] )documents: 2---test: Play by play feed from a gametodo: truespec: 2.8yaml: |---time: 20:03:20player: Sammy Sosaaction: strike (miss)...---time: 20:03:47player: Sammy Sosaaction: grand slam...perl: |[ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ]documents: 2---test: Single document with two commentsspec: 2.9yaml: |hr: # 1998 hr ranking- Mark McGwire- Sammy Sosarbi:# 1998 rbi ranking- Sammy Sosa- Ken Griffeyphp: |array('hr' => array( 'Mark McGwire', 'Sammy Sosa' ),'rbi' => array( 'Sammy Sosa', 'Ken Griffey' ))---test: Node for Sammy Sosa appears twice in this documentspec: 2.10yaml: |---hr:- Mark McGwire# Following node labeled SS- &SS Sammy Sosarbi:- *SS # Subsequent occurrence- Ken Griffeyphp: |array('hr' =>array('Mark McGwire', 'Sammy Sosa'),'rbi' =>array('Sammy Sosa', 'Ken Griffey'))---test: Mapping between sequencestodo: truespec: 2.11yaml: |? # PLAY SCHEDULE- Detroit Tigers- Chicago Cubs:- 2001-07-23? [ New York Yankees,Atlanta Braves ]: [ 2001-07-02, 2001-08-12,2001-08-14 ]ruby: |{[ 'Detroit Tigers', 'Chicago Cubs' ] => [ Date.new( 2001, 7, 23 ) ],[ 'New York Yankees', 'Atlanta Braves' ] => [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ]}syck: |struct test_node seq1[] = {{ T_STR, 0, "New York Yankees" },{ T_STR, 0, "Atlanta Braves" },end_node};struct test_node seq2[] = {{ T_STR, 0, "2001-07-02" },{ T_STR, 0, "2001-08-12" },{ T_STR, 0, "2001-08-14" },end_node};struct test_node seq3[] = {{ T_STR, 0, "Detroit Tigers" },{ T_STR, 0, "Chicago Cubs" },end_node};struct test_node seq4[] = {{ T_STR, 0, "2001-07-23" },end_node};struct test_node map[] = {{ T_SEQ, 0, 0, seq3 },{ T_SEQ, 0, 0, seq4 },{ T_SEQ, 0, 0, seq1 },{ T_SEQ, 0, 0, seq2 },end_node};struct test_node stream[] = {{ T_MAP, 0, 0, map },end_node};---test: Sequence key shortcutspec: 2.12yaml: |---# products purchased- item : Super Hoopquantity: 1- item : Basketballquantity: 4- item : Big Shoesquantity: 1php: |array (array ('item' => 'Super Hoop','quantity' => 1,),array ('item' => 'Basketball','quantity' => 4,),array ('item' => 'Big Shoes','quantity' => 1,))perl: |[{ item => 'Super Hoop', quantity => 1 },{ item => 'Basketball', quantity => 4 },{ item => 'Big Shoes', quantity => 1 }]ruby: |[{ 'item' => 'Super Hoop', 'quantity' => 1 },{ 'item' => 'Basketball', 'quantity' => 4 },{ 'item' => 'Big Shoes', 'quantity' => 1 }]python: |[{ 'item': 'Super Hoop', 'quantity': 1 },{ 'item': 'Basketball', 'quantity': 4 },{ 'item': 'Big Shoes', 'quantity': 1 }]syck: |struct test_node map1[] = {{ T_STR, 0, "item" },{ T_STR, 0, "Super Hoop" },{ T_STR, 0, "quantity" },{ T_STR, 0, "1" },end_node};struct test_node map2[] = {{ T_STR, 0, "item" },{ T_STR, 0, "Basketball" },{ T_STR, 0, "quantity" },{ T_STR, 0, "4" },end_node};struct test_node map3[] = {{ T_STR, 0, "item" },{ T_STR, 0, "Big Shoes" },{ T_STR, 0, "quantity" },{ T_STR, 0, "1" },end_node};struct test_node seq[] = {{ T_MAP, 0, 0, map1 },{ T_MAP, 0, 0, map2 },{ T_MAP, 0, 0, map3 },end_node};struct test_node stream[] = {{ T_SEQ, 0, 0, seq },end_node};---test: Literal perserves newlinestodo: truespec: 2.13yaml: |# ASCII Art--- |\//||\/||// || ||_perl: |"\\//||\\/||\n// || ||_\n"ruby: |"\\//||\\/||\n// || ||_\n"python: |[flushLeft("""\//||\/||// || ||_""")]syck: |struct test_node stream[] = {{ T_STR, 0, "\\//||\\/||\n// || ||_\n" },end_node};---test: Folded treats newlines as a spacetodo: truespec: 2.14yaml: |---Mark McGwire'syear was crippledby a knee injury.perl: |"Mark McGwire's year was crippled by a knee injury."ruby: |"Mark McGwire's year was crippled by a knee injury."python: |[ "Mark McGwire's year was crippled by a knee injury." ]syck: |struct test_node stream[] = {{ T_STR, 0, "Mark McGwire's year was crippled by a knee injury." },end_node};---test: Newlines preserved for indented and blank linestodo: truespec: 2.15yaml: |--- >Sammy Sosa completed anotherfine season with great stats.63 Home Runs0.288 Batting AverageWhat a year!perl: |"Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n"ruby: |"Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n"python: |[flushLeft("""Sammy Sosa completed another fine season with great stats.63 Home Runs0.288 Batting AverageWhat a year!""")]syck: |struct test_node stream[] = {{ T_STR, 0, "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n" },end_node};---test: Indentation determines scopespec: 2.16yaml: |name: Mark McGwireaccomplishment: >Mark set a major leaguehome run record in 1998.stats: |65 Home Runs0.278 Batting Averagephp: |array('name' => 'Mark McGwire','accomplishment' => "Mark set a major league home run record in 1998.\n",'stats' => "65 Home Runs\n0.278 Batting Average\n")---test: Quoted scalarstodo: truespec: 2.17yaml: |unicode: "Sosa did fine.\u263A"control: "\b1998\t1999\t2000\n"hexesc: "\x0D\x0A is \r\n"single: '"Howdy!" he cried.'quoted: ' # not a ''comment''.'tie-fighter: '|\-*-/|'ruby: |{"tie-fighter" => "|\\-*-/|","control"=>"\0101998\t1999\t2000\n","unicode"=>"Sosa did fine." + ["263A".hex ].pack('U*'),"quoted"=>" # not a 'comment'.","single"=>"\"Howdy!\" he cried.","hexesc"=>"\r\n is \r\n"}---test: Multiline flow scalarstodo: truespec: 2.18yaml: |plain:This unquoted scalarspans many lines.quoted: "So does thisquoted scalar.\n"ruby: |{'plain' => 'This unquoted scalar spans many lines.','quoted' => "So does this quoted scalar.\n"}---test: Integersspec: 2.19yaml: |canonical: 12345octal: 014hexadecimal: 0xCphp: |array('canonical' => 12345,'octal' => 014,'hexadecimal' => 0xC)---test: Decimal Integerdeprecated: truespec: 2.19yaml: |decimal: +12,345php: |array('decimal' => 12345.0,)---# FIX: spec shows parens around -inf and NaNtest: Floating pointspec: 2.20yaml: |canonical: 1.23015e+3exponential: 12.3015e+02negative infinity: -.infnot a number: .NaNfloat as whole number: !!float 1php: |array('canonical' => 1230.15,'exponential' => 1230.15,'negative infinity' => log(0),'not a number' => -log(0),'float as whole number' => (float) 1)---test: Fixed Floating pointdeprecated: truespec: 2.20yaml: |fixed: 1,230.15php: |array('fixed' => 1230.15,)---test: Timestampstodo: truespec: 2.22yaml: |canonical: 2001-12-15T02:59:43.1Ziso8601: 2001-12-14t21:59:43.10-05:00spaced: 2001-12-14 21:59:43.10 -05:00date: 2002-12-14 # Time is noon UTCphp: |array('canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ),'iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),'date' => Date.new( 2002, 12, 14 ))---test: legacy Timestamps testtodo: truespec: legacy D4yaml: |canonical: 2001-12-15T02:59:43.00Ziso8601: 2001-02-28t21:59:43.00-05:00spaced: 2001-12-14 21:59:43.00 -05:00date: 2002-12-14php: |array('canonical' => Time::utc( 2001, 12, 15, 2, 59, 43, 0 ),'iso8601' => YAML::mktime( 2001, 2, 28, 21, 59, 43, 0, "-05:00" ),'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0, "-05:00" ),'date' => Date.new( 2002, 12, 14 ))---test: Various explicit familiestodo: truespec: 2.23yaml: |not-date: !!str 2002-04-28picture: !binary |R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmleECcgggoBADs=application specific tag: !!something |The semantics of the tagabove may be different fordifferent documents.ruby-setup: |YAML.add_private_type( "something" ) do |type, val|"SOMETHING: #{val}"endruby: |{'not-date' => '2002-04-28','picture' => "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236i^\020' \202\n\001\000;",'application specific tag' => "SOMETHING: The semantics of the tag\nabove may be different for\ndifferent documents.\n"}---test: Application specific familytodo: truespec: 2.24yaml: |# Establish a tag prefix--- !clarkevans.com,2002/graph/^shape# Use the prefix: shorthand for# !clarkevans.com,2002/graph/circle- !^circlecenter: &ORIGIN {x: 73, 'y': 129}radius: 7- !^line # !clarkevans.com,2002/graph/linestart: *ORIGINfinish: { x: 89, 'y': 102 }- !^labelstart: *ORIGINcolor: 0xFFEEBBvalue: Pretty vector drawing.ruby-setup: |YAML.add_domain_type( "clarkevans.com,2002", 'graph/shape' ) { |type, val|if Array === valval << "Shape Container"valelseraise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspectend}one_shape_proc = Proc.new { |type, val|scheme, domain, type = type.split( /:/, 3 )if val.is_a? ::Hashval['TYPE'] = "Shape: #{type}"valelseraise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspectend}YAML.add_domain_type( "clarkevans.com,2002", 'graph/circle', &one_shape_proc )YAML.add_domain_type( "clarkevans.com,2002", 'graph/line', &one_shape_proc )YAML.add_domain_type( "clarkevans.com,2002", 'graph/label', &one_shape_proc )ruby: |[{"radius" => 7,"center"=>{"x" => 73,"y" => 129},"TYPE" => "Shape: graph/circle"}, {"finish" =>{"x" => 89,"y" => 102},"TYPE" => "Shape: graph/line","start" =>{"x" => 73,"y" => 129}}, {"TYPE" => "Shape: graph/label","value" => "Pretty vector drawing.","start" =>{"x" => 73,"y" => 129},"color" => 16772795},"Shape Container"]# ---# test: Unordered set# spec: 2.25# yaml: |# # sets are represented as a# # mapping where each key is# # associated with the empty string# --- !set# ? Mark McGwire# ? Sammy Sosa# ? Ken Griff---test: Ordered mappingstodo: truespec: 2.26yaml: |# ordered maps are represented as# a sequence of mappings, with# each mapping having one key--- !omap- Mark McGwire: 65- Sammy Sosa: 63- Ken Griffy: 58ruby: |YAML::Omap['Mark McGwire', 65,'Sammy Sosa', 63,'Ken Griffy', 58]---test: Invoicedump_skip: truespec: 2.27yaml: |--- !clarkevans.com,2002/^invoiceinvoice: 34843date : 2001-01-23bill-to: &id001given : Chrisfamily : Dumarsaddress:lines: |458 Walkman Dr.Suite #292city : Royal Oakstate : MIpostal : 48046ship-to: *id001product:-sku : BL394Dquantity : 4description : Basketballprice : 450.00-sku : BL4438Hquantity : 1description : Super Hoopprice : 2392.00tax : 251.42total: 4443.52comments: >Late afternoon is best.Backup contact is NancyBillsmer @ 338-4338.php: |array('invoice' => 34843, 'date' => gmmktime(0, 0, 0, 1, 23, 2001),'bill-to' =>array( 'given' => 'Chris', 'family' => 'Dumars', 'address' => array( 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ) ), 'ship-to' =>array( 'given' => 'Chris', 'family' => 'Dumars', 'address' => array( 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ) ), 'product' =>array(array( 'sku' => 'BL394D', 'quantity' => 4, 'description' => 'Basketball', 'price' => 450.00 ),array( 'sku' => 'BL4438H', 'quantity' => 1, 'description' => 'Super Hoop', 'price' => 2392.00 )),'tax' => 251.42, 'total' => 4443.52,'comments' => "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.\n")---test: Log filetodo: truespec: 2.28yaml: |---Time: 2001-11-23 15:01:42 -05:00User: edWarning: >This is an error messagefor the log file---Time: 2001-11-23 15:02:31 -05:00User: edWarning: >A slightly different errormessage.---Date: 2001-11-23 15:03:17 -05:00User: edFatal: >Unknown variable "bar"Stack:- file: TopClass.pyline: 23code: |x = MoreObject("345\n")- file: MoreClass.pyline: 58code: |-foo = barruby: |y = YAML::Stream.newy.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 01, 42, 00, "-05:00" ),'User' => 'ed', 'Warning' => "This is an error message for the log file\n" } )y.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 02, 31, 00, "-05:00" ),'User' => 'ed', 'Warning' => "A slightly different error message.\n" } )y.add( { 'Date' => YAML::mktime( 2001, 11, 23, 15, 03, 17, 00, "-05:00" ),'User' => 'ed', 'Fatal' => "Unknown variable \"bar\"\n",'Stack' => [{ 'file' => 'TopClass.py', 'line' => 23, 'code' => "x = MoreObject(\"345\\n\")\n" },{ 'file' => 'MoreClass.py', 'line' => 58, 'code' => "foo = bar" } ] } )documents: 3---test: Throwaway commentsyaml: |### These are four throwaway comment ###### lines (the second line is empty). ###this: | # Comments may trail lines.contains three lines of text.The third one starts with a# character. This isn't a comment.# These are three throwaway comment# lines (the first line is empty).php: |array('this' => "contains three lines of text.\nThe third one starts with a\n# character. This isn't a comment.\n")---test: Document with a single valuetodo: trueyaml: |--- >This YAML stream contains a single text value.The next stream is a log file - a sequence oflog entries. Adding an entry to the log is asimple matter of appending it at the end.ruby: |"This YAML stream contains a single text value. The next stream is a log file - a sequence of log entries. Adding an entry to the log is a simple matter of appending it at the end.\n"---test: Document streamtodo: trueyaml: |---at: 2001-08-12 09:25:00.00 Ztype: GETHTTP: '1.0'url: '/index.html'---at: 2001-08-12 09:25:10.00 Ztype: GETHTTP: '1.0'url: '/toc.html'ruby: |y = YAML::Stream.newy.add( {'at' => Time::utc( 2001, 8, 12, 9, 25, 00 ),'type' => 'GET','HTTP' => '1.0','url' => '/index.html'} )y.add( {'at' => Time::utc( 2001, 8, 12, 9, 25, 10 ),'type' => 'GET','HTTP' => '1.0','url' => '/toc.html'} )documents: 2---test: Top level mappingyaml: |# This stream is an example of a top-level mapping.invoice : 34843date : 2001-01-23total : 4443.52php: |array('invoice' => 34843,'date' => gmmktime(0, 0, 0, 1, 23, 2001),'total' => 4443.52)---test: Single-line documentstodo: trueyaml: |# The following is a sequence of three documents.# The first contains an empty mapping, the second# an empty sequence, and the last an empty string.--- {}--- [ ]--- ''ruby: |y = YAML::Stream.newy.add( {} )y.add( [] )y.add( '' )documents: 3---test: Document with pausetodo: trueyaml: |# A communication channel based on a YAML stream.---sent at: 2002-06-06 11:46:25.10 Zpayload: Whatever# Receiver can process this as soon as the following is sent:...# Even if the next message is sent long after:---sent at: 2002-06-06 12:05:53.47 Zpayload: Whatever...ruby: |y = YAML::Stream.newy.add({ 'sent at' => YAML::mktime( 2002, 6, 6, 11, 46, 25, 0.10 ),'payload' => 'Whatever' })y.add({ "payload" => "Whatever", "sent at" => YAML::mktime( 2002, 6, 6, 12, 5, 53, 0.47 ) })documents: 2---test: Explicit typingdeprecated: Using the non-specific tag "!" is deprecated since version 3.4 as its behavior will change in 4.0.yaml: |integer: 12also int: ! "12"string: !!str 12php: |array( 'integer' => 12, 'also int' => 12, 'string' => '12' )---test: Private typestodo: trueyaml: |# Both examples below make use of the 'x-private:ball'# type family URI, but with different semantics.---pool: !!ballnumber: 8color: black---bearing: !!ballmaterial: steelruby: |y = YAML::Stream.newy.add( { 'pool' =>YAML::PrivateType.new( 'ball',{ 'number' => 8, 'color' => 'black' } ) })y.add( { 'bearing' =>YAML::PrivateType.new( 'ball',{ 'material' => 'steel' } ) })documents: 2---test: Type family under yaml.orgyaml: |# The URI is 'tag:yaml.org,2002:str'- !!str a Unicode stringphp: |array( 'a Unicode string' )---test: Type family under perl.yaml.orgtodo: trueyaml: |# The URI is 'tag:perl.yaml.org,2002:Text::Tabs'- !perl/Text::Tabs {}ruby: |[ YAML::DomainType.new( 'perl.yaml.org,2002', 'Text::Tabs', {} ) ]---test: Type family under clarkevans.comtodo: trueyaml: |# The URI is 'tag:clarkevans.com,2003-02:timesheet'- !clarkevans.com,2003-02/timesheet {}ruby: |[ YAML::DomainType.new( 'clarkevans.com,2003-02', 'timesheet', {} ) ]---test: URI Escapingtodo: trueyaml: |same:- !domain.tld,2002/type\x30 value- !domain.tld,2002/type0 valuedifferent: # As far as the YAML parser is concerned- !domain.tld,2002/type%30 value- !domain.tld,2002/type0 valueruby-setup: |YAML.add_domain_type( "domain.tld,2002", "type0" ) { |type, val|"ONE: #{val}"}YAML.add_domain_type( "domain.tld,2002", "type%30" ) { |type, val|"TWO: #{val}"}ruby: |{ 'same' => [ 'ONE: value', 'ONE: value' ], 'different' => [ 'TWO: value', 'ONE: value' ] }---test: URI Prefixingtodo: trueyaml: |# 'tag:domain.tld,2002:invoice' is some type family.invoice: !domain.tld,2002/^invoice# 'seq' is shorthand for 'tag:yaml.org,2002:seq'.# This does not effect '^customer' below# because it is does not specify a prefix.customers: !seq# '^customer' is shorthand for the full# notation 'tag:domain.tld,2002:customer'.- !^customergiven : Chrisfamily : Dumarsruby-setup: |YAML.add_domain_type( "domain.tld,2002", /(invoice|customer)/ ) { |type, val|if val.is_a? ::Hashscheme, domain, type = type.split( /:/, 3 )val['type'] = "domain #{type}"valelseraise YAML::Error, "Not a Hash in domain.tld/invoice: " + val.inspectend}ruby: |{ "invoice"=> { "customers"=> [ { "given"=>"Chris", "type"=>"domain customer", "family"=>"Dumars" } ], "type"=>"domain invoice" } }---test: Overriding anchorsyaml: |anchor : &A001 This scalar has an anchor.override : &A001 >The alias node below is arepeated use of this value.alias : *A001php: |array( 'anchor' => 'This scalar has an anchor.','override' => "The alias node below is a repeated use of this value.\n",'alias' => "The alias node below is a repeated use of this value.\n" )---test: Flow and block formattingtodo: trueyaml: |empty: []flow: [ one, two, three # May span lines,, four, # indentation isfive ] # mostly ignored.block:- First item in top sequence-- Subordinate sequence entry- >A folded sequence entry- Sixth item in top sequenceruby: |{ 'empty' => [], 'flow' => [ 'one', 'two', 'three', 'four', 'five' ],'block' => [ 'First item in top sequence', [ 'Subordinate sequence entry' ],"A folded sequence entry\n", 'Sixth item in top sequence' ] }---test: Complete mapping testtodo: trueyaml: |empty: {}flow: { one: 1, two: 2 }spanning: { one: 1,two: 2 }block:first : First entrysecond:key: Subordinate mappingthird:- Subordinate sequence- { }- Previous mapping is empty.- A key: value pair in a sequence.A second: key:value pair.- The previous entry is equal to the following one.-A key: value pair in a sequence.A second: key:value pair.!float 12 : This key is a float.? >?: This key had to be protected."\a" : This key had to be escaped.? >This is amulti-linefolded key: Whose value isalso multi-line.? this also works as a key: with a value at the next line.?- This key- is a sequence:- With a sequence value.?This: keyis a: mapping:with a: mapping value.ruby: |{ 'empty' => {}, 'flow' => { 'one' => 1, 'two' => 2 },'spanning' => { 'one' => 1, 'two' => 2 },'block' => { 'first' => 'First entry', 'second' =>{ 'key' => 'Subordinate mapping' }, 'third' =>[ 'Subordinate sequence', {}, 'Previous mapping is empty.',{ 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' },'The previous entry is equal to the following one.',{ 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' } ],12.0 => 'This key is a float.', "?\n" => 'This key had to be protected.',"\a" => 'This key had to be escaped.',"This is a multi-line folded key\n" => "Whose value is also multi-line.",'this also works as a key' => 'with a value at the next line.',[ 'This key', 'is a sequence' ] => [ 'With a sequence value.' ] } }# Couldn't recreate map exactly, so we'll do a detailed check to be sure it's entactobj_y['block'].keys.each { |k|if Hash === kv = obj_y['block'][k]if k['This'] == 'key' and k['is a'] == 'mapping' and v['with a'] == 'mapping value.'obj_r['block'][k] = vendend}---test: Literal explicit indentationyaml: |# Explicit indentation must# be given in all the three# following cases.leading spaces: |2This value starts with four spaces.leading line break: |2This value starts with a line break.leading comment indicator: |2# first line starts with a# character.# Explicit indentation may# also be given when it is# not required.redundant: |2This value is indented 2 spaces.php: |array('leading spaces' => " This value starts with four spaces.\n",'leading line break' => "\nThis value starts with a line break.\n",'leading comment indicator' => "# first line starts with a\n# character.\n",'redundant' => "This value is indented 2 spaces.\n")---test: Chomping and keep modifiersyaml: |clipped: |This has one newline.same as "clipped" above: "This has one newline.\n"stripped: |-This has no newline.same as "stripped" above: "This has no newline."kept: |+This has two newlines.same as "kept" above: "This has two newlines.\n\n"php: |array('clipped' => "This has one newline.\n",'same as "clipped" above' => "This has one newline.\n",'stripped' => 'This has no newline.','same as "stripped" above' => 'This has no newline.','kept' => "This has two newlines.\n\n",'same as "kept" above' => "This has two newlines.\n\n")---test: Literal combinationstodo: trueyaml: |empty: |literal: |The \ ' " characters may befreely used. Leading whitespace is significant.Line breaks are significant.Thus this value contains oneempty line and ends with asingle line break, but doesnot start with one.is equal to: "The \\ ' \" characters may \be\nfreely used. Leading white\n space \is significant.\n\nLine breaks are \significant.\nThus this value contains \one\nempty line and ends with a\nsingle \line break, but does\nnot start with one.\n"# Comments may follow a block# scalar value. They must be# less indented.# Modifiers may be combined in any order.indented and chomped: |2-This has no newline.also written as: |-2This has no newline.both are equal to: " This has no newline."php: |array('empty' => '','literal' => "The \\ ' \" characters may be\nfreely used. Leading white\n space " +"is significant.\n\nLine breaks are significant.\nThus this value contains one\n" +"empty line and ends with a\nsingle line break, but does\nnot start with one.\n",'is equal to' => "The \\ ' \" characters may be\nfreely used. Leading white\n space " +"is significant.\n\nLine breaks are significant.\nThus this value contains one\n" +"empty line and ends with a\nsingle line break, but does\nnot start with one.\n",'indented and chomped' => ' This has no newline.','also written as' => ' This has no newline.','both are equal to' => ' This has no newline.')---test: Folded combinationstodo: trueyaml: |empty: >one paragraph: >Line feeds are convertedto spaces, so this valuecontains no line breaksexcept for the final one.multiple paragraphs: >2An empty line, eitherat the start or inthe value:Is interpreted as aline break. Thus thisvalue contains threeline breaks.indented text: >This is a foldedparagraph followedby a list:* first entry* second entryFollowed by anotherfolded paragraph,another list:* first entry* second entryAnd a final foldedparagraph.above is equal to: |This is a folded paragraph followed by a list:* first entry* second entryFollowed by another folded paragraph, another list:* first entry* second entryAnd a final folded paragraph.# Explicit comments may follow# but must be less indented.php: |array('empty' => '','one paragraph' => 'Line feeds are converted to spaces, so this value'." contains no line breaks except for the final one.\n",'multiple paragraphs' => "\nAn empty line, either at the start or in the value:\n"."Is interpreted as a line break. Thus this value contains three line breaks.\n",'indented text' => "This is a folded paragraph followed by a list:\n"." * first entry\n * second entry\nFollowed by another folded paragraph, "."another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n",'above is equal to' => "This is a folded paragraph followed by a list:\n"." * first entry\n * second entry\nFollowed by another folded paragraph, "."another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n")---test: Single quotestodo: trueyaml: |empty: ''second: '! : \ etc. can be used freely.'third: 'a single quote '' must be escaped.'span: 'this containssix spacesand oneline break'is same as: "this contains six spaces\nand one line break"php: |array('empty' => '','second' => '! : \\ etc. can be used freely.','third' => "a single quote ' must be escaped.",'span' => "this contains six spaces\nand one line break",'is same as' => "this contains six spaces\nand one line break")---test: Double quotestodo: trueyaml: |empty: ""second: "! : etc. can be used freely."third: "a \" or a \\ must be escaped."fourth: "this value ends with an LF.\n"span: "this containsfour \spaces"is equal to: "this contains four spaces"php: |array('empty' => '','second' => '! : etc. can be used freely.','third' => 'a " or a \\ must be escaped.','fourth' => "this value ends with an LF.\n",'span' => "this contains four spaces",'is equal to' => "this contains four spaces")---test: Unquoted stringstodo: trueyaml: |first: There is no unquoted empty string.second: 12 ## This is an integer.third: !!str 12 ## This is a string.span: this containssix spacesand oneline breakindicators: this has no comments.#:foo and bar# areboth text.flow: [ can spanlines, # commentlikethis ]note: { one-line keys: but multi-line values }php: |array('first' => 'There is no unquoted empty string.','second' => 12,'third' => '12','span' => "this contains six spaces\nand one line break",'indicators' => "this has no comments. #:foo and bar# are both text.",'flow' => [ 'can span lines', 'like this' ],'note' => { 'one-line keys' => 'but multi-line values' })---test: Spanning sequencestodo: trueyaml: |# The following are equal seqs# with different identities.flow: [ one, two ]spanning: [ one,two ]block:- one- twophp: |array('flow' => [ 'one', 'two' ],'spanning' => [ 'one', 'two' ],'block' => [ 'one', 'two' ])---test: Flow mappingsyaml: |# The following are equal maps# with different identities.flow: { one: 1, two: 2 }block:one: 1two: 2php: |array('flow' => array( 'one' => 1, 'two' => 2 ),'block' => array( 'one' => 1, 'two' => 2 ))---test: Representations of 12todo: trueyaml: |- 12 # An integer# The following scalars# are loaded to the# string value '1' '2'.- !!str 12- '12'- "12"- "\1\2\"# Strings containing paths and regexps can be unquoted:- /foo/bar- d:/foo/bar- foo/bar- /a.*b/php: |array( 12, '12', '12', '12', '12', '/foo/bar', 'd:/foo/bar', 'foo/bar', '/a.*b/' )---test: "Null"todo: trueyaml: |canonical: ~english: null# This sequence has five# entries, two with values.sparse:- ~- 2nd entry- Null- 4th entry-four: This mapping has five keys,only two with values.php: |array ('canonical' => null,'english' => null,'sparse' => array( null, '2nd entry', null, '4th entry', null ]),'four' => 'This mapping has five keys, only two with values.')---test: Omaptodo: trueyaml: |# Explicitly typed dictionary.Bestiary: !omap- aardvark: African pig-like ant eater. Ugly.- anteater: South-American ant eater. Two species.- anaconda: South-American constrictor snake. Scary.# Etc.ruby: |{'Bestiary' => YAML::Omap['aardvark', 'African pig-like ant eater. Ugly.','anteater', 'South-American ant eater. Two species.','anaconda', 'South-American constrictor snake. Scary.']}---test: Pairstodo: trueyaml: |# Explicitly typed pairs.tasks: !pairs- meeting: with team.- meeting: with boss.- break: lunch.- meeting: with client.ruby: |{'tasks' => YAML::Pairs['meeting', 'with team.','meeting', 'with boss.','break', 'lunch.','meeting', 'with client.']}---test: Settodo: trueyaml: |# Explicitly typed set.baseball players: !setMark McGwire:Sammy Sosa:Ken Griffey:ruby: |{'baseball players' => YAML::Set['Mark McGwire', nil,'Sammy Sosa', nil,'Ken Griffey', nil]}---test: Integeryaml: |canonical: 12345octal: 014hexadecimal: 0xCphp: |array('canonical' => 12345,'octal' => 12,'hexadecimal' => 12)---test: Decimaldeprecated: trueyaml: |decimal: +12,345php: |array('decimal' => 12345.0,)---test: Fixed Floatdeprecated: trueyaml: |fixed: 1,230.15php: |array('fixed' => 1230.15,)---test: Floatyaml: |canonical: 1.23015e+3exponential: 12.3015e+02negative infinity: -.infnot a number: .NaNphp: |array('canonical' => 1230.15,'exponential' => 1230.15,'negative infinity' => log(0),'not a number' => -log(0))---test: Timestamptodo: trueyaml: |canonical: 2001-12-15T02:59:43.1Zvalid iso8601: 2001-12-14t21:59:43.10-05:00space separated: 2001-12-14 21:59:43.10 -05:00date (noon UTC): 2002-12-14ruby: |array('canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ),'valid iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),'space separated' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),'date (noon UTC)' => Date.new( 2002, 12, 14 ))---test: Binarytodo: trueyaml: |canonical: !binary "\R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="base64: !binary |R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=description: >The binary value above is a tiny arrowencoded as a gif image.ruby-setup: |arrow_gif = "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236iiiccc\243\243\243\204\204\204\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371!\376\016Made with GIMP\000,\000\000\000\000\f\000\f\000\000\005, \216\2010\236\343@\024\350i\020\304\321\212\010\034\317\200M$z\357\3770\205p\270\2601f\r\e\316\001\303\001\036\020' \202\n\001\000;"ruby: |{'canonical' => arrow_gif,'base64' => arrow_gif,'description' => "The binary value above is a tiny arrow encoded as a gif image.\n"}---test: Merge keytodo: trueyaml: |---- &CENTER { x: 1, y: 2 }- &LEFT { x: 0, y: 2 }- &BIG { r: 10 }- &SMALL { r: 1 }# All the following maps are equal:- # Explicit keysx: 1y: 2r: 10label: center/big- # Merge one map<< : *CENTERr: 10label: center/big- # Merge multiple maps<< : [ *CENTER, *BIG ]label: center/big- # Override<< : [ *BIG, *LEFT, *SMALL ]x: 1label: center/bigruby-setup: |center = { 'x' => 1, 'y' => 2 }left = { 'x' => 0, 'y' => 2 }big = { 'r' => 10 }small = { 'r' => 1 }node1 = { 'x' => 1, 'y' => 2, 'r' => 10, 'label' => 'center/big' }node2 = center.dupnode2.update( { 'r' => 10, 'label' => 'center/big' } )node3 = big.dupnode3.update( center )node3.update( { 'label' => 'center/big' } )node4 = small.dupnode4.update( left )node4.update( big )node4.update( { 'x' => 1, 'label' => 'center/big' } )ruby: |[center, left, big, small, node1, node2, node3, node4]---test: Default keytodo: trueyaml: |--- # Old schemalink with:- library1.dll- library2.dll--- # New schemalink with:- = : library1.dllversion: 1.2- = : library2.dllversion: 2.3ruby: |y = YAML::Stream.newy.add( { 'link with' => [ 'library1.dll', 'library2.dll' ] } )obj_h = Hash[ 'version' => 1.2 ]obj_h.default = 'library1.dll'obj_h2 = Hash[ 'version' => 2.3 ]obj_h2.default = 'library2.dll'y.add( { 'link with' => [ obj_h, obj_h2 ] } )documents: 2---test: Special keystodo: trueyaml: |"!": These three keys"&": had to be quoted"=": and are normal strings.# NOTE: the following node should NOT be serialized this way.encoded node :!special '!' : '!type'!special|canonical '&' : 12= : value# The proper way to serialize the above node is as follows:node : !!type &12 valueruby: |{ '!' => 'These three keys', '&' => 'had to be quoted','=' => 'and are normal strings.','encoded node' => YAML::PrivateType.new( 'type', 'value' ),'node' => YAML::PrivateType.new( 'type', 'value' ) }