/*
 * The Apache Software License, Version 1.1
 *
 *
 * Copyright (c) 1999 The Apache Software Foundation.  All rights 
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:  
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Xerces" and "Apache Software Foundation" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written 
 *    permission, please contact apache@apache.org.
 *
 * 5. Products derived from this software may not be called "Apache",
 *    nor may "Apache" appear in their name, without prior written
 *    permission of the Apache Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation and was
 * originally based on software copyright (c) 1999, International
 * Business Machines, Inc., http://www.apache.org.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 */

package org.apache.xerces.utils;

import java.util.Locale;
import java.util.ResourceBundle;
import java.util.ListResourceBundle;

/**
 * XMLMessages provides error messages for the XML 1.0 Recommendation and for 
 * the Namespaces Recommendation
 *
 */
public class XMLMessages implements XMLMessageProvider {
    /**
     * The domain of messages concerning the XML 1.0 specification.
     */
    public static final String XML_DOMAIN = "http://www.w3.org/TR/1998/REC-xml-19980210";
    public static final String XMLNS_DOMAIN = "http://www.w3.org/TR/1999/REC-xml-names-19990114";

    /**
     *
     */
    public void setLocale(Locale locale) {
        fLocale = locale;
    }
    /**
     *
     */
    public Locale getLocale() {
        return fLocale;
    }

    /**
     * Creates a message from the specified key and replacement
     * arguments, localized to the given locale.
     *
     * @param locale    The requested locale of the message to be
     *                  created.
     * @param key       The key for the message text.
     * @param args      The arguments to be used as replacement text
     *                  in the message created.
     */
    public String createMessage(Locale locale, int majorCode, int minorCode, Object args[]) {
        boolean throwex = false;
        if (fResourceBundle == null || locale != fLocale) {
            if (locale != null)
                fResourceBundle = ListResourceBundle.getBundle("org.apache.xerces.msg.XMLMessages", locale);
            if (fResourceBundle == null)
                fResourceBundle = ListResourceBundle.getBundle("org.apache.xerces.msg.XMLMessages");
        }
        if (majorCode < 0 || majorCode >= fgMessageKeys.length - 1) {
            majorCode = MSG_BAD_MAJORCODE;
            throwex = true;
        }
        String msgKey = fgMessageKeys[majorCode];
        String msg = fResourceBundle.getString(msgKey);
        if (args != null) {
            try {
                msg = java.text.MessageFormat.format(msg, args);
            } catch (Exception e) {
                msg = fResourceBundle.getString(fgMessageKeys[MSG_FORMAT_FAILURE]);
                msg += " " + fResourceBundle.getString(msgKey);
            }
        }
/*
        if (minorCode > 0 && minorCode < fgConstraints.length - 1) {
            Constraint c = fgConstraints[minorCode];
            String prefix = "{ " + c.sections;
            if (c.productions != null && c.productions.length() != 0)
                prefix = prefix + " " + c.productions;
            msg = prefix + " } " + msg;
        }
 */
        if (throwex) {
            throw new RuntimeException(msg);
        }
        return msg;
    }
    //
    //
    //
    private Locale fLocale = null;
    private ResourceBundle fResourceBundle = null;
    //
    //
    //
    public static final int
        MSG_BAD_MAJORCODE = 0,              //  majorCode parameter to createMessage was out of bounds
        MSG_FORMAT_FAILURE = 1,             //  exception thrown during messageFormat call
        MSG_LESSTHAN_IN_ATTVALUE = 2,       //  '<' found in attribute value
        MSG_ROOT_ELEMENT_TYPE = 3,          //  document root element type does not match the doctypedecl Name
        MSG_IDREFS_INVALID = 4,             //  attributes of type IDREFS must match the Names production
        MSG_NMTOKENS_INVALID = 5,           //  attributes of type NMTOKENS must match the Nmtokens production
        MSG_RESERVED_PITARGET = 6,          //  PITarget matching [Xx][Mm][Ll] is reserved
        MSG_SPACE_REQUIRED_IN_PI = 7,       //  white space is required between PITarget and data
        MSG_INVALID_CHAR_IN_PI = 8,         //  invalid character found in PI data
        MSG_DASH_DASH_IN_COMMENT = 9,       //  the string "--" in not allowed in comments
        MSG_INVALID_CHAR_IN_COMMENT = 10,   //  invalid character found in comment
        MSG_INVALID_CHARREF = 11,           //  invalid value for character reference
        MSG_INVALID_CHAR_IN_ATTVALUE = 12,  //  invalid character found in attribute value
        MSG_QUOTE_REQUIRED_IN_ATTVALUE = 13, //  attribute value was not a quoted string
        MSG_NAME_REQUIRED_IN_REFERENCE = 14, //  a Name did not follow the '&' in the entity reference
        MSG_SEMICOLON_REQUIRED_IN_REFERENCE = 15, //  a ';' did not follow the Name in the entity reference
        MSG_DIGIT_REQUIRED_IN_CHARREF = 16,  //  a decimal representation did not follow the "&#" in the character reference
        MSG_HEXDIGIT_REQUIRED_IN_CHARREF = 17, //  a hexadecimal representation did not follow the "&#x" in the character reference
        MSG_SEMICOLON_REQUIRED_IN_CHARREF = 18, //  the ';' delimiter was not found in the character reference
        MSG_QUOTE_REQUIRED_IN_SYSTEMID = 19, //  system identifier was not a quoted string
        MSG_INVALID_CHAR_IN_SYSTEMID = 20,  //  invalid character found in system identifier
        MSG_QUOTE_REQUIRED_IN_PUBLICID = 21, //  public identifier was not a quoted string
        MSG_INVALID_CHAR_IN_PUBLICID = 22,  //  invalid character found in public identifier
        MSG_INCLUDESECT_UNTERMINATED = 23,  //  includeSect must end with "]]>"
        MSG_IGNORESECT_UNTERMINATED = 24,   //  ignoreSect must end with "]]>"
        MSG_INVALID_CHAR_IN_IGNORESECT = 25, //  invalid character found in ignoreSect
        MSG_ELEMENT_UNTERMINATED = 26,      //  element type not followed by attributes, ">" or "/>"
        MSG_EQ_REQUIRED_IN_ATTRIBUTE = 27,   //  attribute name not followed by "="
        MSG_ATTRIBUTE_NOT_UNIQUE = 28,      //  specified attributes must be unique within the element tag
        MSG_ENCODINGDECL_REQUIRED = 29,      //  the "encoding" declaration is required in a text declaration
        MSG_VERSIONINFO_REQUIRED = 30,       //  the "version" is required in the XML declaration
        MSG_EQ_REQUIRED_IN_XMLDECL = 31,     //  the '=' character must follow \"{0}\" in the XML declaration
        MSG_EQ_REQUIRED_IN_TEXTDECL = 32,    //  the '=' character must follow \"{0}\" in the text declaration
        MSG_QUOTE_REQUIRED_IN_XMLDECL = 33,  //  quote missing in the XML declaration
        MSG_QUOTE_REQUIRED_IN_TEXTDECL = 34, //  quote missing in the text declaration
        MSG_INVALID_CHAR_IN_XMLDECL = 35,   //  invalid character found in the XML declaration
        MSG_INVALID_CHAR_IN_TEXTDECL = 36,  //  invalid character found in the text declaration
        MSG_VERSIONINFO_INVALID = 37,       //  Invalid XML version format, \"{0}\"
        MSG_VERSION_NOT_SUPPORTED = 38,     //  unsupported XML version
        MSG_SPACE_REQUIRED_IN_TEXTDECL = 39, //  white space required between version and encoding
        MSG_ENCODINGDECL_INVALID = 40,      //  invalid encoding name
        MSG_SDDECL_INVALID = 41,            //  invalid \"standalone\" attribute value. Must be "yes" or "no"
        MSG_XMLDECL_UNTERMINATED = 42,      //  "\"?>\" expected.
        MSG_TEXTDECL_UNTERMINATED = 43,     //  "\"?>\" expected.
        MSG_INVALID_CHAR_IN_INTERNAL_SUBSET = 44, //  invalid character found in the internal subset of the dtd
        MSG_INVALID_CHAR_IN_EXTERNAL_SUBSET = 45, //  invalid character found in the external subset of the dtd
        MSG_INVALID_CHAR_IN_ENTITYVALUE = 46, //  invalid character found in entity value
        MSG_MIXED_CONTENT_UNTERMINATED = 47, //  mixed content model with element types must end with ")*"
        MSG_NAME_REQUIRED_IN_PEREFERENCE = 48, //  a Name did not follow the '&' in the parameter entity reference
        MSG_SEMICOLON_REQUIRED_IN_PEREFERENCE = 49, //  a ';' did not follow the Name in the parameter entity reference
        MSG_EXTERNALID_REQUIRED = 50,        //  an external id did not begin with SYSTEM or PUBLIC
        MSG_PEREFERENCE_WITHIN_MARKUP = 51, //  a PEReference is not allowed within markup in the internal subset of the DTD
        MSG_INVALID_CHAR_IN_PROLOG = 52,    //  invalid character found in prolog
        MSG_INVALID_CHAR_IN_MISC = 53,      //  invalid character found in trailing misc
        MSG_INVALID_CHAR_IN_CDSECT = 54,    //  invalid character found in cdata section
        MSG_INVALID_CHAR_IN_CONTENT = 55,   //  invalid character found in content
        MSG_ETAG_REQUIRED = 56,              //  end of input before end of element content
        MSG_ETAG_UNTERMINATED = 57,         //  the end-tag did not end with a '>'
        MSG_ATTRIBUTE_NAME_REQUIRED_IN_ATTDEF = 58, //  attribute name expected
        MSG_ATTTYPE_REQUIRED_IN_ATTDEF = 59, //  attribute type expected
        MSG_PUBIDCHAR_ILLEGAL = 60,        //  illegal character found in public identifier
        MSG_ENCODING_NOT_SUPPORTED = 61,   //  encoding is not supported
        MSG_ENTITY_NOT_DECLARED = 62,      //  entity was not declared
        MSG_REFERENCE_TO_UNPARSED_ENTITY = 63,
        MSG_REFERENCE_TO_EXTERNAL_ENTITY = 64,
        MSG_XML_LANG_INVALID = 65,         //  xml:lang attribute value does not match LanguageID production
        MSG_CDSECT_UNTERMINATED = 66,      //  CDATA sections must end with "]]>"
        MSG_DUPLICATE_TYPE_IN_MIXED_CONTENT = 67,
        MSG_ELEMENT_ENTITY_MISMATCH = 68,
        MSG_ID_DEFAULT_TYPE_INVALID = 69,
        MSG_ENCODING_REQUIRED = 70,
        MSG_RECURSIVE_REFERENCE = 71,
        MSG_RECURSIVE_PEREFERENCE = 72,
        MSG_IMPROPER_DECLARATION_NESTING = 73, // "Parameter entity replacement text must include declarations or proper pairs of ''<'' and ''>''. (entity: \"%{0};\")"
        MSG_IMPROPER_GROUP_NESTING = 74,    // "Parameter entity replacement text must include proper pairs of parentheses in content model, \"%{0};\"."
        MSG_ID_INVALID = 75,
        MSG_ID_NOT_UNIQUE = 76,
        MSG_IDREF_INVALID = 77,
        MSG_NMTOKEN_INVALID = 78,
        MSG_ENTITY_INVALID = 79,
        MSG_ENTITIES_INVALID = 80,
        MSG_ELEMENT_WITH_ID_REQUIRED = 81,
        MSG_ATTRIBUTE_NOT_DECLARED = 82,
        MSG_ELEMENT_NOT_DECLARED = 83,
        MSG_AVAILABLE1 = 84,
        MSG_DUPLICATE_ATTDEF = 85,
        MSG_MORE_THAN_ONE_ID_ATTRIBUTE = 86,
        MSG_CONTENT_INVALID = 87,
        MSG_CONTENT_INCOMPLETE = 88,
        MSG_ELEMENT_ALREADY_DECLARED = 89,
        MSG_ATTRIBUTE_VALUE_NOT_IN_LIST = 90,
        MSG_AVAILABLE2 = 91,
        MSG_UNDECLARED_ELEMENT_IN_CONTENTSPEC = 92,
        MSG_FIXED_ATTVALUE_INVALID = 93,
        MSG_REQUIRED_ATTRIBUTE_NOT_SPECIFIED = 94,
        MSG_DEFAULTED_ATTRIBUTE_NOT_SPECIFIED = 95,
        MSG_AVAILABLE3 = 96,
        MSG_AVAILABLE4 = 97,
        MSG_CLOSE_PAREN_REQUIRED_IN_CHILDREN = 98,
        MSG_AVAILABLE5 = 99,
        MSG_SYSTEMID_UNTERMINATED = 100,
        MSG_PUBLICID_UNTERMINATED = 101,
        MSG_EXTERNAL_ENTITY_NOT_PERMITTED = 102,
        MSG_AVAILABLE6 = 103,
        MSG_XMLDECL_MUST_BE_FIRST = 104,
        MSG_TEXTDECL_MUST_BE_FIRST = 105,
        MSG_ELEMENTDECL_UNTERMINATED = 106,
        MSG_SPACE_REQUIRED_BEFORE_ENTITY_NAME_IN_PEDECL = 107,
        MSG_SPACE_REQUIRED_BEFORE_ENTITY_NAME_IN_ENTITYDECL = 108,
        MSG_SPACE_REQUIRED_BEFORE_PERCENT_IN_PEDECL = 109,
        MSG_ENTITY_NAME_REQUIRED_IN_ENTITYDECL = 110,
        MSG_SPACE_REQUIRED_AFTER_ENTITY_NAME_IN_ENTITYDECL = 111,
        MSG_ENTITYDECL_UNTERMINATED = 112,
        MSG_NOTATION_NAME_REQUIRED_FOR_UNPARSED_ENTITYDECL = 113,
        MSG_NOTATION_NOT_DECLARED_FOR_UNPARSED_ENTITYDECL = 114,
        MSG_NAME_REQUIRED_IN_NOTATIONTYPE = 115,
        MSG_NMTOKEN_REQUIRED_IN_ENUMERATION = 116,
        MSG_NOTATION_NOT_DECLARED_FOR_NOTATIONTYPE_ATTRIBUTE = 117,
        MSG_NOTATIONTYPE_UNTERMINATED = 118,
        MSG_ENUMERATION_UNTERMINATED = 119,
        MSG_NOTATION_NAME_REQUIRED_IN_NOTATIONDECL = 120,
        MSG_MORE_THAN_ONE_NOTATION_ATTRIBUTE = 121,
        MSG_NOTATIONDECL_UNTERMINATED = 122,
        MSG_ATTVALUE_CHANGED_DURING_NORMALIZATION_WHEN_STANDALONE = 123,
        MSG_CDEND_IN_CONTENT = 124,
        MSG_ELEMENT_TYPE_REQUIRED_IN_ATTLISTDECL = 125,
        MSG_TWO_COLONS_IN_QNAME = 126,
        MSG_MARKUP_NOT_RECOGNIZED_IN_CONTENT = 127,
        MSG_MARKUP_NOT_RECOGNIZED_IN_MISC = 128,
        MSG_MARKUP_NOT_RECOGNIZED_IN_PROLOG = 129,
        MSG_OPEN_PAREN_REQUIRED_IN_NOTATIONTYPE = 130,
        MSG_PITARGET_REQUIRED = 131,
        MSG_REFERENCE_TO_EXTERNALLY_DECLARED_ENTITY_WHEN_STANDALONE = 132,
        MSG_URI_FRAGMENT_IN_SYSTEMID = 133,
        MSG_ROOT_ELEMENT_REQUIRED = 134,
        MSG_SPACE_REQUIRED_AFTER_FIXED_IN_DEFAULTDECL = 135,
        MSG_SPACE_REQUIRED_AFTER_NOTATION_IN_NOTATIONTYPE = 136,
        MSG_SPACE_REQUIRED_AFTER_NOTATION_NAME_IN_NOTATIONDECL = 137,
        MSG_SPACE_REQUIRED_BEFORE_ATTRIBUTE_NAME_IN_ATTDEF = 138,
        MSG_SPACE_REQUIRED_BEFORE_ATTTYPE_IN_ATTDEF = 139,
        MSG_SPACE_REQUIRED_BEFORE_DEFAULTDECL_IN_ATTDEF = 140,
        MSG_SPACE_REQUIRED_BEFORE_ELEMENT_TYPE_IN_ATTLISTDECL = 141,
        MSG_SPACE_REQUIRED_BEFORE_NOTATION_NAME_IN_NOTATIONDECL = 142,
        MSG_WHITE_SPACE_IN_ELEMENT_CONTENT_WHEN_STANDALONE = 143,
        MSG_XML_SPACE_DECLARATION_ILLEGAL = 144,
        MSG_CLOSE_PAREN_REQUIRED_IN_MIXED = 145,
        MSG_CONTENTSPEC_REQUIRED_IN_ELEMENTDECL = 146,
        MSG_DOCTYPEDECL_UNTERMINATED = 147,
        MSG_ELEMENT_TYPE_REQUIRED_IN_ELEMENTDECL = 148,
        MSG_ELEMENT_TYPE_REQUIRED_IN_MIXED_CONTENT = 149,
        MSG_MARKUP_NOT_RECOGNIZED_IN_DTD = 150,
        MSG_ATTRIBUTE_VALUE_UNTERMINATED = 151,
        MSG_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED_IN_CHILDREN = 152,
        MSG_ROOT_ELEMENT_TYPE_REQUIRED = 153,
        MSG_SPACE_REQUIRED_AFTER_PUBIDLITERAL_IN_EXTERNALID = 154,
        MSG_SPACE_REQUIRED_BEFORE_CONTENTSPEC_IN_ELEMENTDECL = 155,
        MSG_SPACE_REQUIRED_BEFORE_ELEMENT_TYPE_IN_ELEMENTDECL = 156,
        MSG_SPACE_REQUIRED_BEFORE_NOTATION_NAME_IN_UNPARSED_ENTITYDECL = 157,
        MSG_SPACE_REQUIRED_BEFORE_PUBIDLITERAL_IN_EXTERNALID = 158,
        MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL = 159,
        MSG_SPACE_REQUIRED_BEFORE_SYSTEMLITERAL_IN_EXTERNALID = 160,
        MSG_REFERENCE_NOT_IN_ONE_ENTITY = 161,
        MSG_COMMENT_NOT_IN_ONE_ENTITY = 162,
        MSG_COMMENT_UNTERMINATED = 163,
        MSG_PI_UNTERMINATED = 164,
        MSG_PI_NOT_IN_ONE_ENTITY = 165,
        MSG_REFERENCE_UNTERMINATED = 166,
        MSG_PREFIX_DECLARED = 167,

