<?php

// single value
array(
	'identifier' => '<identifier>',
	'classname' => '<classname>',
	'properties' => array(
		'<name>' => array(
			'type' => '<type>',
			'multivalue' => FALSE,
			'value' => <value>
		), ...
	),
	'metadata' => array( ... )
)

// multi value
array(
	'identifier' => '<identifier>',
	'classname' => '<classname>',
	'properties' => array(
		'<name>' => array(
			'type' => '<type>', // for multi values only (array|SplObjectStorage) or 'NULL' for NULL
			'multivalue' => TRUE,
			'value' => array(	// NULL for NULL/empty!
				array(
					'type' => '<type>',
					'index' => <index>,
					'value' => <value>
				), ...
			)
		)
	),
	'metadata' => array( ... )
)

/*
	<identifier> a uuid (for entities) or sha1 (for value objects)
	<classname> the AOP proxy target classname, fully qualified
	<type> the strings string, array, float, integer, boolean, DateTime, SplObjectStorage or a FQCN
	<value> a literal - string, integer, boolean, float, for datetime the timestamp (based on UTC!) or - for objects - an array with (at least) the identifier
		if <value> represents an object it can be an array following the format described here

	<vtype> a meta type, one of the strings string, array, float, integer, boolean, datetime, object - used in SQL backend

	metadata is optional and can be used to store backend specific metadata

	lazy loaded objects have only their identifier & classname recorded, properties is an empty array
*/