<!--
  Email Markup DTD v1.0 — Open Email Standards
  Hosted at https://openstandards.email/dtd/email.dtd

  Defines the permitted markup elements, attributes, and document structure that enable compliant, secure, and programmable email.
  This DTD is aligned with the Open Email Standards and enforced by compatible email clients.
-->

<!ELEMENT html (head, body)>
<!ATTLIST html
    xmlns CDATA #FIXED "http://www.w3.org/1999/xhtml">

<!ELEMENT head (title, meta*, link*, style?)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT meta EMPTY>
<!ATTLIST meta
    charset CDATA #IMPLIED
    name CDATA #IMPLIED
    content CDATA #IMPLIED>

<!ELEMENT link EMPTY>
<!ATTLIST link
    href CDATA #REQUIRED
    rel CDATA #FIXED "stylesheet"
    type CDATA #FIXED "text/css">

<!ELEMENT style (#PCDATA)>

<!ELEMENT body (%body.content;)>

<!ENTITY % body.content "(section|article|div|p|h1|h2|h3|h4|h5|h6|a|span|ul|ol|li|table|thead|tbody|tfoot|tr|td|th|img|picture|source|figure|figcaption|form|input|textarea|select|button|label|fieldset|legend|embed-email|canvas|audio|video|code|pre|blockquote|hr|br|strong|em|b|i|u|small|mark|time|output|details|summary|dialog|svg|wbr|nav|main|aside|footer|header|address|q|abbr|cite|dfn|samp|kbd|var|ruby|rt|rp|del|ins|progress|meter|data|colgroup|col|caption|dl|dt|dd|menu)*">

<!ELEMENT section (%body.content;)*>
<!ELEMENT article (%body.content;)*>
<!ELEMENT div (%body.content;)*>
<!ELEMENT span (#PCDATA|%body.content;)*>
<!ELEMENT p (#PCDATA|%body.content;)*>
<!ELEMENT h1 (#PCDATA|%body.content;)*>
<!ELEMENT h2 (#PCDATA|%body.content;)*>
<!ELEMENT h3 (#PCDATA|%body.content;)*>
<!ELEMENT h4 (#PCDATA|%body.content;)*>
<!ELEMENT h5 (#PCDATA|%body.content;)*>
<!ELEMENT h6 (#PCDATA|%body.content;)*>
<!ELEMENT a (#PCDATA|%body.content;)*>
<!ATTLIST a
    href CDATA #IMPLIED
    target CDATA #IMPLIED>

<!ELEMENT picture (source*, img)>
<!ELEMENT source EMPTY>
<!ATTLIST source
    media CDATA #IMPLIED
    srcset CDATA #REQUIRED
    type CDATA #IMPLIED>

<!ELEMENT img EMPTY>
<!ATTLIST img
    src CDATA #REQUIRED
    alt CDATA #IMPLIED
    width CDATA #IMPLIED
    height CDATA #IMPLIED>

<!ELEMENT form (%body.content;)*>
<!ATTLIST form
    action CDATA #REQUIRED
    method (post) #REQUIRED>

<!ELEMENT input EMPTY>
<!ATTLIST input
    type CDATA #REQUIRED
    name CDATA #IMPLIED
    value CDATA #IMPLIED>

<!ELEMENT textarea (#PCDATA)>
<!ELEMENT select (option|optgroup)+>
<!ELEMENT option (#PCDATA)>
<!ATTLIST option
    value CDATA #IMPLIED
    selected (selected) #IMPLIED>

<!ELEMENT optgroup (option+)>
<!ATTLIST optgroup
    label CDATA #REQUIRED>

<!ELEMENT label (#PCDATA|%body.content;)*>
<!ELEMENT button (#PCDATA|%body.content;)*>
<!ELEMENT fieldset (%body.content;)*>
<!ELEMENT legend (#PCDATA)>
<!ELEMENT output (#PCDATA)>

<!ELEMENT embed-email EMPTY>
<!ATTLIST embed-email
    rel CDATA #IMPLIED
    url CDATA #REQUIRED
    width CDATA #IMPLIED
    height CDATA #IMPLIED
    allow CDATA #IMPLIED
    referrerpolicy CDATA #IMPLIED
    sandbox CDATA #IMPLIED>

<!ELEMENT script (#PCDATA)>
<!ATTLIST script
    src CDATA #REQUIRED
    type CDATA #FIXED "module">

<!ELEMENT noscript (%body.content;)*>

<!ELEMENT audio (source|track)*>
<!ELEMENT video (source|track)*>
<!ELEMENT track EMPTY>
<!ELEMENT canvas (#PCDATA|%body.content;)*>

<!ELEMENT table (caption?, colgroup*, thead?, tbody+, tfoot?)>
<!ELEMENT caption (#PCDATA)>
<!ELEMENT colgroup (col)*>
<!ELEMENT col EMPTY>
<!ATTLIST col span CDATA #IMPLIED>
<!ELEMENT thead (tr+)>
<!ELEMENT tbody (tr+)>
<!ELEMENT tfoot (tr+)>
<!ELEMENT tr (td|th)+>
<!ELEMENT td (#PCDATA|%body.content;)*>
<!ELEMENT th (#PCDATA|%body.content;)*>

<!ELEMENT svg (#PCDATA)>
<!ELEMENT wbr EMPTY>
<!ELEMENT hr EMPTY>
<!ELEMENT br EMPTY>