        // ...
        MSG_MAX_CODE = 200;

    private static final String[] fgMessageKeys = {
        "BadMajorCode",                 //   0, "The majorCode parameter to createMessage was out of bounds."
        "FormatFailed",                 //   1, "An internal error occurred while formatting the following message:"
        "LessthanInAttValue",           //   2, "The attribute value must not contain the '<' character."
        "RootElementTypeMustMatchDoctypedecl", //   3, "The document root element type \"{1}\" must match the document type declaration name \"{0}\"."
        "IDREFSInvalid",                //   4, "Attribute value \"{1}\" of type IDREFS must be one or more names."
        "NMTOKENSInvalid",              //   5, "Attribute value \"{1}\" of type NMTOKENS must contain one or more name tokens."
        "ReservedPITarget",             //   6, "The processing instruction target matching \"[xX][mM][lL]\" is not allowed."
        "SpaceRequiredInPI",            //   7, "White space is required between the processing instruction target and data."
        "InvalidCharInPI",              //   8, "An invalid XML character (Unicode: 0x{0}) was found in the processing instruction."
        "DashDashInComment",            //   9, "The string \"--\" is not permitted within comments."
        "InvalidCharInComment",         //  10, "An invalid XML character (Unicode: 0x{0}) was found in the comment."
        "InvalidCharRef",               //  11, "Character reference \"&#{0}\" is an invalid XML character."
        "InvalidCharInAttValue",        //  12, "An invalid XML character (Unicode: 0x{0}) was found in the attribute value."
        "QuoteRequiredInAttValue",      //  13, "The attribute value must begin with either a single or double quote character."
        "NameRequiredInReference",      //  14, "The entity name must immediately follow the '&' in the entity reference."
        "SemicolonRequiredInReference", //  15, "The entity reference must end with the ';' delimiter."
        "DigitRequiredInCharRef",       //  16, "A decimal representation must immediately follow the \"&#\" in the character reference."
        "HexdigitRequiredInCharRef",    //  17, "A hexadecimal representation must immediately follow the \"&#x\" in the character reference."
        "SemicolonRequiredInCharRef",   //  18, "The character reference must end with the ';' delimiter."
        "QuoteRequiredInSystemID",      //  19, "The system identifier must begin with either a single or double quote character."
        "InvalidCharInSystemID",        //  20, "An invalid XML character (Unicode: 0x{0}) was found in the system identifier."
        "QuoteRequiredInPublicID",      //  21, "The public identifier must begin with either a single or double quote character."
        "InvalidCharInPublicID",        //  22, "An invalid XML character (Unicode: 0x{0}) was found in the public identifier."
        "IncludeSectUnterminated",      //  23, "The included conditional section must end with \"]]>\"."
        "IgnoreSectUnterminated",       //  24, "The excluded conditional section must end with \"]]>\"."
        "InvalidCharInIgnoreSect",      //  25, "An invalid XML character (Unicode: 0x{0}) was found in the excluded conditional section."
        "ElementUnterminated",          //  26, "Element type \"{0}\" must be followed by either attribute specifications, \">\" or \"/>\"."
        "EqRequiredInAttribute",        //  27, "Attribute name \"{1}\" must be followed by the '=' character."
        "AttributeNotUnique",           //  28, "Attribute \"{1}\" was already specified for element \"{0}\"."
        "EncodingDeclRequired",         //  29, "The encoding declaration is required within a text declaration."
        "VersionInfoRequired",          //  30, "The version is required within an XML declaration."
        "EqRequiredInXMLDecl",          //  31, "The '=' character must follow \"{0}\" in the XML declaration."
        "EqRequiredInTextDecl",         //  32, "The '=' character must follow \"{0}\" in the text declaration."
        "QuoteRequiredInXMLDecl",       //  33, "The value following \"{0}\" in an XML declaration must be a quoted string."
        "QuoteRequiredInTextDecl",      //  34, "The value following \"{0}\" in a text declaration must be a quoted string."
        "InvalidCharInXMLDecl",         //  35, "An invalid XML character (Unicode: 0x{0}) was found in the XML declaration."
        "InvalidCharInTextDecl",        //  36, "An invalid XML character (Unicode: 0x{0}) was found in the text declaration."
        "VersionInfoInvalid",           //  37, "Invalid version \"{0}\"."
        "VersionNotSupported",          //  38, "XML version \"{0}\" is not supported."
        "SpaceRequiredInTextDecl",      //  39, "White space is required between the version and the encoding declaration."
        "EncodingDeclInvalid",          //  40, "Invalid encoding name \"{0}\"."
        "SDDeclInvalid",                //  41, "The standalone document declaration value must be \"yes\" or \"no\", not \"{0}\"."
        "XMLDeclUnterminated",          //  42, "The XML declaration must end with \"?>\"."
        "TextDeclUnterminated",         //  43, "The text declaration must end with \"?>\"."
        "InvalidCharInInternalSubset",  //  44, "An invalid XML character (Unicode: 0x{0}) was found in the internal subset of the DTD."
        "InvalidCharInExternalSubset",  //  45, "An invalid XML character (Unicode: 0x{0}) was found in the external subset of the DTD."
        "InvalidCharInEntityValue",     //  46, "An invalid XML character (Unicode: 0x{0}) was found in the literal entity value."
        "MixedContentUnterminated",     //  47, "The mixed content model \"(0}\" must end with \")*\"."
        "NameRequiredInPEReference",    //  48, "The entity name must immediately follow the '%' in the parameter entity reference."
        "SemicolonRequiredInPEReference", //  49, "The parameter entity reference must end with the ';' delimiter."
        "ExternalIDRequired",           //  50, "The external entity declaration must begin with either \"SYSTEM\" or \"PUBLIC\"."
        "PEReferenceWithinMarkup",      //  51, "The parameter entity reference \"%(0);\" cannot occur within markup in the internal subset of the DTD."
        "InvalidCharInProlog",          //  52, "An invalid XML character (Unicode: 0x{0}) was found in the prolog of the document."
        "InvalidCharInMisc",            //  53, "An invalid XML character (Unicode: 0x{0}) was found in markup after the end of the element content."
        "InvalidCharInCDSect",          //  54, "An invalid XML character (Unicode: 0x{0}) was found in the CDATA section."
        "InvalidCharInContent",         //  55, "An invalid XML character (Unicode: 0x{0}) was found in the element content of the document."
        "ETagRequired",                 //  56, "The element type \"{0}\" must be terminated by the matching end-tag \"</{0}>\"."
        "ETagUnterminated",             //  57, "The end-tag for element type \"{0}\" must end with a ''>'' delimiter."
        "AttNameRequiredInAttDef",      //  58, "The attribute name must be specified in the attribute-list declaration for element \"{0}\"."
        "AttTypeRequiredInAttDef",      //  59, "The attribute type must be specified in the attribute-list declaration of attribute \"{1}\" for element \"{0}\"."
        "PubidCharIllegal",             //  60, "The character (Unicode: 0x{0}) is not permitted in the public identifier."
        "EncodingNotSupported",         //  61, "The encoding \"{0}\" is not supported."
        "EntityNotDeclared",            //  62, "The entity \"{0}\" was referenced, but not declared."
        "ReferenceToUnparsedEntity",    //  63, "The unparsed entity reference \"&{0};\" is not permitted."
        "ReferenceToExternalEntity",    //  64, "The external entity reference \"&{0};\" is not permitted in an attribute value."
        "XMLLangInvalid",               //  65, "The xml:lang attribute value \"{0}\" is an invalid language identifier."
        "CDSectUnterminated",           //  66, "The CDATA section must end with \"]]>\"."
        "DuplicateTypeInMixedContent",  //  67, "The element type \"{0}\" was already specified in this content model."
        "ElementEntityMismatch",        //  68, "The element \"{0}\" must start and end within the same entity."
        "IDDefaultTypeInvalid",         //  69, "The ID attribute \"{0}\" must have a declared default of \"#IMPLIED\" or \"#REQUIRED\"."
        "EncodingRequired",             //  70, "A parsed entity not encoded in either UTF-8 or UTF-16 must contain an encoding declaration."
        "RecursiveReference",           //  71, "Recursive reference \"&{0};\". (Reference path: {1})"
        "RecursivePEReference",         //  72, "Recursive reference \"%{0};\". (Reference path: {1})"
        "ImproperDeclarationNesting",   //  73, "The replacement text of parameter entity \"(0)\" must include properly nested declarations."
        "ImproperGroupNesting",         //  74, "The replacement text of parameter entity \"(0)\" must include properly nested pairs of parentheses in content model."
        "IDInvalid",                    //  75, "Attribute value \"{1}\" of type ID must be a name."
        "IDNotUnique",                  //  76, "Attribute value \"(1}\" of type ID must be unique within the document."
        "IDREFInvalid",                 //  77, "Attribute value \"(1}\" of type IDREF must be a name."
        "NMTOKENInvalid",               //  78, "Attribute value \"(1}\" of type NMTOKEN must be a name token."
        "ENTITYInvalid",                //  79, "Attribute value \"(1}\" of type ENTITY must be the name of an unparsed entity."
        "ENTITIESInvalid",              //  80, "Attribute value \"(1}\" of type ENTITIES must be the names of one or more unparsed entities."
        "MSG_ELEMENT_WITH_ID_REQUIRED", //  81, "MSG_ELEMENT_WITH_ID_REQUIRED"
        "MSG_ATTRIBUTE_NOT_DECLARED",   //  82, "MSG_ATTRIBUTE_NOT_DECLARED"
        "MSG_ELEMENT_NOT_DECLARED",     //  83, "MSG_ELEMENT_NOT_DECLARED"
        "MSG_AVAILABLE1",               //  84,
        "MSG_DUPLICATE_ATTDEF",         //  85, "MSG_DUPLICATE_ATTDEF"
        "MSG_MORE_THAN_ONE_ID_ATTRIBUTE", //  86, "MSG_MORE_THAN_ONE_ID_ATTRIBUTE"
        "MSG_CONTENT_INVALID",          //  87, "MSG_CONTENT_INVALID"
        "MSG_CONTENT_INCOMPLETE",       //  88, "MSG_CONTENT_INCOMPLETE"
        "MSG_ELEMENT_ALREADY_DECLARED", //  89, "MSG_ELEMENT_ALREADY_DECLARED"
        "MSG_ATTRIBUTE_VALUE_NOT_IN_LIST", //  90, "MSG_ATTRIBUTE_VALUE_NOT_IN_LIST"
        "MSG_AVAILABLE2",               //  91,
        "UndeclaredElementInContentSpec", //   92, "The content model of element \"{0}\" refers to the undeclared element \"{1}\"."
        "MSG_FIXED_ATTVALUE_INVALID",   //  93, "MSG_FIXED_ATTVALUE_INVALID"
        "MSG_REQUIRED_ATTRIBUTE_NOT_SPECIFIED", //  94, "MSG_REQUIRED_ATTRIBUTE_NOT_SPECIFIED"
        "MSG_DEFAULTED_ATTRIBUTE_NOT_SPECIFIED", //  95, "MSG_DEFAULTED_ATTRIBUTE_NOT_SPECIFIED"
        "MSG_AVAILABLE3",               //  96,
        "MSG_AVAILABLE4",               //  97,
        "MSG_CLOSE_PAREN_REQUIRED_IN_CHILDREN", //  98, "MSG_CLOSE_PAREN_REQUIRED_IN_CHILDREN"
        "MSG_AVAILABLE5",               //  99,
        "SystemIDUnterminated",         // 100, "MSG_SYSTEMID_UNTERMINATED"
        "PublicIDUnterminated",         // 101, "MSG_PUBLICID_UNTERMINATED"
        "MSG_EXTERNAL_ENTITY_NOT_PERMITTED", // 102, "MSG_EXTERNAL_ENTITY_NOT_PERMITTED"
        "MSG_AVAILABLE6",               // 103,
        "XMLDeclMustBeFirst",           // 104, "MSG_XMLDECL_MUST_BE_FIRST"
        "TextDeclMustBeFirst",          // 105, "MSG_TEXTDECL_MUST_BE_FIRST"
        "ElementDeclUnterminated",      // 106, "MSG_ELEMENTDECL_UNTERMINATED"
        "MSG_SPACE_REQUIRED_BEFORE_ENTITY_NAME_IN_PEDECL",     // 107, "MSG_SPACE_REQUIRED_BEFORE_ENTITY_NAME_IN_PEDECL"
        "MSG_SPACE_REQUIRED_BEFORE_ENTITY_NAME_IN_ENTITYDECL",     // 108, "MSG_SPACE_REQUIRED_BEFORE_ENTITY_NAME_IN_ENTITYDECL"
        "MSG_SPACE_REQUIRED_BEFORE_PERCENT_IN_PEDECL",     // 109, "MSG_SPACE_REQUIRED_BEFORE_PERCENT_IN_PEDECL"
        "MSG_ENTITY_NAME_REQUIRED_IN_ENTITYDECL",     // 110, "MSG_ENTITY_NAME_REQUIRED_IN_ENTITYDECL"
        "MSG_SPACE_REQUIRED_AFTER_ENTITY_NAME_IN_ENTITYDECL",     // 111, "MSG_SPACE_REQUIRED_AFTER_ENTITY_NAME_IN_ENTITYDECL"
        "EntityDeclUnterminated",       // 112, "MSG_ENTITYDECL_UNTERMINATED"
        "MSG_NOTATION_NAME_REQUIRED_FOR_UNPARSED_ENTITYDECL",     // 113, "MSG_NOTATION_NAME_REQUIRED_FOR_UNPARSED_ENTITYDECL"
        "MSG_NOTATION_NOT_DECLARED_FOR_UNPARSED_ENTITYDECL",     // 114, "MSG_NOTATION_NOT_DECLARED_FOR_UNPARSED_ENTITYDECL"
        "MSG_NAME_REQUIRED_IN_NOTATIONTYPE",     // 115, "MSG_NAME_REQUIRED_IN_NOTATIONTYPE"
        "MSG_NMTOKEN_REQUIRED_IN_ENUMERATION",     // 116, "MSG_NMTOKEN_REQUIRED_IN_ENUMERATION"
        "MSG_NOTATION_NOT_DECLARED_FOR_NOTATIONTYPE_ATTRIBUTE",     // 117, "MSG_NOTATION_NOT_DECLARED_FOR_NOTATIONTYPE_ATTRIBUTE"
        "NotationTypeUnterminated",     // 118, "MSG_NOTATIONTYPE_UNTERMINATED"
        "EnumerationUnterminated",      // 119, "MSG_ENUMERATION_UNTERMINATED"
        "MSG_NOTATION_NAME_REQUIRED_IN_NOTATIONDECL", // 120, "MSG_NOTATION_NAME_REQUIRED_IN_NOTATIONDECL"
        "MSG_MORE_THAN_ONE_NOTATION_ATTRIBUTE", // 121, "MSG_MORE_THAN_ONE_NOTATION_ATTRIBUTE"
        "NotationDeclUnterminated",     // 122, "MSG_NOTATIONDECL_UNTERMINATED"
        "MSG_ATTVALUE_CHANGED_DURING_NORMALIZATION_WHEN_STANDALONE",     // 123, "MSG_ATTVALUE_CHANGED_DURING_NORMALIZATION_WHEN_STANDALONE"
        "CDEndInContent",               // 124, "MSG_CDEND_IN_CONTENT"
        "MSG_ELEMENT_TYPE_REQUIRED_IN_ATTLISTDECL",     // 125, "MSG_ELEMENT_TYPE_REQUIRED_IN_ATTLISTDECL"
        "TwoColonsInQName",             // 126, ""
        "MarkupNotRecognizedInContent", // 127, "MSG_MARKUP_NOT_RECOGNIZED_IN_CONTENT"
        "MarkupNotRecognizedInMisc",    // 128, "MSG_MARKUP_NOT_RECOGNIZED_IN_MISC"
        "MarkupNotRecognizedInProlog",  // 129, "MSG_MARKUP_NOT_RECOGNIZED_IN_PROLOG"
        "MSG_OPEN_PAREN_REQUIRED_IN_NOTATIONTYPE",     // 130, "MSG_OPEN_PAREN_REQUIRED_IN_NOTATIONTYPE"
        "PITargetRequired",             // 131, "MSG_PITARGET_REQUIRED"
        "MSG_REFERENCE_TO_EXTERNALLY_DECLARED_ENTITY_WHEN_STANDALONE",     // 132, "MSG_REFERENCE_TO_EXTERNALLY_DECLARED_ENTITY_WHEN_STANDALONE"
        "MSG_URI_FRAGMENT_IN_SYSTEMID", // 133, "MSG_URI_FRAGMENT_IN_SYSTEMID"
        "RootElementRequired",          // 134, "MSG_ROOT_ELEMENT_REQUIRED"
        "MSG_SPACE_REQUIRED_AFTER_FIXED_IN_DEFAULTDECL",     // 135, "MSG_SPACE_REQUIRED_AFTER_FIXED_IN_DEFAULTDECL"
        "MSG_SPACE_REQUIRED_AFTER_NOTATION_IN_NOTATIONTYPE",     // 136, "MSG_SPACE_REQUIRED_AFTER_NOTATION_IN_NOTATIONTYPE"
        "MSG_SPACE_REQUIRED_AFTER_NOTATION_NAME_IN_NOTATIONDECL",     // 137, "MSG_SPACE_REQUIRED_AFTER_NOTATION_NAME_IN_NOTATIONDECL"
        "MSG_SPACE_REQUIRED_BEFORE_ATTRIBUTE_NAME_IN_ATTDEF",     // 138, "MSG_SPACE_REQUIRED_BEFORE_ATTRIBUTE_NAME_IN_ATTDEF"
        "MSG_SPACE_REQUIRED_BEFORE_ATTTYPE_IN_ATTDEF",     // 139, "MSG_SPACE_REQUIRED_BEFORE_ATTTYPE_IN_ATTDEF"
        "MSG_SPACE_REQUIRED_BEFORE_DEFAULTDECL_IN_ATTDEF",     // 140, "MSG_SPACE_REQUIRED_BEFORE_DEFAULTDECL_IN_ATTDEF"
        "MSG_SPACE_REQUIRED_BEFORE_ELEMENT_TYPE_IN_ATTLISTDECL",     // 141, "MSG_SPACE_REQUIRED_BEFORE_ELEMENT_TYPE_IN_ATTLISTDECL"
        "MSG_SPACE_REQUIRED_BEFORE_NOTATION_NAME_IN_NOTATIONDECL",     // 142, "MSG_SPACE_REQUIRED_BEFORE_NOTATION_NAME_IN_NOTATIONDECL"
        "MSG_WHITE_SPACE_IN_ELEMENT_CONTENT_WHEN_STANDALONE",     // 143, "MSG_WHITE_SPACE_IN_ELEMENT_CONTENT_WHEN_STANDALONE"
        "MSG_XML_SPACE_DECLARATION_ILLEGAL",     // 144, "MSG_XML_SPACE_DECLARATION_ILLEGAL"
        "MSG_CLOSE_PAREN_REQUIRED_IN_MIXED",     // 145, "MSG_CLOSE_PAREN_REQUIRED_IN_MIXED"
        "MSG_CONTENTSPEC_REQUIRED_IN_ELEMENTDECL",     // 146, "MSG_CONTENTSPEC_REQUIRED_IN_ELEMENTDECL"
        "DoctypedeclUnterminated", // 147, "MSG_DOCTYPEDECL_UNTERMINATED"
        "MSG_ELEMENT_TYPE_REQUIRED_IN_ELEMENTDECL",     // 148, "MSG_ELEMENT_TYPE_REQUIRED_IN_ELEMENTDECL"
        "MSG_ELEMENT_TYPE_REQUIRED_IN_MIXED_CONTENT",     // 149, "MSG_ELEMENT_TYPE_REQUIRED_IN_MIXED_CONTENT"
        "MSG_MARKUP_NOT_RECOGNIZED_IN_DTD",     // 150, "MSG_MARKUP_NOT_RECOGNIZED_IN_DTD"
        "AttributeValueUnterminated",   // 151, "MSG_ATTRIBUTE_VALUE_UNTERMINATED"
        "MSG_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED_IN_CHILDREN",     // 152, "MSG_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED_IN_CHILDREN"
        "MSG_ROOT_ELEMENT_TYPE_REQUIRED",     // 153, "MSG_ROOT_ELEMENT_TYPE_REQUIRED"
        "MSG_SPACE_REQUIRED_AFTER_PUBIDLITERAL_IN_EXTERNALID",     // 154, "MSG_SPACE_REQUIRED_AFTER_PUBIDLITERAL_IN_EXTERNALID"
        "MSG_SPACE_REQUIRED_BEFORE_CONTENTSPEC_IN_ELEMENTDECL",     // 155, "MSG_SPACE_REQUIRED_BEFORE_CONTENTSPEC_IN_ELEMENTDECL"
        "MSG_SPACE_REQUIRED_BEFORE_ELEMENT_TYPE_IN_ELEMENTDECL",     // 156, "MSG_SPACE_REQUIRED_BEFORE_ELEMENT_TYPE_IN_ELEMENTDECL"
        "MSG_SPACE_REQUIRED_BEFORE_NOTATION_NAME_IN_UNPARSED_ENTITYDECL",     // 157, "MSG_SPACE_REQUIRED_BEFORE_NOTATION_NAME_IN_UNPARSED_ENTITYDECL"
        "MSG_SPACE_REQUIRED_BEFORE_PUBIDLITERAL_IN_EXTERNALID",     // 158, "MSG_SPACE_REQUIRED_BEFORE_PUBIDLITERAL_IN_EXTERNALID"
        "MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL",     // 159, "MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL"
        "MSG_SPACE_REQUIRED_BEFORE_SYSTEMLITERAL_IN_EXTERNALID",     // 160, "MSG_SPACE_REQUIRED_BEFORE_SYSTEMLITERAL_IN_EXTERNALID"
        "ReferenceNotInOneEntity",      // 161, "MSG_REFERENCE_NOT_IN_ONE_ENTITY"
        "CommentNotInOneEntity",        // 162, "MSG_COMMENT_MUST_BEGIN_AND_END_IN_THE_SAME_ENTITY"
        "CommentUnterminated",          // 163, "MSG_COMMENT_UNTERMINATED"
        "PIUnterminated",               // 164, "MSG_PI_UNTERMINATED"
        "PINotInOneEntity",             // 165, "MSG_PI_MUST_BEGIN_AND_END_IN_THE_SAME_ENTITY"
        "ReferenceUnterminated",        // 166, "MSG_REFERENCE_UNTERMINATED"
        "PrefixDeclared",               // 167, "MSG_PREFIX_DECLARED"

        // ...
        ""                              //
    };

