Nested hashes and arrays could be forced into all three, albeit perhaps at the expense of some awkwardness. After all, it's all structured data. Below is just a quick example and I'm not writing this node to promote writing code to support this data structure. It's certainly not impossible, though, to denote these things.:
my %data = (
'attributes' => {
'_name' => 'mydata',
'height' => 50,
'width' => '80%',
},
'children' => [
{ 'attributes' => { '_name' => 'bob', ...} ...},
{ 'attributes' => { '_name' => 'tom', ...} ...},
],
'content' => 'yadda yadda ...',
);
Whether that's something you'd want to process later is another issue. Some people like to put a lot of predetermined information about their data into their code. Others like to keep the data as self-describing as possible and keep the code very general to work with that. There are strengths and weaknesses to either approach.