<!ELEMENT tpkg (name, version, package_version?, maintainer+, operatingsystem*, architecture*, dependencies?, description?, bugreporting?, files?)>

<!ELEMENT name (#PCDATA)>
<!ELEMENT version (#PCDATA)>
<!ELEMENT package_version (#PCDATA)>
<!ELEMENT maintainer (#PCDATA)>
<!ELEMENT operatingsystem (#PCDATA)>
<!ELEMENT architecture (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT bugreporting (#PCDATA)>

<!ELEMENT dependencies (dependency*)>
<!ELEMENT dependency (name, minimum_version?, maximum_version?, minimum_package_version?, maximum_package_version?, native?)>
<!ELEMENT minimum_version (#PCDATA)>
<!ELEMENT maximum_version (#PCDATA)>
<!ELEMENT minimum_package_version (#PCDATA)>
<!ELEMENT maximum_package_version (#PCDATA)>
<!ELEMENT native EMPTY>

<!ELEMENT externals (external*)>
<!ELEMENT external (name, (data|datascript))>
<!ELEMENT data (#PCDATA)>
<!ELEMENT datascript (#PCDATA)>

<!ELEMENT files (file_defaults?, file*)>
<!ELEMENT file_defaults (posix?)>
<!ELEMENT posix (owner?, group?, perms?)>
<!ELEMENT owner (#PCDATA)>
<!ELEMENT group (#PCDATA)>
<!ELEMENT perms (#PCDATA)>
<!ELEMENT file (path, encrypt?, init?, crontab?, posix?)>
<!ELEMENT path (#PCDATA)>
<!ELEMENT encrypt EMPTY>
<!ATTLIST encrypt precrypt (true|false) #IMPLIED>
<!ELEMENT init (start?, levels?)>
<!ELEMENT start (#PCDATA)>
<!ELEMENT levels (#PCDATA)>
<!ELEMENT crontab (user?)>
<!ELEMENT user (#PCDATA)>