1<!ENTITY % plistObject "(array | data | date | dict | real | integer | string | true | false )" >
2<!ELEMENT plist %plistObject;>
3<!ATTLIST plist version CDATA "1.0" >
4
5<!-- Collections -->
6<!ELEMENT array (%plistObject;)*>
7<!ELEMENT dict (key, %plistObject;)*>
8<!ELEMENT key (#PCDATA)>
9
10<!--- Primitive types -->
11<!ELEMENT string (#PCDATA)>
12<!ELEMENT data (#PCDATA)> <!-- Contents interpreted as Base-64 encoded -->
13<!ELEMENT date (#PCDATA)> <!-- Contents should conform to a subset of ISO 8601 (in particular, YYYY '-' MM '-' DD 'T' HH ':' MM ':' SS 'Z'.  Smaller units may be omitted with a loss of precision) -->
14
15<!-- Numerical primitives -->
16<!ELEMENT true EMPTY>  <!-- Boolean constant true -->
17<!ELEMENT false EMPTY> <!-- Boolean constant false -->
18<!ELEMENT real (#PCDATA)> <!-- Contents should represent a floating point number matching ("+" | "-")? d+ ("."d*)? ("E" ("+" | "-") d+)? where d is a digit 0-9.  -->
19<!ELEMENT integer (#PCDATA)> <!-- Contents should represent a (possibly signed) integer number in base 10 -->
20
21