ae2 is a file format that by itself it has no value (only can repair aem corrupted files) but it is the structural part of an aem file.

specification
General
- there can't be instances (rows) if there are not attributes (columns).
Attributes
- the name of an attribute cannot be empty.
- the name of an attribute is unique.
- the name of an attribute cannot contain breaklines.
0 Text
- possible values: any string.
- EMPTY value: string with 0 elements.
1 Number
- number is expressed (regex notation!): -?[0-9]+(\.[0-9]+)?
- if it is an autonumeric type its value must be a positive integer.
· Examples: 0 / 5
- 0 is unsigned.
- if the string contains only zeros, it's 0.
· Example: 000000 -> 0
- if it's a decimal number and the fractional part ends in zeros, we remove them.
· Examples: 50.600 -> 50.6 / 0.0 -> 0
- if the integer part begins with zeros, we remove them.
· Examples: 050 -> 50 / 05.1 -> 5.1
- possible values: integers and decimals.
· Examples: -1 / 1 / -0.98 / 65.004
- EMPTY value: string with 0 elements.
2 Boolean
- possible values: 0 or 1.
3 Date
- a date is expressed: YYYYMMDD
- EMPTY value: string with 0 elements.
4 Datetime
- a datetime is expressed: YYYYMMDDTHHMMSS
- EMPTY value: string with 0 elements.
4Z UTC datetime
- an UTC datetime is expressed: YYYYMMDDTHHMMSSZ
- EMPTY value: string with 0 elements.
5 Time
- time is expressed: HHMMSS
- EMPTY value: string with 0 elements.
5Z UTC time
- an UTC time is expressed: HHMMSSZ
- EMPTY value: string with 0 elements.
6 Enumeration
- an enumeration must have at least 1 enumerator.
- an enumeration can't have repeated enumerators.
- enumerators are string type thus cannot contain breaklines.
- possible values: 0...(#enumerators - 1). An enumeration cell contains an integer indicating the position of the enumerator that's pointing at.
- EMPTY value: integer that points at an enumerator which is ​​a string with 0 elements.
7 Web URL
- a Web URL is expressed: URL title
· Example: http://egdbe.net EGDBE
- a Web URL cannot contain breaklines.
- if the title is empty, there can't be the white space preceding it. Then the URL will only consist in the URL.
· Example: http://egdbe.net
- the title cannot be identical to the URL. If this is the case, the Web URL will only consists in the URL part (without the title).
- the title can contain spaces, but never at the end.
· Example: http://egdbe.net EGDBE Web Site
- URL cannot contain spaces.
- EMPTY value: string with 0 elements.
8 Rating
- possible values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 or 10.
- EMPTY value: string with 0 elements.
9 Image
- possible values: media pointer valid with image extension (tif, tiff, gif, jpeg, jpg, png, bmp, icns).
· Examples: 0:500:myPhoto:png / ~/Users/myUserName/Desktop/myPhoto.png / @http://myWebSite.com/myPhoto.png / &39:/Users/myUserName/Desktop/myTravels.aem0:500:myPhoto:png

There are 4 types of media pointers (all exemplified in the preceding paragraph).

The first type is a consolidated pointer (when the media has been saved to aem itself). The syntax is {offset (bytes)}:{lenght (bytes)}:{file name}:{file extension}.

The second type refers to a local file.

The third point to a file on the internet.

The fourth refers to a media located in another aem file (this type appears when copying media rows or columns from an aem to another aem file).
- EMPTY value: string with 0 elements.
10 Audio
- possible values: media pointer valid with audio extension (flac, mp3, wav, aiff, 3gp, m4p, ogg, wma, m4a, m4b).
- EMPTY value: string with 0 elements.
11 Video
- possible values: media pointer valid with video extension (mp4, mpg, mpeg, avi, mov, m4v).
- EMPTY value: string with 0 elements.
12 PDF
- possible values: media pointer valid with pdf extension.
- EMPTY value: string with 0 elements.
13 File
- possible values: media pointer valid with any extension (cannot be empty).
- EMPTY value: string with 0 elements.
implementation