<!-- Mews Profile 0.1 DTD
     Published at mews.page/dtd/mews-0.1.dtd. Browsers and clients must not
     fetch this file.

     XHTML Mobile Profile 1.2 restricted as in the Mews Profile
     Specification 0.1 section 4, extended with lang and dir (section 3).
     Maintained by hand and checked against the XHTML Mobile 1.2 driver,
     xhtml-mobile12.dtd (OMA-SUP-DTD_xhtml_mobile12-V1_2-20080331-A), by
     check_dtd.py. It cannot be generated by stripping the driver: the
     driver declares no elements itself, attribute lists only ever add,
     and the rules below do not exist in XHTML-MP to be kept.

     This file is standalone: it declares every element and attribute
     itself, so validation never depends on the Open Mobile Alliance's or
     W3C's servers. Pages keep the XHTML-MP doctype (section 3.1); only
     validators use this file (section 9.1).

     Encoded here: the permitted elements and attributes (4.1), the head
     rules (3.3), the body variant classes (5.3) and the ban on nested
     tables (4.2). 51 elements are kept from XHTML Mobile 1.2. Dropped:
     acronym, base, big, button, div, legend, noscript, object, param,
     script, small, span, style, sub, sup, tt. Event attributes and the
     style attribute are omitted entirely.
-->

<!-- Datatypes (as in XHTML Modularization) -->
<!ENTITY % Text.datatype "CDATA" >
<!ENTITY % URI.datatype "CDATA" >
<!ENTITY % Number.datatype "CDATA" >
<!ENTITY % LanguageCode.datatype "NMTOKEN" >
<!ENTITY % Character.datatype "CDATA" >

<!-- Common attributes. id, title, xml:lang, lang and dir are permitted
     on every element in the body (SPEC.md 4.1); lang and dir are the Mews
     extensions over XHTML-MP (SPEC.md 3). -->
<!ENTITY % id.attrib    "id    ID   #IMPLIED" >
<!ENTITY % title.attrib "title CDATA #IMPLIED" >
<!ENTITY % i18n.attrib
     "xml:lang %LanguageCode.datatype; #IMPLIED
      lang     %LanguageCode.datatype; #IMPLIED
      dir      (ltr | rtl)             #IMPLIED" >
<!ENTITY % Common.attrib "%id.attrib; %title.attrib; %i18n.attrib;" >

<!-- Inline classes -->
<!ENTITY % InlStruct.class "br" >
<!ENTITY % InlPhras.class "| em | strong | code | kbd | samp | var | q | cite | abbr | dfn" >
<!ENTITY % InlPres.class "| b | i" >
<!ENTITY % Anchor.class "| a" >
<!ENTITY % InlSpecial.class "| img" >
<!ENTITY % InlFormNoLabel.class "| input | select | textarea" >
<!ENTITY % InlForm.class "%InlFormNoLabel.class; | label" >
<!ENTITY % Inline.extra "" >
<!ENTITY % Inline.class "%InlStruct.class;
      %InlPhras.class;
      %InlPres.class;
      %Anchor.class;
      %InlSpecial.class;
      %InlForm.class;
      %Inline.extra;" >
<!ENTITY % InlNoAnchor.class "%InlStruct.class;
      %InlPhras.class;
      %InlPres.class;
      %InlSpecial.class;
      %InlForm.class;
      %Inline.extra;" >
<!ENTITY % InlNoLabel.class "%InlStruct.class;
      %InlPhras.class;
      %InlPres.class;
      %Anchor.class;
      %InlSpecial.class;
      %InlFormNoLabel.class;
      %Inline.extra;" >

<!-- Block classes -->
<!ENTITY % Heading.class "h1 | h2 | h3 | h4 | h5 | h6" >
<!ENTITY % List.class "ul | ol | dl" >
<!ENTITY % BlkStruct.class "p" >
<!ENTITY % BlkPhras.class "| pre | blockquote | address" >
<!ENTITY % BlkPres.class "| hr" >
<!ENTITY % Table.class "| table" >
<!ENTITY % Form.class "| form" >
<!ENTITY % Fieldset.class "| fieldset" >
<!ENTITY % Block.extra "" >
<!ENTITY % BlkNoForm.class "%Heading.class;
      | %List.class;
      | %BlkStruct.class;
      %BlkPhras.class;
      %BlkPres.class;
      %Fieldset.class;
      %Block.extra;" >
<!ENTITY % BlkNoTable.class "%BlkNoForm.class;
      %Form.class;
      %Block.extra;" >
<!ENTITY % Blk.class "%BlkNoTable.class;
      %Table.class;
      %Block.extra;" >
<!ENTITY % FlowNoTable.class "%Inline.class;
      | %BlkNoTable.class;" >

<!-- pre content model, taken verbatim from the driver. It excludes
     %InlPres.class; and %InlSpecial.class;, so b, i and img are not
     permitted in pre, as in XHTML Mobile 1.2. -->
<!ENTITY % pre.content
     "( #PCDATA
      | %InlStruct.class;
      %InlPhras.class;
      %Anchor.class;
      %Inline.extra; )*"
