<?xml version="1.0" encoding="UTF-8"?>

<!-- DOM Level 2 -->
<!ENTITY % dom2 "dom2core | dom2events | dom2html | dom2style | dom2css | dom2travrange | dom2views">

<!-- DOM Level 3 (excluding stuff that hasn't changed from DOM Level 2) -->
<!ENTITY % dom3 "dom3core | dom3events | dom3loadsave | dom3xpath">

<!-- JavaScript Client 1.3 -->
<!ENTITY % js "js13">

<!-- What WG specifications -->
<!ENTITY % whatwg "webforms2 | webapps1">

<!-- Proprietary -->
<!ENTITY % proprietary "opera | operapf1 | msie | firefox">

<!-- Name of the item -->
<!ENTITY % name "name CDATA #REQUIRED">

<!-- Origin.  Inherited from parent if not specified. -->
<!ENTITY % origin "origin (various | %dom2; | %dom3; | %js; | %whatwg; | %proprietary;) #IMPLIED">
<!ENTITY % supported "supported (yes | no | optional) 'yes'">
<!ENTITY % common-attrs "%name; %origin; %supported;">

<!ENTITY % about "note | macro | feature | specification">
<!ENTITY % item "object | collection | method | constructor | property">

<!ENTITY % exception-types "DOMException | RangeException | XPathException | internal">

<!ELEMENT supported (class | %item;)*>
<!ATTLIST supported
  version CDATA #REQUIRED
  revision CDATA #REQUIRED>

<!ELEMENT interface ((%about;)*, (method | property)*)>
<!ATTLIST interface
  %common-attrs;>

<!ELEMENT object ((%about;)*, (interface | %item;)*)>
<!ATTLIST object
  %common-attrs;
  className CDATA #REQUIRED>

<!ELEMENT class ((%about;)*, (interface | %item;)*)>
<!ATTLIST class
  %common-attrs;
  className CDATA #REQUIRED
  baseClass CDATA #IMPLIED>

<!ELEMENT method ((%about;)*, exception*)>
<!ATTLIST method
  %common-attrs;
  primitiveType (string | long | unsignedLong | boolean) #IMPLIED
  classType CDATA #IMPLIED>

<!ELEMENT constructor ((%about;)*, exception*)>
<!ATTLIST constructor
  %common-attrs;
  className CDATA #IMPLIED
  constructedType CDATA #IMPLIED>

<!ELEMENT exception ((%about;)*)>
<!ATTLIST exception
  %common-attrs;
  type (%exception-types;) #REQUIRED
  on (read | write | call | construct) "call">

<!ELEMENT property ((%about;)*, exception*)>
<!ATTLIST property
  %common-attrs;
  primitiveType (string | long | unsignedLong | boolean) #IMPLIED
  classType CDATA #IMPLIED
  readOnly (silent | signalling | writable) "writable">

<!ELEMENT collection ((%about;)*)>
<!ATTLIST collection
  %origin;
  %supported;
  elementType CDATA #REQUIRED>

<!ELEMENT note (#PCDATA)>
<!ATTLIST note
  type (description | bug | limitation | extension) "description"
  %origin;
  %supported;>

<!ELEMENT macro (note*)>
<!ATTLIST macro
  name CDATA #REQUIRED
  defined (yes | no) "yes">

<!ELEMENT feature (note*)>
<!ATTLIST feature
  name CDATA #REQUIRED
  enabled (yes | no) "yes">

<!ELEMENT specification (note*)>
<!ATTLIST specification
  %origin;
  href CDATA #REQUIRED>
