diff --git a/.ghci b/.ghci
new file mode 100644
--- /dev/null
+++ b/.ghci
@@ -0,0 +1,3 @@
+:set -XOverloadedStrings
+:set -Wall
+:set -isrc
diff --git a/README b/README
new file mode 100644
--- /dev/null
+++ b/README
@@ -0,0 +1,54 @@
+xmlhtml - XML and HTML 5 parsing and rendering
+
+This library implements both parsers and renderers for XML and HTML 5 document
+fragments.  The two share data structures to represent the document tree, so
+that you can write code to easily work with either XML or HTML 5.  Convenience
+functions are also available to work with the internal data structure in
+several natural ways.
+
+Caveats:
+
+- Both parsers are written to parse document fragments, not complete
+  documents.  This means that they do not enforce rules about overall
+  document structure.  There does not need to be only a single root node,
+  and the HTML 5 implementation never inserts any missing start tags.
+
+- The XML parser is incapable of handling processing instructions, or defined
+  entities.  If will silently drop processing instructions, and will fail if
+  encounters an entity reference for anything by the predefined entities
+  (apos, quot, amp, lt, and gt).
+
+- The HTML parser is really an XML parser with HTML 5 quirks mode.  It should
+  be just fine for parsing documents that conform to the HTML 5 specification.
+  However, it is *not* a compliant HTML 5 parser, as compliant parsers are
+  required to be compatible with non-compliant documents in many ways that we
+  aren't interested in.  So this is a great basis for a template system, for
+  example, but a very poor basis for a web browser or web spider.
+
+To get started, just use the parseHTML or parseXML functions from Text.XmlHtml
+to parse a ByteString into a document tree.  On the other side, use render to
+write the document tree back to a ByteString.
+
+Working with document trees is easily done in two ways.
+
+1. Text.XmlHtml exports the document tree types (notably, Document and Node)
+   and functions like getAttribute, setAttribute, tagName, childNodes, etc. for
+   working with them.
+
+2. Text.XmlHtml.Cursor exports a zipper for node forests, which you can use to
+   navigate and modify the document tree positionally.
+
+That's it, basically.  This is hopefully a pretty simple package to use.
+
+TO DO Items:
+
+1. Do something better with character encodings.  For now, they are basically
+   ignored, and we just use the byte order mark to distinguish between the
+   three required encodings.  We should implement the encoding sniffing rules
+   for both XML (the <?xml ... ?> declaration) and HTML 5.
+
+2. Benchmark and improve performance of the parsers and renderers.
+
+3. Ensure that rendering always gives an error rather than writing an invalid
+   document. (Is this a good idea?  It does limit rendering speed.)
+
diff --git a/extra/haddock.css b/extra/haddock.css
new file mode 100644
--- /dev/null
+++ b/extra/haddock.css
@@ -0,0 +1,435 @@
+/* -------- Global things --------- */
+HTML {
+  background-color: #f0f3ff;
+  width: 100%;
+}
+
+BODY { 
+  -moz-border-radius:5px;
+  -webkit-border-radius:5px;
+  width: 50em;
+  margin: 2em auto;
+  padding: 0;
+  background-color: #ffffff;
+  color: #000000;
+  font-size: 110%;
+  font-family: Georgia, serif;
+  }
+
+A:link    { color: #5200A3; text-decoration: none }
+A:visited { color: #5200A3; text-decoration: none }
+A:hover   { color: #5200A3; text-decoration: none; border-bottom:#5200A3 dashed 1px; }
+
+TABLE.vanilla {
+  width: 100%;
+  border-width: 0px;
+  /* I can't seem to specify cellspacing or cellpadding properly using CSS... */
+}
+
+DL {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  letter-spacing: -0.01em;
+  margin: 0;
+}
+
+.vanilla .vanilla dl { font-size: 80%; }
+.vanilla .vanilla dl dl { padding-left: 0; font-size: 95%; }
+
+TD.section1, TD.section2, TD.section3, TD.section4, TD.doc, DL {
+  padding: 0 30px 0 34px;
+}
+
+TABLE.vanilla2 {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  border-width: 0px;
+}
+
+/* <TT> font is a little too small in MSIE */
+TT, PRE, CODE  {
+  font-family: Monaco,
+               "DejaVu Sans Mono",
+               "Bitstream Vera Sans Mono",
+               "Lucida Console",
+               monospace;
+  font-size: 90%;
+}
+
+LI P { margin: 0pt } 
+
+P { margin-top: 0; margin-bottom: 0.75em; }
+
+TD {
+  border-width: 0px;
+}
+
+TABLE.narrow {
+  border-width: 0px;
+}
+
+TD.s8  {  height: 0; margin:0; padding: 0  }
+TD.s15 {  height: 20px; }
+
+SPAN.keyword { text-decoration: underline; }
+
+/* Resize the buttom image to match the text size */
+IMG.coll { width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em }
+
+/* --------- Contents page ---------- */
+
+DIV.node {
+  padding-left: 3em;
+}
+
+DIV.cnode {
+  padding-left: 1.75em;
+}
+
+SPAN.pkg {
+  position: absolute;
+  left: 50em;
+}
+
+/* --------- Documentation elements ---------- */
+
+TD FONT { font-weight: bold; letter-spacing: -0.02em; }
+
+TD.children {
+  padding-left: 25px;
+  }
+
+TD.synopsis {
+  padding: 2px;
+  background-color: #f0f0f0;
+  font-size: 80%;
+  font-family: Monaco,
+               "DejaVu Sans Mono",
+               "Bitstream Vera Sans Mono",
+               "Lucida Console",
+               monospace;
+
+ }
+
+TD.decl { 
+  padding: 4px 8px;
+  background-color: #FAFAFA; 
+  border-bottom: #F2F2F2 solid 1px;
+  border-top: #FCFCFC solid 1px;
+  font-size: 80%;
+  font-family: Monaco,
+               "DejaVu Sans Mono",
+               "Bitstream Vera Sans Mono",
+               "Lucida Console",
+               monospace;
+
+  vertical-align: top;
+  }
+
+TD.decl TD.decl {
+  font-size: 100%;
+  padding: 4px 0;
+  border: 0;
+}
+
+TD.topdecl {
+  padding: 20px 30px 0.5ex 30px;
+  font-size: 80%;
+  font-family: Monaco,
+               "DejaVu Sans Mono",
+               "Bitstream Vera Sans Mono",
+               "Lucida Console",
+               monospace;
+;
+  vertical-align: top;
+}
+
+.vanilla .vanilla .vanilla .topdecl {
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.vanilla .vanilla .vanilla {
+  padding-left: 30px;
+}
+
+.decl .vanilla {
+  padding-left: 0px !important;
+}
+
+.body .vanilla .body {
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.body .vanilla .body .decl {
+  padding-left: 12px;
+}
+
+.body .vanilla .body div .vanilla .decl {
+  padding-left: 12px;
+}
+
+TABLE.declbar {
+  background-color: #f0f0f0;
+  border-spacing: 0px;
+  border-bottom:1px solid #d7d7df;
+  border-right:1px solid #d7d7df;
+  border-top:1px solid #f4f4f9;
+  border-left:1px solid #f4f4f9;
+  padding: 4px;
+ }
+
+TD.declname {
+  width: 100%;
+  padding-right: 4px;
+ }
+
+TD.declbut {
+  padding-left: 8px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #000099;
+  border-left-style: solid;
+  white-space: nowrap;
+  font-size: x-small;
+ }
+
+/* 
+  arg is just like decl, except that wrapping is not allowed.  It is
+  used for function and constructor arguments which have a text box
+  to the right, where if wrapping is allowed the text box squashes up
+  the declaration by wrapping it.
+*/
+TD.arg { 
+  padding: 2px 12px;
+  background-color: #f0f0f0; 
+  font-size: 80%;
+  font-family: Monaco,
+             "DejaVu Sans Mono",
+             "Bitstream Vera Sans Mono",
+             "Lucida Console",
+             monospace;
+
+  vertical-align: top;
+  white-space: nowrap;
+  }
+
+TD.recfield { padding-left: 20px }
+
+TD.doc  { 
+  padding-left: 38px;
+  font-size: 95%;
+  line-height: 1.66;
+  }
+
+TD.ndoc  { 
+  font-size: 95%;
+  line-height: 1.66;
+  padding: 2px 4px 2px 8px;
+  }
+
+TD.rdoc  { 
+  padding: 2px;
+  padding-left: 30px;
+  width: 100%;
+  font-size: 80%;
+  font-style: italic;
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  }
+
+TD.body  { 
+  padding: 0 30px;
+  }
+
+TD.pkg {
+  width: 100%;
+  padding-left: 30px
+}
+
+TABLE.indexsearch TR.indexrow {
+  display: none;
+}
+TABLE.indexsearch TR.indexshow {
+  display: table-row;
+}
+
+TD.indexentry {
+  vertical-align: top;
+  padding: 0 30px
+  }
+
+TD.indexannot {
+  vertical-align: top;
+  padding-left: 20px;
+  white-space: nowrap
+  }
+
+TD.indexlinks {
+  width: 100%
+  }
+
+/* ------- Section Headings ------- */
+
+TD.section1, TD.section2, TD.section3, TD.section4, TD.section5 {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+}
+
+TD.section1 {
+  padding-top: 14px;
+  font-weight: bold;
+  letter-spacing: -0.02em;
+  font-size: 140%
+  }
+
+TD.section2 {
+  padding-top: 4px;
+  font-weight: bold;
+  letter-spacing: -0.02em;
+  font-size: 120%
+  }
+
+TD.section3 {
+  padding-top: 5px;
+  font-weight: bold;
+  letter-spacing: -0.02em;
+  font-size: 105%
+  }
+
+TD.section4 {
+  font-weight: bold;
+  padding-top: 12px;
+  padding-bottom: 4px;
+  letter-spacing: -0.02em;
+  font-size: 90%
+  }
+
+/* -------------- The title bar at the top of the page */
+
+TD.infohead {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  color: #ffffff;
+  font-weight: bold;
+  padding: 0 30px;
+  text-align: left;
+}
+
+TD.infoval {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  color: #ffffff;
+  padding: 0 30px;
+  text-align: left;
+}
+
+TD.topbar {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  background-color: #3465a4;
+  padding: 5px;
+  -moz-border-radius-topleft:5px;
+  -moz-border-radius-topright:5px;
+  -webkit-border-radius-topleft:5px;
+  -webkit-border-radius-topright:5px;
+}
+
+TD.title {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  color: #ffffff;
+  padding-left: 30px;
+  letter-spacing: -0.02em;
+  font-weight: bold;
+  width: 100%
+  }
+
+TD.topbut {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  padding-left: 5px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #ffffff;
+  border-left-style: solid;
+  letter-spacing: -0.02em;
+  font-weight: bold;
+  white-space: nowrap;
+  }
+
+TD.topbut A:link {
+  color: #ffffff
+  }
+
+TD.topbut A:visited {
+  color: #ffff00
+  }
+
+TD.topbut A:hover {
+  background-color: #C9D3DE;
+  }
+
+TD.topbut:hover {
+  background-color: #C9D3DE;
+  }
+
+TD.modulebar { 
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  color: #141B24;
+  background-color: #C9D3DE;
+  padding: 5px;
+  border-top-width: 1px;
+  border-top-color: #ffffff;
+  border-top-style: solid;
+  -moz-border-radius-bottomleft:5px;
+  -moz-border-radius-bottomright:5px;
+  -webkit-border-radius-bottomleft:5px;
+  -webkit-border-radius-bottomright:5px;
+
+  }
+
+/* --------- The page footer --------- */
+
+TD.botbar {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  -moz-border-radius:5px;
+  -webkit-border-radius:5px;
+  background-color: #3465a4;
+  color: #ffffff;
+  padding: 5px
+  }
+TD.botbar A:link {
+  color: #ffffff;
+  text-decoration: underline
+  }
+TD.botbar A:visited {
+  color: #ffff00
+  }
+TD.botbar A:hover {
+  background-color: #6060ff
+  }
+
+/* --------- Mini Synopsis for Frame View --------- */
+
+.outer {
+  margin: 0 0;
+  padding: 0 0;
+}
+
+.mini-synopsis {
+  padding: 0.25em 0.25em;
+}
+
+.mini-synopsis H1 { font-size: 120%; }
+.mini-synopsis H2 { font-size: 107%; }
+.mini-synopsis H3 { font-size: 100%; }
+.mini-synopsis H1, .mini-synopsis H2, .mini-synopsis H3 {
+  font-family: "Gill Sans", "Helvetica Neue","Arial",sans-serif;
+  margin-top: 0.5em;
+  margin-bottom: 0.25em;
+  padding: 0 0;
+  font-weight: bold; letter-spacing: -0.02em;
+}
+
+.mini-synopsis H1 { border-bottom: 1px solid #ccc; }
+
+.mini-topbar {
+  font-size: 120%;
+  background: #0077dd;
+  padding: 0.25em;
+}
+
+
diff --git a/extra/hscolour.css b/extra/hscolour.css
new file mode 100644
--- /dev/null
+++ b/extra/hscolour.css
@@ -0,0 +1,15 @@
+body { font-size: 90%; }
+
+pre, code, body {
+  font-family: Monaco,
+               "DejaVu Sans Mono",
+               "Bitstream Vera Sans Mono",
+               "Lucida Console",
+               monospace;
+}
+
+.hs-keyglyph, .hs-layout {color: #5200A3;}
+.hs-keyword {color: #3465a4; font-weight: bold;}
+.hs-comment, .hs-comment a {color: #579; }
+.hs-str, .hs-chr {color: #141B24;}
+.hs-keyword, .hs-conid, .hs-varid, .hs-conop, .hs-varop, .hs-num, .hs-cpp, .hs-sel, .hs-definition {}
diff --git a/extra/logo.gif b/extra/logo.gif
new file mode 100644
Binary files /dev/null and b/extra/logo.gif differ
diff --git a/haddock.sh b/haddock.sh
new file mode 100644
--- /dev/null
+++ b/haddock.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -x
+
+rm -Rf dist/doc
+
+HADDOCK_OPTS='--html-location=http://hackage.haskell.org/packages/archive/$pkg/latest/doc/html --css=extra/haddock.css'
+
+cabal haddock $HADDOCK_OPTS --hyperlink-source $@
+
+cp -r extra/fonts dist/doc/html/xmlhtml/
+cp extra/logo.gif dist/doc/html/xmlhtml/haskell_icon.gif
+cp extra/hscolour.css dist/doc/html/xmlhtml/src/
diff --git a/src/Text/Blaze/Renderer/XmlHtml.hs b/src/Text/Blaze/Renderer/XmlHtml.hs
--- a/src/Text/Blaze/Renderer/XmlHtml.hs
+++ b/src/Text/Blaze/Renderer/XmlHtml.hs
@@ -1,10 +1,11 @@
 -- | Renderer that supports rendering to xmlhtml forests.  This is a port of
 -- the Hexpat renderer.
 --
--- Warning: because this renderer doesn't directly create the output, but rather
--- an XML tree representation, it is impossible to render pre-escaped text. This
--- means that @preEscapedString@ will produce the same output as @string@. This
--- also applies to the functions @preEscapedText@, @preEscapedTextValue@...
+-- Warning: because this renderer doesn't directly create the output, but
+-- rather an XML tree representation, it is impossible to render pre-escaped
+-- text. This means that @preEscapedString@ will produce the same output as
+-- @string@. This also applies to the functions @preEscapedText@,
+-- @preEscapedTextValue@...
 --
 module Text.Blaze.Renderer.XmlHtml (renderHtml) where
 
@@ -59,7 +60,8 @@
     go attrs (AddAttribute key _ value content) =
         go ((getText key, fromChoiceStringText value) : attrs) content
     go attrs (AddCustomAttribute key _ value content) =
-        go ((fromChoiceStringText key, fromChoiceStringText value) : attrs) content
+        go ((fromChoiceStringText key, fromChoiceStringText value) : attrs)
+           content
     go _ (Content content) = fromChoiceString content
     go attrs (Append h1 h2) = go attrs h1 . go attrs h2
     go _ Empty = id
diff --git a/src/Text/XmlHtml.hs b/src/Text/XmlHtml.hs
--- a/src/Text/XmlHtml.hs
+++ b/src/Text/XmlHtml.hs
@@ -12,7 +12,8 @@
 --
 --   * Since DTDs are not parsed, the XML parser fails on entity references,
 --     except for those defined internally.  You cannot use this library for
---     parsing XML documents with entity references outside the predefined set.
+--     parsing XML documents with entity references outside the predefined
+--     set.
 --
 --   * The HTML 5 parser is not a compliant HTML parser.  Instead, it is a
 --     parser for valid HTML 5 content.  It should only be used on content
@@ -74,14 +75,24 @@
 
 ------------------------------------------------------------------------------
 -- | Parses the given XML fragment.
-parseXML :: String -> ByteString -> Either String Document
+parseXML :: String
+         -- ^ Name of document source (perhaps a filename) for error messages
+         -> ByteString
+         -- ^ Document contents
+         -> Either String Document
+         -- ^ The document or an error message
 parseXML = parse XML.docFragment
 
 
 ------------------------------------------------------------------------------
 -- | Parses the given HTML fragment.  This enables HTML quirks mode, which
 --   changes the parsing algorithm to parse valid HTML 5 documents correctly.
-parseHTML :: String -> ByteString -> Either String Document
+parseHTML :: String
+          -- ^ Name of document source (perhaps a filename) for error messages
+          -> ByteString
+          -- ^ Document contents
+          -> Either String Document
+          -- ^ The document or an error message
 parseHTML = parse HTML.docFragment
 
 
diff --git a/src/Text/XmlHtml/Cursor.hs b/src/Text/XmlHtml/Cursor.hs
--- a/src/Text/XmlHtml/Cursor.hs
+++ b/src/Text/XmlHtml/Cursor.hs
@@ -55,7 +55,7 @@
     insertManyLastChild,
     insertGoLeft,
     insertGoRight,
-    
+
     -- * Deletions
     removeLeft,
     removeRight,
@@ -220,7 +220,8 @@
 
 
 ------------------------------------------------------------------------------
--- | Navigates a 'Cursor' to the nearest right sibling that matches a predicate.
+-- | Navigates a 'Cursor' to the nearest right sibling that matches a
+-- predicate.
 findRight :: (Cursor -> Bool) -> Cursor -> Maybe Cursor
 findRight p cur = search p right =<< right cur
 
diff --git a/src/Text/XmlHtml/HTML/Parse.hs b/src/Text/XmlHtml/HTML/Parse.hs
--- a/src/Text/XmlHtml/HTML/Parse.hs
+++ b/src/Text/XmlHtml/HTML/Parse.hs
@@ -39,7 +39,7 @@
 {-
     The following are the differences between this code and the straight XML
     parsing code.
-    
+
     1. HTML void tags (area, base, etc.) are always treated as empty tags,
        regardless of whether they have the empty-tag slash.
 
@@ -63,12 +63,12 @@
     7. Empty attribute syntax is allowed (an attribute not followed by an eq).
        In this case, the attribute value is considered to be the empty string.
 
-    8. Quoted attribute syntax is relaxed to allow any character except for the
-       matching quote.  References are allowed.
+    8. Quoted attribute syntax is relaxed to allow any character except for
+       the matching quote.  References are allowed.
 
-    9. Attribute values may be unquoted.  In this case, the attribute value may
-       not contain space, single or double quotes, '=', '<', '>', or '`', and
-       may not be the empty string.  It can still contain references.
+    9. Attribute values may be unquoted.  In this case, the attribute value
+       may not contain space, single or double quotes, '=', '<', '>', or '`',
+       and may not be the empty string.  It can still contain references.
 
     10. There are many more character references available.
 
@@ -148,14 +148,14 @@
 
 ------------------------------------------------------------------------------
 -- | When parsing an element, three things can happen (besides failure):
--- 
+--
 -- (1) The end tag matches the start tag.  This is a Matched.
--- 
+--
 -- (2) The end tag does not match, but the element has an end tag that can be
 -- omitted when there is no more content in its parent.  This is an
 -- ImplicitLast.  In this case, we need to remember the tag name of the
 -- end tag that we did find, so as to match it later.
--- 
+--
 -- (3) A start tag is found such that it implicitly ends the current element.
 -- This is an ImplicitNext.  In this case, we parse and remember the
 -- entire element that comes next, so that it can be inserted after the
@@ -179,7 +179,7 @@
             c <- rcdata "&<" $ P.try (endTag t)
             return (Element t a [c], Matched)
         | T.map toLower t `S.member` endOmittableLast = tagContents optional
-        | otherwise                                   = tagContents (fmap Just)
+        | otherwise = tagContents (fmap Just)
     tagContents modifier = do
         (c,r1) <- content (Just t)
         case r1 of
diff --git a/src/Text/XmlHtml/TextParser.hs b/src/Text/XmlHtml/TextParser.hs
--- a/src/Text/XmlHtml/TextParser.hs
+++ b/src/Text/XmlHtml/TextParser.hs
@@ -69,7 +69,7 @@
 -- | Parses a 'Text' value and gives back the result.  The parser is expected
 -- to match the entire string.
 parseText :: Parser a         -- ^ The parser to match
-          -> String           -- ^ Name of the source file (can be @""@)
+          -> String           -- ^ Name of the source file (can be @\"\"@)
           -> Text             -- ^ Text to parse
           -> Either String a  -- Either an error message or the result
 parseText p src t = inLeft show (P.parse p src t)
diff --git a/src/Text/XmlHtml/XML/Parse.hs b/src/Text/XmlHtml/XML/Parse.hs
--- a/src/Text/XmlHtml/XML/Parse.hs
+++ b/src/Text/XmlHtml/XML/Parse.hs
@@ -30,9 +30,9 @@
     return $ XmlDocument e dt (nodes1 ++ nodes2)
 
 
--------------------------------------------------------------------------------
--- Everything from here forward is translated from the XML specification.    --
--------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+-- Everything from here forward is translated from the XML specification.   --
+------------------------------------------------------------------------------
 
 {-
     Map from numbered productions in the XML specification to symbols here:
@@ -126,8 +126,8 @@
     [89]  Extender                                 {5}
 
     Notes:
-        {1} - These productions match single characters, and so are implemented
-              as predicates instead of parsers.
+        {1} - These productions match single characters, and so are
+              implemented as predicates instead of parsers.
         {3} - Denotes a production which is not exposed as a top-level symbol
               because it is trivial and included in another definition.
         {4} - This module does not contain a parser for the DTD subsets, so
diff --git a/test/resources/ibm/ibm_oasis_invalid.xml b/test/resources/ibm/ibm_oasis_invalid.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/ibm_oasis_invalid.xml
@@ -0,0 +1,296 @@
+<!--
+
+ (C) Copyright IBM Corp. 2000  All rights reserved.
+
+ US Government Users Restricted Rights Use, duplication or
+ disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
+
+ The program is provided "as is" without any warranty express or
+ implied, including the warranty of non-infringement and the implied
+ warranties of merchantibility and fitness for a particular purpose.
+ IBM will not be liable for any damages suffered by you as a result
+ of using the Program. In no event will IBM be liable for any
+ special, indirect or consequential damages or lost profits even if
+ IBM has been advised of the possibility of their occurrence. IBM
+ will not be liable for any third party claims against you.
+
+-->
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - invalid tests">
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 28">
+  <TEST URI="invalid/P28/ibm28i01.xml" TYPE="invalid" ID="ibm-invalid-P28-ibm28i01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="invalid/P28/out/ibm28i01.xml">
+    The test violates VC:Root Element Type in P28. The Name in the document type
+    declaration does not match the element type of the root element.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 29">
+  <TEST URI="invalid/P29/ibm29i01.xml" TYPE="invalid" ID="ibm-invalid-P29-ibm29i01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="invalid/P29/out/ibm29i01.xml">
+    This test violates VC: Proper Declaration/PE Nesting in P29.  
+    The last character of a markup declaration is not contained in the same 
+    parameter-entity text replacement.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 32">
+  <TEST URI="invalid/P32/ibm32i01.xml" TYPE="invalid" ID="ibm-invalid-P32-ibm32i01.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="invalid/P32/out/ibm32i01.xml">
+    This test violates VC: Standalone Document Declaration in P32.
+    The standalone document declaration has the value yes, BUT there is an
+    external markup declaration of attributes with default values, and the 
+    associated element appears in the document with specified values for those
+    attributes.
+    </TEST>
+  <TEST URI="invalid/P32/ibm32i02.xml" TYPE="invalid" ID="ibm-invalid-P32-ibm32i02.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="invalid/P32/out/ibm32i02.xml">
+    This test violates VC: Standalone Document Declaration in P32.
+    The standalone document declaration has the value yes, BUT there is an 
+    external markup declaration of an entity (other than amp, lt, gt, apos,
+    quot), and references to this entity appear in the document.
+  </TEST>
+  <TEST URI="invalid/P32/ibm32i03.xml" TYPE="invalid" ID="ibm-invalid-P32-ibm32i03.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="invalid/P32/out/ibm32i03.xml">
+    This test violates VC: Standalone Document Declaration in P32.
+    The standalone document declaration has the value yes, BUT there is an 
+    external markup declaration of attributes with values that will change 
+    if normalized.
+  </TEST>
+  <TEST URI="invalid/P32/ibm32i04.xml" TYPE="invalid" ID="ibm-invalid-P32-ibm32i04.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="invalid/P32/out/ibm32i04.xml">
+    This test violates VC: Standalone Document Declaration in P32.
+    The standalone document declaration has the value yes, BUT there is an 
+    external markup declaration of element with element content, and white
+    space occurs directly within the mixed content.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 39">
+  <TEST URI="invalid/P39/ibm39i01.xml" TYPE="invalid" ID="ibm-invalid-P39-ibm39i01.xml" ENTITIES="none" SECTIONS="3" OUTPUT="invalid/P39/out/ibm39i01.xml">
+    This test violates VC: Element Valid in P39. Element a is declared empty 
+    in DTD, but has content in the document.
+  </TEST>
+  <TEST URI="invalid/P39/ibm39i02.xml" TYPE="invalid" ID="ibm-invalid-P39-ibm39i02.xml" ENTITIES="none" SECTIONS="3" OUTPUT="invalid/P39/out/ibm39i02.xml">
+    This test violates VC: Element Valid in P39. root is declared only having 
+    element children in DTD, but have text content in the document.
+  </TEST>
+  <TEST URI="invalid/P39/ibm39i03.xml" TYPE="invalid" ID="ibm-invalid-P39-ibm39i03.xml" ENTITIES="none" SECTIONS="3" OUTPUT="invalid/P39/out/ibm39i03.xml">
+    This test violates VC: Element Valid in P39. Illegal elements are inserted 
+    in b's content of Mixed type.
+  </TEST>
+  <TEST URI="invalid/P39/ibm39i04.xml" TYPE="invalid" ID="ibm-invalid-P39-ibm39i04.xml" ENTITIES="none" SECTIONS="3" OUTPUT="invalid/P39/out/ibm39i04.xml">
+    This test violates VC: Element Valid in P39. Element c has undeclared 
+    element as its content of ANY type
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 41">
+  <TEST URI="invalid/P41/ibm41i01.xml" TYPE="invalid" ID="ibm-invalid-P41-ibm41i01.xml" ENTITIES="none" SECTIONS="3.1" OUTPUT="invalid/P41/out/ibm41i01.xml">
+    This test violates VC: Attribute Value Type in P41. attr1 for Element b is
+    not declared.
+  </TEST>
+  <TEST URI="invalid/P41/ibm41i02.xml" TYPE="invalid" ID="ibm-invalid-P41-ibm41i02.xml" ENTITIES="none" SECTIONS="3.1" OUTPUT="invalid/P41/out/ibm41i02.xml">
+    This test violates VC: Attribute Value Type in P41. attr3 for Element b is 
+    given a value that does not match the declaration in the DTD.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 45">
+  <TEST URI="invalid/P45/ibm45i01.xml" TYPE="invalid" ID="ibm-invalid-P45-ibm45i01.xml" ENTITIES="none" SECTIONS="3.2" OUTPUT="invalid/P45/out/ibm45i01.xml">
+    This test violates VC: Unique Element Type Declaration. Element not_unique 
+    has been declared 3 time in the DTD.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 49">
+  <TEST URI="invalid/P49/ibm49i01.xml" TYPE="invalid" ID="ibm-invalid-P49-ibm49i01.xml" ENTITIES="none" SECTIONS="3.2.1" OUTPUT="invalid/P49/out/ibm49i01.xml">
+    Violates VC:Proper Group/PE Nesting in P49. Open and close parenthesis for a
+    choice content model  are in different PE replace Texts.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 50">
+  <TEST URI="invalid/P50/ibm50i01.xml" TYPE="invalid" ID="ibm-invalid-P50-ibm50i01.xml" ENTITIES="none" SECTIONS="3.2.1" OUTPUT="invalid/P50/out/ibm50i01.xml">
+    Violates VC:Proper Group/PE Nesting in P50. Open and close parenthesis for a
+    seq content model  are in different PE replace Texts.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 51">
+  <TEST URI="invalid/P51/ibm51i01.xml" TYPE="invalid" ID="ibm-invalid-P51-ibm51i01.xml" ENTITIES="none" SECTIONS="3.2.2" OUTPUT="invalid/P51/out/ibm51i01.xml">
+    Violates VC:Proper Group/PE Nesting in P51. Open and close parenthesis for a
+    Mixed content model are in different PE replace Texts.
+  </TEST>
+  <TEST URI="invalid/P51/ibm51i03.xml" TYPE="invalid" ID="ibm-invalid-P51-ibm51i03.xml" ENTITIES="none" SECTIONS="3.2.2" OUTPUT="invalid/P51/out/ibm51i03.xml">
+    Violates VC:No Duplicate Types in P51. Element a appears twice in the Mixed
+    content model of Element e.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 56">
+  <TEST URI="invalid/P56/ibm56i01.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i01.xml">
+    Tests invalid TokenizedType which is against P56 VC: ID. The value of the ID 
+    attribute "UniqueName" is "@999" which does not meet the Name production.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i02.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i02.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i02.xml">
+    Tests invalid TokenizedType which is against P56 VC: ID. The two ID attributes 
+    "attr" and "UniqueName" have the same value "Ac999" for the element "b" and 
+    the element "tokenizer".
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i03.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i03.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i03.xml">
+    Tests invalid TokenizedType which is against P56 VC: ID Attribute Default. The 
+    "#FIXED" occurs in the DefaultDecl for the ID attribute "UniqueName".
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i05.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i05.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i05.xml">
+    Tests invalid TokenizedType which is against P56 VC: ID Attribute Default. The 
+    constant string "BOGUS" occurs in the DefaultDecl for the ID attribute 
+    "UniqueName".
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i06.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i06.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i06.xml">
+    Tests invalid TokenizedType which is against P56 VC: One ID per Element Type. The
+    element "a" has two ID attributes "first" and "second".
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i07.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i07.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i07.xml">
+    Tests invalid TokenizedType which is against P56 VC: IDREF. The value of the 
+    IDREF attribute "reference" is "@456" which does not meet the Name production.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i08.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i08.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i08.xml">
+    Tests invalid TokenizedType which is against P56 VC: IDREF. The value of the IDREF
+    attribute "reference" is "BC456" which does not match the value assigned to any 
+    ID attributes.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i09.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i09.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i09.xml">
+    Tests invalid TokenizedType which is against P56 VC: IDREFS. The value of the 
+    IDREFS attribute "reference" is "AC456 #567" which does not meet the Names 
+    production.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i10.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i10.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i10.xml">
+    Tests invalid TokenizedType which is against P56 VC: IDREFS. The value of the 
+    IDREFS attribute "reference" is "EF456 DE355" which does not match the values 
+    assigned to two ID attributes.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i11.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i11.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i11.xml">
+    Tests invalid TokenizedType which is against P56 VC: Entity Name. The value of 
+    the ENTITY attribute "sun" is "ima ge" which does not meet the Name production.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i12.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i12.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i12.xml">
+    Tests invalid TokenizedType which is against P56 VC: Entity Name. The value of 
+    the ENTITY attribute "sun" is "notimage" which does not match the name of any 
+    unparsed entity declared.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i13.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i13.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i13.xml">
+    Tests invalid TokenizedType which is against P56 VC: Entity Name. The value of 
+    the ENTITY attribute "sun" is "parsedentity" which matches the name of a parsed 
+    entity instead of an unparsed entity declared.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i14.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i14.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i14.xml">
+    Tests invalid TokenizedType which is against P56 VC: Entity Name. The value of 
+    the ENTITIES attribute "sun" is "#image1 @image" which does not meet the Names 
+    production.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i15.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i15.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i15.xml">
+    Tests invalid TokenizedType which is against P56 VC: ENTITIES. The value of the 
+    ENTITIES attribute "sun" is "image3 image4" which does not match the names of 
+    two unparsed entities declared.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i16.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i16.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i16.xml">
+    Tests invalid TokenizedType which is against P56 VC: ENTITIES. The value of the 
+    ENTITIES attribute "sun" is "parsedentity1 parsedentity2" which matches the names
+    of two parsed entities instead of two unparsed entities declared.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i17.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i17.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i17.xml">
+    Tests invalid TokenizedType which is against P56 VC: Name Token. The value of the
+    NMTOKEN attribute "thistoken" is "x : image" which does not meet the Nmtoken 
+    production.
+  </TEST>
+  <TEST URI="invalid/P56/ibm56i18.xml" TYPE="invalid" ID="ibm-invalid-P56-ibm56i18.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P56/out/ibm56i18.xml">
+    Tests invalid TokenizedType which is against P56 VC: Name Token. The value of the
+    NMTOKENS attribute "thistoken" is "@lang y: #country" which does not meet the 
+    Nmtokens production.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 58">
+  <TEST URI="invalid/P58/ibm58i01.xml" TYPE="invalid" ID="ibm-invalid-P58-ibm58i01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P58/out/ibm58i01.xml">
+    Tests invalid NotationType which is against P58 VC: Notation Attributes. The 
+    attribute "content-encoding" with value "raw" is not a value from the list 
+    "(base64|uuencode)".
+  </TEST>
+  <TEST URI="invalid/P58/ibm58i02.xml" TYPE="invalid" ID="ibm-invalid-P58-ibm58i02.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P58/out/ibm58i02.xml">
+    Tests invalid NotationType which is against P58 VC: Notation Attributes. The 
+    attribute "content-encoding" with value "raw" is a value from the list 
+    "(base64|uuencode|raw|ascii)", but "raw" is not a declared notation. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 59">
+  <TEST URI="invalid/P59/ibm59i01.xml" TYPE="invalid" ID="ibm-invalid-P59-ibm59i01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="invalid/P59/out/ibm59i01.xml">
+    Tests invalid Enumeration which is against P59 VC: Enumeration. The value of the 
+    attribute is "ONE" which matches neither "one" nor "two" as declared in the 
+    Enumeration in the AttDef in the AttlistDecl.  
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 60">
+  <TEST URI="invalid/P60/ibm60i01.xml" TYPE="invalid" ID="ibm-invalid-P60-ibm60i01.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="invalid/P60/out/ibm60i01.xml">
+    Tests invalid DefaultDecl which is against P60 VC: Required Attribute. The 
+    attribute "chapter" for the element "two" is declared as #REQUIRED in the 
+    DefaultDecl in the AttlistDecl, but the value of this attribute is not given.
+  </TEST>
+  <TEST URI="invalid/P60/ibm60i02.xml" TYPE="invalid" ID="ibm-invalid-P60-ibm60i02.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="invalid/P60/out/ibm60i02.xml">
+    Tests invalid DefaultDecl which is against P60 VC: Fixed Attribute Default.. The 
+    attribute "chapter" for the element "one" is declared as #FIXED with the given
+    value "Introduction" in the DefaultDecl in the AttlistDecl, but the value of a
+    instance of this attribute is assigned to "JavaBeans".
+  </TEST>
+  <TEST URI="invalid/P60/ibm60i03.xml" TYPE="invalid" ID="ibm-invalid-P60-ibm60i03.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="invalid/P60/out/ibm60i03.xml">
+    Tests invalid DefaultDecl which is against P60 VC: Attribute Default Legal. The
+    declared default value "c" is not legal for the type (a|b) in the AttDef in
+    the AttlistDecl.
+  </TEST>
+  <TEST URI="invalid/P60/ibm60i04.xml" TYPE="invalid" ID="ibm-invalid-P60-ibm60i04.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="invalid/P60/out/ibm60i04.xml">
+    Tests invalid DefaultDecl which is against P60 VC: Attribute Default Legal. The
+    declared default value "@#$" is not legal for the type NMTOKEN the AttDef in
+    the AttlistDecl.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 68">
+  <TEST URI="invalid/P68/ibm68i01.xml" TYPE="invalid" ID="ibm-invalid-P68-ibm68i01.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="invalid/P68/out/ibm68i01.xml">
+    Tests invalid EntityRef which is against P68 VC: Entity Declared. The GE with 
+    the name "ge2" is referred in the file ibm68i01.dtd", but not declared. 
+  </TEST>
+  <TEST URI="invalid/P68/ibm68i02.xml" TYPE="invalid" ID="ibm-invalid-P68-ibm68i02.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="invalid/P68/out/ibm68i02.xml">
+    Tests invalid EntityRef which is against P68 VC: Entity Declared. The GE with 
+    the name "ge1" is referred before declared in the file ibm68i01.dtd". 
+  </TEST>
+  <TEST URI="invalid/P68/ibm68i03.xml" TYPE="invalid" ID="ibm-invalid-P68-ibm68i03.xml" ENTITIES="general" SECTIONS="4.1" OUTPUT="invalid/P68/out/ibm68i03.xml">
+    Tests invalid EntityRef which is against P68 VC: Entity Declared. The GE with 
+    the name "ge2" is referred in the file ibm68i03.ent", but not declared. 
+  </TEST>
+  <TEST URI="invalid/P68/ibm68i04.xml" TYPE="invalid" ID="ibm-invalid-P68-ibm68i04.xml" ENTITIES="general" SECTIONS="4.1" OUTPUT="invalid/P68/out/ibm68i04.xml">
+    Tests invalid EntityRef which is against P68 VC: Entity Declared. The GE with 
+    the name "ge1" is referred before declared in the file ibm68i04.ent". 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 69">
+  <TEST URI="invalid/P69/ibm69i01.xml" TYPE="invalid" ID="ibm-invalid-P69-ibm69i01.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="invalid/P69/out/ibm69i01.xml">
+    Tests invalid PEReference which is against P69 VC: Entity Declared. The Name 
+    "pe2" in the PEReference in the file ibm69i01.dtd does not match the Name of
+    any declared PE. 
+  </TEST>
+  <TEST URI="invalid/P69/ibm69i02.xml" TYPE="invalid" ID="ibm-invalid-P69-ibm69i02.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="invalid/P69/out/ibm69i02.xml">
+    Tests invalid PEReference which is against P69 VC: Entity Declared. The PE with 
+    the name "pe1" is referred before declared in the file ibm69i02.dtd
+  </TEST>
+  <TEST URI="invalid/P69/ibm69i03.xml" TYPE="invalid" ID="ibm-invalid-P69-ibm69i03.xml" ENTITIES="both" SECTIONS="4.1" OUTPUT="invalid/P69/out/ibm69i03.xml">
+    Tests invalid PEReference which is against P69 VC: Entity Declared. The Name 
+    "pe3" in the PEReference in the file ibm69i03.ent does not match the Name of
+    any declared PE. 
+  </TEST>
+  <TEST URI="invalid/P69/ibm69i04.xml" TYPE="invalid" ID="ibm-invalid-P69-ibm69i04.xml" ENTITIES="both" SECTIONS="4.1" OUTPUT="invalid/P69/out/ibm69i04.xml">
+    Tests invalid PEReference which is against P69 VC: Entity Declared. The PE with 
+    the name "pe2" is referred before declared in the file ibm69i04.ent.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 76">
+  <TEST URI="invalid/P76/ibm76i01.xml" TYPE="invalid" ID="ibm-invalid-P76-ibm76i01.xml" ENTITIES="none" SECTIONS="4.2.2" OUTPUT="invalid/P76/out/ibm76i01.xml">
+    Tests invalid NDataDecl which is against P76 VC: Notation declared. The Name
+    "JPGformat" in the NDataDecl in the EntityDecl for "ge2" does not match the  
+    Name of any declared notation. 
+  </TEST>
+</TESTCASES>
+
+</TESTCASES>
diff --git a/test/resources/ibm/ibm_oasis_not-wf.xml b/test/resources/ibm/ibm_oasis_not-wf.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/ibm_oasis_not-wf.xml
@@ -0,0 +1,3112 @@
+<!--
+
+ (C) Copyright IBM Corp. 2000  All rights reserved.
+
+ US Government Users Restricted Rights Use, duplication or
+ disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
+
+ The program is provided "as is" without any warranty express or
+ implied, including the warranty of non-infringement and the implied
+ warranties of merchantibility and fitness for a particular purpose.
+ IBM will not be liable for any damages suffered by you as a result
+ of using the Program. In no event will IBM be liable for any
+ special, indirect or consequential damages or lost profits even if
+ IBM has been advised of the possibility of their occurrence. IBM
+ will not be liable for any third party claims against you.
+
+-->
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - not-wf tests">
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 1">
+  <TEST URI="not-wf/P01/ibm01n01.xml" TYPE="not-wf" ID="ibm-not-wf-P01-ibm01n01.xml" ENTITIES="none" SECTIONS="2.1">
+    Tests a document with no element. A well-formed document should have at lease
+    one elements.
+  </TEST>
+  <TEST URI="not-wf/P01/ibm01n02.xml" TYPE="not-wf" ID="ibm-not-wf-P01-ibm01n02.xml" ENTITIES="none" SECTIONS="2.1">
+    Tests a document with wrong ordering of its prolog and element. The 
+    element occurs before the xml declaration and the DTD.
+  </TEST>
+  <TEST URI="not-wf/P01/ibm01n03.xml" TYPE="not-wf" ID="ibm-not-wf-P01-ibm01n03.xml" ENTITIES="none" SECTIONS="2.1">
+    Tests a document with wrong combination of misc and element. One PI occurs 
+    between two elements.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 2">
+  <TEST URI="not-wf/P02/ibm02n01.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n01.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x00
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n02.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n02.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x01
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n03.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n03.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x02  
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n04.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n04.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x03  
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n05.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n05.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x04  
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n06.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n06.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x05  
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n07.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n07.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x06  
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n08.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n08.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x07  
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n09.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n09.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x08  
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n10.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n10.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x0B   
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n11.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n11.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x0C   
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n12.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n12.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x0E    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n13.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n13.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x0F    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n14.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n14.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x10    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n15.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n15.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x11    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n16.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n16.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x12    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n17.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n17.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x13    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n18.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n18.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x14    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n19.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n19.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x15    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n20.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n20.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x16    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n21.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n21.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x17    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n22.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n22.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x18    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n23.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n23.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x19    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n24.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n24.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x1A      </TEST>
+  <TEST URI="not-wf/P02/ibm02n25.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n25.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x1B    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n26.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n26.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x1C    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n27.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n27.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x1D    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n28.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n28.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x1E    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n29.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n29.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #x1F    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n30.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n30.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #xD800    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n31.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n31.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #xDFFF    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n32.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n32.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #xFFFE    
+  </TEST>
+  <TEST URI="not-wf/P02/ibm02n33.xml" TYPE="not-wf" ID="ibm-not-wf-P02-ibm02n33.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests a comment which contains an illegal Char: #xFFFF   
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 3">
+  <TEST URI="not-wf/P03/ibm03n01.xml" TYPE="not-wf" ID="ibm-not-wf-P03-ibm03n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an end tag which contains an illegal space character #x3000 which  
+    follows the element name "book".    
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 4">
+  <TEST URI="not-wf/P04/ibm04n01.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x21    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n02.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n02.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x28    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n03.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n03.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x29    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n04.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n04.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x2B    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n05.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n05.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x2C    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n06.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n06.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x2F    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n07.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n07.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x3B    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n08.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n08.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x3C    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n09.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n09.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x3D    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n10.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n10.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x3F    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n11.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n11.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x5B    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n12.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n12.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x5C    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n13.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n13.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x5D    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n14.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n14.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x5E    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n15.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n15.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x60    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n16.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n16.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x7B    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n17.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n17.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x7C    
+  </TEST>
+  <TEST URI="not-wf/P04/ibm04n18.xml" TYPE="not-wf" ID="ibm-not-wf-P04-ibm04n18.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which contains an illegal ASCII NameChar.
+    "IllegalNameChar" is followed by #x7D    
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 5">
+  <TEST URI="not-wf/P05/ibm05n01.xml" TYPE="not-wf" ID="ibm-not-wf-P05-ibm05n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which has an illegal first character. An illegal 
+    first character "." is followed by "A_name-starts_with.".    
+  </TEST>
+  <TEST URI="not-wf/P05/ibm05n02.xml" TYPE="not-wf" ID="ibm-not-wf-P05-ibm05n02.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which has an illegal first character. An illegal 
+    first character "-" is followed by "A_name-starts_with-".    
+  </TEST>
+  <TEST URI="not-wf/P05/ibm05n03.xml" TYPE="not-wf" ID="ibm-not-wf-P05-ibm05n03.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an element name which has an illegal first character. An illegal 
+    first character "5" is followed by "A_name-starts_with_digit".    
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 9">
+  <TEST URI="not-wf/P09/ibm09n01.xml" TYPE="not-wf" ID="ibm-not-wf-P09-ibm09n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an internal general entity with an invalid value. The entity 
+    "Fullname" contains "%". 
+  </TEST>
+  <TEST URI="not-wf/P09/ibm09n02.xml" TYPE="not-wf" ID="ibm-not-wf-P09-ibm09n02.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an internal general entity with an invalid value. The entity 
+    "Fullname" contains the ampersand character. 
+  </TEST>
+  <TEST URI="not-wf/P09/ibm09n03.xml" TYPE="not-wf" ID="ibm-not-wf-P09-ibm09n03.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an internal general entity with an invalid value. The entity 
+    "Fullname" contains the double quote character in the middle. 
+  </TEST>
+  <TEST URI="not-wf/P09/ibm09n04.xml" TYPE="not-wf" ID="ibm-not-wf-P09-ibm09n04.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an internal general entity with an invalid value. The closing bracket 
+    (double quote) is missing with the value of the entity "FullName".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 10">
+  <TEST URI="not-wf/P10/ibm10n01.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The value of the attribute "first"
+    contains the character "less than".
+  </TEST>
+  <TEST URI="not-wf/P10/ibm10n02.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n02.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The value of the attribute "first"
+    contains the character ampersand.
+  </TEST>
+  <TEST URI="not-wf/P10/ibm10n03.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n03.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The value of the attribute "first"
+    contains the double quote character in the middle.
+  </TEST>
+  <TEST URI="not-wf/P10/ibm10n04.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n04.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The closing bracket (double quote) is
+    missing with The value of the attribute "first".
+  </TEST>
+  <TEST URI="not-wf/P10/ibm10n05.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n05.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The value of the attribute "first"
+    contains the character "less than".
+  </TEST>
+  <TEST URI="not-wf/P10/ibm10n06.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n06.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The value of the attribute "first"
+    contains the character ampersand.
+  </TEST>
+  <TEST URI="not-wf/P10/ibm10n07.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n07.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The value of the attribute "first"
+    contains the double quote character in the middle.
+  </TEST>
+  <TEST URI="not-wf/P10/ibm10n08.xml" TYPE="not-wf" ID="ibm-not-wf-P10-ibm10n08.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests an attribute with an invalid value. The closing bracket (single quote) is
+    missing with the value of the attribute "first".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 11">
+  <TEST URI="not-wf/P11/ibm11n01.xml" TYPE="not-wf" ID="ibm-not-wf-P11-ibm11n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests SystemLiteral. The systemLiteral for the element "student" has 
+    a double quote character in the middle.
+  </TEST>
+  <TEST URI="not-wf/P11/ibm11n02.xml" TYPE="not-wf" ID="ibm-not-wf-P11-ibm11n02.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests SystemLiteral. The systemLiteral for the element "student" has 
+    a single quote character in the middle.
+  </TEST>
+  <TEST URI="not-wf/P11/ibm11n03.xml" TYPE="not-wf" ID="ibm-not-wf-P11-ibm11n03.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests SystemLiteral. The closing bracket (double quote) is missing with
+    the systemLiteral for the element "student".
+  </TEST>
+  <TEST URI="not-wf/P11/ibm11n04.xml" TYPE="not-wf" ID="ibm-not-wf-P11-ibm11n04.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests SystemLiteral. The closing bracket (single quote) is missing with
+    the systemLiteral for the element "student".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 12">
+  <TEST URI="not-wf/P12/ibm12n01.xml" TYPE="not-wf" ID="ibm-not-wf-P12-ibm12n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests PubidLiteral. The closing bracket (double quote) is missing with
+     the value of the PubidLiteral for the entity "info".
+  </TEST>
+  <TEST URI="not-wf/P12/ibm12n02.xml" TYPE="not-wf" ID="ibm-not-wf-P12-ibm12n02.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests PubidLiteral. The value of the PubidLiteral for the entity 
+    "info" has a single quote character in the middle..    
+  </TEST>
+  <TEST URI="not-wf/P12/ibm12n03.xml" TYPE="not-wf" ID="ibm-not-wf-P12-ibm12n03.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests PubidLiteral. The closing bracket (single quote) is missing with
+    the value of the PubidLiteral for the entity "info".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 13">
+  <TEST URI="not-wf/P13/ibm13n01.xml" TYPE="not-wf" ID="ibm-not-wf-P13-ibm13n01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests PubidChar. The pubidChar of the PubidLiteral for the entity 
+    "info" contains the character "{". 
+  </TEST>
+  <TEST URI="not-wf/P13/ibm13n02.xml" TYPE="not-wf" ID="ibm-not-wf-P13-ibm13n02.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests PubidChar. The pubidChar of the PubidLiteral for the entity 
+    "info" contains the character "~". 
+  </TEST>
+  <TEST URI="not-wf/P13/ibm13n03.xml" TYPE="not-wf" ID="ibm-not-wf-P13-ibm13n03.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests PubidChar. The pubidChar of the PubidLiteral for the entity 
+    "info" contains the character double quote in the middle. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 14">
+  <TEST URI="not-wf/P14/ibm14n01.xml" TYPE="not-wf" ID="ibm-not-wf-P14-ibm14n01.xml" ENTITIES="none" SECTIONS="2.4">
+    Tests CharData. The content of the element "student" contains the 
+    character "[[>".
+  </TEST>
+  <TEST URI="not-wf/P14/ibm14n02.xml" TYPE="not-wf" ID="ibm-not-wf-P14-ibm14n02.xml" ENTITIES="none" SECTIONS="2.4">
+    Tests CharData. The content of the element "student" contains the 
+    character "less than".
+  </TEST>
+  <TEST URI="not-wf/P14/ibm14n03.xml" TYPE="not-wf" ID="ibm-not-wf-P14-ibm14n03.xml" ENTITIES="none" SECTIONS="2.4">
+    Tests CharData. The content of the element "student" contains the 
+    character ampersand.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 15">
+  <TEST URI="not-wf/P15/ibm15n01.xml" TYPE="not-wf" ID="ibm-not-wf-P15-ibm15n01.xml" ENTITIES="none" SECTIONS="2.5">
+    Tests comment. The text of the second comment contains the character 
+    "-".
+  </TEST>
+  <TEST URI="not-wf/P15/ibm15n02.xml" TYPE="not-wf" ID="ibm-not-wf-P15-ibm15n02.xml" ENTITIES="none" SECTIONS="2.5">
+    Tests comment. The second comment has a wrong closing sequence 
+    "-(greater than)".
+  </TEST>
+  <TEST URI="not-wf/P15/ibm15n03.xml" TYPE="not-wf" ID="ibm-not-wf-P15-ibm15n03.xml" ENTITIES="none" SECTIONS="2.5">
+    Tests comment. The second comment has a wrong beginning sequence 
+    "(less than)!-".
+  </TEST>
+  <TEST URI="not-wf/P15/ibm15n04.xml" TYPE="not-wf" ID="ibm-not-wf-P15-ibm15n04.xml" ENTITIES="none" SECTIONS="2.5">
+    Tests comment. The closing sequence is missing with the second 
+    comment.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 16">
+  <TEST URI="not-wf/P16/ibm16n01.xml" TYPE="not-wf" ID="ibm-not-wf-P16-ibm16n01.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PI. The content of the PI includes the sequence 
+    "(less than)?".
+  </TEST>
+  <TEST URI="not-wf/P16/ibm16n02.xml" TYPE="not-wf" ID="ibm-not-wf-P16-ibm16n02.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PI. The PITarget is missing in the PI.
+  </TEST>
+  <TEST URI="not-wf/P16/ibm16n03.xml" TYPE="not-wf" ID="ibm-not-wf-P16-ibm16n03.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PI. The PI has a wrong closing sequence ">".
+  </TEST>
+  <TEST URI="not-wf/P16/ibm16n04.xml" TYPE="not-wf" ID="ibm-not-wf-P16-ibm16n04.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PI. The closing sequence is missing in the PI.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 17">
+  <TEST URI="not-wf/P17/ibm17n01.xml" TYPE="not-wf" ID="ibm-not-wf-P17-ibm17n01.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PITarget. The PITarget contains the string "XML".
+  </TEST>
+  <TEST URI="not-wf/P17/ibm17n02.xml" TYPE="not-wf" ID="ibm-not-wf-P17-ibm17n02.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PITarget. The PITarget contains the string "xML".
+  </TEST>
+  <TEST URI="not-wf/P17/ibm17n03.xml" TYPE="not-wf" ID="ibm-not-wf-P17-ibm17n03.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PITarget. The PITarget contains the string "xml".
+  </TEST>
+  <TEST URI="not-wf/P17/ibm17n04.xml" TYPE="not-wf" ID="ibm-not-wf-P17-ibm17n04.xml" ENTITIES="none" SECTIONS="2.6">
+    Tests PITarget. The PITarget contains the string "xmL".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 18">
+  <TEST URI="not-wf/P18/ibm18n01.xml" TYPE="not-wf" ID="ibm-not-wf-P18-ibm18n01.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDSect. The CDStart is missing in the CDSect in the content of
+    element "student".
+  </TEST>
+  <TEST URI="not-wf/P18/ibm18n02.xml" TYPE="not-wf" ID="ibm-not-wf-P18-ibm18n02.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDSect. The CDEnd is missing in the CDSect in the content of
+    element "student".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 19">
+  <TEST URI="not-wf/P19/ibm19n01.xml" TYPE="not-wf" ID="ibm-not-wf-P19-ibm19n01.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDStart. The CDStart contains a lower case string "cdata".
+  </TEST>
+  <TEST URI="not-wf/P19/ibm19n02.xml" TYPE="not-wf" ID="ibm-not-wf-P19-ibm19n02.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDStart. The CDStart contains an extra character "[".
+  </TEST>
+  <TEST URI="not-wf/P19/ibm19n03.xml" TYPE="not-wf" ID="ibm-not-wf-P19-ibm19n03.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDStart. The CDStart contains a wrong character "?".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 20">
+  <TEST URI="not-wf/P20/ibm20n01.xml" TYPE="not-wf" ID="ibm-not-wf-P20-ibm20n01.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDATA with an illegal sequence. The CDATA contains the string
+    "[[>".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 21">
+  <TEST URI="not-wf/P21/ibm21n01.xml" TYPE="not-wf" ID="ibm-not-wf-P21-ibm21n01.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDEnd. One "]" is missing in the CDEnd. 
+  </TEST>
+  <TEST URI="not-wf/P21/ibm21n02.xml" TYPE="not-wf" ID="ibm-not-wf-P21-ibm21n02.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDEnd. An extra "]" is placed in the CDEnd. 
+  </TEST>
+  <TEST URI="not-wf/P21/ibm21n03.xml" TYPE="not-wf" ID="ibm-not-wf-P21-ibm21n03.xml" ENTITIES="none" SECTIONS="2.7">
+    Tests CDEnd. A wrong character ")" is placed in the CDEnd. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 22">
+  <TEST URI="not-wf/P22/ibm22n01.xml" TYPE="not-wf" ID="ibm-not-wf-P22-ibm22n01.xml" ENTITIES="none" SECTIONS="2.8"> 
+    Tests prolog with wrong field ordering. The XMLDecl occurs
+    after the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P22/ibm22n02.xml" TYPE="not-wf" ID="ibm-not-wf-P22-ibm22n02.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests prolog with wrong field ordering. The Misc (comment)
+    occurs before the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P22/ibm22n03.xml" TYPE="not-wf" ID="ibm-not-wf-P22-ibm22n03.xml" ENTITIES="none" SECTIONS="2.8">
+   Tests prolog with wrong field ordering. The XMLDecl occurs
+   after the DTD and a comment. The other comment occurs before the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 23">
+  <TEST URI="not-wf/P23/ibm23n01.xml" TYPE="not-wf" ID="ibm-not-wf-P23-ibm23n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests XMLDecl with a required field missing. The Versioninfo is 
+    missing in the XMLDecl. 
+  </TEST>
+  <TEST URI="not-wf/P23/ibm23n02.xml" TYPE="not-wf" ID="ibm-not-wf-P23-ibm23n02.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests XMLDecl with wrong field ordering. The VersionInfo
+    occurs after the EncodingDecl.
+  </TEST>
+  <TEST URI="not-wf/P23/ibm23n03.xml" TYPE="not-wf" ID="ibm-not-wf-P23-ibm23n03.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests XMLDecl with wrong field ordering. The VersionInfo
+    occurs after the SDDecl and the SDDecl occurs after the VersionInfo.
+  </TEST>
+  <TEST URI="not-wf/P23/ibm23n04.xml" TYPE="not-wf" ID="ibm-not-wf-P23-ibm23n04.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests XMLDecl with wrong key word. An upper case string "XML" is 
+    used as the key word in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P23/ibm23n05.xml" TYPE="not-wf" ID="ibm-not-wf-P23-ibm23n05.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests XMLDecl with a wrong closing sequence ">".
+  </TEST>
+  <TEST URI="not-wf/P23/ibm23n06.xml" TYPE="not-wf" ID="ibm-not-wf-P23-ibm23n06.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests XMLDecl with a wrong opening sequence "(less than)!".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 24">
+  <TEST URI="not-wf/P24/ibm24n01.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with a required field missing. The VersionNum is
+    missing in the VersionInfo in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n02.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n02.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with a required field missing. The white space is
+    missing between the key word "xml" and the VersionInfo in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n03.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n03.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with a required field missing. The "=" 
+    (equal sign) is missing between the key word "version" and the VersionNum.
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n04.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n04.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with wrong field ordering. The VersionNum
+    occurs before "=" and "version".
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n05.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n05.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with wrong field ordering. The "=" occurs
+    after "version" and the VersionNum.
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n06.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n06.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with the wrong key word "Version".
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n07.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n07.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with the wrong key word "versioN".
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n08.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n08.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with mismatched quotes around the VersionNum. 
+    version = '1.0" is used as the VersionInfo.
+  </TEST>
+  <TEST URI="not-wf/P24/ibm24n09.xml" TYPE="not-wf" ID="ibm-not-wf-P24-ibm24n09.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionInfo with mismatched quotes around the VersionNum. 
+    The closing bracket for the VersionNum is missing.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 25">
+  <TEST URI="not-wf/P25/ibm25n01.xml" TYPE="not-wf" ID="ibm-not-wf-P25-ibm25n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests eq with a wrong key word "==".
+  </TEST>
+  <TEST URI="not-wf/P25/ibm25n02.xml" TYPE="not-wf" ID="ibm-not-wf-P25-ibm25n02.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests eq with a wrong key word "eq".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 26">
+  <TEST URI="not-wf/P26/ibm26n01.xml" TYPE="not-wf" ID="ibm-not-wf-P26-ibm26n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests VersionNum with an illegal character "#".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 27">
+  <TEST URI="not-wf/P27/ibm27n01.xml" TYPE="not-wf" ID="ibm-not-wf-P27-ibm27n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests type of Misc. An element declaration is used as a type of Misc
+    After the element "animal". 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 28">
+  <TEST URI="not-wf/P28/ibm28n01.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with a required field missing. The Name "animal" 
+    is missing in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P28/ibm28n02.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n02.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with wrong field ordering. The Name 
+    "animal" occurs after the markup declarations inside the "[]".
+  </TEST>
+  <TEST URI="not-wf/P28/ibm28n03.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n03.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with wrong field ordering. The Name 
+    "animal" occurs after the markup declarations inside the "[]".
+  </TEST>
+  <TEST URI="not-wf/P28/ibm28n04.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n04.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with general entity reference.The 
+    "(ampersand)generalE" occurs in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P28/ibm28n05.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n05.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with wrong key word. A wrong key word "DOCtYPE"
+    occurs on line 2.
+  </TEST>
+  <TEST URI="not-wf/P28/ibm28n06.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n06.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with mismatched brackets. The closing bracket "]"
+    of the DTD is missing.
+  </TEST>
+  <TEST URI="not-wf/P28/ibm28n07.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n07.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with wrong bracket. The opening bracket "}" occurs
+    in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P28/ibm28n08.xml" TYPE="not-wf" ID="ibm-not-wf-P28-ibm28n08.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests doctypedecl with wrong opening sequence. The opening sequence
+    "(less than)?DOCTYPE" occurs in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 29">
+  <TEST URI="not-wf/P29/ibm29n01.xml" TYPE="not-wf" ID="ibm-not-wf-P29-ibm29n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests markupdecl with an illegal markup declaration. A XMLDecl 
+    occurs inside the DTD.
+  </TEST>
+  <TEST URI="not-wf/P29/ibm29n02.xml" TYPE="not-wf" ID="ibm-not-wf-P29-ibm29n02.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests WFC "PEs in Internal Subset". A PE reference occurs inside an 
+    elementdecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P29/ibm29n03.xml" TYPE="not-wf" ID="ibm-not-wf-P29-ibm29n03.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests WFC "PEs in Internal Subset". A PE reference occurs inside an   
+    ATTlistDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P29/ibm29n04.xml" TYPE="not-wf" ID="ibm-not-wf-P29-ibm29n04.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests WFC "PEs in Internal Subset". A PE reference occurs inside an   
+    EntityDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P29/ibm29n05.xml" TYPE="not-wf" ID="ibm-not-wf-P29-ibm29n05.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests WFC "PEs in Internal Subset". A PE reference occurs inside a PI in 
+    the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P29/ibm29n06.xml" TYPE="not-wf" ID="ibm-not-wf-P29-ibm29n06.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests WFC "PEs in Internal Subset". A PE reference occurs inside a comment
+    in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P29/ibm29n07.xml" TYPE="not-wf" ID="ibm-not-wf-P29-ibm29n07.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests WFC "PEs in Internal Subset". A PE reference occurs inside a   
+    NotationDecl in the DTD. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 30">
+  <TEST URI="not-wf/P30/ibm30n01.xml" TYPE="not-wf" ID="ibm-not-wf-P30-ibm30n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests extSubset with wrong field ordering. In the file "ibm30n01.dtd", 
+    the TextDecl occurs after the extSubsetDecl (the element declaration). 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 31">
+  <TEST URI="not-wf/P31/ibm31n01.xml" TYPE="not-wf" ID="ibm-not-wf-P31-ibm31n01.xml" ENTITIES="none" SECTIONS="2.8">
+    Tests extSubsetDecl with an illegal field. A general entity 
+    reference occurs in file "ibm31n01.dtd".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 32">
+  <TEST URI="not-wf/P32/ibm32n01.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n01.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with a required field missing. The leading white space
+    is missing with the SDDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P32/ibm32n02.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n02.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with a required field missing. The "=" sign is missing
+    in the SDDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P32/ibm32n03.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n03.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with wrong key word. The word "Standalone" occurs in 
+    the SDDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P32/ibm32n04.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n04.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with wrong key word. The word "Yes" occurs in the
+    SDDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P32/ibm32n05.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n05.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with wrong key word. The word "YES" occurs in the
+    SDDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P32/ibm32n06.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n06.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with wrong key word. The word "No" occurs in the
+    SDDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P32/ibm32n07.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n07.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with wrong key word. The word "NO" occurs in the
+    SDDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P32/ibm32n08.xml" TYPE="not-wf" ID="ibm-not-wf-P32-ibm32n08.xml" ENTITIES="none" SECTIONS="2.9">
+    Tests SDDecl with wrong field ordering. The "=" sign occurs 
+    after the key word "yes" in the SDDecl in the XMLDecl.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 39">
+  <TEST URI="not-wf/P39/ibm39n01.xml" TYPE="not-wf" ID="ibm-not-wf-P39-ibm39n01.xml" ENTITIES="none" SECTIONS="3">
+    Tests element with a required field missing. The ETag is missing 
+    for the element "root".
+  </TEST>
+  <TEST URI="not-wf/P39/ibm39n02.xml" TYPE="not-wf" ID="ibm-not-wf-P39-ibm39n02.xml" ENTITIES="none" SECTIONS="3">
+    Tests element with a required field missing. The STag is missing 
+    for the element "root".
+  </TEST>
+  <TEST URI="not-wf/P39/ibm39n03.xml" TYPE="not-wf" ID="ibm-not-wf-P39-ibm39n03.xml" ENTITIES="none" SECTIONS="3">
+    Tests element with required fields missing. Both the content and 
+    the ETag are missing in the element "root".
+  </TEST>
+  <TEST URI="not-wf/P39/ibm39n04.xml" TYPE="not-wf" ID="ibm-not-wf-P39-ibm39n04.xml" ENTITIES="none" SECTIONS="3">
+    Tests element with required fields missing. Both the content and 
+    the STag are missing in the element "root".
+  </TEST>
+  <TEST URI="not-wf/P39/ibm39n05.xml" TYPE="not-wf" ID="ibm-not-wf-P39-ibm39n05.xml" ENTITIES="none" SECTIONS="3">
+    Tests element with wrong field ordering. The STag and the ETag are
+    swapped in the element "root".
+  </TEST>
+  <TEST URI="not-wf/P39/ibm39n06.xml" TYPE="not-wf" ID="ibm-not-wf-P39-ibm39n06.xml" ENTITIES="none" SECTIONS="3">
+    Tests element with wrong field ordering. The content occurs after 
+    the ETag of the element "root".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 40">
+  <TEST URI="not-wf/P40/ibm40n01.xml" TYPE="not-wf" ID="ibm-not-wf-P40-ibm40n01.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests STag with a required field missing. The Name "root" is 
+    in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P40/ibm40n02.xml" TYPE="not-wf" ID="ibm-not-wf-P40-ibm40n02.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests STag with a required field missing. The white space between 
+    the Name "root" and the attribute "attr1" is missing in the STag of the
+    element "root".
+  </TEST>
+  <TEST URI="not-wf/P40/ibm40n03.xml" TYPE="not-wf" ID="ibm-not-wf-P40-ibm40n03.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests STag with wrong field ordering. The Name "root" occurs after 
+    the attribute "attr1" in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P40/ibm40n04.xml" TYPE="not-wf" ID="ibm-not-wf-P40-ibm40n04.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests STag with a wrong opening sequence. The string "(less than)!" is used 
+    as the opening sequence for the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P40/ibm40n05.xml" TYPE="not-wf" ID="ibm-not-wf-P40-ibm40n05.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests STag with duplicate attribute names. The attribute name 
+    "attr1" occurs twice in  the STag of the element "root".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 41">
+  <TEST URI="not-wf/P41/ibm41n01.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n01.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with a required field missing. The attribute name 
+    is missing in the Attribute in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n02.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n02.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with a required field missing. The "=" is missing
+    between the attribute name and the attribute value in the Attribute in the 
+    STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n03.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n03.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with a required field missing. The AttValue is 
+    missing in the Attribute in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n04.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n04.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with a required field missing. The Name and the 
+    "=" are missing in the Attribute in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n05.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n05.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with a required field missing. The "=" and the 
+    AttValue are missing in the Attribute in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n06.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n06.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with a required field missing. The Name and the 
+    AttValue are missing in the Attribute in the STag of the element "root".
+  </TEST>
+
+  <TEST URI="not-wf/P41/ibm41n07.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n07.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with wrong field ordering. The "=" occurs after the
+    Name and the AttValue in the Attribute in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n08.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n08.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with wrong field ordering. The Name and the AttValue
+    are swapped in the Attribute in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n09.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n09.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute with wrong field ordering. The "=" occurs before the 
+    Name and the AttValue in the Attribute in the STag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n10.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n10.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute against WFC "no external entity references". A direct
+    references to the external entity "aExternal" is contained in the value of the
+    attribute "attr1". 
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n11.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n11.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute against WFC "no external entity references". A indirect
+    references to the external entity "aExternal" is contained in the value of the
+    attribute "attr1". 
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n12.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n12.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute against WFC "no external entity references". A direct
+    references to the external unparsed entity "aImage" is contained in the value 
+    of the attribute "attr1". 
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n13.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n13.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute against WFC "No (less that) character in Attribute 
+    Values". The character "less than" is contained in the value of the 
+    attribute "attr1".
+  </TEST>
+  <TEST URI="not-wf/P41/ibm41n14.xml" TYPE="not-wf" ID="ibm-not-wf-P41-ibm41n14.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests Attribute against WFC "No (less than) in Attribute Values". The character
+    "less than" is contained in the value of the attribute "attr1" through indirect 
+    internal entity reference.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 42">
+  <TEST URI="not-wf/P42/ibm42n01.xml" TYPE="not-wf" ID="ibm-not-wf-P42-ibm42n01.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests ETag with a required field missing. The Name is missing in the 
+    ETag of the element "root".  
+  </TEST>
+  <TEST URI="not-wf/P42/ibm42n02.xml" TYPE="not-wf" ID="ibm-not-wf-P42-ibm42n02.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests ETag with a wrong beginning sequence. The string "(less than)\" is used as 
+    a beginning sequence of the ETag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P42/ibm42n03.xml" TYPE="not-wf" ID="ibm-not-wf-P42-ibm42n03.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests ETag with a wrong beginning sequence. The string "less than" is used as 
+    a beginning sequence of the ETag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P42/ibm42n04.xml" TYPE="not-wf" ID="ibm-not-wf-P42-ibm42n04.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests ETag with a wrong structure. An white space occurs between The 
+    beginning sequence and the Name of the ETag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P42/ibm42n05.xml" TYPE="not-wf" ID="ibm-not-wf-P42-ibm42n05.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests ETag with a wrong structure. The ETag of the element "root"
+    contains an Attribute (attr1="any").
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 43">
+  <TEST URI="not-wf/P43/ibm43n01.xml" TYPE="not-wf" ID="ibm-not-wf-P43-ibm43n01.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests element content with a wrong option. A NotationDecl is used as 
+    the content of the element "root". 
+  </TEST>
+  <TEST URI="not-wf/P43/ibm43n02.xml" TYPE="not-wf" ID="ibm-not-wf-P43-ibm43n02.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests element content with a wrong option. A elementdecl is used as 
+    the content of the element "root". 
+  </TEST>
+  <TEST URI="not-wf/P43/ibm43n04.xml" TYPE="not-wf" ID="ibm-not-wf-P43-ibm43n04.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests element content with a wrong option. An elementdecl is used as 
+    the content of the element "root". 
+  </TEST>
+  <TEST URI="not-wf/P43/ibm43n05.xml" TYPE="not-wf" ID="ibm-not-wf-P43-ibm43n05.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests element content with a wrong option. An AttlistDecl is used as 
+    the content of the element "root". 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 44">
+  <TEST URI="not-wf/P44/ibm44n01.xml" TYPE="not-wf" ID="ibm-not-wf-P44-ibm44n01.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests EmptyElemTag with a required field missing. The Name "root" is 
+    missing in the EmptyElemTag.
+  </TEST>
+  <TEST URI="not-wf/P44/ibm44n02.xml" TYPE="not-wf" ID="ibm-not-wf-P44-ibm44n02.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests EmptyElemTag with wrong field ordering. The Attribute (attri1 = 
+    "any") occurs before the name of the element "root" in the EmptyElemTag. 
+  </TEST>
+  <TEST URI="not-wf/P44/ibm44n03.xml" TYPE="not-wf" ID="ibm-not-wf-P44-ibm44n03.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests EmptyElemTag with wrong closing sequence. The string "\>" is used
+    as the closing sequence in the EmptyElemtag of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P44/ibm44n04.xml" TYPE="not-wf" ID="ibm-not-wf-P44-ibm44n04.xml" ENTITIES="none" SECTIONS="3.1">
+    Tests EmptyElemTag which against the WFC "Unique Att Spec". The 
+    attribute name "attr1" occurs twice in the EmptyElemTag of the element "root".
+  </TEST> 
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 45">
+  <TEST URI="not-wf/P45/ibm45n01.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n01.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with a required field missing. The Name is  missing 
+    in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n02.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n02.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with a required field missing. The white space is 
+    missing between "aEle" and "(#PCDATA)" in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n03.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n03.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with a required field missing. The contentspec is 
+    missing in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n04.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n04.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with a required field missing. The contentspec and 
+    the white space is missing in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n05.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n05.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with a required field missing. The Name, the white
+    space, and the contentspec are missing in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n06.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n06.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with wrong field ordering. The Name occurs after the
+    contentspec in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n07.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n07.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with wrong beginning sequence. The string 
+    "(less than)ELEMENT" is used as the beginning sequence in the second 
+    elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n08.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n08.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with wrong key word. The string "Element" is used as
+    the key word in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P45/ibm45n09.xml" TYPE="not-wf" ID="ibm-not-wf-P45-ibm45n09.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests elementdecl with wrong key word. The string "element" is used as
+    the key word in the second elementdecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 46">
+  <TEST URI="not-wf/P46/ibm46n01.xml" TYPE="not-wf" ID="ibm-not-wf-P46-ibm46n01.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests contentspec with wrong key word. the string "empty" is used as 
+    the key word in the contentspec of the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P46/ibm46n02.xml" TYPE="not-wf" ID="ibm-not-wf-P46-ibm46n02.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests contentspec with wrong key word. the string "Empty" is used as 
+    the key word in the contentspec of the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P46/ibm46n03.xml" TYPE="not-wf" ID="ibm-not-wf-P46-ibm46n03.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests contentspec with wrong key word. the string "Any" is used as 
+    the key word in the contentspec of the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P46/ibm46n04.xml" TYPE="not-wf" ID="ibm-not-wf-P46-ibm46n04.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests contentspec with wrong key word. the string "any" is used as 
+    the key word in the contentspec of the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P46/ibm46n05.xml" TYPE="not-wf" ID="ibm-not-wf-P46-ibm46n05.xml" ENTITIES="none" SECTIONS="3.2">
+    Tests contentspec with a wrong option. The string "#CDATA" is used as
+    the contentspec in the second elementdecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 47">
+  <TEST URI="not-wf/P47/ibm47n01.xml" TYPE="not-wf" ID="ibm-not-wf-P47-ibm47n01.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests children with a required field missing. The "+" is used as the
+    choice or seq field in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P47/ibm47n02.xml" TYPE="not-wf" ID="ibm-not-wf-P47-ibm47n02.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests children with a required field missing. The "*" is used as the
+    choice or seq field in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P47/ibm47n03.xml" TYPE="not-wf" ID="ibm-not-wf-P47-ibm47n03.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests children with a required field missing. The "?" is used as the
+    choice or seq field in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P47/ibm47n04.xml" TYPE="not-wf" ID="ibm-not-wf-P47-ibm47n04.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests children with wrong field ordering. The "*" occurs before the 
+    seq field (a,a) in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P47/ibm47n05.xml" TYPE="not-wf" ID="ibm-not-wf-P47-ibm47n05.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests children with wrong field ordering. The "+" occurs before the 
+    choice field (a|a) in the second elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P47/ibm47n06.xml" TYPE="not-wf" ID="ibm-not-wf-P47-ibm47n06.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests children with wrong key word. The "^" occurs after the seq field
+    in the second elementdecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 48">
+  <TEST URI="not-wf/P48/ibm48n01.xml" TYPE="not-wf" ID="ibm-not-wf-P48-ibm48n01.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests cp with a required fields missing. The field Name|choice|seq is 
+    missing in the second cp in the choice field in the third elementdecl in the
+    DTD.
+  </TEST>
+  <TEST URI="not-wf/P48/ibm48n02.xml" TYPE="not-wf" ID="ibm-not-wf-P48-ibm48n02.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests cp with a required fields missing. The field Name|choice|seq is 
+    missing in the cp in the third elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P48/ibm48n03.xml" TYPE="not-wf" ID="ibm-not-wf-P48-ibm48n03.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests cp with a required fields missing. The field Name|choice|seq is 
+    missing in the first cp in the choice field in the third elementdecl in the 
+    DTD.
+  </TEST>
+  <TEST URI="not-wf/P48/ibm48n04.xml" TYPE="not-wf" ID="ibm-not-wf-P48-ibm48n04.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests cp with wrong field ordering. The "+" occurs before the seq (a,a)
+    in the first cp in the choice field in the third elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P48/ibm48n05.xml" TYPE="not-wf" ID="ibm-not-wf-P48-ibm48n05.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests cp with wrong field ordering. The "*" occurs before the choice
+    (a|b) in the first cp in the seq field in the third elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P48/ibm48n06.xml" TYPE="not-wf" ID="ibm-not-wf-P48-ibm48n06.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests cp with wrong field ordering. The "?" occurs before the Name "a"
+    in the second cp in the seq field in the third elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P48/ibm48n07.xml" TYPE="not-wf" ID="ibm-not-wf-P48-ibm48n07.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests cp with wrong key word. The "^" occurs after the Name "a" in the
+    first cp in the choice field in the third elementdecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 49">
+  <TEST URI="not-wf/P49/ibm49n01.xml" TYPE="not-wf" ID="ibm-not-wf-P49-ibm49n01.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests choice with a required field missing. The two cps are missing in
+    the choice field in the third elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P49/ibm49n02.xml" TYPE="not-wf" ID="ibm-not-wf-P49-ibm49n02.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests choice with a required field missing. The third cp is missing in
+    the choice field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P49/ibm49n03.xml" TYPE="not-wf" ID="ibm-not-wf-P49-ibm49n03.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests choice with a wrong separator. The "!" is used as the separator 
+    in the choice field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P49/ibm49n04.xml" TYPE="not-wf" ID="ibm-not-wf-P49-ibm49n04.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests choice with a required field missing. The separator "|" is 
+    missing in the choice field (a b)+ in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P49/ibm49n05.xml" TYPE="not-wf" ID="ibm-not-wf-P49-ibm49n05.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests choice with an extra separator. An extra "|" occurs between a 
+    and b in the choice field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P49/ibm49n06.xml" TYPE="not-wf" ID="ibm-not-wf-P49-ibm49n06.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests choice with a required field missing. The closing bracket ")" is 
+    missing in the choice field (a |b * in the fourth elementdecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 50">
+  <TEST URI="not-wf/P50/ibm50n01.xml" TYPE="not-wf" ID="ibm-not-wf-P50-ibm50n01.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests seq with a required field missing. The two cps are missing in
+    the seq field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P50/ibm50n02.xml" TYPE="not-wf" ID="ibm-not-wf-P50-ibm50n02.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests seq with a required field missing. The third cp is missing in
+    the seq field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P50/ibm50n03.xml" TYPE="not-wf" ID="ibm-not-wf-P50-ibm50n03.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests seq with a wrong separator. The "|" is used as the separator 
+    between a and b in the seq field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P50/ibm50n04.xml" TYPE="not-wf" ID="ibm-not-wf-P50-ibm50n04.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests seq with a wrong separator. The "." is used as the separator 
+    between a and b in the seq field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P50/ibm50n05.xml" TYPE="not-wf" ID="ibm-not-wf-P50-ibm50n05.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests seq with an extra separator. An extra "," occurs between (a|b)
+    and a in the seq field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P50/ibm50n06.xml" TYPE="not-wf" ID="ibm-not-wf-P50-ibm50n06.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests seq with a required field missing. The separator between (a|b) 
+    and (b|a) is missing in the seq field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P50/ibm50n07.xml" TYPE="not-wf" ID="ibm-not-wf-P50-ibm50n07.xml" ENTITIES="none" SECTIONS="3.2.1">
+    Tests seq with wrong closing bracket. The "]" is used as the closing 
+    bracket in the seq field in the fourth elementdecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 51">
+  <TEST URI="not-wf/P51/ibm51n01.xml" TYPE="not-wf" ID="ibm-not-wf-P51-ibm51n01.xml" ENTITIES="none" SECTIONS="3.2.2">
+    Tests Mixed with a wrong key word. The string "#pcdata" is used as the
+    key word in the Mixed field in the fourth elementdecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P51/ibm51n02.xml" TYPE="not-wf" ID="ibm-not-wf-P51-ibm51n02.xml" ENTITIES="none" SECTIONS="3.2.2">
+    Tests Mixed with wrong field ordering. The field #PCDATA does not 
+    occur as the first component in the Mixed field in the fourth elementdecl in 
+    the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P51/ibm51n03.xml" TYPE="not-wf" ID="ibm-not-wf-P51-ibm51n03.xml" ENTITIES="none" SECTIONS="3.2.2">
+    Tests Mixed with a separator missing. The separator "|" is missing in
+    between #PCDATA and a in the Mixed field in the fourth elementdecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P51/ibm51n04.xml" TYPE="not-wf" ID="ibm-not-wf-P51-ibm51n04.xml" ENTITIES="none" SECTIONS="3.2.2">
+    Tests Mixed with a wrong key word. The string "#CDATA" is used as the
+    key word in the Mixed field in the fourth elementdecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P51/ibm51n05.xml" TYPE="not-wf" ID="ibm-not-wf-P51-ibm51n05.xml" ENTITIES="none" SECTIONS="3.2.2">
+    Tests Mixed with a required field missing. The "*" is missing after 
+    the ")" in the Mixed field in the fourth elementdecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P51/ibm51n06.xml" TYPE="not-wf" ID="ibm-not-wf-P51-ibm51n06.xml" ENTITIES="none" SECTIONS="3.2.2">
+    Tests Mixed with wrong closing bracket. The "]" is used as the closing 
+    bracket in the Mixed field in the fourth elementdecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P51/ibm51n07.xml" TYPE="not-wf" ID="ibm-not-wf-P51-ibm51n07.xml" ENTITIES="none" SECTIONS="3.2.2">
+    Tests Mixed with a required field missing. The closing bracket ")" is 
+    missing after (#PCDATA in the Mixed field in the fourth elementdecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 52">
+  <TEST URI="not-wf/P52/ibm52n01.xml" TYPE="not-wf" ID="ibm-not-wf-P52-ibm52n01.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttlistDecl with a required field missing. The Name is missing 
+    in the AttlistDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P52/ibm52n02.xml" TYPE="not-wf" ID="ibm-not-wf-P52-ibm52n02.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttlistDecl with a required field missing. The white space is 
+    missing between the beginning sequence and the name in the AttlistDecl 
+    in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P52/ibm52n03.xml" TYPE="not-wf" ID="ibm-not-wf-P52-ibm52n03.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttlistDecl with wrong field ordering. The Name "a" occurs after 
+    the first AttDef in the AttlistDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P52/ibm52n04.xml" TYPE="not-wf" ID="ibm-not-wf-P52-ibm52n04.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttlistDecl with wrong key word. The string "Attlist" is used as
+    the key word in the beginning sequence in the AttlistDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P52/ibm52n05.xml" TYPE="not-wf" ID="ibm-not-wf-P52-ibm52n05.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttlistDecl with a required field missing. The closing bracket 
+    "greater than" is missing in the AttlistDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P52/ibm52n06.xml" TYPE="not-wf" ID="ibm-not-wf-P52-ibm52n06.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttlistDecl with wrong beginning sequence. The string 
+    "(less than)ATTLIST" is used as the beginning sequence in the AttlistDecl in
+    the DTD. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 53">
+  <TEST URI="not-wf/P53/ibm53n01.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n01.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with a required field missing. The DefaultDecl is missing
+    in the AttDef for the name "attr1" in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P53/ibm53n02.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n02.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with a required field missing. The white space is missing
+    between (abc|def) and "def" in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P53/ibm53n03.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n03.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with a required field missing. The AttType is missing 
+    for "attr1" in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P53/ibm53n04.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n04.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with a required field missing. The white space is missing
+    between "attr1" and (abc|def) in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P53/ibm53n05.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n05.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with a required field missing. The Name is missing in the
+    AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P53/ibm53n06.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n06.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with a required field missing. The white space before the
+    name "attr2" is missing in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P53/ibm53n07.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n07.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with wrong field ordering. The Name "attr1" occurs after
+    the AttType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P53/ibm53n08.xml" TYPE="not-wf" ID="ibm-not-wf-P53-ibm53n08.xml" ENTITIES="none" SECTIONS="3.3">
+    Tests AttDef with wrong field ordering. The Name "attr1" occurs after
+    the AttType and "default" occurs before the AttType in the AttDef in the 
+    AttlistDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 54">
+  <TEST URI="not-wf/P54/ibm54n01.xml" TYPE="not-wf" ID="ibm-not-wf-P54-ibm54n01.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests AttType with a wrong option. The string "BOGUSATTR" is used as
+    the AttType in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P54/ibm54n02.xml" TYPE="not-wf" ID="ibm-not-wf-P54-ibm54n02.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests AttType with a wrong option. The string "PCDATA" is used as
+    the AttType in the AttlistDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 55">
+  <TEST URI="not-wf/P55/ibm55n01.xml" TYPE="not-wf" ID="ibm-not-wf-P55-ibm55n01.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests StringType with a wrong key word. The lower case string "cdata" 
+    is used as the StringType in the AttType in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P55/ibm55n02.xml" TYPE="not-wf" ID="ibm-not-wf-P55-ibm55n02.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests StringType with a wrong key word. The string "#CDATA" is used as
+    the StringType in the AttType in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P55/ibm55n03.xml" TYPE="not-wf" ID="ibm-not-wf-P55-ibm55n03.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests StringType with a wrong key word. The string "CData" is used as
+    the StringType in the AttType in the AttlistDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 56">
+  <TEST URI="not-wf/P56/ibm56n01.xml" TYPE="not-wf" ID="ibm-not-wf-P56-ibm56n01.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests TokenizedType with wrong key word. The "id" is used in the
+    TokenizedType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P56/ibm56n02.xml" TYPE="not-wf" ID="ibm-not-wf-P56-ibm56n02.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests TokenizedType with wrong key word. The "Idref" is used in the
+    TokenizedType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P56/ibm56n03.xml" TYPE="not-wf" ID="ibm-not-wf-P56-ibm56n03.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests TokenizedType with wrong key word. The "Idrefs" is used in 
+    the TokenizedType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P56/ibm56n04.xml" TYPE="not-wf" ID="ibm-not-wf-P56-ibm56n04.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests TokenizedType with wrong key word. The "EntitY" is used in 
+    the TokenizedType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P56/ibm56n05.xml" TYPE="not-wf" ID="ibm-not-wf-P56-ibm56n05.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests TokenizedType with wrong key word. The "nmTOKEN" is used in 
+    the TokenizedType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P56/ibm56n06.xml" TYPE="not-wf" ID="ibm-not-wf-P56-ibm56n06.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests TokenizedType with wrong key word. The "NMtokens" is used in
+    the TokenizedType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P56/ibm56n07.xml" TYPE="not-wf" ID="ibm-not-wf-P56-ibm56n07.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests TokenizedType with wrong key word. The "#ID" is used in the
+    TokenizedType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 57">
+  <TEST URI="not-wf/P57/ibm57n01.xml" TYPE="not-wf" ID="ibm-not-wf-P57-ibm57n01.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests EnumeratedType with an illegal option. The "NMTOKEN (a|b)" 
+    is used in the EnumeratedType in the AttlistDecl in the DTD. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 58">
+  <TEST URI="not-wf/P58/ibm58n01.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n01.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with wrong key word. The lower case "notation" is 
+    used as the key word in the NotationType in the AttDef in the AttlistDecl in 
+    the DTD.
+  </TEST>
+  <TEST URI="not-wf/P58/ibm58n02.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n02.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with a required field missing. The beginning bracket 
+    "(" is missing in the NotationType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P58/ibm58n03.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n03.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with a required field missing. The Name is missing 
+    in the "()" in the NotationType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P58/ibm58n04.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n04.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with a required field missing. The closing bracket 
+    is missing in the NotationType in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P58/ibm58n05.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n05.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with wrong field ordering. The key word "NOTATION"
+    occurs after "(this)" in the NotationType in the AttDef in the AttlistDecl in 
+    the DTD.
+  </TEST>
+  <TEST URI="not-wf/P58/ibm58n06.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n06.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with wrong separator. The "," is used as a separator
+    between "this" and "that" in the NotationType in the AttDef in the AttlistDecl 
+    in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P58/ibm58n07.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n07.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with a required field missing. The white space is
+    missing between "NOTATION" and "(this)" in the NotationType in the AttDef in the
+    AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P58/ibm58n08.xml" TYPE="not-wf" ID="ibm-not-wf-P58-ibm58n08.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests NotationType with extra wrong characters. The double quote 
+    character occurs after "(" and before ")" in the NotationType in the AttDef in 
+    the AttlistDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 59">
+  <TEST URI="not-wf/P59/ibm59n01.xml" TYPE="not-wf" ID="ibm-not-wf-P59-ibm59n01.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests Enumeration with required fields missing. The Nmtokens and "|"s are
+    missing in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P59/ibm59n02.xml" TYPE="not-wf" ID="ibm-not-wf-P59-ibm59n02.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests Enumeration with a required field missing. The closing bracket ")" is
+    missing in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P59/ibm59n03.xml" TYPE="not-wf" ID="ibm-not-wf-P59-ibm59n03.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests Enumeration with wrong separator. The "," is used as the separator in 
+    the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P59/ibm59n04.xml" TYPE="not-wf" ID="ibm-not-wf-P59-ibm59n04.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests Enumeration with illegal presence. The double quotes occur around the 
+    Enumeration value in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P59/ibm59n05.xml" TYPE="not-wf" ID="ibm-not-wf-P59-ibm59n05.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests Enumeration with a required field missing. The white space is missing
+    between  in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P59/ibm59n06.xml" TYPE="not-wf" ID="ibm-not-wf-P59-ibm59n06.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests Enumeration with a required field missing. The beginning bracket "(" is
+    missing in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 60">
+  <TEST URI="not-wf/P60/ibm60n01.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n01.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl with wrong key word. The string "#required" is 
+    used as the key word in the DefaultDecl in the AttDef in the AttlistDecl 
+    in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P60/ibm60n02.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n02.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl with wrong key word. The string "Implied" is 
+    used as the key word in the DefaultDecl in the AttDef in the AttlistDecl 
+    in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P60/ibm60n03.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n03.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl with wrong key word. The string "!IMPLIED" is 
+    used as the key word in the DefaultDecl in the AttDef in the AttlistDecl 
+    in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P60/ibm60n04.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n04.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl with a required field missing. There is no 
+    attribute value specified after the key word "#FIXED" in the DefaultDecl in
+    the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P60/ibm60n05.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n05.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl with a required field missing. The white space is 
+    missing between the key word "#FIXED" and the attribute value in the 
+    DefaultDecl in the AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P60/ibm60n06.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n06.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl with wrong field ordering. The key word "#FIXED" 
+    occurs after the attribute value "introduction" in the DefaultDecl in the 
+    AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P60/ibm60n07.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n07.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl against WFC of P60. The text replacement of the 
+    entity "avalue" contains the "less than" character in the DefaultDecl in the
+    AttDef in the AttlistDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P60/ibm60n08.xml" TYPE="not-wf" ID="ibm-not-wf-P60-ibm60n08.xml" ENTITIES="none" SECTIONS="3.3.2">
+    Tests DefaultDecl with more than one key word. The "#REQUIRED" and
+    the "#IMPLIED" are used as the key words in the DefaultDecl in the AttDef 
+    in the AttlistDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 61">
+  <TEST URI="not-wf/P61/ibm61n01.xml" TYPE="not-wf" ID="ibm-not-wf-P61-ibm61n01.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests conditionalSect with a wrong option. The word "NOTINCLUDE" is
+    used as part of an option which is wrong in the coditionalSect. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 62">
+  <TEST URI="not-wf/P62/ibm62n01.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n01.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with wrong key word. The string "include" is used
+    as a key word in the beginning sequence in the includeSect in the file 
+    ibm62n01.dtd.
+  </TEST>
+  <TEST URI="not-wf/P62/ibm62n02.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n02.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with wrong beginning sequence. An extra "[" occurs
+    in the beginning sequence in the includeSect in the file ibm62n02.dtd.
+  </TEST>
+  <TEST URI="not-wf/P62/ibm62n03.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n03.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with wrong beginning sequence. A wrong character "?"
+    occurs in the beginning sequence in the includeSect in the file ibm62n03.dtd.
+  </TEST>
+  <TEST URI="not-wf/P62/ibm62n04.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n04.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with a required field missing. The key word 
+    "INCLUDE" is missing in the includeSect in the file ibm62n04.dtd.
+  </TEST>
+  <TEST URI="not-wf/P62/ibm62n05.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n05.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with a required field missing. The "]" is missing 
+    after the key word "INCLUDE" in the includeSect in the file ibm62n05.dtd.
+  </TEST>
+  <TEST URI="not-wf/P62/ibm62n06.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n06.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with wrong field ordering. The two external subset
+    declarations occur before the key word "INCLUDE" in the includeSect in the 
+    file ibm62n06.dtd.
+  </TEST>
+  <TEST URI="not-wf/P62/ibm62n07.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n07.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with a required field missing. The closing sequence
+    "]](greater than)" is missing in the includeSect in the file ibm62n07.dtd.
+  </TEST>
+  <TEST URI="not-wf/P62/ibm62n08.xml" TYPE="not-wf" ID="ibm-not-wf-P62-ibm62n08.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with a required field missing. One "]" is missing 
+    in the closing sequence in the includeSect in the file ibm62n08.dtd.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 63">
+  <TEST URI="not-wf/P63/ibm63n01.xml" TYPE="not-wf" ID="ibm-not-wf-P63-ibm63n01.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSect with wrong key word. The string "ignore" is used
+    as a key word in the beginning sequence in the ignoreSect in the file 
+    ibm63n01.dtd.
+  </TEST>
+  <TEST URI="not-wf/P63/ibm63n02.xml" TYPE="not-wf" ID="ibm-not-wf-P63-ibm63n02.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSect with wrong beginning sequence. An extra "[" occurs
+    in the beginning sequence in the ignoreSect in the file ibm63n02.dtd.
+  </TEST>
+  <TEST URI="not-wf/P63/ibm63n03.xml" TYPE="not-wf" ID="ibm-not-wf-P63-ibm63n03.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSect with wrong beginning sequence. A wrong character "?"
+    occurs in the beginning sequence in the ignoreSect in the file ibm63n03.dtd.
+  </TEST>
+  <TEST URI="not-wf/P63/ibm63n04.xml" TYPE="not-wf" ID="ibm-not-wf-P63-ibm63n04.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSect with a required field missing. The key word 
+    "IGNORE" is missing in the ignoreSect in the file ibm63n04.dtd.
+  </TEST>
+  <TEST URI="not-wf/P63/ibm63n05.xml" TYPE="not-wf" ID="ibm-not-wf-P63-ibm63n05.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSect with a required field missing. The "]" is missing 
+    after the key word "IGNORE" in the ignoreSect in the file ibm63n05.dtd.
+  </TEST>
+  <TEST URI="not-wf/P63/ibm63n06.xml" TYPE="not-wf" ID="ibm-not-wf-P63-ibm63n06.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests includeSect with wrong field ordering. The two external subset
+    declarations occur before the key word "IGNORE" in the ignoreSect in the 
+    file ibm63n06.dtd.
+  </TEST>
+  <TEST URI="not-wf/P63/ibm63n07.xml" TYPE="not-wf" ID="ibm-not-wf-P63-ibm63n07.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSect with a required field missing. The closing sequence
+    "]](greater than)" is missing in the ignoreSect in the file ibm63n07.dtd.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 64">
+  <TEST URI="not-wf/P64/ibm64n01.xml" TYPE="not-wf" ID="ibm-not-wf-P64-ibm64n01.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSectContents with wrong beginning sequence. The "?" occurs
+    in beginning sequence the ignoreSectContents in the file ibm64n01.dtd. 
+  </TEST>
+  <TEST URI="not-wf/P64/ibm64n02.xml" TYPE="not-wf" ID="ibm-not-wf-P64-ibm64n02.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSectContents with a required field missing.The closing 
+    sequence is missing in the ignoreSectContents in the file ibm64n02.dtd. 
+  </TEST>
+  <TEST URI="not-wf/P64/ibm64n03.xml" TYPE="not-wf" ID="ibm-not-wf-P64-ibm64n03.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests ignoreSectContents with a required field missing.The beginning
+    sequence is missing in the ignoreSectContents in the file ibm64n03.dtd. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 65">
+  <TEST URI="not-wf/P65/ibm65n01.xml" TYPE="not-wf" ID="ibm-not-wf-P65-ibm65n01.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests Ignore with illegal string included. The string 
+    "]](greater than)" is contained before "this" in the Ignore in the 
+    ignoreSectContents in the file ibm65n01.dtd 
+  </TEST>
+  <TEST URI="not-wf/P65/ibm65n02.xml" TYPE="not-wf" ID="ibm-not-wf-P65-ibm65n02.xml" ENTITIES="none" SECTIONS="3.4">
+    Tests Ignore with illegal string included. The string 
+    "(less than)![" is contained before "this" in the Ignore in the 
+    ignoreSectContents in the file ibm65n02.dtd 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 66">
+  <TEST URI="not-wf/P66/ibm66n01.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n01.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#002f" is 
+    used as the referred character in the CharRef in the EntityDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n02.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n02.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with the semicolon character missing. The semicolon 
+    character is missing at the end of the CharRef in the attribute value in
+    the STag of element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n03.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n03.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "49" is 
+    used as the referred character in the CharRef in the EntityDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n04.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n04.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#5~0" is 
+    used as the referred character in the attribute value in the EmptyElemTag
+    of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n05.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n05.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#x002g" is
+    used as the referred character in the CharRef in the EntityDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n06.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n06.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#x006G" is
+    used as the referred character in the attribute value in the EmptyElemTag 
+    of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n07.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n07.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#0=2f" is 
+    used as the referred character in the CharRef in the EntityDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n08.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n08.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#56.0" is 
+    used as the referred character in the attribute value in the EmptyElemTag 
+    of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n09.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n09.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#x00/2f" 
+    is used as the referred character in the CharRef in the EntityDecl in the 
+    DTD.
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n10.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n10.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#51)" is 
+    used as the referred character in the attribute value in the EmptyElemTag 
+    of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n11.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n11.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#00 2f"
+    is used as the referred character in the CharRef in the EntityDecl in the 
+    DTD.
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n12.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n12.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#x0000" 
+    is used as the referred character in the attribute value in the EmptyElemTag
+    of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n13.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n13.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#x001f" 
+    is used as the referred character in the attribute value in the EmptyElemTag
+    of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n14.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n14.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#xfffe" 
+    is used as the referred character in the attribute value in the EmptyElemTag
+    of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P66/ibm66n15.xml" TYPE="not-wf" ID="ibm-not-wf-P66-ibm66n15.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests CharRef with an illegal character referred to. The "#xffff" 
+    is used as the referred character in the attribute value in the EmptyElemTag
+    of the element "root".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 68">
+  <TEST URI="not-wf/P68/ibm68n01.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n01.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef with a required field missing. The Name is missing 
+    in the EntityRef in the content of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n02.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n02.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef with a required field missing. The semicolon is
+    missing in the EntityRef in the attribute value in the element "root".
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n03.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n03.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef with an extra white space. A white space occurs 
+    after the ampersand in the EntityRef in the content of the element "root".
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n04.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n04.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef which is against P68 WFC: Entity Declared. The name
+    "aAa" in the EntityRef in the AttValue in the STage of the element "root" 
+    does not match the Name of any declared entity in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n05.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n05.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef which is against P68 WFC: Entity Declared. The 
+    entity with the name "aaa" in the EntityRef in the AttValue in the STag of 
+    the element "root" is not declared.
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n06.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n06.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef which is against P68 WFC: Entity Declared. The 
+    entity with the name "aaa" in the EntityRef in the AttValue in the STag of 
+    the element "root" is externally declared, but standalone is "yes".
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n07.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n07.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef which is against P68 WFC: Entity Declared. The 
+    entity with the name "aaa" in the EntityRef in the AttValue in the STag of 
+    the element "root" is referred before declared.
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n08.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n08.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef which is against P68 WFC: Parsed Entity. The 
+    EntityRef in the AttValue in the STag of the element "root" contains the 
+    name "aImage" of an unparsed entity.
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n09.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n09.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef which is against P68 WFC: No Recursion. The 
+    recursive entity reference occurs with the entity declarations for "aaa"
+    and "bbb" in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P68/ibm68n10.xml" TYPE="not-wf" ID="ibm-not-wf-P68-ibm68n10.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests EntityRef which is against P68 WFC: No Recursion. The 
+    indirect recursive entity reference occurs with the entity declarations for
+    "aaa", "bbb", "ccc", "ddd", and "eee" in the DTD.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 69">
+  <TEST URI="not-wf/P69/ibm69n01.xml" TYPE="not-wf" ID="ibm-not-wf-P69-ibm69n01.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests PEReference with a required field missing. The Name "paaa" is 
+    missing in the PEReference in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P69/ibm69n02.xml" TYPE="not-wf" ID="ibm-not-wf-P69-ibm69n02.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests PEReference with a required field missing. The semicolon is 
+    missing in the PEReference "%paaa" in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P69/ibm69n03.xml" TYPE="not-wf" ID="ibm-not-wf-P69-ibm69n03.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests PEReference with an extra white space. There is an extra 
+    white space occurs before ";" in the PEReference in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P69/ibm69n04.xml" TYPE="not-wf" ID="ibm-not-wf-P69-ibm69n04.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests PEReference with an extra white space. There is an extra 
+    white space occurs after "%" in the PEReference in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P69/ibm69n05.xml" TYPE="invalid" ID="ibm-not-wf-P69-ibm69n05.xml" ENTITIES="none" SECTIONS="4.1">
+    Based on E29 substantial source: minutes XML-Syntax 1999-02-24 E38 in
+    XML 1.0 Errata, this WFC does not apply to P69, but the VC Entity declared 
+    still apply. 
+    Tests PEReference which is against P69 WFC: Entity Declared. The PE
+    with the name "paaa" is referred before declared in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P69/ibm69n06.xml" TYPE="not-wf" ID="ibm-not-wf-P69-ibm69n06.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests PEReference which is against P69 WFC: No Recursion. The 
+    recursive PE reference occurs with the entity declarations for "paaa" and 
+    "bbb" in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P69/ibm69n07.xml" TYPE="not-wf" ID="ibm-not-wf-P69-ibm69n07.xml" ENTITIES="none" SECTIONS="4.1">
+    Tests PEReference which is against P69 WFC: No Recursion. The 
+    indirect recursive PE reference occurs with the entity declarations for 
+    "paaa", "bbb", "ccc", "ddd", and "eee" in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 71">
+  <TEST URI="not-wf/P71/ibm70n01.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm70n01.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n01.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n01.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with a required field missing. The white space is 
+    missing between the beginning sequence and the Name "aaa" in the EntityDecl 
+    in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n02.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n02.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with a required field missing. The white space is 
+    missing between the Name "aaa" and the EntityDef "aString" in the 
+    EntityDecl in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n03.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n03.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with a required field missing. The EntityDef is 
+    missing in the EntityDecl with the Name "aaa" in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n04.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n04.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with a required field missing. The Name is missing 
+    in the EntityDecl with the EntityDef "aString" in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n05.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n05.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with wrong ordering. The Name "aaa" occurs after 
+    the EntityDef in the EntityDecl in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n06.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n06.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with wrong key word. The string "entity" is used 
+    as the key word in the beginning sequence in the EntityDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n07.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n07.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with a required field missing. The closing bracket
+    (greater than) is missing in the EntityDecl in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P71/ibm71n08.xml" TYPE="not-wf" ID="ibm-not-wf-P71-ibm71n08.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDecl with a required field missing. The exclamation mark
+    is missing in the beginning sequence in the EntityDecl in the DTD.  
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 72">
+  <TEST URI="not-wf/P72/ibm72n01.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n01.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with a required field missing. The white space is 
+    missing between the beginning sequence and the "%" in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n02.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n02.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with a required field missing. The Name is missing 
+    in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n03.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n03.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with a required field missing. The white space is 
+    missing between the Name and the PEDef in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n04.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n04.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with a required field missing. The PEDef is missing 
+    after the Name "paaa" in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n05.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n05.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with wrong field ordering. The Name "paaa" occurs 
+    after the PEDef in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n06.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n06.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with wrong field ordering. The "%" and the Name "paaa"
+    occurs after the PEDef in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n07.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n07.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with wrong key word. The string "entity" is used as 
+    the key word in the beginning sequence in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n08.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n08.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with a required field missing. The closing bracket 
+    (greater than) is missing in the PEDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P72/ibm72n09.xml" TYPE="not-wf" ID="ibm-not-wf-P72-ibm72n09.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEdecl with wrong closing sequence. The string 
+    "!(greater than)" is used as the closing sequence in the PEDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 73">
+  <TEST URI="not-wf/P73/ibm73n01.xml" TYPE="not-wf" ID="ibm-not-wf-P73-ibm73n01.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDef with wrong field ordering. The NDataDecl "NDATA 
+    JPGformat" occurs before the ExternalID in the EntityDef in the EntityDecl.
+  </TEST>
+  <TEST URI="not-wf/P73/ibm73n03.xml" TYPE="not-wf" ID="ibm-not-wf-P73-ibm73n03.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests EntityDef with a required field missing. The ExternalID is 
+    missing before the NDataDecl in the EntityDef in the EntityDecl.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 74">
+  <TEST URI="not-wf/P74/ibm74n01.xml" TYPE="not-wf" ID="ibm-not-wf-P74-ibm74n01.xml" ENTITIES="none" SECTIONS="4.2">
+    Tests PEDef with extra fields. The NDataDecl occurs after the 
+    ExternalID in the PEDef in the PEDecl in the DTD.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 75">
+  <TEST URI="not-wf/P75/ibm75n01.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n01.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with wrong key word. The string "system" is used
+    as the key word in the ExternalID in the EntityDef in the EntityDecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n02.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n02.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with wrong key word. The string "public" is used
+    as the key word in the ExternalID in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n03.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n03.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with wrong key word. The string "Public" is used
+    as the key word in the ExternalID in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n04.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n04.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with wrong field ordering. The key word "PUBLIC" 
+    occurs after the PublicLiteral and the SystemLiteral in the ExternalID in 
+    the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n05.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n05.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The white space 
+    between "SYSTEM" and the Systemliteral is missing in the ExternalID in the 
+    EntityDef in the EntityDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n06.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n06.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The Systemliteral 
+    is missing after "SYSTEM" in the ExternalID in the EntityDef in the 
+    EntityDecl in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n07.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n07.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The white space 
+    between the PublicLiteral and the Systemliteral is missing in the ExternalID
+    in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n08.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n08.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The key word 
+    "PUBLIC" is missing in the ExternalID in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n09.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n09.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The white space 
+    between "PUBLIC" and the PublicLiteral is missing in the ExternalID in the 
+    doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n10.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n10.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The PublicLiteral
+    is missing in the ExternalID in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n11.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n11.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The PublicLiteral
+    is missing in the ExternalID in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n12.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n12.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with a required field missing. The SystemLiteral
+    is missing in the ExternalID in the doctypedecl.
+  </TEST>
+  <TEST URI="not-wf/P75/ibm75n13.xml" TYPE="not-wf" ID="ibm-not-wf-P75-ibm75n13.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests ExternalID with wrong field ordering. The key word "PUBLIC" 
+    occurs after the PublicLiteral in the ExternalID in the doctypedecl.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 76">
+  <TEST URI="not-wf/P76/ibm76n01.xml" TYPE="not-wf" ID="ibm-not-wf-P76-ibm76n01.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests NDataDecl with wrong key word. The string "ndata" is used as 
+    the key word in the NDataDecl in the EntityDef in the GEDecl.
+  </TEST>
+  <TEST URI="not-wf/P76/ibm76n02.xml" TYPE="not-wf" ID="ibm-not-wf-P76-ibm76n02.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests NDataDecl with wrong key word. The string "NData" is used as 
+    the key word in the NDataDecl in the EntityDef in the GEDecl.
+  </TEST>
+  <TEST URI="not-wf/P76/ibm76n03.xml" TYPE="not-wf" ID="ibm-not-wf-P76-ibm76n03.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests NDataDecl with a required field missing. The leading white 
+    space is missing in the NDataDecl in the EntityDef in the GEDecl.
+  </TEST>
+  <TEST URI="not-wf/P76/ibm76n04.xml" TYPE="not-wf" ID="ibm-not-wf-P76-ibm76n04.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests NDataDecl with a required field missing. The key word "NDATA"
+    is missing in the NDataDecl in the EntityDef in the GEDecl.
+  </TEST>
+  <TEST URI="not-wf/P76/ibm76n05.xml" TYPE="not-wf" ID="ibm-not-wf-P76-ibm76n05.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests NDataDecl with a required field missing. The Name after the 
+    key word "NDATA" is missing in the NDataDecl in the EntityDef in the GEDecl.
+  </TEST>
+  <TEST URI="not-wf/P76/ibm76n06.xml" TYPE="not-wf" ID="ibm-not-wf-P76-ibm76n06.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests NDataDecl with a required field missing. The white space 
+    between "NDATA" and the Name is missing in the NDataDecl in the EntityDef 
+    in the GEDecl.
+  </TEST>
+  <TEST URI="not-wf/P76/ibm76n07.xml" TYPE="not-wf" ID="ibm-not-wf-P76-ibm76n07.xml" ENTITIES="none" SECTIONS="4.2.2">
+    Tests NDataDecl with wrong field ordering. The key word "NDATA" 
+    occurs after the Name in the NDataDecl in the EntityDef in the GEDecl.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 77">
+  <TEST URI="not-wf/P77/ibm77n01.xml" TYPE="not-wf" ID="ibm-not-wf-P77-ibm77n01.xml" ENTITIES="none" SECTIONS="4.3.1">
+    Tests TextDecl with wrong field ordering. The VersionInfo occurs 
+    after the EncodingDecl in the TextDecl in the file "ibm77n01.ent".
+  </TEST>
+  <TEST URI="not-wf/P77/ibm77n02.xml" TYPE="not-wf" ID="ibm-not-wf-P77-ibm77n02.xml" ENTITIES="none" SECTIONS="4.3.1">
+    Tests TextDecl with wrong key word. The string "XML" is used in the
+    beginning sequence in the TextDecl in the file "ibm77n02.ent".
+  </TEST>
+  <TEST URI="not-wf/P77/ibm77n03.xml" TYPE="not-wf" ID="ibm-not-wf-P77-ibm77n03.xml" ENTITIES="none" SECTIONS="4.3.1">
+    Tests TextDecl with wrong closing sequence. The character "greater 
+    than" is used as the closing sequence in the TextDecl in the file 
+    "ibm77n03.ent".
+  </TEST>
+  <TEST URI="not-wf/P77/ibm77n04.xml" TYPE="not-wf" ID="ibm-not-wf-P77-ibm77n04.xml" ENTITIES="none" SECTIONS="4.3.1">
+    Tests TextDecl with a required field missing. The closing sequence 
+    is missing in the TextDecl in the file "ibm77n04.ent".
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 78">
+  <TEST URI="not-wf/P78/ibm78n01.xml" TYPE="not-wf" ID="ibm-not-wf-P78-ibm78n01.xml" ENTITIES="none" SECTIONS="4.3.2">
+    Tests extParsedEnt with wrong field ordering. The TextDecl occurs 
+    after the content in the file ibm78n01.ent.
+  </TEST>
+  <TEST URI="not-wf/P78/ibm78n02.xml" TYPE="not-wf" ID="ibm-not-wf-P78-ibm78n02.xml" ENTITIES="none" SECTIONS="4.3.2">
+    Tests extParsedEnt with extra field. A blank line occurs before the
+    TextDecl in the file ibm78n02.ent.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 79">
+  <TEST URI="not-wf/P79/ibm79n01.xml" TYPE="not-wf" ID="ibm-not-wf-P79-ibm79n01.xml" ENTITIES="none" SECTIONS="4.3.2">
+    Tests extPE with wrong field ordering. The TextDecl occurs after 
+    the extSubsetDecl (the white space and the comment) in the file 
+    ibm79n01.ent.
+  </TEST>
+  <TEST URI="not-wf/P79/ibm79n02.xml" TYPE="not-wf" ID="ibm-not-wf-P79-ibm79n02.xml" ENTITIES="none" SECTIONS="4.3.2">
+    Tests extPE with extra field. A blank line occurs before the
+    TextDecl in the file ibm78n02.ent.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 80">
+  <TEST URI="not-wf/P80/ibm80n01.xml" TYPE="not-wf" ID="ibm-not-wf-P80-ibm80n01.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncodingDecl with a required field missing. The leading white 
+    space is missing in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P80/ibm80n02.xml" TYPE="not-wf" ID="ibm-not-wf-P80-ibm80n02.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncodingDecl with a required field missing. The "=" sign is 
+    missing in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P80/ibm80n03.xml" TYPE="not-wf" ID="ibm-not-wf-P80-ibm80n03.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncodingDecl with a required field missing. The double quoted 
+    EncName are missing in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P80/ibm80n04.xml" TYPE="not-wf" ID="ibm-not-wf-P80-ibm80n04.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncodingDecl with wrong field ordering. The string "encoding="    occurs after the double quoted EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P80/ibm80n05.xml" TYPE="not-wf" ID="ibm-not-wf-P80-ibm80n05.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncodingDecl with wrong field ordering. The "encoding" occurs
+    after the double quoted EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P80/ibm80n06.xml" TYPE="not-wf" ID="ibm-not-wf-P80-ibm80n06.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncodingDecl with wrong key word. The string "Encoding" is 
+    used as the key word in the EncodingDecl in the XMLDecl.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 81">
+  <TEST URI="not-wf/P81/ibm81n01.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n01.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The "_" is used as the 
+    first character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n02.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n02.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The "-" is used as the 
+    first character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n03.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n03.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The "." is used as the 
+    first character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n04.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n04.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with illegal characters. The "8-" is used as the 
+    initial characters in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n05.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n05.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The "~" is used as one 
+    character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n06.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n06.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The "#" is used as one 
+    character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n07.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n07.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The ":" is used as one 
+    character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n08.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n08.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The "/" is used as one 
+    character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+  <TEST URI="not-wf/P81/ibm81n09.xml" TYPE="not-wf" ID="ibm-not-wf-P81-ibm81n09.xml" ENTITIES="none" SECTIONS="4.3.3">
+    Tests EncName with an illegal character. The ";" is used as one 
+    character in the EncName in the EncodingDecl in the XMLDecl.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 82">
+  <TEST URI="not-wf/P82/ibm82n01.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n01.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with a required field missing. The white space 
+    after the beginning sequence of the NotationDecl is missing in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P82/ibm82n02.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n02.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with a required field missing. The Name in the 
+    NotationDecl is missing in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P82/ibm82n03.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n03.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with a required field missing. The externalID or
+    the PublicID is missing in the NotationDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P82/ibm82n04.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n04.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with wrong field ordering. The Name occurs after
+    the "SYSTEM" and the externalID in the NotationDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P82/ibm82n05.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n05.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with wrong key word. The string "notation" is 
+    used as a key word in the NotationDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P82/ibm82n06.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n06.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with a required field missing. The closing 
+    bracket (the greater than character) is missing in the NotationDecl.
+  </TEST>
+  <TEST URI="not-wf/P82/ibm82n07.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n07.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with wrong beginning sequence. The "!" is missing
+    in the beginning sequence in the NotationDecl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P82/ibm82n08.xml" TYPE="not-wf" ID="ibm-not-wf-P82-ibm82n08.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests NotationDecl with wrong closing sequence. The extra "!" occurs
+    in the closing sequence in the NotationDecl in the DTD. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 83">
+  <TEST URI="not-wf/P83/ibm83n01.xml" TYPE="not-wf" ID="ibm-not-wf-P83-ibm83n01.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests PublicID with wrong key word. The string "public" is used as 
+    the key word in the PublicID in the NotationDcl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P83/ibm83n02.xml" TYPE="not-wf" ID="ibm-not-wf-P83-ibm83n02.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests PublicID with wrong key word. The string "Public" is used as 
+    the key word in the PublicID in the NotationDcl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P83/ibm83n03.xml" TYPE="not-wf" ID="ibm-not-wf-P83-ibm83n03.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests PublicID with a required field missing. The key word "PUBLIC"
+    is missing in the PublicID in the NotationDcl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P83/ibm83n04.xml" TYPE="not-wf" ID="ibm-not-wf-P83-ibm83n04.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests PublicID with a required field missing. The white space 
+    between the "PUBLIC" and the PubidLiteral is missing in the PublicID in 
+    the NotationDcl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P83/ibm83n05.xml" TYPE="not-wf" ID="ibm-not-wf-P83-ibm83n05.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests PublicID with a required field missing. The PubidLiteral is 
+    missing in the PublicID in the NotationDcl in the DTD. 
+  </TEST>
+  <TEST URI="not-wf/P83/ibm83n06.xml" TYPE="not-wf" ID="ibm-not-wf-P83-ibm83n06.xml" ENTITIES="none" SECTIONS="4.7">
+    Tests PublicID with wrong field ordering. The key word "PUBLIC" 
+    occurs after the PubidLiteral in the PublicID in the NotationDcl. 
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 85">
+  <TEST URI="not-wf/P85/ibm85n01.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n01.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x00D7 
+    occurs as the first character of the PITarget in the PI in the DTD.
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n02.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n02.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x00F7    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n03.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n03.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0132    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n04.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n04.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0133    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n05.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n05.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x013F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n06.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n06.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0140    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n07.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n07.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0149    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n08.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n08.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x017F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n09.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n09.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x01c4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n10.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n10.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x01CC    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n100.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n100.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0BB6
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n101.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n101.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0BBA
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n102.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n102.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C0D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n103.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n103.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C11    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n104.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n104.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C29    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n105.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n105.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C34    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n106.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n106.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C5F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n107.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n107.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C62    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n108.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n108.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C8D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n109.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n109.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0C91    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n11.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n11.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x01F1    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n110.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n110.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0CA9    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n111.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n111.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0CB4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n112.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n112.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0CBA    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n113.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n113.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0CDF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n114.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n114.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0CE2    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n115.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n115.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0D0D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n116.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n116.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0D11    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n117.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n117.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0D29    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n118.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n118.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0D3A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n119.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n119.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0D62    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n12.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n12.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x01F3    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n120.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n120.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E2F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n121.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n121.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E31    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n122.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n122.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E34    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n123.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n123.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E46    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n124.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n124.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E83    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n125.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n125.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E85    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n126.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n126.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E89    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n127.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n127.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E8B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n128.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n128.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E8E    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n129.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n129.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0E98    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n13.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n13.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x01F6    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n130.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n130.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EA0    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n131.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n131.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EA4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n132.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n132.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EA6    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n133.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n133.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EA8    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n134.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n134.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EAC    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n135.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n135.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EAF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n136.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n136.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EB1    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n137.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n137.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EB4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n138.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n138.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EBE    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n139.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n139.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0EC5    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n14.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n14.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x01F9    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n140.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n140.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0F48    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n141.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n141.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0F6A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n142.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n142.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x10C6    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n143.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n143.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x10F7    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n144.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n144.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1011    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n145.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n145.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1104    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n146.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n146.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1108    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n147.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n147.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x110A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n148.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n148.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x110D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n149.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n149.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x113B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n15.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n15.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x01F9    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n150.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n150.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x113F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n151.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n151.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1141    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n152.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n152.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x114D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n153.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n153.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x114f    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n154.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n154.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1151    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n155.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n155.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1156    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n156.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n156.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x115A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n157.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n157.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1162    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n158.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n158.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1164    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n159.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n159.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1166    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n16.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n16.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0230    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n160.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n160.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x116B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n161.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n161.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x116F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n162.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n162.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1174    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n163.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n163.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x119F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n164.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n164.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x11AC    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n165.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n165.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x11B6    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n166.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n166.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x11B9    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n167.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n167.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x11BB    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n168.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n168.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x11C3    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n169.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n169.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x11F1    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n17.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n17.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x02AF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n170.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n170.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x11FA    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n171.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n171.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1E9C    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n172.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n172.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1EFA    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n173.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n173.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F16    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n174.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n174.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F1E    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n175.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n175.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F46    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n176.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n176.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F4F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n177.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n177.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F58    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n178.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n178.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F5A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n179.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n179.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F5C    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n18.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n18.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x02CF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n180.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n180.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1F5E    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n181.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n181.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #xF17E    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n182.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n182.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FB5    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n183.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n183.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FBD    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n184.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n184.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FBF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n185.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n185.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FC5    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n186.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n186.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FCD    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n187.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n187.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FD5    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n188.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n188.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FDC    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n189.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n189.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FED    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n19.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n19.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0387    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n190.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n190.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FF5    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n191.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n191.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x1FFD    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n192.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n192.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x2127    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n193.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n193.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x212F    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n194.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n194.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x2183    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n195.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n195.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x3095    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n196.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n196.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x30FB    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n197.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n197.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x312D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n198.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n198.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #xD7A4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+    </TEST>
+  <TEST URI="not-wf/P85/ibm85n20.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n20.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x038B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n21.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n21.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x03A2    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n22.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n22.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x03CF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n23.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n23.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x03D7    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n24.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n24.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x03DD    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n25.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n25.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x03E1    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n26.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n26.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x03F4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n27.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n27.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x040D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n28.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n28.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0450    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n29.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n29.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x045D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n30.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n30.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0482    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n31.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n31.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x04C5    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n32.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n32.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x04C6    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n33.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n33.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x04C9    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n34.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n34.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x04EC    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n35.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n35.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x04ED    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n36.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n36.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x04F6    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n37.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n37.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x04FA    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n38.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n38.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0557    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n39.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n39.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0558    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n40.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n40.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0587    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n41.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n41.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x05EB    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n42.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n42.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x05F3    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n43.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n43.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0620    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n44.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n44.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x063B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n45.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n45.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x064B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n46.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n46.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x06B8    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n47.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n47.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x06BF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n48.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n48.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x06CF    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n49.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n49.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x06D4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n50.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n50.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x06D6    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n51.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n51.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x06E7    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n52.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n52.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x093A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n53.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n53.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x093E    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n54.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n54.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0962    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n55.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n55.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x098D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n56.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n56.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0991    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n57.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n57.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0992    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n58.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n58.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x09A9    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n59.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n59.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x09B1    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n60.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n60.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x09B5    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n61.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n61.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x09BA    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n62.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n62.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x09DE    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n63.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n63.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x09E2    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n64.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n64.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x09F2    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n65.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n65.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A0B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n66.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n66.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A11    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n67.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n67.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A29    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n68.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n68.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A31    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n69.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n69.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A34    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n70.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n70.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A37    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n71.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n71.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A3A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n72.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n72.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A5B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n73.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n73.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A70    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n74.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n74.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A75    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n75.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n75.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n76.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n76.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0ABC    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n77.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n77.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0A92    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n78.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n78.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0AA9    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n79.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n79.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0AB1    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n80.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n80.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0AB4    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n81.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n81.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0ABA    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n82.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n82.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B04    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n83.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n83.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B0D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n84.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n84.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B11    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n85.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n85.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B29    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n86.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n86.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B31    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n87.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n87.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B34    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n88.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n88.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B3A    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n89.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n89.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B3E    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n90.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n90.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B5E    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n91.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n91.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B62    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n92.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n92.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B8B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n93.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n93.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B91    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n94.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n94.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B98    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n95.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n95.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B9B    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n96.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n96.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0B9D    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n97.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n97.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0BA0    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n98.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n98.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0BA7    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P85/ibm85n99.xml" TYPE="not-wf" ID="ibm-not-wf-P85-ibm85n99.xml" ENTITIES="none" SECTIONS="B.">
+    Tests BaseChar with an illegal character. The character #x0BAB    
+    occurs as the first character of the PITarget in the PI in the DTD.  
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 86">
+  <TEST URI="not-wf/P86/ibm86n01.xml" TYPE="not-wf" ID="ibm-not-wf-P86-ibm86n01.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Ideographic with an illegal character. The character #x4CFF    
+    occurs as the first character in the PITarget in the PI in the DTD.  
+</TEST>
+  <TEST URI="not-wf/P86/ibm86n02.xml" TYPE="not-wf" ID="ibm-not-wf-P86-ibm86n02.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Ideographic with an illegal character. The character #x9FA6    
+    occurs as the first character in the PITarget in the PI in the DTD.  
+</TEST>
+  <TEST URI="not-wf/P86/ibm86n03.xml" TYPE="not-wf" ID="ibm-not-wf-P86-ibm86n03.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Ideographic with an illegal character. The character #x3008    
+    occurs as the first character in the PITarget in the PI in the DTD.  
+</TEST>
+  <TEST URI="not-wf/P86/ibm86n04.xml" TYPE="not-wf" ID="ibm-not-wf-P86-ibm86n04.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Ideographic with an illegal character. The character #x302A    
+    occurs as the first character in the PITarget in the PI in the DTD.  
+</TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 87">
+  <TEST URI="not-wf/P87/ibm87n01.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n01.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x02FF    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n02.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n02.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0346    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n03.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n03.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0362    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n04.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n04.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0487    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n05.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n05.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x05A2    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n06.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n06.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x05BA    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n07.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n07.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x05BE    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n08.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n08.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x05C0    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n09.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n09.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x05C3    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n10.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n10.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0653    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n11.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n11.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x06B8    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n12.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n12.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x06B9    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n13.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n13.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x06E9    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n14.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n14.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x06EE    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n15.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n15.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0904    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n16.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n16.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x093B    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n17.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n17.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x094E    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n18.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n18.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0955    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n19.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n19.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0964    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n20.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n20.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0984    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n21.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n21.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x09C5    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n22.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n22.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x09C9    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n23.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n23.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x09CE    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n24.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n24.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x09D8    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n25.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n25.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x09E4    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n26.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n26.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0A03    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n27.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n27.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0A3D    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n28.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n28.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0A46    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n29.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n29.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0A49    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n30.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n30.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0A4E    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n31.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n31.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0A80    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n32.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n32.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0A84    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n33.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n33.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0ABB    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n34.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n34.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0AC6    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n35.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n35.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0ACA    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n36.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n36.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0ACE    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n37.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n37.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0B04    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n38.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n38.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0B3B    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n39.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n39.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0B44    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n40.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n40.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0B4A    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n41.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n41.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0B4E    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n42.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n42.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0B58    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n43.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n43.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0B84    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n44.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n44.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0BC3    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n45.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n45.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0BC9    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n46.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n46.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0BD6    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n47.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n47.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0C0D    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n48.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n48.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0C45    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n49.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n49.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0C49    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n50.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n50.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0C54    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n51.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n51.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0C81    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n52.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n52.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0C84    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n53.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n53.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0CC5    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n54.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n54.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0CC9    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n55.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n55.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0CD4    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n56.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n56.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0CD7    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n57.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n57.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0D04    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n58.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n58.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0D45    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n59.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n59.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0D49    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n60.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n60.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0D4E    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n61.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n61.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0D58    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n62.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n62.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0E3F    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n63.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n63.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0E3B    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n64.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n64.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0E4F    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n66.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n66.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0EBA    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n67.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n67.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0EBE    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n68.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n68.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0ECE    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n69.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n69.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F1A    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n70.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n70.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F36    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n71.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n71.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F38    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n72.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n72.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F3B    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n73.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n73.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F3A    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n74.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n74.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F70    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n75.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n75.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F85    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n76.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n76.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F8C    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n77.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n77.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F96    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n78.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n78.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0F98    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n79.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n79.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0FB0    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n80.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n80.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0FB8    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n81.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n81.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x0FBA    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n82.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n82.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x20DD    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n83.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n83.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x20E2    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n84.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n84.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x3030    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P87/ibm87n85.xml" TYPE="not-wf" ID="ibm-not-wf-P87-ibm87n85.xml" ENTITIES="none" SECTIONS="B.">
+    Tests CombiningChar with an illegal character. The character #x309B    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 88">
+  <TEST URI="not-wf/P88/ibm88n01.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n01.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0029    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n02.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n02.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x003B    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n03.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n03.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x066A    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n04.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n04.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x06FA    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n05.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n05.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0970    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n06.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n06.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x09F2    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n08.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n08.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0AF0    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n09.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n09.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0B70    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n10.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n10.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0C65    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n11.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n11.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0CE5    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n12.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n12.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0CF0    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n13.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n13.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0D70    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n14.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n14.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0E5A    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n15.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n15.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0EDA    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P88/ibm88n16.xml" TYPE="not-wf" ID="ibm-not-wf-P88-ibm88n16.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Digit with an illegal character. The character #x0F2A    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 89">
+  <TEST URI="not-wf/P89/ibm89n01.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n01.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x00B6    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n02.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n02.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x00B8    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n03.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n03.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x02D2    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n04.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n04.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x03FE    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n05.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n05.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x065F    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n06.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n06.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x0EC7    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n07.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n07.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x3006    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n08.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n08.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x3030    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n09.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n09.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x3036    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n10.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n10.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x309C    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n11.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n11.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x309F    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+  <TEST URI="not-wf/P89/ibm89n12.xml" TYPE="not-wf" ID="ibm-not-wf-P89-ibm89n12.xml" ENTITIES="none" SECTIONS="B.">
+    Tests Extender with an illegal character. The character #x30FF    
+    occurs as the second character in the PITarget in the PI in the DTD.  
+  </TEST>
+</TESTCASES>
+
+</TESTCASES>
+
+
+
diff --git a/test/resources/ibm/ibm_oasis_readme.txt b/test/resources/ibm/ibm_oasis_readme.txt
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/ibm_oasis_readme.txt
@@ -0,0 +1,43 @@
+1. Introduction
+
+   This test suite is contributed by the testing team in the IBM Java Technology
+   Center and used for the conformance test on the XML parsers based on XML 1.0
+   Specification.
+  
+2. Test Suite Structure
+
+   This XML conformance test suite consists of 149 valid tests, 51 invalid tests,
+   and 746 not-well-formed tests. The configure files "ibm_oasis_valid.xml", 
+   "ibm_oasis_invalid.xml", and "ibm_oasis_not-wf.xml" are located in a directory
+   called "ibm". All test cases are in the directory tree starting from "ibm" 
+   as shown below: 
+
+                                      ibm                                 
+                _______________________|_______________________
+               |                       |                       |
+             valid                  invalid                  not-wf
+        _______|______           ______|_______          ______|_______
+       |   |          |         |   |          |        |   |          |      
+      P01 P02 ...... P89       P28 P29 ...... P76      P01 P02 ...... P89     
+     __|__
+    |     |
+   out  ibm01v01.xml           ......
+    |
+   ibm01v01.xml 
+
+3. File Naming Style
+
+   The naming for a XML test cases follows the general form ibmXXYZZ.xml where
+   XX is the number of XML production to be tested, Y is the character which 
+   indicates the test type (v: valid, i: invalid, n: not-wf), ZZ is the test 
+   case order number for the same XML production. For instance, ibm85n98.xml 
+   means that it is an IBM not-well-formed test case number 98 for testing XML 
+   production 85.
+
+4. Test Coverage
+
+   The XML test cases are designed based on the test patterns created according
+   to the syntax rules and the WFC/VC constraints specified in each XML 1.0 
+   production. 
+
+                            
diff --git a/test/resources/ibm/ibm_oasis_valid.xml b/test/resources/ibm/ibm_oasis_valid.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/ibm_oasis_valid.xml
@@ -0,0 +1,744 @@
+<!--
+
+ (C) Copyright IBM Corp. 2000  All rights reserved.
+
+ US Government Users Restricted Rights Use, duplication or
+ disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
+
+ The program is provided "as is" without any warranty express or
+ implied, including the warranty of non-infringement and the implied
+ warranties of merchantibility and fitness for a particular purpose.
+ IBM will not be liable for any damages suffered by you as a result
+ of using the Program. In no event will IBM be liable for any
+ special, indirect or consequential damages or lost profits even if
+ IBM has been advised of the possibility of their occurrence. IBM
+ will not be liable for any third party claims against you.
+
+-->
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - valid tests">
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 1">
+  <TEST URI="valid/P01/ibm01v01.xml" TYPE="valid" ID="ibm-valid-P01-ibm01v01.xml" ENTITIES="none" SECTIONS="2.1" OUTPUT="valid/P01/out/ibm01v01.xml">
+    Tests with a xml document consisting of <EM>prolog</EM> followed by 
+    <EM>element</EM> then <EM>Misc</EM> 
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 2">
+  <TEST URI="valid/P02/ibm02v01.xml" TYPE="valid" ID="ibm-valid-P02-ibm02v01.xml" ENTITIES="none" SECTIONS="2.2">
+    Tests <B>Char</B> with 3 characters - 2 boundaries plus 1 in the middle - for
+     each range plus #x20 #x9 #xD #xA
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 3">
+  <TEST URI="valid/P03/ibm03v01.xml" TYPE="valid" ID="ibm-valid-P03-ibm03v01.xml" ENTITIES="none" SECTIONS="2.3">
+    Tests all 4 legal white space characters - #x20 #x9 #xD #xA
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 9">
+  <TEST URI="valid/P09/ibm09v01.xml" TYPE="valid" ID="ibm-valid-P09-ibm09v01.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P09/out/ibm09v01.xml">
+    Empty EntityValue is legal
+  </TEST>
+  <TEST URI="valid/P09/ibm09v02.xml" TYPE="valid" ID="ibm-valid-P09-ibm09v02.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P09/out/ibm09v02.xml">
+    Tests a normal EnitityValue
+  </TEST>
+  <TEST URI="valid/P09/ibm09v03.xml" TYPE="valid" ID="ibm-valid-P09-ibm09v03.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P09/out/ibm09v03.xml">
+    Tests EnitityValue referencing a Parameter Entity
+  </TEST>
+  <TEST URI="valid/P09/ibm09v04.xml" TYPE="valid" ID="ibm-valid-P09-ibm09v04.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P09/out/ibm09v04.xml">
+    Tests EnitityValue referencing a General Entity
+  </TEST>
+  <TEST URI="valid/P09/ibm09v05.xml" TYPE="valid" ID="ibm-valid-P09-ibm09v05.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P09/out/ibm09v05.xml">
+    Tests EnitityValue with combination of GE, PE and text, the GE used is 
+    declared in the student.dtd
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 10">
+  <TEST URI="valid/P10/ibm10v01.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v01.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v01.xml">
+    Tests empty AttValue with double quotes as the delimiters
+</TEST>
+  <TEST URI="valid/P10/ibm10v02.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v02.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v02.xml">
+    Tests empty AttValue with single quotes as the delimiters
+</TEST>
+  <TEST URI="valid/P10/ibm10v03.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v03.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v03.xml">
+    Test AttValue with double quotes as the delimiters and single quote inside
+</TEST>
+  <TEST URI="valid/P10/ibm10v04.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v04.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v04.xml">
+    Test AttValue with single quotes as the delimiters and double quote inside
+</TEST>
+  <TEST URI="valid/P10/ibm10v05.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v05.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v05.xml">
+    Test AttValue with a GE reference and double quotes as the delimiters
+</TEST>
+  <TEST URI="valid/P10/ibm10v06.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v06.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v06.xml">
+    Test AttValue with a GE reference and single quotes as the delimiters
+</TEST>
+  <TEST URI="valid/P10/ibm10v07.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v07.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v07.xml">
+    testing AttValue with mixed references and text content in double quotes
+</TEST>
+  <TEST URI="valid/P10/ibm10v08.xml" TYPE="valid" ID="ibm-valid-P10-ibm10v08.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P10/out/ibm10v08.xml">
+    testing AttValue with mixed references and text content in single quotes
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 11">
+  <TEST URI="valid/P11/ibm11v01.xml" TYPE="valid" ID="ibm-valid-P11-ibm11v01.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P11/out/ibm11v01.xml">
+    Tests empty systemliteral using the double quotes
+</TEST>
+  <TEST URI="valid/P11/ibm11v02.xml" TYPE="valid" ID="ibm-valid-P11-ibm11v02.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P11/out/ibm11v02.xml">
+    Tests empty systemliteral using the single quotes
+</TEST>
+  <TEST URI="valid/P11/ibm11v03.xml" TYPE="valid" ID="ibm-valid-P11-ibm11v03.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P11/out/ibm11v03.xml">
+    Tests regular systemliteral using the single quotes
+</TEST>
+  <TEST URI="valid/P11/ibm11v04.xml" TYPE="valid" ID="ibm-valid-P11-ibm11v04.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P11/out/ibm11v04.xml">
+    Tests regular systemliteral using the double quotes
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 12">
+  <TEST URI="valid/P12/ibm12v01.xml" TYPE="valid" ID="ibm-valid-P12-ibm12v01.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P12/out/ibm12v01.xml">
+    Tests empty systemliteral using the double quotes
+</TEST>
+  <TEST URI="valid/P12/ibm12v02.xml" TYPE="valid" ID="ibm-valid-P12-ibm12v02.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P12/out/ibm12v02.xml">
+    Tests empty systemliteral using the single quotes
+</TEST>
+  <TEST URI="valid/P12/ibm12v03.xml" TYPE="valid" ID="ibm-valid-P12-ibm12v03.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P12/out/ibm12v03.xml">
+    Tests regular systemliteral using the double quotes
+</TEST>
+  <TEST URI="valid/P12/ibm12v04.xml" TYPE="valid" ID="ibm-valid-P12-ibm12v04.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P12/out/ibm12v04.xml">
+    Tests regular systemliteral using the single quotes
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 13">
+  <TEST URI="valid/P13/ibm13v01.xml" TYPE="valid" ID="ibm-valid-P13-ibm13v01.xml" ENTITIES="none" SECTIONS="2.3" OUTPUT="valid/P13/out/ibm13v01.xml">
+    Testing PubidChar with all legal PubidChar in a PubidLiteral  
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 14">
+  <TEST URI="valid/P14/ibm14v01.xml" TYPE="valid" ID="ibm-valid-P14-ibm14v01.xml" ENTITIES="none" SECTIONS="2.4" OUTPUT="valid/P14/out/ibm14v01.xml">
+    Testing CharData with empty string
+</TEST>
+  <TEST URI="valid/P14/ibm14v02.xml" TYPE="valid" ID="ibm-valid-P14-ibm14v02.xml" ENTITIES="none" SECTIONS="2.4" OUTPUT="valid/P14/out/ibm14v02.xml">
+    Testing CharData with white space character
+</TEST>
+  <TEST URI="valid/P14/ibm14v03.xml" TYPE="valid" ID="ibm-valid-P14-ibm14v03.xml" ENTITIES="none" SECTIONS="2.4" OUTPUT="valid/P14/out/ibm14v03.xml">
+    Testing CharData with a general text string
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 15">
+  <TEST URI="valid/P15/ibm15v01.xml" TYPE="valid" ID="ibm-valid-P15-ibm15v01.xml" ENTITIES="none" SECTIONS="2.5" OUTPUT="valid/P15/out/ibm15v01.xml">
+    Tests empty comment
+</TEST>
+  <TEST URI="valid/P15/ibm15v02.xml" TYPE="valid" ID="ibm-valid-P15-ibm15v02.xml" ENTITIES="none" SECTIONS="2.5" OUTPUT="valid/P15/out/ibm15v02.xml">
+    Tests comment with regular text
+</TEST>
+  <TEST URI="valid/P15/ibm15v03.xml" TYPE="valid" ID="ibm-valid-P15-ibm15v03.xml" ENTITIES="none" SECTIONS="2.5" OUTPUT="valid/P15/out/ibm15v03.xml">
+    Tests comment with one dash inside
+</TEST>
+  <TEST URI="valid/P15/ibm15v04.xml" TYPE="valid" ID="ibm-valid-P15-ibm15v04.xml" ENTITIES="none" SECTIONS="2.5" OUTPUT="valid/P15/out/ibm15v04.xml">
+    Tests comment with more comprehensive content
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 16">
+  <TEST URI="valid/P16/ibm16v01.xml" TYPE="valid" ID="ibm-valid-P16-ibm16v01.xml" ENTITIES="none" SECTIONS="2.6" OUTPUT="valid/P16/out/ibm16v01.xml">
+    Tests PI definition with only PItarget name and nothing else
+</TEST>
+  <TEST URI="valid/P16/ibm16v02.xml" TYPE="valid" ID="ibm-valid-P16-ibm16v02.xml" ENTITIES="none" SECTIONS="2.6" OUTPUT="valid/P16/out/ibm16v02.xml">
+    Tests PI definition with only PItarget name and a white space
+</TEST>
+  <TEST URI="valid/P16/ibm16v03.xml" TYPE="valid" ID="ibm-valid-P16-ibm16v03.xml" ENTITIES="none" SECTIONS="2.6" OUTPUT="valid/P16/out/ibm16v03.xml">
+    Tests PI definition with PItarget name and text that contains 
+    question mark and right angle 
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 17">
+  <TEST URI="valid/P17/ibm17v01.xml" TYPE="valid" ID="ibm-valid-P17-ibm17v01.xml" ENTITIES="none" SECTIONS="2.6" OUTPUT="valid/P17/out/ibm17v01.xml">
+    Tests PITarget name
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 18">
+  <TEST URI="valid/P18/ibm18v01.xml" TYPE="valid" ID="ibm-valid-P18-ibm18v01.xml" ENTITIES="none" SECTIONS="2.7" OUTPUT="valid/P18/out/ibm18v01.xml">
+    Tests CDSect with CDStart CData CDEnd
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 19">
+  <TEST URI="valid/P19/ibm19v01.xml" TYPE="valid" ID="ibm-valid-P19-ibm19v01.xml" ENTITIES="none" SECTIONS="2.7" OUTPUT="valid/P19/out/ibm19v01.xml">
+    Tests CDStart
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 20">
+  <TEST URI="valid/P20/ibm20v01.xml" TYPE="valid" ID="ibm-valid-P20-ibm20v01.xml" ENTITIES="none" SECTIONS="2.7" OUTPUT="valid/P20/out/ibm20v01.xml">
+    Tests CDATA with empty string
+</TEST>
+  <TEST URI="valid/P20/ibm20v02.xml" TYPE="valid" ID="ibm-valid-P20-ibm20v02.xml" ENTITIES="none" SECTIONS="2.7" OUTPUT="valid/P20/out/ibm20v02.xml">
+    Tests CDATA with regular content 
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 21">
+  <TEST URI="valid/P21/ibm21v01.xml" TYPE="valid" ID="ibm-valid-P21-ibm21v01.xml" ENTITIES="none" SECTIONS="2.7" OUTPUT="valid/P21/out/ibm21v01.xml">
+    Tests CDEnd
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 22">
+  <TEST URI="valid/P22/ibm22v01.xml" TYPE="valid" ID="ibm-valid-P22-ibm22v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P22/out/ibm22v01.xml">
+    Tests prolog with XMLDecl and doctypedecl
+</TEST>
+  <TEST URI="valid/P22/ibm22v02.xml" TYPE="valid" ID="ibm-valid-P22-ibm22v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P22/out/ibm22v02.xml">
+    Tests prolog with doctypedecl
+</TEST>
+  <TEST URI="valid/P22/ibm22v03.xml" TYPE="valid" ID="ibm-valid-P22-ibm22v03.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P22/out/ibm22v03.xml">
+    Tests prolog with Misc doctypedecl
+</TEST>
+  <TEST URI="valid/P22/ibm22v04.xml" TYPE="valid" ID="ibm-valid-P22-ibm22v04.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P22/out/ibm22v04.xml">
+    Tests prolog with doctypedecl Misc
+</TEST>
+  <TEST URI="valid/P22/ibm22v05.xml" TYPE="valid" ID="ibm-valid-P22-ibm22v05.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P22/out/ibm22v05.xml">
+    Tests prolog with XMLDecl Misc doctypedecl
+</TEST>
+  <TEST URI="valid/P22/ibm22v06.xml" TYPE="valid" ID="ibm-valid-P22-ibm22v06.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P22/out/ibm22v06.xml">
+    Tests prolog with XMLDecl doctypedecl Misc
+</TEST>
+  <TEST URI="valid/P22/ibm22v07.xml" TYPE="valid" ID="ibm-valid-P22-ibm22v07.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P22/out/ibm22v07.xml">
+    Tests prolog with XMLDecl Misc doctypedecl Misc
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 23">
+  <TEST URI="valid/P23/ibm23v01.xml" TYPE="valid" ID="ibm-valid-P23-ibm23v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P23/out/ibm23v01.xml">
+    Tests XMLDecl with VersionInfo only
+</TEST>
+  <TEST URI="valid/P23/ibm23v02.xml" TYPE="valid" ID="ibm-valid-P23-ibm23v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P23/out/ibm23v02.xml">
+    Tests XMLDecl with VersionInfo EncodingDecl
+</TEST>
+  <TEST URI="valid/P23/ibm23v03.xml" TYPE="valid" ID="ibm-valid-P23-ibm23v03.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P23/out/ibm23v03.xml">
+    Tests XMLDecl with VersionInfo SDDecl
+</TEST>
+  <TEST URI="valid/P23/ibm23v04.xml" TYPE="valid" ID="ibm-valid-P23-ibm23v04.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P23/out/ibm23v04.xml">
+    Tests XMLDecl with VerstionInfo and a trailing whitespace char
+</TEST>
+  <TEST URI="valid/P23/ibm23v05.xml" TYPE="valid" ID="ibm-valid-P23-ibm23v05.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P23/out/ibm23v05.xml">
+    Tests XMLDecl with VersionInfo EncodingDecl SDDecl
+</TEST>
+  <TEST URI="valid/P23/ibm23v06.xml" TYPE="valid" ID="ibm-valid-P23-ibm23v06.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P23/out/ibm23v06.xml">
+    Tests XMLDecl with VersionInfo EncodingDecl SDDecl and a trailing whitespace
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 24">
+  <TEST URI="valid/P24/ibm24v01.xml" TYPE="valid" ID="ibm-valid-P24-ibm24v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P24/out/ibm24v01.xml">
+    Tests VersionInfo with single quote
+</TEST>
+  <TEST URI="valid/P24/ibm24v02.xml" TYPE="valid" ID="ibm-valid-P24-ibm24v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P24/out/ibm24v02.xml">
+    Tests VersionInfo with double quote
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 25">
+  <TEST URI="valid/P25/ibm25v01.xml" TYPE="valid" ID="ibm-valid-P25-ibm25v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P25/out/ibm25v01.xml">
+    Tests EQ with =
+</TEST>
+  <TEST URI="valid/P25/ibm25v02.xml" TYPE="valid" ID="ibm-valid-P25-ibm25v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P25/out/ibm25v02.xml">
+    Tests EQ with = and spaces on both sides
+</TEST>
+  <TEST URI="valid/P25/ibm25v03.xml" TYPE="valid" ID="ibm-valid-P25-ibm25v03.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P25/out/ibm25v03.xml">
+    Tests EQ with = and space in front of it
+</TEST>
+  <TEST URI="valid/P25/ibm25v04.xml" TYPE="valid" ID="ibm-valid-P25-ibm25v04.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P25/out/ibm25v04.xml">
+    Tests EQ with = and space after it
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 26">
+  <TEST URI="valid/P26/ibm26v01.xml" TYPE="valid" ID="ibm-valid-P26-ibm26v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P26/out/ibm26v01.xml">
+    Tests VersionNum 1.0
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 27">
+  <TEST URI="valid/P27/ibm27v01.xml" TYPE="valid" ID="ibm-valid-P27-ibm27v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P27/out/ibm27v01.xml">
+    Tests Misc with comment
+</TEST>
+  <TEST URI="valid/P27/ibm27v02.xml" TYPE="valid" ID="ibm-valid-P27-ibm27v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P27/out/ibm27v02.xml">
+    Tests Misc with PI
+</TEST>
+  <TEST URI="valid/P27/ibm27v03.xml" TYPE="valid" ID="ibm-valid-P27-ibm27v03.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P27/out/ibm27v03.xml">
+    Tests Misc with white spaces
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 28">
+  <TEST URI="valid/P28/ibm28v01.xml" TYPE="valid" ID="ibm-valid-P28-ibm28v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P28/out/ibm28v01.xml">
+    Tests doctypedecl with internal DTD only
+</TEST>
+  <TEST URI="valid/P28/ibm28v02.xml" TYPE="valid" ID="ibm-valid-P28-ibm28v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P28/out/ibm28v02.xml">
+    Tests doctypedecl with external subset and combinations of different markup
+    declarations and PEReferences
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 29">
+  <TEST URI="valid/P29/ibm29v01.xml" TYPE="valid" ID="ibm-valid-P29-ibm29v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P29/out/ibm29v01.xml">
+    Tests markupdecl with combinations of elementdecl, AttlistDecl,EntityDecl, 
+    NotationDecl, PI and comment
+</TEST>
+  <TEST URI="valid/P29/ibm29v02.xml" TYPE="valid" ID="ibm-valid-P29-ibm29v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P29/out/ibm29v02.xml">
+    Tests WFC: PE in internal subset as a positive test
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 30">
+  <TEST URI="valid/P30/ibm30v01.xml" TYPE="valid" ID="ibm-valid-P30-ibm30v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P30/out/ibm30v01.xml">
+    Tests extSubset with extSubsetDecl only in the dtd file
+</TEST>
+  <TEST URI="valid/P30/ibm30v02.xml" TYPE="valid" ID="ibm-valid-P30-ibm30v02.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P30/out/ibm30v02.xml">
+    Tests extSubset with TextDecl and extSubsetDecl in the dtd file
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 31">
+  <TEST URI="valid/P31/ibm31v01.xml" TYPE="valid" ID="ibm-valid-P31-ibm31v01.xml" ENTITIES="none" SECTIONS="2.8" OUTPUT="valid/P31/out/ibm31v01.xml">
+    Tests extSubsetDecl with combinations of markupdecls, conditionalSects, 
+    PEReferences and white spaces
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 32">
+  <TEST URI="valid/P32/ibm32v01.xml" TYPE="valid" ID="ibm-valid-P32-ibm32v01.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="valid/P32/out/ibm32v01.xml">
+    Tests VC: Standalone Document Declaration with absent attribute that 
+    has default value and standalone is no
+</TEST>
+  <TEST URI="valid/P32/ibm32v02.xml" TYPE="valid" ID="ibm-valid-P32-ibm32v02.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="valid/P32/out/ibm32v02.xml">
+    Tests VC: Standalone Document Declaration with external entity reference
+    and standalone is no
+</TEST>
+  <TEST URI="valid/P32/ibm32v03.xml" TYPE="valid" ID="ibm-valid-P32-ibm32v03.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="valid/P32/out/ibm32v03.xml">
+    Tests VC: Standalone Document Declaration with attribute values that need
+    to be normalized and standalone is no
+</TEST>
+  <TEST URI="valid/P32/ibm32v04.xml" TYPE="valid" ID="ibm-valid-P32-ibm32v04.xml" ENTITIES="none" SECTIONS="2.9" OUTPUT="valid/P32/out/ibm32v04.xml">
+    Tests VC: Standalone Document Declaration with whitespace in mixed content
+    and standalone is no
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 33">
+  <TEST URI="valid/P33/ibm33v01.xml" TYPE="valid" ID="ibm-valid-P33-ibm33v01.xml" ENTITIES="none" SECTIONS="2.12" OUTPUT="valid/P33/out/ibm33v01.xml">
+    Tests LanguageID with Langcode - Subcode
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 34">
+  <TEST URI="valid/P34/ibm34v01.xml" TYPE="valid" ID="ibm-valid-P34-ibm34v01.xml" ENTITIES="none" SECTIONS="2.12" OUTPUT="valid/P34/out/ibm34v01.xml">
+    Duplicate Test as ibm33v01.xml
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 35">
+  <TEST URI="valid/P35/ibm35v01.xml" TYPE="valid" ID="ibm-valid-P35-ibm35v01.xml" ENTITIES="none" SECTIONS="2.12" OUTPUT="valid/P35/out/ibm35v01.xml">
+    Tests ISO639Code
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 36">
+  <TEST URI="valid/P36/ibm36v01.xml" TYPE="valid" ID="ibm-valid-P36-ibm36v01.xml" ENTITIES="none" SECTIONS="2.12" OUTPUT="valid/P36/out/ibm36v01.xml">
+    Tests IanaCode
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 37">
+  <TEST URI="valid/P37/ibm37v01.xml" TYPE="valid" ID="ibm-valid-P37-ibm37v01.xml" ENTITIES="none" SECTIONS="2.12" OUTPUT="valid/P37/out/ibm37v01.xml">
+    Tests UserCode
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 38">
+  <TEST URI="valid/P38/ibm38v01.xml" TYPE="valid" ID="ibm-valid-P38-ibm38v01.xml" ENTITIES="none" SECTIONS="2.12" OUTPUT="valid/P38/out/ibm38v01.xml">
+    Tests SubCode
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 39">
+  <TEST URI="valid/P39/ibm39v01.xml" TYPE="valid" ID="ibm-valid-P39-ibm39v01.xml" ENTITIES="none" SECTIONS="3" OUTPUT="valid/P39/out/ibm39v01.xml">
+    Tests element with EmptyElemTag and STag content Etag, also tests the 
+    VC: Element Valid with elements that have children, Mixed and ANY 
+    contents
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 40">
+  <TEST URI="valid/P40/ibm40v01.xml" TYPE="valid" ID="ibm-valid-P40-ibm40v01.xml" ENTITIES="none" SECTIONS="3.1" OUTPUT="valid/P40/out/ibm40v01.xml">
+    Tests STag with possible combinations of its fields, also tests WFC:
+    Unique Att Spec.
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 41">
+  <TEST URI="valid/P41/ibm41v01.xml" TYPE="valid" ID="ibm-valid-P41-ibm41v01.xml" ENTITIES="none" SECTIONS="3.1" OUTPUT="valid/P41/out/ibm41v01.xml">
+    Tests Attribute with Name Eq AttValue and VC: Attribute Value Type
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 42">
+  <TEST URI="valid/P42/ibm42v01.xml" TYPE="valid" ID="ibm-valid-P42-ibm42v01.xml" ENTITIES="none" SECTIONS="3.1" OUTPUT="valid/P42/out/ibm42v01.xml">
+    Tests ETag with possible combinations of its fields
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 43">
+  <TEST URI="valid/P43/ibm43v01.xml" TYPE="valid" ID="ibm-valid-P43-ibm43v01.xml" ENTITIES="none" SECTIONS="3.1" OUTPUT="valid/P43/out/ibm43v01.xml">
+    Tests content with all possible constructs: element, CharData, Reference, 
+    CDSect, Comment
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 44">
+  <TEST URI="valid/P44/ibm44v01.xml" TYPE="valid" ID="ibm-valid-P44-ibm44v01.xml" ENTITIES="none" SECTIONS="3.1" OUTPUT="valid/P44/out/ibm44v01.xml">
+    Tests EmptyElemTag with possible combinations of its fields
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 45">
+  <TEST URI="valid/P45/ibm45v01.xml" TYPE="valid" ID="ibm-valid-P45-ibm45v01.xml" ENTITIES="none" SECTIONS="3.2" OUTPUT="valid/P45/out/ibm45v01.xml">
+    Tests both P45 elementDecl and P46 contentspec with possible combinations 
+    of their constructs
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 47">
+  <TEST URI="valid/P47/ibm47v01.xml" TYPE="valid" ID="ibm-valid-P47-ibm47v01.xml" ENTITIES="none" SECTIONS="3.2.1" OUTPUT="valid/P47/out/ibm47v01.xml">
+    Tests all possible children,cp,choice,seq patterns in P47,P48,P49,P50
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 49">
+  <TEST URI="valid/P49/ibm49v01.xml" TYPE="valid" ID="ibm-valid-P49-ibm49v01.xml" ENTITIES="none" SECTIONS="3.2.1" OUTPUT="valid/P49/out/ibm49v01.xml">
+    Tests VC:Proper Group/PE Nesting with PEs of choices that are properly nested
+    with parenthesized groups in external subsets
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 50">
+  <TEST URI="valid/P50/ibm50v01.xml" TYPE="valid" ID="ibm-valid-P50-ibm50v01.xml" ENTITIES="none" SECTIONS="3.2.1" OUTPUT="valid/P50/out/ibm50v01.xml">
+    Tests VC:Proper Group/PE Nesting with PEs of seq that are properly nested
+    with parenthesized groups in external subsets
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 51">
+  <TEST URI="valid/P51/ibm51v01.xml" TYPE="valid" ID="ibm-valid-P51-ibm51v01.xml" ENTITIES="none" SECTIONS="3.2.2" OUTPUT="valid/P51/out/ibm51v01.xml">
+    Tests Mixed with possible combinations of its fields amd VC: No 
+    Duplicate Types
+</TEST>
+  <TEST URI="valid/P51/ibm51v02.xml" TYPE="valid" ID="ibm-valid-P51-ibm51v02.xml" ENTITIES="none" SECTIONS="3.2.2" OUTPUT="valid/P51/out/ibm51v02.xml">
+    Tests VC:Proper Group/PE Nesting with PEs of Mixed that are properly nested
+    with parenthesized groups in external subsets
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 52">
+  <TEST URI="valid/P52/ibm52v01.xml" TYPE="valid" ID="ibm-valid-P52-ibm52v01.xml" ENTITIES="none" SECTIONS="3.3" OUTPUT="valid/P52/out/ibm52v01.xml">
+    Tests all AttlistDecl and AttDef Patterns in P52 and P53
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 54">
+  <TEST URI="valid/P54/ibm54v01.xml" TYPE="valid" ID="ibm-valid-P54-ibm54v01.xml" ENTITIES="none" SECTIONS="3.3.1">
+    Tests all AttTypes : StringType, TokenizedTypes, EnumeratedTypes in 
+    P55,P56,P57,P58,P59.  Also tests all DefaultDecls in P60.
+  </TEST>
+  <TEST URI="valid/P54/ibm54v02.xml" TYPE="valid" ID="ibm-valid-P54-ibm54v02.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P54/out/ibm54v02.xml">
+    Tests all AttTypes : StringType, TokenizedType, EnumeratedTypes in 
+    P55,P56,P57.
+  </TEST>
+  <TEST URI="valid/P54/ibm54v03.xml" TYPE="valid" ID="ibm-valid-P54-ibm54v03.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P54/out/ibm54v03.xml">
+    Tests AttTypes with StringType in P55.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 55">
+  <TEST URI="valid/P55/ibm55v01.xml" TYPE="valid" ID="ibm-valid-P55-ibm55v01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P55/out/ibm55v01.xml">
+    Tests StringType for P55. The "CDATA" occurs in the StringType for the 
+    attribute "att" for the element "a".
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 56">
+  <TEST URI="valid/P56/ibm56v01.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v01.xml">
+    Tests TokenizedType for P56. The "ID", "IDREF", "IDREFS", "ENTITY", 
+    "ENTITIES", "NMTOKEN", and "NMTOKENS" occur in the TokenizedType for the
+    attribute "attr". 
+  </TEST>
+  <TEST URI="valid/P56/ibm56v02.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v02.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v02.xml">
+    Tests TokenizedType for P56 VC: ID Attribute Default. The value "AC1999" is 
+    assigned to the ID attribute "attr" with "#REQUIRED" in the DeaultDecl. 
+  </TEST>
+  <TEST URI="valid/P56/ibm56v03.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v03.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v03.xml">
+    Tests TokenizedType for P56 VC: ID Attribute Default. The value "AC1999" is 
+    assigned to the ID attribute "attr" with "#IMPLIED" in the DeaultDecl. 
+  </TEST>
+  <TEST URI="valid/P56/ibm56v04.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v04.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v04.xml">
+    Tests TokenizedType for P56 VC: ID. The ID attribute "UniqueName" appears
+    only once in the document. 
+  </TEST>
+  <TEST URI="valid/P56/ibm56v05.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v05.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v05.xml">
+    Tests TokenizedType for P56 VC: One ID per element type. The element "a" or 
+    "b" has only one ID attribute.
+  </TEST>
+  <TEST URI="valid/P56/ibm56v06.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v06.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v06.xml">
+    Tests TokenizedType for P56 VC: IDREF. The IDREF value "AC456" matches the 
+    value assigned to an ID attribute "UniqueName".
+  </TEST>
+  <TEST URI="valid/P56/ibm56v07.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v07.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v07.xml">
+    Tests TokenizedType for P56 VC: IDREF. The IDREFS value "AC456 Q123" matches 
+    the values assigned to the ID attribute "UniqueName" and "Uname".
+  </TEST>
+  <TEST URI="valid/P56/ibm56v08.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v08.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v08.xml">
+    Tests TokenizedType for P56 VC: Entity Name. The value "image" of the ENTITY 
+    attribute "sun" matches the name of an unparsed entity declared.  
+  </TEST>
+  <TEST URI="valid/P56/ibm56v09.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v09.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v09.xml">
+    Tests TokenizedType for P56 VC: Name Token. The value of the NMTOKEN attribute
+    "thistoken" matches the Nmtoken production.
+  </TEST>
+  <TEST URI="valid/P56/ibm56v10.xml" TYPE="valid" ID="ibm-valid-P56-ibm56v10.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P56/out/ibm56v10.xml">
+    Tests TokenizedType for P56 VC: Name Token. The value of the NMTOKENS 
+    attribute "thistoken" matches the Nmtoken production.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 57">
+  <TEST URI="valid/P57/ibm57v01.xml" TYPE="valid" ID="ibm-valid-P57-ibm57v01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P57/out/ibm57v01.xml">
+    Tests EnumeratedType in the AttType. The attribute "att" has a type (a|b) 
+    with the element "a".
+    the 
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 58">
+  <TEST URI="valid/P58/ibm58v01.xml" TYPE="valid" ID="ibm-valid-P58-ibm58v01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P58/out/ibm58v01.xml">
+    Tests NotationType for P58. It shows different patterns fro the NOTATION 
+    attribute "attr".
+  </TEST>
+  <TEST URI="valid/P58/ibm58v02.xml" TYPE="valid" ID="ibm-valid-P58-ibm58v02.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P58/out/ibm58v02.xml">
+    Tests NotationType for P58: Notation Attributes. The value "base64" of the 
+    NOTATION attribute "attr" matches one of the notation names declared.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 59">
+  <TEST URI="valid/P59/ibm59v01.xml" TYPE="valid" ID="ibm-valid-P59-ibm59v01.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P59/out/ibm59v01.xml">
+    Tests Enumeration in the EnumeratedType for P59. It shows different 
+    patterns for the Enumeration attribute "attr".
+  </TEST>
+  <TEST URI="valid/P59/ibm59v02.xml" TYPE="valid" ID="ibm-valid-P59-ibm59v02.xml" ENTITIES="none" SECTIONS="3.3.1" OUTPUT="valid/P59/out/ibm59v02.xml">
+    Tests Enumeration for P59 VC: Enumeration. The value "one" of the 
+    Enumeration attribute "attr" matches one of the element names declared.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 60">
+  <TEST URI="valid/P60/ibm60v01.xml" TYPE="valid" ID="ibm-valid-P60-ibm60v01.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="valid/P60/out/ibm60v01.xml">
+    Tests DefaultDecl for P60. It shows different options "#REQUIRED", "#FIXED",
+    "#IMPLIED", and default for the attribute "chapter". 
+  </TEST>
+  <TEST URI="valid/P60/ibm60v02.xml" TYPE="valid" ID="ibm-valid-P60-ibm60v02.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="valid/P60/out/ibm60v02.xml">
+    Tests DefaultDecl for P60 VC: Required Attribute. In the element "one" and
+    "two" the value of the #REQUIRED attribute "chapter" is given.
+  </TEST>
+  <TEST URI="valid/P60/ibm60v03.xml" TYPE="valid" ID="ibm-valid-P60-ibm60v03.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="valid/P60/out/ibm60v03.xml">
+    Tests DefaultDecl for P60 VC: Fixed Attribute Default. The value of the 
+    #FIXED attribute "chapter" is exactly the same as the default value.
+  </TEST>
+  <TEST URI="valid/P60/ibm60v04.xml" TYPE="valid" ID="ibm-valid-P60-ibm60v04.xml" ENTITIES="none" SECTIONS="3.3.2" OUTPUT="valid/P60/out/ibm60v04.xml">
+    Tests DefaultDecl for P60 VC: Attribute Default Legal. The default value 
+    specified for the attribute "attr" meets the lexical constraints of the 
+    declared attribute type.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 61">
+  <TEST URI="valid/P61/ibm61v01.xml" TYPE="valid" ID="ibm-valid-P61-ibm61v01.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P61/out/ibm61v01.xml">
+    Tests conditionalSect for P61. It takes the option "invludeSect" in the file
+    ibm61v01.dtd.
+  </TEST>
+  <TEST URI="valid/P61/ibm61v02.xml" TYPE="valid" ID="ibm-valid-P61-ibm61v02.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P61/out/ibm61v02.xml">
+    Tests conditionalSect for P61. It takes the option "ignoreSect" in the file
+    ibm61v02.dtd.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 62">
+  <TEST URI="valid/P62/ibm62v01.xml" TYPE="valid" ID="ibm-valid-P62-ibm62v01.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P62/out/ibm62v01.xml">
+    Tests includeSect for P62. The white space is not included before the key
+    word "INCLUDE" in the beginning sequence.
+  </TEST>
+  <TEST URI="valid/P62/ibm62v02.xml" TYPE="valid" ID="ibm-valid-P62-ibm62v02.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P62/out/ibm62v02.xml">
+    Tests includeSect for P62. The white space is not included after the key
+    word "INCLUDE" in the beginning sequence.
+  </TEST>
+  <TEST URI="valid/P62/ibm62v03.xml" TYPE="valid" ID="ibm-valid-P62-ibm62v03.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P62/out/ibm62v03.xml">
+    Tests includeSect for P62. The white space is included after the key
+    word "INCLUDE" in the beginning sequence.
+  </TEST>
+  <TEST URI="valid/P62/ibm62v04.xml" TYPE="valid" ID="ibm-valid-P62-ibm62v04.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P62/out/ibm62v04.xml">
+    Tests includeSect for P62. The white space is included before the key
+    word "INCLUDE" in the beginning sequence.
+  </TEST>
+  <TEST URI="valid/P62/ibm62v05.xml" TYPE="valid" ID="ibm-valid-P62-ibm62v05.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P62/out/ibm62v05.xml">
+    Tests includeSect for P62. The extSubsetDecl is not included.
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 63">
+  <TEST URI="valid/P63/ibm63v01.xml" TYPE="valid" ID="ibm-valid-P63-ibm63v01.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P63/out/ibm63v01.xml">
+    Tests ignoreSect for P63. The white space is not included before the key
+    word "IGNORE" in the beginning sequence.
+  </TEST>
+  <TEST URI="valid/P63/ibm63v02.xml" TYPE="valid" ID="ibm-valid-P63-ibm63v02.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P63/out/ibm63v02.xml">
+    Tests ignoreSect for P63. The white space is not included after the key
+    word "IGNORE" in the beginning sequence.
+  </TEST>
+  <TEST URI="valid/P63/ibm63v03.xml" TYPE="valid" ID="ibm-valid-P63-ibm63v03.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P63/out/ibm63v03.xml">
+    Tests ignoreSect for P63. The white space is included after the key
+    word "IGNORE" in the beginning sequence.
+  </TEST>
+  <TEST URI="valid/P63/ibm63v04.xml" TYPE="valid" ID="ibm-valid-P63-ibm63v04.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P63/out/ibm63v04.xml">
+    Tests ignoreSect for P63. The ignireSectContents is included.
+  </TEST>
+  <TEST URI="valid/P63/ibm63v05.xml" TYPE="valid" ID="ibm-valid-P63-ibm63v05.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P63/out/ibm63v05.xml">
+    Tests ignoreSect for P63. The white space is included before and after  the 
+    key word "IGNORE" in the beginning sequence. 
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 64">
+  <TEST URI="valid/P64/ibm64v01.xml" TYPE="valid" ID="ibm-valid-P64-ibm64v01.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P64/out/ibm64v01.xml">
+    Tests ignoreSectContents for P64. One "ignore" field is included. 
+  </TEST>
+  <TEST URI="valid/P64/ibm64v02.xml" TYPE="valid" ID="ibm-valid-P64-ibm64v02.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P64/out/ibm64v02.xml">
+    Tests ignoreSectContents for P64. Two "ignore" and one "ignoreSectContents"
+    fields are included. 
+  </TEST>
+  <TEST URI="valid/P64/ibm64v03.xml" TYPE="valid" ID="ibm-valid-P64-ibm64v03.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P64/out/ibm64v03.xml">
+    Tests ignoreSectContents for P64. Four "ignore" and three 
+    "ignoreSectContents" fields are included. 
+  </TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 65">
+  <TEST URI="valid/P65/ibm65v01.xml" TYPE="valid" ID="ibm-valid-P65-ibm65v01.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P65/out/ibm65v01.xml">
+    Tests Ignore for P65. An empty string occurs in the Ignore filed.
+  </TEST>
+  <TEST URI="valid/P65/ibm65v02.xml" TYPE="valid" ID="ibm-valid-P65-ibm65v02.xml" ENTITIES="none" SECTIONS="3.4" OUTPUT="valid/P65/out/ibm65v02.xml">
+    Tests Ignore for P65. An string not including the brackets occurs in each of
+    the Ignore filed.
+  </TEST>
+</TESTCASES>
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 66">
+  <TEST URI="valid/P66/ibm66v01.xml" TYPE="valid" ID="ibm-valid-P66-ibm66v01.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="valid/P66/out/ibm66v01.xml">
+    Tests all legal CharRef's. 
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 67">
+  <TEST URI="valid/P67/ibm67v01.xml" TYPE="valid" ID="ibm-valid-P67-ibm67v01.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="valid/P67/out/ibm67v01.xml">
+    Tests Reference could be EntityRef or CharRef.
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 68">
+  <TEST URI="valid/P68/ibm68v01.xml" TYPE="valid" ID="ibm-valid-P68-ibm68v01.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="valid/P68/out/ibm68v01.xml">
+    Tests P68 VC:Entity Declared with Entities in External Subset
+    , standalone is no
+</TEST>
+  <TEST URI="valid/P68/ibm68v02.xml" TYPE="valid" ID="ibm-valid-P68-ibm68v02.xml" ENTITIES="general" SECTIONS="4.1" OUTPUT="valid/P68/out/ibm68v02.xml">
+    Tests P68 VC:Entity Declared with Entities in External Parameter Entities
+    , standalone is no
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 69">
+  <TEST URI="valid/P69/ibm69v01.xml" TYPE="valid" ID="ibm-valid-P69-ibm69v01.xml" ENTITIES="none" SECTIONS="4.1" OUTPUT="valid/P69/out/ibm69v01.xml">
+    Tests P68 VC:Entity Declared with Parameter Entities in External Subset
+    , standalone is no
+</TEST>
+  <TEST URI="valid/P69/ibm69v02.xml" TYPE="valid" ID="ibm-valid-P69-ibm69v02.xml" ENTITIES="both" SECTIONS="4.1" OUTPUT="valid/P69/out/ibm69v02.xml">
+    Tests P68 VC:Entity Declared with Parameter Entities in External Parameter
+    Entities, standalone is no
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 70">
+  <TEST URI="valid/P70/ibm70v01.xml" TYPE="valid" ID="ibm-valid-P70-ibm70v01.xml" ENTITIES="none" SECTIONS="4.2" OUTPUT="valid/P70/out/ibm70v01.xml">
+    Tests all legal GEDecls and PEDecls constructs derived from P70-76 
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 78">
+  <TEST URI="valid/P78/ibm78v01.xml" TYPE="valid" ID="ibm-valid-P78-ibm78v01.xml" ENTITIES="none" SECTIONS="4.3.2" OUTPUT="valid/P78/out/ibm78v01.xml">
+    Tests ExtParsedEnt, also TextDecl in P77 and EncodingDecl in P80
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 79">
+  <TEST URI="valid/P79/ibm79v01.xml" TYPE="valid" ID="ibm-valid-P79-ibm79v01.xml" ENTITIES="none" SECTIONS="4.3.2">
+    Tests extPE
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 82">
+  <TEST URI="valid/P82/ibm82v01.xml" TYPE="valid" ID="ibm-valid-P82-ibm82v01.xml" ENTITIES="none" SECTIONS="4.7" OUTPUT="valid/P82/out/ibm82v01.xml">
+    Tests NotationDecl in P82 and PublicID in P83 
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 85">
+  <TEST URI="valid/P85/ibm85v01.xml" TYPE="valid" ID="ibm-valid-P85-ibm85v01.xml" ENTITIES="none" SECTIONS="B.">
+    This test case covers 149 legal character ranges plus 51 single legal 
+    characters for BaseChar in P85 using a PI target Name
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 86">
+  <TEST URI="valid/P86/ibm86v01.xml" TYPE="valid" ID="ibm-valid-P86-ibm86v01.xml" ENTITIES="none" SECTIONS="B.">
+    This test case covers 2 legal character ranges plus 1 single legal 
+    characters for IdeoGraphic in P86 using a PI target Name
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 87">
+  <TEST URI="valid/P87/ibm87v01.xml" TYPE="valid" ID="ibm-valid-P87-ibm87v01.xml" ENTITIES="none" SECTIONS="B.">
+    This test case covers 65 legal character ranges plus 30 single legal 
+    characters for CombiningChar in P87 using a PI target Name
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 88">
+  <TEST URI="valid/P88/ibm88v01.xml" TYPE="valid" ID="ibm-valid-P88-ibm88v01.xml" ENTITIES="none" SECTIONS="B.">
+    This test case covers 15 legal character ranges for Digit in P88 using a PI
+    target Name
+</TEST>
+</TESTCASES>
+
+<TESTCASES PROFILE="IBM XML Conformance Test Suite - Production 89">
+  <TEST URI="valid/P89/ibm89v01.xml" TYPE="valid" ID="ibm-valid-P89-ibm89v01.xml" ENTITIES="none" SECTIONS="B.">
+    This test case covers 3 legal character ranges plus 8 single legal 
+    characters for Extender in P89 using a PI target Name
+</TEST>
+</TESTCASES>
+
+</TESTCASES>
diff --git a/test/resources/ibm/invalid/P28/ibm28i01.xml b/test/resources/ibm/invalid/P28/ibm28i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P28/ibm28i01.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE tiger [
+   <!ELEMENT tiger EMPTY>
+]>
+<!-- This against VC of P28. The Name in the document type declaration
+ does not match the element type of the root element. --> 
+<animal/>
diff --git a/test/resources/ibm/invalid/P28/out/ibm28i01.xml b/test/resources/ibm/invalid/P28/out/ibm28i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P28/out/ibm28i01.xml
@@ -0,0 +1,1 @@
+<animal></animal>
diff --git a/test/resources/ibm/invalid/P29/ibm29i01.dtd b/test/resources/ibm/invalid/P29/ibm29i01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P29/ibm29i01.dtd
@@ -0,0 +1,6 @@
+   <!ENTITY % make_leopard_element "<!ELEMENT leopard ">
+   %make_leopard_element;ANY>
+   <!-- This is against VC: Proper Declaration/PE Nesting in 
+    production [29]. In this file, Only one of the first character
+    and the last character of a markup declaration is contained 
+    in the same parameter-entity text replacement.-->
diff --git a/test/resources/ibm/invalid/P29/ibm29i01.xml b/test/resources/ibm/invalid/P29/ibm29i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P29/ibm29i01.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="us-ascii" ?>
+<!DOCTYPE animal SYSTEM "ibm29i01.dtd" [
+   <!ELEMENT animal (cat|tiger|leopard)+>
+   <!NOTATION animal_class SYSTEM "ibm29v01.txt">
+   <!ELEMENT cat ANY>
+   <!ENTITY forcat "This is a small cat">
+   <!ELEMENT tiger (#PCDATA)>
+   <!ELEMENT small EMPTY>
+   <!ELEMENT big EMPTY>
+   <!ATTLIST tiger color CDATA #REQUIRED>
+   <?sound "This is a PI" ?>
+   <!-- This is a comment -->
+]>
+<animal>
+   <cat>&forcat;</cat>
+   <tiger color="white">This is a white tiger in Mirage!!</tiger>
+   <cat/>
+   <leopard>
+      <small/>
+      <big/>
+   </leopard>
+</animal>
diff --git a/test/resources/ibm/invalid/P29/ibm29i01.xml.incorrect b/test/resources/ibm/invalid/P29/ibm29i01.xml.incorrect
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P29/ibm29i01.xml.incorrect
@@ -0,0 +1,1 @@
+Incorrect because of bad entity ref; we don't parse internal DTD subsets.
diff --git a/test/resources/ibm/invalid/P29/out/ibm29i01.xml b/test/resources/ibm/invalid/P29/out/ibm29i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P29/out/ibm29i01.xml
@@ -0,0 +1,4 @@
+<?sound "This is a PI" ?><!DOCTYPE animal [
+<!NOTATION animal_class SYSTEM 'ibm29v01.txt'>
+]>
+<animal>&#10;   <cat>This is a small cat</cat>&#10;   <tiger color="white">This is a white tiger in Mirage!!</tiger>&#10;   <cat></cat>&#10;   <leopard>&#10;      <small></small>&#10;      <big></big>&#10;   </leopard>&#10;</animal>
diff --git a/test/resources/ibm/invalid/P32/ibm32i01.dtd b/test/resources/ibm/invalid/P32/ibm32i01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i01.dtd
@@ -0,0 +1,1 @@
+<!ATTLIST animal color CDATA #FIXED "yellow">
diff --git a/test/resources/ibm/invalid/P32/ibm32i01.xml b/test/resources/ibm/invalid/P32/ibm32i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="yes" ?>
+<!DOCTYPE animal SYSTEM "ibm32i01.dtd" [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- This is against VC: Standalone Document Declaration in P32
+ The standalone document declaration has the value "yes", there is an external 
+ markup declaration of attributes with default values, and the associated 
+ element appears in the document with specified values for those attributes.   
+-->
+<animal/>
diff --git a/test/resources/ibm/invalid/P32/ibm32i02.dtd b/test/resources/ibm/invalid/P32/ibm32i02.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i02.dtd
@@ -0,0 +1,1 @@
+<!ENTITY animal_content "This is a yellow tiger">
diff --git a/test/resources/ibm/invalid/P32/ibm32i02.xml b/test/resources/ibm/invalid/P32/ibm32i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i02.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" standalone="yes" ?>
+<!DOCTYPE animal SYSTEM "ibm32i02.dtd" [
+   <!ELEMENT animal (#PCDATA)>
+]>
+<!-- This is against VC: Standalone Document Declaration in P3
+ The standalone document declaration has the value "yes", there is an 
+ external markup declaration of an entity (other than amp, lt, gt, apos, quot), and references to this entity appear in the document. 
+-->
+<animal>&animal_content;</animal>
diff --git a/test/resources/ibm/invalid/P32/ibm32i02.xml.incorrect b/test/resources/ibm/invalid/P32/ibm32i02.xml.incorrect
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i02.xml.incorrect
@@ -0,0 +1,1 @@
+Incorrect because of bad entity ref; we don't parse internal DTD subsets.
diff --git a/test/resources/ibm/invalid/P32/ibm32i03.dtd b/test/resources/ibm/invalid/P32/ibm32i03.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i03.dtd
@@ -0,0 +1,1 @@
+<!ATTLIST animal class NMTOKEN #IMPLIED>
diff --git a/test/resources/ibm/invalid/P32/ibm32i03.xml b/test/resources/ibm/invalid/P32/ibm32i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i03.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" standalone="yes" ?>
+<!DOCTYPE animal SYSTEM "ibm32i03.dtd" [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- This is against VC: Standalone Document Declaration in P32
+ The standalone document declaration has the value "yes", there is an external
+ markup declaration of attributes with values containing character reference.
+-->
+<animal class="   NMTOKEN_with_leading_and_trailing_space	 "/>
+
+
+
+
diff --git a/test/resources/ibm/invalid/P32/ibm32i04.dtd b/test/resources/ibm/invalid/P32/ibm32i04.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i04.dtd
@@ -0,0 +1,4 @@
+<!ELEMENT animal (a,b,c)>
+<!ELEMENT a ANY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
diff --git a/test/resources/ibm/invalid/P32/ibm32i04.xml b/test/resources/ibm/invalid/P32/ibm32i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/ibm32i04.xml
@@ -0,0 +1,15 @@
+<?xml version='1.0' standalone='yes' ?>
+<!DOCTYPE animal SYSTEM "ibm32i04.dtd" [
+  <!ATTLIST animal xml:space (default|preserve) 'preserve'>
+]>
+<!-- This is against VC: Standalone Document Declaration in P32
+ The standalone document declaration has the value "yes", there is an 
+ external markup declaration of element with a element only content type, and 
+ white space occurs directly within the mixed content.
+-->
+<animal><a>This is a 
+
+yellow tiger</a> <b/>
+<c/>
+
+</animal>
diff --git a/test/resources/ibm/invalid/P32/out/ibm32i01.xml b/test/resources/ibm/invalid/P32/out/ibm32i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/out/ibm32i01.xml
@@ -0,0 +1,1 @@
+<animal color="yellow"></animal>
diff --git a/test/resources/ibm/invalid/P32/out/ibm32i02.xml b/test/resources/ibm/invalid/P32/out/ibm32i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/out/ibm32i02.xml
@@ -0,0 +1,1 @@
+<animal>This is a yellow tiger</animal>
diff --git a/test/resources/ibm/invalid/P32/out/ibm32i03.xml b/test/resources/ibm/invalid/P32/out/ibm32i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/out/ibm32i03.xml
@@ -0,0 +1,1 @@
+<animal class="NMTOKEN_with_leading_and_trailing_space"></animal>
diff --git a/test/resources/ibm/invalid/P32/out/ibm32i04.xml b/test/resources/ibm/invalid/P32/out/ibm32i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P32/out/ibm32i04.xml
@@ -0,0 +1,1 @@
+<animal xml:space="preserve"><a>This is a &#10;&#10;yellow tiger</a> <b></b>&#10;<c></c>&#10;&#10;</animal>
diff --git a/test/resources/ibm/invalid/P39/ibm39i01.xml b/test/resources/ibm/invalid/P39/ibm39i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/ibm39i01.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root (a,b)>
+  <!ELEMENT a EMPTY>
+  <!ELEMENT b (#PCDATA|c)* >
+  <!ELEMENT c ANY>
+
+]>
+<!--* EMPTY element a has content *-->
+<root><a>should not have content here</a><b>
+   <c></c> 
+   content of b element
+</b></root>
+
diff --git a/test/resources/ibm/invalid/P39/ibm39i02.xml b/test/resources/ibm/invalid/P39/ibm39i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/ibm39i02.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root (a,b)>
+  <!ELEMENT a EMPTY>
+  <!ELEMENT b (#PCDATA|c)* >
+  <!ELEMENT c ANY>
+
+]>
+<!--* root element have text content *-->
+<root>
+ root can't have text content
+<a></a><b>
+   <c></c> 
+   content of b element
+</b></root>
+
diff --git a/test/resources/ibm/invalid/P39/ibm39i03.xml b/test/resources/ibm/invalid/P39/ibm39i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/ibm39i03.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root (a,b)>
+  <!ELEMENT a EMPTY>
+  <!ELEMENT b (#PCDATA|c)* >
+  <!ELEMENT c ANY>
+]>
+<!--* illgal element in b's Mixed content *-->
+<root><a/><b>
+   <c></c> 
+   content of b element
+   <a/>
+   could not have 'a' as 'b's content
+</b></root>
+
diff --git a/test/resources/ibm/invalid/P39/ibm39i04.xml b/test/resources/ibm/invalid/P39/ibm39i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/ibm39i04.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root (a,b)>
+  <!ELEMENT a EMPTY>
+  <!ELEMENT b (#PCDATA|c)* >
+  <!ELEMENT c ANY>
+  <!ELEMENT f EMPTY>
+]>
+<!--* element c has undeclared element as its ANY content *-->
+<root><a/><b>
+   <c><f/></c> 
+   content of b element
+   <c>
+      <d>not declared in dtd</d>
+   </c>
+</b></root>
+
diff --git a/test/resources/ibm/invalid/P39/out/ibm39i01.xml b/test/resources/ibm/invalid/P39/out/ibm39i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/out/ibm39i01.xml
@@ -0,0 +1,1 @@
+<root><a>should not have content here</a><b>&#10;   <c></c> &#10;   content of b element&#10;</b></root>
diff --git a/test/resources/ibm/invalid/P39/out/ibm39i02.xml b/test/resources/ibm/invalid/P39/out/ibm39i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/out/ibm39i02.xml
@@ -0,0 +1,1 @@
+<root>&#10; root can't have text content&#10;<a></a><b>&#10;   <c></c> &#10;   content of b element&#10;</b></root>
diff --git a/test/resources/ibm/invalid/P39/out/ibm39i03.xml b/test/resources/ibm/invalid/P39/out/ibm39i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/out/ibm39i03.xml
@@ -0,0 +1,1 @@
+<root><a></a><b>&#10;   <c></c> &#10;   content of b element&#10;   <a></a>&#10;   could not have 'a' as 'b's content&#10;</b></root>
diff --git a/test/resources/ibm/invalid/P39/out/ibm39i04.xml b/test/resources/ibm/invalid/P39/out/ibm39i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P39/out/ibm39i04.xml
@@ -0,0 +1,1 @@
+<root><a></a><b>&#10;   <c><f></f></c> &#10;   content of b element&#10;   <c>&#10;      <d>not declared in dtd</d>&#10;   </c>&#10;</b></root>
diff --git a/test/resources/ibm/invalid/P41/ibm41i01.xml b/test/resources/ibm/invalid/P41/ibm41i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P41/ibm41i01.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root (#PCDATA|b)* >
+  <!ELEMENT b (#PCDATA) >
+  <!ATTLIST b attr2 (abc|def) "abc">
+  <!ATTLIST b attr3 CDATA #FIXED "fixed">
+]>
+<root>
+  <b attr1="value1" attr2="def" attr3="fixed">attr1 not declared</b>
+</root>
+<!--* testing VC:Attribute Value Type  *-->
diff --git a/test/resources/ibm/invalid/P41/ibm41i02.xml b/test/resources/ibm/invalid/P41/ibm41i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P41/ibm41i02.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root (PCDATA|b)* >
+  <!ELEMENT b (#PCDATA) >
+  <!ATTLIST b attr1 CDATA #REQUIRED>
+  <!ATTLIST b attr2 (abc|def) "abc">
+  <!ATTLIST b attr3 CDATA #FIXED "fixed">
+]>
+<root>
+  <b attr1="value1" attr2="abc" attr3="shoudbefixed">attr3 value not fixed</b>
+</root>
+<!--* testing P41 VC: AtributeValueType*-->
diff --git a/test/resources/ibm/invalid/P41/out/ibm41i01.xml b/test/resources/ibm/invalid/P41/out/ibm41i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P41/out/ibm41i01.xml
@@ -0,0 +1,1 @@
+<root>&#10;  <b attr1="value1" attr2="def" attr3="fixed">attr1 not declared</b>&#10;</root>
diff --git a/test/resources/ibm/invalid/P41/out/ibm41i02.xml b/test/resources/ibm/invalid/P41/out/ibm41i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P41/out/ibm41i02.xml
@@ -0,0 +1,1 @@
+<root>&#10;  <b attr1="value1" attr2="abc" attr3="shoudbefixed">attr3 value not fixed</b>&#10;</root>
diff --git a/test/resources/ibm/invalid/P45/ibm45i01.xml b/test/resources/ibm/invalid/P45/ibm45i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P45/ibm45i01.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root (#PCDATA|b)* >
+  <!ELEMENT b EMPTY>
+  <!ELEMENT not_unique ANY>
+  <!ELEMENT not_unique EMPTY>
+  <!ELEMENT not_unique (b,b) >
+  <!ELEMENT unique. ANY>
+  <!ATTLIST b attr1 CDATA #IMPLIED>
+  <!ATTLIST b attr2 CDATA #IMPLIED>
+  <!ATTLIST b attr3 CDATA #IMPLIED>
+]>
+<root>
+  <b/>without white space
+  <b /> with a white space
+  <b attr1="value1" />
+  <b attr1="value1" attr2="value2" attr3 = "value3"/>
+</root>
+<!--* a invalid test: testing P45 VC unique element type decl  *-->
diff --git a/test/resources/ibm/invalid/P45/out/ibm45i01.xml b/test/resources/ibm/invalid/P45/out/ibm45i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P45/out/ibm45i01.xml
@@ -0,0 +1,1 @@
+<root>&#10;  <b></b>without white space&#10;  <b></b> with a white space&#10;  <b attr1="value1"></b>&#10;  <b attr1="value1" attr2="value2" attr3="value3"></b>&#10;</root>
diff --git a/test/resources/ibm/invalid/P49/ibm49i01.dtd b/test/resources/ibm/invalid/P49/ibm49i01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P49/ibm49i01.dtd
@@ -0,0 +1,11 @@
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA|c)* >
+<!ELEMENT c ANY>
+
+<!--* open and close parenthesis are in different PE replace Texts *-->
+<!ENTITY % choice1 "(a|b">
+<!ENTITY % choice2 "|c)">
+<!ELEMENT child1 %choice1;%choice2; >
+
+
+
diff --git a/test/resources/ibm/invalid/P49/ibm49i01.xml b/test/resources/ibm/invalid/P49/ibm49i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P49/ibm49i01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm49i01.dtd" [
+  <!ELEMENT root (a,b)>
+]>
+<root><a/><b>
+   <c></c >
+   content of b element
+</b></root>
+<!--* a invalid test: tests VC:Proper Group/PE Nesting in P49 *-->
diff --git a/test/resources/ibm/invalid/P49/ibm49i02.xml b/test/resources/ibm/invalid/P49/ibm49i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P49/ibm49i02.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm49i02.dtd" [
+  <!ELEMENT root (a,b)>
+]>
+<root><a/><b>
+   <c></c >
+   content of b element
+</b></root>
+<!--* a invalid test: tests VC:Proper Group/PE Nesting in P49 *-->
diff --git a/test/resources/ibm/invalid/P49/out/ibm49i01.xml b/test/resources/ibm/invalid/P49/out/ibm49i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P49/out/ibm49i01.xml
@@ -0,0 +1,1 @@
+<root><a></a><b>&#10;   <c></c>&#10;   content of b element&#10;</b></root>
diff --git a/test/resources/ibm/invalid/P49/out/ibm49i02.xml b/test/resources/ibm/invalid/P49/out/ibm49i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P49/out/ibm49i02.xml
diff --git a/test/resources/ibm/invalid/P50/ibm50i01.dtd b/test/resources/ibm/invalid/P50/ibm50i01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P50/ibm50i01.dtd
@@ -0,0 +1,10 @@
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA|c)* >
+<!ELEMENT c ANY>
+
+<!--* PE replace Text has no closing parentheses *-->
+<!ENTITY % choice1 "(a,b,c">
+<!ELEMENT child1 (%choice1;)|c) >
+
+
+
diff --git a/test/resources/ibm/invalid/P50/ibm50i01.xml b/test/resources/ibm/invalid/P50/ibm50i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P50/ibm50i01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm50i01.dtd" [
+  <!ELEMENT root (a,b)>
+]>
+<root><a/><b>
+   <c></c >
+   content of b element
+</b></root>
+<!--* a invalid test: tests VC:Proper Group/PE Nesting in P50 *-->
diff --git a/test/resources/ibm/invalid/P50/out/ibm50i01.xml b/test/resources/ibm/invalid/P50/out/ibm50i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P50/out/ibm50i01.xml
@@ -0,0 +1,1 @@
+<root><a></a><b>&#10;   <c></c>&#10;   content of b element&#10;</b></root>
diff --git a/test/resources/ibm/invalid/P51/ibm51i01.dtd b/test/resources/ibm/invalid/P51/ibm51i01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P51/ibm51i01.dtd
@@ -0,0 +1,16 @@
+<!ELEMENT a (#PCDATA)* >
+<!ELEMENT b (#PCDATA) >
+<!ELEMENT c ( #PCDATA)*>
+
+<!ELEMENT d (#PCDATA|c)* >
+<!--* PEs are not properly nested *-->
+<!--* this one miss closing parenthesis *-->
+<!ENTITY % mixed1 "(#PCDATA|">
+<!ENTITY % mixed2 "c|b|a)*">  
+<!ELEMENT e %mixed1;%mixed2; >
+<!ELEMENT f (#PCDATA| c)* >
+<!ELEMENT g ( #PCDATA) >
+<!ELEMENT h (#PCDATA )>
+
+
+
diff --git a/test/resources/ibm/invalid/P51/ibm51i01.xml b/test/resources/ibm/invalid/P51/ibm51i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P51/ibm51i01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm51i01.dtd" [
+  <!ELEMENT root ANY>
+]>
+<root>
+  <a> Element type a </a>
+  <b> Element type b </b>
+</root>
+<!--* a invalid test: tests P51 VC: Proper Group/PE Nesting *-->
diff --git a/test/resources/ibm/invalid/P51/ibm51i03.dtd b/test/resources/ibm/invalid/P51/ibm51i03.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P51/ibm51i03.dtd
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+
+
+
+
diff --git a/test/resources/ibm/invalid/P51/ibm51i03.xml b/test/resources/ibm/invalid/P51/ibm51i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P51/ibm51i03.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+  <!ELEMENT root ANY>
+  <!ELEMENT a (#PCDATA)* >
+  <!ELEMENT b (#PCDATA) >
+  <!ELEMENT c ( #PCDATA)*>
+  <!ELEMENT d (#PCDATA|c)* >
+  <!--* Duplicate element types in Mixed content decl *-->
+  <!ELEMENT e (#PCDATA|a|a|b|c)* >
+]>
+<root>
+  <a> Element type a </a>
+  <b> Element type b </b>
+</root>
+<!--* a invalid test: tests P51 VC: No Duplicate Types *-->
diff --git a/test/resources/ibm/invalid/P51/out/ibm51i01.xml b/test/resources/ibm/invalid/P51/out/ibm51i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P51/out/ibm51i01.xml
@@ -0,0 +1,1 @@
+<root>&#10;  <a> Element type a </a>&#10;  <b> Element type b </b>&#10;</root>
diff --git a/test/resources/ibm/invalid/P51/out/ibm51i02.xml b/test/resources/ibm/invalid/P51/out/ibm51i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P51/out/ibm51i02.xml
@@ -0,0 +1,1 @@
+<root>&#10;  <a> Element type a </a>&#10;  <b> Element type b </b>&#10;</root>
diff --git a/test/resources/ibm/invalid/P51/out/ibm51i03.xml b/test/resources/ibm/invalid/P51/out/ibm51i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P51/out/ibm51i03.xml
@@ -0,0 +1,1 @@
+<root>&#10;  <a> Element type a </a>&#10;  <b> Element type b </b>&#10;</root>
diff --git a/test/resources/ibm/invalid/P56/ibm56i01.xml b/test/resources/ibm/invalid/P56/ibm56i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i01.xml
@@ -0,0 +1,11 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(negative Test)-->
+<!DOCTYPE tokenizer
+ [
+ <!ELEMENT tokenizer ANY>
+ <!ATTLIST tokenizer UniqueName ID #REQUIRED>
+ ]>
+<tokenizer UniqueName = "@c999">
+This is a negative test for validity constraints
+the value of the attribute with a type ID does not match the Name production
+</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/ibm56i02.xml b/test/resources/ibm/invalid/P56/ibm56i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i02.xml
@@ -0,0 +1,14 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(negative Test)-->
+<!DOCTYPE tokenizer
+ [
+ <!ELEMENT tokenizer ANY>
+ <!ELEMENT b EMPTY>
+ <!ATTLIST b attr ID #REQUIRED>
+ <!ATTLIST tokenizer UniqueName ID #REQUIRED>
+  ]>
+<tokenizer UniqueName = "Ac999">
+<b attr = "Ac999"></b>
+This is a negative test for validity constraints
+the value of the attribute with a type ID appears more than once in the XML document
+</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/ibm56i03.xml b/test/resources/ibm/invalid/P56/ibm56i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i03.xml
@@ -0,0 +1,11 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE tokenizer
+ [
+ <!ELEMENT tokenizer ANY>
+ <!ATTLIST tokenizer UniqueName ID #FIXED "AC1999">
+ ]>
+<tokenizer>
+This is a Negative validity test for ID Attribute Default.
+Giving the attribute default as #FIXED
+</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/ibm56i05.xml b/test/resources/ibm/invalid/P56/ibm56i05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i05.xml
@@ -0,0 +1,11 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE tokenizer
+ [
+ <!ELEMENT tokenizer ANY>
+ <!ATTLIST tokenizer UniqueName ID "BOGUS">
+ ]>
+<tokenizer UniqueName = "AC1999">
+This is a Negative validity test for ID Attribute Default.
+Giving the attibute default as a const string
+</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/ibm56i06.xml b/test/resources/ibm/invalid/P56/ibm56i06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i06.xml
@@ -0,0 +1,15 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE tokenizer
+ [
+ <!ELEMENT tokenizer ANY>
+ <!ELEMENT a EMPTY>
+ <!ATTLIST a first ID #REQUIRED>
+ <!ATTLIST a second ID #REQUIRED>
+ ]>
+<tokenizer>
+<a first = "AC1999" second="BC1999"></a>
+This is a Negative validity test for ID.
+There is more than attribute of type ID for the element a
+
+</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/ibm56i07.xml b/test/resources/ibm/invalid/P56/ibm56i07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i07.xml
@@ -0,0 +1,16 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT id EMPTY>
+ <!ELEMENT idref EMPTY>
+ <!ATTLIST id UniqueName ID #REQUIRED>
+ <!ATTLIST idref reference IDREF #IMPLIED>
+ ]>
+<test>
+<id UniqueName = "AC456"></id>
+<idref reference = "@456"></idref>
+Negative test for validity constraint of IDREF.
+In an attribute decl, values of type IDREF does not match the name production
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i08.xml b/test/resources/ibm/invalid/P56/ibm56i08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i08.xml
@@ -0,0 +1,18 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT id EMPTY>
+ <!ELEMENT idref EMPTY>
+ <!ATTLIST id UniqueName ID #REQUIRED>
+ <!ATTLIST idref reference IDREF #IMPLIED>
+ ]>
+<test>
+<id UniqueName = "AC456"></id>
+<idref reference = "BC456"></idref>
+Negative test for validity constraint of IDREF.
+In an attribute decl, values of type IDREF match the name production and
+IDREF value does not match the value assigned to any ID attribute somewhere
+in the XML document.
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i09.xml b/test/resources/ibm/invalid/P56/ibm56i09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i09.xml
@@ -0,0 +1,19 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT id1 EMPTY>
+ <!ELEMENT id2 EMPTY>
+ <!ELEMENT idrefs EMPTY>
+ <!ATTLIST id1 UniqueName ID #REQUIRED>
+ <!ATTLIST id2 UName ID #IMPLIED>
+ <!ATTLIST idrefs reference IDREFS #IMPLIED>
+ ]>
+<test>
+<id1 UniqueName = "AC456"></id1>
+<id2 UName = "BC567"></id2>
+<idrefs reference = "AC456 #567"></idrefs>
+Negative test for validity constraint of IDREFS.
+In an attribute decl, values of type IDREFS does not match the name production
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i10.xml b/test/resources/ibm/invalid/P56/ibm56i10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i10.xml
@@ -0,0 +1,21 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT id1 EMPTY>
+ <!ELEMENT id2 EMPTY>
+ <!ELEMENT idrefs EMPTY>
+ <!ATTLIST id1 UniqueName ID #REQUIRED>
+ <!ATTLIST id2 UName ID #IMPLIED>
+ <!ATTLIST idrefs reference IDREFS #IMPLIED>
+ ]>
+<test>
+<id1 UniqueName = "BC456"></id1>
+<id2 UName = "AC567"></id2>
+<idrefs reference = "EF456 DE355"></idrefs>
+Negative test for validity constraint of IDREFS.
+In an attribute decl, values of type IDREFS match the name production
+but IDREFS value do not match the values assigned to one or more ID attributes
+somewhere in the XML document
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i11.xml b/test/resources/ibm/invalid/P56/ibm56i11.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i11.xml
@@ -0,0 +1,13 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT landscape EMPTY>
+ <!ENTITY image SYSTEM "d:\testspec\images\sunset.gif" NDATA gif>
+ <!ATTLIST landscape sun ENTITY #IMPLIED>
+]>
+<test>
+<landscape sun = "ima ge"></landscape>
+In the attribute decl, values of type ENTITY do not match the Name production
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i12.xml b/test/resources/ibm/invalid/P56/ibm56i12.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i12.xml
@@ -0,0 +1,14 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT landscape EMPTY>
+ <!ENTITY image SYSTEM "d:\testspec\images\sunset.gif" NDATA gif>
+ <!ATTLIST landscape sun ENTITY #IMPLIED>
+]>
+<test>
+<landscape sun = "notimage"></landscape>
+In the attribute decl, values of type ENTITY match the Name production
+but does not match the name of any entity declared in the DTD
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i13.xml b/test/resources/ibm/invalid/P56/ibm56i13.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i13.xml
@@ -0,0 +1,14 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT landscape EMPTY>
+ <!ENTITY parsedentity SYSTEM "ibm56iv01.xml" >
+ <!ATTLIST landscape sun ENTITY #IMPLIED>
+]>
+<test>
+<landscape sun = "parsedentity"></landscape>
+In an attribute declaration, values of type ENTITY match the Name production and the ENTITY value
+matches the name of a parsed entity declared in the DTD. 
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i14.xml b/test/resources/ibm/invalid/P56/ibm56i14.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i14.xml
@@ -0,0 +1,14 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT landscape EMPTY>
+ <!ENTITY image1 SYSTEM "d:\testspec\images\sunset.gif" NDATA gif>
+ <!ENTITY image2 SYSTEM "d:\testspec\images\frontpage.gif" NDATA gif>
+ <!ATTLIST landscape sun ENTITIES #IMPLIED>
+]>
+<test>
+<landscape sun = "#image1 @image"></landscape>
+In an attribute declaration, values of type ENTITIES do not match the Name production.
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i15.xml b/test/resources/ibm/invalid/P56/ibm56i15.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i15.xml
@@ -0,0 +1,15 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT landscape EMPTY>
+ <!ENTITY image1 SYSTEM "d:\testspec\images\sunset.gif" NDATA gif>
+ <!ENTITY image2 SYSTEM "d:\testspec\images\frontpag.gif" NDATA gif>
+ <!ATTLIST landscape sun ENTITIES #IMPLIED>
+]>
+<test>
+<landscape sun = "image3 image4"></landscape>
+In an attribute declaration, values of type ENTITIES match the Name production and the ENTITIES value
+does not match one or more names of entities declared in the DTD. 
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i16.xml b/test/resources/ibm/invalid/P56/ibm56i16.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i16.xml
@@ -0,0 +1,15 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT landscape EMPTY>
+ <!ENTITY parsedentity1 SYSTEM "ibm56iv01.xml">
+ <!ENTITY parsedentity2 SYSTEM "ibm56iv02.xml">
+ <!ATTLIST landscape sun ENTITIES #IMPLIED>
+]>
+<test>
+<landscape sun = "parsedentity1 parsedentity2"></landscape>
+In an attribute declaration, values of type ENTITIES match the Name production and the ENTITIES value
+matches one or more names of parsed entities declared in the DTD. .
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i17.xml b/test/resources/ibm/invalid/P56/ibm56i17.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i17.xml
@@ -0,0 +1,12 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT nametoken EMPTY>
+ <!ATTLIST nametoken thistoken NMTOKEN #IMPLIED>
+]>
+<test>
+<nametoken thistoken = "x : image"></nametoken>
+In an attribute declaration, values of type NMTOKEN does not match the Nmtoken production
+</test>
diff --git a/test/resources/ibm/invalid/P56/ibm56i18.xml b/test/resources/ibm/invalid/P56/ibm56i18.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/ibm56i18.xml
@@ -0,0 +1,12 @@
+<?xml  version="1.0"?>
+<!-- validity constraint check for Production 56(Negative Test)-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT nametokens EMPTY>
+ <!ATTLIST nametokens thistoken NMTOKENS #IMPLIED>
+]>
+<test>
+<nametokens thistoken = "@lang y: #country"></nametokens>
+In an attribute declaration, values of type NMTOKENS does not match the Nmtokens production
+</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i01.xml b/test/resources/ibm/invalid/P56/out/ibm56i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i01.xml
@@ -0,0 +1,1 @@
+<tokenizer UniqueName="@c999">&#10;This is a negative test for validity constraints&#10;the value of the attribute with a type ID does not match the Name production&#10;</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i02.xml b/test/resources/ibm/invalid/P56/out/ibm56i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i02.xml
@@ -0,0 +1,1 @@
+<tokenizer UniqueName="Ac999">&#10;<b attr="Ac999"></b>&#10;This is a negative test for validity constraints&#10;the value of the attribute with a type ID appears more than once in the XML document&#10;</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i03.xml b/test/resources/ibm/invalid/P56/out/ibm56i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i03.xml
@@ -0,0 +1,1 @@
+<tokenizer UniqueName="AC1999">&#10;This is a Negative validity test for ID Attribute Default.&#10;Giving the attribute default as #FIXED&#10;</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i05.xml b/test/resources/ibm/invalid/P56/out/ibm56i05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i05.xml
@@ -0,0 +1,1 @@
+<tokenizer UniqueName="AC1999">&#10;This is a Negative validity test for ID Attribute Default.&#10;Giving the attibute default as a const string&#10;</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i06.xml b/test/resources/ibm/invalid/P56/out/ibm56i06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i06.xml
@@ -0,0 +1,1 @@
+<tokenizer>&#10;<a first="AC1999" second="BC1999"></a>&#10;This is a Negative validity test for ID.&#10;There is more than attribute of type ID for the element a&#10;&#10;</tokenizer>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i07.xml b/test/resources/ibm/invalid/P56/out/ibm56i07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i07.xml
@@ -0,0 +1,1 @@
+<test>&#10;<id UniqueName="AC456"></id>&#10;<idref reference="@456"></idref>&#10;Negative test for validity constraint of IDREF.&#10;In an attribute decl, values of type IDREF does not match the name production&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i08.xml b/test/resources/ibm/invalid/P56/out/ibm56i08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i08.xml
@@ -0,0 +1,1 @@
+<test>&#10;<id UniqueName="AC456"></id>&#10;<idref reference="BC456"></idref>&#10;Negative test for validity constraint of IDREF.&#10;In an attribute decl, values of type IDREF match the name production and&#10;IDREF value does not match the value assigned to any ID attribute somewhere&#10;in the XML document.&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i09.xml b/test/resources/ibm/invalid/P56/out/ibm56i09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i09.xml
@@ -0,0 +1,1 @@
+<test>&#10;<id1 UniqueName="AC456"></id1>&#10;<id2 UName="BC567"></id2>&#10;<idrefs reference="AC456 #567"></idrefs>&#10;Negative test for validity constraint of IDREFS.&#10;In an attribute decl, values of type IDREFS does not match the name production&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i10.xml b/test/resources/ibm/invalid/P56/out/ibm56i10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i10.xml
@@ -0,0 +1,1 @@
+<test>&#10;<id1 UniqueName="BC456"></id1>&#10;<id2 UName="AC567"></id2>&#10;<idrefs reference="EF456 DE355"></idrefs>&#10;Negative test for validity constraint of IDREFS.&#10;In an attribute decl, values of type IDREFS match the name production&#10;but IDREFS value do not match the values assigned to one or more ID attributes&#10;somewhere in the XML document&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i11.xml b/test/resources/ibm/invalid/P56/out/ibm56i11.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i11.xml
@@ -0,0 +1,1 @@
+<test>&#10;<landscape sun="ima ge"></landscape>&#10;In the attribute decl, values of type ENTITY do not match the Name production&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i12.xml b/test/resources/ibm/invalid/P56/out/ibm56i12.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i12.xml
@@ -0,0 +1,1 @@
+<test>&#10;<landscape sun="notimage"></landscape>&#10;In the attribute decl, values of type ENTITY match the Name production&#10;but does not match the name of any entity declared in the DTD&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i13.xml b/test/resources/ibm/invalid/P56/out/ibm56i13.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i13.xml
@@ -0,0 +1,1 @@
+<test>&#10;<landscape sun="parsedentity"></landscape>&#10;In an attribute declaration, values of type ENTITY match the Name production and the ENTITY value&#10;matches the name of a parsed entity declared in the DTD. &#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i14.xml b/test/resources/ibm/invalid/P56/out/ibm56i14.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i14.xml
@@ -0,0 +1,1 @@
+<test>&#10;<landscape sun="#image1 @image"></landscape>&#10;In an attribute declaration, values of type ENTITIES do not match the Name production.&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i15.xml b/test/resources/ibm/invalid/P56/out/ibm56i15.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i15.xml
@@ -0,0 +1,1 @@
+<test>&#10;<landscape sun="image3 image4"></landscape>&#10;In an attribute declaration, values of type ENTITIES match the Name production and the ENTITIES value&#10;does not match one or more names of entities declared in the DTD. &#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i16.xml b/test/resources/ibm/invalid/P56/out/ibm56i16.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i16.xml
@@ -0,0 +1,1 @@
+<test>&#10;<landscape sun="parsedentity1 parsedentity2"></landscape>&#10;In an attribute declaration, values of type ENTITIES match the Name production and the ENTITIES value&#10;matches one or more names of parsed entities declared in the DTD. .&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i17.xml b/test/resources/ibm/invalid/P56/out/ibm56i17.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i17.xml
@@ -0,0 +1,1 @@
+<test>&#10;<nametoken thistoken="x : image"></nametoken>&#10;In an attribute declaration, values of type NMTOKEN does not match the Nmtoken production&#10;</test>
diff --git a/test/resources/ibm/invalid/P56/out/ibm56i18.xml b/test/resources/ibm/invalid/P56/out/ibm56i18.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P56/out/ibm56i18.xml
@@ -0,0 +1,1 @@
+<test>&#10;<nametokens thistoken="@lang y: #country"></nametokens>&#10;In an attribute declaration, values of type NMTOKENS does not match the Nmtokens production&#10;</test>
diff --git a/test/resources/ibm/invalid/P58/ibm58i01.xml b/test/resources/ibm/invalid/P58/ibm58i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P58/ibm58i01.xml
@@ -0,0 +1,16 @@
+<?xml  version="1.0"?>
+<!-- validity test for Production 58(Negative Test-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT blob (#PCDATA)>
+ <!NOTATION base64 SYSTEM "mimecode">
+ <!NOTATION uuencode SYSTEM "uudecode">
+ <!NOTATION raw SYSTEM "raw">
+ <!ATTLIST blob content-encoding NOTATION (base64|uuencode) #REQUIRED>
+ ]>
+ <test>
+<blob content-encoding = "raw"></blob>
+The attribute values of type NOTATION does not match any of the notation names included in the
+declaration.All notation names in the declaration have been declared.
+</test>
diff --git a/test/resources/ibm/invalid/P58/ibm58i02.xml b/test/resources/ibm/invalid/P58/ibm58i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P58/ibm58i02.xml
@@ -0,0 +1,15 @@
+<?xml  version="1.0"?>
+<!-- validity test for Production 58(Negative Test-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT blob (#PCDATA)>
+ <!NOTATION base64 SYSTEM "mimecode">
+ <!NOTATION uuencode SYSTEM "uudecode">
+ <!ATTLIST blob content-encoding NOTATION (base64|uuencode|raw|ascii) #REQUIRED>
+ ]>
+ <test>
+<blob content-encoding = "raw"></blob>
+The attribute values of type NOTATION does match any of the notation names included in the
+declaration, but some of notation names in the declaration have not been declared
+</test>
diff --git a/test/resources/ibm/invalid/P58/out/ibm58i01.xml b/test/resources/ibm/invalid/P58/out/ibm58i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P58/out/ibm58i01.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE test [
+<!NOTATION base64 SYSTEM 'mimecode'>
+<!NOTATION raw SYSTEM 'raw'>
+<!NOTATION uuencode SYSTEM 'uudecode'>
+]>
+<test>&#10;<blob content-encoding="raw"></blob>&#10;The attribute values of type NOTATION does not match any of the notation names included in the&#10;declaration.All notation names in the declaration have been declared.&#10;</test>
diff --git a/test/resources/ibm/invalid/P58/out/ibm58i02.xml b/test/resources/ibm/invalid/P58/out/ibm58i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P58/out/ibm58i02.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE test [
+<!NOTATION base64 SYSTEM 'mimecode'>
+<!NOTATION uuencode SYSTEM 'uudecode'>
+]>
+<test>&#10;<blob content-encoding="raw"></blob>&#10;The attribute values of type NOTATION does match any of the notation names included in the&#10;declaration, but some of notation names in the declaration have not been declared&#10;</test>
diff --git a/test/resources/ibm/invalid/P59/ibm59i01.xml b/test/resources/ibm/invalid/P59/ibm59i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P59/ibm59i01.xml
@@ -0,0 +1,15 @@
+<?xml  version="1.0"?>
+<!-- validity test for Production 59-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT one EMPTY>
+ <!ELEMENT two EMPTY>
+ <!ELEMENT num EMPTY>
+ <!ATTLIST num value (one|two) #IMPLIED>
+ ]>
+ <test>
+<num value = "ONE"></num>
+This is a Negative test
+The attribute values of type Enumeration does not match any of the Nmtoken tokens in the declaration.
+</test>
diff --git a/test/resources/ibm/invalid/P59/out/ibm59i01.xml b/test/resources/ibm/invalid/P59/out/ibm59i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P59/out/ibm59i01.xml
@@ -0,0 +1,1 @@
+<test>&#10;<num value="ONE"></num>&#10;This is a Negative test&#10;The attribute values of type Enumeration does not match any of the Nmtoken tokens in the declaration.&#10;</test>
diff --git a/test/resources/ibm/invalid/P60/ibm60i01.xml b/test/resources/ibm/invalid/P60/ibm60i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/ibm60i01.xml
@@ -0,0 +1,17 @@
+<?xml  version="1.0"?>
+<!-- validity test for Production 60-->
+<!DOCTYPE Java 
+ [
+ <!ELEMENT Java ANY>
+ <!ELEMENT one EMPTY>
+ <!ELEMENT two EMPTY>
+ <!ATTLIST one chapter CDATA #REQUIRED>
+ <!ATTLIST two chapter CDATA #REQUIRED>
+ ]>
+<Java>
+<one chapter="Introduction"></one>
+<two></two>
+Negative test for Required Attribute. Some occurrence of an element with 
+an attribute of #REQUIRED default declaration does not give the value of 
+those attribute
+</Java>
diff --git a/test/resources/ibm/invalid/P60/ibm60i02.xml b/test/resources/ibm/invalid/P60/ibm60i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/ibm60i02.xml
@@ -0,0 +1,15 @@
+<?xml  version="1.0"?>
+<!-- validity test for Production 60-->
+<!DOCTYPE Java 
+ [
+ <!ELEMENT Java ANY>
+ <!ELEMENT one EMPTY>
+ <!ATTLIST one chapter CDATA #FIXED "Introduction">
+  ]>
+<Java>
+<one chapter="JavaBeans"></one>
+Negative Test
+An attribute has a default value declared with the #FIXED keyword, 
+and an instances of that attribute is given a value which is not 
+the same as the default value in the declaration. 
+</Java>
diff --git a/test/resources/ibm/invalid/P60/ibm60i03.xml b/test/resources/ibm/invalid/P60/ibm60i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/ibm60i03.xml
@@ -0,0 +1,21 @@
+<?xml  version="1.0"?>
+<!-- validity test for Production 60-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT a EMPTY>
+ <!ELEMENT b EMPTY>
+ <!ELEMENT attr EMPTY>
+ <!ATTLIST attr value (a|b) "c"> 
+  ]>
+<test>
+The default value specified for an attribute does not meet the 
+lexical constraints of the declared attribute type.
+</test>
+
+
+
+
+
+
+
diff --git a/test/resources/ibm/invalid/P60/ibm60i04.xml b/test/resources/ibm/invalid/P60/ibm60i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/ibm60i04.xml
@@ -0,0 +1,13 @@
+<?xml  version="1.0"?>
+<!-- validity test for Production 60-->
+<!DOCTYPE test
+ [
+ <!ELEMENT test ANY>
+ <!ELEMENT a EMPTY>
+ <!ELEMENT nametoken EMPTY>
+ <!ATTLIST nametoken namevalue NMTOKEN "@#$"> 
+  ]>
+<test>
+The default value specified for an attribute does not meet the 
+lexical constraints of the declared attribute type.
+</test>
diff --git a/test/resources/ibm/invalid/P60/out/ibm60i01.xml b/test/resources/ibm/invalid/P60/out/ibm60i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/out/ibm60i01.xml
@@ -0,0 +1,1 @@
+<Java>&#10;<one chapter="Introduction"></one>&#10;<two></two>&#10;Negative test for Required Attribute. Some occurrence of an element with &#10;an attribute of #REQUIRED default declaration does not give the value of &#10;those attribute&#10;</Java>
diff --git a/test/resources/ibm/invalid/P60/out/ibm60i02.xml b/test/resources/ibm/invalid/P60/out/ibm60i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/out/ibm60i02.xml
@@ -0,0 +1,1 @@
+<Java>&#10;<one chapter="JavaBeans"></one>&#10;Negative Test&#10;An attribute has a default value declared with the #FIXED keyword, &#10;and an instances of that attribute is given a value which is not &#10;the same as the default value in the declaration. &#10;</Java>
diff --git a/test/resources/ibm/invalid/P60/out/ibm60i03.xml b/test/resources/ibm/invalid/P60/out/ibm60i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/out/ibm60i03.xml
@@ -0,0 +1,1 @@
+<test>&#10;The default value specified for an attribute does not meet the &#10;lexical constraints of the declared attribute type.&#10;</test>
diff --git a/test/resources/ibm/invalid/P60/out/ibm60i04.xml b/test/resources/ibm/invalid/P60/out/ibm60i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P60/out/ibm60i04.xml
@@ -0,0 +1,1 @@
+<test>&#10;The default value specified for an attribute does not meet the &#10;lexical constraints of the declared attribute type.&#10;</test>
diff --git a/test/resources/ibm/invalid/P68/ibm68i01.dtd b/test/resources/ibm/invalid/P68/ibm68i01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i01.dtd
@@ -0,0 +1,4 @@
+<!ENTITY ge1 "abcdef">
+<!ELEMENT a EMPTY>
+<!ATTLIST a attr1 CDATA "&ge2;">
+<!--* GE reference therebefore doesn't match declaration *-->
diff --git a/test/resources/ibm/invalid/P68/ibm68i01.xml b/test/resources/ibm/invalid/P68/ibm68i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm68i01.dtd" [
+  <!ELEMENT root (#PCDATA|a)* >
+]>
+<root>
+  pcdata content
+  <a attr1="xyz"/>
+</root>
+<!--* a invalid test for P68 VC:Entity Declared *-->
+
diff --git a/test/resources/ibm/invalid/P68/ibm68i02.dtd b/test/resources/ibm/invalid/P68/ibm68i02.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i02.dtd
@@ -0,0 +1,4 @@
+<!ELEMENT a EMPTY>
+<!ATTLIST a attr1 CDATA "&ge1;">
+<!--* GE reference in attr default before declaration *-->
+<!ENTITY ge1 "abcdef">
diff --git a/test/resources/ibm/invalid/P68/ibm68i02.xml b/test/resources/ibm/invalid/P68/ibm68i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i02.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm68i02.dtd" [
+  <!ELEMENT root (#PCDATA|a)* >
+]>
+<root>
+  pcdata content
+  <a attr1="xyz"/>
+</root>
+<!--* a invalid test for P68 VC:Entity Declared *-->
+
diff --git a/test/resources/ibm/invalid/P68/ibm68i03.ent b/test/resources/ibm/invalid/P68/ibm68i03.ent
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i03.ent
@@ -0,0 +1,4 @@
+<!ENTITY ge1 "abcdef">
+<!ELEMENT a EMPTY>
+<!ATTLIST a attr1 CDATA "&ge2;">
+<!--* GE reference in above doesn't match declaration *-->
diff --git a/test/resources/ibm/invalid/P68/ibm68i03.xml b/test/resources/ibm/invalid/P68/ibm68i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i03.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone='no'?>
+<!DOCTYPE root [
+  <!ELEMENT root (#PCDATA)* >
+  <!ENTITY % pe1 SYSTEM "ibm68i03.ent">
+  %pe1;
+]>
+<root>
+  pcdata content
+</root>
+<!--* a invalid test for P68 VC:Entity Declared *-->
diff --git a/test/resources/ibm/invalid/P68/ibm68i04.ent b/test/resources/ibm/invalid/P68/ibm68i04.ent
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i04.ent
@@ -0,0 +1,4 @@
+<!ELEMENT a EMPTY>
+<!ATTLIST a attr1 CDATA "&ge1;">
+<!ENTITY ge1 "abcdef">
+<!--* GE reference in attr default before declaration *-->
diff --git a/test/resources/ibm/invalid/P68/ibm68i04.xml b/test/resources/ibm/invalid/P68/ibm68i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/ibm68i04.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone='no'?>
+<!DOCTYPE root [
+  <!ELEMENT root (#PCDATA)* >
+  <!ENTITY % pe1 SYSTEM "ibm68i04.ent">
+  %pe1;
+]>
+<root>
+  pcdata content
+</root>
+<!--* a invalid test for P68 VC:Entity Declared *-->
diff --git a/test/resources/ibm/invalid/P68/out/ibm68i01.xml b/test/resources/ibm/invalid/P68/out/ibm68i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/out/ibm68i01.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;  <a attr1="xyz"></a>&#10;</root>
diff --git a/test/resources/ibm/invalid/P68/out/ibm68i02.xml b/test/resources/ibm/invalid/P68/out/ibm68i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/out/ibm68i02.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;  <a attr1="xyz"></a>&#10;</root>
diff --git a/test/resources/ibm/invalid/P68/out/ibm68i03.xml b/test/resources/ibm/invalid/P68/out/ibm68i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/out/ibm68i03.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;</root>
diff --git a/test/resources/ibm/invalid/P68/out/ibm68i04.xml b/test/resources/ibm/invalid/P68/out/ibm68i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P68/out/ibm68i04.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;</root>
diff --git a/test/resources/ibm/invalid/P69/ibm69i01.dtd b/test/resources/ibm/invalid/P69/ibm69i01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i01.dtd
@@ -0,0 +1,6 @@
+<!ENTITY ge1 "abcdef">
+<!ELEMENT a EMPTY>
+<!ATTLIST a attr1 CDATA "&ge1;">
+<!ENTITY % pe1 "<!ATTLIST a attr2 CDATA #IMPLIED>">
+%pe2;
+<!--* PE reference therebefore doesn't match declaration *-->
diff --git a/test/resources/ibm/invalid/P69/ibm69i01.xml b/test/resources/ibm/invalid/P69/ibm69i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm69i01.dtd" [
+  <!ELEMENT root (#PCDATA|a)* >
+]>
+<root>
+  pcdata content
+  <a attr1="xyz"/>
+</root>
+<!--* a invalid test for P69 VC:Entity Declared *-->
+
diff --git a/test/resources/ibm/invalid/P69/ibm69i02.dtd b/test/resources/ibm/invalid/P69/ibm69i02.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i02.dtd
@@ -0,0 +1,6 @@
+<!ELEMENT a EMPTY>
+<!ENTITY ge1 "abcdef">
+<!ATTLIST a attr1 CDATA "&ge1;">
+%pe1;
+<!--* PE reference in attr default before declaration *-->
+<!ENTITY % pe1 "<!ATTLIST a attr2 CDATA #IMPLIED>">
diff --git a/test/resources/ibm/invalid/P69/ibm69i02.xml b/test/resources/ibm/invalid/P69/ibm69i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i02.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root SYSTEM "ibm69i02.dtd" [
+  <!ELEMENT root (#PCDATA|a)* >
+]>
+<root>
+  pcdata content
+  <a attr1="xyz"/>
+</root>
+<!--* a invalid test for P69 VC:Entity Declared *-->
+
diff --git a/test/resources/ibm/invalid/P69/ibm69i03.ent b/test/resources/ibm/invalid/P69/ibm69i03.ent
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i03.ent
@@ -0,0 +1,7 @@
+<!ENTITY ge1 "abcdef">
+<!ELEMENT a EMPTY>
+<!ATTLIST a attr1 CDATA  "&ge1;">
+<!ENTITY % pe2 "<!ATTLIST a attr2 CDATA #IMPLIED>">
+%pe3;
+<!--* PE reference in above doesn't match declaration *-->
+
diff --git a/test/resources/ibm/invalid/P69/ibm69i03.xml b/test/resources/ibm/invalid/P69/ibm69i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i03.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone='no'?>
+<!DOCTYPE root [
+  <!ELEMENT root (#PCDATA)* >
+  <!ENTITY % pe1 SYSTEM "ibm69i03.ent">
+  %pe1;
+]>
+<root>
+  pcdata content
+</root>
+<!--* a invalid test for P69 VC:Entity Declared *-->
diff --git a/test/resources/ibm/invalid/P69/ibm69i04.ent b/test/resources/ibm/invalid/P69/ibm69i04.ent
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i04.ent
@@ -0,0 +1,8 @@
+<!ELEMENT a EMPTY>
+<!ENTITY ge1 "abcdef">
+<!ATTLIST a attr1 CDATA "&ge1;">
+%pe2;
+<!--* PE reference in attr default before declaration *-->
+<!ENTITY % pe2 "<!ATTLIST a attr2 CDATA #IMPLIED>">
+
+
diff --git a/test/resources/ibm/invalid/P69/ibm69i04.xml b/test/resources/ibm/invalid/P69/ibm69i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/ibm69i04.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone='no'?>
+<!DOCTYPE root  [
+  <!ELEMENT root (#PCDATA)* >
+  <!ENTITY % pe1 SYSTEM "ibm69i04.ent">
+  %pe1;
+]>
+<root>
+  pcdata content
+</root>
+<!--* a invalid test for P69 VC:Entity Declared *-->
diff --git a/test/resources/ibm/invalid/P69/out/ibm69i01.xml b/test/resources/ibm/invalid/P69/out/ibm69i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/out/ibm69i01.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;  <a attr1="xyz"></a>&#10;</root>
diff --git a/test/resources/ibm/invalid/P69/out/ibm69i02.xml b/test/resources/ibm/invalid/P69/out/ibm69i02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/out/ibm69i02.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;  <a attr1="xyz"></a>&#10;</root>
diff --git a/test/resources/ibm/invalid/P69/out/ibm69i03.xml b/test/resources/ibm/invalid/P69/out/ibm69i03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/out/ibm69i03.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;</root>
diff --git a/test/resources/ibm/invalid/P69/out/ibm69i04.xml b/test/resources/ibm/invalid/P69/out/ibm69i04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P69/out/ibm69i04.xml
@@ -0,0 +1,1 @@
+<root>&#10;  pcdata content&#10;</root>
diff --git a/test/resources/ibm/invalid/P76/ibm76i01.xml b/test/resources/ibm/invalid/P76/ibm76i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P76/ibm76i01.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+
+<!ENTITY % pe1 '<!ATTLIST root att2 CDATA "&ge1;">'>
+<!ENTITY ge1 "attdefaultvalue" >
+%pe1;
+
+<!--* notation JPGformat not declared *-->
+<!ENTITY ge2  SYSTEM "image.jpg" NDATA JPGformat>
+
+]>
+<root att2="any" />
+<!-- a invalid test case: test P76 VC: Notation Declared -->
diff --git a/test/resources/ibm/invalid/P76/out/ibm76i01.xml b/test/resources/ibm/invalid/P76/out/ibm76i01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/invalid/P76/out/ibm76i01.xml
@@ -0,0 +1,1 @@
+<root att2="any"></root>
diff --git a/test/resources/ibm/not-wf/P01/ibm01n01.xml b/test/resources/ibm/not-wf/P01/ibm01n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P01/ibm01n01.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE book [
+   <!ELEMENT book ANY>
+]>
+<!-- element is missing -->
diff --git a/test/resources/ibm/not-wf/P01/ibm01n01.xml.correct b/test/resources/ibm/not-wf/P01/ibm01n01.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P01/ibm01n01.xml.correct
@@ -0,0 +1,1 @@
+We don't enforce single root node, so this should pass.
diff --git a/test/resources/ibm/not-wf/P01/ibm01n02.xml b/test/resources/ibm/not-wf/P01/ibm01n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P01/ibm01n02.xml
@@ -0,0 +1,5 @@
+<doc>Wrong ordering between prolog and element!</doc>
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+   <!ELEMENT doc ANY>
+]>
diff --git a/test/resources/ibm/not-wf/P01/ibm01n03.xml b/test/resources/ibm/not-wf/P01/ibm01n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P01/ibm01n03.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+   <!ELEMENT doc ANY>
+   <!ELEMENT title ANY>
+]>
+<doc>Wrong combination!</doc>
+<?PI after document element?>
+<title>Wrong combination!</title>
+<?PI after title element?>
diff --git a/test/resources/ibm/not-wf/P01/ibm01n03.xml.correct b/test/resources/ibm/not-wf/P01/ibm01n03.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P01/ibm01n03.xml.correct
@@ -0,0 +1,1 @@
+We don't enforce single root node, so this should pass.
diff --git a/test/resources/ibm/not-wf/P02/ibm02n01.xml b/test/resources/ibm/not-wf/P02/ibm02n01.xml
new file mode 100644
Binary files /dev/null and b/test/resources/ibm/not-wf/P02/ibm02n01.xml differ
diff --git a/test/resources/ibm/not-wf/P02/ibm02n02.xml b/test/resources/ibm/not-wf/P02/ibm02n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n02.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x01
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n03.xml b/test/resources/ibm/not-wf/P02/ibm02n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n03.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x02
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n04.xml b/test/resources/ibm/not-wf/P02/ibm02n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n04.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x03
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n05.xml b/test/resources/ibm/not-wf/P02/ibm02n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n05.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x04
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n06.xml b/test/resources/ibm/not-wf/P02/ibm02n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n06.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x05
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n07.xml b/test/resources/ibm/not-wf/P02/ibm02n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n07.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x06
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n08.xml b/test/resources/ibm/not-wf/P02/ibm02n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n08.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x07
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n09.xml b/test/resources/ibm/not-wf/P02/ibm02n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n09.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x08
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n10.xml b/test/resources/ibm/not-wf/P02/ibm02n10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n10.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x0b
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n11.xml b/test/resources/ibm/not-wf/P02/ibm02n11.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n11.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x0c
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n12.xml b/test/resources/ibm/not-wf/P02/ibm02n12.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n12.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x0e
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n13.xml b/test/resources/ibm/not-wf/P02/ibm02n13.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n13.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x0f
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n14.xml b/test/resources/ibm/not-wf/P02/ibm02n14.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n14.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x10
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n15.xml b/test/resources/ibm/not-wf/P02/ibm02n15.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n15.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x11
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n16.xml b/test/resources/ibm/not-wf/P02/ibm02n16.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n16.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x12
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n17.xml b/test/resources/ibm/not-wf/P02/ibm02n17.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n17.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x13
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n18.xml b/test/resources/ibm/not-wf/P02/ibm02n18.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n18.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x14
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n19.xml b/test/resources/ibm/not-wf/P02/ibm02n19.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n19.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x15
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n20.xml b/test/resources/ibm/not-wf/P02/ibm02n20.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n20.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x16
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n21.xml b/test/resources/ibm/not-wf/P02/ibm02n21.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n21.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x17
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n22.xml b/test/resources/ibm/not-wf/P02/ibm02n22.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n22.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x18
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n23.xml b/test/resources/ibm/not-wf/P02/ibm02n23.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n23.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x19
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n24.xml b/test/resources/ibm/not-wf/P02/ibm02n24.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n24.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x1a
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n25.xml b/test/resources/ibm/not-wf/P02/ibm02n25.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n25.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x1b
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n26.xml b/test/resources/ibm/not-wf/P02/ibm02n26.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n26.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x1c
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n27.xml b/test/resources/ibm/not-wf/P02/ibm02n27.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n27.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x1d
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n28.xml b/test/resources/ibm/not-wf/P02/ibm02n28.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n28.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x1e
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n29.xml b/test/resources/ibm/not-wf/P02/ibm02n29.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n29.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #x1f
+ in p02:  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n30.xml b/test/resources/ibm/not-wf/P02/ibm02n30.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n30.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #xd800
+ in p02: í  -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n31.xml b/test/resources/ibm/not-wf/P02/ibm02n31.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n31.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #xdfff
+ in p02: í¿¿ -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n32.xml b/test/resources/ibm/not-wf/P02/ibm02n32.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n32.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #xfffe
+ in p02: ￾ -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P02/ibm02n33.xml b/test/resources/ibm/not-wf/P02/ibm02n33.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P02/ibm02n33.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+]>
+<!-- IllegalChar #xffff
+ in p02: ￿ -->
+<book/>
diff --git a/test/resources/ibm/not-wf/P03/ibm03n01.xml b/test/resources/ibm/not-wf/P03/ibm03n01.xml
new file mode 100644
Binary files /dev/null and b/test/resources/ibm/not-wf/P03/ibm03n01.xml differ
diff --git a/test/resources/ibm/not-wf/P04/ibm04n01.xml b/test/resources/ibm/not-wf/P04/ibm04n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n01.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar! [
+   <!ELEMENT IllegalNameChar! EMPTY>
+]>
+<IllegalNameChar!/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n02.xml b/test/resources/ibm/not-wf/P04/ibm04n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n02.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar( [
+   <!ELEMENT IllegalNameChar( EMPTY>
+]>
+<IllegalNameChar(/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n03.xml b/test/resources/ibm/not-wf/P04/ibm04n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n03.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar) [
+   <!ELEMENT IllegalNameChar) EMPTY>
+]>
+<IllegalNameChar)/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n04.xml b/test/resources/ibm/not-wf/P04/ibm04n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n04.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar+ [
+   <!ELEMENT IllegalNameChar+ EMPTY>
+]>
+<IllegalNameChar+/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n05.xml b/test/resources/ibm/not-wf/P04/ibm04n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n05.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar, [
+   <!ELEMENT IllegalNameChar, EMPTY>
+]>
+<IllegalNameChar,/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n06.xml b/test/resources/ibm/not-wf/P04/ibm04n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n06.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar/ [
+   <!ELEMENT IllegalNameChar/ EMPTY>
+]>
+<IllegalNameChar//>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n07.xml b/test/resources/ibm/not-wf/P04/ibm04n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n07.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar; [
+   <!ELEMENT IllegalNameChar; EMPTY>
+]>
+<IllegalNameChar;/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n08.xml b/test/resources/ibm/not-wf/P04/ibm04n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n08.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar< [
+   <!ELEMENT IllegalNameChar< EMPTY>
+]>
+<IllegalNameChar</>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n09.xml b/test/resources/ibm/not-wf/P04/ibm04n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n09.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar= [
+   <!ELEMENT IllegalNameChar= EMPTY>
+]>
+<IllegalNameChar=/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n10.xml b/test/resources/ibm/not-wf/P04/ibm04n10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n10.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar? [
+   <!ELEMENT IllegalNameChar? EMPTY>
+]>
+<IllegalNameChar?/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n11.xml b/test/resources/ibm/not-wf/P04/ibm04n11.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n11.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar[ [
+   <!ELEMENT IllegalNameChar[ EMPTY>
+]>
+<IllegalNameChar[/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n12.xml b/test/resources/ibm/not-wf/P04/ibm04n12.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n12.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar\ [
+   <!ELEMENT IllegalNameChar\ EMPTY>
+]>
+<IllegalNameChar\/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n13.xml b/test/resources/ibm/not-wf/P04/ibm04n13.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n13.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar] [
+   <!ELEMENT IllegalNameChar] EMPTY>
+]>
+<IllegalNameChar]/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n14.xml b/test/resources/ibm/not-wf/P04/ibm04n14.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n14.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar^ [
+   <!ELEMENT IllegalNameChar^ EMPTY>
+]>
+<IllegalNameChar^/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n15.xml b/test/resources/ibm/not-wf/P04/ibm04n15.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n15.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar` [
+   <!ELEMENT IllegalNameChar` EMPTY>
+]>
+<IllegalNameChar`/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n16.xml b/test/resources/ibm/not-wf/P04/ibm04n16.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n16.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar{ [
+   <!ELEMENT IllegalNameChar{ EMPTY>
+]>
+<IllegalNameChar{/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n17.xml b/test/resources/ibm/not-wf/P04/ibm04n17.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n17.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar| [
+   <!ELEMENT IllegalNameChar| EMPTY>
+]>
+<IllegalNameChar|/>
+
diff --git a/test/resources/ibm/not-wf/P04/ibm04n18.xml b/test/resources/ibm/not-wf/P04/ibm04n18.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P04/ibm04n18.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE IllegalNameChar} [
+   <!ELEMENT IllegalNameChar} EMPTY>
+]>
+<IllegalNameChar}/>
+
diff --git a/test/resources/ibm/not-wf/P05/ibm05n01.xml b/test/resources/ibm/not-wf/P05/ibm05n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P05/ibm05n01.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE .A_name_starts_with. [
+   <!ELEMENT .A_name_starts_with. EMPTY>
+]>
+<.A_name_starts_with./>  
diff --git a/test/resources/ibm/not-wf/P05/ibm05n02.xml b/test/resources/ibm/not-wf/P05/ibm05n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P05/ibm05n02.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE -A_name_starts_With- [
+   <!ELEMENT -A_name_starts_With- EMPTY>
+]>
+<-A_name_starts_With-/>  
diff --git a/test/resources/ibm/not-wf/P05/ibm05n03.xml b/test/resources/ibm/not-wf/P05/ibm05n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P05/ibm05n03.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE 5A_name_starts_with_digit [
+   <!ELEMENT 5A_name_starts_with_digit EMPTY>
+]>
+<5A_name_starts_with_digit/>  
diff --git a/test/resources/ibm/not-wf/P05/ibm05n04.xml b/test/resources/ibm/not-wf/P05/ibm05n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P05/ibm05n04.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE illegalChar0f7÷InTheMiddle [
+   <!ELEMENT illegalChar0f7÷InTheMiddle EMPTY>
+]>
+<illegalChar0f7÷InTheMiddle/>
+
diff --git a/test/resources/ibm/not-wf/P05/ibm05n05.xml b/test/resources/ibm/not-wf/P05/ibm05n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P05/ibm05n05.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE illegalNameChar÷ [
+   <!ELEMENT illegalNameChar÷ EMPTY>
+]>
+<illegalNameChar÷/>
+
diff --git a/test/resources/ibm/not-wf/P10/ibm10n01.xml b/test/resources/ibm/not-wf/P10/ibm10n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n01.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "Snow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue -->
+<student first="Snow<Man">My Name is SnowMan. </student>
+
+
+
+
+
diff --git a/test/resources/ibm/not-wf/P10/ibm10n01.xml.html.correct b/test/resources/ibm/not-wf/P10/ibm10n01.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n01.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML due to relaxes attribute values
diff --git a/test/resources/ibm/not-wf/P10/ibm10n02.xml b/test/resources/ibm/not-wf/P10/ibm10n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n02.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "Snow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue -->
+<student first="Snow&Man">My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P10/ibm10n02.xml.html.correct b/test/resources/ibm/not-wf/P10/ibm10n02.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n02.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML due to relaxes attribute values
diff --git a/test/resources/ibm/not-wf/P10/ibm10n03.xml b/test/resources/ibm/not-wf/P10/ibm10n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n03.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "Snow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue -->
+<student first="Snow"Man">My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P10/ibm10n04.xml b/test/resources/ibm/not-wf/P10/ibm10n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n04.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "Snow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue with no closing bracket -->
+<student first="Snow >My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P10/ibm10n05.xml b/test/resources/ibm/not-wf/P10/ibm10n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n05.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "SNow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue -->
+<student first='Snow<Man'>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P10/ibm10n05.xml.html.correct b/test/resources/ibm/not-wf/P10/ibm10n05.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n05.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML due to relaxes attribute values
diff --git a/test/resources/ibm/not-wf/P10/ibm10n06.xml b/test/resources/ibm/not-wf/P10/ibm10n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n06.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "Snow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue -->
+<student first='Snow&Man'>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P10/ibm10n06.xml.html.correct b/test/resources/ibm/not-wf/P10/ibm10n06.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n06.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML due to relaxes attribute values
diff --git a/test/resources/ibm/not-wf/P10/ibm10n07.xml b/test/resources/ibm/not-wf/P10/ibm10n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n07.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "Snow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue -->
+<student first="Snow"Man">My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P10/ibm10n08.xml b/test/resources/ibm/not-wf/P10/ibm10n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P10/ibm10n08.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student
+		first CDATA #REQUIRED
+		middle CDATA #IMPLIED
+		last CDATA #IMPLIED > 
+	<!ENTITY myfirst "Snow">
+	<!ENTITY mymiddle "I">
+	<!ENTITY mylast "Man">
+]>
+
+<!-- testing invalid attvalue with no closing single quote -->
+<student first='Snow >My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P11/ibm11n01.xml b/test/resources/ibm/not-wf/P11/ibm11n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P11/ibm11n01.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE student SYSTEM "student".dtd"[
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid system literal  -->
+<student>My Name is SnowMan. </student>
+
+
+
+
+
+
+
+
+
+
+ 
diff --git a/test/resources/ibm/not-wf/P11/ibm11n02.xml b/test/resources/ibm/not-wf/P11/ibm11n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P11/ibm11n02.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student SYSTEM 'student'.dtd'[
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid system literal  -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P11/ibm11n03.xml b/test/resources/ibm/not-wf/P11/ibm11n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P11/ibm11n03.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student SYSTEM "student.DTD [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid system literal with no closing bracket  -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P11/ibm11n04.xml b/test/resources/ibm/not-wf/P11/ibm11n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P11/ibm11n04.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student SYSTEM 'student.DTD [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid system literal with no closing bracket  -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P12/ibm12n01.xml b/test/resources/ibm/not-wf/P12/ibm12n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P12/ibm12n01.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+	<!ENTITY info PUBLIC "..\info.dtd>
+]>
+
+<!-- testing invalid pubid literal with no closing bracket  -->
+<student>My Name is &info;. </student>
+
+
+
+
+
+
+
+
+
+ 
diff --git a/test/resources/ibm/not-wf/P12/ibm12n02.xml b/test/resources/ibm/not-wf/P12/ibm12n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P12/ibm12n02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+	<!ENTITY info PUBLIC '..\info'.dtd'>
+]>
+
+<!-- testing invalid pubid literal -->
+<student>My Name is &info;. </student>
diff --git a/test/resources/ibm/not-wf/P12/ibm12n03.xml b/test/resources/ibm/not-wf/P12/ibm12n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P12/ibm12n03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+	<!ENTITY info PUBLIC '..\info.dtd>
+]>
+
+<!-- testing invalid pubid literal with no closing bracket  -->
+<student>My Name is &info;. </student>
diff --git a/test/resources/ibm/not-wf/P14/ibm14n01.xml b/test/resources/ibm/not-wf/P14/ibm14n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P14/ibm14n01.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student first CDATA #REQUIRED
+			  last  CDATA #IMPLIED>
+]>
+
+<!-- testing invalid chardata string  -->
+<student first="Snow">My name is Snow ]]> Man</student>
+
+
diff --git a/test/resources/ibm/not-wf/P14/ibm14n01.xml.correct b/test/resources/ibm/not-wf/P14/ibm14n01.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P14/ibm14n01.xml.correct
@@ -0,0 +1,1 @@
+This is documented as a way our parser is more accepting than XML.
diff --git a/test/resources/ibm/not-wf/P14/ibm14n02.xml b/test/resources/ibm/not-wf/P14/ibm14n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P14/ibm14n02.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student first CDATA #REQUIRED
+			  last  CDATA #IMPLIED>
+]>
+
+<!-- testing invalid chardata string  -->
+<student first="Snow">My name is Snow <Man </student>
diff --git a/test/resources/ibm/not-wf/P14/ibm14n03.xml b/test/resources/ibm/not-wf/P14/ibm14n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P14/ibm14n03.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student first CDATA #REQUIRED
+			  last  CDATA #IMPLIED>
+]>
+
+<!-- testing invalid chardata string  -->
+<student first="Snow">My name is Snow&Man </student>
diff --git a/test/resources/ibm/not-wf/P14/ibm14n03.xml.html.correct b/test/resources/ibm/not-wf/P14/ibm14n03.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P14/ibm14n03.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML due to relaxed rules about ampersands in text
diff --git a/test/resources/ibm/not-wf/P15/ibm15n01.xml b/test/resources/ibm/not-wf/P15/ibm15n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P15/ibm15n01.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid comment  -->
+<!------>
+<student>My Name is SnowMan. </student>
+
+
+
+
+
+
+ 
diff --git a/test/resources/ibm/not-wf/P15/ibm15n02.xml b/test/resources/ibm/not-wf/P15/ibm15n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P15/ibm15n02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid comment  -->
+<!-- Student's name ->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P15/ibm15n03.xml b/test/resources/ibm/not-wf/P15/ibm15n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P15/ibm15n03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid comment  -->
+<!- student file-1 -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P15/ibm15n04.xml b/test/resources/ibm/not-wf/P15/ibm15n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P15/ibm15n04.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid comment  -->
+<!--student phone number 408-777-8888 
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P16/ibm16n01.xml b/test/resources/ibm/not-wf/P16/ibm16n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P16/ibm16n01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid PI with illegal sequence  -->
+<?MyInstruct This is ?> a test ?>
+<student>My Name is SnowMan. </student>
+
+
diff --git a/test/resources/ibm/not-wf/P16/ibm16n01.xml.correct b/test/resources/ibm/not-wf/P16/ibm16n01.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P16/ibm16n01.xml.correct
@@ -0,0 +1,1 @@
+Accepting multiple root nodes makes this test case correct.
diff --git a/test/resources/ibm/not-wf/P16/ibm16n02.xml b/test/resources/ibm/not-wf/P16/ibm16n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P16/ibm16n02.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+
+<!-- testing invalid PI with missing PITarget  -->
+<??>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P16/ibm16n03.xml b/test/resources/ibm/not-wf/P16/ibm16n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P16/ibm16n03.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+
+<!-- testing invalid PI with wrong closing sequence  -->
+<?MyInstruct >
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P16/ibm16n04.xml b/test/resources/ibm/not-wf/P16/ibm16n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P16/ibm16n04.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+
+<!-- testing invalid PI with missing sequence  -->
+<?MyInstruct 
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P17/ibm17n01.xml b/test/resources/ibm/not-wf/P17/ibm17n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P17/ibm17n01.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+
+<!-- testing invalid PITarget  -->
+<?XML This is a test ?>
+<student>My Name is SnowMan. </student>
+
+
diff --git a/test/resources/ibm/not-wf/P17/ibm17n02.xml b/test/resources/ibm/not-wf/P17/ibm17n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P17/ibm17n02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid PITarget  -->
+<?xML This is a test ?>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P17/ibm17n03.xml b/test/resources/ibm/not-wf/P17/ibm17n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P17/ibm17n03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid PITarget  -->
+<?xml This is a test ?>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P17/ibm17n04.xml b/test/resources/ibm/not-wf/P17/ibm17n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P17/ibm17n04.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid PITarget  -->
+<?xmL This is a test ?>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P18/ibm18n01.xml b/test/resources/ibm/not-wf/P18/ibm18n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P18/ibm18n01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDSect with missing CDStart   -->
+<student>My Name is SnowMan. This is <normal> text]]></student>
+
+
diff --git a/test/resources/ibm/not-wf/P18/ibm18n02.xml b/test/resources/ibm/not-wf/P18/ibm18n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P18/ibm18n02.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDSect with missing CDEnd  -->
+<student>My Name is SnowMan. <![CDATA[This is <normal> text </student>
diff --git a/test/resources/ibm/not-wf/P19/ibm19n01.xml b/test/resources/ibm/not-wf/P19/ibm19n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P19/ibm19n01.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDStart -->
+<![cdata[This is a test]]>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P19/ibm19n02.xml b/test/resources/ibm/not-wf/P19/ibm19n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P19/ibm19n02.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDStart -->
+<![[CDATA[This is a test]]>
+<student>My Name is SnowMan. </student>
+
+
diff --git a/test/resources/ibm/not-wf/P19/ibm19n03.xml b/test/resources/ibm/not-wf/P19/ibm19n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P19/ibm19n03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDStart -->
+<?[CDATA[This is a test]]>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P20/ibm20n01.xml b/test/resources/ibm/not-wf/P20/ibm20n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P20/ibm20n01.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CData with illegal sequence -->
+<![CDATA[<testing>This is ]]> a test</testing>]]>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P21/ibm21n01.xml b/test/resources/ibm/not-wf/P21/ibm21n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P21/ibm21n01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDEnd -->
+<![[CDATA[This is a test]>
+<student>My Name is SnowMan. </student>
+
+
diff --git a/test/resources/ibm/not-wf/P21/ibm21n02.xml b/test/resources/ibm/not-wf/P21/ibm21n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P21/ibm21n02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDEnd -->
+<![cdata[This is a test]]]>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P21/ibm21n03.xml b/test/resources/ibm/not-wf/P21/ibm21n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P21/ibm21n03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing invalid CDEnd -->
+<![CDATA[This is a test])>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/P22/ibm22n01.xml b/test/resources/ibm/not-wf/P22/ibm22n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P22/ibm22n01.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<?xml version="1.0" encoding="ASCII" ?>
+<doc/>
+<!-- Wrong ordering between DTD and XMLDecl -->
diff --git a/test/resources/ibm/not-wf/P22/ibm22n02.xml b/test/resources/ibm/not-wf/P22/ibm22n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P22/ibm22n02.xml
@@ -0,0 +1,6 @@
+<!-- Wrong ordering Misc, DTD and XMLDecl -->
+<?xml version="1.0" encoding="ASCII" ?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/not-wf/P22/ibm22n03.xml b/test/resources/ibm/not-wf/P22/ibm22n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P22/ibm22n03.xml
@@ -0,0 +1,7 @@
+<!-- Wrong ordering patter 4 -->
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<!-- Wrong ordering Misc, DTD, Misc, and XMLDecl -->
+<?xml version="1.0" encoding="ASCII" ?>
+<doc/>
diff --git a/test/resources/ibm/not-wf/P23/ibm23n01.xml b/test/resources/ibm/not-wf/P23/ibm23n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P23/ibm23n01.xml
@@ -0,0 +1,6 @@
+<?xml encoding="ASCII" ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Missing required field VersionInfo in XMLDecl -->
diff --git a/test/resources/ibm/not-wf/P23/ibm23n02.xml b/test/resources/ibm/not-wf/P23/ibm23n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P23/ibm23n02.xml
@@ -0,0 +1,6 @@
+<?xml encoding='ASCII' version='1.0'?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong ordering between VersionInfo and EncodingDecl in XMLDecl -->
diff --git a/test/resources/ibm/not-wf/P23/ibm23n03.xml b/test/resources/ibm/not-wf/P23/ibm23n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P23/ibm23n03.xml
@@ -0,0 +1,6 @@
+<?xml encoding='ASCII' standalone='yes' version='1.0'?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong ordering EncodingDecl, SDDecl, and VersionInfo in XMLDecl -->
diff --git a/test/resources/ibm/not-wf/P23/ibm23n04.xml b/test/resources/ibm/not-wf/P23/ibm23n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P23/ibm23n04.xml
@@ -0,0 +1,6 @@
+<?XML version='1.0'?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong keyword in XMLDecl -->
diff --git a/test/resources/ibm/not-wf/P23/ibm23n05.xml b/test/resources/ibm/not-wf/P23/ibm23n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P23/ibm23n05.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='ASCII' standalone='yes' >
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong closing sequence in XMLDecl -->
diff --git a/test/resources/ibm/not-wf/P23/ibm23n06.xml b/test/resources/ibm/not-wf/P23/ibm23n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P23/ibm23n06.xml
@@ -0,0 +1,6 @@
+<!xml version='1.0' encoding='ASCII' standalone='yes' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong opening sequence in XMLDecl -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n01.xml b/test/resources/ibm/not-wf/P24/ibm24n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n01.xml
@@ -0,0 +1,6 @@
+<?xml version= ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- VersioNum is missing in VersionInfo -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n02.xml b/test/resources/ibm/not-wf/P24/ibm24n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n02.xml
@@ -0,0 +1,6 @@
+<?xmlversion='1.0' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- S is missing in VersionInfo -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n03.xml b/test/resources/ibm/not-wf/P24/ibm24n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n03.xml
@@ -0,0 +1,6 @@
+<?xml version'1.0' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]> 
+<doc/>
+<!-- Eq is missing in VersionInfo -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n04.xml b/test/resources/ibm/not-wf/P24/ibm24n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n04.xml
@@ -0,0 +1,6 @@
+<?xml '1.0'=version ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong ordering VersionNum Eq 'version' -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n05.xml b/test/resources/ibm/not-wf/P24/ibm24n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n05.xml
@@ -0,0 +1,6 @@
+<?xml version'1.0'= ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong ordering version VersionNum Eq -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n06.xml b/test/resources/ibm/not-wf/P24/ibm24n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n06.xml
@@ -0,0 +1,6 @@
+<?xml Version='1.0' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong key word 'Version' -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n07.xml b/test/resources/ibm/not-wf/P24/ibm24n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n07.xml
@@ -0,0 +1,6 @@
+<?xml versioN='1.0' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong key word 'versioN' -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n08.xml b/test/resources/ibm/not-wf/P24/ibm24n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n08.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0" ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Mismatched qotes in VersionInfo -->
diff --git a/test/resources/ibm/not-wf/P24/ibm24n09.xml b/test/resources/ibm/not-wf/P24/ibm24n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P24/ibm24n09.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0 ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Mismatched qotes in VersionInfo -->
diff --git a/test/resources/ibm/not-wf/P25/ibm25n01.xml b/test/resources/ibm/not-wf/P25/ibm25n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P25/ibm25n01.xml
@@ -0,0 +1,6 @@
+<?xml version=='1.0' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong key word "==" in Eq -->
diff --git a/test/resources/ibm/not-wf/P25/ibm25n02.xml b/test/resources/ibm/not-wf/P25/ibm25n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P25/ibm25n02.xml
@@ -0,0 +1,6 @@
+<?xml version eq '1.0' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- Wrong key word "eq" in Eq -->
diff --git a/test/resources/ibm/not-wf/P26/ibm26n01.xml b/test/resources/ibm/not-wf/P26/ibm26n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P26/ibm26n01.xml
@@ -0,0 +1,6 @@
+<?xml version='_#1.0' ?>
+<!DOCTYPE doc [
+   <!ELEMENT doc EMPTY>
+]>
+<doc/>
+<!-- illegal character '#' in VersionNum -->
diff --git a/test/resources/ibm/not-wf/P27/ibm27n01.xml b/test/resources/ibm/not-wf/P27/ibm27n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P27/ibm27n01.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" ?>
+<!DOCTYPE animal [
+   <!ELEMENT animal ANY>
+]>
+<animal>Wrong type of Misc following this element!</animal>
+<!ELEMENT cat EMPTY>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n01.dtd b/test/resources/ibm/not-wf/P28/ibm28n01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n01.dtd
@@ -0,0 +1,1 @@
+<!ELEMENT animal EMPTY>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n01.xml b/test/resources/ibm/not-wf/P28/ibm28n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n01.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE SYSTEM "ibm28n01.dtd">
+<!-- Name is missing in doctypedecl --> 
+<animal/>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n02.xml b/test/resources/ibm/not-wf/P28/ibm28n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n02.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE [
+<!ELEMENT animal EMPTY>
+] animal>
+<!-- Wrong ordering [ ] Name in doctypedecl --> 
+<animal/>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n03.xml b/test/resources/ibm/not-wf/P28/ibm28n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n03.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE SYSTEM "ibm28n01.dtd" animal [
+   <!ATTLIST animal color CDATA #REQUIRED>
+]>
+<!-- Wrong ordering ExternalID Name [ ] in doctypedecl --> 
+<animal color="yellow"/>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n04.xml b/test/resources/ibm/not-wf/P28/ibm28n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n04.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE aniaml [
+   <!ELEMENT animal ANY>
+   <!ENTITY generalE "leopard">
+   &generalE;
+   <!ENTITY % parameterE "<!ELEMENT leopard EMPTY>">
+   %parameterE;
+] animal>
+<!-- Wrong componet general entity reference occurs inside the DTD -->
+<!-- General entity sould be used in the document content --> 
+<animal>&generalE</animal>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n05.xml b/test/resources/ibm/not-wf/P28/ibm28n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n05.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCtYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Wrong keyword DOCTYPE in doctypedecl --> 
+<animal/>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n05.xml.html.correct b/test/resources/ibm/not-wf/P28/ibm28n05.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n05.xml.html.correct
@@ -0,0 +1,1 @@
+Correct in HTML because DOCTYPE is a case insensitive match.
diff --git a/test/resources/ibm/not-wf/P28/ibm28n06.xml b/test/resources/ibm/not-wf/P28/ibm28n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n06.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+>
+<!-- Bracket mismatch in [ ] in doctypedecl --> 
+<animal/>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n07.xml b/test/resources/ibm/not-wf/P28/ibm28n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n07.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE animal {
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Wrong bracket in [ ] in doctypedecl --> 
+<animal/>
diff --git a/test/resources/ibm/not-wf/P28/ibm28n08.xml b/test/resources/ibm/not-wf/P28/ibm28n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P28/ibm28n08.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<?DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Wrong opening sequence in doctypedecl --> 
+<animal/>
diff --git a/test/resources/ibm/not-wf/P30/ibm30n01.dtd b/test/resources/ibm/not-wf/P30/ibm30n01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P30/ibm30n01.dtd
@@ -0,0 +1,3 @@
+<!ELEMENT animal EMPTY>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Wrong order extSubsetDecl TextDecl in the external DTD -->
diff --git a/test/resources/ibm/not-wf/P30/ibm30n01.xml b/test/resources/ibm/not-wf/P30/ibm30n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P30/ibm30n01.xml
@@ -0,0 +1,3 @@
+<!DOCTYPE animal SYSTEM "ibm30n01.dtd">
+<animal/>
+<!-- Wrong ordering extSubsetDecl TextDecl in the external DTD -->
diff --git a/test/resources/ibm/not-wf/P30/ibm30n01.xml.correct b/test/resources/ibm/not-wf/P30/ibm30n01.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P30/ibm30n01.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse DTDs.
diff --git a/test/resources/ibm/not-wf/P31/ibm31n01.dtd b/test/resources/ibm/not-wf/P31/ibm31n01.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P31/ibm31n01.dtd
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ELEMENT animal EMPTY>
+<!ENTITY generalE "A general entity">
+&generalE;
+<!-- Illegal extSubsetDecl in the external DTD -->
diff --git a/test/resources/ibm/not-wf/P31/ibm31n01.xml b/test/resources/ibm/not-wf/P31/ibm31n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P31/ibm31n01.xml
@@ -0,0 +1,3 @@
+<!DOCTYPE animal SYSTEM "ibm31n01.dtd">
+<animal/>
+<!-- Illegal extSubsetDecl in the external DTD -->
diff --git a/test/resources/ibm/not-wf/P31/ibm31n01.xml.correct b/test/resources/ibm/not-wf/P31/ibm31n01.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P31/ibm31n01.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse DTDs.
diff --git a/test/resources/ibm/not-wf/P32/ibm32n01.xml b/test/resources/ibm/not-wf/P32/ibm32n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n01.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"standalone="yes" ?>
+<!DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Missing a S in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n02.xml b/test/resources/ibm/not-wf/P32/ibm32n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n02.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone"yes" ?>
+<!DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Missing Eq in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n03.xml b/test/resources/ibm/not-wf/P32/ibm32n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n03.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" Standalone="yes" ?>
+<!DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Wrong keyword in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n04.xml b/test/resources/ibm/not-wf/P32/ibm32n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n04.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone="Yes" ?>
+<!DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Wrong keyword in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n05.xml b/test/resources/ibm/not-wf/P32/ibm32n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n05.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone="YES" ?>
+<!DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Wrong keyword in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n06.dtd b/test/resources/ibm/not-wf/P32/ibm32n06.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n06.dtd
@@ -0,0 +1,1 @@
+<!ELEMENT animal EMPTY>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n06.xml b/test/resources/ibm/not-wf/P32/ibm32n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n06.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" standalone="No" ?>
+<!DOCTYPE animal SYSTEM "ibm32n06.dtd">
+<!-- Wrong keyword in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n07.xml b/test/resources/ibm/not-wf/P32/ibm32n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n07.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" standalone="NO" ?>
+<!DOCTYPE animal SYSTEM "ibm32n06.dtd">
+<!-- Wrong keyword in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P32/ibm32n08.xml b/test/resources/ibm/not-wf/P32/ibm32n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P32/ibm32n08.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" standalone"Yes"= ?>
+<!DOCTYPE animal [
+   <!ELEMENT animal EMPTY>
+]>
+<!-- Wrong ordering in SDDecl -->
+<animal/>
diff --git a/test/resources/ibm/not-wf/P39/ibm39n01.xml b/test/resources/ibm/not-wf/P39/ibm39n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P39/ibm39n01.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root (#PCDATA)>
+]>
+<root>missing end tag
+
diff --git a/test/resources/ibm/not-wf/P39/ibm39n02.xml b/test/resources/ibm/not-wf/P39/ibm39n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P39/ibm39n02.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root (#PCDATA)>
+]>
+missing start tag</root>
diff --git a/test/resources/ibm/not-wf/P39/ibm39n03.xml b/test/resources/ibm/not-wf/P39/ibm39n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P39/ibm39n03.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root (#PCDATA)>
+]>
+<root>
+<!--* Missing end tag and no content -->
diff --git a/test/resources/ibm/not-wf/P39/ibm39n04.xml b/test/resources/ibm/not-wf/P39/ibm39n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P39/ibm39n04.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root (#PCDATA)>
+]>
+</root>
+<!--* Missing start tag and no content -->
+
+
diff --git a/test/resources/ibm/not-wf/P39/ibm39n05.xml b/test/resources/ibm/not-wf/P39/ibm39n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P39/ibm39n05.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root (#PCDATA)>
+]>
+</root>switched start and end tags<root>
diff --git a/test/resources/ibm/not-wf/P39/ibm39n06.xml b/test/resources/ibm/not-wf/P39/ibm39n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P39/ibm39n06.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root (#PCDATA)>
+]>
+<root></root>content after end tag
diff --git a/test/resources/ibm/not-wf/P39/ibm39n06.xml.correct b/test/resources/ibm/not-wf/P39/ibm39n06.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P39/ibm39n06.xml.correct
@@ -0,0 +1,1 @@
+Multiple root nodes exception makes this correct.
diff --git a/test/resources/ibm/not-wf/P40/ibm40n01.xml b/test/resources/ibm/not-wf/P40/ibm40n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P40/ibm40n01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<attr1="any">missing name in start tag</root>
+
+
+
diff --git a/test/resources/ibm/not-wf/P40/ibm40n02.xml b/test/resources/ibm/not-wf/P40/ibm40n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P40/ibm40n02.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<rootattr1="any">missing white space in start tag</root>
diff --git a/test/resources/ibm/not-wf/P40/ibm40n03.xml b/test/resources/ibm/not-wf/P40/ibm40n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P40/ibm40n03.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<attr1="any" root>Wrong ordering in start tag</root>
diff --git a/test/resources/ibm/not-wf/P40/ibm40n04.xml b/test/resources/ibm/not-wf/P40/ibm40n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P40/ibm40n04.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<!root attr1="any">wrong begining sequence in start tag</root>
diff --git a/test/resources/ibm/not-wf/P40/ibm40n05.xml b/test/resources/ibm/not-wf/P40/ibm40n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P40/ibm40n05.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root attr1="any1" attr1="any2">duplicate attr names in start tag</root>
+
+
diff --git a/test/resources/ibm/not-wf/P41/ibm41n.ent b/test/resources/ibm/not-wf/P41/ibm41n.ent
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n.ent
@@ -0,0 +1,2 @@
+<?xml verison="1.0"?>
+any
diff --git a/test/resources/ibm/not-wf/P41/ibm41n01.xml b/test/resources/ibm/not-wf/P41/ibm41n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n01.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root ="any">missing name in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n02.xml b/test/resources/ibm/not-wf/P41/ibm41n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n02.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root attr1"any">missing Eq in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n03.xml b/test/resources/ibm/not-wf/P41/ibm41n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n03.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root attr1= >missing AttValue in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n04.xml b/test/resources/ibm/not-wf/P41/ibm41n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n04.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root "any">missing name and Eq in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n05.xml b/test/resources/ibm/not-wf/P41/ibm41n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n05.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root attr1>missing Eq and AttValue in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n05.xml.html.correct b/test/resources/ibm/not-wf/P41/ibm41n05.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n05.xml.html.correct
@@ -0,0 +1,1 @@
+HTML allows empty attributes.
diff --git a/test/resources/ibm/not-wf/P41/ibm41n06.xml b/test/resources/ibm/not-wf/P41/ibm41n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n06.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root = >missing Name and AttValue in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n07.xml b/test/resources/ibm/not-wf/P41/ibm41n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n07.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root attr1"any"=>wrong ordering in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n08.xml b/test/resources/ibm/not-wf/P41/ibm41n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n08.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root "any"=attr1>wrong ordering in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n09.xml b/test/resources/ibm/not-wf/P41/ibm41n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n09.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root =attr1"any">wrong ordering in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P41/ibm41n10.ent b/test/resources/ibm/not-wf/P41/ibm41n10.ent
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n10.ent
@@ -0,0 +1,2 @@
+<?xml verison="1.0"?>
+any
diff --git a/test/resources/ibm/not-wf/P41/ibm41n10.xml b/test/resources/ibm/not-wf/P41/ibm41n10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P41/ibm41n10.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+<!ENTITY aExternal SYSTEM "ibm41n10.ent">
+]>
+<root attr1="&aExternal;">direct reference to external entinity in Attribute</root>
diff --git a/test/resources/ibm/not-wf/P42/ibm42n01.xml b/test/resources/ibm/not-wf/P42/ibm42n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P42/ibm42n01.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+]>
+<root attr1="any">missing Name in ETag</>
diff --git a/test/resources/ibm/not-wf/P42/ibm42n02.xml b/test/resources/ibm/not-wf/P42/ibm42n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P42/ibm42n02.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+]>
+<root attr1="any">Wrong begining sequence in ETag <\root>
diff --git a/test/resources/ibm/not-wf/P42/ibm42n03.xml b/test/resources/ibm/not-wf/P42/ibm42n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P42/ibm42n03.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+]>
+<root attr1="any">Wrong begining sequence in ETag <root>
diff --git a/test/resources/ibm/not-wf/P42/ibm42n04.xml b/test/resources/ibm/not-wf/P42/ibm42n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P42/ibm42n04.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+]>
+<root attr1="any">Extra white space before Name in ETag </ root>
diff --git a/test/resources/ibm/not-wf/P42/ibm42n05.xml b/test/resources/ibm/not-wf/P42/ibm42n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P42/ibm42n05.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+]>
+<root> Attribute in ETag </root attr1="any">
diff --git a/test/resources/ibm/not-wf/P43/ibm43n01.xml b/test/resources/ibm/not-wf/P43/ibm43n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P43/ibm43n01.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY % paaa "a string">
+]>
+<root>
+<!NOTATION nota1 SYSTEM "bogus.not">
+</root>
+<!--* NotationDecl in content -->
diff --git a/test/resources/ibm/not-wf/P43/ibm43n02.xml b/test/resources/ibm/not-wf/P43/ibm43n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P43/ibm43n02.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY % paaa "a string">
+]>
+<root>
+<!ELEMENT ele1 ANY>
+</root>
+<!--* ElementDecl in content -->
diff --git a/test/resources/ibm/not-wf/P43/ibm43n04.xml b/test/resources/ibm/not-wf/P43/ibm43n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P43/ibm43n04.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY % paaa "a string">
+]>
+<root>
+<!ENTITY GE1 "This is an entity declaration">
+</root>
+<!--* EntityDecl in content -->
diff --git a/test/resources/ibm/not-wf/P43/ibm43n05.xml b/test/resources/ibm/not-wf/P43/ibm43n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P43/ibm43n05.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY % paaa "a string">
+]>
+<root>
+<!ATTLIST root attr1 ID #IMPLIED>
+</root>
+<!--* AttlistDecl in content -->
diff --git a/test/resources/ibm/not-wf/P44/ibm44n01.xml b/test/resources/ibm/not-wf/P44/ibm44n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P44/ibm44n01.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root EMPTY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+< />
+<!--* Missing Name and Attribute EmptyElemTag *-->
diff --git a/test/resources/ibm/not-wf/P44/ibm44n02.xml b/test/resources/ibm/not-wf/P44/ibm44n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P44/ibm44n02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root EMPTY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<attr1="any" root/>
+<!--* Swithech positions of Name and Attribute EmptyElemTag *-->
diff --git a/test/resources/ibm/not-wf/P44/ibm44n03.xml b/test/resources/ibm/not-wf/P44/ibm44n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P44/ibm44n03.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root EMPTY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root attr1="any"\>
+<!--* Wrong closing sequence in EmptyElemTag *-->
+
+
+
+
diff --git a/test/resources/ibm/not-wf/P44/ibm44n04.xml b/test/resources/ibm/not-wf/P44/ibm44n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P44/ibm44n04.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE root [
+<!ELEMENT root EMPTY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ATTLIST root attr2 CDATA #IMPLIED>
+]>
+<root attr1="any1" attr1="any2"/>
+<!--* Duplicate Attribute Name in EmptyElemTag *-->
diff --git a/test/resources/ibm/not-wf/P66/ibm66n01.xml b/test/resources/ibm/not-wf/P66/ibm66n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n01.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "wrong charater reference: &#002f;">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n01.xml.correct b/test/resources/ibm/not-wf/P66/ibm66n01.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n01.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset.
diff --git a/test/resources/ibm/not-wf/P66/ibm66n02.xml b/test/resources/ibm/not-wf/P66/ibm66n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n02.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong character reference: &#x003a"/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n02.xml.html.correct b/test/resources/ibm/not-wf/P66/ibm66n02.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n02.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P66/ibm66n03.xml b/test/resources/ibm/not-wf/P66/ibm66n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n03.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "wrong charater reference: &49;">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n03.xml.correct b/test/resources/ibm/not-wf/P66/ibm66n03.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n03.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset.
diff --git a/test/resources/ibm/not-wf/P66/ibm66n04.xml b/test/resources/ibm/not-wf/P66/ibm66n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n04.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong charater reference:&#5~0;"/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n04.xml.html.correct b/test/resources/ibm/not-wf/P66/ibm66n04.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n04.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P66/ibm66n05.xml b/test/resources/ibm/not-wf/P66/ibm66n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n05.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "wrong charater reference: &#x002g;">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n05.xml.correct b/test/resources/ibm/not-wf/P66/ibm66n05.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n05.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset.
diff --git a/test/resources/ibm/not-wf/P66/ibm66n06.xml b/test/resources/ibm/not-wf/P66/ibm66n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n06.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong charater reference:&#x006G;"/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n06.xml.html.correct b/test/resources/ibm/not-wf/P66/ibm66n06.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n06.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P66/ibm66n07.xml b/test/resources/ibm/not-wf/P66/ibm66n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n07.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "wrong charater reference: &#x0=2f;">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n07.xml.correct b/test/resources/ibm/not-wf/P66/ibm66n07.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n07.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset.
diff --git a/test/resources/ibm/not-wf/P66/ibm66n08.xml b/test/resources/ibm/not-wf/P66/ibm66n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n08.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong charater reference:&#56.0;"/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n08.xml.html.correct b/test/resources/ibm/not-wf/P66/ibm66n08.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n08.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P66/ibm66n09.xml b/test/resources/ibm/not-wf/P66/ibm66n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n09.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "wrong charater reference: &#x00/2f;">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n09.xml.correct b/test/resources/ibm/not-wf/P66/ibm66n09.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n09.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset.
diff --git a/test/resources/ibm/not-wf/P66/ibm66n10.xml b/test/resources/ibm/not-wf/P66/ibm66n10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n10.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong charater reference: &#51);"/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n10.xml.html.correct b/test/resources/ibm/not-wf/P66/ibm66n10.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n10.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P66/ibm66n11.xml b/test/resources/ibm/not-wf/P66/ibm66n11.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n11.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "wrong charater reference: &#x00 2f;">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P66/ibm66n11.xml.correct b/test/resources/ibm/not-wf/P66/ibm66n11.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n11.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset.
diff --git a/test/resources/ibm/not-wf/P66/ibm66n12.xml b/test/resources/ibm/not-wf/P66/ibm66n12.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n12.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong replacement charater reference: &#x0000;" />
diff --git a/test/resources/ibm/not-wf/P66/ibm66n13.xml b/test/resources/ibm/not-wf/P66/ibm66n13.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n13.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong replacement charater: &#x001f;" />
diff --git a/test/resources/ibm/not-wf/P66/ibm66n14.xml b/test/resources/ibm/not-wf/P66/ibm66n14.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n14.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong replacement charater : &#xfffe;" />
diff --git a/test/resources/ibm/not-wf/P66/ibm66n15.xml b/test/resources/ibm/not-wf/P66/ibm66n15.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P66/ibm66n15.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root EMPTY>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="wrong replacement charater: &#xffff;" />
diff --git a/test/resources/ibm/not-wf/P68/ibm68n01.xml b/test/resources/ibm/not-wf/P68/ibm68n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n01.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "aString">
+]>
+<root>missing entity name &;</root>
diff --git a/test/resources/ibm/not-wf/P68/ibm68n01.xml.html.correct b/test/resources/ibm/not-wf/P68/ibm68n01.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n01.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P68/ibm68n02.xml b/test/resources/ibm/not-wf/P68/ibm68n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n02.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "aString">
+]>
+<root att="&aaa">missing semi-colon</root>
diff --git a/test/resources/ibm/not-wf/P68/ibm68n02.xml.html.correct b/test/resources/ibm/not-wf/P68/ibm68n02.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n02.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P68/ibm68n03.xml b/test/resources/ibm/not-wf/P68/ibm68n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n03.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "aString">
+]>
+<root>extra space after ampsand & aaa;</root>
+
+
diff --git a/test/resources/ibm/not-wf/P68/ibm68n03.xml.html.correct b/test/resources/ibm/not-wf/P68/ibm68n03.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n03.xml.html.correct
@@ -0,0 +1,1 @@
+Relaxes attribute values permit this (as literal & in value)
diff --git a/test/resources/ibm/not-wf/P68/ibm68n04.xml b/test/resources/ibm/not-wf/P68/ibm68n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n04.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "aString">
+]>
+<root att="&aAa;">reference doesn't match delaration</root>
diff --git a/test/resources/ibm/not-wf/P68/ibm68n05.xml b/test/resources/ibm/not-wf/P68/ibm68n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n05.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root>undefined entitiy &aaa; </root>
diff --git a/test/resources/ibm/not-wf/P68/ibm68n06.dtd b/test/resources/ibm/not-wf/P68/ibm68n06.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n06.dtd
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<!ENTITY aaa "aString">
diff --git a/test/resources/ibm/not-wf/P68/ibm68n06.xml b/test/resources/ibm/not-wf/P68/ibm68n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n06.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE root SYSTEM "ibm68n06.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+
+]>
+<root att="&aaa;">entity declared externally but standalone is yes</root>
diff --git a/test/resources/ibm/not-wf/P68/ibm68n07.xml b/test/resources/ibm/not-wf/P68/ibm68n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n07.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!--* Entity referenced before declared *-->
+<!ATTLIST root att1 CDATA "&aaa;">
+<!ENTITY aaa "aString">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P68/ibm68n07.xml.correct b/test/resources/ibm/not-wf/P68/ibm68n07.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n07.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the DOCTYPE internal subset
diff --git a/test/resources/ibm/not-wf/P68/ibm68n08.xml b/test/resources/ibm/not-wf/P68/ibm68n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n08.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!ENTITY aaa "aString">
+<!NOTATION JPGformat SYSTEM "JPGFormat">
+<!ENTITY aImage SYSTEM "image.jpg" NDATA JPGformat>
+]>
+<root>unparsed entity reference in the wrong place &aImage;</root>
diff --git a/test/resources/ibm/not-wf/P68/ibm68n09.xml b/test/resources/ibm/not-wf/P68/ibm68n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n09.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!--* recursive entity reference *-->
+<!ENTITY aaa "&bbb;">
+<!ENTITY bbb "&aaa;">
+]>
+<root>&aaa;</root>
+
diff --git a/test/resources/ibm/not-wf/P68/ibm68n10.xml b/test/resources/ibm/not-wf/P68/ibm68n10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P68/ibm68n10.xml
@@ -0,0 +1,14 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!--* indirect recursive entity reference *-->
+<!ENTITY aaa "&bbb;">
+<!ENTITY bbb "&ccc;">
+<!ENTITY ccc "&ddd;">
+<!ENTITY ddd "&eee;">
+<!ENTITY eee "&aaa;">
+]>
+<root>&aaa;</root>
+
+
diff --git a/test/resources/ibm/not-wf/P75/empty.dtd b/test/resources/ibm/not-wf/P75/empty.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/empty.dtd
@@ -0,0 +1,1 @@
+<?xml version="1.0"?> 
diff --git a/test/resources/ibm/not-wf/P75/ibm75n01.xml b/test/resources/ibm/not-wf/P75/ibm75n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n01.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!--* wrong keyword: system  *-->
+<!ENTITY pImage system "image.jpg">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n01.xml.correct b/test/resources/ibm/not-wf/P75/ibm75n01.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n01.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset
diff --git a/test/resources/ibm/not-wf/P75/ibm75n02.xml b/test/resources/ibm/not-wf/P75/ibm75n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n02.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* wrong keyword: public  *-->
+<!DOCTYPE root 
+    public "-//W3C//DTD//EN" "empty.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n02.xml.html.correct b/test/resources/ibm/not-wf/P75/ibm75n02.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n02.xml.html.correct
@@ -0,0 +1,1 @@
+Legal HTML because PUBLIC and SYSTEM are case insensitive matches.
diff --git a/test/resources/ibm/not-wf/P75/ibm75n03.xml b/test/resources/ibm/not-wf/P75/ibm75n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n03.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* wrong keyword: Public  *-->
+<!DOCTYPE root 
+    Public "-//W3C//DTD//EN" "empty.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n03.xml.html.correct b/test/resources/ibm/not-wf/P75/ibm75n03.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n03.xml.html.correct
@@ -0,0 +1,1 @@
+Legal HTML because PUBLIC and SYSTEM are case insensitive matches.
diff --git a/test/resources/ibm/not-wf/P75/ibm75n04.xml b/test/resources/ibm/not-wf/P75/ibm75n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n04.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* wrong order *-->
+<!DOCTYPE root 
+    "-//W3C//DTD//EN" "empty.dtd" PUBLIC
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n05.xml b/test/resources/ibm/not-wf/P75/ibm75n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n05.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!--* missing space *-->
+<!ENTITY pImage SYSTEM"image.jpg">
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n05.xml.correct b/test/resources/ibm/not-wf/P75/ibm75n05.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n05.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset
diff --git a/test/resources/ibm/not-wf/P75/ibm75n06.xml b/test/resources/ibm/not-wf/P75/ibm75n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n06.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!--* missing SystemLiterral *-->
+<!ENTITY pImage SYSTEM >
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n06.xml.correct b/test/resources/ibm/not-wf/P75/ibm75n06.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n06.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset
diff --git a/test/resources/ibm/not-wf/P75/ibm75n07.xml b/test/resources/ibm/not-wf/P75/ibm75n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n07.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* missing space  *-->
+<!DOCTYPE root 
+    PUBLIC "-//W3C//DTD//EN""empty.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n08.xml b/test/resources/ibm/not-wf/P75/ibm75n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n08.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* missing keyword: PUBLIC  *-->
+<!DOCTYPE root 
+    "-//W3C//DTD//EN" "empty.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n09.xml b/test/resources/ibm/not-wf/P75/ibm75n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n09.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* missing space  *-->
+<!DOCTYPE root 
+    PUBLIC"-//W3C//DTD//EN" "empty.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n10.xml b/test/resources/ibm/not-wf/P75/ibm75n10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n10.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* missing PubidLiteral  *-->
+<!DOCTYPE root 
+    PUBLIC ".\empty.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n11.xml b/test/resources/ibm/not-wf/P75/ibm75n11.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n11.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* missing System Literal *-->
+<!DOCTYPE root 
+    public "-//W3C//DTD//EN"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n12.xml b/test/resources/ibm/not-wf/P75/ibm75n12.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n12.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+<!--* wrong order *-->
+<!ENTITY pImage "image.jpg" SYSTEM>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P75/ibm75n12.xml.correct b/test/resources/ibm/not-wf/P75/ibm75n12.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n12.xml.correct
@@ -0,0 +1,1 @@
+Correct because we don't parse the internal DTD subset
diff --git a/test/resources/ibm/not-wf/P75/ibm75n13.xml b/test/resources/ibm/not-wf/P75/ibm75n13.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P75/ibm75n13.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!--* wrong order *-->
+<!DOCTYPE root 
+    "-//W3C//DTD//EN" PUBLIC "empty.dtd"
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P80/ibm80n01.xml b/test/resources/ibm/not-wf/P80/ibm80n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P80/ibm80n01.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"encoding="UTF-8"?>
+<!--* missing white space in above EncodingDecl *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P80/ibm80n02.xml b/test/resources/ibm/not-wf/P80/ibm80n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P80/ibm80n02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding "UTF-8"?>
+<!--* missing Eq in above EncodingDecl *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P80/ibm80n03.xml b/test/resources/ibm/not-wf/P80/ibm80n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P80/ibm80n03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding= ?>
+<!--* missing EncName in above EncodingDecl *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P80/ibm80n04.xml b/test/resources/ibm/not-wf/P80/ibm80n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P80/ibm80n04.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" "UTF-8"encoding=?>
+<!--* wrong ordering in above EncodingDecl *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P80/ibm80n05.xml b/test/resources/ibm/not-wf/P80/ibm80n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P80/ibm80n05.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" "UTF-8"=encoding?>
+<!--* wrong ordering in above EncodingDecl *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P80/ibm80n06.xml b/test/resources/ibm/not-wf/P80/ibm80n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P80/ibm80n06.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" Encoding="UTF-8"?>
+<!--* Wrong keyword Encoding in above EncodingDecl *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n01.xml b/test/resources/ibm/not-wf/P81/ibm81n01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="_UTF-8"?>
+<!--* Illegal inital Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
+
diff --git a/test/resources/ibm/not-wf/P81/ibm81n02.xml b/test/resources/ibm/not-wf/P81/ibm81n02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="-UTF-8"?>
+<!--* Illegal inital Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n03.xml b/test/resources/ibm/not-wf/P81/ibm81n03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n03.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding=".UTF-8"?>
+<!--* Illegal inital Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n04.xml b/test/resources/ibm/not-wf/P81/ibm81n04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n04.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="8-UTF"?>
+<!--* Illegal initial Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n05.xml b/test/resources/ibm/not-wf/P81/ibm81n05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n05.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF~8"?>
+<!--* Illegal Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n06.xml b/test/resources/ibm/not-wf/P81/ibm81n06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n06.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF#8"?>
+<!--* Illegal Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n07.xml b/test/resources/ibm/not-wf/P81/ibm81n07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n07.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF:8"?>
+<!--* IllegalCharater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n08.xml b/test/resources/ibm/not-wf/P81/ibm81n08.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n08.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF/8"?>
+<!--* Illegal Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/P81/ibm81n09.xml b/test/resources/ibm/not-wf/P81/ibm81n09.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/P81/ibm81n09.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF;8"?>
+<!--* Illegal Charater in above EncName *-->
+<!DOCTYPE root 
+[
+<!ELEMENT root (#PCDATA)>
+<!ATTLIST root att CDATA #IMPLIED>
+]>
+<root/>
diff --git a/test/resources/ibm/not-wf/misc/432gewf.xml b/test/resources/ibm/not-wf/misc/432gewf.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/misc/432gewf.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ENTITY gewithElemnetDecl "<!ELEMENT bogus ANY>"> 
+        <!ATTLIST student att1 CDATA #REQUIRED>
+]>
+<!--* This test is to test the GE well-formedness 
+      constraints in Section 4.3.2:
+      An internal general parsed encith is well-formed if 
+      its replacement text matches the production labeled
+      "content" *--> 
+<?MyInstruct This is a test ?>
+<student att1="ibm">My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/misc/ltinentval.xml b/test/resources/ibm/not-wf/misc/ltinentval.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/misc/ltinentval.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ENTITY gewithlt "abcd&#x26;&#x23;x3c;"> 
+        <!ATTLIST student att1 CDATA #REQUIRED>
+]>
+<--* this is to test "<" can not be included in an entity 
+     that is referenced in AttValue, even indirectly *-->
+     
+
+<?MyInstruct This is a test ?>
+<student att1="&gewithlt;">My Name is SnowMan. </student>
diff --git a/test/resources/ibm/not-wf/misc/simpleltinentval.xml b/test/resources/ibm/not-wf/misc/simpleltinentval.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/not-wf/misc/simpleltinentval.xml
@@ -0,0 +1,14 @@
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ENTITY gewithlt "abcd&#x3c;"> 
+        <!ATTLIST student att1 CDATA #REQUIRED>
+]>
+<--* this is to test "<" can not be included in the 
+     replacement text of an entity that is referenced 
+     in AttValue. Anyway, this file should be rejected
+     because the internal GE "gewithlt" is not even 
+     well-formed by definition. *-->
+     
+
+<?MyInstruct This is a test ?>
+<student att1="&gewithlt;">My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P01/ibm01v01.xml b/test/resources/ibm/valid/P01/ibm01v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P01/ibm01v01.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="us-ascii" standalone="yes" ?>
+<!-- Above is XMLDecl -->
+<!DOCTYPE animal [
+<!ELEMENT animal (cat|tiger|leopard)+>
+<!ELEMENT cat EMPTY>
+<!ELEMENT tiger (#PCDATA)>
+<!ELEMENT leopard ANY>
+<!ELEMENT small EMPTY>
+<!ELEMENT big EMPTY>
+<!ATTLIST tiger color CDATA #REQUIRED>
+]>
+<!-- Above is DTD -->
+<?music "Here is a PI" ?> 
+<animal>
+   <cat/>
+   <tiger color="white">This is a white tiger in Mirage!!</tiger>
+   <cat/>
+   <leopard>
+      <small/>
+      <big/>
+   </leopard>
+</animal>
+<!-- Above is element animal -->
+
diff --git a/test/resources/ibm/valid/P01/out/ibm01v01.xml b/test/resources/ibm/valid/P01/out/ibm01v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P01/out/ibm01v01.xml
@@ -0,0 +1,1 @@
+<?music "Here is a PI" ?><animal>&#10;   <cat></cat>&#10;   <tiger color="white">This is a white tiger in Mirage!!</tiger>&#10;   <cat></cat>&#10;   <leopard>&#10;      <small></small>&#10;      <big></big>&#10;   </leopard>&#10;</animal>
diff --git a/test/resources/ibm/valid/P02/ibm02v01.xml b/test/resources/ibm/valid/P02/ibm02v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P02/ibm02v01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+<!-- This test case covers 3 legal character ranges plus
+     3 discrete legal characters for production 02. -->
+<?NAME_09-	_0A-
+_0D-_20- _D7FF-í¿_6c0f-æ°_E000-î_FFFD-ï¿½_effe-î¿¾_010000-ð_10FFFF-ô¿_08ffff-ò¿ This is a PI target ?>
+]>
+<book/>
diff --git a/test/resources/ibm/valid/P02/ibm02v01.xml.incorrect b/test/resources/ibm/valid/P02/ibm02v01.xml.incorrect
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P02/ibm02v01.xml.incorrect
@@ -0,0 +1,1 @@
+Incorrect by a plain reading of the spec.  Suspect this is an old test case.
diff --git a/test/resources/ibm/valid/P02/out/ibm02v01.xml b/test/resources/ibm/valid/P02/out/ibm02v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P02/out/ibm02v01.xml
@@ -0,0 +1,4 @@
+<?NAME_09- _0A-
+
+_0D-
+_20- _D7FF-퟿_6c0f-氏_E000-_FFFD-�_effe-_010000-𐀟10FFFF-􏿟08ffff-򏿠This is a PI target ?><book></book>
diff --git a/test/resources/ibm/valid/P03/ibm03v01.xml b/test/resources/ibm/valid/P03/ibm03v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P03/ibm03v01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book [
+<!ELEMENT book ANY>
+<!-- This test case covers 0 legal character ranges plus
+     4 discrete legal characters for production 03. -->
+<?NAME_20- _09-	_0D-_0A-
+ This is a PI target ?>
+]>
+<book/>
diff --git a/test/resources/ibm/valid/P03/out/ibm03v01.xml b/test/resources/ibm/valid/P03/out/ibm03v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P03/out/ibm03v01.xml
@@ -0,0 +1,4 @@
+<?NAME_20- _09-	_0D-
+_0A-
+
+ This is a PI target ?><book></book>
diff --git a/test/resources/ibm/valid/P11/ibm11v01.xml b/test/resources/ibm/valid/P11/ibm11v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/ibm11v01.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+   <!ELEMENT student (#PCDATA)>
+   <!ENTITY unref SYSTEM "">
+]>
+
+<!-- testing systemliteral with nothing between the double quotes -->
+<student>My Name is SnowMan. </student>
+
+
+
+
+
+
+
+
+ 
diff --git a/test/resources/ibm/valid/P11/ibm11v02.xml b/test/resources/ibm/valid/P11/ibm11v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/ibm11v02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+   <!ELEMENT student (#PCDATA)>
+   <!ENTITY unref SYSTEM ''>
+]>
+
+<!-- testing systemliteral with nothing between the single quotes -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P11/ibm11v03.xml b/test/resources/ibm/valid/P11/ibm11v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/ibm11v03.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE student SYSTEM 'student.dtd'[
+]>
+<!-- testing systemliteral with a string with "'" -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P11/ibm11v04.xml b/test/resources/ibm/valid/P11/ibm11v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/ibm11v04.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student SYSTEM "student.dtd" [
+]>
+
+<!-- testing systemliteral with a string with '"' -->
+<student>My Name is SnowMan. </student>
+
diff --git a/test/resources/ibm/valid/P11/out/ibm11v01.xml b/test/resources/ibm/valid/P11/out/ibm11v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/out/ibm11v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P11/out/ibm11v02.xml b/test/resources/ibm/valid/P11/out/ibm11v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/out/ibm11v02.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P11/out/ibm11v03.xml b/test/resources/ibm/valid/P11/out/ibm11v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/out/ibm11v03.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P11/out/ibm11v04.xml b/test/resources/ibm/valid/P11/out/ibm11v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/out/ibm11v04.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P11/student.dtd b/test/resources/ibm/valid/P11/student.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P11/student.dtd
@@ -0,0 +1,3 @@
+<?xml encoding="US-ASCII"?>
+<!-- student.dtd -->
+<!ELEMENT student (#PCDATA)> 
diff --git a/test/resources/ibm/valid/P12/ibm12v01.xml b/test/resources/ibm/valid/P12/ibm12v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/ibm12v01.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE student PUBLIC "" "student.dtd"[
+]>
+
+<!-- testing Pubid Literal with nothing between the double quote -->
+<student>My Name is SnowMan. </student>
+
+
+
+
+
+
+
+ 
diff --git a/test/resources/ibm/valid/P12/ibm12v02.xml b/test/resources/ibm/valid/P12/ibm12v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/ibm12v02.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE student PUBLIC '' 'student.dtd'[
+]>
+
+<!-- testing Pubid Literal with nothing between the single quotes -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P12/ibm12v03.xml b/test/resources/ibm/valid/P12/ibm12v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/ibm12v03.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE student PUBLIC "The big ' in it" "student.dtd"[
+]>
+
+<!-- testing Pubid Literal with a string with "'" inside -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P12/ibm12v04.xml b/test/resources/ibm/valid/P12/ibm12v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/ibm12v04.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE student PUBLIC 'The latest version' 'student.dtd'[
+]>
+
+<!-- testing Pubid Literal with a string without  "'" inside -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P12/out/ibm12v01.xml b/test/resources/ibm/valid/P12/out/ibm12v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/out/ibm12v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P12/out/ibm12v02.xml b/test/resources/ibm/valid/P12/out/ibm12v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/out/ibm12v02.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P12/out/ibm12v03.xml b/test/resources/ibm/valid/P12/out/ibm12v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/out/ibm12v03.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P12/out/ibm12v04.xml b/test/resources/ibm/valid/P12/out/ibm12v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/out/ibm12v04.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P12/student.dtd b/test/resources/ibm/valid/P12/student.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P12/student.dtd
@@ -0,0 +1,3 @@
+<?xml encoding="US-ASCII"?>
+<!-- student.dtd -->
+<!ELEMENT student (#PCDATA)> 
diff --git a/test/resources/ibm/valid/P13/ibm13v01.xml b/test/resources/ibm/valid/P13/ibm13v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P13/ibm13v01.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE student PUBLIC "#x20 #xD #xA abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -'()+,./:=?;!*#@$_% " "student.dtd"[
+]>
+
+<!-- testing Pubid char with all legal pubidchar in a string -->
+<student>My Name is SnowMan. </student>
+
+
+
+
+
+
+
+
+ 
diff --git a/test/resources/ibm/valid/P13/out/ibm13v01.xml b/test/resources/ibm/valid/P13/out/ibm13v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P13/out/ibm13v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P13/student.dtd b/test/resources/ibm/valid/P13/student.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P13/student.dtd
@@ -0,0 +1,3 @@
+<?xml encoding="US-ASCII"?>
+<!-- student.dtd -->
+<!ELEMENT student (#PCDATA)> 
diff --git a/test/resources/ibm/valid/P14/ibm14v01.xml b/test/resources/ibm/valid/P14/ibm14v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P14/ibm14v01.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student first CDATA #REQUIRED
+			  last  CDATA #IMPLIED>
+]>
+
+<!-- testing chardata with empty string -->
+<student first="Snow"></student>
+
+
diff --git a/test/resources/ibm/valid/P14/ibm14v02.xml b/test/resources/ibm/valid/P14/ibm14v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P14/ibm14v02.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student first CDATA #REQUIRED
+			  last  CDATA #IMPLIED>
+]>
+
+<!-- testing chardata with white space -->
+<student first="Eric"> &#x0A; &#x09; &#x0D;&#x20;</student>
+
+
diff --git a/test/resources/ibm/valid/P14/ibm14v03.xml b/test/resources/ibm/valid/P14/ibm14v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P14/ibm14v03.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)>
+	<!ATTLIST student first CDATA #REQUIRED
+			  last  CDATA #IMPLIED>
+]>
+
+<!-- testing chardata with a string of sample legal char except '<' and '&' nor does it contain sequence "]]>" -->
+<student first="Snow" last="Man">This is a test</student>
diff --git a/test/resources/ibm/valid/P14/out/ibm14v01.xml b/test/resources/ibm/valid/P14/out/ibm14v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P14/out/ibm14v01.xml
@@ -0,0 +1,1 @@
+<student first="Snow"></student>
diff --git a/test/resources/ibm/valid/P14/out/ibm14v02.xml b/test/resources/ibm/valid/P14/out/ibm14v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P14/out/ibm14v02.xml
@@ -0,0 +1,1 @@
+<student first="Eric"> &#10; &#9; &#13; </student>
diff --git a/test/resources/ibm/valid/P14/out/ibm14v03.xml b/test/resources/ibm/valid/P14/out/ibm14v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P14/out/ibm14v03.xml
@@ -0,0 +1,1 @@
+<student first="Snow" last="Man">This is a test</student>
diff --git a/test/resources/ibm/valid/P15/ibm15v01.xml b/test/resources/ibm/valid/P15/ibm15v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/ibm15v01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+<!--* Tests empty comment *-->
+<!---->
+<student>My Name is SnowMan. </student>
+
+
diff --git a/test/resources/ibm/valid/P15/ibm15v02.xml b/test/resources/ibm/valid/P15/ibm15v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/ibm15v02.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- Student's name -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P15/ibm15v03.xml b/test/resources/ibm/valid/P15/ibm15v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/ibm15v03.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- student file-1 -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P15/ibm15v04.xml b/test/resources/ibm/valid/P15/ibm15v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/ibm15v04.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!--student phone number 408-398 (387)-4758 -->
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P15/out/ibm15v01.xml b/test/resources/ibm/valid/P15/out/ibm15v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/out/ibm15v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P15/out/ibm15v02.xml b/test/resources/ibm/valid/P15/out/ibm15v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/out/ibm15v02.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P15/out/ibm15v03.xml b/test/resources/ibm/valid/P15/out/ibm15v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/out/ibm15v03.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P15/out/ibm15v04.xml b/test/resources/ibm/valid/P15/out/ibm15v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P15/out/ibm15v04.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P16/ibm16v01.xml b/test/resources/ibm/valid/P16/ibm16v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P16/ibm16v01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<?MyInstruct?>
+<student>My Name is SnowMan. </student>
+
+
diff --git a/test/resources/ibm/valid/P16/ibm16v02.xml b/test/resources/ibm/valid/P16/ibm16v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P16/ibm16v02.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<?MyInstruct ?>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P16/ibm16v03.xml b/test/resources/ibm/valid/P16/ibm16v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P16/ibm16v03.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<?MyInstruct AVOID ? BEFORE > IN PI ?>
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P16/out/ibm16v01.xml b/test/resources/ibm/valid/P16/out/ibm16v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P16/out/ibm16v01.xml
@@ -0,0 +1,1 @@
+<?MyInstruct ?><student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P16/out/ibm16v02.xml b/test/resources/ibm/valid/P16/out/ibm16v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P16/out/ibm16v02.xml
@@ -0,0 +1,1 @@
+<?MyInstruct ?><student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P16/out/ibm16v03.xml b/test/resources/ibm/valid/P16/out/ibm16v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P16/out/ibm16v03.xml
@@ -0,0 +1,1 @@
+<?MyInstruct AVOID ? BEFORE > IN PI ?><student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P17/ibm17v01.xml b/test/resources/ibm/valid/P17/ibm17v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P17/ibm17v01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<?MyInstruct This is a test ?>
+<student>My Name is SnowMan. </student>
+
+
diff --git a/test/resources/ibm/valid/P17/out/ibm17v01.xml b/test/resources/ibm/valid/P17/out/ibm17v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P17/out/ibm17v01.xml
@@ -0,0 +1,1 @@
+<?MyInstruct This is a test ?><student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P18/ibm18v01.xml b/test/resources/ibm/valid/P18/ibm18v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P18/ibm18v01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing CDSect with CDStart CData CDEnd -->
+
+<student>My Name is SnowMan. <![CDATA[This is <normal> text]]> </student>
+
diff --git a/test/resources/ibm/valid/P18/out/ibm18v01.xml b/test/resources/ibm/valid/P18/out/ibm18v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P18/out/ibm18v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. This is &lt;normal&gt; text </student>
diff --git a/test/resources/ibm/valid/P19/ibm19v01.xml b/test/resources/ibm/valid/P19/ibm19v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P19/ibm19v01.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing CDStart -->
+<student>My Name is SnowMan. <![CDATA[This is a test]]> </student>
+
+
diff --git a/test/resources/ibm/valid/P19/out/ibm19v01.xml b/test/resources/ibm/valid/P19/out/ibm19v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P19/out/ibm19v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. This is a test </student>
diff --git a/test/resources/ibm/valid/P20/ibm20v01.xml b/test/resources/ibm/valid/P20/ibm20v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P20/ibm20v01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing CData with empty string -->
+
+<student>My Name is SnowMan. <![CDATA[]]></student>
+
+
diff --git a/test/resources/ibm/valid/P20/ibm20v02.xml b/test/resources/ibm/valid/P20/ibm20v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P20/ibm20v02.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing CData with legal chars -->
+
+<student>My Name is SnowMan. <![CDATA[<testing>This is a test</testing>]]></student>
diff --git a/test/resources/ibm/valid/P20/out/ibm20v01.xml b/test/resources/ibm/valid/P20/out/ibm20v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P20/out/ibm20v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. </student>
diff --git a/test/resources/ibm/valid/P20/out/ibm20v02.xml b/test/resources/ibm/valid/P20/out/ibm20v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P20/out/ibm20v02.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. &lt;testing&gt;This is a test&lt;/testing&gt;</student>
diff --git a/test/resources/ibm/valid/P21/ibm21v01.xml b/test/resources/ibm/valid/P21/ibm21v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P21/ibm21v01.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE student [
+	<!ELEMENT student (#PCDATA)> 
+]>
+
+<!-- testing CDEnd --> 
+
+<student>My Name is SnowMan. <![CDATA[This is a test]]> </student>
+
+
diff --git a/test/resources/ibm/valid/P21/out/ibm21v01.xml b/test/resources/ibm/valid/P21/out/ibm21v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P21/out/ibm21v01.xml
@@ -0,0 +1,1 @@
+<student>My Name is SnowMan. This is a test </student>
diff --git a/test/resources/ibm/valid/P22/ibm22v01.xml b/test/resources/ibm/valid/P22/ibm22v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/ibm22v01.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="us-ascii" ?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P22/ibm22v02.xml b/test/resources/ibm/valid/P22/ibm22v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/ibm22v02.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P22/ibm22v03.xml b/test/resources/ibm/valid/P22/ibm22v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/ibm22v03.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<!-- This is a Misc -->
+<doc/>
diff --git a/test/resources/ibm/valid/P22/ibm22v04.xml b/test/resources/ibm/valid/P22/ibm22v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/ibm22v04.xml
@@ -0,0 +1,5 @@
+<!-- This is a Misc -->
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P22/ibm22v05.xml b/test/resources/ibm/valid/P22/ibm22v05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/ibm22v05.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="us-ascii" ?>
+<!-- This is a Misc -->
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P22/ibm22v06.xml b/test/resources/ibm/valid/P22/ibm22v06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/ibm22v06.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="us-ascii" ?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<!-- This is a Misc -->
+<doc/>
diff --git a/test/resources/ibm/valid/P22/ibm22v07.xml b/test/resources/ibm/valid/P22/ibm22v07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/ibm22v07.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="us-ascii" ?>
+<!-- This is a Misc -->
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<!-- This is a Misc -->
+<doc/>
diff --git a/test/resources/ibm/valid/P22/out/ibm22v01.xml b/test/resources/ibm/valid/P22/out/ibm22v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/out/ibm22v01.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P22/out/ibm22v02.xml b/test/resources/ibm/valid/P22/out/ibm22v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/out/ibm22v02.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P22/out/ibm22v03.xml b/test/resources/ibm/valid/P22/out/ibm22v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/out/ibm22v03.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P22/out/ibm22v04.xml b/test/resources/ibm/valid/P22/out/ibm22v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/out/ibm22v04.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P22/out/ibm22v05.xml b/test/resources/ibm/valid/P22/out/ibm22v05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/out/ibm22v05.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P22/out/ibm22v06.xml b/test/resources/ibm/valid/P22/out/ibm22v06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/out/ibm22v06.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P22/out/ibm22v07.xml b/test/resources/ibm/valid/P22/out/ibm22v07.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P22/out/ibm22v07.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P23/ibm23v01.xml b/test/resources/ibm/valid/P23/ibm23v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/ibm23v01.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0'?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P23/ibm23v02.xml b/test/resources/ibm/valid/P23/ibm23v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/ibm23v02.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P23/ibm23v03.xml b/test/resources/ibm/valid/P23/ibm23v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/ibm23v03.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' standalone='yes' ?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P23/ibm23v04.xml b/test/resources/ibm/valid/P23/ibm23v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/ibm23v04.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' ?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P23/ibm23v05.xml b/test/resources/ibm/valid/P23/ibm23v05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/ibm23v05.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P23/ibm23v06.xml b/test/resources/ibm/valid/P23/ibm23v06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/ibm23v06.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/ibm/valid/P23/out/ibm23v01.xml b/test/resources/ibm/valid/P23/out/ibm23v01.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/out/ibm23v01.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P23/out/ibm23v02.xml b/test/resources/ibm/valid/P23/out/ibm23v02.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/out/ibm23v02.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P23/out/ibm23v03.xml b/test/resources/ibm/valid/P23/out/ibm23v03.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/out/ibm23v03.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P23/out/ibm23v04.xml b/test/resources/ibm/valid/P23/out/ibm23v04.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/out/ibm23v04.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P23/out/ibm23v05.xml b/test/resources/ibm/valid/P23/out/ibm23v05.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/out/ibm23v05.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/ibm/valid/P23/out/ibm23v06.xml b/test/resources/ibm/valid/P23/out/ibm23v06.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/ibm/valid/P23/out/ibm23v06.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/oasis/e2.xml b/test/resources/oasis/e2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/e2.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE el [
+<!ELEMENT el EMPTY>
+<!ATTLIST el at (one|two|two) #IMPLIED>
+]>
+<e1 at="two"/>
diff --git a/test/resources/oasis/oasis.xml b/test/resources/oasis/oasis.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/oasis.xml
@@ -0,0 +1,1637 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<TESTCASES PROFILE='OASIS/NIST TESTS, 1-Nov-1998' xml:base="oasis">
+
+  <TEST TYPE='valid' SECTIONS='2.2 [1]'
+      ID='o-p01pass2' URI='p01pass2.xml'>
+     various Misc items where they can occur
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.3 [6]'
+      ID='o-p06pass1' URI='p06pass1.xml'>
+     various satisfactions of the Names production in a NAMES
+    attribute
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.3 [7]'
+      ID='o-p07pass1' URI='p07pass1.xml'>
+     various valid Nmtoken 's in an attribute list declaration.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.3 [8]'
+      ID='o-p08pass1' URI='p08pass1.xml' NAMESPACE='no'>
+     various satisfaction of an NMTOKENS attribute value.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.3 [9]'
+      ID='o-p09pass1' URI='p09pass1.xml'>
+     valid EntityValue's.  Except for entity references,
+              markup is not recognized.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.3 [12]'
+      ID='o-p12pass1' URI='p12pass1.xml'>
+     valid public IDs.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 [22]'
+      ID='o-p22pass4' URI='p22pass4.xml'>
+     XML decl and doctypedecl
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 [22]'
+      ID='o-p22pass5' URI='p22pass5.xml'>
+     just doctypedecl
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 [22]'
+      ID='o-p22pass6' URI='p22pass6.xml'>
+     S between decls is not required
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.1 [43] [44]'
+      ID='o-p28pass1' URI='p28pass1.xml'>
+    Empty-element tag must be used for element which are declared EMPTY.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 4.1 [28] [69]'
+      ID='o-p28pass3' URI='p28pass3.xml'>
+    Valid doctypedecl with Parameter entity reference.  The declaration of a parameter entity must precede any reference to it.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 4.2.2 [28] [75]'
+      ID='o-p28pass4' URI='p28pass4.xml'>
+    Valid doctypedecl with ExternalID as an External Entity declaration.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 4.1 [28] [69]'
+      ID='o-p28pass5' URI='p28pass5.xml'>
+    Valid doctypedecl with ExternalID as an External Entity.  A parameter entity reference is also used.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 [29]'
+      ID='o-p29pass1' URI='p29pass1.xml'>
+     Valid types of markupdecl.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 4.2.2 [30] [75]'
+      ID='o-p30pass1' URI='p30pass1.xml'>
+    Valid doctypedecl with ExternalID as an External Entity.  The external entity has an element declaration.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 4.2.2 4.3.1 [30] [75] [77]'
+      ID='o-p30pass2' URI='p30pass2.xml'>
+    Valid doctypedecl with ExternalID as an Enternal Entity.  The external entity begins with a Text Declaration.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 [31]'
+      ID='o-p31pass1' URI='p31pass1.xml'>
+     external subset can be empty
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.8 3.4 4.2.2 [31] [62] [63] [75]'
+      ID='o-p31pass2' URI='p31pass2.xml'>
+    Valid doctypedecl with EXternalID as Enternal Entity.  The external entity contains a parameter entity reference and condtional sections.</TEST>
+
+  <TEST TYPE='valid' SECTIONS='2.4 2.5 2.6 2.7 [15] [16] [18]'
+      ID='o-p43pass1' URI='p43pass1.xml'>
+    Valid use of character data, comments, processing instructions and CDATA sections within the start and end tag.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.2 [45]'
+      ID='o-p45pass1' URI='p45pass1.xml'>
+     valid element declarations
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.2 3.2.1 3.2.2 [45] [46] [47] [51]'
+      ID='o-p46pass1' URI='p46pass1.xml'>
+    Valid use of contentspec, element content models, and mixed content within an element type declaration.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.2 3.2.1 [45] [46] [47] '
+      ID='o-p47pass1' URI='p47pass1.xml'>
+    Valid use of contentspec, element content models, choices, sequences and content particles within an element type declaration.  The optional character following a name or list governs the number of times the element or content particle may appear.     </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.2 3.2.1 [45] [46] [47]'
+      ID='o-p48pass1' URI='p48pass1.xml'>
+    Valid use of contentspec, element content models, choices, sequences and content particles within an element type declaration.  The optional character following a name or list governs the number of times the element or content particle may appear.    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.2 3.2.1 [45] [46] [47]'
+      ID='o-p49pass1' URI='p49pass1.xml'>
+    Valid use of contentspec, element content models, choices, and content particles within an element type declaration.  The optional character following a name or list governs the number of times the element or content particle may appear.  Whitespace is also valid between choices.   </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.2 3.2.1 [45] [46] [47]'
+      ID='o-p50pass1' URI='p50pass1.xml'>
+    Valid use of contentspec, element content models, sequences and content particles within an element type declaration.  The optional character following a name or list governs the number of times the element or content particle may appear.  Whitespace is also valid between sequences.   </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.2.2 [51]'
+      ID='o-p51pass1' URI='p51pass1.xml'>
+     valid Mixed contentspec's.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3 [52]'
+      ID='o-p52pass1' URI='p52pass1.xml'>
+     valid AttlistDecls: No AttDef's are required,
+    and the terminating
+          S is optional, multiple ATTLISTS per element are OK, and multiple
+          declarations of the same attribute are OK.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3 [53]'
+      ID='o-p53pass1' URI='p53pass1.xml'>
+     a valid AttDef
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3.1 [54]'
+      ID='o-p54pass1' URI='p54pass1.xml'>
+     the three kinds of attribute types
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3.1 [55]'
+      ID='o-p55pass1' URI='p55pass1.xml'>
+     StringType = "CDATA"
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3.1 [56]'
+      ID='o-p56pass1' URI='p56pass1.xml'>
+     the 7 tokenized attribute types
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3.1 [57]'
+      ID='o-p57pass1' URI='p57pass1.xml'>
+     enumerated types are NMTOKEN or NOTATION lists
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3.1 [58]'
+      ID='o-p58pass1' URI='p58pass1.xml'>
+     NOTATION enumeration has on or more items
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3.1 [59]'
+      ID='o-p59pass1' URI='p59pass1.xml'>
+     NMTOKEN enumerations haveon or more items
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.3.2 [60]'
+      ID='o-p60pass1' URI='p60pass1.xml'>
+     the four types of default values
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.4 [61]'
+      ID='o-p61pass1' URI='p61pass1.xml'>
+     valid conditional sections are INCLUDE and IGNORE
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.4 [62]'
+      ID='o-p62pass1' URI='p62pass1.xml'>
+     valid INCLUDE sections -- options S before and
+    after keyword, sections can nest
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.4 [63]'
+      ID='o-p63pass1' URI='p63pass1.xml'>
+     valid IGNORE sections
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='3.4 [64]'
+      ID='o-p64pass1' URI='p64pass1.xml'>
+     IGNOREd sections ignore everything except section delimiters
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='4.1 [68]'
+      ID='o-p68pass1' URI='p68pass1.xml'>
+     Valid entity references.  Also ensures that a charref to
+          '&amp;' isn't interpreted as an entity reference open delimiter
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='4.1 [69]'
+      ID='o-p69pass1' URI='p69pass1.xml'>
+     Valid PEReferences.
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='4.2 [70]'
+      ID='o-p70pass1' URI='p70pass1.xml'>
+     An EntityDecl is either a GEDecl or a PEDecl
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='4.2 [71]'
+      ID='o-p71pass1' URI='p71pass1.xml'>
+     Valid GEDecls
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='4.2 [72]'
+      ID='o-p72pass1' URI='p72pass1.xml'>
+     Valid PEDecls
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='4.2 [73]'
+      ID='o-p73pass1' URI='p73pass1.xml'>
+     EntityDef is either Entity value or an external id,
+    with an optional NDataDecl
+    </TEST>
+
+  <TEST TYPE='valid' SECTIONS='4.2.2 [76]'
+      ID='o-p76pass1' URI='p76pass1.xml'>
+     valid NDataDecls
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.1 [1]'
+      ID='o-p01pass1' URI='p01pass1.xml'>
+     no prolog
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.1 [1]'
+      ID='o-p01pass3' URI='p01pass3.xml'>
+     Misc items after the document
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.3 [3]'
+      ID='o-p03pass1' URI='p03pass1.xml'>
+     all valid S characters
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.3 [4]'
+      ID='o-p04pass1' URI='p04pass1.xml' NAMESPACE='no'>
+     names with all valid ASCII characters, and one from each
+              other class in NameChar
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.3 [5]'
+      ID='o-p05pass1' URI='p05pass1.xml' NAMESPACE='no'>
+     various valid Name constructions
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.3 [6]'
+      ID='o-p06fail1' URI='p06fail1.xml'>
+     Requires at least one name.
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.3 [8]'
+      ID='o-p08fail1' URI='p08fail1.xml'>
+     at least one Nmtoken is required.
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.3 [8]'
+      ID='o-p08fail2' URI='p08fail2.xml'>
+     an invalid Nmtoken character.
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.3 [10]'
+      ID='o-p10pass1' URI='p10pass1.xml'>
+     valid attribute values
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.4 [14]'
+      ID='o-p14pass1' URI='p14pass1.xml'>
+     valid CharData
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.5 [15]'
+      ID='o-p15pass1' URI='p15pass1.xml'>
+     valid comments
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8'
+      ID='o-p16fail3' URI='p16fail3.xml'>
+     File is well-formed, but not valid.  An XML document is valid if it has an associated document type declaration and 
+     if the document complies with the constraints expressed in it.
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.6 [16] [17]'
+      ID='o-p16pass1' URI='p16pass1.xml'>
+    Valid form of Processing Instruction. Shows that whitespace character data is valid before end of processing instruction.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.6 [16]'
+      ID='o-p16pass2' URI='p16pass2.xml'>
+    Valid form of Processing Instruction. Shows that whitespace character data is valid before end of processing instruction.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.6 [16]'
+      ID='o-p16pass3' URI='p16pass3.xml'>
+    Valid form of Processing Instruction. Shows that whitespace character data is valid before end of processing instruction.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.7 [18]'
+      ID='o-p18pass1' URI='p18pass1.xml'>
+     valid CDSect's.  Note that a CDStart in a CDSect is not
+              recognized as such
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [22]'
+      ID='o-p22pass1' URI='p22pass1.xml'>
+     prolog can be empty
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [22]'
+      ID='o-p22pass2' URI='p22pass2.xml'>
+     XML declaration only
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [22]'
+      ID='o-p22pass3' URI='p22pass3.xml'>
+     XML decl and Misc
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [23]'
+      ID='o-p23pass1' URI='p23pass1.xml'>
+    Test shows a valid XML declaration along with version info.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [23]'
+      ID='o-p23pass2' URI='p23pass2.xml'>
+    Test shows a valid XML declaration along with encoding declaration.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [23]'
+      ID='o-p23pass3' URI='p23pass3.xml'>
+    Test shows a valid XML declaration along with Standalone Document Declaration.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [23]'
+      ID='o-p23pass4' URI='p23pass4.xml'>
+    Test shows a valid XML declaration, encoding declarationand Standalone Document Declaration.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [24]'
+      ID='o-p24pass1' URI='p24pass1.xml'>
+    Test shows a prolog that has the VersionInfo delimited by double quotes.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [24]'
+      ID='o-p24pass2' URI='p24pass2.xml'>
+    Test shows a prolog that has the VersionInfo delimited by single quotes.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [24]'
+      ID='o-p24pass3' URI='p24pass3.xml'>
+    Test shows whitespace is allowed in prolog before version info.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [24]'
+      ID='o-p24pass4' URI='p24pass4.xml'>
+    Test shows whitespace is allowed in prolog on both sides of equal sign.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [25]'
+      ID='o-p25pass1' URI='p25pass1.xml'>
+    Test shows whitespace is NOT necessary before or after equal sign of versioninfo.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [25]'
+      ID='o-p25pass2' URI='p25pass2.xml'>
+    Test shows whitespace can be used on both sides of equal sign of versioninfo.     </TEST>
+
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [26]'
+      ID='o-p26pass1' URI='p26pass1.xml'>
+     The valid version number.  We cannot test others because
+              a 1.0 processor is allowed to fail them.
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [27]'
+      ID='o-p27pass1' URI='p27pass1.xml'>
+    Comments are valid as the Misc part of the prolog.    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [27]'
+      ID='o-p27pass2' URI='p27pass2.xml'>
+    Processing Instructions are valid as the Misc part of the prolog.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [27]'
+      ID='o-p27pass3' URI='p27pass3.xml'>
+    Whitespace is valid as the Misc part of the prolog.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.8 [27]'
+      ID='o-p27pass4' URI='p27pass4.xml'>
+    A combination of comments, whitespaces and processing instructions are valid as the Misc part of the prolog.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.9 [32]'
+      ID='o-p32pass1' URI='p32pass1.xml'>
+    Double quotes can be used as delimeters for the value of a Standalone Document Declaration.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='2.9 [32]'
+      ID='o-p32pass2' URI='p32pass2.xml'>
+    Single quotes can be used as delimeters for the value of a Standalone Document Declaration.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3 3.1 [39] [44]'
+      ID='o-p39pass1' URI='p39pass1.xml'>
+    Empty element tag may be used for any element which has no content.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3 3.1 [39] [43]'
+      ID='o-p39pass2' URI='p39pass2.xml'>
+    Character data is valid element content.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [40]'
+      ID='o-p40pass1' URI='p40pass1.xml'>
+    Elements content can be empty.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [40]'
+      ID='o-p40pass2' URI='p40pass2.xml'>
+    Whitespace is valid within a Start-tag.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [40] [41]'
+      ID='o-p40pass3' URI='p40pass3.xml'>
+    Attributes are valid within a Start-tag.    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [40]'
+      ID='o-p40pass4' URI='p40pass4.xml'>
+    Whitespace and Multiple Attributes are valid within a Start-tag.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [41]'
+      ID='o-p41pass1' URI='p41pass1.xml'>
+    Attributes are valid within a Start-tag.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [41]'
+      ID='o-p41pass2' URI='p41pass2.xml'>
+    Whitespace is valid within a Start-tags Attribute.    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [42]'
+      ID='o-p42pass1' URI='p42pass1.xml'>
+    Test shows proper syntax for an End-tag.    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [42]'
+      ID='o-p42pass2' URI='p42pass2.xml'>
+    Whitespace is valid after name in End-tag.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [44]'
+      ID='o-p44pass1' URI='p44pass1.xml'>
+    Valid display of an Empty Element Tag.    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [44]'
+      ID='o-p44pass2' URI='p44pass2.xml'>
+    Empty Element Tags can contain an Attribute.    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [44]'
+      ID='o-p44pass3' URI='p44pass3.xml'>
+    Whitespace is valid in an Empty Element Tag following the end of the attribute value.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [44]'
+      ID='o-p44pass4' URI='p44pass4.xml'>
+    Whitespace is valid after the name in an Empty Element Tag.     </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.1 [44]'
+      ID='o-p44pass5' URI='p44pass5.xml'>
+    Whitespace and Multiple Attributes are valid in an Empty Element Tag.    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='4.1 [66]'
+      ID='o-p66pass1' URI='p66pass1.xml'>
+     valid character references
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='4.2 [74]'
+      ID='o-p74pass1' URI='p74pass1.xml'>
+     PEDef is either an entity value or an external id
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='4.2.2 [75]'
+      ID='o-p75pass1' URI='p75pass1.xml'>
+     valid external identifiers
+    </TEST>
+
+  <TEST TYPE='invalid' SECTIONS='3.3.1 [58] [59] Errata [E2]'
+      ID='o-e2' URI='e2.xml'>
+      Validity Constraint:  No duplicate tokens 
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.1 [1]'
+      ID='o-p01fail1' URI='p01fail1.xml'>
+     S cannot occur before the prolog
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.1 [1]'
+      ID='o-p01fail2' URI='p01fail2.xml'>
+     comments cannot occur before the prolog
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.1 [1]'
+      ID='o-p01fail3' URI='p01fail3.xml'>
+     only one document element
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.1 [1]'
+      ID='o-p01fail4' URI='p01fail4.xml'>
+     document element must be complete.
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail1' URI='p02fail1.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail10' URI='p02fail10.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail11' URI='p02fail11.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail12' URI='p02fail12.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail13' URI='p02fail13.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail14' URI='p02fail14.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail15' URI='p02fail15.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail16' URI='p02fail16.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail17' URI='p02fail17.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail18' URI='p02fail18.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail19' URI='p02fail19.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail2' URI='p02fail2.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail20' URI='p02fail20.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail21' URI='p02fail21.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail22' URI='p02fail22.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail23' URI='p02fail23.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail24' URI='p02fail24.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail25' URI='p02fail25.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail26' URI='p02fail26.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail27' URI='p02fail27.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail28' URI='p02fail28.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail29' URI='p02fail29.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail3' URI='p02fail3.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail30' URI='p02fail30.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail31' URI='p02fail31.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail4' URI='p02fail4.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail5' URI='p02fail5.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail6' URI='p02fail6.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail7' URI='p02fail7.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail8' URI='p02fail8.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.2 [2]'
+      ID='o-p02fail9' URI='p02fail9.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail1' URI='p03fail1.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail10' URI='p03fail10.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail11' URI='p03fail11.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail12' URI='p03fail12.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail13' URI='p03fail13.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail14' URI='p03fail14.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail15' URI='p03fail15.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail16' URI='p03fail16.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail17' URI='p03fail17.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail18' URI='p03fail18.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail19' URI='p03fail19.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail2' URI='p03fail2.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail20' URI='p03fail20.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail21' URI='p03fail21.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail22' URI='p03fail22.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail23' URI='p03fail23.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail24' URI='p03fail24.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail25' URI='p03fail25.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail26' URI='p03fail26.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail27' URI='p03fail27.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail28' URI='p03fail28.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail29' URI='p03fail29.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail3' URI='p03fail3.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail4' URI='p03fail4.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail5' URI='p03fail5.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail7' URI='p03fail7.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail8' URI='p03fail8.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [3]'
+      ID='o-p03fail9' URI='p03fail9.xml'>
+    Use of illegal character within XML document.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [4]'
+      ID='o-p04fail1' URI='p04fail1.xml'>
+    Name contains invalid character.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [4]'
+      ID='o-p04fail2' URI='p04fail2.xml'>
+    Name contains invalid character.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [4]'
+      ID='o-p04fail3' URI='p04fail3.xml'>
+    Name contains invalid character.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [5]'
+      ID='o-p05fail1' URI='p05fail1.xml'>
+     a Name cannot start with a digit
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [5]'
+      ID='o-p05fail2' URI='p05fail2.xml'>
+     a Name cannot start with a '.'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [5]'
+      ID='o-p05fail3' URI='p05fail3.xml'>
+     a Name cannot start with a "-"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [5]'
+      ID='o-p05fail4' URI='p05fail4.xml'>
+     a Name cannot start with a CombiningChar
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [5]'
+      ID='o-p05fail5' URI='p05fail5.xml'>
+     a Name cannot start with an Extender
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [9]'
+      ID='o-p09fail1' URI='p09fail1.xml'>
+     EntityValue excludes '%'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [9]'
+      ID='o-p09fail2' URI='p09fail2.xml'>
+     EntityValue excludes '&amp;'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [9]'
+      ID='o-p09fail3' URI='p09fail3.xml'>
+     incomplete character reference
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [9]'
+      ID='o-p09fail4' URI='p09fail4.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [9]'
+      ID='o-p09fail5' URI='p09fail5.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [10]'
+      ID='o-p10fail1' URI='p10fail1.xml'>
+     attribute values exclude '&lt;'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [10]'
+      ID='o-p10fail2' URI='p10fail2.xml'>
+     attribute values exclude '&amp;'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [10]'
+      ID='o-p10fail3' URI='p10fail3.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [11]'
+      ID='o-p11fail1' URI='p11fail1.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [11]'
+      ID='o-p11fail2' URI='p11fail2.xml'>
+     cannot contain delimiting quotes
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [12]'
+      ID='o-p12fail1' URI='p12fail1.xml'>
+     '"' excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [12]'
+      ID='o-p12fail2' URI='p12fail2.xml'>
+     '\' excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [12]'
+      ID='o-p12fail3' URI='p12fail3.xml'>
+     entity references excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [12]'
+      ID='o-p12fail4' URI='p12fail4.xml'>
+     '>' excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [12]'
+      ID='o-p12fail5' URI='p12fail5.xml'>
+     '&lt;' excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [12]'
+      ID='o-p12fail6' URI='p12fail6.xml'>
+     built-in entity refs excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.3 [13]'
+      ID='o-p12fail7' URI='p12fail7.xml'>
+      The public ID has a tab character, which is disallowed
+     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.4 [14]'
+      ID='o-p14fail1' URI='p14fail1.xml'>
+     '&lt;' excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.4 [14]'
+      ID='o-p14fail2' URI='p14fail2.xml'>
+     '&amp;' excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.4 [14]'
+      ID='o-p14fail3' URI='p14fail3.xml'>
+     "]]&gt;" excluded
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.5 [15]'
+      ID='o-p15fail1' URI='p15fail1.xml'>
+     comments can't end in '-'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.5 [15]'
+      ID='o-p15fail2' URI='p15fail2.xml'>
+     one comment per comment (contrasted with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.5 [15]'
+      ID='o-p15fail3' URI='p15fail3.xml'>
+     can't include 2 or more adjacent '-'s
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.6 [16]'
+      ID='o-p16fail1' URI='p16fail1.xml'>
+     "xml" is an invalid PITarget
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.6 [16]'
+      ID='o-p16fail2' URI='p16fail2.xml'>
+     a PITarget must be present
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.7 [18]'
+      ID='o-p18fail1' URI='p18fail1.xml'>
+     no space before "CDATA"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.7 [18]'
+      ID='o-p18fail2' URI='p18fail2.xml'>
+     no space after "CDATA"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.7 [18]'
+      ID='o-p18fail3' URI='p18fail3.xml'>
+     CDSect's can't nest
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [22]'
+      ID='o-p22fail1' URI='p22fail1.xml'>
+     prolog must start with XML decl
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [22]'
+      ID='o-p22fail2' URI='p22fail2.xml'>
+     prolog must start with XML decl
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [23]'
+      ID='o-p23fail1' URI='p23fail1.xml'>
+     "xml" must be lower-case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [23]'
+      ID='o-p23fail2' URI='p23fail2.xml'>
+     VersionInfo must be supplied
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [23]'
+      ID='o-p23fail3' URI='p23fail3.xml'>
+     VersionInfo must come first
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [23]'
+      ID='o-p23fail4' URI='p23fail4.xml'>
+     SDDecl must come last
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [23]'
+      ID='o-p23fail5' URI='p23fail5.xml'>
+     no SGML-type PIs
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [24]'
+      ID='o-p24fail1' URI='p24fail1.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [24]'
+      ID='o-p24fail2' URI='p24fail2.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [25]'
+      ID='o-p25fail1' URI='p25fail1.xml'>
+    Comment is illegal in VersionInfo.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [26]'
+      ID='o-p26fail1' URI='p26fail1.xml'>
+    Illegal character in VersionNum.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [26]'
+      ID='o-p26fail2' URI='p26fail2.xml'>
+    Illegal character in VersionNum.     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [27]'
+      ID='o-p27fail1' URI='p27fail1.xml'>
+     References aren't allowed in Misc,
+    even if they would resolve to valid Misc.
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [28]'
+      ID='o-p28fail1' URI='p28fail1.xml'>
+     only declarations in DTD.
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [29]'
+      ID='o-p29fail1' URI='p29fail1.xml'>
+     A processor must not pass unknown declaration types.
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [30]'
+      ID='o-p30fail1' URI='p30fail1.xml'>
+     An XML declaration is not the same as a TextDecl
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [31]'
+      ID='o-p31fail1' URI='p31fail1.xml'>
+     external subset excludes doctypedecl
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.9 [32]'
+      ID='o-p32fail1' URI='p32fail1.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.9 [32]'
+      ID='o-p32fail2' URI='p32fail2.xml'>
+     quote types must match
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.9 [32]'
+      ID='o-p32fail3' URI='p32fail3.xml'>
+     initial S is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.9 [32]'
+      ID='o-p32fail4' URI='p32fail4.xml'>
+     quotes are required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.9 [32]'
+      ID='o-p32fail5' URI='p32fail5.xml'>
+     yes or no must be lower case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3 [39]'
+      ID='o-p39fail1' URI='p39fail1.xml'>
+     start-tag requires end-tag
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3 [39]'
+      ID='o-p39fail2' URI='p39fail2.xml'>
+     end-tag requires start-tag
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3 [39]'
+      ID='o-p39fail3' URI='p39fail3.xml'>
+    XML documents contain one or more elements</TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [23]'
+      ID='o-p39fail4' URI='p39fail4.xml'>
+     XML declarations must be correctly terminated </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='2.8 [23]'
+      ID='o-p39fail5' URI='p39fail5.xml'>
+     XML declarations must be correctly terminated </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [40]'
+      ID='o-p40fail1' URI='p40fail1.xml'>
+     S is required between attributes
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [40]'
+      ID='o-p40fail2' URI='p40fail2.xml'>
+     tags start with names, not nmtokens
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [40]'
+      ID='o-p40fail3' URI='p40fail3.xml'>
+     tags start with names, not nmtokens
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [40]'
+      ID='o-p40fail4' URI='p40fail4.xml'>
+     no space before name
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [41]'
+      ID='o-p41fail1' URI='p41fail1.xml'>
+     quotes are required (contrast with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [41]'
+      ID='o-p41fail2' URI='p41fail2.xml'>
+     attribute name is required (contrast with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [41]'
+      ID='o-p41fail3' URI='p41fail3.xml'>
+     Eq required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [42]'
+      ID='o-p42fail1' URI='p42fail1.xml'>
+     no space before name
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [42]'
+      ID='o-p42fail2' URI='p42fail2.xml'>
+     cannot end with "/>"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [42]'
+      ID='o-p42fail3' URI='p42fail3.xml'>
+     no NET (contrast with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [43]'
+      ID='o-p43fail1' URI='p43fail1.xml'>
+     no non-comment declarations
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [43]'
+      ID='o-p43fail2' URI='p43fail2.xml'>
+     no conditional sections
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [43]'
+      ID='o-p43fail3' URI='p43fail3.xml'>
+     no conditional sections
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [44]'
+      ID='o-p44fail1' URI='p44fail1.xml'>
+    Illegal space before Empty element tag.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [44]'
+      ID='o-p44fail2' URI='p44fail2.xml'>
+    Illegal space after Empty element tag.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [44]'
+      ID='o-p44fail3' URI='p44fail3.xml'>
+    Illegal comment in Empty element tag.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [44]'
+      ID='o-p44fail4' URI='p44fail4.xml'>
+    Whitespace required between attributes.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.1 [44]'
+      ID='o-p44fail5' URI='p44fail5.xml'>
+    Duplicate attribute name is illegal.    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [45]'
+      ID='o-p45fail1' URI='p45fail1.xml'>
+     ELEMENT must be upper case.
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [45]'
+      ID='o-p45fail2' URI='p45fail2.xml'>
+     S before contentspec is required.
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [45]'
+      ID='o-p45fail3' URI='p45fail3.xml'>
+     only one content spec
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [45]'
+      ID='o-p45fail4' URI='p45fail4.xml'>
+     no comments in declarations (contrast with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [46]'
+      ID='o-p46fail1' URI='p46fail1.xml'>
+     no parens on declared content
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [46]'
+      ID='o-p46fail2' URI='p46fail2.xml'>
+     no inclusions (contrast with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [46]'
+      ID='o-p46fail3' URI='p46fail3.xml'>
+     no exclusions (contrast with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [46]'
+      ID='o-p46fail4' URI='p46fail4.xml'>
+     no space before occurrence
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [46]'
+      ID='o-p46fail5' URI='p46fail5.xml'>
+     single group
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2 [46]'
+      ID='o-p46fail6' URI='p46fail6.xml'>
+     can't be both declared and modeled
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [47]'
+      ID='o-p47fail1' URI='p47fail1.xml'>
+    Invalid operator '|' must match previous operator ','</TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [47]'
+      ID='o-p47fail2' URI='p47fail2.xml'>
+    Illegal character '-' in Element-content model     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [47]'
+      ID='o-p47fail3' URI='p47fail3.xml'>
+    Optional character must follow a name or list     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [47]'
+      ID='o-p47fail4' URI='p47fail4.xml'>
+    Illegal space before optional character</TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [48]'
+      ID='o-p48fail1' URI='p48fail1.xml'>
+    Illegal space before optional character    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [48]'
+      ID='o-p48fail2' URI='p48fail2.xml'>
+    Illegal space before optional character     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [49]'
+      ID='o-p49fail1' URI='p49fail1.xml'>
+    connectors must match     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.1 [50]'
+      ID='o-p50fail1' URI='p50fail1.xml'>
+    connectors must match     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.2 [51]'
+      ID='o-p51fail1' URI='p51fail1.xml'>
+     occurrence on #PCDATA group must be *
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.2 [51]'
+      ID='o-p51fail2' URI='p51fail2.xml'>
+     occurrence on #PCDATA group must be *
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.2 [51]'
+      ID='o-p51fail3' URI='p51fail3.xml'>
+     #PCDATA must come first
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.2 [51]'
+      ID='o-p51fail4' URI='p51fail4.xml'>
+     occurrence on #PCDATA group must be *
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.2 [51]'
+      ID='o-p51fail5' URI='p51fail5.xml'>
+     only '|' connectors
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.2 [51]'
+      ID='o-p51fail6' URI='p51fail6.xml'>
+    Only '|' connectors and occurrence on #PCDATA group must be *     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.2.2 [51]'
+      ID='o-p51fail7' URI='p51fail7.xml'>
+     no nested groups
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3 [52]'
+      ID='o-p52fail1' URI='p52fail1.xml'>
+     A name is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3 [52]'
+      ID='o-p52fail2' URI='p52fail2.xml'>
+     A name is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3 [53]'
+      ID='o-p53fail1' URI='p53fail1.xml'>
+     S is required before default
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3 [53]'
+      ID='o-p53fail2' URI='p53fail2.xml'>
+     S is required before type
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3 [53]'
+      ID='o-p53fail3' URI='p53fail3.xml'>
+     type is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3 [53]'
+      ID='o-p53fail4' URI='p53fail4.xml'>
+     default is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3 [53]'
+      ID='o-p53fail5' URI='p53fail5.xml'>
+     name is requried
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [54]'
+      ID='o-p54fail1' URI='p54fail1.xml'>
+     don't pass unknown attribute types
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [55]'
+      ID='o-p55fail1' URI='p55fail1.xml'>
+     must be upper case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [56]'
+      ID='o-p56fail1' URI='p56fail1.xml'>
+     no IDS type
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [56]'
+      ID='o-p56fail2' URI='p56fail2.xml'>
+     no NUMBER type
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [56]'
+      ID='o-p56fail3' URI='p56fail3.xml'>
+     no NAME type
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [56]'
+      ID='o-p56fail4' URI='p56fail4.xml'>
+     no ENTITYS type
+- types must be upper case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [56]'
+      ID='o-p56fail5' URI='p56fail5.xml'>
+    types must be upper case     </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [57]'
+      ID='o-p57fail1' URI='p57fail1.xml'>
+     no keyword for NMTOKEN enumeration
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail1' URI='p58fail1.xml'>
+     at least one value required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail2' URI='p58fail2.xml'>
+     separator must be '|'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail3' URI='p58fail3.xml'>
+     notations are NAMEs, not NMTOKENs -- note:
+    Leaving the invalid
+          notation undeclared would cause a validating parser to fail without
+          checking the name syntax, so the notation is declared with an
+          invalid name.  A parser that reports error positions should report
+          an error at the AttlistDecl on line 6, before reaching the notation
+          declaration.
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail4' URI='p58fail4.xml'>
+     NOTATION must be upper case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail5' URI='p58fail5.xml'>
+     S after keyword is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail6' URI='p58fail6.xml'>
+     parentheses are require
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail7' URI='p58fail7.xml'>
+     values are unquoted
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [58]'
+      ID='o-p58fail8' URI='p58fail8.xml'>
+     values are unquoted
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [59]'
+      ID='o-p59fail1' URI='p59fail1.xml'>
+     at least one required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [59]'
+      ID='o-p59fail2' URI='p59fail2.xml'>
+     separator must be ","
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.1 [59]'
+      ID='o-p59fail3' URI='p59fail3.xml'>
+     values are unquoted
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.2 [60]'
+      ID='o-p60fail1' URI='p60fail1.xml'>
+     keywords must be upper case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.2 [60]'
+      ID='o-p60fail2' URI='p60fail2.xml'>
+     S is required after #FIXED
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.2 [60]'
+      ID='o-p60fail3' URI='p60fail3.xml'>
+     only #FIXED has both keyword and value
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.2 [60]'
+      ID='o-p60fail4' URI='p60fail4.xml'>
+     #FIXED required value
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.3.2 [60]'
+      ID='o-p60fail5' URI='p60fail5.xml'>
+     only one default type
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.4 [61]'
+      ID='o-p61fail1' URI='p61fail1.xml'>
+     no other types, including TEMP, which is valid in SGML
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.4 [62]'
+      ID='o-p62fail1' URI='p62fail1.xml'>
+     INCLUDE must be upper case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.4 [62]'
+      ID='o-p62fail2' URI='p62fail2.xml'>
+     no spaces in terminating delimiter
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.4 [63]'
+      ID='o-p63fail1' URI='p63fail1.xml'>
+     IGNORE must be upper case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.4 [63]'
+      ID='o-p63fail2' URI='p63fail2.xml'>
+     delimiters must be balanced
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.4 [64]'
+      ID='o-p64fail1' URI='p64fail1.xml'>
+     section delimiters must balance
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='3.4 [64]'
+      ID='o-p64fail2' URI='p64fail2.xml'>
+     section delimiters must balance
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [66]'
+      ID='o-p66fail1' URI='p66fail1.xml'>
+     terminating ';' is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [66]'
+      ID='o-p66fail2' URI='p66fail2.xml'>
+     no S after '&amp;#'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [66]'
+      ID='o-p66fail3' URI='p66fail3.xml'>
+     no hex digits in numeric reference
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [66]'
+      ID='o-p66fail4' URI='p66fail4.xml'>
+     only hex digits in hex references
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [66]'
+      ID='o-p66fail5' URI='p66fail5.xml'>
+     no references to non-characters
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [66]'
+      ID='o-p66fail6' URI='p66fail6.xml'>
+     no references to non-characters
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [68]'
+      ID='o-p68fail1' URI='p68fail1.xml'>
+     terminating ';' is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [68]'
+      ID='o-p68fail2' URI='p68fail2.xml'>
+     no S after '&amp;'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [68]'
+      ID='o-p68fail3' URI='p68fail3.xml'>
+     no S before ';'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [69]'
+      ID='o-p69fail1' URI='p69fail1.xml'>
+     terminating ';' is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [69]'
+      ID='o-p69fail2' URI='p69fail2.xml'>
+     no S after '%'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.1 [69]'
+      ID='o-p69fail3' URI='p69fail3.xml'>
+     no S before ';'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [70]'
+      ID='o-p70fail1' URI='p70fail1.xml'>
+     This is neither
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [71]'
+      ID='o-p71fail1' URI='p71fail1.xml'>
+     S is required before EntityDef
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [71]'
+      ID='o-p71fail2' URI='p71fail2.xml'>
+     Entity name is a Name, not an NMToken
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [71]'
+      ID='o-p71fail3' URI='p71fail3.xml'>
+     no S after "&lt;!"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [71]'
+      ID='o-p71fail4' URI='p71fail4.xml'>
+     S is required after "&lt;!ENTITY"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [72]'
+      ID='o-p72fail1' URI='p72fail1.xml'>
+     S is required after "&lt;!ENTITY"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [72]'
+      ID='o-p72fail2' URI='p72fail2.xml'>
+     S is required after '%'
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [72]'
+      ID='o-p72fail3' URI='p72fail3.xml'>
+     S is required after name
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [72]'
+      ID='o-p72fail4' URI='p72fail4.xml'>
+     Entity name is a name, not an NMToken
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [73]'
+      ID='o-p73fail1' URI='p73fail1.xml'>
+     No typed replacement text
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [73]'
+      ID='o-p73fail2' URI='p73fail2.xml'>
+     Only one replacement value
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [73]'
+      ID='o-p73fail3' URI='p73fail3.xml'>
+     No NDataDecl on replacement text
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [73]'
+      ID='o-p73fail4' URI='p73fail4.xml'>
+     Value is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [73]'
+      ID='o-p73fail5' URI='p73fail5.xml'>
+     No NDataDecl without value
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [74]'
+      ID='o-p74fail1' URI='p74fail1.xml'>
+     no NDataDecls on parameter entities
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [74]'
+      ID='o-p74fail2' URI='p74fail2.xml'>
+     value is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2 [74]'
+      ID='o-p74fail3' URI='p74fail3.xml'>
+     only one value
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [75]'
+      ID='o-p75fail1' URI='p75fail1.xml'>
+     S required after "PUBLIC"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [75]'
+      ID='o-p75fail2' URI='p75fail2.xml'>
+     S required after "SYSTEM"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [75]'
+      ID='o-p75fail3' URI='p75fail3.xml'>
+     S required between literals
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [75]'
+      ID='o-p75fail4' URI='p75fail4.xml'>
+     "SYSTEM" implies only one literal
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [75]'
+      ID='o-p75fail5' URI='p75fail5.xml'>
+     only one keyword
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [75]'
+      ID='o-p75fail6' URI='p75fail6.xml'>
+     "PUBLIC" requires two literals (contrast with SGML)
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [76]'
+      ID='o-p76fail1' URI='p76fail1.xml'>
+     S is required before "NDATA"
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [76]'
+      ID='o-p76fail2' URI='p76fail2.xml'>
+     "NDATA" is upper-case
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [76]'
+      ID='o-p76fail3' URI='p76fail3.xml'>
+     notation name is required
+    </TEST>
+
+  <TEST TYPE='not-wf' SECTIONS='4.2.2 [76]'
+      ID='o-p76fail4' URI='p76fail4.xml'>
+     notation names are Names
+    </TEST>
+
+  <TEST TYPE='error' SECTIONS='2.3, 4.2.2 [11]'
+      ID='o-p11pass1' URI='p11pass1.xml'>
+     system literals may not contain
+    URI fragments
+    </TEST>
+
+</TESTCASES>
diff --git a/test/resources/oasis/p01fail1.xml b/test/resources/oasis/p01fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01fail1.xml
@@ -0,0 +1,11 @@
+
+<?xml version="1.0"?>
+<doc>
+<a><b><c/></b></a>
+</doc>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
diff --git a/test/resources/oasis/p01fail2.xml b/test/resources/oasis/p01fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01fail2.xml
@@ -0,0 +1,10 @@
+<!--bad comment--><?xml version="1.0"?>
+<doc>
+<a><b><c/></b></a>
+</doc>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
diff --git a/test/resources/oasis/p01fail3.xml b/test/resources/oasis/p01fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01fail3.xml
@@ -0,0 +1,7 @@
+<doc/><bad/>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
diff --git a/test/resources/oasis/p01fail3.xml.correct b/test/resources/oasis/p01fail3.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01fail3.xml.correct
@@ -0,0 +1,1 @@
+We allow multiple roots as an extension
diff --git a/test/resources/oasis/p01fail4.xml b/test/resources/oasis/p01fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01fail4.xml
@@ -0,0 +1,1 @@
+<doc>
diff --git a/test/resources/oasis/p01pass1.xml b/test/resources/oasis/p01pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01pass1.xml
@@ -0,0 +1,3 @@
+<doc>
+<a><b><c/></b></a>
+</doc>
diff --git a/test/resources/oasis/p01pass2.xml b/test/resources/oasis/p01pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01pass2.xml
@@ -0,0 +1,23 @@
+<?PI before document element?>
+<!-- comment after document element-->
+<?PI before document element?>
+<!-- comment after document element-->
+<?PI before document element?>
+<!-- comment after document element-->
+<?PI before document element?>
+<!DOCTYPE doc
+[
+<!ELEMENT doc ANY>
+<!ELEMENT a ANY>
+<!ELEMENT b ANY>
+<!ELEMENT c ANY>
+]>
+<doc>
+<a><b><c/></b></a>
+</doc>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
diff --git a/test/resources/oasis/p01pass3.xml b/test/resources/oasis/p01pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p01pass3.xml
@@ -0,0 +1,9 @@
+<doc>
+<a><b><c/></b></a>
+</doc>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
+<!-- comment after document element-->
+<?PI after document element?>
diff --git a/test/resources/oasis/p02fail1.xml b/test/resources/oasis/p02fail1.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail1.xml differ
diff --git a/test/resources/oasis/p02fail10.xml b/test/resources/oasis/p02fail10.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail10.xml differ
diff --git a/test/resources/oasis/p02fail11.xml b/test/resources/oasis/p02fail11.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail11.xml differ
diff --git a/test/resources/oasis/p02fail12.xml b/test/resources/oasis/p02fail12.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail12.xml differ
diff --git a/test/resources/oasis/p02fail13.xml b/test/resources/oasis/p02fail13.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail13.xml differ
diff --git a/test/resources/oasis/p02fail14.xml b/test/resources/oasis/p02fail14.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail14.xml differ
diff --git a/test/resources/oasis/p02fail15.xml b/test/resources/oasis/p02fail15.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail15.xml differ
diff --git a/test/resources/oasis/p02fail16.xml b/test/resources/oasis/p02fail16.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail16.xml differ
diff --git a/test/resources/oasis/p02fail17.xml b/test/resources/oasis/p02fail17.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail17.xml differ
diff --git a/test/resources/oasis/p02fail18.xml b/test/resources/oasis/p02fail18.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail18.xml differ
diff --git a/test/resources/oasis/p02fail19.xml b/test/resources/oasis/p02fail19.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail19.xml differ
diff --git a/test/resources/oasis/p02fail2.xml b/test/resources/oasis/p02fail2.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail2.xml differ
diff --git a/test/resources/oasis/p02fail20.xml b/test/resources/oasis/p02fail20.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail20.xml differ
diff --git a/test/resources/oasis/p02fail21.xml b/test/resources/oasis/p02fail21.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail21.xml differ
diff --git a/test/resources/oasis/p02fail22.xml b/test/resources/oasis/p02fail22.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail22.xml differ
diff --git a/test/resources/oasis/p02fail23.xml b/test/resources/oasis/p02fail23.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail23.xml differ
diff --git a/test/resources/oasis/p02fail24.xml b/test/resources/oasis/p02fail24.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail24.xml differ
diff --git a/test/resources/oasis/p02fail25.xml b/test/resources/oasis/p02fail25.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail25.xml differ
diff --git a/test/resources/oasis/p02fail26.xml b/test/resources/oasis/p02fail26.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail26.xml differ
diff --git a/test/resources/oasis/p02fail27.xml b/test/resources/oasis/p02fail27.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail27.xml differ
diff --git a/test/resources/oasis/p02fail28.xml b/test/resources/oasis/p02fail28.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail28.xml differ
diff --git a/test/resources/oasis/p02fail29.xml b/test/resources/oasis/p02fail29.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail29.xml differ
diff --git a/test/resources/oasis/p02fail3.xml b/test/resources/oasis/p02fail3.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail3.xml differ
diff --git a/test/resources/oasis/p02fail30.xml b/test/resources/oasis/p02fail30.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail30.xml differ
diff --git a/test/resources/oasis/p02fail31.xml b/test/resources/oasis/p02fail31.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail31.xml differ
diff --git a/test/resources/oasis/p02fail4.xml b/test/resources/oasis/p02fail4.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail4.xml differ
diff --git a/test/resources/oasis/p02fail5.xml b/test/resources/oasis/p02fail5.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail5.xml differ
diff --git a/test/resources/oasis/p02fail6.xml b/test/resources/oasis/p02fail6.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail6.xml differ
diff --git a/test/resources/oasis/p02fail7.xml b/test/resources/oasis/p02fail7.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail7.xml differ
diff --git a/test/resources/oasis/p02fail8.xml b/test/resources/oasis/p02fail8.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail8.xml differ
diff --git a/test/resources/oasis/p02fail9.xml b/test/resources/oasis/p02fail9.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p02fail9.xml differ
diff --git a/test/resources/oasis/p03fail1.xml b/test/resources/oasis/p03fail1.xml
new file mode 100644
Binary files /dev/null and b/test/resources/oasis/p03fail1.xml differ
diff --git a/test/resources/oasis/p03fail10.xml b/test/resources/oasis/p03fail10.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail10.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail11.xml b/test/resources/oasis/p03fail11.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail11.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail12.xml b/test/resources/oasis/p03fail12.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail12.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail13.xml b/test/resources/oasis/p03fail13.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail13.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail14.xml b/test/resources/oasis/p03fail14.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail14.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail15.xml b/test/resources/oasis/p03fail15.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail15.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail16.xml b/test/resources/oasis/p03fail16.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail16.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail17.xml b/test/resources/oasis/p03fail17.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail17.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail18.xml b/test/resources/oasis/p03fail18.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail18.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail19.xml b/test/resources/oasis/p03fail19.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail19.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail2.xml b/test/resources/oasis/p03fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail2.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail20.xml b/test/resources/oasis/p03fail20.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail20.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail21.xml b/test/resources/oasis/p03fail21.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail21.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail22.xml b/test/resources/oasis/p03fail22.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail22.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail23.xml b/test/resources/oasis/p03fail23.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail23.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail24.xml b/test/resources/oasis/p03fail24.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail24.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail25.xml b/test/resources/oasis/p03fail25.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail25.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail26.xml b/test/resources/oasis/p03fail26.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail26.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail27.xml b/test/resources/oasis/p03fail27.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail27.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail28.xml b/test/resources/oasis/p03fail28.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail28.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail29.xml b/test/resources/oasis/p03fail29.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail29.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail3.xml b/test/resources/oasis/p03fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail3.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail4.xml b/test/resources/oasis/p03fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail4.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail5.xml b/test/resources/oasis/p03fail5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail5.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail7.xml b/test/resources/oasis/p03fail7.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail7.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail8.xml b/test/resources/oasis/p03fail8.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail8.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03fail9.xml b/test/resources/oasis/p03fail9.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03fail9.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p03pass1.xml b/test/resources/oasis/p03pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p03pass1.xml
@@ -0,0 +1,2 @@
+	
+ <doc/>
diff --git a/test/resources/oasis/p04fail1.xml b/test/resources/oasis/p04fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p04fail1.xml
@@ -0,0 +1,1 @@
+<A@/>
diff --git a/test/resources/oasis/p04fail2.xml b/test/resources/oasis/p04fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p04fail2.xml
@@ -0,0 +1,1 @@
+<A#/>
diff --git a/test/resources/oasis/p04fail3.xml b/test/resources/oasis/p04fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p04fail3.xml
@@ -0,0 +1,1 @@
+<A$/>
diff --git a/test/resources/oasis/p04pass1.xml b/test/resources/oasis/p04pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p04pass1.xml
@@ -0,0 +1,6 @@
+<doc>
+<abcdefghijklmnopqrstuvwxyz/>
+<ABCDEFGHIJKLMNOPQRSTUVWXYZ/>
+<A01234567890/>
+<A.-:̀·/>
+</doc>
diff --git a/test/resources/oasis/p05fail1.xml b/test/resources/oasis/p05fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p05fail1.xml
@@ -0,0 +1,1 @@
+<0A/>
diff --git a/test/resources/oasis/p05fail2.xml b/test/resources/oasis/p05fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p05fail2.xml
@@ -0,0 +1,1 @@
+<.A/>
diff --git a/test/resources/oasis/p05fail3.xml b/test/resources/oasis/p05fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p05fail3.xml
@@ -0,0 +1,1 @@
+<-A/>
diff --git a/test/resources/oasis/p05fail4.xml b/test/resources/oasis/p05fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p05fail4.xml
@@ -0,0 +1,1 @@
+<̀A/>
diff --git a/test/resources/oasis/p05fail5.xml b/test/resources/oasis/p05fail5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p05fail5.xml
@@ -0,0 +1,1 @@
+<·A/>
diff --git a/test/resources/oasis/p05pass1.xml b/test/resources/oasis/p05pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p05pass1.xml
@@ -0,0 +1,8 @@
+<doc>
+<A:._-0/>
+<::._-0/>
+<_:._-0/>
+<A/>
+<_/>
+<:/>
+</doc>
diff --git a/test/resources/oasis/p06fail1.xml b/test/resources/oasis/p06fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p06fail1.xml
@@ -0,0 +1,13 @@
+<!--non-validating processors may pass this instance because they don't check the IDREFS attribute type-->
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|refs)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT refs EMPTY>
+<!ATTLIST refs refs IDREFS #REQUIRED>
+<!ATTLIST a id ID #REQUIRED>
+]>
+<doc>
+<a id="A1"/><a id="A2"/><a id="A3"/>
+<refs refs=""/>
+</doc>
diff --git a/test/resources/oasis/p06pass1.xml b/test/resources/oasis/p06pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p06pass1.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|refs)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT refs EMPTY>
+<!ATTLIST refs refs IDREFS #REQUIRED>
+<!ATTLIST a id ID #REQUIRED>
+]>
+<doc>
+<a id="A1"/><a id="A2"/><a id="A3"/>
+<refs refs="A1 A2 A3"/>
+<refs refs="A1
+A2	A3"/>
+<refs refs="A1"/>
+</doc>
diff --git a/test/resources/oasis/p07pass1.xml b/test/resources/oasis/p07pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p07pass1.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc att (0|35a|A|-a|:a|a:|.|_a) #IMPLIED>
+]>
+<doc/>
diff --git a/test/resources/oasis/p08fail1.xml b/test/resources/oasis/p08fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p08fail1.xml
@@ -0,0 +1,10 @@
+<!--note: non-validating parsers may accept this document-->
+<!DOCTYPE doc
+[
+<!ELEMENT doc (A*)>
+<!ELEMENT A EMPTY>
+<!ATTLIST A att NMTOKENS #IMPLIED>
+]>
+<doc>
+<A att=""/>
+</doc>
diff --git a/test/resources/oasis/p08fail2.xml b/test/resources/oasis/p08fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p08fail2.xml
@@ -0,0 +1,10 @@
+<!--note: non-validating parsers may accept this document-->
+<!DOCTYPE doc
+[
+<!ELEMENT doc (A*)>
+<!ELEMENT A EMPTY>
+<!ATTLIST A att NMTOKENS #IMPLIED>
+]>
+<doc>
+<A att="abc / def"/>
+</doc>
diff --git a/test/resources/oasis/p08pass1.xml b/test/resources/oasis/p08pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p08pass1.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (A*)>
+<!ELEMENT A EMPTY>
+<!ATTLIST A att NMTOKENS #IMPLIED>
+]>
+<doc>
+<A att="abc"/><A att="abc def . :"/><A att="
+abc
+def
+"/>
+</doc>
diff --git a/test/resources/oasis/p09pass1.dtd b/test/resources/oasis/p09pass1.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p09pass1.dtd
@@ -0,0 +1,5 @@
+<!ELEMENT doc EMPTY>
+<!ENTITY % ent1 "">
+<!ENTITY ent2 "text2">
+<!ENTITY % ent3 "<!-- <!DOCTYPE <!ELEMENT <? '''&#34;&ent2; %ent1;">
+<!ENTITY % ent4 '""&#x27;&#39;"'>
diff --git a/test/resources/oasis/p09pass1.xml b/test/resources/oasis/p09pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p09pass1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p09pass1.dtd">
+<doc/>
diff --git a/test/resources/oasis/p10fail1.xml b/test/resources/oasis/p10fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p10fail1.xml
@@ -0,0 +1,1 @@
+<doc a="1 < 2"/>
diff --git a/test/resources/oasis/p10fail1.xml.html.correct b/test/resources/oasis/p10fail1.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p10fail1.xml.html.correct
@@ -0,0 +1,1 @@
+Allowed by relaxed attribute values.
diff --git a/test/resources/oasis/p10fail2.xml b/test/resources/oasis/p10fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p10fail2.xml
@@ -0,0 +1,1 @@
+<doc a="1 &"/>
diff --git a/test/resources/oasis/p10fail2.xml.html.correct b/test/resources/oasis/p10fail2.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p10fail2.xml.html.correct
@@ -0,0 +1,1 @@
+Allowed by relaxed attribute values.
diff --git a/test/resources/oasis/p10fail3.xml b/test/resources/oasis/p10fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p10fail3.xml
@@ -0,0 +1,1 @@
+<doc a='asd"/>
diff --git a/test/resources/oasis/p10pass1.xml b/test/resources/oasis/p10pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p10pass1.xml
@@ -0,0 +1,6 @@
+<doc>
+<A a="asdf>'&#34;>
+asdf
+	?>%"/>
+<A a='"">&#39;&#34;'/>
+</doc>
diff --git a/test/resources/oasis/p11fail1.xml b/test/resources/oasis/p11fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p11fail1.xml
@@ -0,0 +1,7 @@
+<!--Inability to resolve a notation should not be reported as an error-->
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+<!NOTATION not1 SYSTEM 'a">
+]>
+<doc/>
diff --git a/test/resources/oasis/p11fail2.xml b/test/resources/oasis/p11fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p11fail2.xml
@@ -0,0 +1,7 @@
+<!--Inability to resolve a notation should not be reported as an error-->
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+<!NOTATION not1 SYSTEM """>
+]>
+<doc/>
diff --git a/test/resources/oasis/p11pass1.xml b/test/resources/oasis/p11pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p11pass1.xml
@@ -0,0 +1,11 @@
+<!--Inability to resolve a notation should not be reported as an error-->
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+<!NOTATION not1 SYSTEM "a%a&b&#0<!ELEMENT<!--<?</>?>/\''">
+<!NOTATION not2 SYSTEM 'a
+	b"""'>
+<!NOTATION not3 SYSTEM "">
+<!NOTATION not4 SYSTEM ''>
+]>
+<doc/>
diff --git a/test/resources/oasis/p12pass1.xml b/test/resources/oasis/p12pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p12pass1.xml
@@ -0,0 +1,10 @@
+<!--Inability to resolve a notation should not be reported as an error-->
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+<!NOTATION not1 PUBLIC "a b
+cdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ">
+<!NOTATION not2 PUBLIC '0123456789-()+,./:=?;!*#@$_%'>
+<!NOTATION not3 PUBLIC "0123456789-()+,.'/:=?;!*#@$_%">
+]>
+<doc/>
diff --git a/test/resources/oasis/p14fail1.xml b/test/resources/oasis/p14fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p14fail1.xml
@@ -0,0 +1,1 @@
+<doc>< </doc>
diff --git a/test/resources/oasis/p14fail2.xml b/test/resources/oasis/p14fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p14fail2.xml
@@ -0,0 +1,1 @@
+<doc>& </doc>
diff --git a/test/resources/oasis/p14fail2.xml.html.correct b/test/resources/oasis/p14fail2.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p14fail2.xml.html.correct
@@ -0,0 +1,1 @@
+Correct in HTML due to relaxed & in content rules
diff --git a/test/resources/oasis/p14fail3.xml b/test/resources/oasis/p14fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p14fail3.xml
@@ -0,0 +1,1 @@
+<doc>a]]>b</doc>
diff --git a/test/resources/oasis/p14fail3.xml.correct b/test/resources/oasis/p14fail3.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p14fail3.xml.correct
@@ -0,0 +1,1 @@
+We accept this as a documented extension to XML
diff --git a/test/resources/oasis/p14pass1.xml b/test/resources/oasis/p14pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p14pass1.xml
@@ -0,0 +1,1 @@
+<doc>a%b%&lt;/doc>&#60;/doc>]]&lt;&amp;</doc>
diff --git a/test/resources/oasis/p15fail1.xml b/test/resources/oasis/p15fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p15fail1.xml
@@ -0,0 +1,2 @@
+<!--a--->
+<doc/>
diff --git a/test/resources/oasis/p15fail2.xml b/test/resources/oasis/p15fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p15fail2.xml
@@ -0,0 +1,2 @@
+<!-- -- -- -->
+<doc/>
diff --git a/test/resources/oasis/p15fail3.xml b/test/resources/oasis/p15fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p15fail3.xml
@@ -0,0 +1,2 @@
+<!-- --- -->
+<doc/>
diff --git a/test/resources/oasis/p15pass1.xml b/test/resources/oasis/p15pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p15pass1.xml
@@ -0,0 +1,8 @@
+<!--a
+<!DOCTYPE
+<?-
+]]>-<[ CDATA [
+"- -'-
+-<doc>-->
+<!---->
+<doc/>
diff --git a/test/resources/oasis/p16fail1.xml b/test/resources/oasis/p16fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p16fail1.xml
@@ -0,0 +1,3 @@
+<?pitarget?>
+<?xml?>
+<doc/>
diff --git a/test/resources/oasis/p16fail2.xml b/test/resources/oasis/p16fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p16fail2.xml
@@ -0,0 +1,2 @@
+<??>
+<doc/>
diff --git a/test/resources/oasis/p16fail3.xml b/test/resources/oasis/p16fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p16fail3.xml
@@ -0,0 +1,2 @@
+<?pitarget...?>
+<doc/>
diff --git a/test/resources/oasis/p16pass1.xml b/test/resources/oasis/p16pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p16pass1.xml
@@ -0,0 +1,7 @@
+<?pitarget?>
+<?xmla <!DOCTYPE <[ CDATA [</doc> &a%b&#c?>
+<?pitarget ...?>
+<?pitarget 
+	?>
+<?pitarget > ?>
+<doc/>
diff --git a/test/resources/oasis/p16pass2.xml b/test/resources/oasis/p16pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p16pass2.xml
@@ -0,0 +1,2 @@
+<?pitarget '?>
+<doc/>
diff --git a/test/resources/oasis/p16pass3.xml b/test/resources/oasis/p16pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p16pass3.xml
@@ -0,0 +1,2 @@
+<?pitarget "?>
+<doc/>
diff --git a/test/resources/oasis/p18fail1.xml b/test/resources/oasis/p18fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p18fail1.xml
@@ -0,0 +1,1 @@
+<doc><![ CDATA[a]]></doc>
diff --git a/test/resources/oasis/p18fail2.xml b/test/resources/oasis/p18fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p18fail2.xml
@@ -0,0 +1,1 @@
+<doc><![CDATA [a]]></doc>
diff --git a/test/resources/oasis/p18fail3.xml b/test/resources/oasis/p18fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p18fail3.xml
@@ -0,0 +1,5 @@
+<doc>
+<![CDATA[
+<![CDATA[XML doesn't allow CDATA sections to nest]]>
+]]>
+</doc>
diff --git a/test/resources/oasis/p18fail3.xml.correct b/test/resources/oasis/p18fail3.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p18fail3.xml.correct
@@ -0,0 +1,1 @@
+This is accepted not because CDATA nests, but because we accept ]]> in char data
diff --git a/test/resources/oasis/p18pass1.xml b/test/resources/oasis/p18pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p18pass1.xml
@@ -0,0 +1,5 @@
+<doc><![CDATA[<doc<!DOCTYPE&a%b&#c]] >] ]> ]]]><![CDATA[]]>
+<![CDATA[
+<![CDATA[
+]]>
+</doc>
diff --git a/test/resources/oasis/p22fail1.xml b/test/resources/oasis/p22fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22fail1.xml
@@ -0,0 +1,3 @@
+
+<?xml version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p22fail2.xml b/test/resources/oasis/p22fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22fail2.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+]>
+<?xml version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p22pass1.xml b/test/resources/oasis/p22pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22pass1.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p22pass2.xml b/test/resources/oasis/p22pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22pass2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p22pass3.xml b/test/resources/oasis/p22pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22pass3.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!--comment--> <?pi?>
+<doc/>
diff --git a/test/resources/oasis/p22pass4.xml b/test/resources/oasis/p22pass4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22pass4.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!--comment--> <?pi?>
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+]>
+
+<!--comment--> <?pi?>
+
+<doc/>
diff --git a/test/resources/oasis/p22pass5.xml b/test/resources/oasis/p22pass5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22pass5.xml
@@ -0,0 +1,9 @@
+<!--comment--> <?pi?>
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+]>
+
+<!--comment--> <?pi?>
+
+<doc/>
diff --git a/test/resources/oasis/p22pass6.xml b/test/resources/oasis/p22pass6.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p22pass6.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?><!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+]><doc/>
diff --git a/test/resources/oasis/p23fail1.xml b/test/resources/oasis/p23fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23fail1.xml
@@ -0,0 +1,2 @@
+<?XML version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p23fail2.xml b/test/resources/oasis/p23fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23fail2.xml
@@ -0,0 +1,2 @@
+<?xml encoding="UTF-8"?>
+<doc/>
diff --git a/test/resources/oasis/p23fail3.xml b/test/resources/oasis/p23fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23fail3.xml
@@ -0,0 +1,2 @@
+<?xml encoding="UTF-8" version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p23fail4.xml b/test/resources/oasis/p23fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23fail4.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="yes" encoding="UTF-8"?>
+<doc/>
diff --git a/test/resources/oasis/p23fail5.xml b/test/resources/oasis/p23fail5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23fail5.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0">
+<doc/>
diff --git a/test/resources/oasis/p23pass1.xml b/test/resources/oasis/p23pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23pass1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p23pass2.xml b/test/resources/oasis/p23pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23pass2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<doc/>
diff --git a/test/resources/oasis/p23pass3.xml b/test/resources/oasis/p23pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23pass3.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="yes"?>
+<doc/>
diff --git a/test/resources/oasis/p23pass4.xml b/test/resources/oasis/p23pass4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p23pass4.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<doc/>
diff --git a/test/resources/oasis/p24fail1.xml b/test/resources/oasis/p24fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p24fail1.xml
@@ -0,0 +1,2 @@
+<?xml version = '1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p24fail2.xml b/test/resources/oasis/p24fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p24fail2.xml
@@ -0,0 +1,2 @@
+<?xml version = "1.0'?>
+<doc/>
diff --git a/test/resources/oasis/p24pass1.xml b/test/resources/oasis/p24pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p24pass1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p24pass2.xml b/test/resources/oasis/p24pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p24pass2.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0'?>
+<doc/>
diff --git a/test/resources/oasis/p24pass3.xml b/test/resources/oasis/p24pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p24pass3.xml
@@ -0,0 +1,8 @@
+<?xml
+
+
+version
+=
+'1.0'
+?>
+<doc/>
diff --git a/test/resources/oasis/p24pass4.xml b/test/resources/oasis/p24pass4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p24pass4.xml
@@ -0,0 +1,2 @@
+<?xml version = '1.0'?>
+<doc/>
diff --git a/test/resources/oasis/p25fail1.xml b/test/resources/oasis/p25fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p25fail1.xml
@@ -0,0 +1,2 @@
+<?xml version <!--bad comment--> ="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p25pass1.xml b/test/resources/oasis/p25pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p25pass1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p25pass2.xml b/test/resources/oasis/p25pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p25pass2.xml
@@ -0,0 +1,8 @@
+<?xml version
+
+	 
+=
+  
+
+"1.0"?>
+<doc/>
diff --git a/test/resources/oasis/p26fail1.xml b/test/resources/oasis/p26fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p26fail1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0?"?>
+<doc/>
diff --git a/test/resources/oasis/p26fail2.xml b/test/resources/oasis/p26fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p26fail2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0^"?>
+<doc/>
diff --git a/test/resources/oasis/p26pass1.xml b/test/resources/oasis/p26pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p26pass1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!--because we are testing conformace to XML 1.0, there can be no
+    exhaustive tests of the VersionNum production.  The only
+    VersionNum a 1.0-compliant processor is required to pass
+    is "1.0" -->
+<doc/>
diff --git a/test/resources/oasis/p27fail1.xml b/test/resources/oasis/p27fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p27fail1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+&#32;
+<doc/>
diff --git a/test/resources/oasis/p27fail1.xml.correct b/test/resources/oasis/p27fail1.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p27fail1.xml.correct
@@ -0,0 +1,1 @@
+This is allowed because of multiple roots.
diff --git a/test/resources/oasis/p27pass1.xml b/test/resources/oasis/p27pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p27pass1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<!--Non-terminal Misc only appears as Misc*, so we cannot test the fact
+    that Misc must match exactly one comment, PI, or S-->
+<doc/>
diff --git a/test/resources/oasis/p27pass2.xml b/test/resources/oasis/p27pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p27pass2.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<?pi?>
+<doc/>
diff --git a/test/resources/oasis/p27pass3.xml b/test/resources/oasis/p27pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p27pass3.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+
+ 	
+
+<doc/>
diff --git a/test/resources/oasis/p27pass4.xml b/test/resources/oasis/p27pass4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p27pass4.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?><?pi?>
+
+ 	
+
+<!--comment-->
+<?pi?>
+
+ 	
+
+<!--comment-->
+<?pi?><doc/>
diff --git a/test/resources/oasis/p28fail1.xml b/test/resources/oasis/p28fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28fail1.xml
@@ -0,0 +1,4 @@
+<!DOCTYPE doc [
+<!ELEMENT doc EMPTY>
+<doc/>
+]>
diff --git a/test/resources/oasis/p28fail1.xml.correct b/test/resources/oasis/p28fail1.xml.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28fail1.xml.correct
@@ -0,0 +1,2 @@
+Correctly allow this as an empty document (no DTD parsing, and empty doc
+content is allowed).
diff --git a/test/resources/oasis/p28pass1.xml b/test/resources/oasis/p28pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28pass1.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE 
+
+doc
+
+[
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/oasis/p28pass2.xml b/test/resources/oasis/p28pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28pass2.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE 
+
+doc
+
+[
+<!ELEMENT doc EMPTY>
+]>
+<doc/>
diff --git a/test/resources/oasis/p28pass3.xml b/test/resources/oasis/p28pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28pass3.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc [
+<!ENTITY % eldecl "<!ELEMENT doc EMPTY>">
+%eldecl;
+]>
+<doc/>
diff --git a/test/resources/oasis/p28pass4.dtd b/test/resources/oasis/p28pass4.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28pass4.dtd
@@ -0,0 +1,1 @@
+<!ELEMENT doc EMPTY>
diff --git a/test/resources/oasis/p28pass4.xml b/test/resources/oasis/p28pass4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28pass4.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p28pass4.dtd">
+<doc/>
diff --git a/test/resources/oasis/p28pass5.dtd b/test/resources/oasis/p28pass5.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28pass5.dtd
@@ -0,0 +1,2 @@
+%rootdecl;
+
diff --git a/test/resources/oasis/p28pass5.xml b/test/resources/oasis/p28pass5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p28pass5.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc SYSTEM "p28pass5.dtd"[
+<!--comment-->
+<!ENTITY % rootdecl "<!ELEMENT doc (a)>">
+<!ELEMENT a EMPTY>
+]>
+<doc><a/></doc>
diff --git a/test/resources/oasis/p29pass1.xml b/test/resources/oasis/p29pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p29pass1.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE doc [
+<?Pi?><!--comment-->
+<!ELEMENT doc EMPTY>
+<?Pi?><!--comment-->
+<!ATTLIST doc att CDATA #IMPLIED>
+<?Pi?><!--comment-->
+<!ENTITY % ent "">
+<?Pi?><!--comment-->
+<!NOTATION not PUBLIC "some notation">
+<?Pi?><!--comment-->
+]>
+<doc/>
diff --git a/test/resources/oasis/p30pass1.dtd b/test/resources/oasis/p30pass1.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p30pass1.dtd
@@ -0,0 +1,3 @@
+<!ELEMENT doc EMPTY>
+
+
diff --git a/test/resources/oasis/p30pass1.xml b/test/resources/oasis/p30pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p30pass1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p30pass1.dtd">
+<doc/>
diff --git a/test/resources/oasis/p30pass2.dtd b/test/resources/oasis/p30pass2.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p30pass2.dtd
@@ -0,0 +1,2 @@
+<?xml encoding="UTF-8"?>
+<!ELEMENT doc EMPTY>
diff --git a/test/resources/oasis/p30pass2.xml b/test/resources/oasis/p30pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p30pass2.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p30pass2.dtd">
+<doc/>
diff --git a/test/resources/oasis/p31pass1.dtd b/test/resources/oasis/p31pass1.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p31pass1.dtd
diff --git a/test/resources/oasis/p31pass1.xml b/test/resources/oasis/p31pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p31pass1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p31pass1.dtd" [<!ELEMENT doc EMPTY>]>
+<doc/>
diff --git a/test/resources/oasis/p31pass2.dtd b/test/resources/oasis/p31pass2.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p31pass2.dtd
@@ -0,0 +1,11 @@
+<![INCLUDE[
+<!ENTITY % rootel "<!ELEMENT doc EMPTY>">
+]]>
+
+%rootel;
+
+<!ATTLIST doc att CDATA #IMPLIED>
+
+<![IGNORE[
+<!ELEMENT doc (a)>
+]]>
diff --git a/test/resources/oasis/p31pass2.xml b/test/resources/oasis/p31pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p31pass2.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p31pass2.dtd">
+<doc/>
diff --git a/test/resources/oasis/p32fail1.xml b/test/resources/oasis/p32fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p32fail1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone='yes"?>
+<doc/>
diff --git a/test/resources/oasis/p32fail2.xml b/test/resources/oasis/p32fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p32fail2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="yes'?>
+<doc/>
diff --git a/test/resources/oasis/p32fail3.xml b/test/resources/oasis/p32fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p32fail3.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"standalone="yes"?>
+<doc/>
diff --git a/test/resources/oasis/p32fail4.xml b/test/resources/oasis/p32fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p32fail4.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone=yes?>
+<doc/>
diff --git a/test/resources/oasis/p32fail5.xml b/test/resources/oasis/p32fail5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p32fail5.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="YES"?>
+<doc/>
diff --git a/test/resources/oasis/p32pass1.xml b/test/resources/oasis/p32pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p32pass1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone="yes"?>
+<doc/>
diff --git a/test/resources/oasis/p32pass2.xml b/test/resources/oasis/p32pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p32pass2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" standalone='no'?>
+<doc/>
diff --git a/test/resources/oasis/p39fail1.xml b/test/resources/oasis/p39fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p39fail1.xml
@@ -0,0 +1,1 @@
+<doc>content
diff --git a/test/resources/oasis/p39fail2.xml b/test/resources/oasis/p39fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p39fail2.xml
@@ -0,0 +1,1 @@
+<doc>content</a></doc>
diff --git a/test/resources/oasis/p39fail4.xml b/test/resources/oasis/p39fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p39fail4.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0">
diff --git a/test/resources/oasis/p39fail5.xml b/test/resources/oasis/p39fail5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p39fail5.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0">
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+]>
+
+<!--comment-->
+<?pi?>
diff --git a/test/resources/oasis/p39pass1.xml b/test/resources/oasis/p39pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p39pass1.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p39pass2.xml b/test/resources/oasis/p39pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p39pass2.xml
@@ -0,0 +1,1 @@
+<doc>content</doc>
diff --git a/test/resources/oasis/p40fail1.xml b/test/resources/oasis/p40fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40fail1.xml
@@ -0,0 +1,1 @@
+<doc att="val"att2="val2"></doc>
diff --git a/test/resources/oasis/p40fail2.xml b/test/resources/oasis/p40fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40fail2.xml
@@ -0,0 +1,1 @@
+<3notname></3notname>
diff --git a/test/resources/oasis/p40fail3.xml b/test/resources/oasis/p40fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40fail3.xml
@@ -0,0 +1,1 @@
+<3notname></notname>
diff --git a/test/resources/oasis/p40fail4.xml b/test/resources/oasis/p40fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40fail4.xml
@@ -0,0 +1,1 @@
+< doc></doc>
diff --git a/test/resources/oasis/p40pass1.xml b/test/resources/oasis/p40pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40pass1.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/oasis/p40pass2.xml b/test/resources/oasis/p40pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40pass2.xml
@@ -0,0 +1,3 @@
+<doc
+ 
+></doc>
diff --git a/test/resources/oasis/p40pass3.xml b/test/resources/oasis/p40pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40pass3.xml
@@ -0,0 +1,1 @@
+<doc att="val"></doc>
diff --git a/test/resources/oasis/p40pass4.xml b/test/resources/oasis/p40pass4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p40pass4.xml
@@ -0,0 +1,3 @@
+<doc att="val" att2="val2"
+att3="val3"
+></doc>
diff --git a/test/resources/oasis/p41fail1.xml b/test/resources/oasis/p41fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p41fail1.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc att (val|val2)>
+]>
+<doc att=val></doc>
diff --git a/test/resources/oasis/p41fail1.xml.html.correct b/test/resources/oasis/p41fail1.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p41fail1.xml.html.correct
@@ -0,0 +1,1 @@
+HTML allows unquoted attributes
diff --git a/test/resources/oasis/p41fail2.xml b/test/resources/oasis/p41fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p41fail2.xml
@@ -0,0 +1,5 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc att (val|val2)>
+]>
+<doc val></doc>
diff --git a/test/resources/oasis/p41fail2.xml.html.correct b/test/resources/oasis/p41fail2.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p41fail2.xml.html.correct
@@ -0,0 +1,1 @@
+HTML allows empty attributes
diff --git a/test/resources/oasis/p41fail3.xml b/test/resources/oasis/p41fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p41fail3.xml
@@ -0,0 +1,1 @@
+<doc att "val"></doc>
diff --git a/test/resources/oasis/p41pass1.xml b/test/resources/oasis/p41pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p41pass1.xml
@@ -0,0 +1,1 @@
+<doc att="val"></doc>
diff --git a/test/resources/oasis/p41pass2.xml b/test/resources/oasis/p41pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p41pass2.xml
@@ -0,0 +1,3 @@
+<doc att
+ =
+  "val"></doc>
diff --git a/test/resources/oasis/p42fail1.xml b/test/resources/oasis/p42fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p42fail1.xml
@@ -0,0 +1,1 @@
+<doc></ doc>
diff --git a/test/resources/oasis/p42fail2.xml b/test/resources/oasis/p42fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p42fail2.xml
@@ -0,0 +1,1 @@
+<doc></doc/>
diff --git a/test/resources/oasis/p42fail3.xml b/test/resources/oasis/p42fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p42fail3.xml
@@ -0,0 +1,1 @@
+<doc/doc/
diff --git a/test/resources/oasis/p42pass1.xml b/test/resources/oasis/p42pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p42pass1.xml
@@ -0,0 +1,1 @@
+<doc></doc>
diff --git a/test/resources/oasis/p42pass2.xml b/test/resources/oasis/p42pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p42pass2.xml
@@ -0,0 +1,2 @@
+<doc></doc  
+>
diff --git a/test/resources/oasis/p43fail1.xml b/test/resources/oasis/p43fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p43fail1.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE elem
+[
+<!ELEMENT elem (#PCDATA|elem)*>
+<!ENTITY ent "<elem>CharData</elem>">
+]>
+<elem>
+<!ENTITY badent "bad">
+</elem>
diff --git a/test/resources/oasis/p43fail2.xml b/test/resources/oasis/p43fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p43fail2.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE elem
+[
+<!ELEMENT elem (#PCDATA|elem)*>
+<!ENTITY ent "<elem>CharData</elem>">
+]>
+<elem>
+<![IGNORE[This was valid in SGML, but not XML]]>
+</elem>
diff --git a/test/resources/oasis/p43fail3.xml b/test/resources/oasis/p43fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p43fail3.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE elem
+[
+<!ELEMENT elem (#PCDATA|elem)*>
+<!ENTITY ent "<elem>CharData</elem>">
+]>
+<elem>
+<![INCLUDE[This was valid in SGML, but not XML]]>
+</elem>
diff --git a/test/resources/oasis/p43pass1.xml b/test/resources/oasis/p43pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p43pass1.xml
@@ -0,0 +1,27 @@
+<!DOCTYPE elem
+[
+<!ELEMENT elem (#PCDATA|elem)*>
+<!ENTITY ent "<elem>CharData</elem>">
+]>
+<elem>
+CharData&#32;
+<!--comment-->
+<![CDATA[
+<elem>
+CharData&#32;
+<!--comment-->
+<?pi?>&ent;&quot;
+CharData
+</elem>
+]]>
+<![CDATA[
+<elem>
+CharData&#32;
+<!--comment-->
+<?pi?>&ent;&quot;
+CharData
+</elem>
+]]>
+<?pi?>&ent;&quot;
+CharData
+</elem>
diff --git a/test/resources/oasis/p43pass1.xml.incorrect b/test/resources/oasis/p43pass1.xml.incorrect
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p43pass1.xml.incorrect
@@ -0,0 +1,1 @@
+DTD-declared entity.  Expected failure
diff --git a/test/resources/oasis/p44fail1.xml b/test/resources/oasis/p44fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44fail1.xml
@@ -0,0 +1,1 @@
+< doc/>
diff --git a/test/resources/oasis/p44fail2.xml b/test/resources/oasis/p44fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44fail2.xml
@@ -0,0 +1,1 @@
+<doc/ >
diff --git a/test/resources/oasis/p44fail3.xml b/test/resources/oasis/p44fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44fail3.xml
@@ -0,0 +1,1 @@
+<doc --bad comment--/>
diff --git a/test/resources/oasis/p44fail4.xml b/test/resources/oasis/p44fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44fail4.xml
@@ -0,0 +1,1 @@
+<doc att="val"att2="val2"/>
diff --git a/test/resources/oasis/p44fail5.xml b/test/resources/oasis/p44fail5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44fail5.xml
@@ -0,0 +1,1 @@
+<doc att="val" att="val"/>
diff --git a/test/resources/oasis/p44pass1.xml b/test/resources/oasis/p44pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44pass1.xml
@@ -0,0 +1,1 @@
+<doc/>
diff --git a/test/resources/oasis/p44pass2.xml b/test/resources/oasis/p44pass2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44pass2.xml
@@ -0,0 +1,1 @@
+<doc att="val"/>
diff --git a/test/resources/oasis/p44pass3.xml b/test/resources/oasis/p44pass3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44pass3.xml
@@ -0,0 +1,4 @@
+<doc att="val"
+
+
+/>
diff --git a/test/resources/oasis/p44pass4.xml b/test/resources/oasis/p44pass4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44pass4.xml
@@ -0,0 +1,3 @@
+<doc
+  
+/>
diff --git a/test/resources/oasis/p44pass5.xml b/test/resources/oasis/p44pass5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p44pass5.xml
@@ -0,0 +1,2 @@
+<doc att="val"
+att2="val2" att3="val3"/>
diff --git a/test/resources/oasis/p45pass1.xml b/test/resources/oasis/p45pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p45pass1.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc ANY>
+<!ELEMENT
+a ANY
+>
+<!ELEMENT c (#PCDATA)>
+]>
+<doc/>
diff --git a/test/resources/oasis/p46pass1.xml b/test/resources/oasis/p46pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p46pass1.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc ANY>
+<!ELEMENT a EMPTY>
+<!ELEMENT b (#PCDATA)*>
+<!ELEMENT c (a,b)>
+]>
+<doc/>
diff --git a/test/resources/oasis/p47pass1.xml b/test/resources/oasis/p47pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p47pass1.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc ANY>
+<!ELEMENT a (doc,a?)>
+<!ELEMENT b (doc|a)>
+<!ELEMENT c (a,b)?>
+<!ELEMENT d (a|b)? >
+<!ELEMENT e (a,b)* >
+<!ELEMENT f (a,b)+ >
+]>
+<doc/>
diff --git a/test/resources/oasis/p48pass1.xml b/test/resources/oasis/p48pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p48pass1.xml
@@ -0,0 +1,14 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc ANY>
+<!ELEMENT a (doc)>
+<!ELEMENT b ((doc|a?))>
+<!ELEMENT c ((a,b))>
+<!ELEMENT d (doc*)>
+<!ELEMENT e (doc+)>
+<!ELEMENT f (doc?)>
+<!ELEMENT g ((a,b)*)>
+<!ELEMENT h ((a,b)?)>
+<!ELEMENT i ((a,b)+)>
+]>
+<doc/>
diff --git a/test/resources/oasis/p49pass1.xml b/test/resources/oasis/p49pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p49pass1.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc ANY>
+<!--NOTE: XML doesn't specify whether this is a choice or a seq-->
+<!ELEMENT a (doc?)>
+<!ELEMENT b (doc|a)>
+<!ELEMENT c (
+doc
+|
+a
+|
+c?
+)>
+]>
+<doc/>
diff --git a/test/resources/oasis/p50pass1.xml b/test/resources/oasis/p50pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p50pass1.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc ANY>
+<!--NOTE: XML doesn't specify whether this is a choice or a seq-->
+<!ELEMENT a (doc?)>
+<!ELEMENT b (doc,a)>
+<!ELEMENT c (
+doc
+,
+a
+,
+c?
+)>
+]>
+<doc/>
diff --git a/test/resources/oasis/p51pass1.xml b/test/resources/oasis/p51pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p51pass1.xml
@@ -0,0 +1,16 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ELEMENT a (#PCDATA|doc)*>
+<!ELEMENT b (
+#PCDATA
+|
+doc
+|
+a
+|
+b
+)*>
+<!ELEMENT c (#PCDATA)*>
+]>
+<doc/>
diff --git a/test/resources/oasis/p52pass1.xml b/test/resources/oasis/p52pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p52pass1.xml
@@ -0,0 +1,23 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA|a|b|c|d)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ELEMENT d EMPTY>
+<!ATTLIST a>
+<!ATTLIST b >
+<!ATTLIST c att CDATA #IMPLIED>
+<!ATTLIST d att CDATA #IMPLIED>
+<!ATTLIST
+c att CDATA
+ #IMPLIED
+att2
+ CDATA
+ "second declaration is OK"
+att2 CDATA
+ #REQUIRED
+ >
+<!ATTLIST d>
+]>
+<doc><c/><c att2="test"/></doc>
diff --git a/test/resources/oasis/p53pass1.xml b/test/resources/oasis/p53pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p53pass1.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc att CDATA #IMPLIED>
+]>
+<doc/>
diff --git a/test/resources/oasis/p54pass1.xml b/test/resources/oasis/p54pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p54pass1.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|b|c)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ATTLIST a att CDATA #IMPLIED>
+<!ATTLIST b att NMTOKENS #IMPLIED>
+<!ATTLIST c att (a|b) #IMPLIED>
+]>
+<doc/>
diff --git a/test/resources/oasis/p55pass1.xml b/test/resources/oasis/p55pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p55pass1.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc EMPTY>
+<!ATTLIST doc att CDATA #IMPLIED>
+]>
+<doc/>
diff --git a/test/resources/oasis/p56pass1.xml b/test/resources/oasis/p56pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p56pass1.xml
@@ -0,0 +1,19 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|b|c|d|e|f|g)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ELEMENT d EMPTY>
+<!ELEMENT e EMPTY>
+<!ELEMENT f EMPTY>
+<!ELEMENT g EMPTY>
+<!ATTLIST a att ID #IMPLIED>
+<!ATTLIST b att IDREF #IMPLIED>
+<!ATTLIST c att IDREFS #IMPLIED>
+<!ATTLIST d att ENTITY #IMPLIED>
+<!ATTLIST e att ENTITIES #IMPLIED>
+<!ATTLIST f att NMTOKEN #IMPLIED>
+<!ATTLIST g att NMTOKENS #IMPLIED>
+]>
+<doc/>
diff --git a/test/resources/oasis/p57pass1.xml b/test/resources/oasis/p57pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p57pass1.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|b)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!NOTATION a SYSTEM "a">
+<!ATTLIST a att (a|b) #IMPLIED>
+<!ATTLIST b att NOTATION (a|b) #IMPLIED>
+<!NOTATION b SYSTEM "b">
+]>
+<doc/>
diff --git a/test/resources/oasis/p58pass1.xml b/test/resources/oasis/p58pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p58pass1.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|b)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!NOTATION a SYSTEM "a">
+<!NOTATION b SYSTEM "b">
+<!ATTLIST a att NOTATION (a) #IMPLIED>
+<!ATTLIST b att NOTATION ( a | b ) #IMPLIED>
+]>
+<doc/>
diff --git a/test/resources/oasis/p59pass1.xml b/test/resources/oasis/p59pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p59pass1.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|b)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ATTLIST a att (a) #IMPLIED>
+<!ATTLIST b att ( a | b ) #IMPLIED>
+]>
+<doc/>
diff --git a/test/resources/oasis/p60pass1.xml b/test/resources/oasis/p60pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p60pass1.xml
@@ -0,0 +1,13 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (a|b|c|d)*>
+<!ELEMENT a EMPTY>
+<!ELEMENT b EMPTY>
+<!ELEMENT c EMPTY>
+<!ELEMENT d EMPTY>
+<!ATTLIST a att CDATA #REQUIRED>
+<!ATTLIST b att CDATA #IMPLIED>
+<!ATTLIST c att CDATA #FIXED "value">
+<!ATTLIST d att CDATA 'default'>
+]>
+<doc><c/><c att="value"/></doc>
diff --git a/test/resources/oasis/p61pass1.dtd b/test/resources/oasis/p61pass1.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p61pass1.dtd
@@ -0,0 +1,6 @@
+<![INCLUDE[<![INCLUDE[
+<![IGNORE[ ignored ]]>
+<!ELEMENT doc EMPTY>
+]]>]]>
+<![IGNORE[ ignored ]]>
+<![IGNORE[ <!ELEMENT doc ignored ]]>
diff --git a/test/resources/oasis/p61pass1.xml b/test/resources/oasis/p61pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p61pass1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p61pass1.dtd">
+<doc/>
diff --git a/test/resources/oasis/p62pass1.dtd b/test/resources/oasis/p62pass1.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p62pass1.dtd
@@ -0,0 +1,12 @@
+<![INCLUDE[
+<![
+INCLUDE
+[
+<!ELEMENT doc EMPTY>
+<![IGNORE[asdfasdf]]>
+]]>]]>
+<![INCLUDE[]]>
+<![INCLUDE[
+]]>
+<![INCLUDE[ ]]>
+
diff --git a/test/resources/oasis/p62pass1.xml b/test/resources/oasis/p62pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p62pass1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p62pass1.dtd">
+<doc/>
diff --git a/test/resources/oasis/p63pass1.dtd b/test/resources/oasis/p63pass1.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p63pass1.dtd
@@ -0,0 +1,13 @@
+<!ELEMENT doc EMPTY>
+<![IGNORE[
+<![INCLUDE[
+<!ELEMENT doc
+]]>]]>
+<![
+IGNORE
+[
+]]>
+<![IGNORE[]]>
+<![IGNORE[ ]]>
+<![IGNORE[
+]]>
diff --git a/test/resources/oasis/p63pass1.xml b/test/resources/oasis/p63pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p63pass1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p63pass1.dtd">
+<doc/>
diff --git a/test/resources/oasis/p64pass1.dtd b/test/resources/oasis/p64pass1.dtd
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p64pass1.dtd
@@ -0,0 +1,13 @@
+<!ELEMENT doc EMPTY>
+<![IGNORE[
+Everything is ignored within an ignored section, except the
+sub-section delimiters '<![' and ']]>'.  These must be balanced,
+but it is no section keyword is required:
+<![]]>
+<![DUNNO[ ]]>
+<![INCLUDE[
+asdfasdfasdf
+<!OK
+]]>
+] ]> ]] > ]]>
+<![IGNORE[ < ![ <! [ <![]]>]]>
diff --git a/test/resources/oasis/p64pass1.xml b/test/resources/oasis/p64pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p64pass1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "p64pass1.dtd">
+<doc/>
diff --git a/test/resources/oasis/p66fail1.xml b/test/resources/oasis/p66fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail1.xml
@@ -0,0 +1,1 @@
+<doc>&#65</doc>
diff --git a/test/resources/oasis/p66fail1.xml.html.correct b/test/resources/oasis/p66fail1.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail1.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML (literal &)
diff --git a/test/resources/oasis/p66fail2.xml b/test/resources/oasis/p66fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail2.xml
@@ -0,0 +1,1 @@
+<doc>&# 65;</doc>
diff --git a/test/resources/oasis/p66fail2.xml.html.correct b/test/resources/oasis/p66fail2.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail2.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML (literal &)
diff --git a/test/resources/oasis/p66fail3.xml b/test/resources/oasis/p66fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail3.xml
@@ -0,0 +1,1 @@
+<doc>&#A;</doc>
diff --git a/test/resources/oasis/p66fail3.xml.html.correct b/test/resources/oasis/p66fail3.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail3.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML (literal &)
diff --git a/test/resources/oasis/p66fail4.xml b/test/resources/oasis/p66fail4.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail4.xml
@@ -0,0 +1,1 @@
+<doc>&#x4G;</doc>
diff --git a/test/resources/oasis/p66fail4.xml.html.correct b/test/resources/oasis/p66fail4.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail4.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML (literal &)
diff --git a/test/resources/oasis/p66fail5.xml b/test/resources/oasis/p66fail5.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail5.xml
@@ -0,0 +1,1 @@
+<doc>&#5;</doc>
diff --git a/test/resources/oasis/p66fail6.xml b/test/resources/oasis/p66fail6.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66fail6.xml
@@ -0,0 +1,1 @@
+<doc>&#xd802;&#xdc02;</doc>
diff --git a/test/resources/oasis/p66pass1.xml b/test/resources/oasis/p66pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p66pass1.xml
@@ -0,0 +1,4 @@
+<doc>
+&#65;&#9;&#x41;&#x4f;&#x4F;&#0000000000000000009;
+&#x10F2ec;&#xa;
+</doc>
diff --git a/test/resources/oasis/p68fail1.xml b/test/resources/oasis/p68fail1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68fail1.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY ent "replacement text">
+]>
+<doc>
+&ent
+</doc>
diff --git a/test/resources/oasis/p68fail1.xml.html.correct b/test/resources/oasis/p68fail1.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68fail1.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML (literal &)
diff --git a/test/resources/oasis/p68fail2.xml b/test/resources/oasis/p68fail2.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68fail2.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY ent "replacement text">
+]>
+<doc>
+& ent;
+</doc>
diff --git a/test/resources/oasis/p68fail2.xml.html.correct b/test/resources/oasis/p68fail2.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68fail2.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML (literal &)
diff --git a/test/resources/oasis/p68fail3.xml b/test/resources/oasis/p68fail3.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68fail3.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY ent "replacement text">
+]>
+<doc>
+&ent ;
+</doc>
diff --git a/test/resources/oasis/p68fail3.xml.html.correct b/test/resources/oasis/p68fail3.xml.html.correct
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68fail3.xml.html.correct
@@ -0,0 +1,1 @@
+Valid in HTML (literal &)
diff --git a/test/resources/oasis/p68pass1.xml b/test/resources/oasis/p68pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68pass1.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY ent "replacement text">
+]>
+<doc>
+&ent;aaa&ent;
+<!--Not a reference:-->
+<!--Charref to & doesn't make a delimiter-->
+&#38;en
+</doc>
diff --git a/test/resources/oasis/p68pass1.xml.incorrect b/test/resources/oasis/p68pass1.xml.incorrect
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p68pass1.xml.incorrect
@@ -0,0 +1,1 @@
+Expected failure.  DTD declares new entities.
diff --git a/test/resources/oasis/p69pass1.xml b/test/resources/oasis/p69pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p69pass1.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY % pe "<!---->">
+%pe;<!---->%pe;
+]>
+<doc/>
diff --git a/test/resources/oasis/p70pass1.xml b/test/resources/oasis/p70pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p70pass1.xml
@@ -0,0 +1,7 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY ge "replacement text">
+<!ENTITY % pe "<!-- replacement decl -->">
+]>
+<doc/>
diff --git a/test/resources/oasis/p71pass1.xml b/test/resources/oasis/p71pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p71pass1.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY ge "replacement text">
+<!ENTITY
+ ge2
+ "replacement text"
+ >
+]>
+<doc/>
diff --git a/test/resources/oasis/p72pass1.xml b/test/resources/oasis/p72pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p72pass1.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY % pe "<!--replacement decl-->">
+<!ENTITY
+  %
+  pe2
+  "<!--replacement decl-->"
+  >
+]>
+<doc/>
diff --git a/test/resources/oasis/p73pass1.xml b/test/resources/oasis/p73pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p73pass1.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!NOTATION unknot PUBLIC "Unknown">
+<!ENTITY ge "replacement text">
+<!ENTITY ge2 SYSTEM "nop.ent">
+<!ENTITY ge3 SYSTEM "nop.ent" NDATA unknot>
+]>
+<doc/>
diff --git a/test/resources/oasis/p74pass1.xml b/test/resources/oasis/p74pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p74pass1.xml
@@ -0,0 +1,6 @@
+<!DOCTYPE doc
+[
+<!ENTITY % pe "<!--replacement decl-->">
+<!ENTITY % pe2 SYSTEM "nop.ent">
+]>
+<doc/>
diff --git a/test/resources/oasis/p75pass1.xml b/test/resources/oasis/p75pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p75pass1.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE doc
+[
+<!ENTITY ent SYSTEM "nop.ent">
+<!ENTITY ent2 PUBLIC "PublicID" "nop.ent">
+<!ENTITY ent3 PUBLIC
+              "PublicID"
+              "nop.ent"
+              >
+]>
+<doc/>
diff --git a/test/resources/oasis/p76pass1.xml b/test/resources/oasis/p76pass1.xml
new file mode 100644
--- /dev/null
+++ b/test/resources/oasis/p76pass1.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE doc
+[
+<!ELEMENT doc (#PCDATA)>
+<!NOTATION unknot PUBLIC "Unknown">
+<!ENTITY ge SYSTEM "nop.ent" NDATA unknot>
+<!ENTITY ge2 SYSTEM "nop.ent"
+  NDATA
+  unknot
+  >
+]>
+<doc/>
diff --git a/test/runTestsAndCoverage.sh b/test/runTestsAndCoverage.sh
new file mode 100644
--- /dev/null
+++ b/test/runTestsAndCoverage.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+set -e
+
+if [ -z "$DEBUG" ]; then
+    export DEBUG="testsuite"
+fi
+
+SUITE=./dist/build/testsuite/testsuite
+
+export LC_ALL=C
+export LANG=C
+
+rm -f testsuite.tix
+
+if [ ! -f $SUITE ]; then
+    cat <<EOF
+Testsuite executable not found, please run:
+    cabal configure -ftest
+then
+    cabal build
+EOF
+    exit;
+fi
+
+./dist/build/testsuite/testsuite -j4 -a1000 $*
+
+DIR=dist/hpc
+
+rm -Rf $DIR
+mkdir -p $DIR
+
+EXCLUDES='Main
+Text.XmlHtml.HTML.Meta
+Text.XmlHtml.DocumentTests
+Text.XmlHtml.CursorTests
+Text.XmlHtml.OASISTest
+Text.XmlHtml.TestCommon
+Text.XmlHtml.Tests'
+
+EXCL=""
+
+for m in $EXCLUDES; do
+    EXCL="$EXCL --exclude=$m"
+done
+
+hpc markup $EXCL --destdir=$DIR testsuite >/dev/null 2>&1
+
+rm -f testsuite.tix
+
+cat <<EOF
+
+Test coverage report written to $DIR.
+EOF
diff --git a/test/suite/TestSuite.hs b/test/suite/TestSuite.hs
new file mode 100644
--- /dev/null
+++ b/test/suite/TestSuite.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Main where
+
+import           Test.Framework (defaultMain)
+import           Text.XmlHtml.Tests (tests)
+
+main :: IO ()
+main = defaultMain tests
diff --git a/test/suite/Text/XmlHtml/CursorTests.hs b/test/suite/Text/XmlHtml/CursorTests.hs
new file mode 100644
--- /dev/null
+++ b/test/suite/Text/XmlHtml/CursorTests.hs
@@ -0,0 +1,504 @@
+{-# LANGUAGE OverloadedStrings         #-}
+
+module Text.XmlHtml.CursorTests (cursorTests) where
+
+import           Data.Maybe
+import           Test.Framework
+import           Test.Framework.Providers.HUnit
+import           Test.HUnit hiding (Test, Node)
+import           Text.XmlHtml
+import           Text.XmlHtml.Cursor
+import           Text.XmlHtml.TestCommon
+
+------------------------------------------------------------------------------
+-- Tests of navigating with the Cursor type ----------------------------------
+------------------------------------------------------------------------------
+
+cursorTests :: [Test]
+cursorTests = [
+    testIt   "fromNodeAndCurrent     " $ fromNodeAndCurrent,
+    testIt   "fromNodesAndSiblings   " $ fromNodesAndSiblings,
+    testIt   "leftSiblings           " $ leftSiblings,
+    testIt   "emptyFromNodes         " $ emptyFromNodes,
+    testIt   "cursorNEQ              " $ cursorNEQ,
+    testCase "cursorNavigation       " $ cursorNavigation,
+    testCase "cursorSearch           " $ cursorSearch,
+    testCase "cursorMutation         " $ cursorMutation,
+    testCase "cursorInsertion        " $ cursorInsertion,
+    testCase "cursorDeletion         " $ cursorDeletion
+    ]
+
+fromNodeAndCurrent :: Bool
+fromNodeAndCurrent = all (\n -> n == current (fromNode n)) ns
+    where ns = [
+            TextNode "foo",
+            Comment "bar",
+            Element "foo" [] [],
+            Element "root" [] [
+                TextNode "foo",
+                Comment "bar",
+                Element "foo" [] []
+                ]
+            ]
+
+fromNodesAndSiblings :: Bool
+fromNodesAndSiblings = n == siblings (fromJust $ fromNodes n)
+    where n = [
+            TextNode "foo",
+            Comment "bar",
+            Element "foo" [] [],
+            Element "root" [] [
+                TextNode "foo",
+                Comment "bar",
+                Element "foo" [] []
+                ]
+            ]
+
+leftSiblings :: Bool
+leftSiblings = fromJust $ do
+        r <- do
+            c1 <- fromNodes n
+            c2 <- right c1
+            c3 <- right c2
+            return c3
+        return (n == siblings r)
+    where n = [
+            TextNode "foo",
+            Comment "bar",
+            Element "foo" [] [],
+            Element "root" [] [
+                TextNode "foo",
+                Comment "bar",
+                Element "foo" [] []
+                ]
+            ]
+
+emptyFromNodes :: Bool
+emptyFromNodes = isNothing (fromNodes [])
+
+cursorNEQ :: Bool
+cursorNEQ = let a = fromNode (Element "a" [] [])
+                b = fromNode (Element "b" [] [])
+            in  a /= b
+
+-- Sample node structure for running cursor tests.
+cursorTestTree :: Node
+cursorTestTree = Element "department" [("code", "A17")] [
+    Element "employee" [("name", "alice")] [
+        Element "address" [] [
+            TextNode "124 My Road"
+            ],
+        Element "phone" [] [
+            TextNode "555-1234"
+            ]
+        ],
+    Element "employee" [("name", "bob")] [
+        Comment "My best friend",
+        Element "address" [] [
+            TextNode "123 My Road"
+            ],
+        Element "temp" [] []
+        ],
+    Element "employee" [("name", "camille")] [
+        Element "phone" [] [
+            TextNode "800-888-8888"
+            ]
+        ]
+    ]
+
+cursorNavigation :: Assertion
+cursorNavigation = do
+    let r = fromNode cursorTestTree
+
+    let Just e1 = firstChild r
+    let Just e2 = getChild 1 r
+    let Just e3 = lastChild r
+
+    assertBool "rootElem" $ isElement (current r)
+    assertBool "parent of root" $ isNothing (parent r)
+
+    assertBool "getChild bounds" $ isNothing (getChild 3 r)
+    assertBool "firstChild"      $
+        getAttribute "name" (current e1) == Just "alice"
+    assertBool "childAt 1 "      $
+        getAttribute "name" (current e2) == Just "bob"
+    assertBool "lastChild "      $
+        getAttribute "name" (current e3) == Just "camille"
+
+    do let Just a = lastChild e2
+       assertBool "firstChild on empty element" $ isNothing (firstChild a)
+       assertBool "getChild on empty element"   $ isNothing (getChild 0 a)
+       assertBool "lastChild on empty element"  $ isNothing (lastChild a)
+
+    do let Just a = right e1
+       let Just b = right a
+       assertBool "two paths #1" $ a == e2
+       assertBool "two paths #2" $ b == e3
+       assertBool "right off end" $ isNothing (right b)
+
+       let Just c = left e3
+       let Just d = left e2
+       assertBool "two paths #3" $ c == e2
+       assertBool "two paths #4" $ d == e1
+       assertBool  "left off end" $ isNothing (left d)
+
+    do let Just r1 = parent e2
+       assertEqual "child -> parent" (current r) (current r1)
+
+    do let Just cmt = firstChild e2
+       assertBool  "topNode"  $ tagName (topNode cmt) == Just "department"
+       assertBool  "topNodes" $ map tagName (topNodes cmt) == [ Just "department" ]
+
+       assertBool "first child of comment" $ isNothing (firstChild cmt)
+       assertBool "last  child of comment" $ isNothing (lastChild cmt)
+
+    do assertBool "nextDF down" $ nextDF r == Just e1
+
+       let Just cmt = firstChild e2
+       assertBool "nextDF right" $ nextDF cmt == right cmt
+
+       let Just em = lastChild e2
+       assertBool "nextDF up-right" $ nextDF em == Just e3
+       
+       let Just pelem = lastChild e3
+       let Just ptext = lastChild pelem
+       assertBool "nextDF end" $ isNothing (nextDF ptext)
+
+
+cursorSearch :: Assertion
+cursorSearch = do
+    let r = fromNode cursorTestTree
+
+    let Just e1 = findChild isFirst r
+    let Just e2 = findChild ((==(Just "bob")) . getAttribute "name" .  current) r
+    let Just e3 = findChild isLast r
+
+    assertBool "findChild isFirst" $
+        getAttribute "name" (current e1) == Just "alice"
+    assertBool "findChild" $
+        getAttribute "name" (current e2) == Just "bob"
+    assertBool "findChild isLast" $
+        getAttribute "name" (current e3) == Just "camille"
+
+    assertBool "findLeft Just" $ findLeft (const True) e2 == Just e1
+    assertBool "findLeft Nothing" $ findLeft (const False) e2 == Nothing
+    assertBool "findRight Just" $ findRight (const True) e2 == Just e3
+    assertBool "findRight Nothing" $ findRight (const False) e2 == Nothing
+    assertBool "findRec" $ findRec (not . hasChildren) r == (firstChild =<< firstChild e1)
+
+    assertBool "isChild true" $ isChild e1
+    assertBool "isChild false" $ not $ isChild r
+    assertBool "getNodeIndex" $ getNodeIndex e2 == 1
+
+
+cursorMutation :: Assertion
+cursorMutation = do
+    let r = fromNode cursorTestTree
+
+    let Just e1 = firstChild r
+    let Just e2 = right e1
+    let Just e3 = lastChild r
+
+    do let Just cmt = firstChild e2
+       let cmt'     = setNode (Comment "Not my friend any more") cmt
+       let Just e2' = parent cmt'
+       assertBool "setNode" $ current e2' ==
+            Element "employee" [("name", "bob")] [
+                Comment "Not my friend any more",
+                Element "address" [] [
+                    TextNode "123 My Road"
+                    ],
+                Element "temp" [] []
+                ]
+
+    do let e1' = modifyNode (setAttribute "name" "bryan") e1
+       let n   = current e1'
+       assertBool "modifyNode" $ getAttribute "name" n == Just "bryan"
+
+    do let myModifyM = return . setAttribute "name" "chelsea"
+       e3' <- modifyNodeM myModifyM e3
+       let n   = current e3'
+       assertBool "modifyNode" $ getAttribute "name" n == Just "chelsea"
+
+
+cursorInsertion :: Assertion
+cursorInsertion = do
+    let r            = fromNode cursorTestTree
+    let Just alice   = firstChild r
+    let Just bob     = getChild 1 r
+    let Just camille = lastChild r
+
+    let fred = Element "employee" [("name", "fred")] []
+
+    -- Stock insertLeft
+    do let ins    = insertLeft fred bob
+       assertBool "insertLeft leaves cursor" $
+            getAttribute "name" (current ins) == Just "bob"
+
+       let Just a = findLeft isFirst ins
+       assertBool "insertLeft 1" $
+            getAttribute "name" (current a) == Just "alice"
+
+       let Just b = right a
+       assertBool "insertLeft 2" $
+            getAttribute "name" (current b) == Just "fred"
+
+       let Just c = right b
+       assertBool "insertLeft 3" $
+            getAttribute "name" (current c) == Just "bob"
+
+       let Just d = right c
+       assertBool "insertLeft 4" $
+            getAttribute "name" (current d) == Just "camille"
+
+    -- insertLeft on first child
+    do let ins    = insertLeft fred alice
+       assertBool "insertLeft firstChild" $
+            getAttribute "name" (current ins) == Just "alice"
+
+       let Just a = findLeft isFirst ins
+       assertBool "insertLeft firstChild 1" $
+            getAttribute "name" (current a) == Just "fred"
+
+    -- Stock insertRight
+    do let ins    = insertRight fred alice
+       assertBool "insertRight leaves cursor" $
+            getAttribute "name" (current ins) == Just "alice"
+
+       let Just a = findRight isLast ins
+       assertBool "insertRight 1" $
+            getAttribute "name" (current a) == Just "camille"
+
+       let Just b = left a
+       assertBool "insertRight 2" $
+            getAttribute "name" (current b) == Just "bob"
+
+       let Just c = left b
+       assertBool "insertRight 3" $
+            getAttribute "name" (current c) == Just "fred"
+
+       let Just d = left c
+       assertBool "insertRight 4" $
+            getAttribute "name" (current d) == Just "alice"
+
+    -- insertRight on last child
+    do let ins    = insertRight fred camille
+       assertBool "insertRight lastChild" $
+            getAttribute "name" (current ins) == Just "camille"
+
+       let Just a = findRight isLast ins
+       assertBool "insertRight lastChild 1" $
+            getAttribute "name" (current a) == Just "fred"
+
+    let mary = Element "employee" [("name", "mary")] []
+    let new  = [fred, mary]
+
+    -- insertManyLeft
+    do let ins = insertManyLeft new camille
+       assertBool "insertManyLeft leaves cursor" $
+            getAttribute "name" (current ins) == Just "camille"
+
+       let Just a = left ins
+       assertBool "insertManyLeft 1" $
+            getAttribute "name" (current a) == Just "mary"
+
+       let Just b = left a
+       assertBool "insertManyLeft 2" $
+            getAttribute "name" (current b) == Just "fred"
+
+       let Just c = left b
+       assertBool "insertManyLeft 3" $
+            getAttribute "name" (current c) == Just "bob"
+
+    -- insertManyRight
+    do let ins = insertManyRight new alice
+       assertBool "insertManyRight leaves cursor" $
+            getAttribute "name" (current ins) == Just "alice"
+
+       let Just a = right ins
+       assertBool "insertManyRight 1" $
+            getAttribute "name" (current a) == Just "fred"
+
+       let Just b = right a
+       assertBool "insertManyRight 2" $
+            getAttribute "name" (current b) == Just "mary"
+
+       let Just c = right b
+       assertBool "insertManyRight 3" $
+            getAttribute "name" (current c) == Just "bob"
+
+    -- insertFirstChild and insertLastChild
+    do let Just ins1 = insertFirstChild fred r
+       let Just ins2 = insertLastChild mary ins1
+
+       let Just a = firstChild ins2
+       assertBool "insert children 1" $
+            getAttribute "name" (current a) == Just "fred"
+
+       let Just b = right a
+       assertBool "insert children 2" $
+            getAttribute "name" (current b) == Just "alice"
+
+       let Just c = right b
+       assertBool "insert children 3" $
+            getAttribute "name" (current c) == Just "bob"
+
+       let Just d = right c
+       assertBool "insert children 4" $
+            getAttribute "name" (current d) == Just "camille"
+
+       let Just e = right d
+       assertBool "insert children 5" $
+            getAttribute "name" (current e) == Just "mary"
+       assertBool "insert children 6" $ isLast e
+
+    -- non-element insertFirstChild and insertLastChild
+    do let Just cmt = firstChild bob
+       assertBool "non-elem insertFirstChild" $
+            insertFirstChild fred cmt == Nothing
+       assertBool "non-elem insertLastChild" $
+            insertLastChild fred cmt == Nothing
+       assertBool "non-elem insertManyFirstChild" $
+            insertManyFirstChild new cmt == Nothing
+       assertBool "non-elem insertManyLastChild" $
+            insertManyLastChild new cmt == Nothing
+
+    -- insertManyFirstChild
+    do let Just ins = insertManyFirstChild new r
+
+       let Just a = firstChild ins
+       assertBool "insertManyFirstChild 1" $
+            getAttribute "name" (current a) == Just "fred"
+
+       let Just b = right a
+       assertBool "insertManyFirstChild 2" $
+            getAttribute "name" (current b) == Just "mary"
+
+       let Just c = right b
+       assertBool "insertManyFirstChild 3" $
+            getAttribute "name" (current c) == Just "alice"
+
+       let Just d = right c
+       assertBool "insertManyFirstChild 4" $
+            getAttribute "name" (current d) == Just "bob"
+
+       let Just e = right d
+       assertBool "insertManyFirstChild 5" $
+            getAttribute "name" (current e) == Just "camille"
+       assertBool "insertManyFirstChild 6" $ isLast e
+
+
+    -- insertManyLastChild
+    do let Just ins = insertManyLastChild new r
+
+       let Just a = firstChild ins
+       assertBool "insertManyFirstChild 1" $
+            getAttribute "name" (current a) == Just "alice"
+
+       let Just b = right a
+       assertBool "insertManyFirstChild 2" $
+            getAttribute "name" (current b) == Just "bob"
+
+       let Just c = right b
+       assertBool "insertManyFirstChild 3" $
+            getAttribute "name" (current c) == Just "camille"
+
+       let Just d = right c
+       assertBool "insertManyFirstChild 4" $
+            getAttribute "name" (current d) == Just "fred"
+
+       let Just e = right d
+       assertBool "insertManyFirstChild 5" $
+            getAttribute "name" (current e) == Just "mary"
+       assertBool "insertManyFirstChild 6" $ isLast e
+
+    -- insertGoLeft from middle
+    do let ins    = insertGoLeft fred bob
+       let Just a = right ins
+       assertBool "insertGoLeft 1" $
+            getAttribute "name" (current ins) == Just "fred"
+       assertBool "insertGoLeft 2" $
+            getAttribute "name" (current a)   == Just "bob"
+
+    -- insertGoLeft from end
+    do let ins    = insertGoLeft fred alice
+       let Just a = right ins
+       assertBool "insertGoLeft 3" $
+            getAttribute "name" (current ins) == Just "fred"
+       assertBool "insertGoLeft 4" $
+            getAttribute "name" (current a)   == Just "alice"
+
+    -- insertGoRight from middle
+    do let ins    = insertGoRight fred bob
+       let Just a = left ins
+       assertBool "insertGoRight 1" $
+            getAttribute "name" (current ins) == Just "fred"
+       assertBool "insertGoRight 2" $
+            getAttribute "name" (current a)   == Just "bob"
+
+    -- insertGoRight from end
+    do let ins    = insertGoRight fred camille
+       let Just a = left ins
+       assertBool "insertGoRight 3" $
+            getAttribute "name" (current ins) == Just "fred"
+       assertBool "insertGoRight 4" $
+            getAttribute "name" (current a)   == Just "camille"
+
+
+cursorDeletion :: Assertion
+cursorDeletion = do
+    let r = fromNode cursorTestTree
+    let Just alice   = firstChild r
+    let Just bob     = getChild 1 r
+    let Just camille = lastChild r
+
+    -- removeLeft success
+    do let Just (n,del) = removeLeft bob
+       let [b,c] = siblings del
+       assertBool "removeLeft node1" $ getAttribute "name" n == Just "alice"
+       assertBool "removeLeft node2" $ getAttribute "name" b == Just "bob"
+       assertBool "removeLeft node3" $ getAttribute "name" c == Just "camille"
+
+    -- removeLeft failure
+    do assertBool "removeLeft failure" $ isNothing (removeLeft alice)
+
+    -- removeRight success
+    do let Just (n,del) = removeRight bob
+       let [a,b] = siblings del
+       assertBool "removeLeft node1" $ getAttribute "name" a == Just "alice"
+       assertBool "removeLeft node2" $ getAttribute "name" b == Just "bob"
+       assertBool "removeLeft node3" $ getAttribute "name" n == Just "camille"
+
+    -- removeRight failure
+    do assertBool "removeLeft failure" $ isNothing (removeRight camille)
+
+    -- removeGoLeft success
+    do let Just del = removeGoLeft bob
+       let Just c   = right del
+       assertBool "removeGoLeft 1" $
+            getAttribute "name" (current del) == Just "alice"
+       assertBool "removeGoLeft 2" $
+            getAttribute "name" (current c) == Just "camille"
+
+    -- removeGoLeft failure
+    do assertBool "removeGoLeft failure" $ isNothing (removeGoLeft alice)
+
+    -- removeGoRight success
+    do let Just del = removeGoRight bob
+       let Just a   = left del
+       assertBool "removeGoRight 1" $
+            getAttribute "name" (current del) == Just "camille"
+       assertBool "removeGoRight 2" $
+            getAttribute "name" (current a) == Just "alice"
+
+    -- removeGoLeft failure
+    do assertBool "removeGoRight failure" $ isNothing (removeGoRight camille)
+
+    -- removeGoUp success
+    do let Just del = removeGoUp bob
+       let [a,c]    = childNodes (current del)
+       assertBool "removeGoUp 1" $ getAttribute "name" a == Just "alice"
+       assertBool "removeGoUp 2" $ getAttribute "name" c == Just "camille"
+
+    -- removeGoUp failure
+    do assertBool "removeGoUp failure" $ isNothing (removeGoUp r)
diff --git a/test/suite/Text/XmlHtml/DocumentTests.hs b/test/suite/Text/XmlHtml/DocumentTests.hs
new file mode 100644
--- /dev/null
+++ b/test/suite/Text/XmlHtml/DocumentTests.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE OverloadedStrings         #-}
+
+module Text.XmlHtml.DocumentTests (documentTests) where
+
+import           Data.Text ()                  -- for string instance
+import           Test.Framework
+import           Test.Framework.Providers.HUnit
+import           Test.HUnit hiding (Node, Test)
+import           Text.XmlHtml
+import           Text.XmlHtml.TestCommon
+
+
+------------------------------------------------------------------------------
+-- Tests of manipulating the Node tree and Document --------------------------
+------------------------------------------------------------------------------
+
+documentTests :: [Test]
+documentTests = [
+    -- Exercise the (/=) operators; (==) is done plenty of places.
+    testIt   "compareExternalIDs     " $ compareExternalIDs,
+    testIt   "compareInternalSubs    " $ compareInternalSubs,
+    testIt   "compareDoctypes        " $ compareDoctypes,
+    testIt   "compareNodes           " $ compareNodes,
+    testIt   "compareDocuments       " $ compareDocuments,
+    testIt   "compareEncodings       " $ compareEncodings,
+
+    -- Silly tests just to exercise the Show instances on types.
+    testCase "exerciseShows          " $ exerciseShows,
+
+    -- Exercise the accessors for Document and Node
+    testCase "docNodeAccessors       " $ docNodeAccessors,
+
+    testIt   "isTextNodeYes          " $ isTextNode someTextNode,
+    testIt   "isTextNodeNo           " $ not $ isTextNode someComment,
+    testIt   "isTextNodeNo2          " $ not $ isTextNode someElement,
+    testIt   "isCommentYes           " $ isComment someComment,
+    testIt   "isCommentNo            " $ not $ isComment someTextNode,
+    testIt   "isCommentNo2           " $ not $ isComment someElement,
+    testIt   "isElementYes           " $ isElement someElement,
+    testIt   "isElementNo            " $ not $ isElement someTextNode,
+    testIt   "isElementNo2           " $ not $ isElement someComment,
+    testIt   "tagNameElement         " $ tagName someElement == Just "baz",
+    testIt   "tagNameText            " $ tagName someTextNode == Nothing,
+    testIt   "tagNameComment         " $ tagName someComment == Nothing,
+    testIt   "getAttributePresent    " $ getAttribute "fiz" someElement
+                                            == Just "buzz",
+    testIt   "getAttributeMissing    " $ getAttribute "baz" someElement
+                                            == Nothing,
+    testIt   "getAttributeWrongType  " $ getAttribute "fix" someTextNode
+                                            == Nothing,
+    testIt   "hasAttributePresent    " $ hasAttribute "fiz" someElement,
+    testIt   "hasAttributeMissing    " $ not $ hasAttribute "baz" someElement,
+    testIt   "hasAttributeWrongType  " $ not $ hasAttribute "fix" someTextNode,
+    testIt   "setAttributeNew        " $ setAttributeNew,
+    testIt   "setAttributeReplace    " $ setAttributeReplace,
+    testIt   "setAttributeWrongType  " $ setAttributeWrongType,
+    testIt   "nestedNodeText         " $ nestedNodeText,
+    testIt   "childNodesElem         " $ childNodesElem,
+    testIt   "childNodesOther        " $ childNodesOther,
+    testIt   "childElemsTest         " $ childElemsTest,
+    testIt   "childElemsTagTest      " $ childElemsTagTest,
+    testIt   "childElemTagExists     " $ childElemTagExists,
+    testIt   "childElemTagNotExists  " $ childElemTagNotExists,
+    testIt   "childElemTagOther      " $ childElemTagOther,
+    testIt   "descNodesElem          " $ descNodesElem,
+    testIt   "descNodesOther         " $ descNodesOther,
+    testIt   "descElemsTest          " $ descElemsTest,
+    testIt   "descElemsTagTest       " $ descElemsTagTest,
+    testIt   "descElemTagExists      " $ descElemTagExists,
+    testIt   "descElemTagDFS         " $ descElemTagDFS,
+    testIt   "descElemTagNotExists   " $ descElemTagNotExists,
+    testIt   "descElemTagOther       " $ descElemTagOther
+    ]
+
+
+compareExternalIDs :: Bool
+compareExternalIDs = Public "foo" "bar" /= System "bar"
+
+compareInternalSubs :: Bool
+compareInternalSubs = InternalText "" /= NoInternalSubset
+
+compareDoctypes :: Bool
+compareDoctypes = DocType "html" NoExternalID NoInternalSubset
+               /= DocType "foo"  NoExternalID NoInternalSubset
+
+compareNodes :: Bool
+compareNodes = TextNode "" /= Comment ""
+
+compareDocuments :: Bool
+compareDocuments = XmlDocument UTF8 Nothing [] /= HtmlDocument UTF8 Nothing []
+
+compareEncodings :: Bool
+compareEncodings = UTF8 /= UTF16BE
+
+exerciseShows :: Assertion
+exerciseShows = do
+    assertBool "1" $ length (showList [NoExternalID] "") > 0
+    assertBool "2" $ length (showList [NoInternalSubset] "") > 0
+    assertBool "3" $ length (showList [DocType "foo" NoExternalID NoInternalSubset] "") > 0
+    assertBool "4" $ length (showList [TextNode ""] "") > 0
+    assertBool "5" $ length (showList [XmlDocument UTF8 Nothing []] "") > 0
+    assertBool "6" $ length (showList [UTF8] "") > 0
+
+docNodeAccessors :: Assertion
+docNodeAccessors = do
+    let hdoc = HtmlDocument UTF8 Nothing []
+    assertEqual "html enc"  (docEncoding hdoc) UTF8
+    assertEqual "html type" (docType hdoc) Nothing
+    assertEqual "html nodes" (docContent hdoc) []
+
+    let xdoc = XmlDocument UTF8 Nothing []
+    assertEqual "xml enc"  (docEncoding xdoc) UTF8
+    assertEqual "xml type" (docType xdoc) Nothing
+    assertEqual "xml nodes" (docContent xdoc) []
+
+    let elm = Element  "foo" [] []
+    let txt = TextNode ""
+    let cmt = Comment  ""
+    assertEqual "elm tag"   (elementTag      elm) "foo"
+    assertEqual "elm attr"  (elementAttrs    elm) []
+    assertEqual "elm child" (elementChildren elm) []
+    assertBool  "txt tag"   $ isBottom (elementTag      txt)
+    assertBool  "txt attr"  $ isBottom (elementAttrs    txt)
+    assertBool  "txt child" $ isBottom (elementChildren txt)
+    assertBool  "cmt tag"   $ isBottom (elementTag      cmt)
+    assertBool  "cmt attr"  $ isBottom (elementAttrs    cmt)
+    assertBool  "cmt child" $ isBottom (elementChildren cmt)
+
+
+someTextNode :: Node
+someTextNode = TextNode "foo"
+
+someComment :: Node
+someComment = Comment "bar"
+
+someElement :: Node
+someElement = Element "baz" [("fiz","buzz")] [TextNode "content"]
+
+someTree :: Node
+someTree = Element "department" [("code", "A17")] [
+    Element "employee" [("name", "bob")] [
+        Comment "My best friend",
+        Element "address" [] [
+            TextNode "123 My Road"
+            ]
+        ],
+    Element "employee" [("name", "alice")] [
+        Element "address" [] [
+            TextNode "124 My Road"
+            ],
+        Element "phone" [] [
+            TextNode "555-1234"
+            ]
+        ]
+    ]
+
+setAttributeNew :: Bool
+setAttributeNew =
+    let e = setAttribute "flo" "friz" someElement
+    in  length (elementAttrs e) == 2
+        && getAttribute "fiz" e == Just "buzz"
+        && getAttribute "flo" e == Just "friz"
+
+setAttributeReplace :: Bool
+setAttributeReplace =
+    let e = setAttribute "fiz" "bat" someElement
+    in  length (elementAttrs e) == 1
+        && getAttribute "fiz" e == Just "bat"
+
+setAttributeWrongType :: Bool
+setAttributeWrongType =
+    setAttribute "fuss" "plus" someTextNode == someTextNode
+    && setAttribute "fuss" "plus" someComment == someComment
+
+nestedNodeText :: Bool
+nestedNodeText = nodeText someTree == "123 My Road124 My Road555-1234"
+
+childNodesElem :: Bool
+childNodesElem = length (childNodes n) == 3
+    where n = Element "foo" [] [ TextNode "bar",
+                                 Comment  "baz",
+                                 Element  "bat" [] [] ]
+
+childNodesOther :: Bool
+childNodesOther = childNodes (TextNode "foo") == []
+               && childNodes (Comment "bar")  == []
+
+childElemsTest :: Bool
+childElemsTest = length (childElements n) == 1
+    where n = Element "foo" [] [ TextNode "bar",
+                                 Comment  "baz",
+                                 Element  "bat" [] [] ]
+
+childElemsTagTest :: Bool
+childElemsTagTest = length (childElementsTag "good" n) == 2
+    where n = Element "parent" [] [
+                Element "good" [] [],
+                TextNode "foo",
+                Comment "bar",
+                Element "bad" [] [],
+                Element "good" [] [],
+                Element "bad" [] []
+              ]
+
+childElemTagExists :: Bool
+childElemTagExists = childElementTag "b" n == Just (Element "b" [] [])
+    where n = Element "parent" [] [
+                Element "a" [] [],
+                Element "b" [] [],
+                Element "c" [] []
+              ]
+
+childElemTagNotExists :: Bool
+childElemTagNotExists = childElementTag "b" n == Nothing
+    where n = Element "parent" [] [
+                Element "a" [] [],
+                Element "c" [] []
+              ]
+
+childElemTagOther :: Bool
+childElemTagOther = childElementTag "b" n == Nothing
+    where n = TextNode ""
+
+
+descNodesElem :: Bool
+descNodesElem = length (descendantNodes n) == 3
+    where n = Element "foo" [] [ TextNode "bar",
+                                 Element  "bat" [] [ Comment  "baz" ] ]
+
+descNodesOther :: Bool
+descNodesOther = descendantNodes (TextNode "foo") == []
+              && descendantNodes (Comment "bar")  == []
+
+descElemsTest :: Bool
+descElemsTest = length (descendantElements n) == 1
+    where n = Element "foo" [] [ TextNode "bar",
+                                 Element  "bat" [] [ Comment  "baz" ] ]
+
+descElemsTagTest :: Bool
+descElemsTagTest = length (descendantElementsTag "good" n) == 2
+    where n = Element "parent" [] [
+                TextNode "foo",
+                Element "good" [] [],
+                Comment "bar",
+                Element "parent" [] [ Element "good" [] [] ],
+                Element "bad" [] []
+              ]
+
+descElemTagExists :: Bool
+descElemTagExists = descendantElementTag "b" n == Just (Element "b" [] [])
+    where n = Element "parent" [] [
+                Element "a" [] [ Element "b" [] [] ],
+                Element "c" [] []
+              ]
+
+descElemTagDFS :: Bool
+descElemTagDFS = descendantElementTag "b" n == Just (Element "b" [] [])
+    where n = Element "parent" [] [
+                Element "a" [] [ Element "b" [] [] ],
+                Element "b" [("wrong", "")] [],
+                Element "c" [] []
+              ]
+
+descElemTagNotExists :: Bool
+descElemTagNotExists = descendantElementTag "b" n == Nothing
+    where n = Element "parent" [] [
+                Element "a" [] [],
+                Element "c" [] [ Element "d" [] [] ]
+              ]
+
+descElemTagOther :: Bool
+descElemTagOther = descendantElementTag "b" n == Nothing
+    where n = TextNode ""
+
diff --git a/test/suite/Text/XmlHtml/OASISTest.hs b/test/suite/Text/XmlHtml/OASISTest.hs
new file mode 100644
--- /dev/null
+++ b/test/suite/Text/XmlHtml/OASISTest.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Text.XmlHtml.OASISTest (testsOASIS) where
+
+import           Blaze.ByteString.Builder
+import           Control.Applicative
+import           Control.Monad
+import qualified Data.ByteString as B
+import           Data.Maybe
+import qualified Data.Text as T
+import           System.Directory
+import           Test.Framework
+import           Test.Framework.Providers.HUnit
+import           Test.HUnit hiding (Test, Node)
+import           Text.XmlHtml
+
+------------------------------------------------------------------------------
+-- | Runs the OASIS XML conformance test suite.  The test cases sit in
+-- directories inside of @test/resources@.  This test reads them, parses them,
+-- and ensures that they behave as expected:
+--
+-- * If there is a file in the same directory named /filename/@.correct@
+--   or /filename/@.incorrect@, the parsing is expected to either succeed
+--   or fail, as indicated.  Otherwise, the remaining cases apply.
+--
+-- * For those tests marked @not-wf@, the test expects an error message.
+--
+-- * For tests marked @valid@ or @invalid@ (there is no distinction since
+--   @xmlhtml@ is not a validating parser), the test expects a successful
+--   parse, but does not verify the parse result.
+--
+-- For tests that should succeed as XML but not HTML, or vice versa, files
+-- can be named /filename/@.xml.correct@, and so on (all 4 combinations).
+
+testsOASIS :: [Test]
+testsOASIS = [
+    testCase "xmlhtml/ibm-not-wf     " $ oasisP  "ibm/ibm_oasis_not-wf.xml",
+    testCase "xmlhtml/ibm-invalid    " $ oasisP  "ibm/ibm_oasis_invalid.xml",
+    testCase "xmlhtml/ibm-valid      " $ oasisP  "ibm/ibm_oasis_valid.xml",
+    testCase "xmlhtml/oasis          " $ oasisP  "oasis/oasis.xml",
+    testCase "xmlhtml/r-ibm-not-wf   " $ oasisR  "ibm/ibm_oasis_not-wf.xml",
+    testCase "xmlhtml/r-ibm-invalid  " $ oasisR  "ibm/ibm_oasis_invalid.xml",
+    testCase "xmlhtml/r-ibm-valid    " $ oasisR  "ibm/ibm_oasis_valid.xml",
+    testCase "xmlhtml/r-oasis        " $ oasisR  "oasis/oasis.xml",
+    testCase "xmlhtml/h-ibm-not-wf   " $ oasisHP "ibm/ibm_oasis_not-wf.xml",
+    testCase "xmlhtml/h-ibm-invalid  " $ oasisHP "ibm/ibm_oasis_invalid.xml",
+    testCase "xmlhtml/h-ibm-valid    " $ oasisHP "ibm/ibm_oasis_valid.xml",
+    testCase "xmlhtml/h-oasis        " $ oasisHP "oasis/oasis.xml",
+    testCase "xmlhtml/hr-ibm-not-wf  " $ oasisHR "ibm/ibm_oasis_not-wf.xml",
+    testCase "xmlhtml/hr-ibm-invalid " $ oasisHR "ibm/ibm_oasis_invalid.xml",
+    testCase "xmlhtml/hr-ibm-valid   " $ oasisHR "ibm/ibm_oasis_valid.xml",
+    testCase "xmlhtml/hr-oasis       " $ oasisHR "oasis/oasis.xml"
+    ]
+
+
+oasisP :: String -> Assertion
+oasisP name = do
+    tests <- getOASIS ".xml" name
+    forM_ tests $ \(fn, ty) -> case ty of
+        True  -> oasisWF fn
+        False -> oasisNotWF fn
+
+
+oasisR :: String -> Assertion
+oasisR name = do
+    tests <- getOASIS ".xml" name
+    forM_ tests $ \(fn, ty) -> case ty of
+        True  -> oasisRerender fn
+        False -> return ()
+
+
+oasisHP :: String -> Assertion
+oasisHP name = do
+    tests <- getOASIS ".html" name
+    forM_ tests $ \(fn, ty) -> case ty of
+        True  -> hOasisWF fn
+        False -> hOasisNotWF fn
+
+
+oasisHR :: String -> Assertion
+oasisHR name = do
+    tests <- getOASIS ".html" name
+    forM_ tests $ \(fn, ty) -> case ty of
+        True  -> hOasisRerender fn
+        False -> return ()
+
+
+getOASIS :: String -> String -> IO [(String, Bool)]
+getOASIS sub name = do
+    testListSrc <- B.readFile ("resources/" ++ name)
+    let Right (XmlDocument _ _ ns) = parseXML name testListSrc
+    let Just c = listToMaybe (filter isElement ns)
+    oasisTestCases sub name c
+
+
+oasisTestCases :: String -> String -> Node -> IO [(String, Bool)]
+oasisTestCases sub name n = do
+    fmap concat $ forM (childElements n) $ \t -> case tagName t of
+        Just "TESTCASES" -> oasisTestCases sub name t
+        Just "TEST"      -> oasisTest sub name t
+        _                -> error (show t)
+
+
+oasisTest :: String -> String -> Node -> IO [(String, Bool)]
+oasisTest sub name t = do
+    let fn = file $ fromJust $ getAttribute "URI" t
+    fe <- doesFileExist fn
+    ce <- (||) <$> doesFileExist (fn ++ ".correct")
+               <*> doesFileExist (fn ++ sub ++ ".correct")
+    ie <- (||) <$> doesFileExist (fn ++ ".incorrect")
+               <*> doesFileExist (fn ++ sub ++ ".incorrect")
+    let ty = getAttribute "TYPE" t
+    if fe then case () of
+        () | ce                   -> return [(fn, True)]
+           | ie                   -> return [(fn, False)]
+           | ty == Just "not-wf"  -> return [(fn, False)]
+           | ty == Just "invalid" -> return [(fn, True)]
+           | ty == Just "valid"   -> return [(fn, True)]
+           | otherwise            -> return [(fn, True)]
+      else return []
+  where
+    file f        = "resources/" ++ toLastSlash name ++ T.unpack f
+    toLastSlash s = snd (go s)
+        where go []     = (False, [])
+              go (c:cs) = let (found, ccs) = go cs
+                          in  if found then (True, c:ccs)
+                              else if c == '/' then (True, "/")
+                              else (False, c:cs)
+
+
+oasisNotWF :: String -> Assertion
+oasisNotWF name = do
+    src <- B.readFile name
+    assertBool ("not-wf parse " ++ name) $ isLeft (parseXML name src)
+  where
+    isLeft (Left _) = True
+    isLeft _        = False
+
+
+oasisWF :: String -> Assertion
+oasisWF name = do
+    src <- B.readFile name
+    assertBool ("wf parse " ++ name) $ isRight (parseXML name src)
+  where
+    isRight (Right _) = True
+    isRight _         = False
+
+
+oasisRerender :: String -> Assertion
+oasisRerender name = do
+    src         <- B.readFile name
+    let Right d  = parseXML "" src
+    let src2     = toByteString (render d)
+    let Right d2 = parseXML "" src2
+    assertEqual ("rerender " ++ name) d d2
+
+
+hOasisNotWF :: String -> Assertion
+hOasisNotWF name = do
+    src <- B.readFile name
+    assertBool ("not-wf parse " ++ name) $ isLeft (parseHTML name src)
+  where
+    isLeft (Left _) = True
+    isLeft _        = False
+
+
+hOasisWF :: String -> Assertion
+hOasisWF name = do
+    src <- B.readFile name
+    assertBool ("wf parse " ++ name) $ isRight (parseHTML name src)
+  where
+    isRight (Right _) = True
+    isRight _         = False
+
+
+hOasisRerender :: String -> Assertion
+hOasisRerender name = do
+    src         <- B.readFile name
+    let Right d  = parseHTML "" src
+    let src2     = toByteString (render d)
+    let Right d2 = parseHTML "" src2
+    assertEqual ("rerender " ++ name) d d2
+
diff --git a/test/suite/Text/XmlHtml/TestCommon.hs b/test/suite/Text/XmlHtml/TestCommon.hs
new file mode 100644
--- /dev/null
+++ b/test/suite/Text/XmlHtml/TestCommon.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE ScopedTypeVariables       #-}
+
+module Text.XmlHtml.TestCommon where
+
+import           Control.Exception as E
+import           System.IO.Unsafe
+import           Test.Framework
+import           Test.Framework.Providers.HUnit
+import           Test.HUnit hiding (Test, Node)
+
+------------------------------------------------------------------------------
+-- | Tests a simple Bool property.
+testIt :: TestName -> Bool -> Test
+testIt name b = testCase name $ assertBool name b
+
+------------------------------------------------------------------------------
+-- Code adapted from ChasingBottoms.
+--
+-- Adding an actual dependency isn't possible because Cabal refuses to build
+-- the package due to version conflicts.
+--
+-- isBottom is impossible to write, but very useful!  So we defy the
+-- impossible, and write it anyway.
+isBottom :: a -> Bool
+isBottom a = unsafePerformIO $
+    (E.evaluate a >> return False) `E.catches` [
+        E.Handler $ \ (_ :: PatternMatchFail) -> return True,
+        E.Handler $ \ (_ :: ErrorCall)        -> return True,
+        E.Handler $ \ (_ :: NoMethodError)    -> return True,
+        E.Handler $ \ (_ :: RecConError)      -> return True,
+        E.Handler $ \ (_ :: RecUpdError)      -> return True,
+        E.Handler $ \ (_ :: RecSelError)      -> return True
+        ]
+
+------------------------------------------------------------------------------
+isLeft :: Either a b -> Bool
+isLeft = either (const True) (const False)
+
diff --git a/test/suite/Text/XmlHtml/Tests.hs b/test/suite/Text/XmlHtml/Tests.hs
new file mode 100644
--- /dev/null
+++ b/test/suite/Text/XmlHtml/Tests.hs
@@ -0,0 +1,915 @@
+{-# LANGUAGE ExistentialQuantification #-}
+{-# LANGUAGE OverloadedStrings         #-}
+
+module Text.XmlHtml.Tests (tests) where
+
+import           Blaze.ByteString.Builder
+import           Data.ByteString (ByteString)
+import qualified Data.ByteString.Char8 as B
+import           Data.Monoid
+import           Data.String
+import           Data.Text ()                  -- for string instance
+import qualified Data.Text.Encoding as T
+import           Test.Framework
+import           Test.Framework.Providers.HUnit
+import           Test.HUnit hiding (Test, Node)
+import           Text.Blaze
+import qualified Text.Blaze.Html5 as H
+import qualified Text.Blaze.Html5.Attributes as A
+import           Text.Blaze.Renderer.XmlHtml
+import           Text.XmlHtml
+import           Text.XmlHtml.CursorTests
+import           Text.XmlHtml.DocumentTests
+import           Text.XmlHtml.TestCommon
+import           Text.XmlHtml.OASISTest
+
+
+------------------------------------------------------------------------------
+-- The master list of tests to run. ------------------------------------------
+------------------------------------------------------------------------------
+
+tests :: [Test]
+tests = xmlParsingTests
+     ++ htmlXMLParsingTests
+     ++ htmlParsingQuirkTests
+     ++ xmlRenderingTests
+     ++ htmlXMLRenderingTests
+     ++ htmlRenderingQuirkTests
+     ++ documentTests
+     ++ cursorTests
+     ++ blazeRenderTests
+     ++ testsOASIS
+
+
+------------------------------------------------------------------------------
+-- XML Parsing Tests ---------------------------------------------------------
+------------------------------------------------------------------------------
+
+xmlParsingTests :: [Test]
+xmlParsingTests = [
+    testCase "byteOrderMark          " byteOrderMark,
+    testIt   "emptyDocument          " emptyDocument,
+    testIt   "publicDocType          " publicDocType,
+    testIt   "systemDocType          " systemDocType,
+    testIt   "emptyDocType           " emptyDocType,
+    testCase "dtdInternalScan        " dtdInternalScan,
+    testIt   "textOnly               " textOnly,
+    testIt   "textWithRefs           " textWithRefs,
+    testIt   "untermRef              " untermRef,
+    testIt   "textWithCDATA          " textWithCDATA,
+    testIt   "cdataOnly              " cdataOnly,
+    testIt   "commentOnly            " commentOnly,
+    testIt   "emptyElement           " emptyElement,
+    testIt   "emptyElement2          " emptyElement2,
+    testIt   "elemWithText           " elemWithText,
+    testIt   "xmlDecl                " xmlDecl,
+    testIt   "procInst               " procInst,
+    testIt   "badDoctype1            " badDoctype1,
+    testIt   "badDoctype2            " badDoctype2,
+    testIt   "badDoctype3            " badDoctype3,
+    testIt   "badDoctype4            " badDoctype4,
+    testIt   "badDoctype5            " badDoctype5,
+    testCase "tagNames               " tagNames
+    ]
+
+byteOrderMark :: Assertion
+byteOrderMark = do
+    assertEqual "BOM UTF16BE" (Right $ XmlDocument UTF16BE Nothing [])
+        (parseXML "" $ T.encodeUtf16BE "\xFEFF")
+    assertEqual "BOM UTF16LE" (Right $ XmlDocument UTF16LE Nothing [])
+        (parseXML "" $ T.encodeUtf16LE "\xFEFF")
+    assertEqual "BOM UTF8" (Right $ XmlDocument UTF8 Nothing [])
+        (parseXML "" $ T.encodeUtf8 "\xFEFF")
+    assertEqual "BOM None" (Right $ XmlDocument UTF8 Nothing [])
+        (parseXML "" $ T.encodeUtf8 "")
+
+emptyDocument :: Bool
+emptyDocument = parseXML "" ""
+    == Right (XmlDocument UTF8 Nothing [])
+
+publicDocType :: Bool
+publicDocType = parseXML "" "<!DOCTYPE tag PUBLIC \"foo\" \"bar\">"
+    == Right (XmlDocument UTF8 (Just (DocType "tag" (Public "foo" "bar") NoInternalSubset)) [])
+
+systemDocType :: Bool
+systemDocType = parseXML "" "<!DOCTYPE tag SYSTEM \"foo\">"
+    == Right (XmlDocument UTF8 (Just (DocType "tag" (System "foo") NoInternalSubset)) [])
+
+emptyDocType :: Bool
+emptyDocType  = parseXML "" "<!DOCTYPE tag >"
+    == Right (XmlDocument UTF8 (Just (DocType "tag" NoExternalID NoInternalSubset)) [])
+
+dtdInternalScan :: Assertion
+dtdInternalScan = do
+    assertEqual "empty" (parseXML "" "<!DOCTYPE a []>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[]" ))) []))
+    assertBool "bad brackets" (isLeft $ parseXML "" "<!DOCTYPE a ()>")
+    assertEqual "quoted" (parseXML "" "<!DOCTYPE a [\"]\"]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[\"]\"]" ))) []))
+    assertBool "bad quote" (isLeft $ parseXML "" "<!DOCTYPE a [\"]>")
+    assertEqual "nested brackets" (parseXML "" "<!DOCTYPE a [[[]]]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[[[]]]" ))) []))
+    assertEqual "part comment 1" (parseXML "" "<!DOCTYPE a [<]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<]" ))) []))
+    assertEqual "part comment 2" (parseXML "" "<!DOCTYPE a [[<]]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[[<]]" ))) []))
+    assertEqual "part comment 3" (parseXML "" "<!DOCTYPE a [<[]]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<[]]" ))) []))
+    assertEqual "part comment 4" (parseXML "" "<!DOCTYPE a [<!]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<!]" ))) []))
+    assertEqual "part comment 5" (parseXML "" "<!DOCTYPE a [[<!]]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[[<!]]" ))) []))
+    assertEqual "part comment 6" (parseXML "" "<!DOCTYPE a [<!-]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<!-]" ))) []))
+    assertEqual "comment" (parseXML "" "<!DOCTYPE a [<!--foo-->]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<!--foo-->]" ))) []))
+    assertEqual "docint 1" (parseXML "" "<!DOCTYPE a [<''<\"\"<!''<!\"\">]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<''<\"\"<!''<!\"\">]" ))) []))
+    assertEqual "docint2" (parseXML "" "<!DOCTYPE a [<![<!-[<!-]<!-''<!-\"\"]]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<![<!-[<!-]<!-''<!-\"\"]]" ))) []))
+    assertEqual "docint3" (parseXML "" "<!DOCTYPE a [<!- ]>")
+        (Right (XmlDocument UTF8 (Just (DocType "a" NoExternalID (InternalText
+            "[<!- ]" ))) []))
+    assertBool "bad comment" (isLeft $ parseXML "" "<!DOCTYPE a [<!-- -- -->]>")
+
+textOnly :: Bool
+textOnly      = parseXML "" "sldhfsklj''a's s"
+    == Right (XmlDocument UTF8 Nothing [TextNode "sldhfsklj''a's s"])
+
+textWithRefs :: Bool
+textWithRefs  = parseXML "" "This is Bob&apos;s sled"
+    == Right (XmlDocument UTF8 Nothing [TextNode "This is Bob's sled"])
+
+untermRef :: Bool
+untermRef     = isLeft (parseXML "" "&#X6a")
+
+textWithCDATA :: Bool
+textWithCDATA = parseXML "" "Testing <![CDATA[with <some> c]data]]>"
+    == Right (XmlDocument UTF8 Nothing [TextNode "Testing with <some> c]data"])
+
+cdataOnly :: Bool
+cdataOnly     = parseXML "" "<![CDATA[ Testing <![CDATA[ test ]]>"
+    == Right (XmlDocument UTF8 Nothing [TextNode " Testing <![CDATA[ test "])
+
+commentOnly :: Bool
+commentOnly   = parseXML "" "<!-- this <is> a \"comment -->"
+    == Right (XmlDocument UTF8 Nothing [Comment " this <is> a \"comment "])
+
+emptyElement :: Bool
+emptyElement  = parseXML "" "<myElement/>"
+    == Right (XmlDocument UTF8 Nothing [Element "myElement" [] []])
+
+emptyElement2 :: Bool
+emptyElement2  = parseXML "" "<myElement />"
+    == Right (XmlDocument UTF8 Nothing [Element "myElement" [] []])
+
+elemWithText :: Bool
+elemWithText  = parseXML "" "<myElement>text</myElement>"
+    == Right (XmlDocument UTF8 Nothing [Element "myElement" [] [TextNode "text"]])
+
+xmlDecl :: Bool
+xmlDecl       = parseXML "" "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
+    == Right (XmlDocument UTF8 Nothing [])
+
+procInst :: Bool
+procInst      = parseXML "" "<?myPI This''is <not> parsed!?>"
+    == Right (XmlDocument UTF8 Nothing [])
+
+badDoctype1 :: Bool
+badDoctype1    = isLeft $ parseXML "" "<!DOCTYPE>"
+
+badDoctype2 :: Bool
+badDoctype2    = isLeft $ parseXML "" "<!DOCTYPE html BAD>"
+
+badDoctype3 :: Bool
+badDoctype3    = isLeft $ parseXML "" "<!DOCTYPE html SYSTEM>"
+
+badDoctype4 :: Bool
+badDoctype4    = isLeft $ parseXML "" "<!DOCTYPE html PUBLIC \"foo\">"
+
+badDoctype5 :: Bool
+badDoctype5    = isLeft $ parseXML "" ("<!DOCTYPE html SYSTEM \"foo\" "
+                                       `B.append` "PUBLIC \"bar\" \"baz\">")
+
+tagNames :: Assertion
+tagNames = do
+    assertBool "tag name 0"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<foo />")
+    assertBool "tag name 1"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\xc0\&foo />")
+    assertBool "tag name 2"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\xd8\&foo />")
+    assertBool "tag name 3"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\xf8\&foo />")
+    assertBool "tag name 4"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\x370\&foo />")
+    assertBool "tag name 5"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\x37f\&foo />")
+    assertBool "tag name 6"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\x200c\&foo />")
+    assertBool "tag name 7"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\x2070\&foo />")
+    assertBool "tag name 8"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\x2c00\&foo />")
+    assertBool "tag name 9"  $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\x3001\&foo />")
+    assertBool "tag name 10" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\xf900\&foo />")
+    assertBool "tag name 11" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\xfdf0\&foo />")
+    assertBool "tag name 12" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\x10000\&foo />")
+    assertBool "tag name 13" $ id  $
+        isLeft $ parseXML "" (T.encodeUtf8 "<\xd7\&foo />")
+    assertBool "tag name 14" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<f-oo />")
+    assertBool "tag name 15" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<f.oo />")
+    assertBool "tag name 16" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<f\xb7\&oo />")
+    assertBool "tag name 17" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<f3oo />")
+    assertBool "tag name 18" $ not $
+        isLeft $ parseXML "" (T.encodeUtf8 "<f\x203f\&oo />")
+    assertBool "tag name 19" $ id  $
+        isLeft $ parseXML "" (T.encodeUtf8 "<f\x2041\&oo />")
+
+
+------------------------------------------------------------------------------
+-- HTML Repetitions of XML Parsing Tests -------------------------------------
+------------------------------------------------------------------------------
+
+htmlXMLParsingTests :: [Test]
+htmlXMLParsingTests = [
+    testIt "emptyDocumentHTML      " emptyDocumentHTML,
+    testIt "publicDocTypeHTML      " publicDocTypeHTML,
+    testIt "systemDocTypeHTML      " systemDocTypeHTML,
+    testIt "emptyDocTypeHTML       " emptyDocTypeHTML,
+    testIt "textOnlyHTML           " textOnlyHTML,
+    testIt "textWithRefsHTML       " textWithRefsHTML,
+    testIt "textWithCDataHTML      " textWithCDataHTML,
+    testIt "cdataOnlyHTML          " cdataOnlyHTML,
+    testIt "commentOnlyHTML        " commentOnlyHTML,
+    testIt "emptyElementHTML       " emptyElementHTML,
+    testIt "emptyElement2HTML      " emptyElement2HTML,
+    testIt "elemWithTextHTML       " elemWithTextHTML,
+    testIt "xmlDeclHTML            " xmlDeclHTML,
+    testIt "procInstHTML           " procInstHTML,
+    testIt "badDoctype1HTML        " badDoctype1HTML,
+    testIt "badDoctype2HTML        " badDoctype2HTML,
+    testIt "badDoctype3HTML        " badDoctype3HTML,
+    testIt "badDoctype4HTML        " badDoctype4HTML,
+    testIt "badDoctype5HTML        " badDoctype5HTML
+    ]
+
+emptyDocumentHTML :: Bool
+emptyDocumentHTML = parseHTML "" ""
+    == Right (HtmlDocument UTF8 Nothing [])
+
+publicDocTypeHTML :: Bool
+publicDocTypeHTML = parseHTML "" "<!DOCTYPE tag PUBLIC \"foo\" \"bar\">"
+    == Right (HtmlDocument UTF8 (Just (DocType "tag" (Public "foo" "bar") NoInternalSubset)) [])
+
+systemDocTypeHTML :: Bool
+systemDocTypeHTML = parseHTML "" "<!DOCTYPE tag SYSTEM \"foo\">"
+    == Right (HtmlDocument UTF8 (Just (DocType "tag" (System "foo") NoInternalSubset)) [])
+
+emptyDocTypeHTML :: Bool
+emptyDocTypeHTML  = parseHTML "" "<!DOCTYPE tag >"
+    == Right (HtmlDocument UTF8 (Just (DocType "tag" NoExternalID NoInternalSubset)) [])
+
+textOnlyHTML :: Bool
+textOnlyHTML      = parseHTML "" "sldhfsklj''a's s"
+    == Right (HtmlDocument UTF8 Nothing [TextNode "sldhfsklj''a's s"])
+
+textWithRefsHTML :: Bool
+textWithRefsHTML  = parseHTML "" "This is Bob&apos;s sled"
+    == Right (HtmlDocument UTF8 Nothing [TextNode "This is Bob's sled"])
+
+textWithCDataHTML :: Bool
+textWithCDataHTML = parseHTML "" "Testing <![CDATA[with <some> c]data]]>"
+    == Right (HtmlDocument UTF8 Nothing [TextNode "Testing with <some> c]data"])
+
+cdataOnlyHTML :: Bool
+cdataOnlyHTML     = parseHTML "" "<![CDATA[ Testing <![CDATA[ test ]]>"
+    == Right (HtmlDocument UTF8 Nothing [TextNode " Testing <![CDATA[ test "])
+
+commentOnlyHTML :: Bool
+commentOnlyHTML   = parseHTML "" "<!-- this <is> a \"comment -->"
+    == Right (HtmlDocument UTF8 Nothing [Comment " this <is> a \"comment "])
+
+emptyElementHTML :: Bool
+emptyElementHTML  = parseHTML "" "<myElement/>"
+    == Right (HtmlDocument UTF8 Nothing [Element "myElement" [] []])
+
+emptyElement2HTML :: Bool
+emptyElement2HTML = parseHTML "" "<myElement />"
+    == Right (HtmlDocument UTF8 Nothing [Element "myElement" [] []])
+
+elemWithTextHTML :: Bool
+elemWithTextHTML  = parseHTML "" "<myElement>text</myElement>"
+    == Right (HtmlDocument UTF8 Nothing [Element "myElement" [] [TextNode "text"]])
+
+xmlDeclHTML :: Bool
+xmlDeclHTML       = parseHTML "" "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
+    == Right (HtmlDocument UTF8 Nothing [])
+
+procInstHTML :: Bool
+procInstHTML      = parseHTML "" "<?myPI This''is <not> parsed!?>"
+    == Right (HtmlDocument UTF8 Nothing [])
+
+badDoctype1HTML :: Bool
+badDoctype1HTML    = isLeft $ parseHTML "" "<!DOCTYPE>"
+
+badDoctype2HTML :: Bool
+badDoctype2HTML    = isLeft $ parseHTML "" "<!DOCTYPE html BAD>"
+
+badDoctype3HTML :: Bool
+badDoctype3HTML    = isLeft $ parseHTML "" "<!DOCTYPE html SYSTEM>"
+
+badDoctype4HTML :: Bool
+badDoctype4HTML    = isLeft $ parseHTML "" "<!DOCTYPE html PUBLIC \"foo\">"
+
+badDoctype5HTML :: Bool
+badDoctype5HTML    = isLeft $ parseHTML "" ("<!DOCTYPE html SYSTEM \"foo\" "
+                                       `B.append` "PUBLIC \"bar\" \"baz\">")
+
+
+------------------------------------------------------------------------------
+-- HTML Quirks Parsing Tests -------------------------------------------------
+------------------------------------------------------------------------------
+
+htmlParsingQuirkTests :: [Test]
+htmlParsingQuirkTests = [
+    testIt   "voidElem               " voidElem,
+    testIt   "caseInsDoctype1        " caseInsDoctype1,
+    testIt   "caseInsDoctype2        " caseInsDoctype2,
+    testIt   "voidEmptyElem          " voidEmptyElem,
+    testIt   "rawTextElem            " rawTextElem,
+    testIt   "rcdataElem             " rcdataElem,
+    testIt   "endTagCase             " endTagCase,
+    testIt   "hexEntityCap           " hexEntityCap,
+    testIt   "laxAttrName            " laxAttrName,
+    testCase "badAttrName            " badAttrName,
+    testIt   "emptyAttr              " emptyAttr,
+    testIt   "unquotedAttr           " unquotedAttr,
+    testIt   "laxAttrVal             " laxAttrVal,
+    testIt   "ampersandInText        " ampersandInText,
+    testIt   "omitOptionalEnds       " omitOptionalEnds,
+    testIt   "omitEndHEAD            " omitEndHEAD,
+    testIt   "omitEndLI              " omitEndLI,
+    testIt   "omitEndDT              " omitEndDT,
+    testIt   "omitEndDD              " omitEndDD,
+    testIt   "omitEndP               " omitEndP,
+    testIt   "omitEndRT              " omitEndRT,
+    testIt   "omitEndRP              " omitEndRP,
+    testIt   "omitEndOPTGRP          " omitEndOPTGRP,
+    testIt   "omitEndOPTION          " omitEndOPTION,
+    testIt   "omitEndCOLGRP          " omitEndCOLGRP,
+    testIt   "omitEndTHEAD           " omitEndTHEAD,
+    testIt   "omitEndTBODY           " omitEndTBODY,
+    testIt   "omitEndTFOOT           " omitEndTFOOT,
+    testIt   "omitEndTR              " omitEndTR,
+    testIt   "omitEndTD              " omitEndTD,
+    testIt   "omitEndTH              " omitEndTH,
+    testIt   "testNewRefs            " testNewRefs
+    ]
+
+caseInsDoctype1 :: Bool
+caseInsDoctype1 = parseHTML "" "<!dOcTyPe html SyStEm 'foo'>"
+    == Right (HtmlDocument UTF8 (Just (DocType "html" (System "foo") NoInternalSubset)) [])
+
+caseInsDoctype2 :: Bool
+caseInsDoctype2 = parseHTML "" "<!dOcTyPe html PuBlIc 'foo' 'bar'>"
+    == Right (HtmlDocument UTF8 (Just (DocType "html" (Public "foo" "bar") NoInternalSubset)) [])
+
+voidElem :: Bool
+voidElem      = parseHTML "" "<img>"
+    == Right (HtmlDocument UTF8 Nothing [Element "img" [] []])
+
+voidEmptyElem :: Bool
+voidEmptyElem = parseHTML "" "<img/>"
+    == Right (HtmlDocument UTF8 Nothing [Element "img" [] []])
+
+rawTextElem :: Bool
+rawTextElem   = parseHTML "" "<script>This<is'\"a]]>test&amp;</script>"
+    == Right (HtmlDocument UTF8 Nothing [Element "script" [] [
+                    TextNode "This<is'\"a]]>test&amp;"]
+                    ])
+
+rcdataElem :: Bool
+rcdataElem    = parseHTML "" "<textarea>This<is>'\"a]]>test&amp;</textarea>"
+    == Right (HtmlDocument UTF8 Nothing [Element "textarea" [] [
+                    TextNode "This<is>'\"a]]>test&"]
+                    ])
+
+endTagCase :: Bool
+endTagCase    = parseHTML "" "<testing></TeStInG>"
+    == Right (HtmlDocument UTF8 Nothing [Element "testing" [] []])
+
+hexEntityCap :: Bool
+hexEntityCap  = parseHTML "" "&#X6a;"
+    == Right (HtmlDocument UTF8 Nothing [TextNode "\x6a"])
+
+laxAttrName :: Bool
+laxAttrName   = parseHTML "" "<test val<fun=\"test\"></test>"
+    == Right (HtmlDocument UTF8 Nothing [Element "test" [("val<fun", "test")] []])
+
+badAttrName :: Assertion
+badAttrName = do
+    assertBool "attr name 0"  $ not $
+        isLeft $ parseHTML "" (T.encodeUtf8 "<foo attr/>")
+    assertBool "attr name 1"  $
+        isLeft $ parseHTML "" (T.encodeUtf8 "<foo \x0002\&ttr/>")
+    assertBool "attr name 2"  $
+        isLeft $ parseHTML "" (T.encodeUtf8 "<foo \x000F\&ttr/>")
+    assertBool "attr name 3"  $
+        isLeft $ parseHTML "" (T.encodeUtf8 "<foo \x007F\&ttr/>")
+    assertBool "attr name 4"  $
+        isLeft $ parseHTML "" (T.encodeUtf8 "<foo \xFDD0\&ttr/>")
+
+emptyAttr :: Bool
+emptyAttr     = parseHTML "" "<test attr></test>"
+    == Right (HtmlDocument UTF8 Nothing [Element "test" [("attr", "")] []])
+
+unquotedAttr :: Bool
+unquotedAttr  = parseHTML "" "<test attr=you&amp;me></test>"
+    == Right (HtmlDocument UTF8 Nothing [Element "test" [("attr", "you&me")] []])
+
+laxAttrVal :: Bool
+laxAttrVal    = parseHTML "" "<test attr=\"a &amp; d < b & c\"/>"
+    == Right (HtmlDocument UTF8 Nothing [Element "test" [("attr", "a & d < b & c")] []])
+
+ampersandInText :: Bool
+ampersandInText   = parseHTML "" "&#X6a"
+    == Right (HtmlDocument UTF8 Nothing [TextNode "&#X6a"])
+
+omitOptionalEnds :: Bool
+omitOptionalEnds   = parseHTML "" "<html><body><p></html>"
+    == Right (HtmlDocument UTF8 Nothing [Element "html" [] [
+                Element "body" [] [ Element "p" [] []]]])
+
+omitEndHEAD :: Bool
+omitEndHEAD   = parseHTML "" "<head><body>"
+    == Right (HtmlDocument UTF8 Nothing [Element "head" [] [], Element "body" [] []])
+
+omitEndLI :: Bool
+omitEndLI     = parseHTML "" "<li><li>"
+    == Right (HtmlDocument UTF8 Nothing [Element "li" [] [], Element "li" [] []])
+
+omitEndDT :: Bool
+omitEndDT     = parseHTML "" "<dt><dd>"
+    == Right (HtmlDocument UTF8 Nothing [Element "dt" [] [], Element "dd" [] []])
+
+omitEndDD :: Bool
+omitEndDD     = parseHTML "" "<dd><dt>"
+    == Right (HtmlDocument UTF8 Nothing [Element "dd" [] [], Element "dt" [] []])
+
+omitEndP :: Bool
+omitEndP      = parseHTML "" "<p><h1></h1>"
+    == Right (HtmlDocument UTF8 Nothing [Element "p" [] [], Element "h1" [] []])
+
+omitEndRT :: Bool
+omitEndRT     = parseHTML "" "<rt><rp>"
+    == Right (HtmlDocument UTF8 Nothing [Element "rt" [] [], Element "rp" [] []])
+
+omitEndRP :: Bool
+omitEndRP     = parseHTML "" "<rp><rt>"
+    == Right (HtmlDocument UTF8 Nothing [Element "rp" [] [], Element "rt" [] []])
+
+omitEndOPTGRP :: Bool
+omitEndOPTGRP = parseHTML "" "<optgroup><optgroup>"
+    == Right (HtmlDocument UTF8 Nothing [Element "optgroup" [] [], Element "optgroup" [] []])
+
+omitEndOPTION :: Bool
+omitEndOPTION = parseHTML "" "<option><option>"
+    == Right (HtmlDocument UTF8 Nothing [Element "option" [] [], Element "option" [] []])
+
+omitEndCOLGRP :: Bool
+omitEndCOLGRP = parseHTML "" "<colgroup><tbody>"
+    == Right (HtmlDocument UTF8 Nothing [Element "colgroup" [] [], Element "tbody" [] []])
+
+omitEndTHEAD :: Bool
+omitEndTHEAD  = parseHTML "" "<thead><tbody>"
+    == Right (HtmlDocument UTF8 Nothing [Element "thead" [] [], Element "tbody" [] []])
+
+omitEndTBODY :: Bool
+omitEndTBODY  = parseHTML "" "<tbody><thead>"
+    == Right (HtmlDocument UTF8 Nothing [Element "tbody" [] [], Element "thead" [] []])
+
+omitEndTFOOT :: Bool
+omitEndTFOOT  = parseHTML "" "<tfoot><tbody>"
+    == Right (HtmlDocument UTF8 Nothing [Element "tfoot" [] [], Element "tbody" [] []])
+
+omitEndTR :: Bool
+omitEndTR     = parseHTML "" "<tr><tr>"
+    == Right (HtmlDocument UTF8 Nothing [Element "tr" [] [], Element "tr" [] []])
+
+omitEndTD :: Bool
+omitEndTD     = parseHTML "" "<td><td>"
+    == Right (HtmlDocument UTF8 Nothing [Element "td" [] [], Element "td" [] []])
+
+omitEndTH :: Bool
+omitEndTH     = parseHTML "" "<th><td>"
+    == Right (HtmlDocument UTF8 Nothing [Element "th" [] [], Element "td" [] []])
+
+testNewRefs :: Bool
+testNewRefs   = parseHTML "" "&CenterDot;&doublebarwedge;&fjlig;"
+    == Right (HtmlDocument UTF8 Nothing [TextNode "\x000B7\x02306\&fj"])
+
+
+------------------------------------------------------------------------------
+-- XML Rendering Tests -------------------------------------------------------
+------------------------------------------------------------------------------
+
+xmlRenderingTests :: [Test]
+xmlRenderingTests = [
+    testIt "renderByteOrderMark    " renderByteOrderMark,
+    testIt "renderByteOrderMarkLE  " renderByteOrderMarkLE,
+    testIt "singleQuoteInSysID     " singleQuoteInSysID,
+    testIt "doubleQuoteInSysID     " doubleQuoteInSysID,
+    testIt "bothQuotesInSysID      " bothQuotesInSysID,
+    testIt "doubleQuoteInPubID     " doubleQuoteInPubID,
+    testIt "doubleDashInComment    " doubleDashInComment,
+    testIt "trailingDashInComment  " trailingDashInComment,
+    testIt "renderEmptyText        " renderEmptyText,
+    testIt "singleQuoteInAttr      " singleQuoteInAttr,
+    testIt "doubleQuoteInAttr      " doubleQuoteInAttr,
+    testIt "bothQuotesInAttr       " bothQuotesInAttr
+    ]
+
+renderByteOrderMark :: Bool
+renderByteOrderMark =
+    toByteString (render (XmlDocument UTF16BE Nothing []))
+    == T.encodeUtf16BE "\xFEFF<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n"
+
+renderByteOrderMarkLE :: Bool
+renderByteOrderMarkLE =
+    toByteString (render (XmlDocument UTF16LE Nothing []))
+    == T.encodeUtf16LE "\xFEFF<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n"
+
+-- (Appears at the beginning of all XML output)
+utf8Decl :: ByteString
+utf8Decl = T.encodeUtf8 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+
+singleQuoteInSysID :: Bool
+singleQuoteInSysID =
+    toByteString (render (XmlDocument UTF8
+        (Just (DocType "html" (System "test\'ing") NoInternalSubset))
+        []))
+    == utf8Decl `B.append` "<!DOCTYPE html SYSTEM \"test\'ing\">"
+
+doubleQuoteInSysID :: Bool
+doubleQuoteInSysID =
+    toByteString (render (XmlDocument UTF8
+        (Just (DocType "html" (System "test\"ing") NoInternalSubset))
+        []))
+    == utf8Decl `B.append` "<!DOCTYPE html SYSTEM \'test\"ing\'>"
+
+bothQuotesInSysID :: Bool
+bothQuotesInSysID = isBottom $
+    toByteString (render (XmlDocument UTF8
+        (Just (DocType "html" (System "test\"\'ing") NoInternalSubset))
+        []))
+
+doubleQuoteInPubID :: Bool
+doubleQuoteInPubID = isBottom $
+    toByteString (render (XmlDocument UTF8
+        (Just (DocType "html" (Public "test\"ing" "foo") NoInternalSubset))
+        []))
+
+doubleDashInComment :: Bool
+doubleDashInComment = isBottom $
+    toByteString (render (XmlDocument UTF8 Nothing [
+        Comment "test--ing"
+        ]))
+
+trailingDashInComment :: Bool
+trailingDashInComment = isBottom $
+    toByteString (render (XmlDocument UTF8 Nothing [
+        Comment "testing-"
+        ]))
+
+renderEmptyText :: Bool
+renderEmptyText =
+    toByteString (render (XmlDocument UTF8 Nothing [
+        TextNode ""
+        ]))
+    == utf8Decl
+
+singleQuoteInAttr :: Bool
+singleQuoteInAttr =
+    toByteString (render (XmlDocument UTF8 Nothing [
+        Element "foo" [("bar", "test\'ing")] []
+        ]))
+    == utf8Decl `B.append` "<foo bar=\"test\'ing\"/>"
+
+doubleQuoteInAttr :: Bool
+doubleQuoteInAttr =
+    toByteString (render (XmlDocument UTF8 Nothing [
+        Element "foo" [("bar", "test\"ing")] []
+        ]))
+    == utf8Decl `B.append` "<foo bar=\'test\"ing\'/>"
+
+bothQuotesInAttr :: Bool
+bothQuotesInAttr =
+    toByteString (render (XmlDocument UTF8 Nothing [
+        Element "foo" [("bar", "test\'\"ing")] []
+        ]))
+    == utf8Decl `B.append` "<foo bar=\"test\'&quot;ing\"/>"
+
+
+------------------------------------------------------------------------------
+-- HTML Repeats of XML Rendering Tests ---------------------------------------
+------------------------------------------------------------------------------
+
+htmlXMLRenderingTests :: [Test]
+htmlXMLRenderingTests = [
+    testIt "hRenderByteOrderMark   " hRenderByteOrderMark,
+    testIt "hSingleQuoteInSysID    " hSingleQuoteInSysID,
+    testIt "hDoubleQuoteInSysID    " hDoubleQuoteInSysID,
+    testIt "hBothQuotesInSysID     " hBothQuotesInSysID,
+    testIt "hDoubleQuoteInPubID    " hDoubleQuoteInPubID,
+    testIt "hDoubleDashInComment   " hDoubleDashInComment,
+    testIt "hTrailingDashInComment " hTrailingDashInComment,
+    testIt "hRenderEmptyText       " hRenderEmptyText,
+    testIt "hSingleQuoteInAttr     " hSingleQuoteInAttr,
+    testIt "hDoubleQuoteInAttr     " hDoubleQuoteInAttr,
+    testIt "hBothQuotesInAttr      " hBothQuotesInAttr
+    ]
+
+hRenderByteOrderMark :: Bool
+hRenderByteOrderMark =
+    toByteString (render (HtmlDocument UTF16BE Nothing []))
+    == "\xFE\xFF"
+
+hSingleQuoteInSysID :: Bool
+hSingleQuoteInSysID =
+    toByteString (render (HtmlDocument UTF8
+        (Just (DocType "html" (System "test\'ing") NoInternalSubset))
+        []))
+    == "<!DOCTYPE html SYSTEM \"test\'ing\">"
+
+hDoubleQuoteInSysID :: Bool
+hDoubleQuoteInSysID =
+    toByteString (render (HtmlDocument UTF8
+        (Just (DocType "html" (System "test\"ing") NoInternalSubset))
+        []))
+    == "<!DOCTYPE html SYSTEM \'test\"ing\'>"
+
+hBothQuotesInSysID :: Bool
+hBothQuotesInSysID = isBottom $
+    toByteString (render (HtmlDocument UTF8
+        (Just (DocType "html" (System "test\"\'ing") NoInternalSubset))
+        []))
+
+hDoubleQuoteInPubID :: Bool
+hDoubleQuoteInPubID = isBottom $
+    toByteString (render (HtmlDocument UTF8
+        (Just (DocType "html" (Public "test\"ing" "foo") NoInternalSubset))
+        []))
+
+hDoubleDashInComment :: Bool
+hDoubleDashInComment = isBottom $
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Comment "test--ing"
+        ]))
+
+hTrailingDashInComment :: Bool
+hTrailingDashInComment = isBottom $
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Comment "testing-"
+        ]))
+
+hRenderEmptyText :: Bool
+hRenderEmptyText =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        TextNode ""
+        ]))
+    == ""
+
+hSingleQuoteInAttr :: Bool
+hSingleQuoteInAttr =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "foo" [("bar", "test\'ing")] []
+        ]))
+    == "<foo bar=\"test\'ing\"></foo>"
+
+hDoubleQuoteInAttr :: Bool
+hDoubleQuoteInAttr =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "foo" [("bar", "test\"ing")] []
+        ]))
+    == "<foo bar=\'test\"ing\'></foo>"
+
+hBothQuotesInAttr :: Bool
+hBothQuotesInAttr =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "foo" [("bar", "test\'\"ing")] []
+        ]))
+    == "<foo bar=\"test\'&quot;ing\"></foo>"
+
+
+------------------------------------------------------------------------------
+-- HTML Quirks Rendering Tests -----------------------------------------------
+------------------------------------------------------------------------------
+
+htmlRenderingQuirkTests :: [Test]
+htmlRenderingQuirkTests = [
+    testIt "renderHTMLVoid         " renderHTMLVoid,
+    testIt "renderHTMLVoid2        " renderHTMLVoid2,
+    testIt "renderHTMLRaw          " renderHTMLRaw,
+    testIt "renderHTMLRawMult      " renderHTMLRawMult,
+    testIt "renderHTMLRaw2         " renderHTMLRaw2,
+    testIt "renderHTMLRaw3         " renderHTMLRaw3,
+    testIt "renderHTMLRaw4         " renderHTMLRaw4,
+    testIt "renderHTMLRcdata       " renderHTMLRcdata,
+    testIt "renderHTMLRcdataMult   " renderHTMLRcdataMult,
+    testIt "renderHTMLRcdata2      " renderHTMLRcdata2,
+    testIt "renderHTMLAmpAttr1     " renderHTMLAmpAttr1,
+    testIt "renderHTMLAmpAttr2     " renderHTMLAmpAttr2,
+    testIt "renderHTMLAmpAttr3     " renderHTMLAmpAttr3
+    ]
+
+renderHTMLVoid :: Bool
+renderHTMLVoid =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "img" [("src", "foo")] []
+        ]))
+    == "<img src=\'foo\' />"
+
+renderHTMLVoid2 :: Bool
+renderHTMLVoid2 = isBottom $
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "img" [] [TextNode "foo"]
+        ]))
+
+renderHTMLRaw :: Bool
+renderHTMLRaw =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "script" [("type", "text/javascript")] [
+            TextNode "<testing>/&+</foo>"
+            ]
+        ]))
+    == "<script type=\'text/javascript\'><testing>/&+</foo></script>"
+
+renderHTMLRawMult :: Bool
+renderHTMLRawMult =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "script" [("type", "text/javascript")] [
+            TextNode "foo",
+            TextNode "bar"
+            ]
+        ]))
+    == "<script type=\'text/javascript\'>foobar</script>"
+
+renderHTMLRaw2 :: Bool
+renderHTMLRaw2 = isBottom $
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "script" [("type", "text/javascript")] [
+            TextNode "</script>"
+            ]
+        ]))
+
+renderHTMLRaw3 :: Bool
+renderHTMLRaw3 = isBottom $
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "script" [("type", "text/javascript")] [
+            Comment "foo"
+            ]
+        ]))
+
+renderHTMLRaw4 :: Bool
+renderHTMLRaw4 = isBottom $
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "script" [("type", "text/javascript")] [
+            TextNode "</scri",
+            TextNode "pt>"
+            ]
+        ]))
+
+renderHTMLRcdata :: Bool
+renderHTMLRcdata =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "title" [("foo", "bar")] [
+            TextNode "<testing>/&+</&quot;>"
+            ]
+        ]))
+    == "<title foo=\'bar\'>&lt;testing>/&+&lt;/&amp;quot;></title>"
+
+renderHTMLRcdataMult :: Bool
+renderHTMLRcdataMult =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "title" [] [
+            TextNode "foo",
+            TextNode "bar"
+            ]
+        ]))
+    == "<title>foobar</title>"
+
+renderHTMLRcdata2 :: Bool
+renderHTMLRcdata2 = isBottom $
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "title" [] [
+            Comment "foo"
+            ]
+        ]))
+
+renderHTMLAmpAttr1 :: Bool
+renderHTMLAmpAttr1 =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "body" [("foo", "a & b")] [] ]))
+    == "<body foo=\'a & b\'></body>"
+
+renderHTMLAmpAttr2 :: Bool
+renderHTMLAmpAttr2 =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "body" [("foo", "a &amp; b")] [] ]))
+    == "<body foo=\'a &amp;amp; b\'></body>"
+
+renderHTMLAmpAttr3 :: Bool
+renderHTMLAmpAttr3 =
+    toByteString (render (HtmlDocument UTF8 Nothing [
+        Element "body" [("foo", "a &#x65; b")] [] ]))
+    == "<body foo=\'a &amp;#x65; b\'></body>"
+
+
+------------------------------------------------------------------------------
+-- Tests of rendering from the blaze-html package ----------------------------
+------------------------------------------------------------------------------
+
+blazeRenderTests :: [Test]
+blazeRenderTests = [
+    testIt   "blazeTestString        " blazeTestString,
+    testIt   "blazeTestText          " blazeTestText,
+    testIt   "blazeTestBS            " blazeTestBS,
+    testIt   "blazeTestPre           " blazeTestPre,
+    testIt   "blazeTestExternal      " blazeTestExternal,
+    testIt   "blazeTestCustom        " blazeTestCustom,
+    testIt   "blazeTestMulti         " blazeTestMulti,
+    testIt   "blazeTestEmpty         " blazeTestEmpty
+    ]
+
+blazeTestIsString :: (IsString t1, IsString t) =>
+     (t -> AttributeValue) -> (t1 -> Html) -> Bool
+blazeTestIsString valFunc tagFunc = renderHtml html == result
+  where
+    html = H.div ! A.class_ (valFunc "foo") $ tagFunc "hello world"
+    result = HtmlDocument UTF8 Nothing [Element "div" [("class", "foo")] [TextNode "hello world"]]
+
+blazeTestString :: Bool
+blazeTestString = blazeTestIsString H.stringValue H.string
+
+blazeTestText :: Bool
+blazeTestText = blazeTestIsString H.textValue H.text
+
+blazeTestBS :: Bool
+blazeTestBS = blazeTestIsString H.unsafeByteStringValue H.unsafeByteString
+
+blazeTestPre :: Bool
+blazeTestPre = blazeTestIsString H.preEscapedStringValue H.preEscapedString
+
+blazeTestExternal :: Bool
+blazeTestExternal = renderHtml html == result
+  where
+    html = do
+        H.script $ H.string "alert('hello world');"
+    result = HtmlDocument UTF8 Nothing [Element "script" [] [TextNode "alert('hello world');"]]
+
+blazeTestCustom :: Bool
+blazeTestCustom = renderHtml html == result
+  where
+    html = do
+        H.select ! H.customAttribute "dojoType" (mappend "select " "this") $ "foo"
+    result = HtmlDocument UTF8 Nothing [Element "select" [("dojoType", "select this")] [TextNode "foo"]]
+
+blazeTestMulti :: Bool
+blazeTestMulti = renderHtml (selectCustom `mappend` html) == result
+  where
+    html = do
+        H.link ! A.rel "stylesheet"
+    result = HtmlDocument UTF8 Nothing
+        [ Element "select" [("dojoType", "select")] [TextNode "foo ", TextNode "bar"]
+        , Element "link" [("rel", "stylesheet")] []
+        ]
+
+blazeTestEmpty :: Bool
+blazeTestEmpty = renderHtml mempty == HtmlDocument UTF8 Nothing []
+
+selectCustom :: Html
+selectCustom = H.select ! H.customAttribute "dojoType" "select" $ (mappend "foo " "bar")
+
+
+
diff --git a/test/xmlhtml-testsuite.cabal b/test/xmlhtml-testsuite.cabal
new file mode 100644
--- /dev/null
+++ b/test/xmlhtml-testsuite.cabal
@@ -0,0 +1,26 @@
+name:           xmlhtml-testsuite
+version:        0.1.1
+build-type:     Simple
+cabal-version:  >= 1.6
+
+Executable testsuite
+  hs-source-dirs:  ../src suite
+  main-is:         TestSuite.hs
+
+  build-depends:
+    HUnit == 1.2.*,
+    directory == 1.0.*,
+    QuickCheck >= 2.3.0.2,
+    base == 4.*,
+    blaze-builder == 0.2.*,
+    blaze-html == 0.3.*,
+    bytestring == 0.9.*,
+    containers >= 0.3 && <0.5,
+    parsec >= 3.0 && < 3.2,
+    test-framework >= 0.3.1 && <0.4,
+    test-framework-hunit >= 0.2.5 && <0.3,
+    test-framework-quickcheck2 >= 0.2.6 && < 0.3,
+    text >= 0.10 && < 0.12
+    
+  ghc-options: -O2 -Wall -fhpc -fwarn-tabs -funbox-strict-fields -threaded
+               -fno-warn-unused-do-bind
diff --git a/xmlhtml.cabal b/xmlhtml.cabal
--- a/xmlhtml.cabal
+++ b/xmlhtml.cabal
@@ -1,5 +1,5 @@
 Name:                xmlhtml
-Version:             0.1
+Version:             0.1.0.1
 Synopsis:            XML parser and renderer with HTML 5 quirks mode
 Description:         Contains renderers and parsers for both XML and HTML 5
                      document fragments, which share data structures wo that
@@ -28,6 +28,777 @@
 Build-type:          Simple
 Cabal-version:       >=1.6
 
+Extra-source-files:
+             .ghci,
+             extra/haddock.css,
+             extra/hscolour.css,
+             extra/logo.gif,
+             haddock.sh,
+             README,
+             test/runTestsAndCoverage.sh,
+             test/xmlhtml-testsuite.cabal,
+             test/suite/TestSuite.hs
+             test/suite/Text/XmlHtml/CursorTests.hs,
+             test/suite/Text/XmlHtml/DocumentTests.hs,
+             test/suite/Text/XmlHtml/OASISTest.hs,
+             test/suite/Text/XmlHtml/TestCommon.hs,
+             test/suite/Text/XmlHtml/Tests.hs,
+             test/resources/ibm/ibm_oasis_invalid.xml,
+             test/resources/ibm/ibm_oasis_not-wf.xml,
+             test/resources/ibm/ibm_oasis_readme.txt,
+             test/resources/ibm/ibm_oasis_valid.xml,
+             test/resources/ibm/invalid/P28/ibm28i01.xml,
+             test/resources/ibm/invalid/P28/out/ibm28i01.xml,
+             test/resources/ibm/invalid/P29/ibm29i01.dtd,
+             test/resources/ibm/invalid/P29/ibm29i01.xml,
+             test/resources/ibm/invalid/P29/ibm29i01.xml.incorrect,
+             test/resources/ibm/invalid/P29/out/ibm29i01.xml,
+             test/resources/ibm/invalid/P32/ibm32i01.dtd,
+             test/resources/ibm/invalid/P32/ibm32i01.xml,
+             test/resources/ibm/invalid/P32/ibm32i02.dtd,
+             test/resources/ibm/invalid/P32/ibm32i02.xml,
+             test/resources/ibm/invalid/P32/ibm32i02.xml.incorrect,
+             test/resources/ibm/invalid/P32/ibm32i03.dtd,
+             test/resources/ibm/invalid/P32/ibm32i03.xml,
+             test/resources/ibm/invalid/P32/ibm32i04.dtd,
+             test/resources/ibm/invalid/P32/ibm32i04.xml,
+             test/resources/ibm/invalid/P32/out/ibm32i01.xml,
+             test/resources/ibm/invalid/P32/out/ibm32i02.xml,
+             test/resources/ibm/invalid/P32/out/ibm32i03.xml,
+             test/resources/ibm/invalid/P32/out/ibm32i04.xml,
+             test/resources/ibm/invalid/P39/ibm39i01.xml,
+             test/resources/ibm/invalid/P39/ibm39i02.xml,
+             test/resources/ibm/invalid/P39/ibm39i03.xml,
+             test/resources/ibm/invalid/P39/ibm39i04.xml,
+             test/resources/ibm/invalid/P39/out/ibm39i01.xml,
+             test/resources/ibm/invalid/P39/out/ibm39i02.xml,
+             test/resources/ibm/invalid/P39/out/ibm39i03.xml,
+             test/resources/ibm/invalid/P39/out/ibm39i04.xml,
+             test/resources/ibm/invalid/P41/ibm41i01.xml,
+             test/resources/ibm/invalid/P41/ibm41i02.xml,
+             test/resources/ibm/invalid/P41/out/ibm41i01.xml,
+             test/resources/ibm/invalid/P41/out/ibm41i02.xml,
+             test/resources/ibm/invalid/P45/ibm45i01.xml,
+             test/resources/ibm/invalid/P45/out/ibm45i01.xml,
+             test/resources/ibm/invalid/P49/ibm49i01.dtd,
+             test/resources/ibm/invalid/P49/ibm49i01.xml,
+             test/resources/ibm/invalid/P49/ibm49i02.xml,
+             test/resources/ibm/invalid/P49/out/ibm49i01.xml,
+             test/resources/ibm/invalid/P49/out/ibm49i02.xml,
+             test/resources/ibm/invalid/P50/ibm50i01.dtd,
+             test/resources/ibm/invalid/P50/ibm50i01.xml,
+             test/resources/ibm/invalid/P50/out/ibm50i01.xml,
+             test/resources/ibm/invalid/P51/ibm51i01.dtd,
+             test/resources/ibm/invalid/P51/ibm51i01.xml,
+             test/resources/ibm/invalid/P51/ibm51i03.dtd,
+             test/resources/ibm/invalid/P51/ibm51i03.xml,
+             test/resources/ibm/invalid/P51/out/ibm51i01.xml,
+             test/resources/ibm/invalid/P51/out/ibm51i02.xml,
+             test/resources/ibm/invalid/P51/out/ibm51i03.xml,
+             test/resources/ibm/invalid/P56/ibm56i01.xml,
+             test/resources/ibm/invalid/P56/ibm56i02.xml,
+             test/resources/ibm/invalid/P56/ibm56i03.xml,
+             test/resources/ibm/invalid/P56/ibm56i05.xml,
+             test/resources/ibm/invalid/P56/ibm56i06.xml,
+             test/resources/ibm/invalid/P56/ibm56i07.xml,
+             test/resources/ibm/invalid/P56/ibm56i08.xml,
+             test/resources/ibm/invalid/P56/ibm56i09.xml,
+             test/resources/ibm/invalid/P56/ibm56i10.xml,
+             test/resources/ibm/invalid/P56/ibm56i11.xml,
+             test/resources/ibm/invalid/P56/ibm56i12.xml,
+             test/resources/ibm/invalid/P56/ibm56i13.xml,
+             test/resources/ibm/invalid/P56/ibm56i14.xml,
+             test/resources/ibm/invalid/P56/ibm56i15.xml,
+             test/resources/ibm/invalid/P56/ibm56i16.xml,
+             test/resources/ibm/invalid/P56/ibm56i17.xml,
+             test/resources/ibm/invalid/P56/ibm56i18.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i01.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i02.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i03.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i05.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i06.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i07.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i08.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i09.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i10.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i11.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i12.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i13.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i14.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i15.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i16.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i17.xml,
+             test/resources/ibm/invalid/P56/out/ibm56i18.xml,
+             test/resources/ibm/invalid/P58/ibm58i01.xml,
+             test/resources/ibm/invalid/P58/ibm58i02.xml,
+             test/resources/ibm/invalid/P58/out/ibm58i01.xml,
+             test/resources/ibm/invalid/P58/out/ibm58i02.xml,
+             test/resources/ibm/invalid/P59/ibm59i01.xml,
+             test/resources/ibm/invalid/P59/out/ibm59i01.xml,
+             test/resources/ibm/invalid/P60/ibm60i01.xml,
+             test/resources/ibm/invalid/P60/ibm60i02.xml,
+             test/resources/ibm/invalid/P60/ibm60i03.xml,
+             test/resources/ibm/invalid/P60/ibm60i04.xml,
+             test/resources/ibm/invalid/P60/out/ibm60i01.xml,
+             test/resources/ibm/invalid/P60/out/ibm60i02.xml,
+             test/resources/ibm/invalid/P60/out/ibm60i03.xml,
+             test/resources/ibm/invalid/P60/out/ibm60i04.xml,
+             test/resources/ibm/invalid/P68/ibm68i01.dtd,
+             test/resources/ibm/invalid/P68/ibm68i01.xml,
+             test/resources/ibm/invalid/P68/ibm68i02.dtd,
+             test/resources/ibm/invalid/P68/ibm68i02.xml,
+             test/resources/ibm/invalid/P68/ibm68i03.ent,
+             test/resources/ibm/invalid/P68/ibm68i03.xml,
+             test/resources/ibm/invalid/P68/ibm68i04.ent,
+             test/resources/ibm/invalid/P68/ibm68i04.xml,
+             test/resources/ibm/invalid/P68/out/ibm68i01.xml,
+             test/resources/ibm/invalid/P68/out/ibm68i02.xml,
+             test/resources/ibm/invalid/P68/out/ibm68i03.xml,
+             test/resources/ibm/invalid/P68/out/ibm68i04.xml,
+             test/resources/ibm/invalid/P69/ibm69i01.dtd,
+             test/resources/ibm/invalid/P69/ibm69i01.xml,
+             test/resources/ibm/invalid/P69/ibm69i02.dtd,
+             test/resources/ibm/invalid/P69/ibm69i02.xml,
+             test/resources/ibm/invalid/P69/ibm69i03.ent,
+             test/resources/ibm/invalid/P69/ibm69i03.xml,
+             test/resources/ibm/invalid/P69/ibm69i04.ent,
+             test/resources/ibm/invalid/P69/ibm69i04.xml,
+             test/resources/ibm/invalid/P69/out/ibm69i01.xml,
+             test/resources/ibm/invalid/P69/out/ibm69i02.xml,
+             test/resources/ibm/invalid/P69/out/ibm69i03.xml,
+             test/resources/ibm/invalid/P69/out/ibm69i04.xml,
+             test/resources/ibm/invalid/P76/ibm76i01.xml,
+             test/resources/ibm/invalid/P76/out/ibm76i01.xml,
+             test/resources/ibm/not-wf/misc/432gewf.xml,
+             test/resources/ibm/not-wf/misc/ltinentval.xml,
+             test/resources/ibm/not-wf/misc/simpleltinentval.xml,
+             test/resources/ibm/not-wf/P01/ibm01n01.xml,
+             test/resources/ibm/not-wf/P01/ibm01n01.xml.correct,
+             test/resources/ibm/not-wf/P01/ibm01n02.xml,
+             test/resources/ibm/not-wf/P01/ibm01n03.xml,
+             test/resources/ibm/not-wf/P01/ibm01n03.xml.correct,
+             test/resources/ibm/not-wf/P02/ibm02n01.xml,
+             test/resources/ibm/not-wf/P02/ibm02n02.xml,
+             test/resources/ibm/not-wf/P02/ibm02n03.xml,
+             test/resources/ibm/not-wf/P02/ibm02n04.xml,
+             test/resources/ibm/not-wf/P02/ibm02n05.xml,
+             test/resources/ibm/not-wf/P02/ibm02n06.xml,
+             test/resources/ibm/not-wf/P02/ibm02n07.xml,
+             test/resources/ibm/not-wf/P02/ibm02n08.xml,
+             test/resources/ibm/not-wf/P02/ibm02n09.xml,
+             test/resources/ibm/not-wf/P02/ibm02n10.xml,
+             test/resources/ibm/not-wf/P02/ibm02n11.xml,
+             test/resources/ibm/not-wf/P02/ibm02n12.xml,
+             test/resources/ibm/not-wf/P02/ibm02n13.xml,
+             test/resources/ibm/not-wf/P02/ibm02n14.xml,
+             test/resources/ibm/not-wf/P02/ibm02n15.xml,
+             test/resources/ibm/not-wf/P02/ibm02n16.xml,
+             test/resources/ibm/not-wf/P02/ibm02n17.xml,
+             test/resources/ibm/not-wf/P02/ibm02n18.xml,
+             test/resources/ibm/not-wf/P02/ibm02n19.xml,
+             test/resources/ibm/not-wf/P02/ibm02n20.xml,
+             test/resources/ibm/not-wf/P02/ibm02n21.xml,
+             test/resources/ibm/not-wf/P02/ibm02n22.xml,
+             test/resources/ibm/not-wf/P02/ibm02n23.xml,
+             test/resources/ibm/not-wf/P02/ibm02n24.xml,
+             test/resources/ibm/not-wf/P02/ibm02n25.xml,
+             test/resources/ibm/not-wf/P02/ibm02n26.xml,
+             test/resources/ibm/not-wf/P02/ibm02n27.xml,
+             test/resources/ibm/not-wf/P02/ibm02n28.xml,
+             test/resources/ibm/not-wf/P02/ibm02n29.xml,
+             test/resources/ibm/not-wf/P02/ibm02n30.xml,
+             test/resources/ibm/not-wf/P02/ibm02n31.xml,
+             test/resources/ibm/not-wf/P02/ibm02n32.xml,
+             test/resources/ibm/not-wf/P02/ibm02n33.xml,
+             test/resources/ibm/not-wf/P03/ibm03n01.xml,
+             test/resources/ibm/not-wf/P04/ibm04n01.xml,
+             test/resources/ibm/not-wf/P04/ibm04n02.xml,
+             test/resources/ibm/not-wf/P04/ibm04n03.xml,
+             test/resources/ibm/not-wf/P04/ibm04n04.xml,
+             test/resources/ibm/not-wf/P04/ibm04n05.xml,
+             test/resources/ibm/not-wf/P04/ibm04n06.xml,
+             test/resources/ibm/not-wf/P04/ibm04n07.xml,
+             test/resources/ibm/not-wf/P04/ibm04n08.xml,
+             test/resources/ibm/not-wf/P04/ibm04n09.xml,
+             test/resources/ibm/not-wf/P04/ibm04n10.xml,
+             test/resources/ibm/not-wf/P04/ibm04n11.xml,
+             test/resources/ibm/not-wf/P04/ibm04n12.xml,
+             test/resources/ibm/not-wf/P04/ibm04n13.xml,
+             test/resources/ibm/not-wf/P04/ibm04n14.xml,
+             test/resources/ibm/not-wf/P04/ibm04n15.xml,
+             test/resources/ibm/not-wf/P04/ibm04n16.xml,
+             test/resources/ibm/not-wf/P04/ibm04n17.xml,
+             test/resources/ibm/not-wf/P04/ibm04n18.xml,
+             test/resources/ibm/not-wf/P05/ibm05n01.xml,
+             test/resources/ibm/not-wf/P05/ibm05n02.xml,
+             test/resources/ibm/not-wf/P05/ibm05n03.xml,
+             test/resources/ibm/not-wf/P05/ibm05n04.xml,
+             test/resources/ibm/not-wf/P05/ibm05n05.xml,
+             test/resources/ibm/not-wf/P10/ibm10n01.xml,
+             test/resources/ibm/not-wf/P10/ibm10n01.xml.html.correct,
+             test/resources/ibm/not-wf/P10/ibm10n02.xml,
+             test/resources/ibm/not-wf/P10/ibm10n02.xml.html.correct,
+             test/resources/ibm/not-wf/P10/ibm10n03.xml,
+             test/resources/ibm/not-wf/P10/ibm10n04.xml,
+             test/resources/ibm/not-wf/P10/ibm10n05.xml,
+             test/resources/ibm/not-wf/P10/ibm10n05.xml.html.correct,
+             test/resources/ibm/not-wf/P10/ibm10n06.xml,
+             test/resources/ibm/not-wf/P10/ibm10n06.xml.html.correct,
+             test/resources/ibm/not-wf/P10/ibm10n07.xml,
+             test/resources/ibm/not-wf/P10/ibm10n08.xml,
+             test/resources/ibm/not-wf/P11/ibm11n01.xml,
+             test/resources/ibm/not-wf/P11/ibm11n02.xml,
+             test/resources/ibm/not-wf/P11/ibm11n03.xml,
+             test/resources/ibm/not-wf/P11/ibm11n04.xml,
+             test/resources/ibm/not-wf/P12/ibm12n01.xml,
+             test/resources/ibm/not-wf/P12/ibm12n02.xml,
+             test/resources/ibm/not-wf/P12/ibm12n03.xml,
+             test/resources/ibm/not-wf/P14/ibm14n01.xml,
+             test/resources/ibm/not-wf/P14/ibm14n01.xml.correct,
+             test/resources/ibm/not-wf/P14/ibm14n02.xml,
+             test/resources/ibm/not-wf/P14/ibm14n03.xml,
+             test/resources/ibm/not-wf/P14/ibm14n03.xml.html.correct,
+             test/resources/ibm/not-wf/P15/ibm15n01.xml,
+             test/resources/ibm/not-wf/P15/ibm15n02.xml,
+             test/resources/ibm/not-wf/P15/ibm15n03.xml,
+             test/resources/ibm/not-wf/P15/ibm15n04.xml,
+             test/resources/ibm/not-wf/P16/ibm16n01.xml,
+             test/resources/ibm/not-wf/P16/ibm16n01.xml.correct,
+             test/resources/ibm/not-wf/P16/ibm16n02.xml,
+             test/resources/ibm/not-wf/P16/ibm16n03.xml,
+             test/resources/ibm/not-wf/P16/ibm16n04.xml,
+             test/resources/ibm/not-wf/P17/ibm17n01.xml,
+             test/resources/ibm/not-wf/P17/ibm17n02.xml,
+             test/resources/ibm/not-wf/P17/ibm17n03.xml,
+             test/resources/ibm/not-wf/P17/ibm17n04.xml,
+             test/resources/ibm/not-wf/P18/ibm18n01.xml,
+             test/resources/ibm/not-wf/P18/ibm18n02.xml,
+             test/resources/ibm/not-wf/P19/ibm19n01.xml,
+             test/resources/ibm/not-wf/P19/ibm19n02.xml,
+             test/resources/ibm/not-wf/P19/ibm19n03.xml,
+             test/resources/ibm/not-wf/P20/ibm20n01.xml,
+             test/resources/ibm/not-wf/P21/ibm21n01.xml,
+             test/resources/ibm/not-wf/P21/ibm21n02.xml,
+             test/resources/ibm/not-wf/P21/ibm21n03.xml,
+             test/resources/ibm/not-wf/P22/ibm22n01.xml,
+             test/resources/ibm/not-wf/P22/ibm22n02.xml,
+             test/resources/ibm/not-wf/P22/ibm22n03.xml,
+             test/resources/ibm/not-wf/P23/ibm23n01.xml,
+             test/resources/ibm/not-wf/P23/ibm23n02.xml,
+             test/resources/ibm/not-wf/P23/ibm23n03.xml,
+             test/resources/ibm/not-wf/P23/ibm23n04.xml,
+             test/resources/ibm/not-wf/P23/ibm23n05.xml,
+             test/resources/ibm/not-wf/P23/ibm23n06.xml,
+             test/resources/ibm/not-wf/P24/ibm24n01.xml,
+             test/resources/ibm/not-wf/P24/ibm24n02.xml,
+             test/resources/ibm/not-wf/P24/ibm24n03.xml,
+             test/resources/ibm/not-wf/P24/ibm24n04.xml,
+             test/resources/ibm/not-wf/P24/ibm24n05.xml,
+             test/resources/ibm/not-wf/P24/ibm24n06.xml,
+             test/resources/ibm/not-wf/P24/ibm24n07.xml,
+             test/resources/ibm/not-wf/P24/ibm24n08.xml,
+             test/resources/ibm/not-wf/P24/ibm24n09.xml,
+             test/resources/ibm/not-wf/P25/ibm25n01.xml,
+             test/resources/ibm/not-wf/P25/ibm25n02.xml,
+             test/resources/ibm/not-wf/P26/ibm26n01.xml,
+             test/resources/ibm/not-wf/P27/ibm27n01.xml,
+             test/resources/ibm/not-wf/P28/ibm28n01.dtd,
+             test/resources/ibm/not-wf/P28/ibm28n01.xml,
+             test/resources/ibm/not-wf/P28/ibm28n02.xml,
+             test/resources/ibm/not-wf/P28/ibm28n03.xml,
+             test/resources/ibm/not-wf/P28/ibm28n04.xml,
+             test/resources/ibm/not-wf/P28/ibm28n05.xml,
+             test/resources/ibm/not-wf/P28/ibm28n05.xml.html.correct,
+             test/resources/ibm/not-wf/P28/ibm28n06.xml,
+             test/resources/ibm/not-wf/P28/ibm28n07.xml,
+             test/resources/ibm/not-wf/P28/ibm28n08.xml,
+             test/resources/ibm/not-wf/P30/ibm30n01.dtd,
+             test/resources/ibm/not-wf/P30/ibm30n01.xml,
+             test/resources/ibm/not-wf/P30/ibm30n01.xml.correct,
+             test/resources/ibm/not-wf/P31/ibm31n01.dtd,
+             test/resources/ibm/not-wf/P31/ibm31n01.xml,
+             test/resources/ibm/not-wf/P31/ibm31n01.xml.correct,
+             test/resources/ibm/not-wf/P32/ibm32n01.xml,
+             test/resources/ibm/not-wf/P32/ibm32n02.xml,
+             test/resources/ibm/not-wf/P32/ibm32n03.xml,
+             test/resources/ibm/not-wf/P32/ibm32n04.xml,
+             test/resources/ibm/not-wf/P32/ibm32n05.xml,
+             test/resources/ibm/not-wf/P32/ibm32n06.dtd,
+             test/resources/ibm/not-wf/P32/ibm32n06.xml,
+             test/resources/ibm/not-wf/P32/ibm32n07.xml,
+             test/resources/ibm/not-wf/P32/ibm32n08.xml,
+             test/resources/ibm/not-wf/P39/ibm39n01.xml,
+             test/resources/ibm/not-wf/P39/ibm39n02.xml,
+             test/resources/ibm/not-wf/P39/ibm39n03.xml,
+             test/resources/ibm/not-wf/P39/ibm39n04.xml,
+             test/resources/ibm/not-wf/P39/ibm39n05.xml,
+             test/resources/ibm/not-wf/P39/ibm39n06.xml,
+             test/resources/ibm/not-wf/P39/ibm39n06.xml.correct,
+             test/resources/ibm/not-wf/P40/ibm40n01.xml,
+             test/resources/ibm/not-wf/P40/ibm40n02.xml,
+             test/resources/ibm/not-wf/P40/ibm40n03.xml,
+             test/resources/ibm/not-wf/P40/ibm40n04.xml,
+             test/resources/ibm/not-wf/P40/ibm40n05.xml,
+             test/resources/ibm/not-wf/P41/ibm41n.ent,
+             test/resources/ibm/not-wf/P41/ibm41n01.xml,
+             test/resources/ibm/not-wf/P41/ibm41n02.xml,
+             test/resources/ibm/not-wf/P41/ibm41n03.xml,
+             test/resources/ibm/not-wf/P41/ibm41n04.xml,
+             test/resources/ibm/not-wf/P41/ibm41n05.xml,
+             test/resources/ibm/not-wf/P41/ibm41n05.xml.html.correct,
+             test/resources/ibm/not-wf/P41/ibm41n06.xml,
+             test/resources/ibm/not-wf/P41/ibm41n07.xml,
+             test/resources/ibm/not-wf/P41/ibm41n08.xml,
+             test/resources/ibm/not-wf/P41/ibm41n09.xml,
+             test/resources/ibm/not-wf/P41/ibm41n10.ent,
+             test/resources/ibm/not-wf/P41/ibm41n10.xml,
+             test/resources/ibm/not-wf/P42/ibm42n01.xml,
+             test/resources/ibm/not-wf/P42/ibm42n02.xml,
+             test/resources/ibm/not-wf/P42/ibm42n03.xml,
+             test/resources/ibm/not-wf/P42/ibm42n04.xml,
+             test/resources/ibm/not-wf/P42/ibm42n05.xml,
+             test/resources/ibm/not-wf/P43/ibm43n01.xml,
+             test/resources/ibm/not-wf/P43/ibm43n02.xml,
+             test/resources/ibm/not-wf/P43/ibm43n04.xml,
+             test/resources/ibm/not-wf/P43/ibm43n05.xml,
+             test/resources/ibm/not-wf/P44/ibm44n01.xml,
+             test/resources/ibm/not-wf/P44/ibm44n02.xml,
+             test/resources/ibm/not-wf/P44/ibm44n03.xml,
+             test/resources/ibm/not-wf/P44/ibm44n04.xml,
+             test/resources/ibm/not-wf/P66/ibm66n01.xml,
+             test/resources/ibm/not-wf/P66/ibm66n01.xml.correct,
+             test/resources/ibm/not-wf/P66/ibm66n02.xml,
+             test/resources/ibm/not-wf/P66/ibm66n02.xml.html.correct,
+             test/resources/ibm/not-wf/P66/ibm66n03.xml,
+             test/resources/ibm/not-wf/P66/ibm66n03.xml.correct,
+             test/resources/ibm/not-wf/P66/ibm66n04.xml,
+             test/resources/ibm/not-wf/P66/ibm66n04.xml.html.correct,
+             test/resources/ibm/not-wf/P66/ibm66n05.xml,
+             test/resources/ibm/not-wf/P66/ibm66n05.xml.correct,
+             test/resources/ibm/not-wf/P66/ibm66n06.xml,
+             test/resources/ibm/not-wf/P66/ibm66n06.xml.html.correct,
+             test/resources/ibm/not-wf/P66/ibm66n07.xml,
+             test/resources/ibm/not-wf/P66/ibm66n07.xml.correct,
+             test/resources/ibm/not-wf/P66/ibm66n08.xml,
+             test/resources/ibm/not-wf/P66/ibm66n08.xml.html.correct,
+             test/resources/ibm/not-wf/P66/ibm66n09.xml,
+             test/resources/ibm/not-wf/P66/ibm66n09.xml.correct,
+             test/resources/ibm/not-wf/P66/ibm66n10.xml,
+             test/resources/ibm/not-wf/P66/ibm66n10.xml.html.correct,
+             test/resources/ibm/not-wf/P66/ibm66n11.xml,
+             test/resources/ibm/not-wf/P66/ibm66n11.xml.correct,
+             test/resources/ibm/not-wf/P66/ibm66n12.xml,
+             test/resources/ibm/not-wf/P66/ibm66n13.xml,
+             test/resources/ibm/not-wf/P66/ibm66n14.xml,
+             test/resources/ibm/not-wf/P66/ibm66n15.xml,
+             test/resources/ibm/not-wf/P68/ibm68n01.xml,
+             test/resources/ibm/not-wf/P68/ibm68n01.xml.html.correct,
+             test/resources/ibm/not-wf/P68/ibm68n02.xml,
+             test/resources/ibm/not-wf/P68/ibm68n02.xml.html.correct,
+             test/resources/ibm/not-wf/P68/ibm68n03.xml,
+             test/resources/ibm/not-wf/P68/ibm68n03.xml.html.correct,
+             test/resources/ibm/not-wf/P68/ibm68n04.xml,
+             test/resources/ibm/not-wf/P68/ibm68n05.xml,
+             test/resources/ibm/not-wf/P68/ibm68n06.dtd,
+             test/resources/ibm/not-wf/P68/ibm68n06.xml,
+             test/resources/ibm/not-wf/P68/ibm68n07.xml,
+             test/resources/ibm/not-wf/P68/ibm68n07.xml.correct,
+             test/resources/ibm/not-wf/P68/ibm68n08.xml,
+             test/resources/ibm/not-wf/P68/ibm68n09.xml,
+             test/resources/ibm/not-wf/P68/ibm68n10.xml,
+             test/resources/ibm/not-wf/P75/empty.dtd,
+             test/resources/ibm/not-wf/P75/ibm75n01.xml,
+             test/resources/ibm/not-wf/P75/ibm75n01.xml.correct,
+             test/resources/ibm/not-wf/P75/ibm75n02.xml,
+             test/resources/ibm/not-wf/P75/ibm75n02.xml.html.correct,
+             test/resources/ibm/not-wf/P75/ibm75n03.xml,
+             test/resources/ibm/not-wf/P75/ibm75n03.xml.html.correct,
+             test/resources/ibm/not-wf/P75/ibm75n04.xml,
+             test/resources/ibm/not-wf/P75/ibm75n05.xml,
+             test/resources/ibm/not-wf/P75/ibm75n05.xml.correct,
+             test/resources/ibm/not-wf/P75/ibm75n06.xml,
+             test/resources/ibm/not-wf/P75/ibm75n06.xml.correct,
+             test/resources/ibm/not-wf/P75/ibm75n07.xml,
+             test/resources/ibm/not-wf/P75/ibm75n08.xml,
+             test/resources/ibm/not-wf/P75/ibm75n09.xml,
+             test/resources/ibm/not-wf/P75/ibm75n10.xml,
+             test/resources/ibm/not-wf/P75/ibm75n11.xml,
+             test/resources/ibm/not-wf/P75/ibm75n12.xml,
+             test/resources/ibm/not-wf/P75/ibm75n12.xml.correct,
+             test/resources/ibm/not-wf/P75/ibm75n13.xml,
+             test/resources/ibm/not-wf/P80/ibm80n01.xml,
+             test/resources/ibm/not-wf/P80/ibm80n02.xml,
+             test/resources/ibm/not-wf/P80/ibm80n03.xml,
+             test/resources/ibm/not-wf/P80/ibm80n04.xml,
+             test/resources/ibm/not-wf/P80/ibm80n05.xml,
+             test/resources/ibm/not-wf/P80/ibm80n06.xml,
+             test/resources/ibm/not-wf/P81/ibm81n01.xml,
+             test/resources/ibm/not-wf/P81/ibm81n02.xml,
+             test/resources/ibm/not-wf/P81/ibm81n03.xml,
+             test/resources/ibm/not-wf/P81/ibm81n04.xml,
+             test/resources/ibm/not-wf/P81/ibm81n05.xml,
+             test/resources/ibm/not-wf/P81/ibm81n06.xml,
+             test/resources/ibm/not-wf/P81/ibm81n07.xml,
+             test/resources/ibm/not-wf/P81/ibm81n08.xml,
+             test/resources/ibm/not-wf/P81/ibm81n09.xml,
+             test/resources/ibm/valid/P01/ibm01v01.xml,
+             test/resources/ibm/valid/P01/out/ibm01v01.xml,
+             test/resources/ibm/valid/P02/ibm02v01.xml,
+             test/resources/ibm/valid/P02/ibm02v01.xml.incorrect,
+             test/resources/ibm/valid/P02/out/ibm02v01.xml,
+             test/resources/ibm/valid/P03/ibm03v01.xml,
+             test/resources/ibm/valid/P03/out/ibm03v01.xml,
+             test/resources/ibm/valid/P11/ibm11v01.xml,
+             test/resources/ibm/valid/P11/ibm11v02.xml,
+             test/resources/ibm/valid/P11/ibm11v03.xml,
+             test/resources/ibm/valid/P11/ibm11v04.xml,
+             test/resources/ibm/valid/P11/out/ibm11v01.xml,
+             test/resources/ibm/valid/P11/out/ibm11v02.xml,
+             test/resources/ibm/valid/P11/out/ibm11v03.xml,
+             test/resources/ibm/valid/P11/out/ibm11v04.xml,
+             test/resources/ibm/valid/P11/student.dtd,
+             test/resources/ibm/valid/P12/ibm12v01.xml,
+             test/resources/ibm/valid/P12/ibm12v02.xml,
+             test/resources/ibm/valid/P12/ibm12v03.xml,
+             test/resources/ibm/valid/P12/ibm12v04.xml,
+             test/resources/ibm/valid/P12/out/ibm12v01.xml,
+             test/resources/ibm/valid/P12/out/ibm12v02.xml,
+             test/resources/ibm/valid/P12/out/ibm12v03.xml,
+             test/resources/ibm/valid/P12/out/ibm12v04.xml,
+             test/resources/ibm/valid/P12/student.dtd,
+             test/resources/ibm/valid/P13/ibm13v01.xml,
+             test/resources/ibm/valid/P13/out/ibm13v01.xml,
+             test/resources/ibm/valid/P13/student.dtd,
+             test/resources/ibm/valid/P14/ibm14v01.xml,
+             test/resources/ibm/valid/P14/ibm14v02.xml,
+             test/resources/ibm/valid/P14/ibm14v03.xml,
+             test/resources/ibm/valid/P14/out/ibm14v01.xml,
+             test/resources/ibm/valid/P14/out/ibm14v02.xml,
+             test/resources/ibm/valid/P14/out/ibm14v03.xml,
+             test/resources/ibm/valid/P15/ibm15v01.xml,
+             test/resources/ibm/valid/P15/ibm15v02.xml,
+             test/resources/ibm/valid/P15/ibm15v03.xml,
+             test/resources/ibm/valid/P15/ibm15v04.xml,
+             test/resources/ibm/valid/P15/out/ibm15v01.xml,
+             test/resources/ibm/valid/P15/out/ibm15v02.xml,
+             test/resources/ibm/valid/P15/out/ibm15v03.xml,
+             test/resources/ibm/valid/P15/out/ibm15v04.xml,
+             test/resources/ibm/valid/P16/ibm16v01.xml,
+             test/resources/ibm/valid/P16/ibm16v02.xml,
+             test/resources/ibm/valid/P16/ibm16v03.xml,
+             test/resources/ibm/valid/P16/out/ibm16v01.xml,
+             test/resources/ibm/valid/P16/out/ibm16v02.xml,
+             test/resources/ibm/valid/P16/out/ibm16v03.xml,
+             test/resources/ibm/valid/P17/ibm17v01.xml,
+             test/resources/ibm/valid/P17/out/ibm17v01.xml,
+             test/resources/ibm/valid/P18/ibm18v01.xml,
+             test/resources/ibm/valid/P18/out/ibm18v01.xml,
+             test/resources/ibm/valid/P19/ibm19v01.xml,
+             test/resources/ibm/valid/P19/out/ibm19v01.xml,
+             test/resources/ibm/valid/P20/ibm20v01.xml,
+             test/resources/ibm/valid/P20/ibm20v02.xml,
+             test/resources/ibm/valid/P20/out/ibm20v01.xml,
+             test/resources/ibm/valid/P20/out/ibm20v02.xml,
+             test/resources/ibm/valid/P21/ibm21v01.xml,
+             test/resources/ibm/valid/P21/out/ibm21v01.xml,
+             test/resources/ibm/valid/P22/ibm22v01.xml,
+             test/resources/ibm/valid/P22/ibm22v02.xml,
+             test/resources/ibm/valid/P22/ibm22v03.xml,
+             test/resources/ibm/valid/P22/ibm22v04.xml,
+             test/resources/ibm/valid/P22/ibm22v05.xml,
+             test/resources/ibm/valid/P22/ibm22v06.xml,
+             test/resources/ibm/valid/P22/ibm22v07.xml,
+             test/resources/ibm/valid/P22/out/ibm22v01.xml,
+             test/resources/ibm/valid/P22/out/ibm22v02.xml,
+             test/resources/ibm/valid/P22/out/ibm22v03.xml,
+             test/resources/ibm/valid/P22/out/ibm22v04.xml,
+             test/resources/ibm/valid/P22/out/ibm22v05.xml,
+             test/resources/ibm/valid/P22/out/ibm22v06.xml,
+             test/resources/ibm/valid/P22/out/ibm22v07.xml,
+             test/resources/ibm/valid/P23/ibm23v01.xml,
+             test/resources/ibm/valid/P23/ibm23v02.xml,
+             test/resources/ibm/valid/P23/ibm23v03.xml,
+             test/resources/ibm/valid/P23/ibm23v04.xml,
+             test/resources/ibm/valid/P23/ibm23v05.xml,
+             test/resources/ibm/valid/P23/ibm23v06.xml,
+             test/resources/ibm/valid/P23/out/ibm23v01.xml,
+             test/resources/ibm/valid/P23/out/ibm23v02.xml,
+             test/resources/ibm/valid/P23/out/ibm23v03.xml,
+             test/resources/ibm/valid/P23/out/ibm23v04.xml,
+             test/resources/ibm/valid/P23/out/ibm23v05.xml,
+             test/resources/ibm/valid/P23/out/ibm23v06.xml,
+             test/resources/oasis/p02fail31.xml,
+             test/resources/oasis/p02fail14.xml,
+             test/resources/oasis/p01fail4.xml,
+             test/resources/oasis/p39fail5.xml,
+             test/resources/oasis/p66fail5.xml,
+             test/resources/oasis/p32pass2.xml,
+             test/resources/oasis/p03fail29.xml,
+             test/resources/oasis/p32pass1.xml,
+             test/resources/oasis/p30pass2.xml,
+             test/resources/oasis/p04fail3.xml,
+             test/resources/oasis/p02fail21.xml,
+             test/resources/oasis/p18fail3.xml,
+             test/resources/oasis/p01fail3.xml,
+             test/resources/oasis/p02fail11.xml,
+             test/resources/oasis/p02fail22.xml,
+             test/resources/oasis/p14fail3.xml.correct,
+             test/resources/oasis/p27pass2.xml,
+             test/resources/oasis/p15fail3.xml,
+             test/resources/oasis/p03fail20.xml,
+             test/resources/oasis/p03fail22.xml,
+             test/resources/oasis/p59pass1.xml,
+             test/resources/oasis/p70pass1.xml,
+             test/resources/oasis/p31pass2.dtd,
+             test/resources/oasis/p16pass3.xml,
+             test/resources/oasis/p03fail13.xml,
+             test/resources/oasis/p22fail2.xml,
+             test/resources/oasis/p23pass4.xml,
+             test/resources/oasis/p44pass2.xml,
+             test/resources/oasis/p02fail26.xml,
+             test/resources/oasis/p42fail2.xml,
+             test/resources/oasis/oasis.xml,
+             test/resources/oasis/p43pass1.xml,
+             test/resources/oasis/p72pass1.xml,
+             test/resources/oasis/p66fail1.xml.html.correct,
+             test/resources/oasis/p64pass1.dtd,
+             test/resources/oasis/p28pass4.xml,
+             test/resources/oasis/p02fail27.xml,
+             test/resources/oasis/p56pass1.xml,
+             test/resources/oasis/p23fail4.xml,
+             test/resources/oasis/p28pass5.dtd,
+             test/resources/oasis/p03fail8.xml,
+             test/resources/oasis/p02fail23.xml,
+             test/resources/oasis/p71pass1.xml,
+             test/resources/oasis/p08fail1.xml,
+             test/resources/oasis/p22pass3.xml,
+             test/resources/oasis/p24pass2.xml,
+             test/resources/oasis/p62pass1.dtd,
+             test/resources/oasis/p23pass1.xml,
+             test/resources/oasis/p40pass2.xml,
+             test/resources/oasis/p02fail16.xml,
+             test/resources/oasis/p43fail3.xml,
+             test/resources/oasis/p29pass1.xml,
+             test/resources/oasis/p05fail5.xml,
+             test/resources/oasis/p22pass1.xml,
+             test/resources/oasis/p44fail2.xml,
+             test/resources/oasis/p73pass1.xml,
+             test/resources/oasis/p31pass1.xml,
+             test/resources/oasis/p03fail26.xml,
+             test/resources/oasis/p26fail2.xml,
+             test/resources/oasis/p18fail3.xml.correct,
+             test/resources/oasis/p03fail21.xml,
+             test/resources/oasis/p28fail1.xml.correct,
+             test/resources/oasis/p22pass5.xml,
+             test/resources/oasis/p39pass2.xml,
+             test/resources/oasis/p55pass1.xml,
+             test/resources/oasis/p39fail2.xml,
+             test/resources/oasis/p24pass1.xml,
+             test/resources/oasis/p44pass3.xml,
+             test/resources/oasis/p15fail1.xml,
+             test/resources/oasis/p10fail2.xml.html.correct,
+             test/resources/oasis/p26pass1.xml,
+             test/resources/oasis/p09pass1.xml,
+             test/resources/oasis/p40fail1.xml,
+             test/resources/oasis/p23fail5.xml,
+             test/resources/oasis/p68fail2.xml.html.correct,
+             test/resources/oasis/p24fail2.xml,
+             test/resources/oasis/p10fail3.xml,
+             test/resources/oasis/p43fail1.xml,
+             test/resources/oasis/p03fail18.xml,
+             test/resources/oasis/p01fail3.xml.correct,
+             test/resources/oasis/p62pass1.xml,
+             test/resources/oasis/p66fail3.xml.html.correct,
+             test/resources/oasis/p44fail1.xml,
+             test/resources/oasis/p03fail11.xml,
+             test/resources/oasis/p02fail6.xml,
+             test/resources/oasis/p28pass3.xml,
+             test/resources/oasis/p25fail1.xml,
+             test/resources/oasis/p14fail2.xml,
+             test/resources/oasis/p68fail2.xml,
+             test/resources/oasis/p06fail1.xml,
+             test/resources/oasis/p01pass2.xml,
+             test/resources/oasis/p01pass1.xml,
+             test/resources/oasis/p41fail2.xml.html.correct,
+             test/resources/oasis/p41pass2.xml,
+             test/resources/oasis/p05fail3.xml,
+             test/resources/oasis/p02fail28.xml,
+             test/resources/oasis/p18pass1.xml,
+             test/resources/oasis/p22pass6.xml,
+             test/resources/oasis/p23fail2.xml,
+             test/resources/oasis/p66fail4.xml,
+             test/resources/oasis/p02fail1.xml,
+             test/resources/oasis/p03fail3.xml,
+             test/resources/oasis/p02fail15.xml,
+             test/resources/oasis/p03fail15.xml,
+             test/resources/oasis/p05fail2.xml,
+             test/resources/oasis/p43fail2.xml,
+             test/resources/oasis/p10fail2.xml,
+             test/resources/oasis/p53pass1.xml,
+             test/resources/oasis/p60pass1.xml,
+             test/resources/oasis/p24pass3.xml,
+             test/resources/oasis/p16fail2.xml,
+             test/resources/oasis/p07pass1.xml,
+             test/resources/oasis/p03fail9.xml,
+             test/resources/oasis/p03fail27.xml,
+             test/resources/oasis/p03fail28.xml,
+             test/resources/oasis/p66fail3.xml,
+             test/resources/oasis/p26fail1.xml,
+             test/resources/oasis/p18fail1.xml,
+             test/resources/oasis/p15fail2.xml,
+             test/resources/oasis/p40pass1.xml,
+             test/resources/oasis/p10fail1.xml,
+             test/resources/oasis/p30pass2.dtd,
+             test/resources/oasis/p40pass3.xml,
+             test/resources/oasis/p22pass2.xml,
+             test/resources/oasis/p66pass1.xml,
+             test/resources/oasis/p03fail7.xml,
+             test/resources/oasis/p03fail2.xml,
+             test/resources/oasis/p03pass1.xml,
+             test/resources/oasis/p32fail4.xml,
+             test/resources/oasis/p50pass1.xml,
+             test/resources/oasis/p40fail3.xml,
+             test/resources/oasis/p41pass1.xml,
+             test/resources/oasis/p27fail1.xml.correct,
+             test/resources/oasis/p45pass1.xml,
+             test/resources/oasis/p31pass2.xml,
+             test/resources/oasis/p02fail17.xml,
+             test/resources/oasis/p32fail2.xml,
+             test/resources/oasis/p14fail1.xml,
+             test/resources/oasis/p02fail30.xml,
+             test/resources/oasis/p10fail1.xml.html.correct,
+             test/resources/oasis/p40pass4.xml,
+             test/resources/oasis/p32fail5.xml,
+             test/resources/oasis/p68fail3.xml,
+             test/resources/oasis/p03fail1.xml,
+             test/resources/oasis/p03fail5.xml,
+             test/resources/oasis/p74pass1.xml,
+             test/resources/oasis/p22pass4.xml,
+             test/resources/oasis/p58pass1.xml,
+             test/resources/oasis/p14fail3.xml,
+             test/resources/oasis/p02fail18.xml,
+             test/resources/oasis/p76pass1.xml,
+             test/resources/oasis/p63pass1.xml,
+             test/resources/oasis/p03fail17.xml,
+             test/resources/oasis/p15pass1.xml,
+             test/resources/oasis/p63pass1.dtd,
+             test/resources/oasis/p52pass1.xml,
+             test/resources/oasis/p16fail3.xml,
+             test/resources/oasis/p08fail2.xml,
+             test/resources/oasis/p01fail1.xml,
+             test/resources/oasis/p42fail1.xml,
+             test/resources/oasis/p27pass3.xml,
+             test/resources/oasis/p08pass1.xml,
+             test/resources/oasis/p23fail1.xml,
+             test/resources/oasis/p14fail2.xml.html.correct,
+             test/resources/oasis/p66fail6.xml,
+             test/resources/oasis/p49pass1.xml,
+             test/resources/oasis/p23pass2.xml,
+             test/resources/oasis/p68pass1.xml.incorrect,
+             test/resources/oasis/p01pass3.xml,
+             test/resources/oasis/p16pass1.xml,
+             test/resources/oasis/p61pass1.dtd,
+             test/resources/oasis/p30pass1.dtd,
+             test/resources/oasis/p42pass1.xml,
+             test/resources/oasis/p18fail2.xml,
+             test/resources/oasis/p44pass4.xml,
+             test/resources/oasis/p66fail2.xml.html.correct,
+             test/resources/oasis/p28pass5.xml,
+             test/resources/oasis/p57pass1.xml,
+             test/resources/oasis/p02fail7.xml,
+             test/resources/oasis/p02fail25.xml,
+             test/resources/oasis/p30pass1.xml,
+             test/resources/oasis/p66fail4.xml.html.correct,
+             test/resources/oasis/p54pass1.xml,
+             test/resources/oasis/p02fail13.xml,
+             test/resources/oasis/p64pass1.xml,
+             test/resources/oasis/p06pass1.xml,
+             test/resources/oasis/p02fail10.xml,
+             test/resources/oasis/p31pass1.dtd,
+             test/resources/oasis/p11fail1.xml,
+             test/resources/oasis/p66fail2.xml,
+             test/resources/oasis/p22fail1.xml,
+             test/resources/oasis/p02fail20.xml,
+             test/resources/oasis/p39fail4.xml,
+             test/resources/oasis/p68fail1.xml,
+             test/resources/oasis/p03fail25.xml,
+             test/resources/oasis/p28fail1.xml,
+             test/resources/oasis/p02fail5.xml,
+             test/resources/oasis/p46pass1.xml,
+             test/resources/oasis/p02fail3.xml,
+             test/resources/oasis/p44fail3.xml,
+             test/resources/oasis/p14pass1.xml,
+             test/resources/oasis/p03fail24.xml,
+             test/resources/oasis/p10pass1.xml,
+             test/resources/oasis/p16fail1.xml,
+             test/resources/oasis/p27pass4.xml,
+             test/resources/oasis/p25pass1.xml,
+             test/resources/oasis/p02fail24.xml,
+             test/resources/oasis/p28pass4.dtd,
+             test/resources/oasis/p41fail3.xml,
+             test/resources/oasis/p24pass4.xml,
+             test/resources/oasis/p05fail1.xml,
+             test/resources/oasis/p68fail3.xml.html.correct,
+             test/resources/oasis/p02fail9.xml,
+             test/resources/oasis/p68pass1.xml,
+             test/resources/oasis/p01fail2.xml,
+             test/resources/oasis/p42pass2.xml,
+             test/resources/oasis/p24fail1.xml,
+             test/resources/oasis/p41fail2.xml,
+             test/resources/oasis/p68fail1.xml.html.correct,
+             test/resources/oasis/p42fail3.xml,
+             test/resources/oasis/p32fail3.xml,
+             test/resources/oasis/p03fail19.xml,
+             test/resources/oasis/p28pass1.xml,
+             test/resources/oasis/p51pass1.xml,
+             test/resources/oasis/p04fail2.xml,
+             test/resources/oasis/p03fail16.xml,
+             test/resources/oasis/p02fail29.xml,
+             test/resources/oasis/p04fail1.xml,
+             test/resources/oasis/p47pass1.xml,
+             test/resources/oasis/p44pass5.xml,
+             test/resources/oasis/p43pass1.xml.incorrect,
+             test/resources/oasis/p02fail12.xml,
+             test/resources/oasis/p03fail10.xml,
+             test/resources/oasis/e2.xml,
+             test/resources/oasis/p02fail19.xml,
+             test/resources/oasis/p44fail4.xml,
+             test/resources/oasis/p48pass1.xml,
+             test/resources/oasis/p05pass1.xml,
+             test/resources/oasis/p02fail4.xml,
+             test/resources/oasis/p27pass1.xml,
+             test/resources/oasis/p41fail1.xml.html.correct,
+             test/resources/oasis/p12pass1.xml,
+             test/resources/oasis/p39pass1.xml,
+             test/resources/oasis/p11fail2.xml,
+             test/resources/oasis/p44fail5.xml,
+             test/resources/oasis/p05fail4.xml,
+             test/resources/oasis/p75pass1.xml,
+             test/resources/oasis/p03fail4.xml,
+             test/resources/oasis/p03fail12.xml,
+             test/resources/oasis/p16pass2.xml,
+             test/resources/oasis/p09pass1.dtd,
+             test/resources/oasis/p39fail1.xml,
+             test/resources/oasis/p61pass1.xml,
+             test/resources/oasis/p32fail1.xml,
+             test/resources/oasis/p04pass1.xml,
+             test/resources/oasis/p23fail3.xml,
+             test/resources/oasis/p66fail1.xml,
+             test/resources/oasis/p41fail1.xml,
+             test/resources/oasis/p25pass2.xml,
+             test/resources/oasis/p28pass2.xml,
+             test/resources/oasis/p11pass1.xml,
+             test/resources/oasis/p23pass3.xml,
+             test/resources/oasis/p69pass1.xml,
+             test/resources/oasis/p40fail2.xml,
+             test/resources/oasis/p02fail2.xml,
+             test/resources/oasis/p03fail23.xml,
+             test/resources/oasis/p02fail8.xml,
+             test/resources/oasis/p03fail14.xml,
+             test/resources/oasis/p40fail4.xml,
+             test/resources/oasis/p44pass1.xml,
+             test/resources/oasis/p27fail1.xml
+
 Library
   Hs-source-dirs:      src
   Exposed-modules:     Text.XmlHtml,
@@ -48,4 +819,4 @@
                        parsec >= 3.0 && < 3.2,
                        text >= 0.11 && < 0.12
 
-  Ghc-options:         -Wall -fwarn-tabs
+  Ghc-options:         -Wall -fwarn-tabs -fno-warn-orphans