    public static final int
        VC_ROOT_ELEMENT_TYPE = 1,           // 2.8 VC: Root Element Type
        VC_IDREF = 2,                       // 3.3.1 VC: IDREF
        VC_NAME_TOKEN = 3,                  // 3.3.1 VC: Name Token
        P17_RESERVED_PITARGET = 4,          // 2.6 [17] PITarget matching [Xx][Mm][Ll] is reserved
        P16_WHITESPACE_REQUIRED = 5,        // 2.6 [16] White space required between PITarget and data
        P16_INVALID_CHARACTER = 6,          // 2.6 [16] Invalid character in PI data
        P15_DASH_DASH = 7,                  // 2.5 [15] The string "--" must not occur within comments
        P15_INVALID_CHARACTER = 8,          // 2.5 [15] Invalid character in comment
        WFC_LEGAL_CHARACTER = 9,            // 4.1 [66] WFC: Legal Character
        P10_INVALID_CHARACTER = 10,         // 2.3 [10] Invalid character in AttValue
        WFC_NO_LESSTHAN_IN_ATTVALUE = 11,   // 3.1 [41] WFC: No < in Attribute Values
        P10_QUOTE_REQUIRED = 12,             // 2.3 [10] No quote delimiter in AttValue
        P68_NAME_REQUIRED = 13,              // 4.1 [68] Name missing in EntityRef
        P68_SEMICOLON_REQUIRED = 14,         // 4.1 [68] An EntityRef must end with a ';'
        P66_DIGIT_REQUIRED = 15,             // 4.1 [66] A "&#" CharRef must contain at least one decimal digit
        P66_HEXDIGIT_REQUIRED = 16,          // 4.1 [66] A "&#x" CharRef must contain at least one hexadecimal digit
        P66_SEMICOLON_REQUIRED = 17,         // 4.1 [66] A CharRef must end with a ';'
        P11_QUOTE_REQUIRED = 18,             // 2.3 [11] No quote delimiter in SystemLiteral
        P11_INVALID_CHARACTER = 19,         // 2.3 [11] Invalid character in SystemLiteral
        P12_QUOTE_REQUIRED = 20,             // 2.3 [12] No quote delimiter in PubidLiteral
        P12_INVALID_CHARACTER = 21,         // 2.3 [12] Invalid character in PubidLiteral
        P62_UNTERMINATED = 22,              // 3.4 [62] Included conditional sections must end with "]]>"
        P63_UNTERMINATED = 23,              // 3.4 [63] Excluded conditional sections must end with "]]>"
        P65_INVALID_CHARACTER = 24,         // 3.4 [64] Invalid character in excluded conditional section
        P40_UNTERMINATED = 25,              // 3.1 [40] Element type must be followed by attributes, ">" or "/>"
        P41_EQ_REQUIRED = 26,                // 3.1 [41] Attribute name must be followed by an '=' character
        WFC_UNIQUE_ATT_SPEC = 27,           // 3.1 [40] [44] Attribute must only appear once
        P77_ENCODINGDECL_REQUIRED = 28,      // 4.3.1 [77] The encoding declaration is not optional
        P23_VERSIONINFO_REQUIRED = 29,       // 2.8 [23] The version is not optional
        P24_EQ_REQUIRED = 30,                // 2.8 [24] An '=' is required after the version
        P32_EQ_REQUIRED = 31,                // 2.9 [32] An '=' is required in a standalone document declaration
        P80_EQ_REQUIRED = 32,                // 4.3.3 [80] An '=' is required in an encoding declaration
        P24_QUOTE_REQUIRED = 33,             // 2.8 [24] The version is a quoted string
        P32_QUOTE_REQUIRED = 34,             // 2.9 [32] The standalone document declaration value is a quoted string
        P80_QUOTE_REQUIRED = 35,             // 4.3.3 [80] The encoding name value is a quoted string
        P26_INVALID_CHARACTER = 36,         // 2.8 [26] The version contained an invalid XML character
        P32_INVALID_CHARACTER = 37,         // 2.9 [32] The standalone document declaration value contained an invalid XML character
        P81_INVALID_CHARACTER = 38,         // 4.3.3 [81] The encoding name value contained an invalid XML character
        P26_INVALID_VALUE = 39,             // 2.8 [26] The version was not in the correct format
        P26_NOT_SUPPORTED = 40,             // 2.8 [26] The version specified is not supported
        P80_WHITESPACE_REQUIRED = 41,       // 4.3.3 [80] Whitespace required between version and encoding
        P81_INVALID_VALUE = 42,             // 4.3.3 [81] The encoding name value was not in the correct format
        P32_INVALID_VALUE = 43,             // 2.9 [32] The standalone document declaration value was not "yes" or "no"
        P23_UNTERMINATED = 44,              // 2.8 [23] An XML declaration must end with "?>"
        P77_UNTERMINATED = 45,              // 4.3.1 [77] A text declaration must end with "?>"
        P28_INVALID_CHARACTER = 46,         // 2.8 [28] Invalid character in the internal subset of the DTD
        P30_INVALID_CHARACTER = 47,         // 2.8 [30] Invalid character in the external subset or an external entity within DTD
        P9_INVALID_CHARACTER = 48,          // 2.3 [9] Invalid character in EntityValue
        P51_UNTERMINATED = 49,              // 3.2.2 [51] Mixed content model with element types must end with ")*"
        P69_NAME_REQUIRED = 50,              // 4.1 [69] Name missing in PEReference
        P69_SEMICOLON_REQUIRED = 51,         // 4.1 [69] An PEReference must end with a ';'
        P75_INVALID = 52,                   // 4.2.2 [75] An ExternalId must begin with either "SYSTEM" or "PUBLIC"
        WFC_PES_IN_INTERNAL_SUBSET = 53,    // 2.8 [28] PEReferences in the internal subset cannot occur within markup declarations
        P22_INVALID_CHARACTER = 54,         // 2.8 [22] Invalid character in prolog
        P27_INVALID_CHARACTER = 55,         // 2.8 [27] Invalid character in Misc
        P20_INVALID_CHARACTER = 56,         // 2.7 [20] Invalid character in CDSect
        P43_INVALID_CHARACTER = 57,         // 3.1 [43] Invalid character in content
        P39_UNTERMINATED = 58,              // 3 [39] Element type must be followed by attributes, ">" or "/>"
        P42_UNTERMINATED = 59,              // 3.1 [42] end-tag must end with '>'
        P81_NOT_SUPPORTED = 60,             // 4.3.3 [81] The encoding is not supported
        WFC_ENTITY_DECLARED = 61,           // 4.1 [68] The entity was referenced, but not declared
        VC_ENTITY_DECLARED = 62,            // 4.1 [68] The entity was referenced, but not declared
        WFC_PARSED_ENTITY = 63,             // 4.1 [68] An unparsed entity was referenced
        WFC_NO_EXTERNAL_ENTITY_REFERENCES = 64, // 3.1 [42] reference to external entity in AttValue
        P33_INVALID = 65,                   // 2.12 [33] xml:lang attribute value must match LanguageID production
        P18_UNTERMINATED = 66,              // 2.7 [18] CDATA sections must end with "]]>"
        VC_NO_DUPLICATE_TYPES = 67,         // 3.2.2 [51] The same type must not appear more than once in a mixed content declaration
        P78_NOT_WELLFORMED = 68,            // 4.3.2 [78] 
        VC_ID_ATTRIBUTE_DEFAULT = 69,       // 3.3.1 [54] 
        P53_NAME_REQUIRED = 70,              // 3.3 [53] 
        P53_ATTTYPE_REQUIRED = 71,           // 3.3 [53] 
        P81_REQUIRED = 72,                  // 4.3.3 [81] 
        WFC_NO_RECURSION = 73,              // 4.1 [68] 
        VC_PROPER_DECLARATION_PE_NESTING = 74, // 2.8 [29] 
        VC_PROPER_GROUP_PE_NESTING = 75,    // 3.2.1 [47] 
        VC_ID = 76,                         // 3.3.1 [56] 
        VC_ENTITY_NAME = 77,                // 3.3.1 [56] 
        VC_ATTRIBUTE_VALUE_TYPE = 78,       // 3.1 [41] 
        VC_ELEMENT_VALID = 79,              // 3 [39] 
        VC_STANDALONE_DOCUMENT_DECLARATION = 80, // 2.9 [32] 
        VC_ONE_ID_PER_ELEMENT_TYPE = 81,    // 3.3.1 [56] 
        VC_UNIQUE_ELEMENT_TYPE_DECLARATION = 82, // 3.2 [45] 
        P45_UNDECLARED_ELEMENT_IN_CONTENTSPEC = 83, // 3.2 [45] 