>

<!-- Document structure (SPEC.md 4.1) -->
<!--
     Only body uses %Blk.class;, so a table can appear directly in the
     body and nowhere else, and tables cannot nest (SPEC.md 4.2). body may
     carry one class from the variant list (SPEC.md 5.3).
-->
<!ELEMENT html ( head, body ) >
<!ATTLIST html
      xmlns        CDATA #FIXED "http://www.w3.org/1999/xhtml"
      xml:lang     %LanguageCode.datatype; #IMPLIED
      lang         %LanguageCode.datatype; #IMPLIED
      dir          (ltr | rtl) #IMPLIED
>
<!ELEMENT head ( title, meta, ( meta | link )* ) >
<!ELEMENT title ( #PCDATA )* >
<!ELEMENT body ( %Blk.class; )+ >
<!ATTLIST body
      %Common.attrib;
      class        (mews-warm | mews-cool | mews-green | mews-mono) #IMPLIED
>

<!-- Head elements (SPEC.md 3.3) -->
<!--
     The head may contain only title, meta and link. The title comes
     first and at least one meta is required; the conformance marker is a
     meta (SPEC.md 3.2), but a DTD cannot check its name and content
     together, so validators confirm the marker as a rule check (SPEC.md
     9.1). link rel is limited to the uses SPEC.md 3.3 names: the
     stylesheet, the icon and feed links.
-->
<!ELEMENT meta EMPTY >
<!ATTLIST meta
      name         NMTOKEN #IMPLIED
      content      CDATA #REQUIRED
>
<!ELEMENT link EMPTY >
<!ATTLIST link
      rel          (alternate | icon | stylesheet) #IMPLIED
      href         %URI.datatype; #IMPLIED
      type         CDATA #IMPLIED
      title        CDATA #IMPLIED
>

<!-- Headings (SPEC.md 4.1) -->
<!ELEMENT h1 ( #PCDATA | %Inline.class; )* >
<!ATTLIST h1
      %Common.attrib;
>
<!ELEMENT h2 ( #PCDATA | %Inline.class; )* >
<!ATTLIST h2
      %Common.attrib;
>
<!ELEMENT h3 ( #PCDATA | %Inline.class; )* >
<!ATTLIST h3
      %Common.attrib;
>
<!ELEMENT h4 ( #PCDATA | %Inline.class; )* >
<!ATTLIST h4
      %Common.attrib;
>
<!ELEMENT h5 ( #PCDATA | %Inline.class; )* >
<!ATTLIST h5
      %Common.attrib;
>
<!ELEMENT h6 ( #PCDATA | %Inline.class; )* >
<!ATTLIST h6
      %Common.attrib;
>

<!-- Text blocks (SPEC.md 4.1) -->
<!ELEMENT p ( #PCDATA | %Inline.class; )* >
<!ATTLIST p
      %Common.attrib;
>
<!ELEMENT blockquote ( %BlkNoTable.class; )* >
<!ATTLIST blockquote
      %Common.attrib;
      cite         %URI.datatype; #IMPLIED
>
<!ELEMENT pre %pre.content; >
<!ATTLIST pre
      %Common.attrib;
>
<!ELEMENT address ( #PCDATA | %Inline.class; )* >
<!ATTLIST address
      %Common.attrib;
>
<!ELEMENT hr EMPTY >
<!ATTLIST hr
      %Common.attrib;
>

<!-- Inline text (SPEC.md 4.1) -->
<!ELEMENT em ( #PCDATA | %Inline.class; )* >
<!ATTLIST em
      %Common.attrib;
>
<!ELEMENT strong ( #PCDATA | %Inline.class; )* >
<!ATTLIST strong
      %Common.attrib;
>
<!ELEMENT code ( #PCDATA | %Inline.class; )* >
<!ATTLIST code
      %Common.attrib;
>
<!ELEMENT kbd ( #PCDATA | %Inline.class; )* >
<!ATTLIST kbd
      %Common.attrib;
>
<!ELEMENT samp ( #PCDATA | %Inline.class; )* >
<!ATTLIST samp
      %Common.attrib;
>
<!ELEMENT var ( #PCDATA | %Inline.class; )* >
<!ATTLIST var
      %Common.attrib;
>
<!ELEMENT cite ( #PCDATA | %Inline.class; )* >
<!ATTLIST cite
      %Common.attrib;
>
<!ELEMENT abbr ( #PCDATA | %Inline.class; )* >
<!ATTLIST abbr
      %Common.attrib;
>
<!ELEMENT dfn ( #PCDATA | %Inline.class; )* >
<!ATTLIST dfn
      %Common.attrib;
>
<!ELEMENT b ( #PCDATA | %Inline.class; )* >
<!ATTLIST b
      %Common.attrib;
>
<!ELEMENT i ( #PCDATA | %Inline.class; )* >
<!ATTLIST i
      %Common.attrib;
>
<!ELEMENT q ( #PCDATA | %Inline.class; )* >
<!ATTLIST q
      %Common.attrib;
      cite         %URI.datatype; #IMPLIED
>
<!ELEMENT br EMPTY >
<!ATTLIST br
      %Common.attrib;
>
<!ELEMENT a ( #PCDATA | %InlNoAnchor.class; )* >
<!ATTLIST a
      %Common.attrib;
      href         %URI.datatype; #IMPLIED
      hreflang     %LanguageCode.datatype; #IMPLIED
      rel          CDATA #IMPLIED
      type         CDATA #IMPLIED
      accesskey    %Character.datatype; #IMPLIED
>
<!ELEMENT img EMPTY >
<!ATTLIST img
      %Common.attrib;
      src          %URI.datatype; #REQUIRED
      alt          %Text.datatype; #REQUIRED
>

<!-- Lists (SPEC.md 4.1) -->
<!ELEMENT ul ( li )+ >
<!ATTLIST ul
      %Common.attrib;
>
<!ELEMENT ol ( li )+ >
<!ATTLIST ol
      %Common.attrib;
      start        %Number.datatype; #IMPLIED
>
<!ELEMENT dl ( dt | dd )+ >
<!ATTLIST dl
      %Common.attrib;
>
<!ELEMENT li ( #PCDATA | %FlowNoTable.class; )* >
<!ATTLIST li
      %Common.attrib;
      value        %Number.datatype; #IMPLIED
>
<!ELEMENT dt ( #PCDATA | %Inline.class; )* >
<!ATTLIST dt
      %Common.attrib;
>
<!ELEMENT dd ( #PCDATA | %FlowNoTable.class; )* >
<!ATTLIST dd
      %Common.attrib;
>

<!-- Tables (SPEC.md 4.2) -->
<!--
     As in the XHTML Mobile basic tables module, cells take
     %FlowNoTable.class; and never a table, so tables cannot nest
     (SPEC.md 4.2).
-->
<!ELEMENT table ( caption?, tr+ ) >
<!ATTLIST table
      %Common.attrib;
      summary      %Text.datatype; #IMPLIED
>
<!ELEMENT caption ( #PCDATA | %Inline.class; )* >
<!ATTLIST caption
      %Common.attrib;
>
<!ELEMENT tr ( th | td )+ >
<!ATTLIST tr
      %Common.attrib;
>
<!ELEMENT th ( #PCDATA | %FlowNoTable.class; )* >
<!ATTLIST th
      %Common.attrib;
      rowspan      %Number.datatype; "1"
      colspan      %Number.datatype; "1"
      scope        (row | col) #IMPLIED
>
<!ELEMENT td ( #PCDATA | %FlowNoTable.class; )* >
<!ATTLIST td
      %Common.attrib;
      rowspan      %Number.datatype; "1"
      colspan      %Number.datatype; "1"
      scope        (row | col) #IMPLIED
>

<!-- Forms (SPEC.md 4.1, 4.2) -->
<!--
     As in the XHTML MP forms module, form takes %BlkNoForm.class;, so
     forms cannot nest. fieldset also takes %BlkNoForm.class;, so a
     fieldset cannot reintroduce a form.
-->
<!ELEMENT form ( %BlkNoForm.class; )+ >
<!ATTLIST form
      %Common.attrib;
      action       %URI.datatype; #REQUIRED
      method       (get | post) "get"
      enctype      CDATA "application/x-www-form-urlencoded"
>
<!ELEMENT fieldset ( #PCDATA | %Inline.class; | %BlkNoForm.class; )* >
<!ATTLIST fieldset
      %Common.attrib;
>
<!ELEMENT label ( #PCDATA | %InlNoLabel.class; )* >
<!ATTLIST label
      %Common.attrib;
      for          IDREF #IMPLIED
      accesskey    %Character.datatype; #IMPLIED
>
<!ELEMENT input EMPTY >
<!ATTLIST input
      %Common.attrib;
      type         (text | password | checkbox | radio | submit | reset | hidden) "text"
      name         CDATA #IMPLIED
      value        CDATA #IMPLIED
      checked      (checked) #IMPLIED
      size         %Number.datatype; #IMPLIED
      maxlength    %Number.datatype; #IMPLIED
      accesskey    %Character.datatype; #IMPLIED
      inputmode    CDATA #IMPLIED
>
<!ELEMENT select ( optgroup | option )+ >
<!ATTLIST select
      %Common.attrib;
      name         CDATA #IMPLIED
      multiple     (multiple) #IMPLIED
      size         %Number.datatype; #IMPLIED
>
<!ELEMENT optgroup ( option )+ >
<!ATTLIST optgroup
      %Common.attrib;
      label        %Text.datatype; #REQUIRED
>
<!ELEMENT option ( #PCDATA )* >
<!ATTLIST option
      %Common.attrib;
      value        CDATA #IMPLIED
      selected     (selected) #IMPLIED
>
<!ELEMENT textarea ( #PCDATA )* >
<!ATTLIST textarea
      %Common.attrib;
      name         CDATA #IMPLIED
      rows         %Number.datatype; #REQUIRED
      cols         %Number.datatype; #REQUIRED
      accesskey    %Character.datatype; #IMPLIED
      inputmode    CDATA #IMPLIED
>
