<!-- DTD for the XMLP WG test suite          -->
<!-- Hugo Haas <hugo@w3.org>, September 2001 -->
<!-- $Id: ts.dtd,v 1.12 2001/11/16 21:06:50 hugo Exp $ -->

<!-- This version is known as: "-//W3C//DTD XMLPWG Test Suite V1.4//EN" -->

<!-- General structure -->

<!ELEMENT testsuite ( header, body, changelog ) >
<!ATTLIST testsuite role CDATA #IMPLIED >

<!-- Entities -->

<!-- A few useful entities -->

<!ENTITY amp     "&#38;">
<!ENTITY lt      "&#60;"> <!--  less-than sign, U+003C ISOnum -->
<!ENTITY gt      "&#62;"> <!--  greater-than sign, U+003E ISOnum -->

<!-- A few parameter entities -->

<!ENTITY % block 'p | blockquote | ul | ol | soapmsg'>
<!ENTITY % info 'module | uri | value'>
<!ENTITY % text '#PCDATA | a'>

<!-- Header -->

<!ELEMENT header ( title, w3c-doctype, authlist, pubdate, abstract, status, langusage) >

<!ELEMENT title ( #PCDATA ) >

<!ELEMENT w3c-doctype ( #PCDATA ) >

<!ELEMENT pubdate ( year, month?, day?)>
<!ELEMENT year ( #PCDATA ) >
<!ELEMENT month ( #PCDATA ) >
<!ELEMENT day ( #PCDATA ) >

<!ELEMENT authlist ( author* ) >
<!ELEMENT author ( name, affiliation, email? ) >
<!ELEMENT name ( #PCDATA ) >
<!ELEMENT affiliation ( #PCDATA ) >
<!ELEMENT email ( #PCDATA ) >

<!ELEMENT abstract ( %block; )+ >
<!ELEMENT status ( %block; )+ >

<!ELEMENT langusage ( language ) >
<!ELEMENT language ( #PCDATA ) >
<!ATTLIST language id NMTOKEN #REQUIRED >

<!-- Body -->

<!ELEMENT body ( %block; | group )* >

<!ELEMENT group ( gtitle, ( %block; | assertion )* ) >
<!ATTLIST group id ID #IMPLIED>
<!ELEMENT gtitle (#PCDATA) >

<!ELEMENT assertion ( specref, spectext, comment?, tests ) >
<!ATTLIST assertion number NMTOKEN #REQUIRED >

<!ELEMENT specref ( %block; )* >

<!ELEMENT spectext ( %block; )* >

<!ELEMENT comment ( %block; )* >

<!ELEMENT tests ( %block; | test )* >

<!ELEMENT test ( scenario, pcriteria ) >
<!ATTLIST test number NMTOKEN #REQUIRED >
<!ELEMENT scenario ( %block; )* >
<!ELEMENT pcriteria ( %block; )* >

<!-- Changelog -->

<!ELEMENT changelog (date, desc)+ >
<!ELEMENT date ( #PCDATA ) >
<!ELEMENT desc ( %block; )+ >

<!-- Misc elements -->

<!ELEMENT a ( #PCDATA ) >
<!ATTLIST a href CDATA #REQUIRED >

<!ELEMENT blockquote ( %block; )+ >

<!ELEMENT br EMPTY >

<!ELEMENT em ( #PCDATA ) >
<!ATTLIST em class CDATA #IMPLIED >

<!ELEMENT code ( #PCDATA ) >

<!ELEMENT uri ( #PCDATA ) >
<!ELEMENT module ( #PCDATA ) >
<!ELEMENT value ( #PCDATA ) >

<!ELEMENT soapmsg ( #PCDATA ) >

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

<!ELEMENT p ( #PCDATA | a | br | em | code | img | span | %info; )* >

<!ELEMENT span ( #PCDATA | span )* >
<!ATTLIST span class CDATA #IMPLIED >

<!ELEMENT ul ( li )+ >
<!ELEMENT ol ( li )+ >
<!ELEMENT li ( %block; )* >