        VC_NOTATION_ATTRIBUTES = 84,
        P53_DUPLICATE = 85,
        VC_ENUMERATION = 86,
        VC_FIXED_ATTRIBUTE_DEFAULT = 87,
        VC_REQUIRED_ATTRIBUTE = 88,
        VC_NOTATION_DECLARED = 89,
        P58_NAME_REQUIRED = 90,
        P58_UNTERMINATED = 91,
        P59_NMTOKEN_REQUIRED = 92,
        P59_UNTERMINATED = 93,
        P70_SPACE = 94,
        P70_REQUIRED_NAME = 95,
        P70_REQUIRED_SPACE = 96,
        P71_UNTERMINATED = 97,
        P72_SPACE = 98,
        P72_UNTERMINATED = 99,
        P76_REQUIRED = 100,
        P82_NAME_REQUIRED = 101,
        P82_SPACE_REQUIRED = 102,
        P82_UNTERMINATED = 103,
        P14_INVALID = 104,
        P16_PITARGET_REQUIRED = 105,
        P16_REQUIRED = 106,
        P1_ELEMENT_REQUIRED = 107,
        P22_NOT_RECOGNIZED = 108,
        P27_NOT_RECOGNIZED = 109,
        P43_NOT_RECOGNIZED = 110,
        P52_ELEMENT_TYPE_REQUIRED = 111,
        P52_SPACE_REQUIRED = 112,
        P53_SPACE_REQUIRED = 113,
        P58_OPEN_PAREN_REQUIRED = 114,
        P58_SPACE_REQUIRED = 115,
        P60_SPACE_REQUIRED = 116,
        S2_10_DECLARATION_ILLEGAL = 117,
        P39_ELEMENT_TYPE_REQUIRED = 118,
        P28_ROOT_ELEMENT_TYPE_REQUIRED = 119,
        P28_SPACE_REQUIRED = 120,
        P28_UNTERMINATED = 121,
        P29_NOT_RECOGNIZED = 122,
        P45_CONTENTSPEC_REQUIRED = 123,
        P45_ELEMENT_TYPE_REQUIRED = 124,
        P45_SPACE_REQUIRED = 125,
        P45_UNTERMINATED = 126,
        P47_CLOSE_PAREN_REQUIRED = 127,
        P47_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED = 128,
        P51_CLOSE_PAREN_REQUIRED = 129,
        P51_ELEMENT_TYPE_REQUIRED = 130,
        P75_SPACE_REQUIRED = 131,
        P76_SPACE_REQUIRED = 132,
        P15_UNTERMINATED = 133,
        P16_UNTERMINATED = 134,
        P67_UNTERMINATED = 135,
        P10_UNTERMINATED = 136,
        P22_XMLDECL_MUST_BE_FIRST = 137,
        P30_TEXTDECL_MUST_BE_FIRST = 138,
        P5_INVALID_CHARACTER = 139,
        P11_UNTERMINATED = 140,
        P12_UNTERMINATED = 141,
        P11_URI_FRAGMENT = 142,
        VC_ONE_NOTATION_PER_ELEMENT_TYPE = 143,
        NC_PREFIX_DECLARED = 144,

        // ...
        CONSTRAINT_MAX_CODE = 200;

/*
    private static final Constraint[] fgConstraints = {
        new Constraint(null, null, null, null),
    // VC_ROOT_ELEMENT_TYPE = 1
        new Constraint("2.8", "", "2.8 VC: Root Element Type",
                       "Validity Constraint: Root Element Type\n" +
                       "The Name in the document type declaration must match the element type of the\n" +
                       "root element."),
    // VC_IDREF = 2
        new Constraint("3.3.1 2.3", "[56] [6]", "3.3.1 VC: IDREF",
                       "Validity Constraint: IDREF\n" +
                       "[56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'\n" +
                       "Values of type IDREF must match the Name production, and values of type\n" +
                       "IDREFS must match Names; each Name must match the value of an ID attribute\n" +
                       "on some element in the XML document; i.e. IDREF values must match the value\n" +
                       "of some ID attribute."),
    // VC_NAME_TOKEN = 3
        new Constraint("3.3.1 2.3", "[56] [8]", "3.3.1 VC: Name Token",
                       "Validity Constraint: Name Token\n" +
                       "Values of type NMTOKEN must match the Nmtoken production; values of type\n" +
                       "NMTOKENS must match Nmtokens."),
    // P17_RESERVED_PITARGET = 4
        new Constraint("2.6", "[17]", "2.6 [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))",
                       "[17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))\n" +
                       "The target names \"XML\", \"xml\", and so on are reserved for standardization\n" +
                       "in this or future versions of this specification."),
    // P16_WHITESPACE_REQUIRED = 5
        new Constraint("2.6 2.3", "[16] [3]", "2.6 [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'",
                       "[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'\n" +
                       "[3] S ::= (#x20 | #x9 | #xD | #xA)+\n" +
                       "White space is required between the PITarget and any additional characters\n" +
                       "that are to be passed through to the application."),
    // P16_INVALID_CHARACTER = 6
        new Constraint("2.6 2.2", "[16] [2]", "2.6 [2] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'",
                       "[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'\n" +
                       "[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]\n" +
                       "Processing instruction data is required to contain legal XML characters."),
    // P15_DASH_DASH = 7
        new Constraint("2.5", "[15]", "2.5 [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'",
                       "[15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'\n" +
                       "For compatibility, the string \"--\" (double-hyphen) must not occur within comments."),
    // P15_INVALID_CHARACTER = 8
        new Constraint("2.5 2.2", "[15] [2]", "2.5 [2] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'",
                       "[15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'\n" +
                       "[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]\n" +
                       "Comments are required to contain legal XML characters."),
    // WFC_LEGAL_CHARACTER = 9
        new Constraint("4.1", "[66] [2]", "4.1 WFC: Legal Character",
                       "Well-Formedness Constraint: Legal Character\n" +
                       "[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'\n" +
                       "[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]\n" +
                       "Characters referred to using character references must match the production\n" +
                       "for Char."),
    // P10_INVALID_CHARACTER = 10
        new Constraint("2.3", "[10]", "2.3 [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"",
                       "[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n" +
                       "Attribute values are required to contain legal XML characters."),
    // WFC_NO_LESSTHAN_IN_ATTVALUE = 11
        new Constraint("3.1 2.3", "[41] [10]", "3.1 WFC: No < in Attribute Values",
                       "Well-Formedness Constraint: No < in Attribute Values\n" +
                       "[41] Attribute ::= Name Eq AttValue\n" +
                       "[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n" +
                       "The replacement text of any entity referred to directly or indirectly in an\n" +
                       "attribute value (other than \"&lt;\") must not contain a <."),
    // P10_QUOTE_REQUIRED = 12
        new Constraint("2.3", "[10]", "2.3 [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"",
                       "[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n" +
                       "Attribute values are specified using quoted strings."),
    // P68_NAME_REQUIRED = 13
        new Constraint("4.1", "[68]", "4.1 [68] EntityRef ::= '&' Name ';'",
                       "[68] EntityRef ::= '&' Name ';'\n" +
                       "The '&' delimiter must be followed by a valid Name in an entity reference."),
    // P68_SEMICOLON_REQUIRED = 14
        new Constraint("4.1", "[68]", "4.1 [68] EntityRef ::= '&' Name ';'",
                       "[68] EntityRef ::= '&' Name ';'\n" +
                       "An entity reference must end with a ';' delimiter."),
    // P66_DIGIT_REQUIRED = 15
        new Constraint("4.1", "[66]", "4.1 [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'",
                       "[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'\n" +
                       "If the character reference begins with \"&#\", not \"&#x\", the digits up\n" +
                       "to the terminating ; provide a decimal representation of the character's\n" +
                       "code point in ISO/IEC 10646."),
    // P66_HEXDIGIT_REQUIRED = 16
        new Constraint("4.1", "[66]", "4.1 [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'",
                       "[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'\n" +
                       "If the character reference begins with \"&#x\", the digits and letters up to\n" +
                       "the terminating ; provide a hexadecimal representation of the character's\n" +
                       "code point in ISO/IEC 10646."),
    // P66_SEMICOLON_REQUIRED = 17
        new Constraint("4.1", "[66]", "4.1 [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'",
                       "[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'\n" +
                       "A character reference must end with a ';' delimiter."),
    // P11_QUOTE_REQUIRED = 18
        new Constraint("2.3", "[11]", "2.3 [11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")",
                       "[11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")\n" +
                       "System identifiers are specified using quoted strings."),
    // P11_INVALID_CHARACTER = 19
        new Constraint("2.3", "[11]", "2.3 [11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")",
                       "[11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")\n" +
                       "System identifiers are required to contain legal XML characters."),
    // P12_QUOTE_REQUIRED = 20
        new Constraint("2.3", "[12]", "2.3 [12] PubidLiteral ::= '\"' PubidChar* '\"' | \"'\" (PubidChar - \"'\")* \"'\"",
                       "[12] PubidLiteral ::= '\"' PubidChar* '\"' | \"'\" (PubidChar - \"'\")* \"'\"\n" +
                       "Public identifiers are specified using quoted strings."),
    // P12_INVALID_CHARACTER = 21
        new Constraint("2.3", "[13]", "2.3 [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]",
                       "[13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]\n" +
                       "Public identifiers must consist of PubidChar characters."),
    // P62_UNTERMINATED = 22
        new Constraint("3.4", "[62]", "3.4 [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'",
                       "[62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'\n" +
                       "Included conditional section must be terminated by \"]]>\"."),
    // P63_UNTERMINATED = 23
        new Constraint("3.4", "[63]", "3.4 [63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'",
                       "[63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'\n" +
                       "Excluded conditional sections must be terminated by \"]]>\"."),
    // P65_INVALID_CHARACTER = 24
        new Constraint("3.4", "[65]", "3.4 [65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*)",
                       "[65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*)\n" +
                       "Excluded conditional sections are required to contain legal XML characters."),
    // P40_UNTERMINATED = 25
        new Constraint("3.1", "[40]", "3.1 [40] STag ::= '<' Name (S Attribute)* S? '>'",
                       "[40] STag ::= '<' Name (S Attribute)* S? '>'\n" +
                       "[39] element ::= EmptyElemTag | STag content ETag\n" +
                       "[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'\n" +
                       "Element type name must be followed by Attribute, \">\" or \"/>\"."),
    // P41_EQ_REQUIRED = 26
        new Constraint("3.1", "[41]", "3.1 [41] Attribute ::= Name Eq AttValue",
                       "[41] Attribute ::= Name Eq AttValue\n" +
                       "[25] Eq ::= S? '=' S?\n" +
                       "Attribute name must be followed by an '=' character."),
    // WFC_UNIQUE_ATT_SPEC = 27
        new Constraint("3.1", "[40] [44]", "3.1 WFC: Unique Att Spec",
                       "Well-Formedness Constraint: Unique Att Spec\n" +
                       "[40] STag ::= '<' Name (S Attribute)* S? '>'\n" +
                       "[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'\n" +
                       "No attribute name may appear more than once in the same start-tag or\n" +
                       "empty-element tag."),
    // P77_ENCODINGDECL_REQUIRED = 28
        new Constraint("4.3.1", "[77]", "4.3.1 [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'",
                       "[77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'\n" +
                       "The encoding declaration is required in a text declaration."),
    // P23_VERSIONINFO_REQUIRED = 29
        new Constraint("2.8", "[23]", "2.8 [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'",
                       "[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'\n" +
                       "The version is required in an XML declaration."),
    // P24_EQ_REQUIRED = 30
        new Constraint("2.8", "[24]", "2.8 [24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')",
                       "[24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')\n" +
                       "[25] Eq ::= S? '=' S?\n" +
                       "The '=' character must follow \"version\" in VersionInfo."),
    // P32_EQ_REQUIRED = 31
        new Constraint("2.9", "[32]", "2.9 [32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')",
                       "[32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')\n" +
                       "[25] Eq ::= S? '=' S?\n" +
                       "The '=' character must follow \"standalone\" in SDDecl."),
    // P80_EQ_REQUIRED = 32
        new Constraint("4.3.3", "[80]", "4.3.3 [80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\")",
                       "[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\")\n" +
                       "[25] Eq ::= S? '=' S?\n" +
                       "The '=' character must follow \"encoding\" in EncodingDecl."),
    // P24_QUOTE_REQUIRED = 33
        new Constraint("2.8", "[24]", "2.8 [24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')",
                       "[24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')\n" +
                       "The version is specified using a quoted string."),
    // P32_QUOTE_REQUIRED = 34
        new Constraint("2.9", "[32]", "2.9 [32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')",
                       "[32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')\n" +
                       "The standalone document declaration value is specified using a quoted string."),
    // P80_QUOTE_REQUIRED = 35
        new Constraint("4.3.3", "[80]", "4.3.3 [80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\")",
                       "[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\")\n" +
                       "The encoding name value is specified using a quoted string."),
    // P26_INVALID_CHARACTER = 36
        new Constraint("2.8", "[26]", "2.8 [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+",
                       "[26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+\n" +
                       "The version is required to contain legal XML characters.."),
    // P32_INVALID_CHARACTER = 37
        new Constraint("2.9", "[32]", "2.9 [32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')",
                       "[32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')\n" +
                       "The standalone document declaration value is required to contain legal XML characters."),
    // P81_INVALID_CHARACTER = 38
        new Constraint("4.3.3", "[81]", "4.3.3 [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*",
                       "[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*\n" +
                       "The encoding name value is required to contain legal XML characters."),
    // P26_INVALID_VALUE = 39
        new Constraint("2.8", "[26]", "2.8 [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+",
                       "[26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+\n" +
                       "The version value must match the production for VersionNum."),
    // P26_NOT_SUPPORTED = 40
        new Constraint("2.8", "[26]", "2.8 [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+",
                       "[26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+\n" +
                       "Processors may signal an error if they receive documents labeled with versions\n" +
                       "they do not support."),
    // P80_WHITESPACE_REQUIRED = 41
        new Constraint("4.3.3", "[80]", "4.3.3 [80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\")",
                       "[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\")\n" +
                       "Whitespace is required between the version and the encoding declaration."),
    // P81_INVALID_VALUE = 42
        new Constraint("4.3.3", "[81]", "4.3.3 [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*",
                       "[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*\n" +
                       "The encoding name value must match the production for EncName."),
    // P32_INVALID_VALUE = 43
        new Constraint("2.9", "[32]", "2.9 [32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')",
                       "[32] SDDecl ::= S 'standalone' Eq (\"'\" ('yes' | 'no') \"'\" | '\"' ('yes' | 'no') '\"')\n" +
                       "The standalone document declaration must have a value of \"yes\" or \"no\"."),
    // P23_UNTERMINATED = 44
        new Constraint("2.8", "[23]", "2.8 [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'",
                       "[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'\n" +
                       "The XML declaration must be terminated by \"?>\"."),
    // P77_UNTERMINATED = 45
        new Constraint("4.3.1", "[77]", "4.3.1 [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'",
                       "[77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'\n" +
                       "The text declaration must be terminated by \"?>\"."),
    // P28_INVALID_CHARACTER = 46
        new Constraint("2.8", "[28]", "2.8 [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>'",
                       "[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>'\n" +
                       "The internal subset of the DTD is required to contain legal XML characters."),
    // P30_INVALID_CHARACTER = 47
        new Constraint("2.8", "[30]", "2.8 [30] extSubset ::= TextDecl? extSubsetDecl",
                       "[30] extSubset ::= TextDecl? extSubsetDecl\n" +
                       "[31] extSubsetDecl ::= ( markupdecl | conditionalSect | PEReference | S )*\n" +
                       "External entities in the DTD are required to contain legal XML characters."),
    // P9_INVALID_CHARACTER = 48
        new Constraint("2.3", "[9]", "2.3 [9] EntityValue ::= '\"' ([^%&\"] | PEReference | Reference)* '\"' | \"'\" ([^%&'] | PEReference | Reference)* \"'\"",
                       "[9] EntityValue ::= '\"' ([^%&\"] | PEReference | Reference)* '\"' | \"'\" ([^%&'] | PEReference | Reference)* \"'\"\n" +
                       "An entity value is required to contain legal XML characters."),
    // P51_UNTERMINATED = 49
        new Constraint("3.2.2", "[51]", "3.2.2 [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'",
                       "[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'\n" +
                       "A mixed content model with child element types must be terminated by \")*\"."),
    // P69_NAME_REQUIRED = 50
        new Constraint("4.1", "[69]", "4.1 [69] PEReference ::= '%' Name ';'",
                       "[69] PEReference ::= '%' Name ';'\n" +
                       "The '&' delimiter must be followed by a valid Name in a parameter entity reference."),
    // P69_SEMICOLON_REQUIRED = 51
        new Constraint("4.1", "[69]", "4.1 [69] PEReference ::= '%' Name ';'",
                       "[69] PEReference ::= '%' Name ';'\n" +
                       "A parameter entity reference must end with a ';' delimiter."),
    // P75_INVALID = 52
        new Constraint("4.2.2", "[75]", "4.2.2 [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral",
                       "[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral\n" +
                       "An external entity declaration must begin with either \"SYSTEM\" or \"PUBLIC\"."),
    // WFC_PES_IN_INTERNAL_SUBSET = 53
        new Constraint("2.8", "[40] [44]", "2.8 WFC: PEs in Internal Subset",
                       "Well-Formedness Constraint: PEs in Internal Subset\n" +
                       "[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>'\n" +
                       "In the internal DTD subset, parameter-entity references can occur only where\n" +
                       "markup declarations can occur, not within markup declarations."),
    // P22_INVALID_CHARACTER = 54
        new Constraint("2.8", "[22]", "2.8 [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?",
                       "[22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?\n" +
                       "The prolog is required to contain legal XML characters."),
    // P27_INVALID_CHARACTER = 55
        new Constraint("2.8", "[27]", "2.8 [27] Misc ::= Comment | PI |  S",
                       "[27] Misc ::= Comment | PI |  S\n" +
                       "The markup after the end of the element content is required to contain legal XML characters."),
    // P20_INVALID_CHARACTER = 56
        new Constraint("2.7", "[20]", "2.7 [20] CData ::= (Char* - (Char* ']]>' Char*))",
                       "[20] CData ::= (Char* - (Char* ']]>' Char*))\n" +
                       "CDATA sections are required to contain legal XML characters."),
    // P43_INVALID_CHARACTER = 57
        new Constraint("3.1", "[43]", "3.1 [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*",
                       "[43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*\n" +
                       "The content of elements is required to contain legal XML characters."),
    // P39_UNTERMINATED = 58
        new Constraint("3", "[39]", "3 [39] element ::= EmptyElemTag | STag content ETag",
                       "[39] element ::= EmptyElemTag | STag content ETag\n" +
                       "The end of every element that begins with a start-tag must be marked by an\n" +
                       "end-tag containing a name that echoes the element's type as given in the\n" +
                       "start-tag."),
    // P42_UNTERMINATED = 59
        new Constraint("3.1", "[42]", "3.1 [42] ETag ::= '</' Name S? '>'",
                       "[42] ETag ::= '</' Name S? '>'\n" +
                       "An end-tag must be terminated by a '>' delimiter."),
    // P81_NOT_SUPPORTED = 60
        new Constraint("4.3.3", "[81]", "4.3.3 [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*",
                       "[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*\n" +
                       "It is a fatal error when an XML processor encounters an entity with an\n" +
                       "encoding that it is unable to process.\n"),
    // WFC_ENTITY_DECLARED = 61
        new Constraint("4.1", "[68]", "4.1 WFC: Entity Declared",
                       "Well-Formedness Constraint: Entity Declared\n" +
                       "[68] EntityRef ::= '&' Name ';'\n" +
                       "In a document without any DTD, a document with only an internal DTD subset\n" +
                       "which contains no parameter entity references, or a document with\n" +
                       "\"standalone='yes'\", the Name given in the entity reference must match that\n" +
                       "in an entity declaration, except that well-formed documents need not declare\n" +
                       "any of the following entities: amp, lt, gt, apos, quot. The declaration of a\n" +
                       "parameter entity must precede any reference to it. Similarly, the\n" +
                       "declaration of a general entity must precede any reference to it which\n" +
                       "appears in a default value in an attribute-list declaration. Note that if\n" +
                       "entities are declared in the external subset or in external parameter\n" +
                       "entities, a non-validating processor is not obligated to read and process\n" +
                       "their declarations; for such documents, the rule that an entity must be\n" +
                       "declared is a well-formedness constraint only if standalone='yes'."),
    // VC_ENTITY_DECLARED = 62
        new Constraint("4.1", "[68]", "4.1 VC: Entity Declared",
                       "Validity Constraint: Entity Declared\n" +
                       "[68] EntityRef ::= '&' Name ';'\n" +
                       "In a document with an external subset or external parameter entities with\n" +
                       "\"standalone='no'\", the Name given in the entity reference must match that in\n" +
                       "an entity declaration. For interoperability, valid documents should declare\n" +
                       "the entities amp, lt, gt, apos, quot, in the form specified in\n" +
                       "\"4.6 Predefined Entities\". The declaration of a parameter entity must\n" +
                       "precede any reference to it. Similarly, the declaration of a general entity\n" +
                       "must precede any reference to it which appears in a default value in an\n" +
                       "attribute-list declaration."),
    // WFC_PARSED_ENTITY = 63
        new Constraint("4.1", "[68]", "4.1 WFC: Parsed Entity",
                       "Well-Formedness Constraint: Parsed Entity\n" +
                       "[68] EntityRef ::= '&' Name ';'\n" +
                       "An entity reference must not contain the name of an unparsed entity.\n" +
                       "Unparsed entities may be referred to only in attribute values declared to be\n" +
                       "of type ENTITY or ENTITIES."),
    // WFC_NO_EXTERNAL_ENTITY_REFERENCES = 64
        new Constraint("3.1 2.3", "[41] [10]", "4.1 WFC: No External Entity References",
                       "Well-Formedness Constraint: No External Entity References\n" +
                       "[41] Attribute ::= Name Eq AttValue\n" +
                       "[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n" +
                       "[68] EntityRef ::= '&' Name ';'\n" +
                       "Attribute values cannot contain direct or indirect entity references to\n" +
                       "external entities."),
    // P33_INVALID = 65
        new Constraint("2.12", "[33]", "2.12 [33] LanguageID ::= Langcode ('-' Subcode)*",
                       "[33] LanguageID ::= Langcode ('-' Subcode)*\n" +
                       "[34] Langcode ::= ISO639Code |  IanaCode |  UserCode\n" +
                       "[35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z])\n" +
                       "[36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+\n" +
                       "[37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+\n" +
                       "[38] Subcode ::= ([a-z] | [A-Z])+\n" +
                       "An xml:lang attribute value must match the LanguageID production."),
    // P18_UNTERMINATED = 66
        new Constraint("2.7", "[18]", "2.7 [18] CDSect ::= CDStart CData CDEnd",
                       "[18] CDSect ::= CDStart CData CDEnd\n" +
                       "[19] CDStart ::= '<![CDATA['\n" +
                       "[20] CData ::= (Char* - (Char* ']]>' Char*))\n" +
                       "[21] CDEnd ::= ']]>'\n" +
                       "CDATA sections must be terminated by \"]]>\"."),
    // VC_NO_DUPLICATE_TYPES = 67
        new Constraint("3.2.2", "[51]", "3.2.2 VC: No Duplicate Types",
                       "Validity Constraint: No Duplicate Types\n" +
                       "[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'\n" +
                       "The same name must not appear more than once in a single mixed-content\n" +
                       "declaration."),
    // P78_NOT_WELLFORMED = 68
        new Constraint("4.3.2", "[78]", "4.3.2 [78] extParsedEnt ::= TextDecl? content",
                       "[78] extParsedEnt ::= TextDecl? content\n" +
                       "An internal general parsed entity is well-formed if its replacement text\n" +
                       "matches the production labeled content.\n\n" +
                       "A consequence of well-formedness in entities is that the logical and\n" +
                       "physical structures in an XML document are properly nested; no start-tag,\n" +
                       "end-tag, empty-element tag, element, comment, processing instruction,\n" +
                       "character reference, or entity reference can begin in one entity and end in\n" +
                       "another."),
    // VC_ID_ATTRIBUTE_DEFAULT = 69
        new Constraint("3.3.1 3.3", "[54] [53]", "3.3.1 VC: ID Attribute Default",
                       "Validity Constraint: ID Attribute Default\n" +
                       "[53] AttDef ::= S Name S AttType S DefaultDecl\n" +
                       "[54] AttType ::= StringType | TokenizedType | EnumeratedType\n" +
                       "[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)\n" +
                       "An ID attribute must have a declared default of #IMPLIED or #REQUIRED."),
    // P53_NAME_REQUIRED = 70
        new Constraint("3.3", "[53]", "3.3 [53] AttDef ::= S Name S AttType S DefaultDecl",
                       "[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'\n" +
                       "[53] AttDef ::= S Name S AttType S DefaultDecl\n" +
                       "In an attribute-list declaration, the Name in the AttDef rule is the name\n" +
                       "of the attribute."),
    // P53_ATTTYPE_REQUIRED = 71
        new Constraint("3.3", "[53]", "3.3 [53] AttDef ::= S Name S AttType S DefaultDecl",
                       "[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'\n" +
                       "[53] AttDef ::= S Name S AttType S DefaultDecl\n" +
                       "."),
    // P81_REQUIRED = 72
        new Constraint("4.3.3", "[81]", "4.3.3 [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*",
                       "[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*\n" +
                       "Parsed entities which are stored in an encoding other than UTF-8 or\n" +
                       "UTF-16 must begin with an XML declaration or a text declaration that\n" +
                       "contains an encoding declaration."),
    // WFC_NO_RECURSION = 73
        new Constraint("4.1", "[68]", "4.1 WFC: No Recursion",
                       "Well-Formedness Constraint: No Recursion\n" +
                       "[68] EntityRef ::= '&' Name ';'\n" +
                       "[69] PEReference ::= '%' Name ';'\n" +
                       "A parsed entity must not contain a recursive reference to itself, either\n" +
                       "directly or indirectly."),
    // VC_PROPER_DECLARATION_PE_NESTING = 74
        new Constraint("2.8", "[29]", "2.8 VC: Proper Declaration/PE Nesting",
                       "Validity Constraint: Proper Declaration/PE Nesting\n" +
                       "[29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment\n" +
                       "Parameter-entity replacement text must be properly nested with markup\n" +
                       "declarations. That is to say, if either the first character or the last\n" +
                       "character of a markup declaration (markupdecl above) is contained in the\n" +
                       "replacement text for a parameter-entity reference, both must be contained in\n" +
                       "the same replacement text."),
    // VC_PROPER_GROUP_PE_NESTING = 75
        new Constraint("3.2.1", "[47]", "3.2.1 VC: Proper Group/PE Nesting",
                       "Validity Constraint: Proper Group/PE Nesting\n" +
                       "[47] children ::= (choice | seq) ('?' | '*' | '+')?\n" +
                       "[48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?\n" +
                       "[49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')'\n" +
                       "[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'\n" +
                       "[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'\n" +
                       "Parameter-entity replacement text must be properly nested with parenthetized\n" +
                       "groups. That is to say, if either of the opening or closing parentheses in a\n" +
                       "choice, seq, or Mixed construct is contained in the replacement text for a\n" +
                       "parameter entity, both must be contained in the same replacement text."),
    // VC_ID = 76
        new Constraint("3.3.1", "[56]", "3.3.1 VC: ID",
                       "Validity Constraint: ID\n" +
                       "[56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'\n" +
                       "Values of type ID must match the Name production. A name must not appear\n" +
                       "more than once in an XML document as a value of this type; i.e., ID values\n" +
                       "must uniquely identify the elements which bear them."),
    // VC_ENTITY_NAME = 77
        new Constraint("3.3.1", "[56]", "3.3.1 VC: Entity Name",
                       "Validity Constraint: Entity Name\n" +
                       "[56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'\n" +
                       "Values of type ENTITY must match the Name production, values of type\n" +
                       "ENTITIES must match Names; each Name must match the name of an unparsed\n" +
                       "entity declared in the DTD."),
    // VC_ATTRIBUTE_VALUE_TYPE = 78
        new Constraint("3.1", "[41]", "3.1 VC: Attribute Value Type",
                       "Validity Constraint: Attribute Value Type\n" +
                       "[41] Attribute ::= Name Eq AttValue\n" +
                       "The attribute must have been declared; the value must be of the type\n" +
                       "declared for it."),
    // VC_ELEMENT_VALID = 79
        new Constraint("3", "[39]", "3 VC: Element Valid",
                       "Validity Constraint: Element Valid\n" +
                       "[39] element ::= EmptyElemTag | STag content ETag\n" +
                       "An element is valid if there is a declaration matching elementdecl where the\n" +
                       "Name matches the element type, and one of the following holds:\n\n" +
                       "  1. The declaration matches EMPTY and the element has no content.\n" +
                       "  2. The declaration matches children and the sequence of child elements\n" +
                       "     belongs to the language generated by the regular expression in the\n" +
                       "     content model, with optional white space (characters matching the\n" +
                       "     nonterminal S) between each pair of child elements.\n" +
                       "  3. The declaration matches Mixed and the content consists of character\n" +
                       "     data and child elements whose types match names in the content model.\n" +
                       "  4. The declaration matches ANY, and the types of any child elements have\n" +
                       "     been declared."),
    // VC_STANDALONE_DOCUMENT_DECLARATION = 80
        new Constraint("2.9", "[32]", "2.9 VC: Standalone Document Declaration",
                       "Validity Constraint: Standalone Document Declaration\n" +
                       "[32] SDDecl ::= S 'standalone' Eq ((\"'\" ('yes' | 'no') \"'\") | ('\"' ('yes' | 'no') '\"'))\n" +
                       "The standalone document declaration must have the value \"no\" if any external\n" +
                       "markup declarations contain declarations of:\n\n" +
                       "   * attributes with default values, if elements to which these attributes\n" +
                       "     apply appear in the document without specifications of values for these\n" +
                       "     attributes, or\n" +
                       "   * entities (other than amp, lt, gt, apos, quot), if references to those\n" +
                       "     entities appear in the document, or\n" +
                       "   * attributes with values subject to normalization, where the attribute\n" +
                       "     appears in the document with a value which will change as a result of\n" +
                       "     normalization, or\n" +
                       "   * element types with element content, if white space occurs directly\n" +
                       "     within any instance of those types."),
    // VC_ONE_ID_PER_ELEMENT_TYPE = 81
        new Constraint("3.3.1", "[56]", "3.3.1 VC: One ID per Element Type",
                       "Validity Constraint: One ID per Element Type\n" +
                       "[56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'\n" +
                       "No element type may have more than one ID attribute specified."),
    // VC_UNIQUE_ELEMENT_TYPE_DECLARATION = 82
        new Constraint("3.2", "[45]", "3.2 VC: Unique Element Type Declaration",
                       "Validity Constraint: Unique Element Type Declaration\n" +
                       "[45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'\n" +
                       "No element type may be declared more than once."),
    // P45_UNDECLARED_ELEMENT_IN_CONTENTSPEC = 83
        new Constraint("3.2", "[45]", "3.2 [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'",
                       "[45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'\n" +
                       "At user option, an XML processor may issue a warning when a declaration\n" +
                       "mentions an element type for which no declaration is provided, but this\n" +
                       "is not an error."),

    // VC_NOTATION_ATTRIBUTES = 84
        new Constraint("?.?", "[??]", "", ""),
    // P53_DUPLICATE = 85
        new Constraint("?.?", "[??]", "", ""),
    // VC_ENUMERATION = 86
        new Constraint("?.?", "[??]", "", ""),
    // VC_FIXED_ATTRIBUTE_DEFAULT = 87
        new Constraint("?.?", "[??]", "", ""),
    // VC_REQUIRED_ATTRIBUTE = 88
        new Constraint("?.?", "[??]", "", ""),
    // VC_NOTATION_DECLARED = 89
        new Constraint("?.?", "[??]", "", ""),
    // P58_NAME_REQUIRED = 90
        new Constraint("?.?", "[??]", "", ""),
    // P58_UNTERMINATED = 91
        new Constraint("?.?", "[??]", "", ""),
    // P59_NMTOKEN_REQUIRED = 92
        new Constraint("?.?", "[??]", "", ""),
    // P59_UNTERMINATED = 93
        new Constraint("?.?", "[??]", "", ""),
    // P70_SPACE = 94
        new Constraint("?.?", "[??]", "", ""),
    // P70_REQUIRED_NAME = 95
        new Constraint("?.?", "[??]", "", ""),
    // P70_REQUIRED_SPACE = 96
        new Constraint("?.?", "[??]", "", ""),
    // P71_UNTERMINATED = 97
        new Constraint("?.?", "[??]", "", ""),
    // P72_SPACE = 98
        new Constraint("?.?", "[??]", "", ""),
    // P72_UNTERMINATED = 99
        new Constraint("?.?", "[??]", "", ""),
    // P76_REQUIRED = 100
        new Constraint("?.?", "[??]", "", ""),
    // P82_NAME_REQUIRED = 101
        new Constraint("?.?", "[??]", "", ""),
    // P82_SPACE_REQUIRED = 102
        new Constraint("?.?", "[??]", "", ""),
    // P82_UNTERMINATED = 103
        new Constraint("?.?", "[??]", "", ""),
    // P14_INVALID = 104
        new Constraint("?.?", "[??]", "", ""),
    // P16_PITARGET_REQUIRED = 105
        new Constraint("?.?", "[??]", "", ""),
    // P16_REQUIRED = 106
        new Constraint("?.?", "[??]", "", ""),
    // P1_ELEMENT_REQUIRED = 107
        new Constraint("?.?", "[??]", "", ""),
    // P22_NOT_RECOGNIZED = 108
        new Constraint("?.?", "[??]", "", ""),
    // P27_NOT_RECOGNIZED = 109
        new Constraint("?.?", "[??]", "", ""),
    // P43_NOT_RECOGNIZED = 110
        new Constraint("?.?", "[??]", "", ""),
    // P52_ELEMENT_TYPE_REQUIRED = 111
        new Constraint("?.?", "[??]", "", ""),
    // P52_SPACE_REQUIRED = 112
        new Constraint("?.?", "[??]", "", ""),
    // P53_SPACE_REQUIRED = 113
        new Constraint("?.?", "[??]", "", ""),
    // P58_OPEN_PAREN_REQUIRED = 114
        new Constraint("?.?", "[??]", "", ""),
    // P58_SPACE_REQUIRED = 115
        new Constraint("?.?", "[??]", "", ""),
    // P60_SPACE_REQUIRED = 116
        new Constraint("?.?", "[??]", "", ""),
    // S2_10_DECLARATION_ILLEGAL = 117
        new Constraint("?.?", "[??]", "", ""),
    // P39_ELEMENT_TYPE_REQUIRED = 118
        new Constraint("?.?", "[??]", "", ""),
    // P28_ROOT_ELEMENT_TYPE_REQUIRED = 119
        new Constraint("?.?", "[??]", "", ""),
    // P28_SPACE_REQUIRED = 120
        new Constraint("?.?", "[??]", "", ""),
    // P28_UNTERMINATED = 121
        new Constraint("?.?", "[??]", "", ""),
    // P29_NOT_RECOGNIZED = 122
        new Constraint("?.?", "[??]", "", ""),
    // P45_CONTENTSPEC_REQUIRED = 123
        new Constraint("?.?", "[??]", "", ""),
    // P45_ELEMENT_TYPE_REQUIRED = 124
        new Constraint("?.?", "[??]", "", ""),
    // P45_SPACE_REQUIRED = 125
        new Constraint("?.?", "[??]", "", ""),
    // P45_UNTERMINATED = 126
        new Constraint("?.?", "[??]", "", ""),
    // P47_CLOSE_PAREN_REQUIRED = 127
        new Constraint("?.?", "[??]", "", ""),
    // P47_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED = 128
        new Constraint("?.?", "[??]", "", ""),
    // P51_CLOSE_PAREN_REQUIRED = 129
        new Constraint("?.?", "[??]", "", ""),
    // P51_ELEMENT_TYPE_REQUIRED = 130
        new Constraint("?.?", "[??]", "", ""),
    // P75_SPACE_REQUIRED = 131
        new Constraint("?.?", "[??]", "", ""),
    // P76_SPACE_REQUIRED = 132
        new Constraint("?.?", "[??]", "", ""),
    // P15_UNTERMINATED = 133
        new Constraint("?.?", "[??]", "", ""),
    // P16_UNTERMINATED = 134
        new Constraint("?.?", "[??]", "", ""),
    // P67_UNTERMINATED = 135
        new Constraint("?.?", "[??]", "", ""),
    // P10_UNTERMINATED = 136
        new Constraint("?.?", "[??]", "", ""),
    // P22_XMLDECL_MUST_BE_FIRST = 137
        new Constraint("?.?", "[??]", "", ""),
    // P30_TEXTDECL_MUST_BE_FIRST = 138
        new Constraint("?.?", "[??]", "", ""),
    // P5_INVALID_CHARACTER = 139
        new Constraint("?.?", "[??]", "", ""),
    // P11_UNTERMINATED = 140
        new Constraint("?.?", "[??]", "", ""),
    // P12_UNTERMINATED = 141
        new Constraint("?.?", "[??]", "", ""),
    // P11_URI_FRAGMENT = 142
        new Constraint("?.?", "[??]", "", ""),
    // VC_ONE_NOTATION_PER_ELEMENT_TYPE = 143
        new Constraint("3.3.1", "[58]", "VC: One Notation per Element Type",
                       "Validity Constraint: One Notation per Element Type\n" +
                       "[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'\n" +
                       "No element type may have more than one NOTATION attribute specified."),
    // NC_PREFIX_DECLARED = 144
        new Constraint("4.", "", "NC: Prefix Declared", ""),

        // ...
        new Constraint(null, null, null, null)
    };
 */
}

/*
class Constraint {
    String sections;
    String productions;
    String shortDesc;
    String longDesc;
    Constraint(String sections, String productions, String shortDesc, String longDesc) {
        this.sections = sections;
        this.productions = productions;
        this.shortDesc = shortDesc;
        this.longDesc = longDesc;
    }
}
 */
